Menu
CoddyTech

期望值

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 16 课,共 64 课。

一场抽奖:70% 的奖券没有中奖,25% 中奖 5 美元,5% 中奖 20 美元。一张奖券值多少钱?

抽奖奖品金额分别为 0、5 和 20 美元的三根柱子,中奖概率分别为 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,也就是长期平均值,但没有任何一张彩票会得到这个金额。rng.choice 配合 p=,会按这些概率抽取彩票:

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

这会打印出 2.298。票价为 3 美元时,买家每张票会亏损 0.75 美元。模型在新数据上的平均误差也是一个期望值。

challenge icon

挑战

中等

游乐场转盘会根据 prizes 支付代币,每个区域对应的概率保存在 chances 中。初始代码已让转盘转动 4000 次,并将结果存入 spins;程序会读取每次转动的价格。

  1. 先输出预期奖金,再输出模拟平均值,两者都保留 2 位小数。
  2. 输出从长期来看,玩家每转一次会赚还是会亏,以及具体金额。

对于另一个转盘,价格为 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 在线编译器