A/Bテストの結果画面を開いたら、メインの指標は引き分けだった。けれど、スマホの新規ユーザーに絞ると新しいデザインがはっきり勝っている。
そんな結果を見て、思わず報告資料に書き込みたくなった経験はないでしょうか。
その勝ちは本物かもしれません。ただし、見る指標や切り口を増やすほど、偶然だけで生まれる勝ちも確実に増えていきます。
これが統計でいう多重比較問題です。
この記事では、多重比較問題がなぜ起きるのかを計算例で確かめ、Bonferroni補正・Holm法・Benjamini-Hochberg法という代表的な補正の考え方と、実務での使い分けを整理します。数式が苦手な方でも追えるように、すべて具体的な数字で説明します。
多重比較問題とは?
多重比較問題とは、ひとつのデータに対して検定(偶然かどうかを判定する計算)を何度も繰り返すと、本当は差がないのに差があると判定してしまう確率が、回数に応じて膨らんでいく現象のことです。英語では multiple comparisons problem や multiple testing problem と呼ばれます。
有意水準5%の本当の意味
A/Bテストでよく使う有意水準5%とは、本当は差がない場合でも、20回に1回くらいは偶然で差があるように見えてしまうことを、あらかじめ許容するという約束です。この誤りを第一種の過誤、つまり偽陽性と呼びます。
1回の検定だけなら、5%のリスクは十分に小さく感じられます。問題は、この約束が検定1回ごとに適用されるという点にあります。
テスト全体で5%なのではなく、比べるたびに5%ずつ外れくじが混ざっていく。この感覚をつかむことが、多重比較を理解する第一歩です。
サイコロを何度も振るのと同じ
20面のサイコロで1の目が出たら当たり、というくじを考えてみてください。1回だけ振るなら当たる確率は5%ですが、20回振れば、どこかで1回は当たるほうがむしろ自然です。
検定を重ねるのは、このサイコロを何度も振ることと同じです。ゼリービーンズの色を一色ずつ調べていったら、緑だけがニキビと関係ありと出てしまう、という有名な風刺漫画(xkcdの「Significant」)は、まさにこの構図を笑いにしたものです。
検定の回数で偽陽性はどれだけ増えるのか
では、実際にどのくらい増えるのでしょうか。ここでは、すべての検定で本当は差がなく、かつ検定どうしが独立しているという単純な仮定で計算します。
少なくとも1つ誤って勝つ確率
m回の検定のうち少なくとも1つで偽陽性が出る確率は、1 −(1 − 0.05)のm乗で求められます。この確率をFWER(ファミリーワイズエラー率)と呼びます。
検定の数ごとに計算すると、次の表のようになります。
| 検定の数 | 少なくとも1つ偽陽性が出る確率 | Bonferroni補正後の基準 |
|---|---|---|
| 1 | 5.0% | 0.05 |
| 5 | 約22.6% | 0.01 |
| 10 | 約40.1% | 0.005 |
| 20 | 約64.2% | 0.0025 |
| 50 | 約92.3% | 0.001 |
指標を10個見るだけで、どれか1つが偶然勝って見える確率は約4割に達します。50個なら、何も効いていなくてもほぼ確実にどこかが有意になります。
検定の数は思ったより多い
ここで注意したいのは、検定の数が自分で数えているより多くなりがちなことです。1つのテストでも、指標が5個、端末が3種類、新規とリピーターの2区分を見れば、組み合わせは30通りになります。
さらにバリエーションを3案以上並べたり、結果を毎日のぞいて判断したりすれば、比較の回数はもっと増えます。途中でのぞく問題についてはA/Bテストのピーキング問題(覗き見問題)とは?で詳しく扱っていますが、根っこは同じで、判定の機会が増えるほど偶然が紛れ込みます。
多重比較が起きやすい4つの場面
多重比較は特別な分析をしたときだけでなく、ごく普通の振り返りの中で起きます。代表的な場面を整理すると、次の4つです。
- 指標をたくさん並べて、勝っているものだけを報告する
- 端末・流入元・地域などでセグメントを切り、差が出た層を探す
- 3案以上のバリエーションを、それぞれ元のデザインと比べる
- 結果が出なかったテストを、条件を変えて何度も再分析する
後から切り口を探すのが一番危ない
この中で最も危険なのは、結果を見てから切り口を探す使い方です。差が出るまでセグメントを変え続ければ、どこかで必ず有意な層が見つかります。
しかもその層は、たまたまばらつきが大きかった層である可能性が高いのです。次のテストで同じ層を狙っても再現しない、という典型的な失敗につながります。
バリエーションを増やすと比較も増える
元のデザインに対してA案・B案・C案を並べると、それだけで比較は3回になります。さらに案どうしを比べれば6回に増え、どれか1案が偶然勝って見える確率も上がります。
案を多く並べたくなるのは自然なことですが、1案あたりの人数が減るうえに偽陽性も増えるという二重の不利を抱えます。案は本当に試したい仮説の数に絞るのが基本です。
二次指標の勝ちを主役にしない
メインの指標が引き分けで、二次指標のどれかだけが勝っている場合も同じです。二次指標は本来、メインの結果を解釈するための補助であり、勝ちを探すための予備の宝くじではありません。
壊してはいけない指標を見張る役割についてはガードレール指標とは?で解説していますが、見張り役と勝ち負けを決める主役は、事前に分けておくことが大切です。
代表的な補正方法と考え方
多重比較への対処は、大きく分けて2つの考え方があります。1つ目は誤りを1つも出さないことを重視する方法、2つ目は誤りの割合を一定以下に抑える方法です。
Bonferroni補正:もっとも単純で厳しい
Bonferroni補正は、有意水準を検定の数で割るだけの方法です。10個の指標を見るなら、0.05 ÷ 10 = 0.005 を新しい基準にします。
計算が簡単で、どんな状況でもFWERを5%以下に抑えられます。ただし検定が増えるほど基準が厳しくなり、本当に効いている変化まで見逃しやすくなるのが弱点です。
Holm法:Bonferroniを少しゆるめる
Holm法は1979年に提案された方法で、Bonferroniと同じくFWERを抑えながら、見逃しを減らす工夫をしています。p値(偶然でこの差が出る確率の目安)を小さい順に並べ、1番目は0.05 ÷ m、2番目は0.05 ÷(m − 1)と、順番に基準をゆるめながら判定していきます。
途中で基準を満たさないものが出たら、そこで判定を打ち切ります。Bonferroniより不利になることはないため、FWERを守りたい場面ではまずHolm法を選ぶのが無難です。
指標どうしが連動していると補正は厳しすぎる
Bonferroni補正やHolm法は、検定どうしの関係を考えずに使える反面、指標が連動している場合には必要以上に厳しくなります。たとえばクリック率と申込率は同じ行動の延長なので、片方が偶然動けばもう片方も動きやすい関係にあります。
こうした場合、実際の偽陽性率は計算上の想定より低く、補正は安全側に倒れすぎます。厳しすぎる補正は、効いている施策を見送る損失として跳ね返ってくることを覚えておきましょう。
Benjamini-Hochberg法:誤りの割合を抑える
1995年にBenjaminiとHochbergが提案した方法は、考え方そのものが違います。誤りをゼロにするのではなく、有意と判定したもののうち誤りが占める割合の期待値、つまりFDR(偽発見率)を5%以下に抑えることを目標にします。
指標やセグメントを数十個見る探索的な分析では、1つも間違えないという目標は厳しすぎます。少しの誤りを許して本当の発見を拾いやすくするのが、この方法の狙いです。
たとえば有意と判定したものが20個あれば、そのうち1個程度は偶然かもしれない、という水準で管理するイメージです。誤りを完全には排除しないので、見つけたものは次の検証で確かめる前提で使います。
計算例:3つの方法で判定はこう変わる
ここでは、10個の指標を比べた仮想のテストで、3つの方法の結果を比べてみます。数値は説明用の仮定です。
p値を小さい順に並べる
p値を小さい順に並べ、Benjamini-Hochberg法の基準である、順位 ÷ 10 × 0.05 と比べたのが次の表です。
| 順位 | p値 | BH法の基準 | BH法の判定 |
|---|---|---|---|
| 1 | 0.001 | 0.005 | 有意 |
| 2 | 0.008 | 0.010 | 有意 |
| 3 | 0.012 | 0.015 | 有意 |
| 4 | 0.041 | 0.020 | 有意でない |
| 5 | 0.090 | 0.025 | 有意でない |
6位以下のp値は0.2以上なので省略しています。BH法では、基準を満たす一番下の順位までをすべて有意と判定するため、上位3つが有意になります。
方法ごとの結果
補正をしなければ、0.05未満の4つが有意になります。Bonferroni補正の基準は0.005なので、有意になるのは1位の1つだけです。
Holm法では、1位は0.005を下回るので有意ですが、2位の0.008は0.05 ÷ 9 ≒ 0.0056を上回るため、そこで打ち切りとなり、結果はやはり1つです。同じデータでも、どの誤りを抑えたいかによって結論が1個から4個まで変わることがわかります。
計算は数行で済む
BH法の手順は、表計算ソフトでも数行のコードでも再現できます。考え方をつかむための最小限の例を示します。
def benjamini_hochberg(pvalues, q=0.05):
m = len(pvalues)
order = sorted(range(m), key=lambda i: pvalues[i])
cutoff = 0
for rank, i in enumerate(order, start=1):
if pvalues[i] <= rank / m * q:
cutoff = rank
return [i for i in order[:cutoff]]
p = [0.001, 0.008, 0.012, 0.041, 0.09, 0.2, 0.35, 0.5, 0.7, 0.9]
print(benjamini_hochberg(p)) # [0, 1, 2]
実際の分析では、統計ライブラリの多重比較補正の関数を使うほうが安全です。それでも中身が単純な並べ替えと比較だと知っておけば、ツールの出力を疑うこともできます。
実務での使い分け:補正の前に、比較を減らす
補正方法を覚えることも大切ですが、実務で効くのは、そもそも比較の数を増やさない設計です。補正は最後の安全装置だと考えてください。
事前に決めておく3つのこと
テストを始める前に、判断に使う主要指標を1つ、見張り役の指標、見る予定のセグメントを決めて記録しておきます。主要指標が1つなら、勝ち負けの判定に補正は要りません。
見る予定のセグメントが決まっていれば、検定の数も事前にわかります。必要な人数の見積もりも、補正後の厳しい基準を前提に立てられます。
人数設計の考え方はA/Bテストのサンプルサイズ設計を参考にしてください。
目的別の選び方
どの方法を選ぶかは、間違えたときの痛みで決めるのが実用的です。目安をまとめると次のようになります。
| 場面 | 重視すること | 向いている方法 |
|---|---|---|
| 本番リリースの可否を決める | 誤って勝ちと言わない | 主要指標1つ(補正不要) |
| 少数の指標をまとめて判定する | 誤りを1つも出さない | Holm法 |
| 多数のセグメントを探索する | 発見を取りこぼさない | BH法 |
| 事後に見つけた差 | 再現するか確かめる | 次のテストで検証 |
ベイズ型の分析なら問題は消えるのか
p値を使わないベイズ型のA/Bテストなら多重比較は関係ない、という説明を見かけることがあります。確かに判断の枠組みは異なりますが、切り口を増やして一番よい結果だけを拾う行為の危うさは変わりません。
どの手法を使う場合でも、事前に決めた比較と、後から探した比較を区別して扱うことが基本になります。
探索で見つけた差は仮説として扱う
補正をしても、後から見つけた差は仮説にすぎません。スマホの新規ユーザーで勝っていたなら、その層を主要な対象にした新しいテストを設計し、改めて確かめます。
驚くほど大きな差ほど疑ってかかる姿勢は、トワイマンの法則とは?で紹介した習慣とも重なります。MonaLensのようにセグメントで手軽に絞り込めるツールほど、見る切り口を先に決めておく意識が効いてきます。
まとめ:見る数を決めてから、結果を見る
多重比較問題は、データを丁寧に見ようとする人ほど陥りやすい落とし穴です。指標や切り口を増やすたびに、偶然の勝ちを引く確率は着実に上がっていきます。
対策の基本は、主要指標を1つに絞り、見る予定の比較を事前に記録することです。そのうえで、誤りを1つも許さない場面ではHolm法、探索的な分析ではBH法と、目的に合わせて補正を選びます。
そして事後に見つけた差は、結論ではなく次の仮説として扱う。この順番を守るだけで、報告される勝ちの信頼度は大きく変わります。
次のテストを始める前に、まず見る指標の数を数えるところから始めてみてください。