AWSの機械学習サービスAmazon Machine Learning
機械学習(Machine Learning)は、ビッグデータの応用事例としてもよく取り上げられ、たとえばECサイトで商品のレコメンデーションに利用されたり、未来予測の技術としても使われることから、非常に注目を集めています。
今回(米国時間4月9日)AWSは、そのビッグイベントであるAWS Summit 2015(San Francisco)で、AWS初の機械学習サービスである「Amazon Machine Learning」を発表しました。
このAmazon Machine Learningは実際にECサイトであるAmazon自体ののデータサイエンティストが使っている機械学習モデルを土台にしており、分析やモデル構築の性能の方も信頼できるものとなっているとのことです。
このサービスは対象者として、「 for developers of all skill levels to use machine learning technology.(機会学習テクノロジを使う全てのレベルの開発者に) 」と書いてあるように、データ専門家でない人たちも気軽に機械学習を利用することができるように設計されているようです。そして目玉機能として、アプリケーションからAPIを用いて、この機械学習機能を呼び出し、直接アプリから利用することができるので、今後はこの機械学習機能を利用したさまざまなアプリケーションが増えてくるのではないかと思います。
このように、大きな可能性を秘めているAmazon Machine Learningですが、最初からAmazon Redshiftをデータソースとしてサポートしていることも特徴です。つまり、データをRedshiftに溜め込んでおいて、それを元にモデルを作り(学習させ) 、確度の高い予測が可能になる、ということです。我々FlyData は、このRedshiftの使い方はひとつのキラーアプリケーションになると考え、今回は公開後なるべく早く、Amazon Redshiftを利用したこのサービスの検証を行いました。
Amazon Machine Learningを使ってみる
AWSの発表によるとAmazon Machine Learningのデータソースには「Amazon S3」「 Amazon Redshift」「 RDS MySQL」が利用可能となっています。(現時点では、RDS MySQLの利用はまだのようです。) 今回の検証には、FlyDataのサービスでも分析に利用している一部のサンプルデータを使いました。
では、さっそく検証を始めます。
セットアップウィザードの立ち上げ
AWSのコンソール画面にアクセスし、Amazon Machine Learningを選択します(図1) 。“ Get started” をクリックすると、2つのセットアップオプションが表示されます。今回のテストでは “ Standard setup” を選びました。“ Launch” ボタンを押して、セットアップウィザードを開始します。
図1 Amazon Machine Learningの開始画面
IAMロールの作成
まずはじめに、Amazon Machine LearningがデータソースであるAmazon Redshiftにアクセスできるように、IAMロールを作成する必要があります。こちらの設定は簡単なのでAmazon Machine LearningのIAMロールの作成の手順に従って作ります。
はじめにAmazon IAMの画面にアクセスし、メニューの左端にある” Role” を選び、 “ Create New Role” をクリックします。新しいロールを作成し、新しく追加したロール名を選び” Select” をクリックすると次の設定に進みます。
図2 Amazon IAMのロールタイプ選択画面
Datasourceの設定
IAMロールの作成完了後、データソースの作成に入ります。DatasourceのページでRedshiftを選択すると、クラスタ名、データベース名、クレデンシャル(パスワード) 、そして、必要なデータを呼び出すためのSQLクエリなどの入力を求められます。
図3 Datasourceの設定
必要な情報を入力すると、Amazon Machine Learningは自動でRedshiftのデータをS3にコピーし、そのデータファイルを操作し、それぞれのスキーマにあったデータの型の提案をしてくれます。もし、この型推測が正しくない場合は” Change Type” で修正することができます。
次は” Target” の設定です。
図4 Targeeの設定
この” Target” のページで利用するデータの訓練変数” Target Value” (またはY値)を決められます。訓練変数の設定を完了し、クリックを押し、さらに進めていくとデータソース作成準備が終わりデータソースオブジェクトの作成が始まります。
以下はデータソースオブジェクトの作成後に見ることができる可視化されたデータ分布の例です。
図5
機械学習モデルの構築
次は、機械学習モデルの構築です。Data sourceの詳細にある“ Create (train) ML model” のボタンを押して次の画面に進みます。
図6
“Create ML Model” のページを開くと、モデル構築の際に使うデータ量の比率を決めることができます。デフォルト設定のままの場合、元データの70%が訓練用、残りの30%をモデルの評価用として利用されます。
モデル構築を完了すると、作成したモデルの評価の結果(スコア)が確認ができます。
機械学習モデルの実行
最後のステップは、先ほどデータから構築したモデルを使った予測の実行になります。Data sourceの詳細画面へ行き、“ Use the data source to” というボタンをクリックし、ドロップダウンで表示される項目の“ Generate batch prediction” を選んでください。
次の画面で、どの機械学習モデルを利用するか、どのデータをモデルに適用するか、そしてどのS3バケットに予測結果を保存するのかを選びます。Step 4にある“ Finish” ボタンを押すと、予測を実行し、選んだS3バケットに結果が保存されます。
図7
結果はS3に保存されますが、この画面でもダウンロード可能です。
図8
Machine Learningの課金の仕方
ここで、AWSにあるMachine Learningの料金形態と、実際に今回かかったコストを見比べてみましょう。
課金体系
AWSのページによると、Amazon Machine Learningのコストは、
という2つの構造に分かれており、それぞれの利用料の合計が最終的に課金される金額となるようです。
Data Analysis and Model Building Fees
データ分析とモデル構築の際にかかる利用料は計算処理にかかる時間をベースに課金され、下記の要素によって左右されます。
データ量
元データの属性値の数
データに適用した変換の数と種類
この計算処理時間を用いて、$0.42/時間のレートで課金されます。
Prediction Fees
予測の実行には、バッチ予測とリアルタイム予測の2つの方法があり、それぞれ課金方式が少し異なっています。
バッチ予測
$0.10/1,000件 1,000件ごとの課金
リアルタイム予測
$0.0001/1件、さらにモデル利用の際に発生するメモリの容量(10MBの利用で$0.001/時間)の合計
これとは別にAmazon Redshift, S3, RDS MySQLの利用料が発生します。
実際にかかったコスト
今回のテストでは、Data sourceのデータ量は300MBほどで、「 データ分析とモデル構築」のステップに10分から15分ほどかかりました。こちらの方のコストは$2.25、また求めたモデルを使ったバッチ予測1000件分に$0.10かかり、合計$2.35を請求されました。
実際の料金の詳細を確認し気づいた点は、データ分析とモデル構築にかかる時間が「インスタンスの利用時間」だという点です。10分から15分の待ち時間が5時間相当のインスタンス利用時間となっていました。今回の検証ではデータ量も少なかったため料金的にも少ないのですが、念のため料金形態として留意しておいた方が良さそうです。
図9 実際の料金詳細
参考:AWSにあるAmazon Machine Learningの料金体系 。
まとめ
今回のAmazon Machine Learningの検証は簡単なデータを使ったものでしたが、最初のDatasource設定の部分でだいぶつまづいてしましました。設定の仕方の簡略化やRedshiftのデータをS3バケットに移し変えずにそのまま使えるようにしたり、入力データを直接Machine Learning内で扱えるようにするなど、まだまだ改良の余地がありそうでした。
しかし、データの処理能力はスケーラブルで、データ量が多くても、迅速にデータ解析や分析モデルの取得ができることが期待できそうです。このAmazon Machine Learningにより、もっと多くの人がデータ分析に興味を持つようになるのではないでしょうか。データ分析から得た知見をいかしてプロダクトの強化改善するという仕組みの構築にも一役買っていくでしょう。
今回は紹介を兼ねた簡単なテストとなりましたが、このサービスにより、Amazon Redshiftがより広く利用されることを期待しています。