📘

実験分析アンチパターンのススメ お父さん、どうしたら騙されないようになるの? それはね騙す側の考え方を知ることだよ

に公開

実験アンチパターンのすすめ:よくあるミスとその回避策

以前投稿したレポートアンチパターンのブログがなぜか好評だったので、
実験分析アンチパターンというテーマで書いてみました。

大学時代、卒業研究で実験をした人は多いと思います。
実験というのは簡単に言うと実際に試して評価することです。
心理実験、薬品の実験、数値実験など、実際に試すことで注目する条件の有効性を確かめることができます。
でも、実験なんて大学や研究をする人が考えればいい、と考える人もいるでしょう。そういう考えの人には是非知ってほしい。統計を熟知していれば人を 騙す 導くことができます。

実際、ビジネスのマーケティングやいわゆる現場の実地検証のようなことは行われています。
机上の空論にならずに、実際どうなっているのか確かめるというのは重要なことです。
しかし、実験の誤解、ミスなどが思いもよらない結果を招いてしまうことがあります。

ここでは、実験のダメな方向であるアンチパターンを挙げ、
敢えて誤った理解を導くにはどうすればいいのかという観点からご紹介します。
アンチパターンとは、簡単に言うと「ダメなやり方」ということです。
くれぐれも良い大人の皆さんは真似しないようにお願いします。

この言葉を贈ります:

世の中には3種類の嘘がある。嘘、大嘘、そして統計。
'There are three kinds of lies: lies, damned lies, and statistics.'" Benjamin Disraeli

つまり、統計というのは数学に基づいた理論なので、理論的に議論を構成することができますが、その過程でウソを混ぜられると気づきにくいことがあるので注意してください。←このブログで伝えたいメッセージはコレです。

なんと5例中4つで効果あり!

あるときテレビの番組で、ある方法の痩せる効果を検証していました。
結果としては5人試したうちの4人で体重が減少していましたが、1人で逆に体重が増加していました。減少した人も1kg程度で正直なところ誤差と考えています。

いかにも効果があるように見せていますが、統計の検定を適用したら有意じゃないんです。
この場合、ノンパラメトリック検定の符号検定を適用します。帰無仮説は体重のプラスマイナスは全くのランダムであるという仮説で、簡単に言うと結果が出るか出ないかは1/2のコイントスのようなランダムということです。
ランダムだという仮定の下、5回全部で 偶然 効果が出る場合を仮に考えてみます。1/2の5乗を計算すると1/32になりますので、5例全部で効果が出る可能性は

p=\frac{1}{2^5} = \frac{1}{32} = 0.03125 < 0.05

ということです。統計検定の考えでは偶然ではありえないということになって、(片側)有意といいます。

検定はよく p<0.05=1/20 を基準に使うのでこれを採用しています。
次に数学の組み合わせと確率のおさらいですが、5例中4例効果が出る確率は_5C_1/2^5=5/32 = 0.156> 0.05 となり、5例と4例の場合をあわせて5回に1回くらい起こる事象です。
数学ではよくコイントスの裏表の話をしていますが、模式的に書くと下の図のような状況です。区別するしないに関わらずコインには識別番号が振られているとして、1枚だけ裏(白色)になる組み合わせは _5C_4 = _5C_1 になります。

確率1/2の場合のk個表になる確率は

P(k|n) = _nC_k q^k (1 - q)^{n-k} = _5C_k (1/2)^n

となります。この式を使ってm個以下になる確率は
P(k<m+1|n) = \sum_{k=0}^m P(k|n)

となります。この値が0.05以下になる境が有意水準です。

この考え方がノンパラメトリック検定の符号検定というものです。サンプル数が10個以下と少ない状況で有効な場合があります。

でも、5例中4例で効果ありと言われると、もし統計を知らなければ効果あるかもと思ってしまうのは不思議です。

一般化してみます。
n例中(n-1)例が効果ありという結果で実際p<0.05になる状況を計算してみました。

P(k=n|n) + P(k=n-1|n) = _nC_n (1/2)^n + _nC_{n-1} (1/2)^n = 1 (1/2)^n + n (1/2)^n = (n+1)/2^n

結果、8個中7個の時でようやくp<0.05になっていました。つまり、「8例中7例で効果ありました」くらいまでいけば信じてもいいということです。

逆に言えば、8試行未満の実験で1例くらい失敗しても検定結果を隠せば信じてもらえるかもしれません。

func = lambda n: (n+1)/(2**n)
for i in range(20):
   print(i, func(i))

0 1.0
1 1.0
2 0.75
3 0.5
4 0.3125
5 0.1875
6 0.109375
7 0.0625
8 0.03515625
9 0.01953125

重要なのが5回全部で効果の場合有意、8回に7回効果で有意という数字を覚えておいてください。
はじめに戻って、あなたがもし だます側 ならば、この統計結果は隠して、自信ありげに「5回中4回効果が出ました」と言いましょう。しかし、この際に「効果がありました」と言ってはいけません。統計に詳しい人から叩かれます。すくなくとも私が見つけ次第...

もし、文句をいわれたら最後の手段ですが、こう言ってください。
「有意水準は20%で検定しましたが何か問題でも?」
その後できるだけ早く逃げてください。

まとめ

いかがでしょうか。
今回のブログでは、符号検定という考え方を知ってもらえれば良いと思います。
繰り返しますが、5回全部で効果の場合有意、8回に7回効果で有意という数字を覚えておいてください。
そして、これにはまる条件が現れた時に、やさしくこう言ってあげてください。
「意義あり!それは符号検定で有意ではないので、論理的に効果ありと言えません!ハイ論破!」

本当は分析についてもっと書くことはあるんですが、長すぎるんで今回はこのくらいで止めておきます。
続きは追々書いていきます。

ヘッドウォータース

Discussion