3 - Amazon Web Services

Amazon Machine Learning
Rasmus Ekman
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
アジェンダ
• 機械学習とデータエコシステム
• 例でみるスマートアプリケーション(と良くない例)
• Amazon Machine Learning (Amazon ML) - 機能
とメリット
• Amazon MLを使って開発する
• Q&A
データはアプリケーションの基礎構造
フロントエンドとUX
モバイル
バックエンドと
オペレーション
データと
アナリティクス
3種類のデータ駆動型開発
遡及的分析とレ
ポーティング
Amazon Redshift
Amazon RDS
Amazon S3
Amazon EMR
3種類のデータ駆動型開発
遡及的分析とレ
ポーティング
Amazon Redshift,
Amazon RDS
Amazon S3
Amazon EMR
即時の判断
リアルタイム処理と
ダッシュボード
Amazon Kinesis
Amazon EC2
AWS Lambda
3種類のデータ駆動型開発
遡及的分析とレ
ポーティング
Amazon Redshift,
Amazon RDS
Amazon S3
Amazon EMR
即時の判断
リアルタイム処理と
ダッシュボード
Amazon Kinesis
Amazon EC2
AWS Lambda
予測
スマートアプリ
ケーションを作
成可能にする
機械学習とスマートアプリケーション
機械学習はデータから自動的にパターンを
発見し、それを新しいデータが発生した時
に予測として使うためのテクノロジー
機械学習とスマートアプリケーション
機械学習はデータから自動的にパターンを
発見し、それを新しいデータが発生した時
に予測として使うためのテクノロジー
データ + 機械学習 = スマートアプリケーション
スマートアプリケーションの例
ユーザについて知って
いる内容に基いて判断
する:
ユーザは製品を使って
くれるか?
スマートアプリケーションの例
ユーザについて知って
いる内容に基いて判断
する:
注文について知ってい
る内容に基づいて判断
する
ユーザは製品を使って
くれるか?
この注文は詐欺ではな
いか?
スマートアプリケーションの例
ユーザについて知って
いる内容に基いて判断
する:
注文について知ってい
る内容に基づいて判断
する
ニュース記事について知っ
ている内容に基いて判断す
る:
ユーザは製品を使って
くれるか?
この注文は詐欺ではな
いか?
他の記事はどう興味深い
のか?
さらにその他の例 …
詐欺の検知
不正取引の検知、 スパムeメールのフィルタリング、 疑わし
いレビューのマーキング …
パーソナライゼーション
コンテンツのレコメンデーション、予測的なコンテンツロード、
ユーザエクスペリエンスの改善 …
ターゲットマーケティング
オファーとお客様のマッチング、 マーケティングキャンペーン
の選択、クロスセリングやアップセリング …
コンテンツ分類
ドキュメントのカテゴリー分類、履歴書と採用マネージャの
マッチング …
変動予測
サービスを使うのを止めそうなお客様の検知、 無料ユーザ
からアップグレードのオファー …
カスタマーサポート
お客様からのメールの適切な転送先推測、ソーシャルメディ
アリスニング …
スマートアプリケーションを作成する – 良くないやり方
Alex様、
素晴らしいguadcopterが
セールでたったの$49.99です!
良くない例で見るスマートアプリケーション
SELECT
FROM
GROUP
HAVING
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
BY c.ID
o.date > GETDATE() – 30
直近30日で注文して
くれたお客様「全員」
にオファーを送って
みよう
良くない例で見るスマートアプリケーション
SELECT
FROM
GROUP
HAVING
AND
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
BY c.ID
o.date > GETDATE() – 30
… いやTOYS(おも
ちゃ)を買ったお客様
だけに限定しよう
良くない例で見るスマートアプリケーション
SELECT
FROM
GROUP
HAVING
AND
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
BY c.ID
o.category = ‘toys’
(COUNT(*) > 2
AND SUM(o.price) > 200
AND o.date > GETDATE() – 30)
)
… さらに、他のおも
ちゃヘリコプター
(HELICOPTER)を60
日前までに購入したか、
30日前までに200ド
ル以上購入という条件
を付けよう
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%
%’
AND o.date > GETDATE() - 60)
OR (COUNT(*) > 2
AND SUM(o.price) > 200
AND o.date > GETDATE() – 30)
)
… いや待てよ、
”quadcopter”にも対
応しないと行けない
よね? 条件を
COPTERにしよう
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%copter%’
AND o.date > GETDATE() )
OR (COUNT(*) > 2
AND SUM(o.price) > 200
AND o.date > GETDATE() – 30)
)
… 最近買ったっていっ
ても60日は短すぎるよ
ね?
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%copter%’
AND o.date > GETDATE() - 120)
OR (COUNT(*) > 2
AND SUM(o.price) > 200
AND o.date > GETDATE() –
)
)
… さらに変更。200ド
ル以上を「40日」前ま
でに買った人が適切
なのでは…
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%copter%’
AND o.date > GETDATE() - 120)
OR (COUNT(*) > 2
AND SUM(o.price) >
AND o.date > GETDATE() – 40)
)
… 150ドルぐらいか?
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%copter%’
AND o.date > GETDATE() )
OR (COUNT(*) > 2
AND SUM(o.price) > 150
AND o.date > GETDATE() – 40)
)
… 120日は長すぎかな
良くない例で見るスマートアプリケーション
SELECT
FROM
c.ID
customers c
LEFT JOIN orders o
ON c.ID = o.customer
LEFT JOIN products p
ON p.ID = o.product
GROUP
BY c.ID
HAVING o.category = ‘toys’
AND ((p.description LIKE ‘%copter%’
AND o.date > GETDATE() )
OR (COUNT(*) > 2
AND SUM(o.price) > 150
AND o.date > GETDATE() – 40)
)
データからビジネスルー
ルを学ぶために機械学
習を使いましょう!
スマートアプリケーションが続々と登場しないのはなぜか?
1. 機械学習の専門家が少ない
2. 機械学習の仕組みを作り、スケールさせることは
技術的に困難
3. モデルとアプリケーションのギャップを縮めるには、
長い時間と高い費用が必要になる
スマートアプリケーションを作るには
専門家
技術
使いやすさ
データサイエンティスト
の人数は限られる
多くの選択肢があるが
決定的なものが無い
複雑で間違いを起こし
やすいワークフロー
外注するのは高くつく
使いこなし、スケールさ
せることが困難
特殊なプラットフォーム
とAPI
カスタムソリューションを モデルライフサイクル管
作成するために多くの細 理を無駄に再発明
かい作業が毎回必要に
なる
もし、より良い方法があったら?
Amazon MLの登場
使いやすく、マネージド。開発者のために
作られた機械学習サービス
Amazon内部のシステムで利用されてい
た堅牢でパワフルな機械学習の技術
AWSクラウドにすでに格納されている
データを元にモデルを作成可能
モデルを一瞬で本番環境に適用できる
使いやすく、開発者にとって扱いやすい
直感的でパワフルなサービスコンソールを使って初
期モデルの作成、調査
– データの取得
– モデルのトレーニング、クオリティ評価、微調整
– デプロイと管理
フル機能のAPIとSDKでモデルのライフサイクルを
自動化
– Java, Python, .NET, JavaScript, Ruby, Javascript
スマートiOS, AndroidアプリケーションをAWS
Mobile SDKで作成可能
パワフルな機械学習テクノロジー
Amazonで鍛えられた百戦錬磨の内部テクノロジー
がベース
アルゴリズムだけの提供ではなく:
– スマートなデータ変換
– データ入力およびモデルクエリーのアラート
– 業界のベストプラクティスを内蔵
ニーズに合わせて成長
– 最大100GBまでのトレーニングデータに対応
– 10億個の予測を生成
– バッチもしくはリアルタイムに予測を取得
AWSデータエコシステムとのインテグレーション
S3、 Amazon Redshift、 RDS上のMySQL
に格納されたデータにアクセス
S3に予測を出力することで、他のデータフ
ローと容易にインテグレーション
データアクセスパーミッションのポリシーを、
AWSの認証アクセス管理(IAM)を使って、
詳細な粒度で設定
フルマネージドのモデル&予測サービス
サーバの準備や管理が不要で、エンドツーエン
ドのサービスを提供
ワンクリックで、予測モデルをデプロイ
プログラム可能なクエリーモデルのメタデータ
により、自動的な再学習ワークフローを実現
Amazon CloudWatchのメトリクスで、予測の
利用パターンをモニター可能
使った分だけ、安価な支払い
データ分析、モデルトレーニング、評価:
$0.42/インスタンス時
バッチ予測: $0.10/1000
リアルタイム予測: $0.10/1000
+ 1時間毎のキャパシティリザベーションチャージ
Amazon MLでスマートアプリケーションを作成する
1
2
3
モデルの
作成
評価と最適化
予想を得る
Amazon MLでスマートアプリケーションを作成する
1
2
3
モデルを
トレーニング
評価と最適化
予想を得る
- データを指定することで、データソースを作成
- データを検索し、理解する
- データを変換し、モデルをトレーニング
データソースを作成する
>>> import boto
>>> ml = boto.connect_machinelearning()
>>> ds = ml.create_data_source_from_s3(
data_source_id = ’my_datasource',
data_spec= {
'DataLocationS3':'s3://bucket/input/',
'DataSchemaLocationS3':'s3://bucket/input/.schema'},
compute_statistics = True)
データを調査し、理解する
モデルをトレーニングする
>>> import boto
>>> ml = boto.connect_machinelearning()
>>> model = ml.create_ml_model(
ml_model_id=’my_model',
ml_model_type='REGRESSION',
training_data_source_id='my_datasource')
Amazon MLでスマートアプリケーションを作成する
1
2
3
モデルを
トレーニング
評価と最適化
予想を得る
- モデルのクオリティを理解する
- モデルの解釈を調整する
モデルのクオリティを調査する
モデルの解釈を調整する
モデルの解釈を調整する
Amazon MLでスマートアプリケーションを作成する
1
2
3
モデルを
トレーニング
評価と最適化
予想を得る
- バッチ予測
- リアルタイム予測
バッチ予測
非同期、巨大なボリュームに対しての予測生成
サーバコンソールもしくはAPIからリクエスト
データソースをバッチで取得するアプリケーションに適している
>>> import boto
>>> ml = boto.connect_machinelearning()
>>> model = ml.create_batch_prediction(
batch_prediction_id = 'my_batch_prediction’
batch_prediction_data_source_id = ’my_datasource’
ml_model_id = ’my_model',
output_uri = 's3://examplebucket/output/’)
リアルタイム予測
同期、短い遅延、高いスループットで予測を生成
サービスAPI、サーバ、モバイルSDKからリクエスト
個別のデータレコードに対して、インタラクション処理を実行するアプリケーションに
適している
>>> import boto
{
'Prediction': {
'predictedValue': 13.284348,
'details': {
'Algorithm': 'SGD',
'PredictiveModelType': 'REGRESSION’
}
}
>>> ml = boto.connect_machinelearning()
>>> ml.predict(
ml_model_id=’my_model',
predict_endpoint=’example_endpoint’,
record={’key1':’value1’, ’key2':’value2’})
}
スマートアプリケーションのための
アーキテクチャパターン
EMRを使用したバッチ予測
EMRで処理
S3にある元データ
Amazon ML batch APIで予
測をクエリーする
集計済データをS3に
予測データを
S3に
アプリケーション
Amazon Redshiftを使ったバッチ予測
Amazon ML batch APIで予
測をクエリーする
アプリケーション
Amazon Redshiftに構造
化データ
Amazon Redshiftに
予測データをLOAD
-もしくはS3から直接、
予測データを読み取り
S3上の予測データ
インタラクティブアプリケーション用のリアルタイム予測
Amazon ML Real-Time API
で予測をクエリーする
アプリケーション
既存データフローに予測を追加する
+
Lambdaでイベントトリガー
+
Amazon ML Real-Time APIで予測を
クエリーする
アプリケーション
Amazon
DynamoDB
SAN FRANCISCO