Amazon Personalizeでやらかした話

Amazon Personalizeでやらかした話

2019/07/10

11d0b5a9bcbdb07d838bf8ac3f841834?s=128

KosukeShimizu

July 10, 2019
Tweet

Transcript

  1. 1.

    Copyright 2019 HANDS LAB INC. All rights reserved. Amazon Personalizeで

    やらかした話 清水 幸佑(Kosuke Shimizu)
  2. 2.

    自己紹介 • 清水幸佑 (しみず こうすけ) • 1995年生まれの長野育ち • 青色大好き •

    数学好き ◦ 鈴木貫太郎さんの動画が 面白い • ハンズラボ 2018新卒で入社 • よく書く言語 ◦ Python(メイン) ◦ PHP(サブ) ◦ Go(趣味) @thimi0412
  3. 5.

    4 Amazon Personalizeとは • 2019/6/10に一般提供開始 • アプリケーションを使用している顧客に対して開発者が個別のレコメンデーションを 
 簡単に作成できるようにする機械学習サービス 


    
 • AutoMLの機能を使用すれば 
 アルゴリズムの選択やモデルのトレーニングまで行ってくれる 
 
 • APIのエンドポイントも作成してくれる 
 
 • S3にCSVファイルを用意すればデータを取り込んでくれる 
 
 • Qiitaに記事を書きました 
 Amazon Personalizeでやらかさないための使い方とLamdbaでの使用方法 
 https://qiita.com/thimi0412/items/15ef2c22646634804034

  4. 6.

    5 Amazon Personalizeとは USER_ID,ITEM_ID, TIMESTAMP 582,456,1477897643 582,458,1477897643 582,490,1472037749 601,855,1472033257 601,451,1472033257

    USER_ID,AGE,GENDER 180,71,male 185,55,female 332,30,female 352,51,male 365,22,female ITEM_ID,ITEM_NAEM,CATEGORY_ID 461,歯ブラシ(青),1 693,オールスパイス ,10 112,赤ワイン,9 113,白ワイン,9 369,キャンドル(10本入),6 ユーザと商品の購買データ ユーザのデータ 商品のデータ モデル API 全部自動でやってくれる! APIにユーザIDを送ることで 推薦する商品IDが得られる
  5. 8.

    7 作成したアーキテクチャ Amazon API Gateway AWS Lambda Amazon Personalize client

    { "item_list": [ "2200399000000", "4571243110130", "4539427300012", "2430000362002" ] } 推薦商品IDを格納したJSONが返される
  6. 9.

    8 どんな商品が推薦されているのか? import boto3 len(users) # およそ3万 personalizert = boto3.client(

    'personalize-runtime' , region_name ='ap-northeast-1' ) for user in users: recommend_item = personalizert .get_recommendations( campaignArn ="<Campaign ARN>" , userId =user['user_id'],) • どんな商品が推薦されているか気になったので 以下のコードを実行! なんか遅いけど 大丈夫か!
  7. 14.

    13 3,214.70$って何円だっけ • 約34万円 • なぜか何度も3,214.70$でググる • たった2日で34万円は辛い • AWSのサポートからも

    大丈夫ですか的な連絡が来ている • AWS SUMMITのセッションの 内容が飛ぶほどの衝撃 申し訳ねぇ...
  8. 15.

    14 原因はTPSの最小値の設定 ここの数値を200にしていた! • TPS(transactions per second) 1秒に最低何回処理を行うか • TPSを1に設定すると

    レコメンドの取得は1秒間に1回まで • DynamoDBのキャパシティー みたいな感じ • それにしても16,073.500TPS-hoursは さすがにやりすぎた • せめてやるならTPSを1にして 処理の間にスリープ処理を入れるべき だった
  9. 16.

    15 実運用する時はどうすればいいのか Amazon API Gateway AWS Lambda Amazon Personalize client

    Amazon DynamoDB 1. 事前にユーザへの商品の推薦を行い DynamoDBに入れておく AWS ECS Task Schedule 2. LambdaはDynamoDBから推薦された商品 IDを取得する