#12 : Alteryxサンプルワークフロー「顧客反応モデリング(前編)」- Alteryx & Tableau 連携 Advent Calendar 2018
当エントリは『Alteryx&Tableau連携 Advent Calendar 2018』シリーズの12本目のエントリです。
- Alteryx & Tableau 連携 Advent Calendar 2018 - Qiita
- Alteryx & Tableau 連携 Advent Calendar 2018 | シリーズ | DevelopersIO
当エントリでは、Alteryx Designerの実行ワークフローサンプル「Customer Response Modeling(顧客反応モデリング)」の内容を紹介します。
目次
「本日のテーマ」概要紹介
AlteryxとTableauはそのツール特性から非常に相性が良く、製品間それぞれにパートナー企業としての(特集)ページが設けられています。
本日は、Alteryx Designerの「Sample Workflows」にて展開されている「Tableau Starter Kit」の中で、「Predictive Analytics」配下の「Customer Response Modeling(顧客反応モデリング)」というサンプルワークフローについて見ていきたいと思います。
このワークフローでは、Logistic regression tool(Logistic回帰ツール)を使用して『私が販売した製品を顧客が購入するかどうかは、どのように予測できますか?」』という様な質問に答えるための手順を解説しています。
1.はじめに
このワークフローでは、ロジスティック回帰ツールを使用して「販売した製品を顧客が購入するかどうかを予測する方法」にどの様に回答出来るかをガイドしています。
当セクションの以降のパートでは、ロジスティック回帰のためのデータの準備、ロジスティック回帰モデルの作成、および結果の評価について見ていきます。また、このワークフローではこの課題に応えるためのガイド付きワークフローが2つ用意されています。この内容については順を追って見ていきたいと思います。
2.ロジスティック回帰の適用ケース
ロジスティック回帰は「2つの可能な結果」を伴う質問に対して適用する事が出来ます。それぞれの結果について予測される確率を生成する事でこの質問に応えます。
ロジスティック回帰は2つの変数を含みます。1つ目は予測変数と呼ばれるもので、名前の通り予測を行うために用いられます。2つ目は目標変数と呼ばれるもので、我々が予測したい対象となります。予測変数は複数存在する可能性がありますが、目標変数は1つのみです。
「販売した製品を顧客が購入するかどうかを予測するにはどうすればよいですか」という質問は、当エントリで取り上げる「ロジスティック回帰」に適しています。この質問に対する結果は「顧客が製品を購入したか/しなかったか」のいずれかです。
具体的なケースを挙げてみましょう。ある企業が、食料品店を管理していて、販売したグルメソーダを顧客が購入するかどうかを予測したいと考えているとします。その企業は、お客様の購買行動を予測するために使用出来る、顧客に関する人口統計及び過去の販売データを持っています。こういった場合、ロジスティック回帰を使って結果を予測する事が可能です。
その他の例として「学生が卒業するかどうか」「特定の候補者に投票するかどうか」等を予測する...といった事も適用出来るでしょう。
3.Alteryxにおけるロジスティック回帰プロセスの定義
ロジスティック回帰プロセスには、主に4つのステップがあります。
-
- 1.データを準備
-
- 2.モデルの構築
-
- 3.モデルの評価
-
- 4.モデルを使用して新しい予測を実施
4.Step1:データの準備
有効なロジスティック回帰モデルを作成するには、データが次の条件を満たす必要があります。
-
- 1.データに欠損値を含めないこと
-
- 2.予測変数は、他の予測変数の線形結合でないこと
-
- 3.データセットには必要な変数だけが含まれていること(無関係の変数を含めてはならない)
-
- 4.各予測変数を追加するには、最低10個の追加サンプルが必要
-
- 5.独立変数は可能な限り正確に測定されていること
-
- 6.観測は独立し、外的影響は複数の観察に影響しないこと
5.Step2:モデルの構築
ロジスティック回帰モデルを作成する前に、関連するデータセットを2つのグループに分割する必要があります。「トレーニングデータ」と「テストデータ」です。
標準的なプラクティスでは、前者はデータセットの80%、後者は20%を使用します。モデルはトレーニングデータセットを使用して作成され、テストデータセットを使用して評価されます。データセット全体をモデルのトレーニングとテストに使用すると、モデルがデータセットをよくフィットさせるが、新しいデータには一般化しないため、データセットは2つのグループに分割されます。この問題は"オーバーフィッティング"と呼ばれ、別のテストデータセットを持つことでその問題を防ぐのに役立ちます。
6.Step3:モデルの評価
モデルは、スコアツールとテストデータセットを使用して評価できます。 スコアツールは、モデルとテストデータセットを使用してモデルの精度をチェックします。
Logistic RegressionツールのR出力は、モデルのパフォーマンスに関する有益な情報も提供します。
7.Step4:モデルを使用して新しい予測を作成
モデルが合理的に正確であると分かったら、モデルを使用して新しいデータ点の値を予測できます。
スコアツールを使用すると、新しいデータの予測を生成できます。
ワークフローの全体像
サンプルワークフローの全体像は以下となります。
ワークフローは2つあり、1つはこちらの「ロジスティック回帰のためのデータの準備」、
そしてもう1つはこちらの「ロジスティック回帰モデルの作成と評価」となります。
(注意)これらのワークフローを実行するには「Predictive Tools」と「R」をインストールしておく必要があります。
ワークフローを読み解く
ワークフロー:ロジスティック回帰のためのデータの準備
入力データの確認
まずは1つ目のワークフロー:「ロジスティック回帰のためのデータの準備」から。
このワークフローでは、入力データソースとして2つのデータセットが使用されます。
- 顧客の人口統計情報(Customer demographic info)
- 集約された顧客販売(Aggregated customer sales)
2つのデータセットをCustomer_IDで結合した後、Customer_IDは項目としては削除。
予測モデル作成のためのデータ検証(NULL値の置き換え)
予測モデルを作成するための最初のステップは、データがモデルの適切な形式にあるかどうかをチェックすることです。
ロジスティック回帰ツールでは、欠損値がないことが必要です。これを確認するためにSummarize Toolを使用して、データにNULL値があるかどうかを検証します。各フィールドにCountNullをアクションとして追加して構成。ワークフローを実行し、出力アンカーをクリックした結果、Store_visits_6mにNULL値があることがわかりました。
これらのNULL値は除去しておく必要があります。NULL値を除去する1つ目の方法は、Filter Toolを使用することです。そして、もう1つはSelect Toolを使用してデータが欠落しているフィールドを削除することです。
このアプローチは、データの大部分(33%以上)が欠落し、欠落したデータが比較的少数のフィールドに集中する状況の場合、適切な選択とされています。ですが今回のサンプルデータの場合、Number_store_visits_last_6_monthsの値のうち0.84%(5000件中42件)しか欠落していません。その結果、この例ではこのアプローチを使用しません。
今回のワークフローでは、この処理にImputation Toolを使用します。このツールを使うと、指定された列の問題のある数値(NULLなど)を、中央値やユーザー指定の値などの別の値に置き換える事が出来ます。
入力値に前述した結合データを設定し、置き換える対象の項目にStore_visits_6mを、置き換える際の条件にNULL()を指定します。それ以外の項目はそのままとします。
Histgram Toolでデータ分布を確認
Impute Toolを使ってデータを処理するには前以てデータの分布を調べておくとスムーズです。ヒストグラムツール(Histgram Tool)を使うと、対象の内容を視覚的に確認する事が出来ます。
対象フィールドにStore_visits_6mを選択し、ワークフローを実行後参照してみると、値がクラスタリングされている事が確認出来ます。
このような状況では、ヒストグラムの右側の値が平均値を上げてしまい、結果としてあまり意味をなさないデータとなってしまいます。このため、このワークフローでは代わりに「中央値」を用いています。ヒストグラムは、中央値も使用します。しかし、標準(値が中央近くに集中している)または均一(値が均等に分布している)分布を持つ場合、「平均」が良い選択となります。
線形回帰ツール(Linear Regression tool)
今回のケースでは、データに多重共線性(multicollinearity)を含むことはできません。用語の詳細な解説については以下情報等をご参照ください。
このケースでは、線形回帰ツール(Linear Regression tool)を使用して、多重共線性(multicollinearity)の存在を検出することができます。このツールでは、単純なモデルを作成して値を推定したり、線形リレーションシップに基づいて変数間の関係を評価したりします。
過去6か月間のドル買いの金額は、店舗訪問数の線形結合である可能性があります。線形結合の詳細については下記情報をご参照ください。
これをテストするには、Amount_purchased_6mとStore_visits_6mのターゲットを予測変数として線形回帰を実行します。モデル名にLinear_regressionを指定し、他のオプションはデフォルト値のままにします(モデル名に使用できる文字には制限があります)。
通常、最初の線形回帰を、目標変数が線形結合であると論理的に予測する予測変数に限定する方が良いです。うまくいけば、この段階では多重共線性(multicollinearity)のためにいくつかの変数を取り除くことができます。次に、残りのすべての変数を使って別の線形回帰を実行することができます。この時点では、より少ない変数しか持たないので、どの変数が多重共線性を引き起こしているのかを簡単に判別できます。
ブラウズ機能は予測ツールレポートでは機能しません。 線形回帰ツールの[R出力]に参照ツールを追加して出力を表示します。
ワークフローを実行すると、Multiple R-squared: 0.9467という数値を弾き出しました。これは非常に相関が高いということを意味します。この値が0.9より大きい場合、一般的には"多重共線性が存在する"と判断します。どの変数が共線性を引き起こしているのかを判断するには、係数表を調べる必要があります。この場合、Store_visits_6mは非常に重要であることがわかります。 その重要度は2.2 * 10 ^ -16未満です。
この時点で、多重共線性を防ぐために、ロジスティック回帰モデルから除外する変数を順番に決定する必要があります。顧客がグルメソーダを販売するかどうかを予測したいので、店舗訪問ではなく、購入に関する情報を予測しています。したがって、Amount_purchased_6mを維持し、Store_visits_6mを削除することを選択します。
最も厳しいアプローチは、Amount_purchased_6mを維持するモデルとStore_visits_6mを保存するモデルの2つのモデルを持つことです。 次に、2つのモデルの妥当性を比較することができます。ですがここではシンプルさのために、Amount_purchased_6mを維持してStore_visits_6mを削除します。
Selectツールを使用してStore_visits_6mを削除します。 ロジスティック回帰ツールでは、対象が文字列フィールドである必要があるため、このツールを使用してPurchased_sale_sodaを文字列に変更します。
モデル構築を進める前に、ロジスティック回帰ツールの入力データがどのような形を取るべきかを検討する必要があります。 現在、Mosaic_group列には19種類のカテゴリ(文字A〜S)があります。
複数のレベルを持つカテゴリ変数を使用するには、ロジスティック回帰によって、1つを除く各カテゴリのダミー変数が作成されます。ダミー変数は、カテゴリ変数を予測変数として使用できるので便利です。しかし、ダミー変数が多すぎると、オーバーフィットで問題が発生する可能性があります。幸いにも、数式ツールを使用して、多くのカテゴリを比較的少数の大きなカテゴリに単純化することができます。
私たちは、19のモザイクカテゴリーを3つの大きなグループに分類します。 「Likely」と呼ばれる最初のグループは、グルメソーダを購入する可能性が高い裕福な世帯の人々から構成されています。第2のグループ「平均」には、グルメソーダを購入する可能性がほぼ平均的な中産階級の世帯が含まれています。最後のグループ「Unlikely」は、限られた資金を素晴らしいグルメソーダに費やしたくない貧しい家族で構成されています。
この新しいフィールドを作成するには、数式ツールをキャンバスにドラッグ、出力フィールドの名前をMosaic_likelihoodとして初期化します。このフィールドは、値が異なる長さになる可能性があるため、サイズの変更も行います。(V_String/64桁)
状況の再確認&線形回帰再実行(と内容の確認)
完全な線形回帰を実行する前に、データが概要ワークフローにリストされているすべての要件を満たしていることを確認する必要があります。現時点での状況・内容は以下のようなものとなります。
- ロジスティック回帰ツールに提供されるデータに欠損値が無い: 補完ツールを使用して欠損値を取り除きました。
- データが多重共線性を示さない: 後続処理を経て、多重共線性が発生し得る可能性があるので、当ワークフローでの最後の線形回帰を実行した後、チェックする事にします。
- 必要な変数を正確に含んでいる: 利用可能なデータを反映した上で、この問題に関するすべてのデータが含まれていると判断できます。モデル評価段階まで待って、不要な変数が含まれているかどうかを確認する必要があります。
- 予測変数ごとに少なくとも10個のサンプルがある: 5000個のサンプルと3つの予測変数という状況のため、この条件は満たしています。
- 予測変数の測定にエラーがない: このデータはスタッフがすべての顧客データを正しく測定したと合理的に確信しています。なので、この時点ではこの基準を満たすためには何も出来ません。
- 観察は独立している: この前提の厳密なテストはこのキットの範囲外です。なので割愛。
前述最後のステップでは変数を削除しましたが、すべての多重共線性を排除したことまでは確かめることはできません。なので、改めて線形回帰を実行して内容を確認してみます。
1つ目の線形回帰ツール実行。まずモデル名(Distance_from_nearest_store)を指定します。 次に、目標変数としてDistance_from_nearest_storeを選択し、予測変数としてAmount_purchased_6mおよびMosaic_likelihoodを選択します。 他の設定オプションはチェックしないで、デフォルトのグラフィックオプションは変更しない状態とします。
2つ目の線形回帰ツール実行では別のモデル名(Amount_purchased_6m)を指定。次に、最終的な線形回帰の予測変数として、Amount_purchased_6mをターゲット変数にDistance_from_nearest_storeとMosaic_likelihoodを予測変数として選択します。その他のオプションそのままです。
それぞれの線形回帰ツールのR出力に参照ツールを追加し、ワークフローを実行して、これらの線形回帰の結果を確認します。1つ目の線形回帰ではmultiple R-squaredの値は0.0002249となりました。
そして2つ目の線形回帰ではmultiple R-squaredの値は0.0004175となりました。多重共線性の問題については解決出来たと言えそうです。
ワークフローの実行・Tableauワークブックの内容確認
画面右上の「Run」ボタン、または「Control」+「R」のショートカットでワークフローを実行。アウトプットとしてyxdb形式のデータが出力されました。
中身を確認してみます。線形回帰処理を経て処理された内容が以下の様な形でデータとして出力されていることを確認出来ました。
まとめ
という訳で、『Alteryx & Tableau 連携 Advent Calendar 2018 』12本目、「Customer Response Modeling(顧客反応モデリング)」のご紹介でした。
当サンプルワークフローはもう1つ、実行ワークフローが存在するのですが、1つ目のワークフローを読み解いて行ったらかなーり長目のコンテンツになってしまったので、エントリを分けてご紹介する形とさせて頂きたいと思います。
引き続き、明日もお楽しみに!
- Alteryx & Tableau 連携 Advent Calendar 2018 - Qiita
- Alteryx & Tableau 連携 Advent Calendar 2018 | シリーズ | DevelopersIO
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。