推測統計●●●●●

A/Bテスト

A/B Testing ・ えーびーてすと

RCTをWebサービスに応用し、施策の効果をユーザーの無作為割付で検証する手法

✦ 30秒で試す — 航海差がゼロでも、毎日のぞけば「勝ち」は見つかってしまう30日のうちに、偽の「勝ち」が一度でも出る確率は?予想してみる

概要

A/Bテストは、Webサービスやアプリの施策の効果を確かめるために、ユーザーを無作為に2つのグループへ振り分け、一方には現行版(A)を、もう一方には新しい版(B)を見せて成果を比較する実験手法です。ボタンの文言、ページのレイアウト、レコメンドのアルゴリズム — 「変えたら良くなるはず」というアイデアを、思い込みではなくデータで検証するための仕組みです。

その正体は、医学で発展したランダム化比較試験(RCT)をオンラインの世界に移植したものです。ユーザーを無作為に割り付けるため、年齢・利用頻度・デバイスといったあらゆる属性が2群で平均的に釣り合い、成果の差を「施策そのものの効果」と解釈できます。しかもWebでは割付・配信・計測がすべて自動化でき、数十万人規模の実験を日常的に回せる — RCTの厳密さと圧倒的な実施コストの低さを両立させた点が、A/Bテストの革新でした。

現在ではGoogle、Amazon、Netflixといった大手サービスが常時数百〜数千の実験を並行して走らせており、「新機能はまずA/Bテストで検証してからリリースする」ことが、データドリブンなプロダクト開発の標準的な作法になっています。

なぜ生まれたか

Webサービスの改善は、長らく「声の大きい人の意見」や「デザイナーの経験と勘」で決まっていました。しかしリニューアルの前後で数字を比べるだけでは、季節要因やキャンペーン、ニュースでの言及など施策以外の変化が混ざり込み、効果を切り分けられません。これはまさに観察データにおける交絡の問題であり、因果推論の言葉でいえば「施策をしなかった場合に同じ期間・同じユーザーで何が起きていたか」という反事実が手元にない状態でした。

一方、Webにはこの問題を解く理想的な条件が揃っていました。ユーザーごとに表示内容を変えられ、行動がログとして自動的に記録され、割付をランダムにするのはコード1行で済みます。2000年代にGoogleが検索結果のリンク色を、Amazonがレコメンドの配置を実験で決めるようになり、「同じ期間に、無作為に分けた2群へ別バージョンを同時配信する」というオンライン実験の型が確立しました。前後比較の弱点だった時間的な変化は両群に等しくかかるため自動的に相殺され、残る差は施策の効果だけになる — RCTの論理がそのまま、日々のプロダクト改善の道具になったのです。

詳細

実験の流れ

A/Bテストは思いつきで走らせるものではなく、実験計画法の型に沿って設計します。典型的な流れは次のとおりです。

仮説を立てる主要指標と最小検出効果を決める必要な人数と期間を見積もる無作為にA群とB群へ割り付ける両群へ同時に配信する予定の期間後に検定する採用・不採用を判断する
A/Bテストの典型的な流れ。判断は予定の期間が終わってから

要になるのは配信前の設計です。まず「何を改善したいのか」を1つの主要指標(登録率、購入率など)に落とし込み、「どれくらいの差があれば実務的に意味があるか」(最小検出効果)を決めます。そのうえで検出力分析を行い、その差を検出するのに必要なサンプルサイズと実験期間を見積もります。登録率のような割合の指標で数%の改善を検出するには、群あたり数万〜数十万ユーザーが必要になることも珍しくありません。

訪問ユーザー属性はさまざま無作為割付 50 : 50A群 — 現行版コントロールB群 — 新版トリートメント登録率 4.0%登録率 4.4%← 差は施策の効果 →
A/Bテストの構造 — 無作為割付が2群の背景を釣り合わせ、差を施策の効果と解釈できるようにする

結果の読み方

実験が終わったら、2群の指標の差を仮説検定で評価します。割合の比較なら比率のz検定やカイ二乗検定、連続量の比較ならt検定が定番です。ただしp値が小さいことと、その差にビジネス上の価値があることは別問題です。巨大なサンプルでは0.01%の差でも「有意」になり得るため、差の大きさを信頼区間や効果量で示し、事前に決めた最小検出効果と照らして判断します。

典型的な落とし穴

もっとも有名な失敗が「のぞき見(peeking)」です。実験の途中経過を毎日眺め、有意になった瞬間に打ち切る — これをやると、事実上「毎日1回ずつ検定を繰り返して、どれか1回でも当たれば勝ち」というルールになり、多重比較と同じ仕組みで偽陽性率が公称の5%を大きく超えます。累積データのp値は日々ふらふらと上下する酔歩のような動きをするため、本当は差がなくても、30日のあいだに一度は 0.05 を割る確率が25〜30%に達するのです。対策は「事前に決めたサンプルサイズに達するまで判断しない」を徹底するか、途中で見ることを織り込んで有意水準を配分する逐次検定(群逐次デザインや、いつ止めても有効な常時有効 p 値など)やベイズ的な手法を使うことです。

⚡ 体験: 毎日のぞくと、差がなくても勝ってしまう
p < 0.05(有意)10.20.050.010.001p 値
毎日のぞいて、有意なら止める
—
最終日(30日目)だけ見る
—
実験回数0のぞき見の偽陽性率—最終日だけの偽陽性率—名目5%

A と B はまったく同じページです(差はゼロ)。「1回 実験する」を押すと30日分のデータが1日ずつ届き、その日までの累積で p 値を計算します。線が赤い帯(p < 0.05)に触れたら、のぞき見ルールはそこで「勝ち」を宣言します。

A/A テスト(両群ともコンバージョン率 5%、1日 200 人ずつ、30日間)。縦軸は累積データでの p 値(対数目盛り)

同様に、多数の指標や多数のセグメント(国別・デバイス別など)を同時に眺めれば、どれかは偶然有意になります。主要指標は1つに絞り、探索的に見つけたセグメントの差は次の実験で確認する、という規律が必要です。

実験の健全性を最初に確かめる習慣として、割付比のずれ(SRM: sample ratio mismatch)の検査があります。50:50で割り付けたはずなのに、実際の人数が 50.8% と 49.2% のように偏っていたら、どこかで一部のユーザーが脱落しているか、ログの取りこぼしが片群に偏っています。大規模な実験ではこの程度の偏りもカイ二乗検定ではっきり検出でき、SRM が出た実験の結果は、差の大きさに関わらず信用できません。原因(リダイレクトの遅さ、ボット除外の条件、キャッシュなど)を突き止めるまで結論を保留します。

時間の効果にも気をつけます。新しいデザインは「目新しさ」だけで一時的にクリックを集めることがあり(新奇性効果)、逆に慣れた操作が変わった戸惑いで最初だけ数字が落ちることもあります(変化への抵抗)。どちらも数週間で薄れるため、実験期間は少なくとも1〜2週間の曜日の周期をまたぐように取り、日ごとの効果の推移が安定しているかを確認します。

割付の質にも注意が必要です。同じユーザーが訪問のたびに別の群へ入ると体験が壊れ、効果も薄まるため、ユーザーIDに基づく安定した割付が基本です。またSNSのようにユーザー同士が影響し合うサービスでは、B群の変化がA群にも波及して差が過小評価される「干渉」が起き、独立性の仮定が崩れます。実験開始後に片群だけ離脱が偏れば、無作為化で消したはずの選択バイアスが復活することもあります。

A/Bテストで測れないもの

A/Bテストは強力ですが万能ではありません。測れるのは「無作為に割り付けられる施策」の「比較的短期の効果」に限られます。価格の大幅変更のように一部ユーザーだけに適用すると不公平になる施策、ブランドイメージのように効果が数年単位で現れるものは実験に向きません。また実験は「Bが良かった」と教えてくれますが「なぜ良かったか」は教えてくれないため、定性調査と組み合わせて仮説の質を上げることが重要です。無作為化できない場面で因果効果を推定したいときは、差の差法や傾向スコアといった観察データの因果推論手法が次の武器になります。

試問

A と B がまったく同じページ(本当は差がゼロ)の A/A テストを30日間続け、毎日その日までのデータで p 値を計算します。のぞき見ルールは、p 値が基準を一度でも割った日に「B の勝ち」を宣言して実験を止めます。毎日のぞくことはやめられません。本当は差がないので、「勝ち」はすべて偽陽性(差が無いのに有ると判定する誤り)です。変えられるのは、「勝ち」を宣言する p 値の基準だけです。

✦ 命題挑戦中

毎日のぞいて有意なら止めるルールのまま、1回ごとの判定基準を選び直して、A/A テスト全体の偽陽性率を 5% 以下に抑えよ

  • 1回ごとの判定基準を 0.05 より厳しくする(いま p < 0.05)
  • その基準で A/A テストを 300 回以上行う(いま 0 回)
  • 毎日のぞく偽陽性率が 5% 以下(いま —)
⚡ 体験: 1回ごとの基準を選んで、実験を重ねて測る
のぞき見ルールが止める基準
p < 0.05(有意)10.20.050.010.001p 値
毎日のぞいて、有意なら止める
—
最終日(30日目)だけ見る
—
実験回数0のぞき見の偽陽性率—最終日だけの偽陽性率—名目5%

A と B はまったく同じページです(差はゼロ)。「1回 実験する」を押すと30日分のデータが1日ずつ届き、その日までの累積で p 値を計算します。線が赤い帯(p < 0.05)に触れたら、のぞき見ルールはそこで「勝ち」を宣言します。

A/A テスト(両群ともコンバージョン率 5%、1日 200 人ずつ、30日間)。縦軸は累積データでの p 値(対数目盛り)