検索

シーケンシャルデータを分析するためのパワフルなツール|Aster nPath分析


AsterのnPath分析は、シーケンシャルデータのパターンを解読するためのパワフルなツールです。Aster Communityには、シーケンシャルデータのパターン分析を行うためのクエリと結果を視覚化する数多くの例がアップされています。しかし、それらがAsterのパス分析の全貌ではありません。より多くの価値を創出するために必要なステップがさらにあります。今回は、nPathからの出力を受け取り、パス上の次のステップを予測するために使用されるモデルを構築する簡単なクエリをいくつか紹介します。

今回は、Aster Expressのデモ用のデータセット bank_web_clicks(銀行のWebサイト上でのクリックデータ)を使用しますが、実データを用いたnPath分析でも同様に機能します。ここでは、このデータから作成した簡単なツリー図を示し、銀行の顧客がこのWebサイトを閲覧したいくつかの経路を示しています。

このツリー図は、パスを視覚化し、より深い分析のためのパターンを発見するのに役立ちます。さらに、下記のような親ノード、子ノード、そのパスのカウント、パーセンテージに関するテーブルを持つことで、同様のカスタマージャーニーの他の顧客の行動を予測するモデルの基盤を形成することができます。「私の顧客が次に何をするのか?」にような質問に答えられるようになるでしょう。いくつかのステップで、親パスと次のステップ、計算したその確立をテーブルで出力することができます。

まず、Asterのpath_analyzer関数を紹介します。これはあなたのnPathクエリーからの出力を各親ノードからすべてのパスをカウントし、「group by」でパスごとにカウントします。この処理はツリーの一番下まで実行されます。nPathから「トップパスとそのカウント」を取得することは、nPathワークフローのとても標準的な使い方であり、簡単なクエリで簡単に実行できます。ここでは、'top_bank_paths'という新しいテーブルを作成します。また今回はトップ1000パスまでに制限します。

 create table top_bank_paths   distribute by replication  as  select path,count(*) as cnt  from bank_paths  group by 1 order by 2 desc  limit 1000  ;

その結果が下記です。

そして、この結果をPath_Analyzeで利用します。

 SELECT * FROM Path_Analyzer  (   ON (SELECT 1)   PARTITION BY 1   InputTable ('top_bank_paths')   OutputTable ('bank_path_analyzer_output')   --SeqColumn ('path') Aster v7.0   --CountColumn ('cnt') Aster v7.0   Seq('path') --Aster v6.20   Cnt('cnt') --Aster v6.20  );

構文はAster Analytics 7.0でSeqとCntのパラメータが少し変わってしまったので、上記の両方を含めています。ライブラリのバージョンに基づいて簡単にコメント/コメントを解除できます。また、path_analyzerを再実行する場合は、まず出力テーブルを削除する必要があります。この例では、次のようになります。

drop table bank_path_analyzer_output;

出力は少し冗長なですが、重要なフィールドは下記となります。

この「あまりに複雑ではない」SQLでは、親ノードごとに対応する「次の子ノード」とパーセントの計算をしたテーブルを作成できます。ここでは少し文字列の操作をしています。親フォーマットの最初の4文字をスキップし、同様に 'next_node'フィールドでもスキップし、 末尾を表す「]」をトリミングしています。また、ウィンドウ関数row_number()を使って各子をパーセンテージでランク付けし、後でトップ1または2の子ノードでフィルタリングすることもできます。

 create table top_bank_next_path   distribute by replication  as  select substring(N.parent from 4) as parent   ,P.depth   ,replace(substring(N.node from (3 + length(N.parent))),']','') as next_node   ,P.subpath_cnt as parent_cnt   ,N.subpath_cnt as next_cnt   ,(1.0 * N.subpath_cnt / P.subpath_cnt)::numeric(3,2) as probability   ,row_number() over (partition by N.parent order by N.subpath_cnt desc) as rank  from bank_path_analyzer_output N   ,bank_path_analyzer_output P  where P.depth > 0  and N.parent = P.node  ;

最後にようやく「私の顧客が次に何をするのか?」を顧客のカスタマージャーニーに基づきいくつかの解が得られます。次のクエリーで「30%以上の確立」で「20以上の類似したパスが発生している」、そして最も重要なのが「ランキング1位」である親と次のステップを見つけることができます。

 select parent,next_node   ,parent_cnt,probability  from demo.top_bank_next_path  where rank = 1  and probability > .3  and parent_cnt > 20  order by probability desc  limit 10  ;

以上、かなり簡単ですが、パスに関するデータから多くの質問に答えるために非常に便利な新しいテーブルを作成するための、Aster nPathワークフローによるパワフルな手順をご紹介しました。

本ブログは、Aster Communityブログの抄訳版です。

原文はこちらをご覧ください