はじめに
KDD2024のFalse Positives in A/B Tests」を読みました。あの有名なカバ本の著者が書いています。備忘録としてメモを残しておきます。
Summary
- 実験の真の成功率(true “success” rate)と観測された実験の勝率(observed “win” rate)は別物だよ!
- 有意水準\(\alpha=0.10\)の利用は非推奨だよ!そのもとで有意な結果を示したA/Bテストの1/3以上は偽陽性だよ!
- 片側検定で\(\alpha=0.05\)のときも同様だよ!
- 群逐次デザイン(group sequential design)を利用すると、試験期間がわずかに増加するだけで偽陽性を結構抑えられるよ!
感想
- 組織単位で一定回数のA/Bテストをできているのであれば、論文中で紹介された手法で真の成功率を成功し、普段の実験設定のもとでFPR(False Positive Risk)がどの程度なのかを把握することは意義がありそうです
- FPRが許容できない確率となった場合は、\(\alpha\)を下げてテスト設計すればある程度解決するので、実務に導入しやすそうです
- (個人的には)\(\alpha=0.10\)はFPRが高すぎると感じたので使うべきではない気がします
- 群逐次デザインの導入は少しハードルが高いかもしれないですが、実応用できそうです
- 週次の季節性などを考慮して1週間単位でテストを行う場合など、「ちょっとだけ延長する」みたいなことは難しいケースもありそうです
- とはいえ企画されるA/Bテストが多いチームでは中間停止の恩恵も大きいので状況次第に思えます
- 頻度論だなぁという気持ちになりました
- \(P(H_0)\)のあたりの議論は本当にいいのか?という気持ちになります
- \(H_0\)が棄却されないからと言って\(H_0\)が正しいわけではないので一部の議論でう〜んとなります
- 僕の勘違いかもしれないですが、{真の効果量が0である, 真の効果量が\(\Delta\)である}の二つしか考えていないところがモヤっとしています(仮設検定なので仕方なくはありそうですが)
- ベイズに拡張するなら、組織の成功率の事前分布とかを置いて考えることができそうです
- この場合は効果量に事前分布を仮定できるので上の疑問が解消されます
各章のメモ
雑まとめなのでこれだけ読んでもあんまり参考にならないです。両側、片側を明示的に書いていないときは全て両側検定についてです。誤読箇所もあるかもしれないので、気になる点があればご連絡お待ちしています!
ch.1 introduction
- 一般にA/Bテストの成功率は低いと言われている(10~20%)
- 成功率が低い場合、\(\alpha=0.05\)では偽陽性の確率が高くなってしまうことが知られている
ch.2 the cost of false positive and false negative
- 偽陽性にはプロジェクトの方向性が誤った方向に進んでしまうリスクがある
- 偽陰性も当然リスクはあるが、偽陽性と比較すると比較的軽い
- 効果が小さい:偽陰性となったとき、そのアイデアは最小検出効果(MDE)に近い小さな効果しか持たない可能性が高い
- 近しいアイデアの実験を複数回行う:アイデアを放棄する前に、通常は似たようなテストを複数回行う。全てのテストで偽陰性となる確率は\(\beta^n\)に抑えられる
- 偽陽性と偽陰性はトレードオフの関係にある
- 組織はそれらのコストを勘案して\(\alpha\)を選択すべきである
ch.3 estimating the false positive risk
- p値は「仮説が正しい確率」であると誤解されることが多い
- 正しい定義:\(\text{p-value}=𝑃(\Delta \text{かそれ以上が観測される}|H_0 \text{が真})\)
- 多くの場合に私たちが興味のあるものは逆の条件付き確率である
- \(\text{p-value}=𝑃(H_0 \text{が真}|\Delta \text{が観測された})\)
- ベイズの法則を用いた式変形で簡単にこれを推定できる
- \(SS\):統計的に有意な結果
- \(\alpha\):有意水準
- \(1-\beta\):検出力
- \(\pi\):帰無仮説の事前確率、\(P(H_0)\)のこと
\[ \begin{aligned} FPR &= P(H_0|SS) \\ &= \frac{P(SS|H_0) * P(H_0}{P(SS}) \\ &= \frac{\alpha * \pi}{\alpha * \pi + (1-\beta)*(1-\pi)} \end{aligned} \]
- \(P(H_0)\)が分かればFPRを推定できる
- ソフトウェア業界におけるA/Bテストの成功率は[8%,33%]、中央値と最頻値が10%
- 一般的な条件のもとでFPRは直感的な数字よりも高い
- FPR=22%(片側\(\alpha=0.025, \beta=0.2, \pi=0.9\))
- FPR=36%(片側\(\alpha=0.05,\beta=0.2, \pi=0.9\))
- (片側\(\alpha=0.025, \beta=0.2, \pi=0.907\))の設定で、それぞれの確率がどうなるかを視覚的に表現
- 100マスが全ての実験の100%を表す(もしも300回実験している場合、1マスは3回分を表す)
- 緑色のマスは本当に効果があった9.3%の実験
- 検出力が80%なので、正しく陽性と検出されるのは\(9.3*0.8=7.4%\)(+マーク)
- 白色のマスは本当は効果がなかった90.7%の実験
- 有意水準が5%なので、誤って陽性と検出されるのは\(90.7*0.05=4.5%\)(+マーク)
- +マークのマスは有意差が検出された実験 \(7.4+4.5=11.9%\)
- 有意差が検出されたときに偽陽性である確率、FPRを計算する
- \(4.5/11.9=0.378\)、37.8%と非常に大きい!
ch.4 estimating the success rate
- 実験の勝利と成功を区別する
- 有意差が検出されること、つまり実験の勝利は必ずしも実験の成功を意味しない
- 検出力が低い実験だとeffect sizeが誇張されてしまうリスクがある
- 成功率の推定法について、3つのアプローチが紹介されている
ナイーブな方法
- 勝率をそのまま成功率とみなす方法
- 後述の方法より推定精度が悪い
Replicated Experiments
- 微妙なp値が得られたら再実験を行う
- そのまま計算すると多重検定になってしまうので、p値はFisher’s combined probability testやStouffer’s method で合成する
- 正しく手続きを行えば検出力が上がり偽陽性が低減される
- Stouffer’s methodを利用した結果が次の表
- Airbnbではいくつかの再現実験が失敗したことから、ナイーブに推定した勝率よりも真の成功率が低いことに気づいた
- ただし、上記の方法は偽陽性は制御できるが、偽陰性は保守的になってしまう
条件付き確率
- \(P(SS)\)を条件付き確率にもとづいて分解する
\[ \begin{aligned} P(SS) &= P(SS|H_0) * P(H_0) + P(SS|\neg H_0) * P(\neg H_0)\\ P(SS)&=\alpha *\pi + (1-\beta) * (1-\pi)\\ P(SS)&=\alpha *\pi + 1-\beta-\pi + \beta \pi\\ P(SS)&= \pi (\alpha+\beta-1) + 1-\beta\\ \pi (1-\beta-\alpha) &=1-\beta - P(SS)\\ \pi &= \frac{1-\beta - P(SS)}{(1-\beta-\alpha)}\\ \pi &= \frac{\text{Power} - P(SS)}{\text{Power} - \alpha} \end{aligned} \]
- 分解した結果から勝率を計算するとこんな感じになる
- 業界標準の\(\alpha=0.05\)は10~15%の勝率では妥当な近似値になっていることがわかる
- αが高くても低くてもナイーブアプローチは悪い
- 偽陽性のリスクと成功率の関係を\(\alpha\)ごとに可視化
- \(\alpha\)が高いほど、成功率が低いほどFPRが高くなってしまうことがわかる
Optimizelyの顧客レポート
- 前述の通り偽陽性率が\(\alpha\)に抑えられてもFPRが高くなるケースはある
- 95%信頼区間の”95%“に引っ張られてFPRが5%であると勘違いしてませんか?みたいな問題提起
*Expediaの実験レポート
- expediaでは標準的に\(\alpha=0.10\)でテストしていた
- やばかったことに気づいたので軌道修正中らしい
アルファの選び方
- 前提として観測される効果は0付近にばらつくだけではなく、マイナス影響を及ぼしてしまうものもある
- 組織によって偽陰性、偽陽性のコストは異なるはず
- 次の表をもとにコストを勘案して\(\alpha\)を選択できる
- \(\alpha=0.05,\beta=0.2\)でサンプルサイズを固定して各指標を計算
- コスト関数に対して最適な設定をハイライトしている
- 前述の通り偽陽性と偽陰性はコストが異なると考えられるので
- とはいえこの表では検出力が変わってしまっている
- 検出力固定でサンプルサイズを動かしながら\(\alpha\)を選択することも可能
- サンプルサイズを確保できるなら個人的には検出力固定の方が好み;)
- 確保できない場合はサンプルサイズ固定でやるしかなさそう
ch.5 false positive risk for p-value
- p値が高いとリスクも高い(less-than-alpha, and equal-to p-value.)
- p値の区間\([p_1, p_2]\)に対してFPRを推定できる
- p値が\([p_1, p_2]\)に含まれる確率をP12とする
- \(H_0\)が正しいもとではP値が一様分布することを利用
\[ \begin{aligned} FPR(p_1, p_2) &= P(H_0 | P12) \\ &=(P12 | H_0) \cdot P(H_0)/P12\\ &= (p_2-p_1) \cdot \pi /P12 \end{aligned} \] - \(P12\)は組織の実験全体に対してp値が\([p_1, p_2]\)に収まる割合で推定できる - 実験回数次第ではあるが、実用上はある程度範囲が広くないと推定精度が悪くなってしまうので注意
- \([0.01, 0.05]\)の区間に対して、FPRは33%
- \([0.05, 0.10]\)の区間に対して、FPRは67%
ch.6 replicating or extending Experiment
- 実験を拡張する方法やそのコストに関する章
- 以下で利用される実験設定
- \(\alpha=0.05,\pi=0.9\)
- この設定のもとで有意差が検出された時のFPRは22%
- p=0.05ちょうどのときのFPRは64%
- expediaによるとp値が\([0.05, 0.10]\)の範囲に収まるケースが全実験の37%を占めるため、きわどい結果は一定割合存在する
- \(\alpha=0.05,\pi=0.9\)
- きわどい実験結果が得られたときには試験期間の延長や再実験などのアプローチが考えられる
- もとの実験期間と同じだけ延長し、サンプルサイズを増やす
- ユニークユーザー数は線形に増えないことを注意
- 再ランダム化してもう一度実験を行う
- 解析にはFisher’s method や Stouffer’s methodなどが利用できる
- 上記二つのアプローチより、中間解析を伴う群逐次デザインが有用
- いくつか手法があるが、RのIdboundsパッケージに実装されている三つを簡単に紹介
- Pocockアプローチ :ユーザーの50%での解析で\(\alpha=0.03\)、ユーザーの100%での解析で\(\alpha=0.03\)とすることで、全体の\(\alpha\)を0.05に保つ。
- O’Brien-Flemingアプローチ:中間点では保守的に、p値が\(\alpha_1=0.005\)未満の場合にのみ成功を宣言し、全体の終了時にp値が\(\alpha_2=0.048\)未満であれば統計的に有意とする。
- Goldilocksアプローチ(上記の中間):\(\alpha_1=0.01\)に設定し、全体のタイプIエラーを5%に制御するために、\(\alpha_2=0.046\)以下に設定する。
- 前提として、そもそも中間解析をしない方が総合的にみた検出力は高い
- 検出力をあまり失わずに、早期停止が可能であることを考えると3が効率的か
- 平均実験期間は20%程度しか延長しないので、時間効率的にも悪くはない
Lowering the FPR
- FPR低下のためには検出力を高めるより、\(\alpha\)を下げる方が効率いい
Increasing Power with Low FPR
- ↑の話はFPRを低減させるための方法
- 検出力を高めるという方向性ではどうか
- 次の手順が提案されている
- 実験を実施:80%の検出力で実験を行う(例えば、2週間)
- p値が0.10を超える場合:実験を停止する。帰無仮説を棄却できない。
- p値が0.10未満だが、トリートメント効果の推定値が負の場合:実験を停止する。帰無仮説が真であるか、もし偽であればユーザーに悪影響を与えている。
- p値が0.01未満でトリートメント効果が正の場合:実験を停止する。これは「勝利」であり、低い偽陽性率(FPR)で帰無仮説を棄却できる。
- フェーズ2を実施:再現実験または拡張実験を行い、結合p値が0.01未満の場合にのみ帰無仮説を「勝利」として棄却する。
- 負の経験を長く与える可能性は低い(p値がある程度低いので効果が負である可能性は低く、ユーザーに不利益を大きく与える可能性は低い)
- 検出力を80%に維持した場合、実験時間は+20%、FPRは22%→5.9%に減少
- 検出力を固定したもとで、わずかな実験時間の増加でFPRを低減させることが可能になった
ch.7 success rate of ideas vs. experiments
- アイデアの成功率と実験の成功率は違う
- 実験はいろんなところでバグやミスが起きる
- 正しくアイデアを検証できたA/Bテストに絞れば成功率は10%より高いだろう、みたいな話
- 実験プラットフォームの成長も一因となる
- プラットフォームへの信頼が高まり、逆にQAの質が下がって成功率が低下したらしい
- 代わりに実験を迅速に中止できるようにした
おわりに
Enjoy!