ベイズで分かる相性診断 part2 | 統計アラカルト [実践] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 実践 | 統計アラカルト | 統計に関する話題をrpnで探求!統計的に検証してみよう。

HOME > 実践 > 統計アラカルト > ベイズで分かる相性診断 part2

hatena twitter facebook rss ソーシャルブックマーク

ベイズで分かる相性診断 part2

前のページに戻るLinkIcon

 モテる人に聞くと一様に、しつこくない程度に何度も誘うこととの答えが返ってきます。断られても軽く往なして「じゃあ、また今度の機会にね」と次回のチャンスを狙います。状況が変われば成功する確率も変わるわけですから、何回も誘うのが彼らにとっては常識のようです。

では、最初は断られたけど、2度目はOKが出て、3度目がNGだった場合は結局、どれくらい好かれているのでしょうか。脈はまだ残っているのでしょうか。

実はベイズ更新の手法を使うことでキッチリ数値で確率を出すことができるのです。

ベイズ更新とは

 これもベイズ統計学の特徴の1つです。ベイズの定理を使った計算では事前確率と尤度から事後確率を求めましたが、この事後確率を以下の図のように次のベイズ計算の事前確率に再利用します。

               ----------
  事前確率 --> ベイズ計算 --> 事後確率
               ----------        |
                                 v         ----------
                              事前確率 --> ベイズ計算 --> 事後確率
                                           ----------


事前確率は今までの経験から推定したものですが、事後確率はベイズの定理によって裏打ちされた確率になります。

そこで、事後確率を事前確率として再利用しながらベイズ計算を繰り返せば、機械が学習するように本来のあるべき確率に近づいていくだろうと想像できます。

ベイズ更新をrpnプログラムで

 これまでは尤度と事前確率だけを使って計算していましたが、ベイズ更新ではデータを使います。データといっても"食事に行く"、"食事を断る"を数値で表したものです。具体的には食事の誘いに成功した場合は1に、断られた場合は2にコード化します。

  • 食事に行く → 1
  • 食事を断る → 2

前ページのbayseプログラム説明ではコード化した数値を設定していませんでしたが、今回は以下のrpn式のように尤度の前に数値の2を設定します。

  >rpn 2 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse
  0.142857 0.857143


これが1回目に食事を断られたときの、好かれている事後確率と嫌われている事後確率です。この事後確率を事前確率として設定するので、2回目の食事OKの場合は次のように設定します(コード化した数値は1)。

  >rpn 1 0.9 0.4 0.1 0.6 0.142857 0.857143 -c bayse
  0.272727 0.727273


3回目の食事NGについても同様に計算します。

  >rpn 2 0.9 0.4 0.1 0.6 0.272727 0.727273 -c bayse
  0.0588235 0.941177


最終的に好かれている確率は僅か5%台ということになりますね。

データファイルを使ったベイズ更新

 ベイズ更新を計算していく手順は上記の方法でよいのですが、データの数が増えていくと大変そうですね。事前確率の入力ミスもありえますし、誤差も蓄積してきそうです。何か楽な方法はないものでしょうか。

実は、bayseプログラムはデータファイルを使ったベイズ更新にも対応しています。まず、データをテキストファイルの"date.txt"にデータを格納します。今回は食事NG、食事OK、食事NGの3回のデータとします。

  >type date.txt
  2
  1
  2


ファイルを使ったベイズ更新の方法は簡単で、用意したデータファイルをプログラムに渡せばよいだけです。以下にrpn式を示します。

  >rpn 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse <date.txt
  0.142857 0.857143
  0.272727 0.727273
  0.0588235 0.941176


一気に計算されましたね。1行目が1回目の食事NGの結果の事後確率です。順に2回目、3回目の結果が計算されています。2回目、3回目の計算では前回の事後確率を事前確率として再利用しています。

結果を考察すると、1度目の食事の誘いに断られた段階で好かれている確率はわずか14%です。2度目の食事OKで何とか27%まで盛り返しましたが、3回目の食事NGで5%台まで急落しています。その過程をグラフ化してみましょう。

  >rpn 0.5 0.5 >tmp
  >rpn 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse <date.txt >>tmp
  >rpn 0 -c rownum <tmp | xyp -x,3 -y,1 -s1,.25 -n -k2 -m | npd
  ^y 1                                   +
  |
  |            +
  0.75
  |                         +  <-- 嫌われている確率
  |
  |
  +* <-- 初期確率(0.5)
  |
  |
  |                         *  <-- 好かれている確率
  0.25
  |            *
  |                                      x
  |o                                     *
  +------------1------------2------------>
              1回目       2回目       3回目
              (NG)        (OK)        (NG)


"*"が好かれている確率の推移で、"+"が嫌われている確率の推移です。食事の誘いの結果に従って、確率が上下していることが分かります。5%台の確率であることを考えると残念ながら、彼女は交際する気はなさそうです。

ベイズ更新の逐次合理性

 ところで、食事に誘った結果の順番が違っていたらどうなるのでしょう。食事に誘えた数は同じでも順番が変わっていたら、もしかしたら彼女の心持も変わるかもしれません。以下に2つのケースを用意してみました。

  • ケース① 食事OK、食事NG、食事NG
    • 最初の誘いに応じてくれたが、その後は2連敗。
  • ケース② 食事NG、食事NG、食事OK
    • 2度の誘いを断られたが3度目の正直でOKが出た。

それぞれ"case1.txt"と"case2.txt"のテキストファイルにデータを保存しておきます。

  >type case1.txt
  1
  2
  2

  >type case2.txt
  2
  2
  1


順にケース①、ケース②で計算してみましょう。

  >rpn 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse <case1.txt
  0.692308 0.307692
  0.272727 0.727273
  0.0588235 0.941176

  >rpn 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse <case2.txt
  0.142857 0.857143
  0.027027 0.972973
  0.0588235 0.941176


グラフにすると以下のような感じです。

  ^y 1
  |
  |
  0.75
  |            * <-- ケース①
  |
  |
  +* <-- 初期確率(0.5)
  |
  |
  |                         *
  0.25
  |            + <-- ケース②
  |                                      x
  |o                        +            +
  +------------1------------2------------>
              1回目       2回目       3回目
   ケース①   (OK)        (NG)        (NG)
   ケース②   (NG)        (NG)        (OK)


結果を見ると分かるように最終的には同じになることが分かります("+"が"*"を上書き)。これがベイズ更新の逐次合理性です。順番が変わっても食事OKの数が同じなら同じ結論になります。

もちろん、食事OKの数が増えれば変わってきます。例えば、食事OK、食事NG、食事OKの場合は以下のように確率が変わっています(今回はファイルを使わずに直接計算させています)。

  >rpn 1 2 1 -c tmat | rpn 0.9 0.4 0.1 0.6 0.5 0.5 -c bayse
  0.692308 0.307692
  0.272727 0.727273
  0.457627 0.542373


食事に誘うことに3回中2回成功しても、好かれている確率はやっと46%です。告白するには微妙な数値ですね。

事前確率を利用する

 そこで共通の女友達を通して、彼女があなたに気があるかどうか食事に誘う前に探りを入れてもらったとします。女友達が言うには「気持ちが揺れているようだけど私の経験だと70%は好きな感じよ」とのこと。

さっそく、事前確率に70%を採用して再度、計算してみましょう。

  >rpn 1 2 1 -c tmat | rpn 0.9 0.4 0.1 0.6 0.7 0.3 -c bayse
  0.84 0.16
  0.466667 0.533333
  0.663158 0.336842


今度は好かれている確率が66%あります。告白するには十分でしょう。

逆に女友達に「あぁ、多分脈なしね。3割もあればいいほうじゃない」と言われたとしたら、以下の計算のように悲しい確率になります。

  >rpn 1 2 1 -c tmat | rpn 0.9 0.4 0.1 0.6 0.3 0.7 -c bayse
  0.490909 0.509091
  0.138462 0.861538
  0.265574 0.734426


今度は27%もありません。グラフにしてみると推移の様子が掴めます。

  ^y 1
  |
  |            *
  0.75
  * <-- 初期確率(0.7)
  |                                      *
  |
  0.5          +            *
  |
  |
  + <-- 初期確率(0.3)
  0.25                                   +
  |                         +                事前確率
  |                                      x     * (7割は脈あり)
  |o                                     3     + (3割もない)
  +------------1------------2------------>
              1回目       2回目       3回目
              (OK)        (NG)        (OK)


ベイズ統計では事前確率に大きく左右されることがよく分かりますね。

        *


 20世紀後半からのコンピュータの高性能化、ベイズ理論のフィールド実験での好成績(スパムメールのフィルタリングが有名)が背中を押した形になって、近年はベイズ理論が隆盛です。

アメリカでは既に統計学者の半分がベイジアンとも言われているそうです。

ネイマン・ピアソンの統計学では解決できない問題も実用になる範囲で解決できるケースが多々あるために余計に期待が膨らむのかもしれません。今後もベイズ理論の応用には目が離せませんね。

番外編:マスコミへの信頼が揺ぐとき

 平等感のある時代に変革を望む者はおらず、体制の維持を願います。時が過ぎ、経済格差が表面化して不平等感のある時代になると大衆は変革を望み始めます。全体の20%が現状維持のための情報を望まなくなったとき、方向転換の可能性が高まると仮定してみましょう。

金融市場でも20%の変動はトレンドの変化を示しますし、強ち間違ってはいないでしょう。

基本的にマスコミ(テレビ、ラジオ、新聞)は現状維持のメディアです。マスコミへの信頼が高ければ高いほど変革は起こりません。カタストロフィー的な事変が発生していないとき、マスコミへの信頼は最大で99%と仮定してみます。インターネットがなかった時代や今でも特定の年齢層では考えられる数字です。

カタストロフィー的な事変は国家的規模での反乱、事故、モラルハザードを含みます(大きな自然災害も対応を巡って現体制の歪みが露呈する場合が多い)。

しかし、一旦カタストロフィー的な事変が起こると、意見の多様性を求める人たちが出始め、マスコミへの一方的な信頼が揺らぎます。

             | 信頼するのは…     |
             | マスコミ | それ以外(口コミ、インターネット等)
  -----------+----------+----------
  事変未発生 |    99%   |    1%   | ※事前確率は理由不十分の原則で
  事変の発生 |    80%   |   20%   |   それぞれ50%とする


ベイズの定理ではカタストロフィー的事変が発生しなければ、どんどん事後確率は増加します。初め50%だったマスコミへの信頼度は7年目には80%を超えます。また、ベイズの特徴ですが、年数を経ると多少の事変があっても信頼は落ちません。3つのケースを想定して計算してみましょう。

ケース①は平穏だった年の10年目に、ケース②は20年目に、そしてケース③は60年を過ぎてカタストロフィー的な事変が起こったときとします。それぞれをベイズで計算して、グラフにまとめると次のようになります。

  ^y 1        ++++++++===========================================
  |       *+++           +++
  |・・・・・**・・・・・・・・・・・・・++・・・・・・・・・・・・・・・・・・・・・・・・・・ 信頼ライン(80%)
  0.75**              + <-- ②20年目に
  |  *                      カタストロフィー的         ③60~63年目-----> =
  |**                       事変が発生           カタストロフィー的事変が
  *                                                 4年連続で発生
  0.5           *
  |            *
  |          **
  |         *                                        * ①のケース
  0.25     * <-- ①10年目に                          + ②のケース
  |              カタストロフィー的                          = ③のケース
  |              事変が発生                                       x
  |o                                                             63
  +---------10--------20--------30---------40--------50--------60->


事前確率50%からのスタートなのでハンデがありますが、ケース①で10年目にカタストロフィー的な事変が発生すると現状維持派であるマスコミへの信頼は25%台に急落します。その後、平穏に5年経過しても回復しません。

ケース②の20年目の場合でも1回のカタストロフィー的な事変が発生すると信頼は78%に落ち、80%のラインを下回ります。ただし、翌年にはすぐ80%に回復しています。

しかし、ケース③のように60年もマスコミへの厚い信頼状態が続くと、3回連続でカタストロフィー的事変が起こったとしても信頼ラインの80%は割れません。

戦後60年を超えて、現在の日本は3番目のケース(グラフでは"=")かもしれません。何をカタストロフィー的な事変と捉えるかは問題ですが、東日本大震災と福島第一原発事故を2回とカウントしてもマスコミへの信頼は揺るぎないことが分かります。

起こって欲しくありませんが、近隣諸国との紛争や富士山の噴火、南海トラフ地震、付随する原発電源喪失などカタストロフィー的事変の種は尽きません。
世界60カ国のマスメディアに対する信頼度調査(2003年以前)では、日本を含め僅か7カ国だけが信頼度が50%を超える国々です。※日本は70%で1位、同じ先進諸国のカナダ、ドイツ、フランス、イタリアは30%台、アメリカは26%、イギリスに至っては14%、ロシアでも29%です。

実践統計アラカルトに戻るLinkIcon

警告rpnプログラムを実行するには、rpn試用版かrpn標準版が必要です(バージョンの違いはこちら)。

情報rownum はカンタン分析パッケージに同梱されています。tmatはユーティリティーパッケージに同梱されています。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

統計アラカルト

統計的に検証してみよう

※実践コーナーのTOP

紹介 rpnの利用シーンはこちら…

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

part2

統計的に検証してみよう

※実践コーナーのTOP

講座初めての人のrpn基礎もどうぞ
講座しっかり学べるrpn入門もどうぞ
講座すぐに使えるdos入門もどうぞ
物語データを見抜くojt物語もどうぞ

実践他の分野への挑戦は実践TOP

応用rpnアプリケーションは応用TOP

書籍紹介

記事に関連した書籍

本ウェブサイトで扱った話題に関連した書物で、スタッフが実際に読了したものを紹介。

書籍数学の書籍
数の世界は思ったよりもエキサイティング

書籍投資の書籍
失敗しない投資には広範囲で実践的な知識が必要

警告バックスラッシュはエンマークに読み替えて下さい(IE)。
バックスラッシュとエンマーク

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn試用版と標準版(2kリビジョン)はダブルクォートで囲って下さい。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS参照ください。

注意rpnの障害情報はこちら

警告rpn試用版の場合、複雑なプログラムや処理時間のかかるプログラムの一部には動作しないものがあるかもしれません。あくまで無料提供であることを勘案・了承ください。rpn標準版は、すべてのプログラムが動作します。