A/Bテストを始めたものの、何週間待っても結果が有意にならず、結局どちらが良かったのかわからないまま終わってしまった。そんな経験はないでしょうか。
トラフィックが限られるスタートアップや個人開発のプロダクトでは、これは珍しい話ではありません。待てば待つほど開発のスピードは落ち、テスト自体をやめてしまうチームも出てきます。
この問題に対する、実務でもっとも広く使われている処方箋のひとつがCUPEDです。実験を始める前の行動データを使って結果のばらつきを減らし、同じ人数でもより小さな差を見つけられるようにする手法です。
この記事では、CUPEDが何をしているのかを数式に頼りすぎずに解説し、どれくらい効くのか、どこで効かないのか、導入するときに何に気をつけるべきかを順に整理します。
CUPEDとは何か
最初に、名前と目的をはっきりさせておきましょう。CUPEDは、A/Bテストの結論を早く、確かに出すための統計的な補正方法です。
名前の由来と生まれた場所
CUPEDは Controlled-experiment Using Pre-Experiment Data の略で、直訳すると実験前のデータを使った比較実験です。MicrosoftのBingの実験基盤チームに所属していた研究者らが、2013年の学会WSDMで発表した論文 Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data で提案しました。
その後、実験プラットフォームを提供する各社の製品にも同じ考え方が組み込まれ、いまではオンライン実験の標準的な技法として扱われています。
狙いは平均ではなく、ばらつき
A/Bテストで知りたいのは、AとBの平均の差です。ところが、その差が偶然なのか本物なのかを判断するときに邪魔をするのが、ユーザーごとの数値のばらつき(分散)です。
もともと毎日たくさん使うヘビーユーザーと、月に一度しか来ないライトユーザーが混ざっていると、施策の効果よりも人による差のほうがずっと大きくなります。その雑音に埋もれて、本当の差が見えなくなるのです。
ばらつきが減ると何がうれしいのか
統計的に同じ確からしさで差を検出するのに必要な人数は、ばらつきの大きさにほぼ比例します。ばらつきを半分にできれば、必要な人数も約半分で済みます。
必要な人数の決め方そのものはA/Bテストのサンプルサイズ設計で詳しく扱っています。CUPEDは、その計算式に入るばらつきそのものを小さくする側からアプローチする手法だと考えるとわかりやすいでしょう。
仕組み:実験前の行動で「その人らしさ」を差し引く
CUPEDの考え方は、式を見る前に直感で理解できます。ポイントは、実験中の数値のうち、実験前から予想できていた部分を取り除くことです。
直感で理解する
たとえば、1人あたりの週の閲覧ページ数を比較するテストを考えます。実験前の週に30ページ見ていた人は、実験中もおそらく多めに見るはずです。
その人が実験中に32ページ見たとしても、その大半はもともとの習慣によるものです。CUPEDは、実験前の数値から予想できる分を差し引き、予想からどれだけずれたかを比べます。
こうすると人による差という雑音が消え、施策による差だけが残りやすくなります。体重の増減を比べるときに、スタート時点の体重を差し引いてから比べるのと似た発想です。
式で見るとこうなる
補正は、次のようなシンプルな式で表せます。Yが実験中の指標、Xが同じユーザーの実験前の値です。
Y_cuped = Y − θ × (X − Xの全体平均)
θ = Cov(X, Y) ÷ Var(X) # XでYを予測する回帰の傾き
Var(Y_cuped) = Var(Y) × (1 − ρ²) # ρ は X と Y の相関係数
一行目が補正そのものです。実験前の値が平均より高い人ほど、その分だけ実験中の値を割り引いて評価します。
二行目の係数θは、実験前の値が1増えると実験中の値がどれだけ増える傾向にあるかを表します。実験前後のデータから推定する値で、補正の強さを決めるつまみの役割を果たします。
三行目がこの手法の核心で、補正後のばらつきは、XとYの相関の2乗だけ小さくなります。相関が強いほど、ばらつきは大きく減るということです。
なぜ結果が歪まないのか
数値をいじると結果が都合よく変わるのでは、と心配になるかもしれません。ここで効いてくるのが、ユーザーをAとBにランダムに割り振っているという事実です。
ランダムに割り振っていれば、実験前の値Xの平均はAとBでほぼ同じになります。すると差し引く量も両群で平均的に同じになり、平均の差の推定は歪まず、ばらつきだけが減るのです。
これが、Xに必ず実験前のデータを使わなければならない理由でもあります。Microsoftの解説でも、この補正は偏りと引き換えにばらつきを減らすものではない、という点が強調されています。
計算例:相関の強さで効果はどれだけ変わるか
ここからは、相関の強さによって必要な人数がどう変わるのかを具体的に見ていきます。以下の数値は説明用の仮定で、実際の効果はプロダクトや指標によって大きく変わります。
相関と必要人数の関係
補正後のばらつきは元の(1 − ρ²)倍になるため、同じ検出力を得るのに必要な人数もほぼ同じ比率で減ります。相関係数ρごとに整理すると次のとおりです。
| 実験前後の相関ρ | 決定係数R²(ρ²) | 必要な人数(元の何%) | 実質的な人数の倍率 |
|---|---|---|---|
| 0.3 | 0.09 | 約91% | 約1.10倍 |
| 0.5 | 0.25 | 約75% | 約1.33倍 |
| 0.7 | 0.49 | 約51% | 約1.96倍 |
| 0.9 | 0.81 | 約19% | 約5.26倍 |
右端の列は、補正なしのテストで同じ精度を出すには何倍の人数が必要かを示しています。相関が0.3程度だと恩恵は1割ほどですが、0.7を超えると人数は約半分で済む計算です。
仮のプロダクトに当てはめる
仮に、週に1万人が訪れるプロダクトで、補正なしだと4万人、つまり4週間かかるテストがあるとします。閲覧ページ数の実験前後の相関が0.7なら、必要な人数は約2万人に減り、約2週間で同じ精度に届く計算になります。
一方、相関が0.3しかない指標なら、短縮は数日程度にとどまります。どの指標で補正が効くかを事前に確かめておくことが、期待外れを防ぐ近道です。
どれくらい効くのか:Microsoftの報告から
では、現実のプロダクトではどうでしょうか。Microsoftの実験基盤チームは、2022年の解説記事でその実態を率直に報告しています。
効果を測る物差し:実質的なトラフィック倍率
この記事では、ばらつき削減の効果を実質的なトラフィック倍率(effective traffic multiplier)という物差しで表しています。1 ÷ (1 − R²) で計算され、補正なしのテストで同じ精度を出すには何倍のトラフィックが必要かを示す値です。
先ほどの表の右端の列と同じ考え方です。記事のシミュレーションでは、R²が0.4のときに倍率の中央値は1.66倍で、検出力にして22%の向上にあたると説明されています。
プロダクトによって効果は大きく違う
興味深いのは、同じMicrosoftの中でも効果に大きな差があったという報告です。ある製品では指標の68%超で倍率が1.05倍以下にとどまり、ほとんど効きませんでした。
一方、別の製品では指標の55%超で倍率が1.2倍を超えていました。つまりCUPEDは万能の加速装置ではないということです。
記事では、効果は製品やテレメトリー、実験、指標の性質に左右されると説明されています。ユーザーの行動が週をまたいで安定しているプロダクトほど効き、利用が単発的なプロダクトほど効きにくいと理解しておくとよいでしょう。
回帰分析との関係
同じ記事では、CUPEDは条件をそろえれば、統計学で古くから使われる共分散分析(ANCOVA)の一種と同等だとも述べています。まったく新しい魔法ではなく、確立した回帰による補正を、大規模なオンライン実験で運用しやすい形に整えたものだと言えます。
効きにくい場面と落とし穴
ここまで良い面を中心に見てきましたが、CUPEDには効きにくい場面と、使い方を誤ると結果を壊す落とし穴があります。導入前に押さえておきたい点を整理します。
実験前のデータがない新規ユーザー
もっとも大きな制約は、初めて訪れたユーザーには実験前のデータがないことです。新規登録フローやランディングページのテストでは、対象の大半が新規ユーザーになり、補正の効果はほとんど期待できません。
実務では、欠けている値を0や平均で埋め、データの有無を表す印を別に持たせて補正するのが一般的です。ただしそれで雑音が減るのは、データがある既存ユーザーの部分だけです。
0か1かの指標は相関が弱くなりやすい
購入したかどうかのような0か1かの指標は、実験前の値との相関が弱くなりがちです。購入のような頻度の低い行動では、実験前の期間に一度も起きていない人が大多数になるためです。
こうした指標では、実験前の購入有無の代わりに、訪問回数や閲覧ページ数など、より頻繁に起きる行動を補正に使うと相関を確保しやすくなります。何を使えば効くかは、過去データで相関を確かめてから決めましょう。
実験中に変わりうる値を使わない
もっとも危険な誤りは、補正に使う変数Xに、施策の影響を受けうる値を混ぜてしまうことです。たとえば実験期間中の訪問回数を使うと、施策が訪問を増やした場合に、その効果まで差し引いてしまいます。
これは推定を歪める、れっきとしたバイアスです。Xは割り付けより前に確定している値に限る、というルールは例外なく守る必要があります。
事前期間の選び方
実験前の期間が短すぎると相関が弱くなり、長すぎると古い行動を拾いすぎます。どの期間が最適かはプロダクトの利用サイクル次第なので、1週間、2週間、4週間などで過去データの相関を比べて決めるのが確実です。
また、実験前に極端な値だった人が、実験中に平均へ戻っていく現象にも注意が要ります。この点は平均への回帰の記事で詳しく解説していますが、ランダム割り付けとCUPEDの組み合わせでは、両群に同じように起きるため結論は歪みません。
導入の進め方と、ほかの手法との関係
最後に、実際にCUPEDを導入するときの進め方と、隣接する手法との関係を整理します。
まずは過去データで効き目を見積もる
いきなり本番の判定に組み込む前に、過去のデータで主要指標ごとに実験前後の相関を計算してみましょう。相関の2乗がそのまま、どれだけ人数を節約できるかの目安になります。
手順としては、次の3つを押さえれば十分です。
- 主要指標ごとに、1〜4週間の事前期間で相関を計算する
- 相関が高い指標だけ補正の対象にし、効かない指標は補正なしで判定する
- 補正前と補正後の結果を並べて報告し、差が大きすぎる場合は原因を調べる
補正前後を並べておくと、補正が結論をひっくり返していないかを確かめる安全装置にもなります。両者が大きく食い違うなら、ランダム割り付けやデータの取り込みに問題がある兆候かもしれません。
ばらつき削減と、ほかの手法の役割分担
CUPEDは、テストを早く終わらせる手法のひとつにすぎません。似た目的を持つ手法と比べると、それぞれ守備範囲が違うことがわかります。
| 手法 | 何を変えるか | 向いている場面 |
|---|---|---|
| CUPED | 指標のばらつきを減らす | 既存ユーザーが多く、行動が安定している |
| 逐次検定 | 途中で結果を見るルールを整える | 途中で止める判断を安全にしたい |
| バンディット | 配分を学習しながら変える | 厳密な効果量より成果の最大化を優先 |
途中で結果を覗く問題はA/Bテストのピーキング問題で、配分を動かすアプローチはマルチアームドバンディットで扱っています。CUPEDで人数を節約しても、途中で覗いて止めてよいことにはならない点は、特に誤解されやすいので注意してください。
小さなチームこそ恩恵が大きい
CUPEDは大企業の手法だと思われがちですが、実はトラフィックが少ないチームほど恩恵を実感しやすい手法です。人数が半分で済むことは、月に2本しか回せなかったテストを4本回せることを意味します。
しかも、計算そのものは表計算ソフトでも再現できるほど単純です。まずは手元の過去データで相関を一度計算してみるだけでも、自分たちのテストがどれだけ速くなりうるかの見当がつきます。
まとめ:人を増やす前に、雑音を減らす
CUPEDは、実験前の行動データを使ってユーザーごとの差という雑音を差し引き、A/Bテストのばらつきを減らす手法です。ランダム割り付けのおかげで平均の差は歪まず、実験前後の相関が強いほど必要な人数が減ります。
ただし、効き目はプロダクトと指標次第で、新規ユーザーや頻度の低い0か1かの指標では効きにくくなります。そして補正に使う値は、必ず割り付け前に確定したものに限らなければなりません。
テストがなかなか終わらないと感じたら、トラフィックを増やす方法を考える前に、手元の過去データで相関を計算してみてください。雑音を減らすだけで、同じ人数のまま答えにたどり着けるかもしれません。
参考:Deep Dive Into Variance Reduction(Microsoft Research, Experimentation Platform)