Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon Personalizeでやらかした話

Amazon Personalizeでやらかした話

2019/07/10

KosukeShimizu

July 10, 2019
Tweet

More Decks by KosukeShimizu

Other Decks in Technology

Transcript

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

    やらかした話 清水 幸佑(Kosuke Shimizu)
  2. 自己紹介 • 清水幸佑 (しみず こうすけ) • 1995年生まれの長野育ち • 青色大好き •

    数学好き ◦ 鈴木貫太郎さんの動画が 面白い • ハンズラボ 2018新卒で入社 • よく書く言語 ◦ Python(メイン) ◦ PHP(サブ) ◦ Go(趣味) @thimi0412
  3. 4 Amazon Personalizeとは • 2019/6/10に一般提供開始 • アプリケーションを使用している顧客に対して開発者が個別のレコメンデーションを 
 簡単に作成できるようにする機械学習サービス 


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

  4. 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. 7 作成したアーキテクチャ Amazon API Gateway AWS Lambda Amazon Personalize client

    { "item_list": [ "2200399000000", "4571243110130", "4539427300012", "2430000362002" ] } 推薦商品IDを格納したJSONが返される
  6. 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. 13 3,214.70$って何円だっけ • 約34万円 • なぜか何度も3,214.70$でググる • たった2日で34万円は辛い • AWSのサポートからも

    大丈夫ですか的な連絡が来ている • AWS SUMMITのセッションの 内容が飛ぶほどの衝撃 申し訳ねぇ...
  8. 14 原因はTPSの最小値の設定 ここの数値を200にしていた! • TPS(transactions per second) 1秒に最低何回処理を行うか • TPSを1に設定すると

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

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