KDD ‘17で、Audience Appreciation Awardにも選ばれていた”An efficient bandit algorithm for real-time multivariate optimization”という論文を読みました。

Amazonがコンバージョンを上げるためにいわゆるA/Bテストをいかに効率よく行うかという問題をMulti-armed banditの手法で解いたというものです。例えばあるECサイトのウェブページがあったとします。 このページにはコンポーネント5つあり、それぞれ取りうるパターンが決まっています。ボタンは赤か青、画像は3パターンが用意されているといった具合に。この時すべてのパターンをテストするには48パターン(=2☓2☓3☓2☓2)を試す必要がありますが、更にそれぞれのパターンの妥当なテストボリュームを考えると、Amazonのトラフィックサイズでもこのテストには全部で66日程度かかるそうです。

widget

コンポーネントが増えると、組み合わせが爆発してしまうのでこのパターンを抑える必要があります。このためのモデルをまず考えてみましょう。

モデル

簡単のためレイアウト上のコンポーネントのパターンはすべて同じとします。つまり、i番目のコンポーネントのパターンをNiとすると

N1=N2==N

となります。そしてD個のコンポーネントがあるとすると組み合わせのパターンは全部でNDとなります。i番目のコンポーネントのパターンをA[i]と表すとするとレイアウトはA{1,2,...,N}D として表現することができます。

モデルに対する報酬(Reward)を決めるのはレイアウトだけではありません。ユーザの属性や時間、場所などのセッション情報からも決まります。同じレイアウトでも人によって何を買うか違いますしね。これをコンテキスト, Xとして表現します。この時与えられる特徴はBA,XRMM次元ベクトルで表されます。時刻tにおいて選ばれるレイアウトをAt、モデルのパラメタをWとするとRewardの期待値は

E[R|A,X]=g(BTAt,XW)

となります。gは何らかの滑らかなリンク関数です。この時次のレイアウトA

A=argmaxE[RA,Xt]

を満たすものが選ばれますが、Multi-armed banditでは将来に渡っての報酬も増やさなければいません。これは以下のように定式化できます。

Δt=E[RA,Xt]E[RA,Xt]

Δtを同時に最小にすることを求められます。これをRegretといいます。「あー、あっちを選んでおけばよかった」という感覚でしょうか。一般にはΔtの下界はO(MT)となることが知られています。

ではどのように最適なWを求めたらよいでしょうか。ここでは計算量を抑えるためにpair-wiseな特徴だけ考慮することにします。つまり各コンポーネントのRewardへのインパクトと各2コンポーネント間の関係のみを考慮します。 3つ以上は考慮しないことで計算量を抑えます。

BTA,XW=W0+Di=1Wi(A)+Dj=1Dk=j+1Wj,k(A)+Ll=1Wcl(X)+Dm=1Ln=1Wcm,n(A,X)

このモデルを使って学習を行う部分は以下のようにThompson Samplingというアルゴリズムを用います。Thompson SamplingはMulti-armed banditの問題を解くために古くから使われるもので(考案されたのは1933年とも)、期待報酬を最大にするようなレイアウトを選んでいきます。

Thompson Sampling

得られた報酬の履歴から事後分布を計算していきますが、ここでもやはりargmaxBTA,XtWtの計算量が問題になります。取りうるレイアウトのパターンはO(ND)あるからです。

山登り法(Hill Climbing)

この論文では山登り法を使って最大報酬期待値を得るレイアウトを推定します。下表にあるようにいくつかのパターンに対してK回ランダムにコンポーネントを選択し、このコンポーネントのみを変更したとき最大報酬を与えるようなレイアウトを返します。これを様々な初期値A0Sで行い最終的に最も期待報酬の高いレイアウトを返します。計算量はO(SKN)とずっと小さくなることがわかります。

hill climbing

評価

evaluation

評価では上記5つの手法を比較していました。MVT*というのが提案されている方法でNDMABDMABsが従来手法です。下図はiteration毎のregretの値です。MVT1, MVT2の方が比較的速く収束していることがわかります。

local regret

下記はN = 8, D = 3でも山登り法の評価ですが、K=5程度でregretの値は収束することがわかります。

hill climbing eval

Recap

この手法が個人的に面白いと思った点は

  • 各コンポーネントの関連が重みで表現できるためデザイナーを巻き込んでUI/UXの改善につなげることができそう
  • 計算スピードの高速化に重きをおいているのでビジネスにおける意思決定に大きく貢献できる

特に2つめはこの手法でExploration-Exploitationのバランスをとりつつ、効果のでなさそうなレイアウトを先に排除しておくことでより洗練されたデザイン、レイアウトに時間を使うことができるかもと思いました。

Reference