Azure Machine Learning Studioで顧客離反予測をしてみよう~③キャリア携帯離反予測編~

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

#はじめに
ネットにはAI学習者向けに様々なデータセットが公開されています。
今回はKaggleで公開されているデータセットを使用して、より実践的に離反予測モデルを構築します。

#データセットの入手とアップロード
下記URLのデータセットをダウンロードしてください。(Kaggle会員登録が必要です)
https://www.kaggle.com/blastchar/telco-customer-churn

**[データセット内容]**
顧客ID、性別、高齢者であるか、配偶者有無、一人暮らしであるか、契約期間、契約形態、請求書形態、決済方法、月額、総額、各種サービス契約有無(9種類)

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/f66aba5f-4bfd-ce66-b482-378944cecec0.png)
Azure Machine Learning Studioにログインし、ワークスペースの左下にある"New"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/ba284b11-4706-2130-9d01-1da73ff62012.png)
"DATASET"の"FROM LOCAL FILE"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/627b397d-65fa-9674-7c83-5cfa349b72e6.png)
ファイル選択で先ほどKaggleでダウンロードしたデータセットを選択してください。
完了したらチェックマークをクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/cf19ba9b-8c41-afc1-11ec-1b800c5b9228.png)
アップロードが成功した場合、"データセット"の欄に先ほどのデータが追加されています。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/c568277f-2ff8-b54a-263a-3176206b716f.png)
ワークスペースの左下にある"New"をクリックし、上記の"Blank Experiment"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/27a4e99b-aa2d-57d7-95cb-e4cd0ff8d701.png)
新しい実験が作成されました。
"Saved Datasets"の欄に先ほどのデータがあるのでドラッグアンドドロップしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/da9619c3-4ad3-ff7a-97c8-fd0d3385ab5c.png)
"Visualized"を実行するとこのようにデータセットの中身を確認できます。

#準備フローの構築
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/91afdc90-eb73-d53f-6a29-11cf5eb3cedb.png)
"Data Transformation"の"Manipulation"欄にある"Edit Metadata"をドラッグアンドドロップしてください。
YESかNOで表現できるデータタイプをカテゴリ化します。
"Make categorical"を選択し、"Launch column selector"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/d1f8455f-b766-095e-f40a-57359cb9cfb2.png)
上記以外のカラムを選択してください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/e8df93f8-bb15-cd2d-f1bf-0a51b858f19b.png)
"Data Transformation"の"Manipulation"欄にある"Select Column in Dataset"ドラッグアンドドロップし、"Launch column selector"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/b992fe0e-a0a1-00fa-1710-2f817629ccb7.png)
customerIDは離反予測の役に立たないので除外します。
"Exclude"でcustomerIDを選択してチェックマークをクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/f5dd23c5-5a19-46a0-a97f-eec9d9ce179f.png)
"Data Transformation"の"Manipulation"欄にある"Split Data"をドラッグアンドドロップしてください。
学習用に7割、テスト用に3割の比率でデータを分割します。
右の欄の比率の設定を0.7にしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/5f6c9930-4902-2840-1e96-60d7ec5906d5.png)
特徴選択をします。
"Feature Selection"にある"Filter Based Feature Selection"をドラッグアンドドロップしてください。
"Mutual Informaation"を選択し、特徴量を19に設定したら"Launch column selector"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/f1c879e5-67db-e9a8-c281-71079e4dfc03.png)
ターゲットを"Churn"に設定し、チェックマークをクリックしてください。

#機械学習フローの構築と評価
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/3e683f75-089d-1210-ccdf-cbfc48ef5245.png)
"Machine Learning"の"Initialize Model"欄の"Classification"にある
2クラスブーストディシジョンツリーと2クラスロジスティック回帰をドラッグアンドドロップしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/2ec23dac-71c0-cf68-5229-7a23dcd8ffb1.png)
"Machine Learning"の"Train"欄の"Tune Model Hyperparameters"をドラッグアンドドロップして、"Launch column selector"をクリックしてください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/82ccaeb6-b49e-da39-1443-c51e83e882fb.png)
予測ターゲットを"Churn"に設定してください。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/a329964e-3a52-87b6-17ad-5233bcc5d62c.png)
"Machine Learning"の"Evaluate"欄の"Evaluate Model"をドラッグアンドドロップしてください。
以上で構築完了です。お疲れ様でした。

#評価
フローの構築が完了したら、実験を開始してください。
![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/2ece2e51-3a9a-677a-2d04-526b0a8409d2.png)
実験が完了したら"Evaluate Model"を"Visualized"してください。
青いグラフはブーストディシジョンツリーで赤いグラフはロジスティック回帰の結果です。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/04ce4ad9-3c99-0829-ae96-334bb6630ab4.jpeg)
前回のデータリストより情報が多いためか精度が8割を超えています。
やはりブーストディシジョンツリーの方が優秀ですね。
個人的に他にもいろいろモデルを使用して実験しましたが、ブーストディシジョンツリーの精度が一番高かったです。

AUCの方も0.842とかなり高いです。
以下はAUCの経験的な評価基準です。

| AUC      |       効果の評価 |
|:-----------------|------------------:|
|0.8以上            |              効果がすごくあります | 
| 0.7-0.8           |           効果があります |
| 0.6-0.7             |             効果が多少あります |
| 0.5-0.6              |               効果がありません |

[機械学習の評価指標 – ROC曲線とAUC by GMO AD Partnersより](https://techblog.gmo-ap.jp/2018/12/14/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E8%A9%95%E4%BE%A1%E6%8C%87%E6%A8%99-roc%E6%9B%B2%E7%B7%9A%E3%81%A8auc/)

#AUCという評価指標について
今回のような分類機の性能評価は意外にも複雑です。
例えば1000人の顧客のうち50人が離反するとしましょう。
作成した分類機aはその50人に加えて、間違った50人(計100人)も離反者として検出しました。
的中率は95パーセントです。

しかし、もし全ての顧客が離反しないという検出結果しか出さない分類機bがあったとしたら、的中率はこちらも95パーセントです。
的中率という基準では同じくらい優秀ですが、後者はそもそも分類すらしていので、的中率という基準は分類機の評価に適さないことがわかります。

そこでROC曲線とAUC(Area under an ROC curve)という基準を使用します。
ROC曲線とはモデルの閾値([例]スコアがいくつ以上の時に離反判定をするか)を変化させた時に、偽陽性率(離反判定した総数のうち間違っていた率)と真陽性率(離反判定した総数のうち合っていた率)の関係をグラフ化したものです。

![alt](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578416/f4995715-fd2c-4e57-973b-80338c00d51e.png)
[機械学習の評価指標 – ROC曲線とAUC by GMO AD Partnersより](https://techblog.gmo-ap.jp/2018/12/14/%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%81%AE%E8%A9%95%E4%BE%A1%E6%8C%87%E6%A8%99-roc%E6%9B%B2%E7%B7%9A%E3%81%A8auc/)
離反者を多く見つけようとすると、同時により多くの間違った対象も離反者として誤判定してしまいます。
つまり、本当に離反する人を~%見つけられる時は、間違って~%の人を誤判定してしまうという関係をグラフ化したのがROC曲線です。

良い分類機というのは分類したい対象を検出し、且つ誤判定の率が低いものです。
真陽性率は高いが偽陽性率は低いのが望ましいわけです。
その場合のROC曲線のx軸y軸で囲まれた部分は大きくなります。

AUCとはROC曲線のx軸y軸で囲まれた部分を積分したものです。
AUCが1に近いほど性能が高いモデルとなり、完全にランダムに予測される場合、AUCは0.5になります。

#終わりに
今回で本シリーズは終わりです。
少し機械学習にも慣れてきたのではないでしょうか？
AzureMachineLearningを使用すれば様々な予測を簡単に実行することができます。
是非お好きなモデルをたくさん構築してみてください。

#参考URL
https://docs.microsoft.com/ja-jp/azure/machine-learning/studio/create-experiment