読者です 読者をやめる 読者になる 読者になる

歩いたら休め

If the implementation is easy to explain, it may be a good idea.

【AWS】Amazon Machine Learningチュートリアルやってみました

機械学習 AWS

AWS上で楽に機械学習できるAmazon Machine Learningというものが話題になっています。

Amazon Machine Learning は、どのスキルレベルの開発者でも、機械学習テクノロジーを簡単に使用できるようになるサービスです。Amazon Machine Learning では、複雑な機械学習(ML)アルゴリズムおよびテクノロジーを学習する必要なく、 ML モデルの作成プロセスを説明する仮想化ツールおよびウィザードを提供します。

www.gixo.jp

今回はそのチュートリアルを通してやってみたので、ちょっとしたメモ書きを残しています。 英語が苦手な私でも、画面キャプチャーと太字以外を読み飛ばして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 S3AWSのストレージサービス)のリポジトリにアップロードし、Step2以降で機械学習にかけていきます。

余談ですが、債務不履行したかどうかのカラム(default)などもあってなかなかエグいです。

Step 2: データソースを作成する(Create a Datasource)

Amazon S3にデータを読み込んでいきます。 ここでの設定で注意すべきなのは三点です。

  1. csvカラム名が存在するかどうか(Does the first line in your CSV contain the column names?)
    • R言語のread.csv()のheader=***と同じですね
  2. 各カラムのデータ型(Data Type)の設定
    • 二値(Binary)、カテゴリ型(Categorical)、連続値(Numeric)に設定すれば良さそうです
    • textというデータ型もあるんですが、予測に使えるんでしょうか?
  3. 予測したいカラムの設定(To select y as the target attribute)
    • 先ほど説明したyというカラム(定期預金に申し込むかどうか)を選択します

Step 3: 学習器を作る(Create an ML Model)

いよいよ学習器にかけていきます。 チュートリアル通りにやれば特に問題はなかったのですが、学習が終わるまで数分時間がかかります。 下の画像のように、設定した項目のstatusがCompletedになるのを待ちましょう。

f:id:takeshi0406:20150923165233p:plain

Step 4: モデルの評価、カットオフの設定(Review the ML Model Predictive Performance and Set a Cut-Off)

まず、AUCの値を基に評価します(Reviewing the AUC Metric)。私はAUCがよく分かってないので同僚に質問したところ、 下のリンクを教えてもらいました(後で勉強しよ…)。

qiita.com

あとこんなメッセージも貰いました。

AUC: area under the curve
https://i.datasciencelab.jp/i/w360h0t4i1175
上図みたいに陰性的中率、陽性的中率を横軸縦軸にプロットしてできた
画像の青線の下部分が、正方形のうちに占める割合。
負例を全部FALSE, 正例をを全部TRUEに判別できたら1になる

とりあえず、AUCの値が1に近ければちゃんと「申し込みする人を全部TRUE、しない人を全部FALSEに判別」できている、ということのようです。 次の画像のようにAUCの値を見て、モデルを評価することができます。

f:id:takeshi0406:20150923173910p:plain

次に、閾値をセットします(Setting a Score Threshold)。

今回のような二値分類の場合、予測結果として0~1の範囲でscoreを割り振ってくれます。 これをyが0か1か(つまり申し込みする/しない)に切り分けるために閾値をセットします (To set a score threshold for your ML model)。 つまり、scoreが設定した閾値以下ならy=0に、閾値より大きければy=1に切り分けられます。

f:id:takeshi0406:20150923171224p:plain

上の画像のように、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くらいの費用がかかっていました。

f:id:takeshi0406:20150924211010p:plain

実際に触ってみる方は、今朝IT Proに投稿された記事が役に立つと思います。 こちらの記事では、各パラメータの更に詳しい話や、連続値の回帰分析についてなども解説されています。

itpro.nikkeibp.co.jp