AWS上で楽に機械学習できるAmazon Machine Learningというものが話題になっています。
Amazon Machine Learning は、どのスキルレベルの開発者でも、機械学習テクノロジーを簡単に使用できるようになるサービスです。Amazon Machine Learning では、複雑な機械学習(ML)アルゴリズムおよびテクノロジーを学習する必要なく、 ML モデルの作成プロセスを説明する仮想化ツールおよびウィザードを提供します。
今回はそのチュートリアルを通してやってみたので、ちょっとしたメモ書きを残しています。 英語が苦手な私でも、画面キャプチャーと太字以外を読み飛ばして40分くらいで終わったので、気になっている方は一回やってみると良いです。 すぐに使えるようになると思います
Tutorial: Using Amazon ML to Predict Responses to a Marketing Offer - Amazon Machine Learning
Step 1: データをダウンロード、編集、アップロードする(Download, Edit, and Upload Data)
チュートリアルでは銀行のダイレクトマーケティングキャンペーンのデータセットのcsvを利用しています。 こちらのリンク先に詳細があります。
UCI Machine Learning Repository: Bank Marketing Data Set
ユーザーの年齢・性別などの情報から、定期預金に申し込んでくれるか(カラム名がy
なので分かりにくい!)どうかを予測します。
具体的には、過去にアタックしたユーザーのリスト(banking.csv
)を学習にかけ、
y
の値が分からない新しいユーザーリスト(banking-batch.csv
)の人たちが成約するかどうかを判別します。
このcsvを、Amazon S3(AWSのストレージサービス)のリポジトリにアップロードし、Step2以降で機械学習にかけていきます。
余談ですが、債務不履行したかどうかのカラム(default)などもあってなかなかエグいです。
Step 2: データソースを作成する(Create a Datasource)
Amazon S3にデータを読み込んでいきます。 ここでの設定で注意すべきなのは三点です。
- csvにカラム名が存在するかどうか(Does the first line in your CSV contain the column names?)
- 各カラムのデータ型(Data Type)の設定
- 二値(Binary)、カテゴリ型(Categorical)、連続値(Numeric)に設定すれば良さそうです
- textというデータ型もあるんですが、予測に使えるんでしょうか?
- 予測したいカラムの設定(To select y as the target attribute)
- 先ほど説明した
y
というカラム(定期預金に申し込むかどうか)を選択します
- 先ほど説明した
Step 3: 学習器を作る(Create an ML Model)
いよいよ学習器にかけていきます。 チュートリアル通りにやれば特に問題はなかったのですが、学習が終わるまで数分時間がかかります。 下の画像のように、設定した項目のstatusがCompletedになるのを待ちましょう。
Step 4: モデルの評価、カットオフの設定(Review the ML Model Predictive Performance and Set a Cut-Off)
まず、AUCの値を基に評価します(Reviewing the AUC Metric)。私はAUCがよく分かってないので同僚に質問したところ、 下のリンクを教えてもらいました(後で勉強しよ…)。
あとこんなメッセージも貰いました。
AUC: area under the curve
https://i.datasciencelab.jp/i/w360h0t4i1175
上図みたいに陰性的中率、陽性的中率を横軸縦軸にプロットしてできた
画像の青線の下部分が、正方形のうちに占める割合。
負例を全部FALSE, 正例をを全部TRUEに判別できたら1になる
とりあえず、AUCの値が1に近ければちゃんと「申し込みする人を全部TRUE、しない人を全部FALSEに判別」できている、ということのようです。 次の画像のようにAUCの値を見て、モデルを評価することができます。
次に、閾値をセットします(Setting a Score Threshold)。
今回のような二値分類の場合、予測結果として0~1の範囲でscoreを割り振ってくれます。
これをy
が0か1か(つまり申し込みする/しない)に切り分けるために閾値をセットします
(To set a score threshold for your ML model)。
つまり、scoreが設定した閾値以下ならy=0
に、閾値より大きければy=1
に切り分けられます。
上の画像のように、false positive(偽陽性)とfalse nagative(偽陰性)の値を見ながら閾値を設定することができます。 もちろん両方の数(**% are errors)が小さいほうがいいのですが、どちらの値を重視するかは、解析の目的によって違います(って同僚が言ってました)。 また、デフォルトでは閾値は0.5にセットされています。
Step 5: ML Modelを使って、バッチデータを予測する(Use the ML Model to Create Batch Predictions)
ついにbanking-batch.csv
の人たちのy
の値を予測します。
データの読み込み方などは、Step 1,2とほぼ同じなので心配ないでしょう。
出力結果はS3のレポジトリ上に、次のように出力されます。 .gzファイルの形に圧縮されているので、一旦ローカルマシンにダウンロードして解凍します。 予測スコア(score)と、step 4で設定した閾値で切り分けた答え(bestAnswer)です。
bestAnswer | score |
---|---|
0 | 0.08163745 |
0 | 0.01695196 |
0 | 0.02596637 |
0 | 0.002294753 |
0 | 0.002005484 |
0 | 0.0664944 |
… | … |
0 | 0.03059662 |
1 | 0.7891263 |
0 | 0.4784519 |
このままでは誰をどのように予測したのかわからないので、利用する際にはbanking-batch.csv
とマージする必要がありそうです。
Step 6: 後片付け(Clean Up)
Amazon S3のリポジトリからデータを削除し、キレイに後片付けします。
9/24追記
今回のチュートリアルの操作で$1.15くらいの費用がかかっていました。
実際に触ってみる方は、今朝IT Proに投稿された記事が役に立つと思います。 こちらの記事では、各パラメータの更に詳しい話や、連続値の回帰分析についてなども解説されています。