Azure Machine Learning Studioで顧客離反予測をしてみよう~②小売離反予測編~

#本シリーズURL
①概要編：https://qiita.com/mottie/private/977a66ffb719453f62ee
②小売離反予測編:https://qiita.com/mottie/private/868798fb98e89fa43a08
③キャリア携帯離反予測編:https://qiita.com/mottie/private/0af8fe916a3ef04b0f2a

#はじめに
今回はAzure AI Galleryに掲載されている小売の離反予測モデルを構築します。
事前構成済みの機械学習モジュールと、Pythonの実行スクリプトを使用して、**最終的に離反危険度の高いユーザーと低いユーザーに顧客を分類します。**
今回は構築ではなく、サンプルプログラムを動かしてみるレベルだとイメージしておいてください。
Azure Machine Learning Studioの使い方に少しずつ慣れていきましょう。

#小売離反予測実装方法
この実験ではユーザー情報データセットとアクティビティ情報データセットの二つのデータセットを使用します。

**ユーザー情報データセット** = ユーザーID、年齢、住所、性別、ユーザータイプ
**アクティビティ情報データセット** = 取引ID、日時、ユーザーID、商品ID、購買数、料金、場所、商品ジャンル

###1.Tagging Data
**今セクションURL**
https://gallery.azure.ai/Experiment/Retail-Churn-Template-Step-1-of-4-tagging-data-1

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/657c40e8-0092-bb64-54a5-bba03a41c0c3.png)
上記のURLの"Open in Studio"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/abc670bc-5db6-c5c8-9ee7-f869b38afab7.png)
リージョンとワークスペースを確認したらチェックボタンをクリックしてください。
(リージョンは"South Central US"になっていますが、おそらくどこを指定しても大丈夫です)

**以後、セクションごとに実験のコピーをします。流れは毎回一緒なのでここからは割愛させて頂きます。**


![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/f1a77481-d0bd-ed13-a15e-57b061cc9355.png)
"Execute Python Script"をクリックし、Anacondaを一番古いバージョンに指定してください。
(2015年に投稿された実験のため、新しいバージョンだと動きませんでした)

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/80167f00-04f5-656d-4b3f-afa9c1f36004.png)
設定したら、"Run"をクリックしてください。
実験が開始されます。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/e7182efc-a8be-a0df-33c3-307aa9d606ca.jpeg)
**実験フロー解説**
今セクションは新しいカラムを作成し(追加されたパラメーターをデータフレーム化)、
データに一時的なバリューを記入しました。
データセットに離反判定のカラムが追加され、暫定的にYes、Noが記入されたと考えておいてください。

###2.Feature Engineering
**今セクションURL**
https://gallery.azure.ai/Experiment/6e6e956e572045a193e8a7039af20540
上記URLから新しく実験をコピーしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/73af2149-8bb0-52b7-9d27-5b14f7cc2ec2.png)
実験をコピーしたら、先ほどのように"Execute Python Script"をクリックし、Anacondaを一番古いバージョンに指定してください。
今回はスクリプトが複数あるので上記の画面が表示されます。
チェックマークをクリックすると、全てのスクリプトのバージョンをまとめて変更できます。
完了したら実験を実行しましょう。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/310dd979-03ae-1a23-bda2-c8cb7cb79a3e.png)
実験完了後、"Join Data"を右クリックして、"Result Dataset"から"Visualize"をクリックしてみてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/9da74212-bed6-7563-c527-c7737f42b720.png)
上記のように分析結果を可視化できます。
"Churner"=解約危険者
"Nonchurner"=非解約危険者です。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/b38c042a-2af3-31a9-0f14-927b5539e03b.jpeg)
**実験フロー解説**
今セクションはどの説明変数が結果に影響を与えるか特定しました。
＊カテゴリ化というのはValueのデータタイプをStrからCategoricalというダミー変数的データタイプに変換することです。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/3bebce36-dc91-fcb5-daaa-e09572b76a84.jpeg)
各カラムの結果に対する影響度を特定し、再度離反予測をしたため、予測結果も少し変わっています。

###3.Training and Evaluation
**今セクションURL**
https://gallery.azure.ai/Experiment/4db5731ccb954ea0aca223f1defd170b
上記URLから新しく実験をコピーしてください。

今セクションはPython実行スクリプトがないので、コピーしたらすぐ実行してください。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/5db2c1bd-f827-8bc8-e24f-26be888e2406.png)
実験完了後、"Evaluate Model"を"Visualize"してください。
すると上記の画面が表示されます。
"Scored Dataset"はロジスティック回帰の分析結果で、
"Scored Dataset to Compare"はブーストディシジョンツリーの分析結果です。
クリックすることで切り替えれます。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/84f1977a-07d7-38ed-b460-9a612514aeb7.png)
先ほどの画面を下にスクロールすると上記画面が表示されます。
"Accuracy"は精度のことです。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/0e2d6e7d-2cbb-aabe-21b6-591adda2669d.png)
ブーストディシジョンツリーの方がわずかに勝っています。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/9015613f-dab4-3aea-12ba-eb8c4d3bea40.jpeg)
**実験フロー解説**
このセクションではいよいよ機械学習により、モデルを作成しました。
二種類の手法で分析してみて、より精度が高い方がどちらかを特定しています。

**ロジスティック回帰**
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/0a523ce6-91ba-6075-9cce-1a59f06308a7.png)
参照：https://japaneseclass.jp/trends/about/%E5%9B%9E%E5%B8%B0%E5%88%86%E6%9E%90より


- ロジスティック回帰モデルは特定の現象の有無を分析することに長けています。
- 通常の回帰分析は直線のものであり、特定の値を予測することには長けています。
- しかし、確率予想をしようとすると、0~1の間におさまりません。
- ロジスティック回帰モデルは非線形のため、確率は0~1になります。

**ブーストディシジョンツリー**

- 簡単な決定木モデルを複数作って分析する手法の一つです。
- 特徴としては前のモデルの予測値の誤差を新しく作ったモデルに反映していくことです。
- 新しいモデルであればより精度は高くなります。
- しかし予測を出す際には、前の精度の低いモデルも並列的に使用します。
- これにより、教師データの過学習を防ぎ、より汎用的な学習モデルを構築できます。

###4.Scoring
**今セクションURL**
https://gallery.azure.ai/Experiment/531edbc5267a4db19bd0038bf9e2e2ec
上記URLから新しく実験をコピーしてください。
今セクションはPython実行スクリプトがないので、コピーしたらすぐ実行してください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/6e958474-3a39-8404-a542-a2a754c28795.png)
実験完了後、"Select Columns in Dataset"を"Visualize"してください。
すると上記画面が表示されます。
"Scored Labels"をクリックすると、"Churner"と"Nonchurner"の比率をみることができます。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/d73c3ff2-ffbf-819e-9da5-58b3b8ff3c36.png)
"Scored　Probabilities"をクリックすると、より細かく解約危険度の分布をみることができます。
"Scored　Probabilities"の数値が0に近いほど、解約危険度が上昇します。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/8a690e55-1571-0c12-a13d-0a82fd226eed.jpeg)
**実験フロー解説**
このセクションでは作成した学習モデルを使用して、最終的な予測を実行しています。
最後の学習モデル実行以外の流れはFeature Engineeringのセクションとほとんど同じです。

またこのセクションをWebサービスとしてデプロイすることで、APIを使って外部からプログラムを実行できます。

#終わりに
次回はデータセットを変更して、離反予測システムを構築していきます。お楽しみに。
③キャリア携帯離反予測編:https://qiita.com/mottie/private/0af8fe916a3ef04b0f2a

#参考URL
Azure Machine Learningアルゴリズムモジュールのリファレンス
https://docs.microsoft.com/ja-jp/azure/machine-learning/algorithm-module-reference/boosted-decision-tree-regression