渋谷駅前で働くデータサイエンティストのブログ

元祖「六本木で働くデータサイエンティスト」です / 道玄坂→銀座→東京→六本木→渋谷駅前

平均への回帰:愚かな誤謬を惹き起こす美しきrandomness

元々はQuoraでこういうアンサーを書いたのがきっかけです。

本文中では「厳密性を一切考慮しない平易な説明で良ければ(※僕自身も数理統計学的な意味での確率論に関してはど素人なのでそもそも厳密な説明はできませんが)」と断り書きを入れましたが、厳密でないどころか間違っていたらそれはそれで悲しいので、詳しい方*1からツッコミをいただくべくブログ記事にもう少し細かく書いてみようかと思ったのでした。


ということで、Quoraアンサーの補足説明も兼ねて自分なりの理解を以下に書いておきます。誤っている点や不足している点などあれば、何かしらの形でツッコミを入れて下さると有難いですm(_ _)m

人口に膾炙した説明


一般には平均への回帰 (Regression toward the mean) というより、それに由来する「平均回帰の誤謬」の方がよく知られているかと思いますが、分かりやすく書くとこういうことかと思います*2

「世の中には短期的に見れば頻繁に上振れ下振れするかのように見える現象であっても、長期的に見れば実は平坦なままということがある。もし、その上振れ下振れのタイミングでヒトが何かをしていれば、その何かによって上振れや下振れが起きているかのようにヒトは錯覚しやすい」

これで説明がつく現象は実社会の中には沢山あり、このブログでも何回か引き合いに出しています。



「営業・企画部門が売り上げに連動していると信じて取り組んできた施策が実は全て売り上げとは無関係だった」とか「UX部門がDAU増大に関連すると判断して強化してきたUX改善策が実はDAUとは無関係だった」とか、それこそ実際の社会問題になった例としては「体罰を加えるとスポーツ選手のパフォーマンスが上がると信じている指導者が多いが実は体罰とパフォーマンスとの間には関連がなかった」というようなものがあったりします。


というように、平均への回帰という現象への理解がないとヒトは無意味なことをしでかしてしまうどころか、時には有害なことをやらかしてしまうかもしれない、というわけです。ところが似たような問題を時と場所を変えて何度も繰り返し見聞することがあるところを見ると、意外とこの現象は社会の中ではあまり広く知られていないようです。


実験1:本来の平均回帰


まず、原義に沿ったケースを想定してみます。以下のRスクリプトを走らせてみましょう。

set.seed(1)
x <- runif(30, 0, 10)
set.seed(2)
y <- -0.1 + 0.01 * x + rnorm(30, 0, 0.1)
d <- data.frame(x = x, y = y)
fit <- lm(y ~ x, d)
p <- predict(fit, d)
col <- ifelse(y > p, 4, 2)
plot(x, y, xlim = c(0, 10), ylim = c(-1, 1), cex = 2, col = col)
abline(reg = fit, col = 'purple', lwd = 3)

f:id:TJO:20191127140632p:plain

適当な変数xを正規乱数で発生させ、これに適当な回帰係数のもとで別の正規乱数を加えて発生させた変数yを用意します。これらを散布図にして、回帰直線を引きます。


ここで、平均すなわち回帰直線よりも上側に来るyのサンプルを青、下側に来るサンプルを赤として図示すると、基本的にはx軸に沿って「青が続けば次は赤」「赤が続けば次は青」という傾向が見て取れるかと思います。これはものすごく当たり前に見えることなのですが、実際に現実の社会で起きていることも基本的にはこれと同じなのです*3


「青(赤)が続けば次は赤(青)」という関係性は、一切の作為がなくても、xとyが適当な確率分布に従うランダムな変数であれば勝手に発生してしまう。それが平均への回帰という現象だというわけです。ちなみにランダム変数であるがために、単なる偶然から「延々と青(赤)が続く」という状況も起こり得る点に注意が必要です。


数学的説明


基本的にはWikipedia記事の説明を読めばおしまいですが、引用して再録しておきます。

 X Yをいずれも標準正規分布(平均は0、分散は1)に従うランダム変数とし、これらの相関係数 rとする。 | r | < 1である。正規分布の性質から、 Xの値が決まっている場合の Yの期待値は Xに比例する、すなわち E[ Y | X ] = rXである。ここで | r | < 1であるから、 Yの期待値は Xの観察値よりも0に近い。一般の確率分布についても同様の結果が得られる。


これは、2変数の相関が小さくなる( | r |が小さくなる)ほど、平均への回帰は顕著になる、ということを示している。

これは考えてみれば当たり前で、何かしらの平均がある*4ランダムな変数は、どこかの時点で上振れしたら次は「平均を保つために」必ず下振れするというわけです。それは何か特別な状態変化*5がない限りいつまでも続きます。しかも、それは最終的には長期の傾向を見ない限りは分かりません。にもかかわらず、短期的な上下動に過敏に反応し、それを人為的なものや系統的な大きな変化であると錯覚してしまう。。。それが平均回帰の誤謬だというわけです。


実験2:純粋に運が試されるギャンブル


次に、Quoraアンサーで引き合いに出した例を再掲します。ここで再現したいのは「運良く何かに巡り会えた時にそれは単なる偶然の産物なのか、それとも何か隠れた理由があるのか」と疑いたくなるようなシチュエーションです。例えば、ギャンブルで何回も連続して大当たりが出る、といったケースです。


ここでは純粋に1%しか当たりが出ないギャンブルを何回も繰り返すことを想定します(実際のギャンブルのように胴元によって期待値が設定されているものはここでは想定していません)。例えば1000回繰り返すとしましょう。Rスクリプトでシミュレーションするとこうなります。乱数シードを1から100まで変えて繰り返しています。

s <- rep(0, 100)
x <- matrix(0, nrow = 100, ncol = 1000)

for (i in 1:100){
  set.seed(i)
  x[i, ] <- rbinom(1000, 1, 0.01)
  s[i] <- sum(x[i, ])
}

which(s == 10)
t <- which(s == 10)
length(t) # 14

png('RTM_experiment2_14plots.png',
    height = 1000, width = 1000)
par(mfrow = c(4, 4))
par(mar = c(2, 2, 2, 2))

for (i in 1:14){
  set.seed(t[i])
  y <- rbinom(1000, 1, 0.01)
  plot(y, xlab = '', ylab = '', col = y + 1, cex = y + 1)
}
dev.off()

f:id:TJO:20191127142000p:plain

念のため1000回中10回当たりが出たケースだけを抜き出してきて、その当たりが出たタイミングで赤い点がy軸の1のところに出るようにプロットしてみました。


すると、ご覧のように意外と結構当たりが出るタイミングはそれほど綺麗にばらつきません。特定の乱数シードの結果を見ると、当たりが出るタイミングが物凄く固まって集中しているケースもあることが分かります。これがもし実際のギャンブルだったら「何だか当たりが続いているぞ!自分は『持って』いるんだ!」ということになりそうですね(笑)。


結果から見えるもの


しかしながら、全体としては結局確率0.01の二項分布乱数の羅列でしかありません。時点間では独立にギャンブルをしているはずなのに当たりがなぜか連続するという期間がある一方で、たまたま当たりが続いていた期間があってもその後にはまたランダムに当たりがばらける期間が続きます。ここでも結局平均への回帰と類似した現象が起きていることが見て取れるかと思います。


その意味では「当たりが連続したからといって『何か奇跡が起きている』と勝手に信じる」のも「一度大当たりが出たからといって『次はもう当たりは出ない』と思い込む」のも、等しく正しくないというわけです。これらはどちらも、このシチュエーションにおける平均回帰の誤謬に過ぎないからです。


同じシチュエーションを実際に研究したものはないのかなと思って、見つけたのが『平均回帰の誤謬:競馬市場からの実証分析』という研究。日本の競馬でも同様の平均回帰の誤謬が起きているのではないか?ということで調べてみたところ、確かに万馬券が出たレースの後は『もうしばらくこんな万馬券は出ない』とばかりに大穴狙いの勝ち馬投票が減る」(実際のレースは独立であって万馬券が連続することは確率論の考え方からすればあり得る)傾向が見られたそうです。競馬ファンでも嵌まる平均回帰の誤謬である、と言えるのかもしれません。


余談


実を言うと、今回のネタを最初に考えたのは知人から「競馬とかギャンブルで勝つ方法をデータサイエンティストなら知っているのでは?」と聞かれた時に「豊富なデータがあれば別だけど、自分が賭けた範囲のデータしか手に入らなければ基本的にはギャンブルの類は多かれ少なかれ確率過程に従うので単純には勝てない」という返事をして、その具体例を求められた時のことでした。


今回の話も、実際には多くの共変量を集めたり賭け方を工夫することでより確実に勝てる方法論が世の中にある*6ことを踏まえて、あくまでも単一のギャンブルにおいてナイーブに賭ける場合の例として言及したものだとご理解いただければ幸いです。


ただ、確率論というのは何かが「偶然である」ということは言えても「何故そんな偶然の出来事が起こり得たのか」を明らかにするものではありません。それはまさに神のみぞ知る領域であり、人智を超えた偶然については確率論といえども「偶然」という以上の判断は出来ないということを付記しておきます。


なお、記事タイトルにrandomnessの語を使ったのは以前書評記事を書いた『統計学のセンス』第2版の冒頭の受け売りというだけです。お粗末様でした。。。


追記


この手の「(ギャンブルをする人が)目先の結果に振り回される」現象をギャンブラーの誤謬 (Gambler's fallacy)とかホットハンドの誤謬と呼ぶのだと知りました。もっともこの辺の話はベイズ統計学とかだとまた違った解釈がされそうな気もするので、深追いはしないでおきます。。。

*1:測度論的確率論や確率過程の専門家の皆様方

*2:僕自身の文章ですがあえてquoteタグで切ってあります

*3:原義に沿うために傾きをつけてあるが、別に平均を定めた乱数を発生させて傾き0にしても結果は同じになる

*4:トレンドを伴わないという意味で

*5:ここではマルコフ転換モデルなどのようにある時点で過程の状態遷移が比較的不連続に起きるケースを想定する

*6:株の自動取引などはまさにそういうものが多い