エクセルを使った正規分布乱数の生成方法

2021年6月12日

モンテカルロシミュレーションでは、大量の乱数を使ってシミュレーションを繰り返しますので、コンピュータで乱数高速に生成する必要があります。

しかしコンピュータで乱数を生成させることは大変です。

専門に研究している人が大勢いるくらいです。

予測不可能で、再現不可能な乱数を、人間が命令しないと動かないコンピュータに作らせるのは難しいのです。

 

しかし、物流のシミュレーションでは、そんなに厳密な乱数である必要はありません。

たまに同じ数の並びが出ても別に問題ないのです。

 

そのレベルの乱数生成ならばエクセルで十分にできます。

今回は、正規分布に従う乱数をエクセルで生成させる方法を紹介します。

 

確率密度関数と累積分布関数とは

正規分布の確率密度関数はこんな感じでした。

 

全体の面積が1になることがポイントです。

もし特定のデータ区間の確率を知りたい時には、その間の面積を求めれば分かります。

このように縦軸は確率密度を表しているため、確率密度関数と呼ばれるのです。

 

このような確率密度関数の他に、累積分布関数というのもあります。

例えば、下図は平均50、標準偏差6の正規分布の累積分布関数です。

 

このグラフの縦軸は、横軸の数字以下になる確率を表しています。

例えば、50以下の数字になる確率は0.5、70以下の数字になる確率は1といった具合です。

つまり、横軸の数字までの累積確率を表しているため、累積分布関数と呼ばれるのです。

 

そして、正規分布乱数を生成するためには、この累積分布関数が使われます。

理由は3つあります。

1つは縦軸の値が0から1であること。

2つめは縦軸の値から横軸の値が一意に決まること。

そして3つめが、0から1までの数が同じ確率で生成された場合、その数に応じた横軸の値が正規分布に準ずる分布になるためです。

 

でも普通、関数というと、x(横軸の値)からy(縦軸の値)を求めるものです。

yからxを求める関数を逆関数と言います。

従って、累積分布関数の逆関数が分かれば、0から1の数をランダムに入れることにより、正規分布に従う乱数を求めることができます。

 

エクセルでやってみる

この累積分布関数とその逆関数は、エクセルに用意されています。

 

累積分布関数:

確率 = NORM.DIST(確率変数、平均、標準偏差、TRUE)

 

累積分布関数の逆関数:

確率変数 = NORM.INV(確率、平均、標準偏差)

 

正規分布乱数を生成するのは逆関数の方です。

「確率」のところに、0から1までの数をランダムに入れればいいだけです。

ランダムにというのは、偏りなく一様に数を生成するということです。

この関数もエクセルに用意されています。

=RAND()

と入力することにより、Enterキーを押すごとに、そのセルには0から1までの一様乱数が生成されます。

 

これを累積分布関数の逆関数の「確率」入れてやれば、正規分布の乱数が生成されます。

例えば、下記のように入力することにより、平均100、標準偏差50の正規分布に従う乱数を生成することができるのです。