廿TT

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

A/Bテスト、多変量テストの図示

追記

この文章はいろいろ話がまじっていて読みにくくなってしまっているようです。

こちらのほうがわかりやすいかもしれません→A/Bテストをくり返すために知っておきたい標本の大きさと多重比較の話 - 廿TT

下記のようなコメントを頂きました。

ryownet ABテストは単なる出しわけというお話。テスト実施についてはそうだけど、AとBのパターン出しをする時点では仮説検証が目的なんじゃないの

http://b.hatena.ne.jp/entry/188529362/comment/ryownet

ええ、だから仮説の検証が「仮説検定」でいいのか? というのがこの文の趣旨です。

「ABテストは単なる出しわけというお話」は、「ABテスト」という言葉を知らない人へ向けた前説です。

前置き

 このエントリは
A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT
「A/Bテストの数理」への批判:「有意」とはなにか - 廿TT
の続き的な内容です。

 上記はうなぎ屋の秘伝のたれみたいにつぎたしつぎたし重ねてごちゃごちゃしてきたし、しかもあちこち直したいところが出てきました。

 特に、 「A/Bテストの数理」への批判:「有意」とはなにか - 廿TT からの流れで書いてある「有意水準20%」っていうのは適当に思いついた数字言ってみただけなので無視してください。すみません。でもこれらの趣旨である「仮説検定するならちゃんと有意水準を言え」とか、

  • パターン1:「あーまだ有意差出てないな〜。有意差出るまで様子見るか〜」
  • パターン2:「AとBでテストやって、つぎはBとCでテストやって……」
  • パターン3:「色はAがいい。かつフォントはBがいい。だからそれ組み合わせたら最強」

が仮説検定のまちがった使い方っていうメッセージ自体はまちがってないと思うので、それを踏まえた上で読んでいただけるならば幸いです。

 でも A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT のパターン1のところはちゃんと場合分けをして書き直します。
 そしてそもそも「A/Bテスト」っていうのがなにを指してるのかあいまいだったので、これもちゃんと場合分けをして書き直します。
 いろいろと至らぬ点があり申し訳ございません。

あらまし

 本エントリでは、Web系施策のA/Bテスト、多変量テストに仮説検定を導入しようという提唱を改めて批判しなおすことで、ぼくの主張を先行する言説のなかに位置づける。
 
 ぼくの主張とは一言でいうと、棒グラフなめんな。

 棒グラフは単なるプレゼン資料の飾りではない。

エンジニアのためのデータ可視化実践入門という本を書いた - あんちべ!
↑これを読めば棒グラフが各項目の比の関係を比較するツールであることがわかるだろう。

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

統計グラフのウラ・オモテ―初歩から学ぶ、グラフの「読み書き」 (ブルーバックス)

↑さらにこの本を読めば統計グラフが考えるためのツールであり、グラフの読み書きが一種の分析であることがわかるだろう。

 そして、その主張に則った作図ができる R のスクリプトを公開する。
 その理由は

  1. R の ggplot2 っていうパッケージを使ってみたかった
  2. 議論がなかなか建設的な方向に進まなそうなので、実際にやってみせた方が早い気がした
  3. 統計学はむずかしすぎて統計の専門家以外には使いこなせない気したけど、統計の専門家以外に使えない統計学なんて価値がないと思ったので使えるように道具を揃えた

のみっつ。

 あとこの程度の古典的な統計グラフで可視化とか見える化とかデータヴィジュアライゼーションとかいうの、ミーハーな感じがして恥ずかしいので図示っていう。

まずA/Bテスト、多変量テストとは

 A/Bテスト、多変量テストの「テスト」は仮説検定(hypothesis test)という意味のテストではない。

 A/Bテスト、多変量テストツールと呼ばれているのは、要は Web サイト内のパーツをランダムに出し分けるツールだ。

参考:

代表的なA/Bテスト、多変量テストツールはこのへんだろうか:

 また Web サイトの出し分けでなくて、Web 広告を出し分ける A/Bテストもある。
リスティング広告とA/Bテスト | IK ALL - インターネット広告のすべて

 でも、これらは同様に扱える。

 バナーやボタンの表示回数(インプレッション、以下 IMP と略記)と、クリック数(クリックッスルー、以下 CTs と略記)の比率にしろ、サイトへの訪問数(セッション数、サイトに訪れたユーザーの延べ人数みたいなもの)、コンバージョン数(場合によって意味がことなる。購入完了とか、サイトの目標に到達した場合の数こと。以下 CV数 と略記)の比率にしろ、クリックしたか/してないか、コンバージョンしたか/してないかのどっちかしかないからだ。
(つまり、二項分布を仮定できる、ということなんだけど:
高校数学の復習からはじめる二項分布の導出 - 廿TT
 
  A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT では、1月は A やって、2月は B やって……ていうような「テスト」を想定していた。
 でもこれはふつうA/Bテストとは呼ばれないっぽい。

 それにこれだと、時系列の要素が入ってきちゃってほんとうは扱いがもうちょっとむずかしくなるんだけど、このタイプのテストについてもできる範囲で軽く触れる。

 A/Bテスト、多変量テストに統計的仮説検定を導入しよう、と主張してる記事は、

など。

 ぼくはA/Bテスト、多変量テストの結果を判断するの仮説検定は向かないと思う。

 ぼくの言いたいようなことは webサイトのA/Bテスト、多変量テストについて思うこと - iAnalysis 〜おとうさんの解析日記〜 にすでにとっくに書かれてる気がした、しかも角の立たない穏当な表現で。

 でも具体例あげて批判したほうが分かりやすいと思うので、ぼくは角立てる。
 批判っていうのは先行する言説のなかに自分の主張を位置づける、もっとも手っ取り早い手段だと思っている。

 これから述べることは統計学を知らない人が統計的にまちがったことやってる、っていう主張ではない。
 統計とか知ってるはずの人(データサイエンティストとか)が提唱してることなのに、それを実践しちゃうと統計学を知らない人が素朴な経験則でやってることよりも悪いことが起きるっていう話だ。

 統計学を知らない人が統計的にまちがったことやるのは、まあしょうがない、ちょっとずつ改善していければいいかなとは思うけど。
 でも統計とか知ってるはずの人が統計的にまちがったことを主張するのはしょうがなくない。しょうがなくないんだから明日からやめればいい。

 そして代替手段として比率の棒グラフ+信頼区間のエラーバーを提案する。

提案と具体例と批判

仮説検定のまちがった使い方

例1:むりくり有意にしちゃう

 有意かどうかだけでA/Bテストを判断するとこういう問題が起こる。

では、どうすれば良いのか?


結論から言うと、「構わず強行する」か「ある程度証拠がたまるまで待つ」かの二択です。

「カイゼンしたらコンバージョン率が○○%→△△%にup!」は分母を無視したら成り立たないかもしれない - 銀座で働くデータサイエンティストのブログ

 「有意にならなかったら有意になるまで待つ」をやったらどうなるか。ちょっとやってみよう。
 例えば広告 A と広告 B の表示回数(IMP)をめちゃくちゃ増やしてこんなデータがとれたとする。

CTs IMP
402000 2000000
400000 2000000

 CTs÷IMP を CTR(クリックスルーレート)と呼ぶことにする。 

 これを仮説検定(比率の差の検定)にかけると5%水準で有意
 R でやってみる。

#データセット
dat1 <-data.frame(
  CTs =c(0.0201, 0.0200)*20000000,
  IMP =rep(2000000,2)
)
#検定
prop.test(dat1$CTs,dat1$IMP, correct=F)

検定の結果はこう。

> prop.test(dat1$CTs,dat1$IMP, correct=F)

	2-sample test for equality of proportions without continuity correction

data:  dat1$CTs out of dat1$IMP
X-squared = 6.2383, df = 1, p-value = 0.0125
alternative hypothesis: two.sided
95 percent confidence interval:
 0.0002152809877 0.0017847190123
sample estimates:
prop 1 prop 2 
 0.201  0.200 

 
 p-value(p 値)っていうのが、有意確率のことなので、これが 5%=0.05 より小さければ5%水準で有意ということになる。"p-value = 0.0125" と出てるので有意

参考:
二群の比率の差の検定
 
 ぼくの推奨したい比率の棒グラフ+95%信頼区間のエラーバーだとこうなる。

f:id:abrahamcow:20140315023209p:plain


 広告 A も広告 B も大差ない。

 エラーバーだけ拡大してみてみるとこう。

f:id:abrahamcow:20140315034659p:plain

 信頼区間がほとんど重なってないので広告 A と広告 B の CTR にがあるかないかでいったらあることはほぼ確実。
 でもその CTR の差に現実的な意味があるかは別問題。

 仮説検定で見れるのはがあるかないかであって、差の大きさではない。

 長い期間とって、IMP をめちゃくちゃ増やしたら、有意にはなるだろうけど、そんなことをする意味はない。

  Web 系の人っぽい言葉を使うと、統計的に有意か否かは KPI にしちゃいけないということだ。

 現にA/Bテストに長い時間をかけるのはムダだからやめたい、というニーズがある。

参考:
リスティング広告でやってはいけない8つの施策 | スポンサードサーチ再入門 | Web担当者Forum

 信頼区間というのはむずかしいんだけど、「CTR の95%信頼区間」といったら95%の確率で CTR の真の値がこの区間にふくまれていますよ、という意味だ(ほんとうはちょっと違うんだけど)。
 無限回試行を重ねることができたら、CTR の真の値が一点で求まる。有限回の試行だったら「95%の確率で CTR の真の値がこの区間にふくまれていますよ」ということまでしかわからない。
 そう解釈して実用上はたぶん問題ないと思う。
(不安なので信頼区間の正確な理解のために、余裕があれば奥村先生の解説も読んで欲しい:信頼区間って何?


 こういうグラフをかんたんに描けるように、比率の信頼区間を表で出力するのを関数化した。

R のコード:

CIset<-function(k, n, group=NULL, conf=0.95){
  rate = k/n
  len <-length(k)
  CI =sapply(1:len ,function(i){
    ans <- binom.test(k[i], n[i], conf.level =conf)
    ans$conf.int[1:2]})
  data.frame(group =if(is.null(group)){LETTERS[1:len]}else{group},
             rate=rate,
             upper = CI[1,],
             lower = CI[2,])
}

 関数、CIset の引数 k に CTs、n に IMP を入れると rate:この場合 CTR、upper:信頼区間の上側(信頼上限)、lower:信頼区間の下側(信頼下限)を返す。
 group のところはアルファベットを順番に振ってる。

R のコード:

> result <-CIset(k =dat1$CTs,n =dat1$IMP)
> result
  group  rate        upper        lower
1     A 0.201 0.2004447849 0.2015560810
2     B 0.200 0.1994458231 0.2005550457

 この結果を ggplot に突っ込んでやればグラフが描ける。

result <-CIset(k =dat1$CTs,n =dat1$IMP)
#
library(ggplot2) #パッケージの読み込み
#
ggp <-ggplot(result, aes(x=group, y=rate)) 
#ggplot() はグラフの「素」を作ってる
#
#棒グラフ+エラーバー
ggp + geom_bar() +
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2) 
##geom_bar()、geom_errorbar() はグラフの「型」を指定してる
#
#エラーバーだけ
ggp + geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2) 


 また前回(A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT)は読書猿の記事を引用したために誤解を招いたかもしれない。

 しかし本当は、5%水準の検定を20回やったとすると、これらがそれぞれを独立しているとすれば、20回(20年間)で「少なくとも1回以上の間違った主張をしてしまう確率」は,65%近くにもなる。
 つまり1度も間違えない確率は95%(=0.95)の20乗(= 0.358485922)なので、それを1から引けば、少なくとも1度は「実際は全く差がないのに、差があると」間違えて判断する確率は、65%近くにもなるのである。

サヨナラ検定、グッバイ統計的有意性/統計を使うつもりなら必読の論文はこれ 読書猿Classic: between / beyond readers

 ぼくが言いたかったのは「何度もやり直してればたまには偶然めずらしい現象だって起こるでしょ。それを有意ですって持って来られても、だからなに?」ということだ。

 サイコロ三個ふって全部一の目が出た。
 サイコロ三個ふって全部一の目がでる確率は、

  1/6 × 1/6 × 1/6 ≒ 0.0046

だから5%有意ですっていわれたら、だからなに? 何回もチンチロリンやってたらたまにはピンゾロも出るだろうよ。

 つまりパターン1には2種類あって

  • サンプルサイズ増やして有意にしちゃう
  • 何度もやり直して有意にしちゃう

 いずれにせよこれは仮説検定の使い方自体がまちがってるのであって、ぼくは仮説検定というものが全部ダメだとか言いたいわけじゃない。

 でも仮説検定やめて単に図示することによってこういうまちがいを回避できる。

 もちろんがあるとはいえない、という例もこの図で検知できる。

 こういうデータがあったとしたら、

CTs IMP
50 100
6 10

 これは B のほうが rate は高いんだけど、

f:id:abrahamcow:20140315054552p:plain

 信頼区間のエラーバーがばっちり重なってるので「 B のほうが良い」とは考えにくい、と解釈できる。
関連エントリ:誤差の範囲とはなにか? - 廿TT

R のコード:

#データセット
dat2<-data.frame(
  CTs =c(50, 6),
  IMP =c(100,10)
)
#
result2 <-CIset(k =dat2$CTs,n =dat2$IMP)
ggp <-ggplot(result2, aes(x=group, y=rate)) #ggplot();グラフの「素」
ggp + geom_bar() +
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2) 
##geom_bar();geom_errorbar();グラフの「型」

 また、こういうデータがあったとしたら、

CTs IMP
50 1000
60 1001

 
 これは B のほうが rate は高いし信頼区間のエラーバーが重なってない部分が多いので「 B のほうが良い」と解釈することに多少なりとも信頼性が持てる。

f:id:abrahamcow:20140315060956p:plain

R のコード:

#データセット
dat3<-data.frame(
  CTs =c(50, 60),
  IMP =c(1000,1001)
)

hatena(dat2)
result3 <-CIset(k =dat3$CTs,n =dat3$IMP)

pt<-prop.test(dat3$CTs,dat3$IMP)
pt$p.value

ggp <-ggplot(result3, aes(x=group, y=rate)) #ggplot();グラフの「素」
ggp + geom_bar() +
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2)

 ただしこれは検定すると5%有意にはぜんぜんなってない。

R のコード:

> pt<-prop.test(dat3$CTs,dat3$IMP)
> pt$p.value
[1] 0.3803072127

 p 値(有意確率)が38%なのでボケボケ。

 Web 系施策のA/Bテストの目的は、「ちょっとでも良さそうなほうを選びたい」ということだと思う。だから、ぼくはこういうときは B を選んじゃっていいと思う……が、その辺は棒グラフの高さというベネフィットと、エラーバーの重なり具合というリスクを見て各自で判断して欲しい。

 それがあいまいな感じがしていやなら、自分でルールを決めてくれればいい。

 「有意水準を5%とする」というのも、慣例的に定まったルールなので、Web 系企業は Web 系企業なりの慣例を作ればいいと思う。


 A/Bテストには一定数のクリック数が必要、という現実的なニーズがある。

参考:
Sexyなリスティング広告プレイヤーになるために…、スライドを公開します。 | SEM-LABO

 一定数のクリック数ってどのくらい? というのは信頼区間の幅をどのくらいにしたいか、ということなので、こういうグラフ一個描けばその問いに答えるヒントくらいにはなるだろう。


A/Bテスト、多変量テストに必要な期間を見積もる方法の紹介 - 廿TT

例2:多重比較

パターンが2パターンより多くなると多変量解析とかを使うことになります。手計算するなら、けっこうややこしい計算が必要になるので、まずは2パターンずつ試していくのがいいと思います。

ABテストを検定する - Hive Color

 これは話が逆。
 2パターンより多くなると、2パターンのときの検定が使えなくなるから、わざわざややこしい多変量解析っていうのがあるんだと理解したほうがいい。

 これがなぜダメなのかについての解説は、下記のページがわかりやすいと思う。

 これすら読むヒマがない、読むのがめんどうだというならこういう比喩はどうだろうか。

 天下一武道会、トーナメント表の組み方次第ではヤムチャが優勝した可能性もある(by 西尾維新

 じゃあヤムチャがいちばん強いのか? そんなことはない。

零崎軋識の人間ノック (講談社ノベルス)

零崎軋識の人間ノック (講談社ノベルス)


 多変量のテストができるんだったら、多変量で比較したほうがいい。

 多変量テストの結果こういうデータが得られたとする。

IMP CTs
9860 193
10095 221
10021 190
10002 176

(このデータはシミュレーションで作った。)

 f:id:abrahamcow:20140315063835p:plain

 これは B を選んじゃっていいと思う。

 シミュレーションなので真の CTR が分かってる。
 A の CTR:0.018、B の CTR:0.021、C の CTR:0.0185、D の CTR:0.019 で設定して乱数を生成したので、B を選んで正解だった。
の CTR ってなに? っていう人に向けて→ ああああ: 母数とはなにか

 多変量解析とかを使うのがややこしくても、こういうざっくりした比較でそこそこ実用性は出せるはずだ。

R のコード:

##シミュレーション
#ポアソン到着
#平均して1000回表示
IMP <- sapply(1:4,function(i){rpois(1, 10000)})
#IMP_a <- rpois(1, 1000);IMP_b <- rpois(1, 1000) ...
#と書くのと同じ
CTs =sapply(1:4, function(i){
  ctr = c(0.018, 0.021, 0.0185, 0.019) 
  rbinom(1, size=IMP[i], prob=ctr[i])})
#
result4 <-CIset(k =CTs,n =IMP)
#
#プロット
ggp <-ggplot(result4, aes(x=group, y=rate)) 
ggp + geom_bar() +
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=2) 


 ちょっと待った!
 
 A/Bテスト、多変量テストをいろいろ実施しながら、CTR なり CVR を比較していたら、仮説検定という枠組みを使ってなくても結果的には多重比較と同じ問題になっちゃうんじゃないの? そういう問題はこのやり方でも解決してないんじゃないの?

 うん、そうかもしれない。
 ごめん。実はぼくもよくわからない。

 でも、まちがった仮説検定で統計的に有意ですって言いはっちゃったら、それはウソだと思う。
 ぼくは、「少なくともウソではない」ということを支持したい。

 上で批判したのはそもそも5%の有意水準が保たれてないのに、統計的仮説検定ですって言い張ってる例だと思う。
 ぼくの立場から見ればそれはウソなので、ぼくはウソは支持したくない。

 しつこいようだけど、ぼくは「一般向けの解説だから多少の厳密さは犠牲にして説明しよう」っていう態度を批判したいわけじゃないのね。

 「多少の厳密さは失われるが近似解としては実用に耐える」とかだったら、そんなうるさいことは言わない。
 実用性ない上に机上の理屈としてもまちがってると思うから、それはダメでしょうって言ってる。

ここまでのまとめ:

  • A/Bテスト、多変量テストのモチベーションは「良さそうな施策を調べたい」ということであり、「有意差があるかないかを実証したい」ということではない、とぼくは解釈してる。だったら別に仮説検定こだわる必要がない。
  • 仮説検定の有効性を主張してる人がやってる仮説検定がそもそも仮説検定の枠組みのなかで見てもまちがってたりするので注意。


 ああ、あと前回(A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT)のパターン3、「色はAがいい。かつフォントはBがいい。だからそれ組み合わせたら最強」がダメっていう話があったか。

 これ説明いる? いいもの組み合わせたらいいものができるなんて、そんなことめったにないだろう。

 おいしいもの組み合わせておいしくなった事例なんて、いちご大福くらいしか思いつかない。

時系列の場合

 時系列の話はむずかしいんだけど、それでも「1/2 の 50% と 50/100 の50% だったら単純比較できませんよね。月ごと、日ごとにサイトへの訪問数がちがうんですが CVR の比較ってどうしましょう?」っていう程度の疑問なら答えることができる。

これは Google アナリティクスから持ってきたデータ:

月の指標,訪問数,CV数
2013-6,51 ,2 
2013-7,58 ,4 
2013-8,71 ,2 
2013-9,108 ,2 
2013-10,182 ,3 
2013-11,379 ,3 
2013-12,759 ,18 
2014-1,6250 ,310 
2014-2,1847 ,56

 時系列なので折れ線グラフを使う。
 こんな感じになる。

f:id:abrahamcow:20140315140400p:plain

 ちなみにこれと同様のグラフを提示した、ぼくの前のエントリに対して「色々と統計学への誤解が積み重なっており、さらにデータが仮説を裏付けないと言う事実に拒絶反応を示していた。」とまで言った(具体的にどこを指してそう言ったんだよ、こら) UNCORRELATED 先生も「分かりやすさと見栄えの観点から区間推定を利用するのは悪い選択ではないとは思う」って言ってくれてるので、これも悪い選択ではないんじゃないですかね。

統計学的検定に対するある拒絶反応: ニュースの社会科学的な裏側

R のコード:

#上記のデータが CVR.csv というファイル名で保存されてる
#のでそのデータを読み込む
dat5 <-read.csv("CVR.csv") 
#CIset の第三引数は省略すると、アルファベットを順に振るが
#ここでは項目名(『月の指標』の列)を入れてる
result2 <-CIset(dat5$CV数, dat5$訪問数, dat5$月の指標)
#library(ggplot2)
ggplot(result2, aes(x=group, y=rate, group=1))+
  geom_line()+
  geom_errorbar(aes(ymin=lower, ymax=upper), width=.1, colour=4) +
  geom_point() +
  labs(x = "") #xのラベルを消してる

前回の反響から

タダなんだから使ってみてはどうでしょう?

 前回、信頼区間のエラーバーを使うことに、肯定的な意見をくれたみなさま、タダなんだから使ってみてはどうでしょう?

 R は無料かつオープンソースThe R Project for Statistical Computing からダウンロードできる。
 R のパッケージのインストールとか、使い方の基本などはだいたい R-tips を見れば分かる。

 ぼくの関数を使うなら、

CIset<-function(cts, imp, group=NULL, conf=0.95){
  cvr = cts/imp
  len <-length(cts)
  CI =sapply(1:len ,function(i){
  ans <- binom.test(cts[i], imp[i], conf.level =conf)
  ans$conf.int[1:2]})
  data.frame(group =if(is.null(group)){LETTERS[1:len]}else{group},
                  IMP=imp,
                  CTs=cts,
                  CVR=cvr,
                  upper = CI[1,],
                  lower = CI[2,])
}

これをそのままコンソールにコピペすればいい。

 よく使うなら "CIset.r" とかのファイル名で保存して、

 source(file="CIset.r")

と打ち込めば毎回コピペしなくても読み込める。

 また R が起動すると .Rprofile というファイル名で、ホームディレクリに置いておくと R が起動するたびに自動的に読み込まれる。よく使う自作の関数とか、環境設定系の命令は .Rprofile に書き込んどくといい。
Rprofile | パッケージの自動ロードなど


R の使いかた用リンク集:

 R からエクセルのデータ読み込み、エクセルへのデータ出力もできる。
A million ways to connect R and Excel | R-bloggers

 ぼくはこれくらいの小規模なデータならクリップボード経由でやっちゃう。
ああああ: クリップボード経由で R とExcel を使う

 でも別に R にこだわる必要はない。
 ぼくがそこそこ使えるのが R だけだから、R でやっただけ。

 Excel でも同じことはできるはず、めんどくさいのでぼくはやらないけど。
 ……と言いつつ、書きました→A/Bテスト、多変量テストの図示(Excel 版) - 廿TT

 個人的には機械学習とかやるのに python 便利そうなので、python ちょっとずつさわっていこうかなって思ってる。
 JavaScript でも最近は d3.js とかいうのがあるらしいし、それでも同じようなことはできるんじゃないかな。

 あとぼくは思想的な理由から作図に ggplot2 っていうパッケージを使ってる。

ggplot2 の使いかた用リンク集:

ggplot2のqplot関数のまとめ - ぬいぐるみライフ(仮)

 でも別に ggplot2 にこだわる必要もない。やりやすい方法でやればいい。
有効なWikiNameではありません - RjpWiki


(とはいったものの、ぼくはぼくの提案を実務で使うことはできなかった。そのへんの経緯はここに書いた→ ブログを収益化することの社会・経済的意義 - 廿TT

 この文章は引用転載改変自由、コメント欄もだれでも書き込み可にしてあるので、自由に使って頂ければ幸い。

f:id:abrahamcow:20140308162820p:plain

検定力と効果量とか、よくわからない

 ※効果量についての話は、A/Bテスト、多変量テストのための「効果量」入門 - 廿TT に書いた。(追記:12月20日)

統計的仮説検定がよくわからない - 唯物是真 @Scaled_Wurm

 検定力=検出力です。どっちも英語では power です。

第一種の過誤(Type I error)、第二種の過誤(Type II error)というのは味も素っ気もないネーミングなので、

第一種は「あわてもの」。「あわてもの」だからあせって棄却しちゃう。「あわてもの」だから一等賞だから第一種。その確率は「あわてもの」の「あ」をとってαで表すことが多い。
第二種は「ぼんやりもの」。「ぼんやりもの」だからぼんやりして見逃しちゃう。「ぼんやりもの」だから二番手だから第二種。その確率は「ぼんやりもの」の「ぼ」をとってβで表すことが多い。
とこじつけるとおぼえやすいです。

A/Bテストのガイドライン:仮説検定はいらない(Request for Comments|ご意見求む) - 廿TT

 
 この 1-β が検出力。

自然科学の統計学 (基礎統計学)

自然科学の統計学 (基礎統計学)

 効果量というのは、ぼくはよくわからない。

 A/Bテストでは比率をCTR(クリックスルーレート)とかCVR(コンバージョンレート)とか比較するので、効果量を求めるとしたら比率の効果量になる。

検定力分析入門

検定力分析入門

↑この本によると、比率差に関する母効果量は、
h= 2\arcsin\sqrt{P_1}-2\arcsin\sqrt{P_2}
定義されるらしい。

 でもなんでこういう定義になってるのか、よくわからない。

 arcsin 変換する理由は、仮説検定の前提条件である等分散性の仮定が満たされない状況に対応するため、だというんだけど、比率の差の検定の検定統計量に分散って出てこないよね?

二群の比率の差の検定

 この本(豊田 秀樹 『検定力分析入門』 東京図書)がまちがってるとは思えないけど、数学的な議論をけっこう思い切ってばっさりカットしているため、読んでもよくわからない。

 参考文献として記載されてる Cohen, J. (1988) Statistical Power Analysis for the Behavioral Sciences(2nd rd.), Hillsdale, N.J.: Lawrence Erlbaum Associates. というのを読めば分かるかもしれない。

Statistical Power Analysis for the Behavioral Sciences - Jacob Cohen - Google Livres

Statistical Power Analysis for the Behavioral Sciences

Statistical Power Analysis for the Behavioral Sciences

 でも、今回のA/Bテスト、多変量テストの図示においては、いったん効果量の話は気にしなくていい。

 豊田 秀樹 『検定力分析入門』は、心理学業界内の立場から書かれた本だ。心理学業界内で効果量を記載しろ、という流れになってるのは p 値だけでは、それは効果として意味のある差なのかわからないからだ(とぼくは解釈した)。

 つまりそれまでは p 値だけが、唯一絶対の基準みたいになってた、ということだ(とぼくは解釈した)。

 これはぼくが上記の「例1:むりくり有意にしちゃう」で述べたことと同じような議論に帰着される。

(あと効果量とか検出力とかについて勉強していて思うところはいろいろあったんだけど、長くなってきたので別の機会に書こう)

 しつこいようだけど現状を整理する。

  1. A/Bテスト、多変量テストでは、いま仮説検定って根付いていない。
  2. そこで統計学を勉強した人(データサイエンティストとか)が「ちゃんと検定しましょう」と主張している。
  3. ぼくはその「ちゃんと検定しましょう」がダメだと主張している。

オザキタカシさん

 オザキさんの、
そもそもビジネスの現場ではどういう「レベル」の統計学を使うべきなのか - 銀座で働くデータサイエンティストのブログ
はぼくの記事を踏まえたものと思われる。

 そのへんのログは

に残してある。

 ぼくはそもそも、オザキさん自身が有意水準5%の仮説検定を持ちだしたと思ってるし、
 “統計学的検定は「分からないなら使わない方が無難かも」
という項目で、「でも、これを読んでもポカーンとしてしまう人にはもう既に仮説検定は無理ゲーではないかと。」とか延べてるのは納得いかない。
 この記述は自分の過去エントリを「これを読んでもポカーンとしてしまう人」のせいにして、矛先ずらしてると思ってる。

  オザキさん自身、

ブログの内容は原則として個人の意見の表明ですが、結構ポジショントークをしていることも多いので念のため(何だかんだで企業人なので笑)。

f:id:abrahamcow:20140313050853p:plain

と明言してるので、これもポジショントークなのかもしれない。

 でも、ここに書いてある、いろいろ施策やった結果ベースラインとして成果は上がってるの? という問いの立て方は正しいと思うし、それに対して、とりあえず移動平均でもとってみればいいんじゃない? という提案も正しいと思う。

なぜリスク分析のプロは仮説検定を使わないのか

なぜリスク分析のプロは仮説検定を使わないのか(ややマニア向け) - Take a Risk:林岳彦の研究メモ
↑ぼくのエントリを紹介してくれているんだが、実はまだ読んでない。

 冒頭の、

今回は、以下の:

のあたりの皆様の良記事に触発されて

まで読んで、良記事って言ってもらえて嬉しいけどこいつらと一緒にすんなというアンビバレントな気持ちにおちいって読み進むなかった。

 気持ちが落ち着いたら読みます。