廿TT

譬如水怙牛過窓櫺 頭角四蹄都過了 因甚麼尾巴過不得

「A/Bテストの数理」への批判:「有意」とはなにか

目次

※誤解を招く書き方だったようですが、本記事の主張は有意水準を20%にしろということではないです。仮説検定をやるなら、「有意」っていうのがどういうことか、わかった上でやろうよ、ということです。そして意思決定を「有意水準5%」に丸投げするのはやめよう、リスクとベネフィットを考慮しようということです。

  1. はじめに
  2. 「A/Bテストの数理」への批判
  3. よくありそうな質問や反論とその回答
  4. A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT に続く


この記事は↓下記のブログへの批判です。

A/Bテストの数理 - 第1回:人間の感覚のみでテスト結果を判定する事の難しさについて - - doryokujin's blog ※注意:字が多いです。

けっこう話題になってるみたいなので、その尻馬にのろうとおもいました。

f:id:abrahamcow:20131027033814p:plain
↑字が多いのにこんなに読まれてるなんてすごい

doryokujinさんへの批判というより「A/Bテスト」自体への批判かもしれません。

1. はじめに

1.1 背理法に慣れよう。

有意」とはなにか? を理解するまえに背理法(帰謬法)の理屈に慣れてください。

背理法の練習問題1:ある商人が最強の矛と最強の盾を売っていた。この商人がウソをついていることを示せ
どんな盾も穿く最強の矛があり、かつどんな矛も防ぐ最強の盾があると仮定する → どんな盾も穿く最強の矛であれば、どんな矛も防ぐ最強の盾も穿く → これは矛盾 →なのでそもそも、この商人のいってることはウソだとわかる。

背理法の練習問題2:タイムマシンが存在しないことを示せ
タイムマシンが存在すると仮定する → タイムマシンを使えば、自分が生まれる前に自分の親を殺すことができる(A) → しかし、自分が生まれる前に自分の親が殺されていたら、自分が生まれない → 自分が生まれないならば、「自分」は人を殺すことはできない(B) → AとBは矛盾している → じゃあそもそもタイムマシンが存在するという大本の仮定が間違ってる → タイムマシンは存在しない。

至急お願いします!背理法を例をつけてわかりやすく教えて下さい - Yahoo!知恵袋

1.2「有意」とはなにか?

有意水準の考えかたはそれなりに難しいのでこれが理解できなくてもあきらめないでください。

AとBに差がないと仮定する → AとBに差がないと仮定した場合、現実のAとBの差は偶然生じたものだということになる → その差が偶然生じる確率を計算する

ここで計算した「その差が偶然生じる確率(推定値)」のことを p-値 と呼びます。

その差が偶然生じる確率が小さければ → そんな小さい確率の現象が起こったって考えるのは不自然だよね → じゃあやっぱり「AとBに差がない」という大本の仮定がまちがってたのかな → つまりAとBには差があったんだな

ということになります。これが仮説検定のおおまかな手順です。

その確率が小さいかどうかってどう判定するの? → そこはもう割り切って適当なところで決めちゃいます。

その決めた値のことを有意水準と呼ぶのです。

たとえば、「5%有意」といった場合には、有意水準として定めた5%よりも、p-値(計算して出した確率)が小さい、という意味になります。

仮説検定で求める「有意差」というのは非常に狭い意味しかないことに注意してください。

有意差」と、差の大きさは似て非なるものです。

これは重要な一般原則なのですが、学術用語っていうのは基本的にすべて、狭い意味しかありません。

なので専門用語をはじめて聞くときは、これはどういうふうに意味を限定してるんだろう? と考えることが大切です。*1

2.「A/Bテストの数理」への批判

有意水準を書きましょう。

「答えは以下となる。」

Q1. コインA,コインBをそれぞれ 10回投げてみて,40%, 60%であったとき
Q2. コインA,コインBをそれぞれ 40回投げてみて,40%, 60%であったとき
Q3. コインA,コインBをそれぞれ 100回投げてみて,40%, 60%であったとき
Q4. コインA,コインBをそれぞれ 1000回投げてみて,40%, 60%であったとき(Q'. と同じ)
Q5. コインA,コインBをそれぞれ 1,000回投げてみて,48%, 52%であったとき
Q6. コインA,コインBをそれぞれ 1,000回投げてみて,47%, 53%であったとき
Q7. コインAを 20回,コインBを 80回投げてみて,40%, 60%であったとき
さて,答えは以下となる(最後に手計算とRでの計算結果を載せている):

Q1. → 「差があるとは言えない」
Q2. → 「差があるとは言えない」
Q3. → 「差があると言える」
Q4. → 「差があると言える」
Q5. → 「差があるとは言えない」
Q6. → 「差があると言える」
Q7. → 「差があるとは言えない」

http://doryokujin.hatenablog.jp/entry/2012/05/21/025805

有意水準」というのは、まったく恣意的に定めるものです。

恣意的というのは悪い意味ではなくて、各分野の慣例によって決まっているということです。Web系のA/Bテストには慣例が特にないんでしょ?

 ↓

「データ解析の重要性が認識されつつある(?)最近でさえも,A/Bテストを始めとしたテスト( = 統計的仮説検定:以後これをテストと呼ぶ)の重要性が注目される事は少なく,またテストの多くが正しく実施・解釈されていないという現状は今も昔も変わっていないように思われる。」

だから有意水準の宣言がなければ、どんな基準で「差があるとは言えない」と判断したのかわからなくて、なんでもありになっちゃうのです。

いきなり「答えは以下となる」と言われても、有意水準の宣言がなければどんな基準で「差があるとは言えない」と判断したのか、まったくわかりません。

3. よくありそうな質問や反論とその回答

3.1 ではこの場合、有意水準はいくつくらいにしたらいいんでしょうか?

とてもよい質問です。
たぶん20%くらいでいいんじゃないかと思います。

その根拠は天気予報です。
降水確率0%〜20%くらいならだいたいみんな傘持ってかないじゃないですか。
40%〜100%ならだいたいみんな傘持っていくんじゃないでしょうか。
30%だと人によってはちょっと迷うと思います。

だから20%で切っちゃいましょう。
そのくらいのざっくりした感じで十分だと思います。

そもそも、
「比率の差を比較するA/Bテストの類いは,以下のような単純なコイン投げの数学問題と同型である。」

よくあるA/Bテストの事例を題材にしてみた:

Q.「あるトップページの1つのリンクを青から赤に変える事によってリンク先へのアクセス数が増えるのでは無いかという仮説を持っている実験者は,その違いをテストしてみることにした。そこでオリジナルのトップページ(A)と1つのリンクを赤にしたトップページ(B)を作成し,だいたいアクセスが半々に独立かつランダムに割り振られるようにして,A, Bそれぞれのアクセス数に対してそのリンクが実際に押された比率(Conversion Rate)を比較することにした。双方1000アクセス来た時点で比率を計算すると,Aが40%であったのに対しBは60%であった。さてこの結果を受けてAとBには本当に差があると言え,赤リンクにしたことに効果があったと判定できるだろうか。」

※ 現実問題などの具体的な問題を考える上で1番始めにすべきことは,問題をより単純な数学問題へすり替える事である。比率の差を比較するA/Bテストの類いは,以下のような単純なコイン投げの数学問題と同型である。(AとBが同じ数学的構造を持つとき,AとBを同型と呼ぶことにする。例えばこちらで定義した「コンプガチャ問題」と「Coupon Collector's Problem」は同型である。)

Q'.「表の出る確率がわからないコインAとコインBがある。表の出る確率をそれぞれ p_a, p_b とする。コインAとコインBは違う確率を持ったものであるという仮説を持っている実験者は,その違いをテストしてみることにした。コインA,Bをそれぞれ 1000回ずつ投げてみて,表の出る比率を比べることでそれを確かめようとしている。今,コインAの比率が 40%であったのに対しコインBの比率は 60%であった。この実験からコインAとコインBには違いがある(i.e. p_a ≠ p_b)と言えるだろうか。」

http://doryokujin.hatenablog.jp/entry/2012/05/21/025805

というのがだいぶ大雑把な仮定でして、赤リンクの効果なんて流行りすたりとか、サイトの構造とか、季節とかによってかわるだろうし、ここでそんなに厳密にやってもしょうがないと思います。

降水確率20%で雨降ったら、アンラッキーでしたね、であきらめましょう。

Q1〜Q7のp-値は下記の通りです。(二群の比率の差の検定

Q1 約65.47%
Q2 約11.75%
Q3 約0.72%
Q4 約0%
Q5 約8.11%
Q6 約0.83%
Q7 約17.39%

Q2〜Q7は20%有意、Q1は有意でない(差があるとはいえない) になります。

図にするとこんな感じ。
f:id:abrahamcow:20131228205543p:plain

3.2 統計学のことを知らない人に有意水準の説明から始めると面倒なことになる世の中でしてな。。。

はい。これです。そもそも、このエントリを書こうと思ったきっかけがこれなのです。

むなしい - Togetterまとめ

これを言われるととてもがっかりします。

統計学を知らないからこそ、世の中の人はあんたら「データサイエンティスト」なんてのを雇ってるんでしょ?

なのに、統計学を知らない人に対しては「統計学というのはそういうものだ」で押し切り、統計学をちょっとかじった人にちょっと突っ込まれたら「ビジネスの現場というのはそういうものだ」で逃げるわけ?

じゃあ、あんたら「データサイエンティスト」なんかに金払う意味ねーわ。俺にくれ。

というわけで、以上、有意水準の説明を自分なりに書いてみました。

R のコード

#Q1. コインA,コインBをそれぞれ    10回投げてみて,40%, 60%であったとき
Q1 <- prop.test(10*c(0.4,0.6),c(10,10))
#Q2. コインA,コインBをそれぞれ    40回投げてみて,40%, 60%であったとき
Q2 <- prop.test(40*c(0.4,0.6),c(40,40))
#Q3. コインA,コインBをそれぞれ  100回投げてみて,40%, 60%であったとき
Q3 <- prop.test(100*c(0.4,0.6),c(100,100))
#Q4. コインA,コインBをそれぞれ 1000回投げてみて,40%, 60%であったとき
Q4 <- prop.test(1000*c(0.4,0.6),c(1000,1000))
#Q5. コインA,コインBをそれぞれ 1000回投げてみて,48%, 52%であったとき
Q5 <- prop.test(1000*c(0.48,0.52),c(1000,1000))
#Q6. コインA,コインBをそれぞれ 1000回投げてみて,47%, 53%であったとき
Q6 <- prop.test(1000*c(0.47,0.53),c(1000,1000))
#Q7. コインAを 20回,コインBを 80回投げてみて,40%, 60%であったとき
Q7 <- prop.test(c(0.4,0.6)*c(20,80),c(20,80))
#
ans<-c(Q1$p.value, Q2$p.value, Q3$p.value, Q4$p.value, Q5$p.value, Q6$p.value, Q7$p.value)
names(ans) <- paste("Q",1:7, sep="")
#
#図
#nihongo()
dotchart(rev(ans), pch=16,main="p-値")
abline(v=0.2, lty=3)
#
#表
#hatena(
cbind(names(ans),paste("約",round((ans)*100,2),"%", sep=""))
#)

*1:そういえば、盲導犬に命令するときは英語を使うんだって。たしか「どうぶつ奇想天外」でそう言ってた。日本語を使っちゃうと日常会話を命令と間違えて犬が混乱するときがあるから、わざとふだん使わない言葉を使うらしい。じゃあ英語圏盲導犬には何語で話すの? 知らない。まあとにかく、日常語で「差」っていうと受け手によって解釈が違うから、わざと「有意差」とか難しい言葉を使って、誤解が生じないようにしているのです。