フォトアルバム

« 【AWS発表】Amazon Elastic File System (EFS) - Amazon EC2 のための共有ファイルストレージ | メイン | 【AWS発表】AWS Lambda – モバイル開発のための新機能とともに全てがプロダクションに »

【AWS発表】Amazon Machine Learning - Data-Driven Decision at Scale

今日、ビジネスやシステムのいたるところで発生する大量のデータを収集して分析することは自然なことですし、これ実行するために以前のように大きな投資をする必要もなくなってきています。そして、ユーザーのクリックストリームやメールキャンペーンへのレスポンスなどから得られた何ギガバイト、何ペタバイトのデータのなかには素晴らしい発見が隠されていることは言うまでもありません。しかし、これを実現するためには機械学習に明るい、優秀なデータサイエンティストを雇用し、彼らのためにスケーラブルで信頼性の高いツールを用意したり、更にそれをサポートできるインフラストラクチャを用意しなければなりませんでした。

機械学習(Machine Learning, ML)はデータの分析に数学的な裏付けをもたらします。それはあなたのデータ群のなかから相関性を見つけ出し、それらを高品質な予測へと変身させてくれます。機械学習を適切に利用すると、不正検知や需要予測、広告のターゲティングなどに役立てることが出来ます。

Amazon Machine Learningのご紹介

そして今日、私たちはAmazon Machine Learningをご紹介します。この新しいAWSのサービスは、ビジネス的な決断の質を上げるためのデータの有効活用をお手伝いします。Amazon Machine Learningにより、大量のデータから洗練された予測モデルを構築し、スケーラビリティを持った予測の実行をすることが可能になります。もちろん統計についての深い知識や学位をもっていなくても利用可能ですし、これらの処理をするためのスケーラビリティを持ったインフラストラクチャを自身で構築/運用する必要もありません。

img1

これから簡単にこのサービスの詳細を紹介しようと思いますが、その前に、より理解を深めるために機械学習に関しての用語やコンセプトを整理したいと思います。

機械学習とは

機械学習を活用するためには、まずは学習用のデータが必要になります。例えばデータベースやスプレッドシードの行などを想像してみるとよいでしょう。行はそれぞれ1つのデータレコード(例えば1つの購入行為であったり1つの発送、1つのカタログアイテムなどです)を表し、列はそれぞれ、例えば郵便番号や購入価格のようなデータの属性を表します。

img2

このデータは実際の予測結果の例を持っている必要があります。例えば正常なもの、不正なものが入り混じった商取引のトランザクションのデータ・セットがあったとすると、すべての行はそれが「正常」なのか「不正」なのかを表す結果を持っている必要があります。これを目的変数 と呼びます。このデータ・セットは機械学習モデルを構築するために使われ、新規のデータが入力されてくると、このモデルに基いて不正判定などの予測を行います。ここで利用される予測には大きく分けて3つの手法があります。ひとつずつ見て行きましょう。

Binary classification(二値分類・二項分類) は、入力されたデータを2つの選択肢のどちらかに分類します。例えば「これは正常の取引なのか?」であったり「この顧客はこの商品を買うかどうか?」「この住所は一軒家なのか集合住宅なのか?」といったような問題の予測に利用されます。

Multiclass classification(多値分類・多項分類)は、入力されたデータを3つ以上の選択肢のうちいずれかに分類します。例えば「この商品は本なのか、DVDなのか、もしくは衣類なのか」であったり「この映画はコメディなのかドキュメンタリーなのかホラーなのか」「このユーザーはどのカテゴリにもっとも興味があるのか?」といったような問題に用いられます。

Regression(回帰分析)は値の予測に利用されます。例えば「27インチモニタの在庫はどのくらい持っておくべきか?」だったり「この商品の値段はいくらにすべきか?」「この商品の売上のうち何割くらいがギフトとして販売されるか?」といった問題の予測に利用されます。

適切に訓練されたモデルは上記の問題のうちいずれかひとつに答えを提供してくれます。しかし場合によっては複数のモデルに同じ訓練データを利用することもあります。

機械学習を始めるにあたって、まずやるべきことはデータの量や質を上げていくことでしょう。これはもちろん学習プロセスの精度をあげるためです。簡単な例をあげてみます。例えばわたしが郵便番号をベースにした地理情報から収集を始めたとします。ある一定期間やある程度の分析を経るうちに、郵便番号以外の属性を合わせて利用することにより、より予測の精度を上げることができることに気づくでしょう。機械学習のプロセスは反復的なものであり、訓練データからモデル構築と予測を実施し、その結果を評価し、更に訓練データをより洗練させるというプロセスを繰り返していくことが必要なのです。

このモデルの評価プロセスに際して、私たちはいくつかのメトリクスを利用することができます。例えばAUC(Area Under Curve、曲線下面積) は二値分類の品質測定に利用されます。これは0.0から1.0の間の浮動小数点数で、モデルによって実施された予測の不確実性を表します。この値が0.5から1.0に上がることは予測精度が上がったことを表します。しかし、この値が1.0もしくはそれに非常に近い値を取っていることは、訓練データに問題があることも表します。よくある問題としてoverfitting(過学習、過剰適合) というものがあります。これは訓練データに目的データを含めてしまうことによって引き起こされる問題で、モデルがそれほど努力せずにパターンを見つけ出せてしまう状態をもたらします。また、AUCが0.0に近い状態においては誤判断が容易に起こります。この問題は訓練データのラベル付の間違いによって引き起こされることがあります。

わたしたちは自分の二値分類モデルを構築していく過程で、予測の結果をレビューし、cutoff(閾値)の調整をしていく必要があります。この変数は予測の正しさの確率、確からしさを表します。わたしたちは取り扱う問題におけるfalse positive(本来falseと判定されるべきものがtrueと判定されること)とfalse negative(本来trueと判定されるべきものがfalseと判定されること)それぞれの重要度、クリティカル度に合わせてcutoffを調整することができます。スパムメール判定の例を考えてみましょう。false negativeが起こると、スパムメールがメールボックスに入ってきてしまいます。一方、false positiveが起こると、重要なメールがスパムフィルタに引っかかってしまいます。この場合、後者のほうがクリティカルな問題であることは明白でしょう。こういったことが起こらないようにcutoffを調整し、判定の確率をどちら側に倒すのかというのを調整していくわけです。

Amazon Machine Learning in Action

それではGetting Started Guideに沿って、モデルの作成から予測の実行までやってみましょう。Amazon Machine Learningへのサインアップはこちらを参照してください。さて、このGetting Started GuideではUC Irvine Machine Learning Repositorybank marketing datasetに少し手を加えたものを利用しています。これから構築するモデルは「この顧客は新サービスに登録をしてくれるかどうか?」という問題に答えてくれます。

img3

まず上記からダウンロードしたbanking.csvをAmazon Simple Storage Service(S3)にアップロードして、Amazon Machine Learningからのアクセスが可能なようにIAM policyを設定します。

次にAmazon Machine Learning Datasourceオブジェクトを作成して、先ほどアップロードしたファイルをオブジェクトに与えてやります。このオブジェクトはデータの場所や変数名、型、目的変数の名前、各変数の記述統計などを保持します。Amazon Machine Learningのほとんどの操作、オペレーションはこのDatasourceを参照します。設定は下記のスクリーンショットのようになります。

img4

Amazon Marhine LearningはDatasourceにAmazon RedshiftやMySQL(もちろんAmazon RDS for MySQLも)を利用することも可能です。上記のスクリーンショットの画面でRedshiftを選択すると、クラスタ名やデータベース名、クレデンシャルやデータ取得のためのSQLクエリなどの入力を求められます。

Amazon Machine Learningはファイルを走査し、それぞれの列の型推測を行い、下記のようにスキーマの提案をしてくれます。

img5

このケースでは型推測はすべて正しかったですが、もしそうでない場合はChange Type をクリックすることで手動で修正可能です。

さて、このDatasourceを機械学習モデルの評価と構築に利用するためには訓練変数を指定してやる必要があります。このデータセットの訓練変数(y )はバイナリ型なので、ここから構築される予測モデルは二値分類を利用することになります。

さらに数クリック進めていくとDatasourceの作成準備が完了します。

img6

Datasourceの作成は数分で完了します。

img7

前述のように、わたしたちはデータをよりよく知ることで予測モデルの精度をあげることができます。Amazon Machine Learningはこれを助けるいくつかのツールを提供してくれます。例えば下記のようにDatasourceのある変数の値の分布を可視化してくれるようなツールがあります。

img8

さて、次はモデルの作成です。

img9

今回はデフォルトの設定を利用することにします。Amazon Machine Learningはデフォルトでデータセットの70%を訓練用データ、30%を評価用データとして利用します。

img10

カスタムオプションを選択する場合、Amazon Machine LearningがDatasourceのデータ・セットを整形したりするために利用するレシピをカスタマイズすることができます。

img11

さらに数クリックすすめると、Amazon Machine Learningがモデルの作成を開始します。モデルの作成には少し時間がかかります。

img12

モデルの作成が終わると早速下記のように品質のメトリクスが確認できるようになっています。

img13

新サービスに登録してくれそうなよりよい顧客を選択するために、Adjust Score Threshold をクリックして、5%のレコードだけがy の値が1と判断されるようにcutoffの値を調整してみます。

img14

この設定ではfalse positiveの割合はわずか1.3%に抑えられるわけです。そして22%がfalse negativeと判定され、残りの77%が正しい判定をされるということになります。今回のケースではfalse positiveは望ましくないという考えから、これを出来る限り避ける設定としました。実際のビジネスを想像してみると、これにより間違った顧客に対して高コストのプロモーションを実施することを避ける事ができるわけです。

ここで作成されたモデルを使ってバッチ予測を行ってみます。(Amazon Machine Learningはバッチ予測とリアルタイム予測の両方が可能です)バッチ予測では、多くのレコードセットに対してまとめて予測を実施することができます。

img15

さらにここではGetting Started Guidに沿って、予測の対象のデータセットを含んだDatasourceを作成します。このファイルは先程のものとは違って、y の変数を持っていません。

img16

S3に配置したファイルを指定して、バッチ予測を開始してやります。

img17

予測には少し時間が掛かります。終了すると、指定したS3のロケーションに結果が出力されるので、それをダウンロードとして解凍して中身を見てみましょう。

img18

それぞれの行はオリジナルのファイルの行とマッチします。そして一つ目の列が予測された変数y で、2番めのれつが 実際のスコアです。

それではリアルタイム予測のほうも少し見てみましょう。こちらのケースでは、個々のデータの入力と出力の間に予測を行う必要があります。

設定はこのように進めていくことができます。

img19

img20

リアルタイム予測を有効化したのち、Amazon Machine LearningのPredict 関数を呼び出すコードを書いてやることになります。この関数の引数として目的データを渡してやることで、レスポンスとして予測結果を受け取ることができるようになるわけです。

AmazonMachineLearningClient client = new AmazonMachineLearningClient();
 
GetMLModelRequest modelRequest = new GetMLModelRequest()
    .withMLModelId(mlModelId);
GetMLModelResult model = client.getMLModel(modelRequest);
String predictEndpoint = model.getEndpointInfo().getEndpointUrl();
 
PredictRequest predictRequest = new PredictRequest()
   .withMLModelId(mlModelId)
   .withPredictEndpoint(predictEndpoint)
   .withRecord(record);
 PredictResult prediction = client.predict(predictRequest);
 
System.out.println(prediction);

上記のコードは下記のような結果を出力してくれるでしょう。

{Prediction: {PredictedLabel: 0,PredictedScores: {0=0.10312237},Details: {PredictiveModelType=BINARY, Algorithm=SGD}}}

Things to Know

Amazon Machine Learningは本日からUS East(N.Virginia)リージョンで利用可能です。費用はいつものように従量課金モデルで、下記のような計算で決定されます。

  • データ分析/モデルのトレーニング/モデルの評価: $0.42/時間
  • バッチ予測: 100万件の予測実行あたり$100。実際の課金は1000件ごとに課金がされていきます
  • リアルタイム予測: 100万件の予測実行あたり$100。実際の課金は1000件ごとの課金。更にモデルが利用されるメモリ容量に基づいた時間単位の課金。
  • S3やRDS、Redshiftの料金は別途発生します。

—Jeff 翻訳は今井が担当しました。

コメント

トラックバック

この記事のトラックバックURL:
http://www.typepad.com/services/trackback/6a00d8341c534853ef01b7c7742f37970b

【AWS発表】Amazon Machine Learning - Data-Driven Decision at Scaleを参照しているブログ:

Featured Event


2015年4 月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30