顧客セグメンテーションをクラスタリングのアルゴリズムを使って５分でやってみた

<img width="1339" alt="Screen Shot 2017-06-09 at 9.15.07 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/fdd95fcf-5be0-de80-35ab-a1487df042e6.png">

近年の、機械学習、AIのブームに伴って、よく、__クラスタリング__という言葉を耳にするようになってきたのではないでしょうか。クラスタリングとは、データを分類する手法の一つになります。

ほぼ全てのビジネスにおいて、何かを分類していきたいというニーズは存在するはずです。とくに、顧客の分類です。顧客の特性を深く理解出来、どういったアプローチを取るべきか見えてくるからです。それによって、顧客満足度を高め、ビジネスを改善していくことができるようになります。

そのような観点から、顧客データに対するクラスタリング分析は、__顧客をアルゴリズムを使って自動的に分類し、__その中に共通している性質を見つけ出すことが出来るので、とても強力な手法になります。

今回は、ワインのキャンペーンに対する顧客の反応のデータというサンプルデータで、顧客のクラスタリング分析を行ってみます。

# ツール
データのインポート、加工、分析のインターフェースとして、RのUIとして世界中でよく使われている[Exploratory](https://exploratory.io/)を使います。

# データのインポート

Data Framesの右の+アイコンから、"Import File Data"を選択します。

<img width="458" alt="Screen Shot 2017-05-18 at 10.19.41 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/abcf52f5-e8f8-f47a-22f1-a1db2c30932d.png">

そこで開くダイアログから、Localタブ、Text File(CSV, delimited)を選択します。
<img width="703" alt="Screen Shot 2017-05-20 at 2.56.08 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/d5125736-8786-6e9b-04a7-c6a2e8d93c66.png">

[こちら](https://www.dropbox.com/s/bg2owhkfx6d2x0g/campaign_customer_table.csv?dl=0)からダウンロードした、campaign_customer_table.csvを選択し、インポートします。これは、あるキャンペーンにどの顧客が反応してくれたのかというデータになります。テーブルビューを見てみましょう。
<img width="808" alt="Screen Shot 2017-05-20 at 3.08.50 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/60a2784f-7971-39f5-fee4-e9143006c578.png">

あるキャンペーンがどのようなものだったのかというデータは別のファイルとしてあるのですが、なんと、たったこれだけの情報からでも、実はクラスタリングしてしまうことが出来るのです。

早速、ユーザーをクラスタリングしてみましょう。左上の+アイコンから、"Run Analytics" -> "Cluster with K-means"を選択します。

<img width="810" alt="Screen Shot 2017-05-20 at 3.14.10 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/47608150-83e5-3612-d110-b90dd6dea03c.png">

それぞれの、__customer__にクラスタIDを割り振っていきたいので、ダイアログで、What do you want to cluster (group)?に"Categories in a column into columns (groups)"を選択します。Which column holds the categories?には、クラスタする対象である、"customer"、Dimensions & Measureには、"campaign_id"、Measureには、"(Number of Rows)"を選択します。また、Number of Clustersは5にします。

<img width="1006" alt="Screen Shot 2017-05-20 at 3.27.36 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/3a1fefbf-6fa7-74ab-55ad-d3bfec91693b.png">

実行すると、clusterという新しい列に、顧客のクラスタラベルが入ります。

<img width="808" alt="Screen Shot 2017-05-20 at 3.32.59 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/be9d0c4a-2f14-0e25-4405-081e4faed4ce.png">

意味としては、Thomasはクラスタ5、Jacksonはクラスタ3に属するというように解釈できます。
これで、ユーザーが、campaignに反応する傾向から、クラスタリングが行われました。では、それぞれのクラスタに、どういった特徴があるかを見ていきます。

# クラスタの特徴分析

次に、それぞれのcampaignがどのような内容だったのかという情報を取得します。

campaignに関するデータとして、[こちら](https://www.dropbox.com/s/kp22guwcbtwq80a/campaign_table.csv?dl=0)のデータがあります。先ほどと同じように、Data Framesの右の+アイコンから、"Import File Data"を選択します。

<img width="458" alt="Screen Shot 2017-05-18 at 10.19.41 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/abcf52f5-e8f8-f47a-22f1-a1db2c30932d.png">

そこで開くダイアログから、Localタブ、Text File(CSV, delimited)を選択します。
<img width="703" alt="Screen Shot 2017-05-20 at 2.56.08 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/d5125736-8786-6e9b-04a7-c6a2e8d93c66.png">

そこで、[こちら](https://www.dropbox.com/s/kp22guwcbtwq80a/campaign_table.csv?dl=0)からダウンロードされたcampaign_table.csvを取り込みます。

このデータには、それぞれのキャンペーンがどの月に行われたのか(campaign)、どんなタイプ(varietal)と国(origin)のワインが対象だったのか、どれくらいの割引が告知されたのか(discount_percent)といった情報が入っています。

<img width="1286" alt="Screen Shot 2017-05-20 at 3.44.14 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/7834e8fa-9e46-a89c-b695-328a30f1c583.png">

クラスタごとに、反応するキャンペーンの内容がどう異なっているかを見るために、データの結合を行います。

クラスタリングを行ったデータフレームに戻り、campaign_idのカラムメニューから、Joinを選択します。

<img width="883" alt="Screen Shot 2017-05-20 at 5.22.05 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/ad97e9ad-b691-2af5-9d23-d236728038f0.png">

Join Typeは"Left Join"、Target Data Frameは"campaign_table"、Current ColumnとTarget Columnは"campaign_id"にセットします。
<img width="798" alt="Screen Shot 2017-05-21 at 7.01.20 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/b604ba99-554e-1458-f3ed-3601b5f02437.png">

これで、それぞれのキャンペーンがどのようなものだったかという情報が入ったので、それをもとにクラスタの傾向を見てみます。

Vizタブに移り、それぞれのクラスターごとにどの国のワインがどれくらい入っているのかを可視化してみましょう。

Typeに"Bar"、X Axisに"cluster"、Y Axisに"(Number of Rows)"、Colorには、"origin"を設定すると、このようなグラフになります。

<img width="1204" alt="Screen Shot 2017-05-22 at 11.40.53 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/7920ebf6-cd67-9ba7-e1ef-a7ca889b772a.png">

それぞれのバーの中での比率をもっと見やすくするためにY-Axis を絶対数でなく、% of Total(全体に対するパーセント)にしてみます。
Y Axisの歯車アイコンからメニューを開き、Window Calculationを選び、Calculation Typeに"% of Total"を設定します。

<img width="1210" alt="Screen Shot 2017-05-22 at 11.41.07 AM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/4414cd09-af1c-8545-91ce-40238de318aa.png">


これから、1のクラスタには、オーストラリアが多く、4には南アフリカが多いということが見て取れます。

また、Colorを"varietal"に変えることで、クラスタごとに、選ぶワインの種類の違いも見えてきます。

<img width="996" alt="Screen Shot 2017-05-21 at 12.04.48 PM.png" src="https://qiita-image-store.s3.amazonaws.com/0/48026/39e46f37-e126-9df1-799a-1a004e7d8095.png">

例えばクラスタ１は、圧倒的にPinot Noirが多く、クラスと４はEspumante, Malbec, Pinot Grigioが多いのが特徴的です。

このように、可視化を活用することによって、それぞれのクラスタの特性を見つけ出すことが出来ます。

# まとめ

今回の分析では、ワインのキャンペーンに対する顧客の反応の履歴から、顧客のクラスタリングが出来、クラスタごとに、よく反応するワインの産地や、種類などがどう違っているのかわかりました。

ここからさらにクラスターの数を変えたり、他の属性をクラスターを作る過程に入れたりすることでさらにこの分類のクオリティを高めることができますが、機械学習のアルゴリズムを使って顧客を自動的に分類し、さらにその結果をこのように可視化することでその有用性を確認することが数分でできました。こういった分析は特に探索的データ分析(Exploratory Data Analysis)ではよく使われる手法です。そうしたステップでは、機械学習や統計のアルゴリズムや可視化を使っていかに早くさらにインタラクティブに未知のデータの中から隠されたパターンやトレンドを発見していくということが重要になります。

もし、何か質問やご要望などありましたら、support@exploratory.ioにご連絡ください。

# データ分析をさらに学んでみたいという方へ

来月、シリコンバレーのExploratory社によって行われる[データサイエンス・ブートキャンプ](https://exploratory.io/training-jp)への参加を現在受付中です。本格的に上記のようなデータサイエンスの手法をプログラミングなしで学んでみたい方、そういった手法を日々のビジネスに活かしてみたい方はぜひこの機会に、参加を検討してみてはいかがでしょうか。[こちら](https://exploratory.io/training-jp)に詳しい情報がありますのでぜひご覧ください。