第160回: 「統計の実務」20 クロス集計とカイ二乗検定《その1: A/Bテスト》
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「回帰分析《その5:統計の嘘 後編》」について書きました。
内容は、「回帰分析中に起こりがちなことと、その対応」でした。
もちろん、教科書通りに統計解析が進むことがベストです。
しかし、このノートの「重回帰分析 後編」の回で、「Boston Housing」を使って説明したように、教科書は、理想的なデータセットを使って説明しています。
それは学んでほしい手法や理論に焦点をあてて、分かりやすく説明したいからです。
でも、実世界での分析対象はワイルドです。
データ解析中に、「なんじゃこれ!?」と叫びたくなることがあります。
ブロント語(←もう廃れていますが)でいえば、「稀によくある」です。
そんな辛いときにはデータをゾーンに分割して消しましょう(でも、消したデータは別途供養してください)、また、データを捏造して増やしちゃダメという話も書きました。そして、対数軸に直す方法も書きました。
特に変数が現象に対して足し算で効くのか、掛け算で効くのかについては、常に考えた方が良いです。そして、掛け算の時には対数軸にしてください。
また、ゼロについて特別扱いするとうまくいくことも稀によくあります。
さて、今回と次回は、「クロス集計とカイ二乗検定」について書きたいと思います。今回は、ソフトウェアテストでおなじみの「A/Bテスト」の実施結果のクロス集計とカイ二乗検定について書きます。
一番シンプルな例ですし、カイ二乗検定の流れや意味を説明できるからです。(ちょっと長くなるけど)
今回のnoteを読めば、「うちのチームってB型が多いんじゃない?」って誰かが言ったら「カイ二乗検定で確認しましょうか?」って言えるようになります。(たぶん、、、。本当に、言えるようになったかどうかの確認テストもつけておきますね)
「クロス集計とカイ二乗検定」は、結構使えるやつなので、覚えておいて損はないと思います。
≡ A/Bテスト
今回のテーマをA/Bテストにしたのは、最近目にしたブロッコリーさんのスライドがきっかけです。
WCATEで講演された時の資料と思うのですが、途中で「A/Bテスト」の話題が出てきます。
「(どちらが)有用な改善か統計的に判断する方法」とか、「統計的に有意な差があることを確認する必要がある」と書いてあります。でも、その方法についての記載はありませんでした(口頭で説明されたのかな? それとも時間切れかな??)。そこで、今回のネタにしようと思いました。
A/Bテストは、オバマ大統領が大統領選のときのウェブページの改善で使用して効果をあげたことで有名です。この辺でも記事になっています。
A/Bテストとは、ウェブページの改善の評価の時によく使われる手法なのですが、「改善効果の有無を評価する手法」です。(正確には“ある変数とある変数とは独立か?”の評価です)
t検定の時に触れましたが、良くなったように見えても「それって誤差じゃね?」という言いがかり?を受けることがあります。そんなときに統計的検定を用いて説得力を持たせようというわけです。
本当は、「ベイズ検定」をすると良いのですが、「カイ二乗検定」でもだいたいはあっている(実用上問題のない程度にはあっている)ので、今回はカイ二乗検定の説明のネタに「A/Bテスト」を使おうというわけです。
いつものようにRコマンダーにCSVファイルを読み込んで結果を出す方法は次回説明します。
カイ二乗検定は単純ですし、クロス集計、帰無仮説、自由度、カイ二乗値、p値を流れで説明できるので「検定」の復習になるからです。
≡ クロス集計
A/Bテストが終わったらその結果を表にまとめます。たとえば、商品の販売ページの購買行動(そのページで買ったか、買わなかったか)の改善なら、こんな感じの表ができあがります。この表のことを「クロス集計表」と呼びます。
「なーんだ、知ってた」……でしょう?
改善前後(A, B)×購入の有無(購入した, 購入しなかった)の2行×2列の表です。

緑色のセルにある「観測度数」というのは、これらのデータが「観測された数」ということを示しています。例えば、改善前のウェブページAで購入した人は「6人」ということです。
Bに変えた結果、6個しか売れていなかったものが倍の12個も売れています。購入しなかった人の人数は、94人と96人なので、それほど変わりません。
さて、この表を見て「AをBに変更することが有用(=売上が伸びる)である」と結論付けることが出来るでしょうか???
ブロッコリーさんは、「統計的に有意な差があることを確認する必要がある」と言っています。
「誤差の範囲じゃない?」と言われたときに、カイ二乗検定結果を示したいですよね。
≡ カイ二乗検定
クロス集計表ができたら、カイ二乗検定です。
検定のプロセスは、他の検定と同様で、以下の通りです。
「帰無仮説」を確認する
「カイ二乗値」を計算する
「自由度」を求める
「有意水準」を決める
2のカイ二乗値と3の自由度から「p値」を求める
5で見つけたp値と4で決めておいた有意水準を比較して「統計的に有意な差があるかどうかの結論」を出す
ステップ数が多いので、この辺で読むのをやめられそうですが続けます。難しい話はでないのでご安心ください。(といいますか、ステップ数が多いということは、一つ一つのハードルは低いということです!)
■ 「帰無仮説」を確認する
前に、こんなことを書きました。
この時の仮説には「帰無仮説」という名前がついています。この名前が混乱のもとだと思っています。私なら「差がない仮説」ってつけたのに……。
カイ二乗検定の帰無仮説も「差がない仮説」です。
「A案とB案は結果に対して差がない」が帰無仮説です。
では、A案とB案に差がない場合はどういう結果になるか、クロス集計表を作ってみます。

購入した人は18人でした。したがって、A案とB案に差がないという仮説のもとでは、A案でもB案でも18人の半分の9人が購入したはずです。購入しなかった方も合計の190人の半分の95人ずつになったはずです(案に差がないのですから)。
先ほどの表には「観測度数」とありましたが、こちらの表には「期待度数」と書いています。A案とB案に差がないという仮説のもとで期待される数ということです。
《補足》
Aのウェブページに訪れた人数と、Bのウェブページに訪れた人数の影響のことを加味して考えると、

となります。総人数である208人を使って、左上のセルなら「18×100÷208=8.65」を計算しています。
こちらの期待度数表の方が精度が上がります。(今回は考え方をわかってほしいので敢えてこちらは採用していませんが、実務ではこちらの計算方法で作ってください。)
■ 「カイ二乗値」を計算する
「(観測度数 - 期待度数)の2乗 ÷ 期待度数」の総和をカイ二乗値と呼びます。要は、ずれの大きさを数値化したものです。
例えば、左上のセルは、「((6-9)^2)/9 = 9/9 = 1」となります。残りのセルも計算して埋めた表を掲載します。

こうして、カイ二乗値として、白いセルの値を合計した「2.02」が得られました。
もし、期待通りの観測値だったときにはカイ二乗値はゼロになります。
その時のp値は1となりますから、100%帰無仮説が成り立つ、つまり、AとBには一切差がないことになります。逆に言うとカイ二乗値が大きいほどAとBとの差が大きいと言うことになります。
ただ、表が大きければ、それだけでカイ二乗値も大きくなります。
そこを調整するのが次に出てくる“自由度”です。
■ 「自由度」を求める
自由度とは、「平方和を2次形式で表したとき、その行列のランク(階級)」のこと。
なんのことやら?ですよね。

自由度は、「データ数 - 1」と説明されることが多いです。
例えば、「A = {a1, a2, a3, a4}」と4つのデータがある変数Aの自由度は3というわけです。
カイ二乗検定の場合は、クロス集計表の「(行数 - 1)×(列数 - 1)」が自由度です。
期待度数の計算の時に、合計の18という値をを使いました。
「Aの値+Bの値=18」ですので、自由に選べる値は1つです。(補足に書いた通り本当は)行方向の合計も使っているので、2×2の4マスあっても、どれか1マスが埋まれば残りはすべて埋まります。自由に値を選べるのは一つだけです。
よって、上のクロス表の自由度は1です。
公式の、(行数-1)×(列数-1)=(2-1)×(2-1)=1で求めても同じです。
自由度の計算は統計ソフトがしてくれるので、実務上はツールに任すほうが良いです。
カイ二乗の確率分布図の形は、自由度によって異なります。
以下に、自由度が1,2,5のカイ二乗確率分布図をのせます。



結局のところ、自由度はサンプリングしたデータの数と関係深いものと思うと良いです。
データの数が少ないと統計的な予測が粗くなるのですが、その粗さ調節のために自由度を使います。
■ 「有意水準」を決める
何%の誤った検定結果まで認めようかという決めの値が有意水準でした。
有意水準は先に決めておくことが鉄則です。先に決めることだけは必ず守ってください。後出しじゃんけんはだめです。
有意水準は5%(=0.05)とするのが一般的です。したがって、それ以外の値にする場合には説明を求められます。
今回の有意水準は、一般的な5%(=0.05)とします。
■ カイ二乗値と自由度から「p値」を求める
カイ二乗値は、さきほど2.02と求めました。また、自由度は1と求めました。
この2つの情報があれば、カイ二乗分布表からp値を求めることができます。カイ二乗分布表は、ネットにたくさんあります。例えば、下表が典型的なフォーマットのカイ二乗分布表です。

一番左の列(Degrees of Freedom)は自由度ということです。(自由度によってカイ二乗確率分布の形が違うことを思い出してください)
今回であれば、自由度は1でしたので、1の行だけ見ます。
カイ二乗値は2.02でしたので、Probability(p値)は0.30と0.10の間と分かります。
正確なp値が知りたい場合は、Rコマンダーのメニューから、
[分布]>[連続分布]>[カイ2乗分布]>[カイ2乗分布の確率…]
を選択します。するとダイアログが現れますので、カイ二乗値と自由度を入力して[OK]ボタンを押します。
Excelなら『=CHISQ.DIST.RT(2.02, 1)』で求めます。
※二つ目の引き数は自由度です。

すると下記の出力が得られます。
pchisq(c(2.02), df=1, lower.tail=FALSE)
[1] 0.1552391これで、0.30と0.10の間といったアバウトな値ではなく、p値が0.1552391であるとわかります。
カイ二乗分布表がなくても、自由度1とp値0.5の交点である「3.841」だけ覚えておけば、A/Bテストで2行2列の時には、カイ二乗値が「3.841」を超えていなかったら有意差なしと判断することができます。
■ p値と有意水準を比較して結論を出す
今回は、「p値=0.1552391」、「有意水準=0.05」でした。
確率分布図に色をつけてみます。

これっぽっちの面積なら「有意」という印象を持たれるかもしれません。
しかし、有意水準を5%と先に決めたわけです。
p値は15%と有意水準以上だったのですから、帰無仮説は棄却できず、「A案とB案には、統計的な有意差はない」という結論になります。
えっ?納得がいかない? その場合は実験を継続してください。実験を続ける前に適切な有意水準に変更しても良いです。
≡ 理解度確認テスト
はじめにのところで、こんなことを書きました。
今回のnoteを読めば、「うちのチームってB型が多いんじゃない?」って誰かが言ったら「カイ二乗検定で確認しましょうか?」って言えるようになります。(たぶん、、、。本当に、言えるようになったかどうかの確認テストもつけておきますね)
A/Bテストの統計的な分析が出来る様になったか、試しにやってみてください。
必要なデータは、「チームメンバーの血液型の集計結果」と「日本人の血液型の人数比率」です。後者はググればすぐに見つかると思いますが、

を使ってもらってもよいです。前者のチームメンバーの血液型一覧がなければ、A型20人、O型15人、B型25人、AB型7人で試してみてください。今回の自由度は1ではありませんので注意してくださいね。(全部で67人なんて多過ぎますよね。カイ二乗検定の制約で5人以下が一つでも入るとNGなのです)
では、レッツ・トライです。
≡ おわりに
今回は、「クロス集計とカイ二乗検定」の仕組みを理解してもらえるように「A/Bテスト」の話を書きました。
途中の表も思考を整理したり、結果を納得するために使えます。こういった簡単なカイ二乗検定なら手作業でも良いかなと思います。
次回は、「クロス集計とカイ二乗検定」のその2としてRコマンダーを使ってクロス集計とカイ二乗検定をする方法について書きます。データが増えてもツールならへっちゃらです。
例えば、イベントの参加者アンケートの分析などに使えます。「参加者の職種と興味あるテーマは関係があるか?」といった分析ができるようになります。
もちろん、A/B分析が複雑になったときにも使うと良いです。
残りは「クロス集計とカイ二乗検定」→「管理図とEVM」→「確率分布」となります。
