13
段階的FQの技巧 サイバーエージェント 大澤翔吾

段階的FQの技巧

Embed Size (px)

Citation preview

Page 1: 段階的FQの技巧

段階的FQの技巧サイバーエージェント

大澤翔吾

Page 2: 段階的FQの技巧

目次

● 自己紹介

● レコメンドエンジンとは

● Frequency Cappingとは

● コンテンツレコメンドにおけるFrequency Cappingの限界

● 段階的Frequency Capping

Page 3: 段階的FQの技巧

自己紹介

● 名前

大澤翔吾

● 仕事

A.J.A. Recommend Engine開発

● 趣味

○ PCゲーム

○ アーケードゲーム

○ 読書

Page 4: 段階的FQの技巧

レコメンドエンジンって何?

Webパブリッシャーの

グロース(PV増加)と

マネタイズ(広告収益の獲得)を

同時に達成するシステム。

「関連記事」「おすすめ記事」などを記事広告と共に表示する。

Page 5: 段階的FQの技巧

スクショ

Page 6: 段階的FQの技巧

Frequency Cappingとは

あるサイト訪問者に対して

特定の記事・広告が表示・クリックされる回数に制限を設けること。

何度もスルーされた記事あるいは既に読んだ記事が

何度も表示されることを防ぐことで、回遊効果・広告効果の改善を狙う。

Page 7: 段階的FQの技巧

AJAレコメンドにおけるFrequency Capping

Page 8: 段階的FQの技巧

Zero API担当 佐藤さんの声

(AJAレコメンドで導入パブリッシャー数が増えてきた頃)

このアクセス数で一度に100も200も問い合わせられるのはZero的にはちょっとしんどいですね

一度に問い合わせる数をもう少し減らせませんか?でも何度も問い合わせられるのも困ります。

Page 9: 段階的FQの技巧

この問題のポイント

● 候補は50 - 200件● 最終的なリストはもっと少なくて5 - 10件● 候補は既にレコメンドしたい順に並んでいる

● ただし、FQ条件に合致するものだけは除きたい

● FQ条件に合致するほど回遊するユーザーはあまりいない

リストの頭から少しずつ問い合わせれば、大体のケースで今までより少ない

記事数の問い合わせで済みそう!=段階的FQ

Page 10: 段階的FQの技巧

分割方法のアイディア

最終的な件数をN件とする

1. N件ずつ問い合わせる

大体のケースではうまく行きそう

候補が多くて、Nが小さいと、何回も問い合わせる羽目になる

2. 最初にN件問い合わせて、一件でも合致したら残り全てを問い合わせる

佐藤さん案

一件でも合致したときに問い合わせ記事数がかなり増える

問い合わせ回数は最大2回に抑えられる

3. 最初にN件、次に2N件、次に4N件…大澤案

可変長配列の伸長アルゴリズムに着想を得た

Page 11: 段階的FQの技巧

可変長配列の伸長アルゴリズム

● 配列が満タンの状態で要素が追加された時、

今より大きいサイズの配列を確保して、要素を移し替える

● 新しく確保する配列のサイズを、今のサイズ × k にすると、

要素追加の平均コストがO(1)になる

○ 新しい配列の確保回数がO(log2n)でおさえられる

● 一方、今のサイズ + kにすると、

要素追加の平均コストがO(n)になってしまう

詳しくは、「動的配列 計算量」や「償却解析」で検索

Page 12: 段階的FQの技巧

このアルゴリズムを踏まえてもう一度

● 最初にN件問い合わせて、FQ条件に合致しない件数がNに達するまで

2N件, 4N件 … と問い合わせる

● 候補記事数をMとすると、最大でlog2(M/N + 1)回の問い合わせ回数

● 例えばN = 5, M = 200のとき、log2(40 + 1) = 5.35755200462...

Page 13: 段階的FQの技巧

各手法の比較

括弧内の数値はN=5, M=200のとき

手法 一度に問い合わせる最大記事数 最大問い合わせ回数

N件ずつ N [5] M / N [40]

佐藤さん案 M - N [195] 2 [2]

大澤案 N * 2log(M/N + 1) - 1 [80] log2(M / N + 1) [5. 4]

まあまあバランスの良い手法ですね