ベイジアンABテスト
ランダム化実験、別名AB テストは、因果効果を推定するための業界で確立された標準です。治療法 (新製品、機能、UI など) を母集団のサブセット (ユーザー、患者、顧客など) にランダムに割り当てることで、平均して、結果 (収益、訪問数、クリック数など) の違いが確実に得られるようにします。治療に帰する。Booking.comのような確立された企業は、同時に何千もの AB テストを常に実行していると報告しています。また、 Duolingoのような新興企業は、成功の大部分を大規模な実験の文化に帰しています。
非常に多くの実験を行うと、1 つの疑問が自然に浮かびます。特定の 1 つの実験で、以前のテストからの情報を活用できますか? どのように?この投稿では、ベイジアン アプローチを AB テストに導入することで、これらの質問に答えようとします。ベイジアン フレームワークは、新しいデータを使用して既存の知識 (事前情報) を更新できるため、このタイプのタスクに適しています。ただし、この方法は関数形式の仮定に特に敏感であり、事前分布の歪度など、明らかに無害なモデルの選択が、非常に異なる推定値に変換される可能性があります。
検索と無限スクロール
この記事の残りの部分では、アザベドらに大まかに触発されたおもちゃの例を使用します。(2019) :検索品質を犠牲にすることなく広告収入を増やしたい検索エンジン. 私たちは確立された実験文化を持つ会社であり、ランディング ページを改善する方法について新しいアイデアを継続的にテストしています。新しい素晴らしいアイデアを思いついたとしましょう:無限スクロールです! ページの個別のシーケンスを作成する代わりに、ユーザーがより多くの結果を表示したい場合は、下にスクロールし続けることができます。
無限スクロールが機能するかどうかを理解するために、AB テストを実行しました。ユーザーを処理グループと対照グループにランダム化し、処理グループのユーザーに対してのみ無限スクロールを実装しました。dgp_infinite_scroll()からデータ生成プロセスをインポートしますsrc.dgp。以前の記事に関して、ランダム化とデータ生成を処理する新しい DGP 親クラスを生成しましたが、その子クラスには特定のユース ケースが含まれています。からいくつかのプロット関数とライブラリもインポートしsrc.utilsます。コードだけでなくデータやテーブルも含めるために、Jupyter に似た Web ベースの共同ノートブック環境である Deepnoteを使用します。
10.000 人の Web サイト訪問者に関する情報がありad_revenue、彼らが生成した月間データ、彼らが治療グループに割り当てられて を使用しているかどうかinfinite_scroll、および月間平均値も持っていpast_revenueます。
ランダムな治療の割り当てにより、平均差の推定量が不偏になります。治療群と対照群は平均して同等であると予想されるため、結果の平均観察された差を治療効果に因果関係を与えることができます. 線形回帰によって治療効果を推定します。infinite_scrollの係数を推定治療効果として解釈できます。
これinfinite_scrollは確かに良いアイデアだったようで、平均月収が 0.1524$ 増加しました。さらに、効果は 1% の信頼水準でゼロとは有意に異なります。
past_revenue回帰を制御することで、推定量の精度をさらに向上させることができます。推定された係数の賢明な変化は期待できませんが、精度は向上するはずです (制御変数について詳しく知りたい場合は、CUPEDとDAGに関する私の他の記事を確認してください)。
確かに、past_revenue電流の予測性が高くad_revenue、推定係数の精度はinfinite_scroll3 分の 1 減少します。
これまでのところ、すべてが非常に標準的です。ただし、冒頭で述べたように、ブラウザー (そして最終的には広告収入) を改善するために行った実験はこれだけではないとします。無限スクロールは、私たちが過去にテストした何千ものアイデアの中の 1 つにすぎません。この追加情報を効率的に使用する方法はありますか?
ベイジアン統計
頻度論的アプローチに対するベイジアン統計の主な利点の 1 つは、モデルに追加情報を簡単に組み込むことができることです。この考え方は、すべてのベイズ統計の背後にある主要な定理であるベイズの定理から直接導かれます。ベイズ定理により、推論問題を逆にすることでモデルの推論を行うことができます。データが与えられたモデルの確率から、モデルが与えられたデータの確率まで、はるかに扱いやすいオブジェクトです。
ベイズの定理の右辺は、事前確率と尤度の 2 つの要素に分割できます。尤度はデータから得られるモデルに関する情報であり、事前確率はモデルに関する追加情報です。
まず、ベイズの定理をコンテキストにマッピングしましょう。データとは何か、モデルとは何か、関心のあるオブジェクトは何か?
- 結果変数y、処置Dおよびその他の変数、および定数 (まとめてXとして表す)で構成されるデータ
ad_revenueinfinite_scrollpast_revenue - モデルは、
ad_revenue与えられpast_revenueた とinfinite_scroll特徴y|D,Xの分布です。 - 対象は事後Pr (model | data)
ad_revenueであり、特にとの関係infinite_scroll
ベイジアン回帰
線形モデルを使用して、頻度論的アプローチと直接比較できるようにしましょう。
これは、線形係数βとτ、および残差σの2 セットのパラメーターを持つパラメトリック モデルです。モデルを記述する同等の、しかしよりベイジアンな方法は次のとおりです。
ここで、セミカラムはデータをモデル パラメータから分離します。頻度論的アプローチとは異なり、ベイジアン回帰では、 yの条件付き分布を近似するために中心極限定理に依存しませんが、それが正規分布であると直接仮定します。
モデル パラメーターβ、τ、およびσで推論を行うことに関心があります。頻度論的アプローチとベイジアン アプローチのもう 1 つの重要な違いは、前者ではモデル パラメーターが固定されていて未知であると仮定しているのに対し、後者ではモデル パラメーターを確率変数にできることです。
この仮定には非常に実用的な意味があります。モデル パラメータに関する以前の情報を事前分布の形式で簡単に組み込むことができます。名前が示すように、事前確率には、データを見る前に入手できた情報が含まれています。これは、ベイジアン統計で最も関連性の高い質問の 1 つにつながります:どのように前確率を選択しますか?
優先順位
事前分布を選択する場合、分析的に魅力的な制限の 1 つは、事後分布が同じファミリに属するような事前分布を持つことです。これらの事前確率は共役事前確率と呼ばれます。例えば、データを見る前は自分の治療効果が正規分布していると思い込んでいて、データに含まれる情報を組み込んだ後も正規分布になるようにしたいと考えています。
ベイジアン線形回帰の場合、 β、τ、およびσの共役事前確率は、正規および逆ガンマ分布です。事前に標準の正規および逆ガンマ分布をやみくもに使用することから始めましょう。
確率的プログラミング パッケージPyMCを使用して推論を行います。まず、モデルを指定する必要があります。つまり、さまざまなパラメーターの事前分布とデータの可能性です。
PyMC には、モデルをグラフとして視覚化できる非常に優れた機能がありますmodel_to_graphviz。
グラフィカルな表現から、さまざまなモデル コンポーネント、それらの分布、およびそれらが互いにどのように相互作用するかを確認できます。
これで、モデル事後を計算する準備が整いました。それはどのように機能しますか?つまり、モデル パラメーターの実現をサンプリングし、それらの値が与えられたデータの尤度を計算し、対応する事後分布を導き出します。
ベイジアン推論にはサンプリングが必要であるという事実は、歴史的にベイジアン統計の主なボトルネックの 1 つでした。ただし、これは、モデル コンピューターの計算能力の向上に伴い、ますます問題ではなくなりました。
これで、結果を検査する準備が整いました。まず、この方法を使用して、線形回帰に使用しsummary()たパッケージによって生成されたものと非常によく似たモデルの要約を出力できます。statsmodels
推定されたパラメーターは、頻度論的アプローチで得られたものに非常に近く、推定効果はinfinite_scroll0.157 に等しくなります。
サンプリングが遅いという欠点がある場合、非常に透過的であるという利点があります。事後分布を直接プロットできます。治療効果τでやってみましょう。PyMC 関数plot_posteriorは事後分布をプロットし、95% 信頼区間に相当するベイジアンを黒いバーで示します。
予想どおり、共役事前確率を選択したため、事後分布はガウス分布に見えます。
これまでのところ、あまりガイダンスなしで事前確率を選択してきました。ただし、過去の実験にアクセスできたとします。この特定の情報をどのように組み込むのですか?
過去の実験
無限スクロールのアイデアは、私たちが過去に試してテストした数多くのアイデアの中の 1 つに過ぎなかったとします。アイデアごとに、対応する実験のデータと、対応する推定係数があります。
過去の実験から 1000 の推定値を生成しました。この追加情報をどのように使用しますか?
通常の優先順位
最初のアイデアは、過去のデータ分布を反映するために事前確率を調整することです。正規性の仮定を維持し、過去の実験からの推定値の平均値と標準偏差を使用します。
平均すると、実質的ad_revenueに 0.0009 の影響がありませんでした。
ただし、実験全体でかなりのばらつきがあり、標準偏差は 0.029 でした。
τの事前分布の過去の推定値の平均と標準偏差を使用して、モデルを書き直してみましょう。
モデルからサンプリングしてみましょう
治療効果パラメータτのサンプル事後分布をプロットします。
推定された係数はかなり小さく、以前の推定値である 0.16 から 0.11 になりました。なぜそうなのですか?
実際のところ、以前の係数 0.16 は、前もって考えると非常にありそうにありません。事前分布が与えられた場合、同じ値またはより極端な値を取得する確率を計算できます。
この値の確率は事実上ゼロです。したがって、推定された係数は、以前の平均である 0.0009 に向かって移動しています。
スチューデント・プライア
ここまでは、すべての線形係数について正規分布を仮定してきました。それは適切ですか?切片係数β₀から始めて、視覚的に確認してみましょう (分布を比較する方法に関する他の方法については、こちらを確認してください) 。
分布はごく普通のようです。治療効果パラメータτはどうでしょうか?
分布は非常に重いです ! 中央では正規分布のように見えますが、裾ははるかに「太く」、非常に極端な値がいくつかあります。測定誤差を除いて、これは業界でよくある設定であり、ほとんどのアイデアの効果は非常に小さいかゼロであり、ブレークスルーとなるアイデアはほとんどありません。
この分布をモデル化する 1 つの方法は、student-t分布です。特に、平均 0.0009、分散 0.003、自由度 1.3 の t-student を使用して、過去の推定値の経験的分布のモーメントと一致させます。
モデルからサンプリングしてみましょう。
そして、治療効果パラメーターτの標本事後分布をプロットします。
推定された係数は、0.11 である標準の法線事前で得られたものと同様になりました。ただし、信頼区間が [0.077, 0.016] から [0.065, 0.015] に縮小しているため、推定値はより正確です。
何が起きたの?
収縮
答えは、使用したさまざまな事前分布の形にあります。
- 標準法線、N(0,1)
- モーメントが一致した法線、N(0, 0.03)
- 一致したモーメントを持つ t-student t₁.₃(0, 0.003)
ご覧のとおり、すべての分布はゼロを中心としていますが、形状は大きく異なります。標準正規分布は、[-0.15, 0.15] 区間で基本的にフラットです。すべての値は基本的に同じ確率です。代わりに、最後の 2 つは、平均と分散が同じであっても、形状が大きく異なります。
それは私たちの見積もりにどのように変換されますか? 事前分布ごとに、さまざまな推定値の暗黙の事後分布をプロットできます。
ご覧のとおり、事前分布が異なると、実験的推定値が非常に異なる方法で変換されます。標準正規事前確率は、[-0.15, 0.15] 区間の推定値には基本的に影響しません。モーメントが一致した通常の事前確率では、代わりに各推定値が約 2/3 縮小されます。t-student 事前確率の効果は代わりに非線形です。小さな推定値をゼロに向かって縮小しますが、大きな推定値はそのまま保持します。灰色の点線は、実験的推定τ^ のさまざまな事前確率の影響を示しています。
結論
この記事では、AB テストの分析を拡張して、過去の実験からの情報を組み込む方法を見てきました。特に、AB テストにベイジアン アプローチを導入し、事前分布を選択することの重要性を確認しました。同じ平均と分散が与えられた場合、「ファット テール」(非常に歪んだ) を持つ事前分布を仮定すると、小さな効果の収縮が大きくなり、大きな効果の収縮が小さくなることを意味します。
直観は次のとおりです。「ファット テール」を伴う事前分布は、画期的なアイデアはまれであるが不可能ではないと仮定することと同じです。この投稿で見たように、これは実験後だけでなく、実験前にも実用的な意味を持ちます。実際、アゼベドらによって報告されているように。(2020)、アイデアの効果の分布がより「正常」であると思われる場合は、より小さな効果を発見できるように、少数ではあるが大規模な実験を実行することが最適です. そうではなく、アイデアが「ブレークスルーかゼロか」、つまり効果がファットテールであると考える場合は、大きな効果を検出するために大きなサイズは必要ないため、小さくても多くの実験を実行する方が理にかなっています。
参考文献
- E. Azevedo、A. Deng、J. Olea、G. Weyl、多くの A/B テストによる治療効果の経験的ベイズ推定: 概要(2019)。AEA の論文と議事録。
- E. Azevedo, A. Deng, J. Olea, J. Rao, G. Weyl, AB Testing with Fat Tails (2020). 政治経済ジャーナル。
- A. Deng、オンライン制御実験のための客観的ベイジアン 2 サンプル仮説検定(2016)。WWW '15 コンパニオン。
元の Jupyter ノートブックは次の場所にあります。
読んでくれてありがとう!
ほんとうにありがとう!投稿が気に入ってもっと見たい場合は、私をフォローすることを検討してください。因果推論とデータ分析に関連するトピックについて、週に 1 回投稿します。私は、コード、例、およびシミュレーションを常に提供して、投稿をシンプルかつ正確に保つように努めています。
また、小さな免責事項:私は学ぶために書いているので、最善を尽くしても間違いは当たり前です. 見つけたら教えてください。また、新しいトピックに関する提案もお待ちしております。

![とにかく、リンクリストとは何ですか?[パート1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































