- ブラウザURL入力
- DNS名前→IP
- ルータ経路選択
- ロードバランサ振り分け
- Nginx受け口
- アプリ処理今ここ
- DB保存
この差は、何も変えなくても出る大きさではないのか。その問いを1つの数にしたのがp値です。
まず結論
p値は「何も変わっていない世界」で、いま見た差と同じかそれ以上の差が出る割合です。効果の大きさでも、改善が本物である確率でもありません。
統計的に有意になった結果のうち本物がどれだけあるかは、試す案のうち本当に効くものの割合と検出力で大きく変わります。p値だけからは出てきません。
成約率が A 群 50/1000(5.0%)、B 群 68/1000(6.8%)でした。何も変わっていない(どちらの画面でも成約は同じ)と仮定したとき、1.8ポイント以上の差が出る割合はどれくらいでしょうか。
当てることが目的ではありません。外した予測ほど記憶に残るので、直感で選んでください。
何も変わっていない世界を作って、数える
A 群 50/1000、B 群 68/1000。差は1.8ポイントです。問うべきは「この差は、何も変えなくても出る大きさではないのか」でした。
p値はこの問いを1つの数にします。ASA(米国統計協会)の声明は次のように定義しています。
Informally, a p-value is the probability under a specified statistical model that a statistical summary of the data (e.g., the sample mean difference between two compared groups) would be equal to or more extreme than its observed value.
「指定した統計モデルのもとで」が要です。ここでのモデルが「何も変わっていない世界」、つまりどちらの画面でも成約は同じという仮定です。ただしモデルには、利用者を無作為に割り付けた・1人の結果が他人に影響しない、といった前提も含まれます。p値が小さいとき疑わしくなるのは、「差が無い」かこれらの前提のどちらかです。
何も変わっていないなら、ある人に付いた「A」「B」のラベルは結果と無関係です。ならばラベルを混ぜて1000人ずつに分け直しても、同じ世界の別の1回になります。これを何度も繰り返し、1.8ポイント以上の差が出た割合を数える——これが並べ替え検定です。
- ・p値はデータの側の割合で、「差が無い」という仮説が正しい確率ではない
- ・無作為割付・独立などの前提も、モデルの一部として仮定されている
標準ライブラリだけで並べ替える
スクリプトは乱数の seed を引数に取り、2万回並べ替えます。後半では、ありうる分け方をすべて数えた厳密値と、よく使われる正規近似も出します。
# L6: permutation test A 50/1000 vs B 68/1000, seed from argv; plus exact (hypergeometric) valueimport random, math, sysfrom statistics import NormalDistseed=int(sys.argv[1]); R=int(sys.argv[2]) if len(sys.argv)>2 else 20000rng=random.Random(seed)a=[1]*50+[0]*950; b=[1]*68+[0]*932obs=sum(b)/1000-sum(a)/1000; pool=a+b; ext=0for _ in range(R):rng.shuffle(pool); d=sum(pool[1000:])/1000-sum(pool[:1000])/1000ext+= abs(d)>=abs(obs)-1e-12print(f"seed={seed} R={R} obs diff={obs*100:.1f}pt permutation p={ext/R:.4f}")# exact: X = successes landing in B, hypergeometric N=2000 K=118 n=1000; |2X-118|>=18 <=> X>=68 or X<=50N,K,n=2000,118,1000den=math.comb(N,n)pX=lambda x: math.comb(K,x)*math.comb(N-K,n-x)/denexact=sum(pX(x) for x in range(0,K+1) if abs(2*x-K)>=18)print(f"exact permutation (hypergeometric/Fisher two-sided symmetric) p={exact:.5f}")p=(118)/2000; se=math.sqrt(p*(1-p)*2/1000); z=obs/seprint(f"pooled z={z:.4f} two-sided normal p={2*(1-NormalDist().cdf(abs(z))):.5f}")
seed=1 R=20000 obs diff=1.8pt permutation p=0.1072exact permutation (hypergeometric/Fisher two-sided symmetric) p=0.10633pooled z=1.7082 two-sided normal p=0.08760seed=2 R=20000 obs diff=1.8pt permutation p=0.1090exact permutation (hypergeometric/Fisher two-sided symmetric) p=0.10633pooled z=1.7082 two-sided normal p=0.08760seed=3 R=20000 obs diff=1.8pt permutation p=0.1092exact permutation (hypergeometric/Fisher two-sided symmetric) p=0.10633pooled z=1.7082 two-sided normal p=0.08760
並べ替えの推定は seed ごとに 0.1072・0.1090・0.1092 と小数第3位で揺れます。厳密値は 0.10633 で動きません。p値の推定そのものにもばらつきがあるので、小数3桁を議論の芯にしないでください。
正規近似では 0.0876 と少し小さく出ますが、どの方法でも「10回に1回前後」です。相対で3割以上の改善に見える差が、何も変わっていない世界でもこの頻度で出ます。
上の A/B 比較で p = 0.106 と出ました。この数の読み方として正しいのはどれですか。
p値が答えていない問い
p値は「差が無いとしたら、これ以上の差はどれだけ出るか」です。ところが知りたいのはたいてい逆向きの「差が出たとき、本当に効いているのはどれだけか」です。
ASA 声明の原則2は、p値は仮説が正しい確率でも、データが偶然だけで生じた確率でもないと述べます。原則5は、効果の大きさも結果の重要さも測らないと述べます。
逆向きの割合は、Kohavi らが Rule #2 の節で式にしています。有意水準を α、検出力を 1−β、試す案のうち本当に効くものの割合を π とすると、統計的に有意な結果のうち本物の割合は
(1−β)π ÷ ((1−β)π + α(1−π))
です。分子と分母に π が入っています。 p値の計算に π は出てこないので、p値だけからこの割合は出せません。
同じ基準で、本物の割合を並べる
α = 0.05 に固定し、π と検出力を変えて計算しました。
効く案の割合 π 検出力 有意のうち本物1/3 0.8 0.889 (Kohavi らの 89%)0.1 0.8 0.6400.1 0.5 0.5261/500 0.8 0.031 (Kohavi らの 3.1%)
1/3 は、Microsoft の複数実験で報告した平均の成功率として論文が挙げる値です。1/500 は、論文の Rule #1 が挙げる大きな躍進がその程度だとしたら、という仮定です。基準も検出力も同じまま、本物の割合が89%から3.1%まで動きます。
π = 0.1・検出力0.8を件数にすると構造が見えます。1000案のうち効く100案から80件、効かない900案から45件が有意になり、本物は 80 ÷ 125 = 0.64 です。
第15期で扱う警報の適合率も同じ形です。適合率は「鳴った警報のうち重大だった割合」、つまり鳴ったものを分母に取る量です。統計的に有意になることを「鳴った」と読み替えると、上の割合は有意という警報の適合率です。
Kohavi らは、有意水準0.05・検出力80%という同じ条件でも、有意な結果のうち本物の割合が89%にも3.1%にもなると書いています。何が違うからですか。
統計的に有意になった実験
p値は、効果が無いとしたら観測以上の差が出る割合。有意な実験のうち本物の割合は、試す案のうち効くものの割合 π と検出力で決まり、同じ α = 0.05 でも 0.031 から 0.889 まで動く。
鳴った警報
適合率は鳴った警報のうち重大な事象だった割合で、分母は鳴ったもの。再現率は重大な事象のうち鳴った割合で、分母は起きたもの。分母が違えば、同じ警報でも別の量になる。
p値が小さいことと、警報がよく当たることは、どこで同じ構造になっているでしょうか。
それぞれの割合で、分母に何を取っているかを比べてください。
この章のまとめ
- p値は「何も変わっていない世界」で、観測と同じかそれ以上の差が出る割合。モデルには無作為割付などの前提も入る。
- 5.0% 対 6.8%(各1000人)は、厳密値 p = 0.106。並べ替えの推定は seed で小数第3位が揺れる。
- p値は仮説が正しい確率でも、偶然だけで生じた確率でも、効果の大きさでもない。
- 有意のうち本物の割合は π と検出力 で決まり、同じ α でも 0.031 から 0.889 まで動く。警報の適合率と同じ「分母が鳴ったもの」の量。
- p値を捨てるのも、閾値だけで決めるのも、どちらも外れ。
自分の現場で確かめる
読んだだけでは身につきません。手元の環境で実際に見てみてください。
理解度チェック
読んだ直後は「分かった」と感じやすいものです。実際に解いて確かめてください。
ASA 声明(2016)の原則5の説明に沿うのはどれですか。
用語集(3語)
- p値
- 指定した統計モデル(ふつうは「何も変わっていない」という仮定と、無作為割付などの前提)のもとで、観測した要約値と同じかそれ以上に極端な値が出る確率。
- 並べ替え検定
- 群のラベルが結果と無関係だと仮定し、ラベルを並べ替えたときに観測以上の差が出る割合を数えてp値とする方法。
- (統計的)検出力
- 本当に効果があるときに、統計的に有意になる割合。
出典(一次ソース)
- Wasserstein & Lazar (2016) The ASA Statement on p-Values: Context, Process, and Purpose. The American Statistician 70(2):129–133(§2 What is a p-Value? と原則1〜6) ↗
- Benjamini ほか (2021) The ASA President's Task Force Statement on Statistical Significance and Replicability. Annals of Applied Statistics 15(3):1084–1085 ↗
- Kohavi, Deng, Longbotham, Xu (2014) Seven Rules of Thumb for Web Site Experimenters. KDD 2014(Rule #2 の節) ↗