柿の種中毒治療日記

Kobe→Manila→Guangzhou & Hong Kong→Seoul→Yokohama

シミュレーションのはなし

大村平さんの「〜のはなし」三冊目を読了。今回は「シミュレーションのはなし」。冒頭おもしろい問題から始まる。いわく「13組のカップルがランダムにペアを組んで行く。このときにできた新しい13組のペアに、一組も元のカップルがない確率はどれほどか」。簡単な数え上げで確率を計算すればいいのではないかと思いきや、その組み合わせは60億とおりを超えてしまい、すべてのパターンを数え上げるのは人間業では不可能だ。理論計算するにしても膨大な計算量で、とてもではないけれど計算できない。そこででてくるのがモンテカルロ・シミュレーションによる近似である。たとえばAからKまで13枚のトランプを使って実験するのだ。一回の実験では当てにならなくても、10回・100回と実験回数を増やすにつれてその平均値は真の値に近づいて行くはずだ*1。つまり、決定的*2・解析的に解きにくい問題を実験を用いて確率的*3に解くことができるのである*4。モンテカルロ・シミュレーションというのは確率的な現象を相手にして、偶然の力を借りながら行うシミュレーションである*5
その他の例として、

  • 酔っぱらいがランダムウォークで交差点の角を直進・右折・左折・後退を繰り返して交差点を30個分歩いたとき、もとの地点からどのくらい離れている確率が最も高いのか。
  • ランダム到着(ポアソン到着)のシミュレーション。コールセンターなどでは電話がかかってくる間隔の確率は指数分布に従うことが知られている。スポーツジムにやってくる客の身長に応じて異なる高さの鉄棒を用意する場合、どのくらいの高さの鉄棒をいくつ用意しておくと客の待ち時間および鉄棒の空き時間を最小化できるか。なお身長は正規分布に従うと近似できるので、到着時間と身長の二つの変数をそれぞれの確率密度関数に基づいた乱数表を用いてシミュレーションする。
  • モンテカルロ法で円周率πを求める。半径1、中心角90°の扇形の面積はπ/4。この扇形がぴったりとはまる1辺の長さ1の正方形を考えると、正方形の面積と扇形の面積の日は1:π/4。そこでこの正方形の中にランダムにn個の点を落とし、そのうちのr個が扇形の中に落ちたとすると、r/n~π/4。つまりπ~4*r/n。nをどんどん大きくしていくことでモンテカルロ法によってπを近似的に求められる。
  • お見合い問題。最大10回のお見合いを繰り返す。次にどういう人が待っているかは当然分からない。また、一度次の人に会うことを決めると、前の人には戻れない。さらに相手が良い相手なほどこちらが振られる確率も高まる。こういう条件のときにどういう戦略をとるのが良い人と結婚できる確率が高くなるのか。即決した方が良いのか、それともじっくりと待ったほうがいいのか。慎重に行き過ぎて誰とも結婚できない確率はどうなるのか。

仕事ではコンピューターを使ってモンテカルロ・シミュレーションをするけれども、そもそもモンテカルロ・シミュレーションとはなんなのか、ということが乱数表を使って手を動かしながらしっかりわかる。コンピューターを使うにしても、その前に自分で乱数表を片手にノートで実験してみるのは効果的だろう。
シミュレーションはとてもパワフルだ。めったに起こらないような事象や、やって試してみるにはお金・時間がかかりすぎるようなことをコンピューターの中で何度も試行してくれる。そのシミュレーションを意味のあるものにするためにはモデルの善し悪しが決め手である。どういう事象が起こりうるのか、その事象はそれぞれどういった確率密度関数に従うのかなどをしっかり考えないといけない。そこをしっかり作れないと正確なことは言えないのだけれども、社会事象をモデル化するのはとても難しいし、データがそこまで揃っていないと結局モデルの質は判断できない。そこが悩みの種だけれども、トライ・アンド・エラーを繰り返しながらモデルをアップデートしていければそれはすごい武器になっていくだろう。
なお仕事に役立つまめ知識。モンテカルロ法の誤差はルートnに反比例して減っていく。そのため誤差を1/10にするためには回数を100倍に、誤差を1/100にするためには回数を10000回にしなければいけない。@Riskなどのモンテカルロ法を使えるアドインでは試行回数iterationを自在に指定できるのだけれども、時間の節約のためにあまりiterationの数を少なくしては誤差がかなり増えてしまう。

シミュレーションのはなし―転ばぬ先の杖

シミュレーションのはなし―転ばぬ先の杖

*1:大数の法則

*2:deterministic

*3:stochastic

*4:なおトランプはシャッフルしてもランダムにはなりにくいそうな。なので実際には乱数表を使う

*5:なおプロジェクト財務分析では、"best estimate"という点推定の値を用いることが多いけれども、実際のビジネスでその値ぴったりになることなどまずあり得ない。そこで重要な変数に対して区間推定を用い、推定される区間に対して確率密度関数を当てはめて数千回・数万回の試行をコンピューターに行わせ、その結果からどれくらいプロジェクトがリスキーなのか、どの変数が結果に最も効いてくるのを分析する。これが@RiskやCrystal ballなどのソフトウェアがやってくれることの本質だ。