About connecting the dots.

data science related trivial things

データ分析における不確実性と変動性の違い

仕事をしていてデータを意思決定に用いる場合,データから予測されるシミュレーション結果が,どの程度信頼できるかということを判断する必要があります.例えば前期に20回実施して,14回は想定通りの効果が得られ,残りは失敗した施策があるとして,これを今期実施したらどの程度成功して,いくらの売り上げになるのか,みたいな場合です.

これを職場の偉い人に説明しにいくときに,予測売り上げをわかりやすく説明する必要があります.もちろん予測ぴったりになるとは限らないので,ある程度のレンジをもって伝えるわけですが,このときに,できるだけレンジの幅を縮めたり,また説明性を高めたりしないといけないわけですね.この予測のレンジについて,変動性と不確実性の2種類に区分することができます,というのが今回のネタです.元ネタはこちらの本になります*1

入門リスク分析―基礎から実践

入門リスク分析―基礎から実践

定義

変動性

上記の本の定義を引用すると,以下のようになります.

変動性は偶然の作用であり,システムに固有の作用である.これは研究や詳細な計測によって軽減できるものではないが,物理的なシステムを変更することで軽減できる可能性がある.

本の中では,このあとも具体的な説明がいろいろ書いてありますが,上記の説明を一言でいうと,変動性というのは分析対象が本来的に持っているランダム性である,ということができると思います*2

不確実性

では,もう一方の不確実性はどうでしょうか.同じく入門リスク分析によると,

不確実性は,モデル化するシステムを特徴付けるパラメータについての評価者の知識不足(無知の水準)である.不確実性は,詳細な計測や研究に依って,あるいは多くの専門家に意見を聞くことで軽減できることもある.

要するに,我々の知識不足のせいで生じている予測のあやふやさ,ということができるでしょう.つまりデータをより多く収集することで,予測の不確実性は低減することができるが,その一方で現象自体に内在しているランダム性は変化しないため,これを減らすことはできない,ということになります.この2つを分離してモデル化して,より多くデータを収集したり,もしくはシミュレーションによりデータを生成したりすることで,後者の不確実性を下げて予測の信頼性をあげたり,そもそも現象自体が持っている本当のランダム性を明らかにする,といったことができます.

変動性と不確実性を組み合わせたモデル化として,以下のようなコイン投げ問題を考えます.

これまでにコインを30回投げ上げて,21回表が出たとします.このときに,あと10回コインを投げたら表が出る回数はどの程度でしょうか.

解法1: 前提条件を所与のものとした場合

この場合,データの変動性のみをモデリングし,不確実性は取り扱いません.ここでいう不確実性とは,そもそもコインを投げて表が出る確率です.ここでは既に得られている結果から,21/30=0.7の確率で表が出るものと考えます.そしてコイン投げという過程自体の持つランダム性が,ここでの変動性になります.コイン投げ過程には2項分布を当てはめることができるため*3,Rのdnorm()関数を使ってそのままモデリングしてあげると,以下のようになります.

a <- array(1:10)
d <- apply(a, 1, function(x){dbinom(x,10,21/30)})
plot(d, type='l')

結果をプロットすると以下のようになり,7回にピークがくる形になります.

f:id:SAM:20140414232339j:plain

解法2: 前提条件の不確実性をモデルに組み込んだ場合

先ほどは,これまでに得られたデータをもとに,コイン投げで表が出る確率は0.7と決めてしまっていました.ですが実際問題としては,たかだか30程度のサンプルで表が出る確率が0.7と決めつけるのはかなり困難です.つまりこのコイン投げで表が出る確率というのは,コインに対する我々の知識が足りないために不確実性を持っているものと考えてあげる必要があるわけです.

この2項分布で表が出る確率については,ベータ分布を当てはめることができます*4.ベータ分布に従うと,n回の試行でs回の成功を得られたときに,

p=Beta(s+1, n-s+1)

とモデル化できますので,この場合には,

p=Beta(22, 10)

として,これをもとに表が出る確率の分布を生成し,その確率に従って二項分布のモデリングを行うと,以下のような結果が得られます.

par(new=T) 
b <- rbeta(100, 22, 10)
d <- c()
for (i in 1:100) {
  d <- c(d, rbinom(10,10,b[i]))
}
d <- table(d)/1000
plot(d, type='l', col='red', xlim=c(0,10), ylim=c(0,0.3), ann=F)

f:id:SAM:20140415001849j:plain

赤のラインがベータ分布を用いたものです.分布のピークは変わらず7回のままですが,もとの分布よりやや裾野が広くなっています.これはコインの表が出る真の確率を考慮したことで,モデルの不確実性が増したことによる結果です.逆にいうならば,もとの変動性をモデルしただけでは,実際に得られる予測レンジを過小評価しているということになってしまうわけです.

そんなわけで,正しく変動性と不確実性を考慮したモデリングは大事ですよ,というお話でした.

*1:この本,めちゃくちゃいい本だと思うので,意思決定に関わるデータ分析の仕事をしている人は,読んで損はないと思います.きちんと読むには東大出版界の赤本をちゃんと読める程度の統計知識が必要ではありますが...

*2:これはあくまで僕自身がそう読み取った,ということにすぎないので,気になる人は原典をきちんと読むことをお勧めします

*3:コイン投げに2項分布が当てはめられる理由がわからない人は, 高校数学の復習からはじめる二項分布の導出 - 廿TT あたりをみていただけるとよいかと思います

*4:こちらの理由については, ベータ分布 - NtRand あたりを読んでいただければ.数式多めですが...このベータ分布と二項分布を組み合わせたものが,ベータ-二項分布と呼ばれるものです’