![見出し画像](https://assets.st-note.com/production/uploads/images/52905835/rectangle_large_type_2_6f7262e003f3aea55a5ecaf7b2384b7c.png?width=1200)
じゃんけんをエクセルで解析してみる ※Excel無料プレゼント
こんにちは。
本業の金融に関連した小ネタを書きたいと思います。
お題は「じゃんけん」です。最後にエクセルをダウンロードできます。
私とあなたがじゃんけんをした場合、あなたが私に勝つ確率はいくつでしょうか。
答えは1/3です。
考え方は簡単です。
下の表のように全体の手の出し方は9通りで、〇をつけたパターンのみあなたが勝ち、その数は3通りですから3÷9=1/3となるわけです。
これって本当なのでしょうか?
これを金融分野でよく用いるモンテカルロシミュレーションを用いて分析してみたいと思います。
モンテカルロシミュレーションはざっくり言えば、乱数(適当な数)を発生させて、何らかの型に当てはめたときにどのような振る舞いをするか見るものです。抽象的なので分かりにくいですが、じゃんけんの例であればランダムにじゃんけんさせると確率はどうなるのか見るものです。
まず結果は以下のようになりました。
あなたがじゃんけんに勝つ確率のグラフです。
縦軸が確率、横軸がじゃんけんをした回数です。これを見ると、数回じゃんけんをした程度では確率にはかなりばらつきがありますが、1万回という膨大な回数のじゃんけんを行うと0.33...つまり1/3にかなり近づくことが分かると思います。
エクセルを用意して、是非一緒にやってみましょう。
完成すると結構嬉しいと思います。
ではどのようにこの結果を得たのか示していきます。
①グー、チョキ、パーを数値化
まずエクセルですから、グー、チョキ、パーという言葉そのまま使うのは不便です。従ってこちらを数字に置き換えて扱うことにします。
②じゃんけんの手をランダムに発生させる
次にじゃんけんの手をランダムに発生させます。①で手を数値化しましたので、1,2,3をランダムに発生させれば良いことになります。
ここで使うのがRAND関数です。
RAND関数はその名の通りランダムに乱数を発生させる関数です。
0以上1未満の数値がランダムで発生します。
=RAND()
をいれると適当な数字が出てくると思います。
しかしこのままでは適当な数字のままですから、1,2,3をランダムに発生させているわけではありません。
次に行うのが、出てきた数字に3をかけて3の倍数にすることです。
=RAND()*3
これで3の倍数を生み出すことに成功です。しかし欲しいのは1,2,3のどれかです。そこで使うのがINT関数です。これは小数点以下を切り捨てて整数にする関数です。例えば0.91なら0、1.56なら1となります。
しかし、=RAND()*3で出てくる数値は0以上3未満です。仮に0.33にINT関数を使うと0になってしまうため、1,2,3のいずれでもありません。
また、2.99999999にINT関数を使っても2となるため3は得られません。
とはいえ少なくとも0,1,2はランダムに発生させることが出来るわけです。
ということは最初に1を足してしまえば、1以上4未満の数字がRAND()*3+1から得られ、これをINT関数で囲ってしまえば、1,2,3が出てくるということになります。
=INT(RAND()*3+1)
③じゃんけんの勝ち負けを判定する
②でじゃんけんの手をランダムに出すことに成功しましたので、実際にじゃんけんをした後、勝ち負けを判定するにはどうすればよいでしょうか。
excelを触ったことがある場合、IF関数が思いつくかと思いますが、じゃんけんの手の出し方のパターンは9通りあるため、9通り判定させるとなると関数の中身が長くなるのでやりません。
使うのはMOD関数です。
これは余りを計算する関数です。例えば=MOD(5,3)であれば、5を3で割ったときの余りを計算してくれます。つまり余り2を得ることが出来ます。
なぜ余りなんか計算するんだ!と感じるかもしれませんが、じゃんけんのパターンを簡単に表現するためです。
①でじゃんけんの手を数値化したのですから、数字を上手く扱うことで勝ち負けを表せます。
例えば、
(A) 自分が1(グー)、相手が2(チョキ)であれば自分の勝ち
(B) 自分が2(チョキ)、相手が3(パー)であれば自分の勝ち
(C) 自分が3(パー)、相手が1(グー)であれば自分の勝ち
ここで試しに数字の差をとると、
(A) 1-2=-1
(B) 2-3=-1
(C) 3-1=2
となります。これらは3で割ると全て余りが2となります。
-1を3で割ると余りが2の理由は・・・
割り算では、割られる数は割る数が何個から構成されているか、そして余ったものは何かということを見ることが出来ます。
2というのは3がゼロ個で余り2です。
2=3*0+2と表現できます。
5というのは3が1個で余りが2です。
5=3*1+2と表現できます。
同じようにして
-1=3*(-1)+2と表現できますので、余りが2となります。
無理矢理表現すれば-1というのは3が(-1)個で余りが2ということです。
まとめると、自分と相手の数字(じゃんけんの手)の差を3で割ったときに、余りが2となる場合、自分の勝ちということになります。
あいこの場合、自分と相手の手は常に同じになるので、差は0となり、3で割った余りは0です。つまり余り0はあいこです。
最後に余りが1の時は相手の勝ちとなります。
余りに注目することで、じゃんけんの勝敗を判定することが可能となりました。
自分と相手の数字(じゃんけんの手)の差を3で割ったときの余りによって下記のような分類が出来ます。
④シミュレーション実践
まず、メモを端に記します。(なくても良いです)
次にじゃんけんをさせる表を作ります
D列はじゃんけんの回数です。何回目のじゃんけんかを示しています。1万回目まで行を作って下さい。
E,F列は自分と相手の手をランダムに発生させています。関数は②で使ったものです。
G列は自分と相手の差を3で割った余りで、下記のように入力しています。
F9を押すと乱数が発生し直します。つまりじゃんけんをし直します。
さらに右へ、じゃんけんの結果をまとめる表を作ります。
勝つ回数などのカウントの仕方は下記の関数を使います。
COUNTIF関数で先ほどの余りの列において2だったセルの数を数えます。
OFFSET関数を使っているのは試行回数、つまりじゃんけんをした回数の範囲内で2だったセルを数えるためです。
例えば試行回数が10なら、G2からG11の中にある2を数えます。
試行回数が1000なら、G2からG1001の中から2の個数を数えます。
これにより、勝つ回数が分かりました。
最後に勝つ確率をN列で計算しています。
最後に試行回数を縦軸、勝つ確率を横軸にしてグラフを描くと下記のようになるというわけです。
F9を押しますと、また違うグラフが描かれます。
これがじゃんけんのシミュレーションになります。
0.333..の直線が入っているかと思いますが、実はJ列に0.333..を入力しグラフを追加しています。
金融でもこれを応用したものが使われて、金融商品の価格が決定されていたりします。
⑤エクセルプレゼント(ダウンロードはこちら)
※無料
上手くいかない、細かいところを見たいという方はこちらから私のエクセルをダウンロードできますので、ご参考までに。
※当エクセルは遊びで作ったものであり、この内容を用いて何かに転用等した場合に損害等発生したとしても一切の責任を負いません。
この記事が気に入ったらサポートをしてみませんか?