統計学といくつかのよしなしごと

つれづれなるままに、日くらし統計学にむかひて、心にうつりゆくよしなし事を、そこはかとなく書きつくれば、あやしうこそものぐるほしけれ。

ビジネス現場における統計的仮説検定のはなし

弁明

 「何をいまさら」感のあるタイトルです。ビジネス現場における仮説検定のはなしは各種ブログで散々書かれているし、機械学習全盛の時代にあまり興味を持たれるはなしでもなさそうな気もする。それでもやはり現場では「有意差」を気にされる場面は相変わらずあるし、またそれなりに正しい知識の下で使わないと害になったり、期待した役割を仮説検定が果たさないような場面もやっぱり相変わらずあるので、改めて実務でありがちなケースを書き留めておきたい。

ビジネス現場で極めて起こりがちな仮説検定にまつわるやりとり

 今回はビジネス現場、なかでもマーケティング活動における仮説検定のはなしを書く。これまで僕が仕事をしてきた中で経験した『危うい仮説検定の扱い』はざっくり3つのケースに分類される。

1.「これって有意差はありますか?」

 顧客セグメント間の施策への反応率でも、異なる施策の効果の差でもなんでも良い。何らか複数対象の数値差を比較するときによく聞かれる質問である。この問い合わせ自体は自然なことだが、有意差のあるなしだけで物事を判断するのは実は必ずしも正しくない。後ほど解説するように、実質的な差がないにも関わらず有意差が出ることは多々ある。有意差だけに頼ってしまうと、実質価値のない仮説を掘り下げてアサッテの方向に施策を展開していくということになりかねない。

2.「そこまでしなくていいよ」

 統計の枠組みを持ち出そうとするとき、「そこまでする必要はない」という判断が下されることがある。もちろん仮説検定をする必要のない状況はある。特にデジタルマーケティングのような環境変化が激しい領域では、実質的に仮説検定に価値がない、あるいはその枠組みに基づく知見の蓄積が困難な状況はあるように思える。ただ上記のセリフが出るとき、往々にしてその発言者はデータから見い出した何らかの差について深く考察を掘り下げていくため、なぜ仮説検定をする必要がないのか不明であることが多い。

3.「『CHITEST』で一発です」

 Excelの関数である。ほかにもいくつか仮説検定を行うための関数はあり、データさえあれば手軽に検定結果を出力することができる。「ツールに突っ込めばOK」という認識はツール開発側からすれば目指すべき最高のユースケースだとは思うが、やはりある程度正しく使わなければミスリードを招く危険性が統計学にはある。

 いずれのケースでも、根本には共通して「謎の権威化」があると思う。仮説検定は万能の方法論ではないし、だからこそ出力結果を鵜呑みにするのは危険である。なにより、仮説検定を「科学的方法論」としてでなく単に「権威」として用いるのは、あまり誠実とは言えない*1統計学の枠組みを用いたデータ分析をするなら、少なくともその分析担当者はそれに関する正しい知識を積み重ねていく姿勢について責任を持つべきだと思う*2
 今回は、そうした有意差だけを判断材料にした分析が期待した成果に貢献しない可能性について、仮説検定の基本的な考え方と実際のシミュレーションを通して検討したいと思う。

 

仮説検定の基礎的な解説

 仮説検定は何らかの重要な仮説の正否を検証することを期待して用いられる。が、実はそれ自体は実際には仮説の正しさを証明することには寄与しない*3。仮説検定のプロセスで定量化された値を人間が見て、実用上「仮説は正しい」や「仮説は間違っている」などと決めているだけである。どういうことか。実務でよく出てきそうなケースを用いて検定の枠組みを説明する。以下のようなケースは、現場では仮説検定を行うモチベーションが高まることが多いだろう。

新しいキャンペーン施策がa、bの2案検討されている。当然より有効な方を打っていきたいので、テストマーケティングを行い効果の良かった方をマーケット全体に対し打つことにした。テストの枠組みはざっくり言うと、

  • 顧客の中から適当な数を抽出し、それをランダムに2グループに分ける
  • 一方には施策aを、もう一方には施策bを打ち、その成果(購買率など、何等かのコンバージョン率としよう)を比較する

なお、テスト顧客の決定や2グループへの分割においてはランダム化が担保されており*4、2グループのテストサイズは同数とする。
ついでに、知見を蓄積したいので、施策aとbの結果の差に何らか違いがあると認められるなら、なぜその違いが生まれたかについても考えたい*5

このとき、仮説検定は以下の手順で行うことになる。

1. 期待している結果を考える。ここでは担当者は施策aと施策bは明らかに違う切り口のアプローチであるため効果は異なる(が実際どちらが良い悪いかはよく分からない)と考えているため、期待している結果は「施策aと施策bのコンバージョン率(CVR)は異なる」となる。

2. 仮説検定の枠組みに則って、2つの仮説を設定する。ここでは手順1で設定した期待している結果を『対立仮説』として設定し、その対立仮説と否定の関係にある仮説を『帰無仮説』として設定する。つまりこう。


{\displaystyle
\begin{eqnarray} 
帰無仮説\ H_0\ :\ \ 施策aのCVR\,&=&\,施策bのCVR \\
対立仮説\ H_1\ :\ \ 施策aのCVR\,&\neq&\,施策bのCVR
\end{eqnarray}
}

 仮説検定は基本的に、「{\displaystyle H_0}が正しいと仮定した下で」検討が行われる。これが極めて重要な部分で、これを押さえていないことが誤用乱用を招く原因になっている、と個人的に思う。
 検定においては、以下に説明する『有意水準』と『p値』の値をもって帰無仮説を棄却するか否かを判定する。いずれもある確率を表しており(これについては後で説明する)、「予め決めておいた有意水準をp値が下回っていた場合、帰無仮説{\displaystyle H_0}を棄却する」、つまり「有意である」と結論することになる。

3. 有意水準を決める
 この確率を下回っていたら帰無仮説を棄却するという基準が『有意水準』である。領域によって異なるが、一般的には5%や1%と設定されることが多い*6

4. p値を算出する
 実際のデータからp値を算出する。検定においてはp値を算出するために『検定統計量』という量が用いられる。少しややこしい話になるが、検定統計量とは、仮説検定の枠組みに当てはめるために、得られたデータ(今回で言えばテスト結果のデータ)を変換した量、と考えれば良い。p値とは「{\displaystyle H_0}が正しいと仮定した下で期待される検定統計量の確率分布において、今回のデータから得られた検定統計量以上に離れた量が得られる確率」のことになる。

5. 帰無仮説の棄却可否を判定する
 ここまでの手順で帰無仮説の棄却可否を判定する材料は揃っているが、文章だと我ながら分かりにくいので、図示するとこんな感じになる。

・帰無仮説を棄却する
f:id:yanbow221:20171022123425p:plain
・帰無仮説を棄却しない
f:id:yanbow221:20171009175649p:plain

 つまり、確率密度関数において、起きることが稀である両端から一定の累積確率(有意水準)を指定すると、それに対応する検定統計量の領域が得られる(『棄却域』という)。今回得たデータから計算した検定統計量が棄却領域内に入っていれば、「{\displaystyle H_0}が正しいと仮定した下では得られる可能性が低い結果が得られた、ということは元の仮説が間違ってと考える方が自然だ」と考えて帰無仮説を棄却し、検定統計量が棄却領域内に入っていなければ、「{\displaystyle H_0}が正しいと仮定した下で得られることが珍しくない結果が得られた、ということは元の仮説を否定する材料は今のところ得られていない」と考えて帰無仮説を棄却しないという判定を行う。これはまさに背理法の考え方になっている。
 一点注意しなければいけないことは、仮説検定においては「帰無仮説を棄却する」か「帰無仮説を棄却しない」かの二択であり、「帰無仮説を採択する」という結論はないという点である。これは以下の仮説について考えるとわかりやすいだろう。


{\displaystyle
帰無仮説\ H_0\ :\ \ 白鳥は白い \\
対立仮説\ H_1\ :\ \ 白鳥は白くない
}

 もし例えば黒い白鳥を見つけた場合、帰無仮説は明確に否定(棄却)される一方で、白くない白鳥を見つけられない(白い白鳥しか見つからなかった)としても、それは「白鳥は白くない」ことを示す根拠がないだけで、積極的に「白鳥は白い」と結論づけることは難しい*7。こうした非対称性が仮説検定には存在する*8。ちなみに『統計学を拓いた異才たち』では、フィッシャーの言った言葉としてこんな一説が紹介されている(文庫版P168)。

ある仮説が扱うことのできる事実に矛盾していないという理由だけで、その仮説の正しさが証明されたと信じるような論理的誤謬は、統計的な論拠においても、その他の科学的な論拠においても、受け入れられない。……それゆえ、有意性検定で、データが仮説に矛盾する場合には仮説を棄却したり無効にしたりできるが、矛盾しない場合には仮説が正しいとはいえない、と一般に広く理解されたならば、有意性検定の明快さは大いに増すだろう。

統計学を拓いた異才たち - デイヴィッド・サルツブルグ,竹内惠行,熊谷悦生|日本経済新聞出版社

 こうした手続きを経て、今回で言えば2つの施策aとbは効果に差があるとみなせるのか、効果はどうも差がなさそうだ(それを否定する材料は今回は得られなかった)と結論を下すことになる。

シミュレーション

 ここまで仮説検定の基本的な考え方を紹介した。これを前提に、得られたデータに盲目的に仮説検定を適用するだけは危険、というのがどういうことか、シミュレーションで検討したい。今回は全く同じ結果が得られてもその判断がサンプルサイズによって異なるということをシミュレーションで確認し、p値だけを見てその他の物事(今回で言えばサンプルサイズ)について注意を払わないと、一貫した結論が得られないしその後どうすれば良いのかの指針も立たない、ということを示す。
 想定するケースは前述のテストマーケティングで、2つの施策の効果に差があるかどうかを仮説検定によって検討するが、その際得られるp値がテストに用いたサンプルサイズによってどのように影響を受けるかを確認する。コードはこんな感じ。

N <- 100000 #母集団サイズ。使わないけど念のため
n <- seq(100, 1000, 10) #標本サイズ
cvr_a <- seq(0.01, 0.3, 0.005) #施策aのコンバージョンレート
cvr_b <- seq(0.01, 0.3, 0.005) #施策bのコンバージョンレート
cvr <- as.data.frame(expand.grid(cvr_a, cvr_b)) #コンバージョンレートの組み合わせ
colnames(cvr) <- c("cvr_a", "cvr_b")
size <- as.data.frame(matrix(0, nrow = nrow(cvr), ncol = length(n)))
for(i in 1:ncol(size)){
  colnames(size)[i] <- paste("n=", n[i])
}

#2群の母比率の差の検定(p < .05)
#2群の標本サイズは常に等しく、完全無作為抽出が担保されていると仮定
for(i in 1:length(n)){
  cv <- round(cvr * n[i])
  for(j in 1:nrow(cvr)){
    size[j, i] <- prop.test(c(cv[j, 1], cv[j, 2]), c(n[i], n[i]))$p.value
  }
} #sizeオブジェクトに施策a, bのコンバージョンレート、標本サイズの組み合わせごとのp-valueを格納する

dat <- cbind(cvr, size)

size2 <- size
for(i in 1:ncol(size2)){
  size2[, i] <- ifelse(size[, i] >= 0.05, 0, 1)
}
dat2 <- cbind(cvr, size2)

#ヒートマップアニメーション
library(ggplot2)
library(animation)

ani.options(convert = "C:/ImageMagick-7.0.7-5-portable-Q16-x64/convert.exe")
animation::saveGIF({
  for(i in 1:ncol(size2)){
    print(ggplot(dat2, aes(as.factor(cvr_a), as.factor(cvr_b))) +
            geom_tile(aes(fill = dat2[, i + 2]), color = "grey") +
            scale_fill_gradient2(low="white",high="steelblue") +
            labs(x = "CVR of A", y = "CVR of B", title = colnames(size2[i])) +
            theme(legend.position = "none") +
            geom_abline(intercept = 0, slope = 1, col = "pink2"))
  }
}, interval = 0.1, movie.name = "p-value.gif", ani.width = 1500, ani.height = 1000)

f:id:yanbow221:20171021233348g:plain
 添付のアニメーションは横軸に施策aのCVR、縦軸に施策bのCVRをとっていて、青色のセルは「有意水準5%において帰無仮説が棄却される(有意と判定される)」セルであり、その範囲がサンプルサイズの変化({\displaystyle n=100}から{\displaystyle n=1000}までを10刻みで変化)によって大きくなることを表している*9。つまり、施策a, bのCVRが全く同じ組み合わせであっても、それに用いたサンプルサイズによって帰無仮説を棄却できるか棄却できないかの判断が変わってしまうということになる。
 なぜこのようなことが起きるかというと、仮説を検討するために必要な検定統計量は基本的にその数式の分母に{\displaystyle n }の逆数が入っているからである。今回で言うと、

{\displaystyle
\begin{eqnarray}
T &=& \frac{CVR_a - CVR_b}{\sqrt{(\frac{1}{n_a}-\frac{1}{n_b})CVR(1-CVR)}}
\\
ただし、
\\
CVR &=& \frac{n_a CVR_a + n_b CVR_b}{n_a + n_b}
\end{eqnarray}
}

が検定統計量の算出式で*10、サンプルサイズが大きくなるほど分母が小さくなり検定統計量の値が大きくなる、つまり帰無仮説を棄却しやすくなることがわかる。
 これから、とりあえずテストしたり手元にあるデータに対して仮説検定を適用してp値だけで判断を下すということが、危なっかしいということがわかると思う。今回の記事では扱わないが、仮説検定においてはp値の他に検出力、効果量、そして今回扱ったサンプルサイズなど、いくつかの量を検討したうえでのテスト計画が必要になってくる*11

おわりに

 今回はビジネス現場における仮説検定について、p値乱用の危険性について見てきた。とはいえ仮説検定にまつわる議論と乱用はこの枠組みが生まれた当初からずっとあるみたいで、掘り下げれば掘り下げるほど何が何だかよくわからなくなってくる*12。うまくバランスを取りながら、「ここを押さえてないとマズイ」ポイントはしっかり押さえたうえで、現場に適用していきたいなぁ。

統計学を拓いた異才たち(日経ビジネス人文庫)

統計学を拓いた異才たち(日経ビジネス人文庫)

統計学入門 (基礎統計学?)

統計学入門 (基礎統計学?)

*1:とはいえどこまでも突き詰めると際限はないし、結局は人それぞれの線引きラインの違いでしかないのかもしれない。僕もこの後疑わずにRのパッケージを使うし…

*2:本当は「正しい知識を用いる」とか書きたかったけど、自分自身が正しい知識を持っていると確信できる日は少なくとも僕には永遠に来ないと思うので、「姿勢」に対して責任を持つというニュアンスにしてます

*3:さらに言うと、先に書いた「何らか複数対象の数値差」の差の大きさや重要性についても仮説検定自体は示唆しない。

*4:要は変な偏りなくテストできてるよという理解で概ね問題ない

*5:単に効果が高そうな方を選ぶだけなら、テスト結果が良かった方を選べば基本的には良いだろうからで、問題は結果の差に意味があると認めてそれを考察したいからである

*6:この水準は基本的には「慣例」であること以上の根拠はない

*7:白鳥を例にしたのはナシム・ニコラス・タレブ著『ブラック・スワン』より。あの類の本ってホント面白いですよね

*8:とはいえ、実際上は帰無仮説が正しい、というかそれを受け入れてその後に展開するというのはやある程度むを得ないとも思う

*9:2つの施策のCVRをどちらもCVR=0.01~0.3としているので、この図はy=xに対して対称であることに留意。後目盛かぶりの都合で横軸と縦軸の幅を同じにしてない点はご容赦ください…

*10:シミュレーションで使ったprop.testはカイ二乗近似で出してるっぽい

*11:後は信頼区間も重要な枠組みで、これもそのうち記事にして検討したい

*12:僕はそうでした、てかそうなってます…