Engineering Skills

製品開発エンジニアがデータ解析のノウハウを垂れ流します

一様乱数と逆関数法

今回はエクセルでの乱数計算を説明します。正規分布に従う乱数を扱うことができると、簡単なモンテカルロシミュレーションも実行できます。

一様乱数

エクセルにはRAND()という引数なしの関数があります。値域は0以上1未満で、値は等確率にランダムに現れます(つまり乱数です、計算する度に異なる数値になります)。数式的には[0,1)です。"["は以上、"]"は以下、"("、")"はそれぞれ指定される値を含まず上か下かです。このような、一定区間内に等確率で出現する乱数を一様乱数といいます。

=RAND()で10000点の一様乱数をエクセルで生成し、ヒストグラムを作ると下記のようになります。エクセル上でヒストグラムを作成するにはFREQUENCY(データ区間区間配列)が便利です。

f:id:OceanOne:20200407020907j:plain

逆関数

一様乱数とある確率分布の累積分布関数の逆関数を用いると、その確率分布に従う乱数を発生させることができます。一様乱数という生成しやすい単純な乱数を使って、複雑な確率分布に従う乱数を生成することができます。

ここでは正規分布を考えます。正規分布確率密度関数は下記です。

f:id:OceanOne:20200408011529j:plain

Fig.1 正規分布確率密度関数

これを積分して累積確率を考えると下記になります。

f:id:OceanOne:20200408011756j:plain

Fig.2 正規分布の累積分布関数

Fig.2の縦軸は累積確率なので単調増加かつ0から1の間しか取りません。一様乱数は0~1の間にしか値をもたないため、縦軸から横軸に変換できれば正規分布に従う乱数を得ることが出来ます。そして縦軸から横軸への変換は、逆関数です。

つまり一様乱数と累積分布関数の逆関数があれば、その確率分布に従う乱数を得られることになります。

エクセルで標準正規分布の累積分布関数の逆関数を計算するためにはNORMSINV()或いはNORM.S.INV()という関数を使います(標準正規分布とは平均0、標準偏差1)。このNORMSINV()の引数にRAND()を入れてやると正規分布に従う乱数を得ることが出来ます。

正規分布乱数

=NORMSINV(RAND())で10000点の乱数を作成し、ヒストグラムを作成した結果は以下です。

f:id:OceanOne:20200407033206j:plain

これは平均0、標準偏差1の乱数になります。もし平均A、標準偏差Bの乱数を作りたい場合は、=NORMSINV(RAND())*B+Aとすればよいです。

まとめ

エクセルならNORMSINV(RAND())で正規分布に従う乱数を生成できます。乱数が扱えるとバラツキに関する色々なケーススタディが出来ます。ぜひ活用してみてください。