SSブログ

SPSS Modeler、シミュレーションノードを用いたモンテカルロ法の話 [データサイエンス、統計モデル]

朝野先生が書かれた『ベイズ統計学』をSPSS Modelerに実装しました。


ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/02/20
  • メディア: 単行本(ソフトカバー)



まずは、マルコフ連鎖モンテカルロ法ではない、普通のモンテカルロ法の話。

6章(6.1 モンテカルロ法より)
店舗A, B, C, Dの売上データあり、それを集計すると
 店舗A(平均100, 分散20)
 店舗B(平均120, 分散20)
 店舗C(平均110, 分散15)
 店舗D(平均100, 分散10)
となっていました。

なんとなく店舗Bの平均が高いのですが、1000日間の中で、店舗Bの売上が一番高い日はどれくらいあるでしょうか?といった問題をモンテカルロ法を使って計算します。

実際のストリームは、いたってシンプルです。



「シミュレーション生成」ノードの中身
分布で、正規分布を選んで平均と分散のパラメータを設定



売上なので、マイナスの値が出てくるとおかしいので、最小値を0.0としておきました。
実際は、平均100、分散10~20程度だと0以下になることは極めて稀なのですが、念のためです。w

相関のところは特に設定していませんが、こちらも設定することは可能です。
例えば、週末は売上が高くなるけど、平日は売上が落ちる、みたいな店舗の売上に相関があると仮定するならば、設定しても良いかもしれません。

拡張オプションでは、どれくらいの乱数を発生させるか、つまり、シミュレーションを行うか設定することができます。
デフォルトは10万。

「_max(フィールド作成)」ノードの中身
続いて、どの店舗の売上が最も高いかを計算しています。



@FIELD = max_n([Field_1, Field_2, Field_3, Field_4]


それぞれのフィールドで最大だったら1、それ以外は0という設定です。



「レコード集計とソート」ノードの中身
後は、各店舗別に1の数を合計しているだけなので、省略。

結果は、このようになります。



10万レコードあるので、各行のレコード数を10万で割ると、確率が出てきます。
教科書では、Bの店舗が最大になる確率は、54%となっていました。

今回、SPSS Modelerで実装した例では、54.75%ということで、ほぼ同じ結果となりました。

nice!(42)  コメント(0)  トラックバック(0) 
共通テーマ:学問