17
pixiv 百百百百百百百百百百 pixiv 百百百百百百百百百百 Tatsuya Iwanari 2016.05.30 (2016.05.16~19, 30) 百百百百 : 百百百百百百百

Internship @ pixiv

Embed Size (px)

Citation preview

Page 1: Internship @ pixiv

pixiv 百科事典に表示されるpixiv コミック広告の最適化 Tatsuya Iwanari2016.05.30 (2016.05.16~19, 30)

メンター : えどばくふさん

Page 2: Internship @ pixiv

取り組んだこと

Pixiv 百科事典での広告の最適化(Pixiv コミック )

Page 3: Internship @ pixiv

問題の整理

多腕バンディット問題として扱える

+ 他のところでも使えるように汎用的にしたい=> カテゴリなどの記事依存の情報は使わない

( 情報は記事 : place_id, 広告 : ads_id)

e.g., 最も当たりやすいスロットを使い続けたいQ. 最も当たりやすいスロットをどう効率的に探す?[ 直感 ]● 現在一番当たっているものは有望だろう ( 活用 )● あまり見てないものに有望なものがあるかも ( 探

索 )試行をしながら

今回は百科事典の記事ごとに最も良い 3 つの広告を探す

Page 4: Internship @ pixiv

システム構成

API Gateway● リクエストを受ける endpoint を提供■ 管理者・ユーザからのリクエストを  HTTP リクエストとして受け取る

e.g., 広告の登録 / 広告の表示

AWS Lambda ($23)●AWS へのある入力に対する 出力を定義する (JS or Java)■API Gateway へのリクエストを処理  ( 実際のロジック部分 )

DynamoDB ($25)●AWS が提供する KVS 形式のデータベース■ 広告やその統計情報を保存する

すべて AWS 上で動かす Serverless な設計

Page 5: Internship @ pixiv

ユースケース 1 ( 広告の登録 )

Page 6: Internship @ pixiv

ユースケース 2 ( 広告の配信 )

Page 7: Internship @ pixiv

Endpoint 抜粋 (1)

/adsGET

概要 : 広告の選択input: {place_id}output: {3 つの広告の情報 } ( 現在は JSONP で返却 )

/conversionGET

概要 : conversion を行ったことを記録input: {place_id, ads_id}

POST概要 : conversion を行ったことを記録input: {place_id, ads_id} (JSON. body で指定する )

Page 8: Internship @ pixiv

Endpoint 抜粋 (2)/admin

/ads/{ads_id}

DELETE 概要 : 表示する広告の削除 input: {ads_id (path で指定する )}

GET 概要 : 広告の情報を取得 input: {ads_id (path で指定する )} outpu: 広告の情報

PUT 概要 : 広告の新規登録・更新 input: {ads_id (path で指定する ),

ads_info (JSON. body で指定する )}

Page 9: Internship @ pixiv

広告の選択 ( バンディット ) アルゴリズム

[ 直感 ( 再掲 )]● 現在一番当たっているものは有望だろう ( 活用 )● あまり見てないものに有望なものがあるかも ( 探

索 )[ 活用 ] と [ 探索 ] のバランスをどう取ると

効率よく最適なものを見つけられるか

いくつかアルゴリズムがある● 活用と探索を確率的に行う

○ 回数を重ねるごとに探索をする確率を下げる (epsilon-greedy)○ 当たるものを高い確率,当たらないものを低い確率で選ぶ (softmax)

● 活用と探索を考慮した評価式を使う○ UCB (Upper Confidence Bounds)○ KL-UCB

● もっと良い方法も…○ Tompson Sampling

実装が簡単なのでひとまずこれを使う

Page 10: Internship @ pixiv

UCB1 ( 広く知られた UCB 値 )UCB 値 : その手がどれくらい有望と期待されるか

これまでの経験から得られる評価値 (CVR な

ど )活用

どれくらい期待が持てるか( 信頼区間から )

探索

全体 ( 記事ごと ) の試行回数

この広告の表示回数

参考 : http://research.microsoft.com/en-us/um/people/sebubeck/Bubeckthesis.pdf P.29

記事ごとにこの値の上位 3 つの記事を表示する

工夫まで下げられる

Page 11: Internship @ pixiv

料金体系

AWS Lambda● リクエスト回数

● 利用リソース= タスクの処理時間

* 使用メモリ

● 上記 2 つの無料分 ( 月ごと ) がある

DynamoDB● 行単位 * 容量単位の課金

○ 読み出し

○ 書き出し (> 読み出しの課金額 [ やや複雑 ])● あらかじめ上記を見積もって設定する ( プロビジョニング )

料金を考慮したデータベースの設計に苦労

Page 12: Internship @ pixiv

本番環境での実験

実際に本番環境で試してみる● 5/19 ~ 5/30 ( およそ 12 日間 ) まで pixiv 百科事典に

[ かかったおおよその料金 ]AWS Lambda ($23)DynamoDB ($25)

Page 13: Internship @ pixiv

1 週間回した結果

impression が同じもので平均 CVR を求めた

全体の平均 CVR は実験前 (人気 3 つ ) とあまり変わらない…?

Page 14: Internship @ pixiv

考察と検討

● まとまりが見られる● 最適な結果となったかは

もう少し検討が必要…

グラフからわかること

その他・検討すべきこと

● 全体の平均 CVR は実験前とあまり変わらない=> 完全にランダムでも変わらないのか…?

● ランダムよりも良いなら意味があったといえる● ランダムでも変わらないならランダムが良いといえる

CVR が変わらないならまんべんなく出るほうが良い

Page 15: Internship @ pixiv

改善案

● より良いアルゴリズム最適な方法であることが証明済みの方法がある=> Tompson Sampling

● プロビジョニング最適化DynamoDB は予約した値で課金される=> Dynamic DynamoDB

Page 16: Internship @ pixiv

まとめ

● どの媒体でも使える汎用的な広告提示システムを構築した

● 結果としてはまだうまくいったかわからないところ…

● 広告の提示に関して新しい知見は与えられた

Page 17: Internship @ pixiv

5 日間お世話になりました!楽しかったです!