Menu
CoddyTech

期待値

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 16/64。

抽選:チケットの70%は何も当たらず、25%は5ドル、5%は20ドルが当たります。1枚の価値はいくらでしょうか?

抽選の賞金0ドル、5ドル、20ドルを示す3本の棒。それぞれの当選確率は0.7、0.25、0.05です。棒はシーソーのような梁の上にあり、期待値である2.25の位置にある三角形を支点として釣り合っています

各賞品に当たる確率を掛けて合計します。これは期待値、つまりグラフの重心です。

prizes = np.array([0, 5, 20])
chances = np.array([0.7, 0.25, 0.05])
print((prizes * chances).sum())

これは、どのチケットでもその金額が支払われるわけではありませんが、長期平均の 2.25 を出力します。p= を指定した rng.choice は、その確率に従ってチケットを抽選します。

rng = np.random.default_rng(1)
tickets = rng.choice(prizes, size=10000, p=chances)
print(tickets.mean())

これは2.298を出力します。3ドルの場合、購入者はチケット1枚につき0.75ドル損します。新しいデータに対するモデルの平均誤差も期待値です。

challenge icon

チャレンジ

中級

縁日のルーレットでは、各ゾーンの当たる確率を chances に、その賞金のトークン数を prizes に格納しています。スターターコードでは、ルーレットを4000回回した結果を spins に格納しています。プログラムは1回あたりの料金を読み込みます。

  1. 期待される賞金を出力し、次にシミュレーションで得られた平均を、どちらも小数点以下2桁で出力します。
  2. 長期的に見て、プレイヤーが1回転あたりに得をするか損をするか、またその額を出力します。

別のルーレットで、料金が 1.5 の場合:

Expected prize: 1.1 tokens
Simulated average: 1.08 tokens
A player loses 0.4 tokens a spin

自分で試してみよう

import numpy as np

price = float(input())

# ルーレットの各区画の賞品(トークン数)と、その区画に当たる確率
prizes = np.array([0, 1, 4, 10])
chances = np.array([0.5, 0.3, 0.15, 0.05])

# 以下の行は変更しないでください:4000 回のスピンをシミュレーションします
rng = np.random.default_rng(9)
spins = rng.choice(prizes, size=4000, p=chances)

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

機械学習のための統計のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ