量化面试绿皮书:33. 不公平的硬币

发布于:2025-06-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

33. 不公平的硬币

你有1000枚硬币。
其中,有1枚硬币正反两面都是正面。
其他的999枚硬币都是公平的硬币。
你随机选择一枚硬币并抛掷10次,每次硬币都正面朝上。

Q: 你选择的那枚硬币是不公平硬币的概率是多少?

A: 要计算在抛掷10次都得到正面的条件下,选中的硬币是不公平硬币的概率,可以使用贝叶斯定理。以下是详细步骤:

定义事件

  • U U U: 选中的硬币是不公平硬币(两面都是正面)。
  • F F F: 选中的硬币是公平硬币(正反各50%概率)。
  • D D D: 抛掷10次,每次都得到正面。

我们需要求条件概率 P ( U ∣ D ) P(U|D) P(UD),即在观察到10次正面后,硬币是不公平的概率。

先验概率

  • 总共有1000枚硬币,其中1枚是不公平的,999枚是公平的。
  • P ( U ) = 1 1000 P(U) = \frac{1}{1000} P(U)=10001
  • P ( F ) = 999 1000 P(F) = \frac{999}{1000} P(F)=1000999

似然概率

  • 如果硬币是不公平的( U U U),每次抛掷都必然是正面,因此抛10次都正面的概率为:

    P ( D ∣ U ) = 1 P(D|U) = 1 P(DU)=1

  • 如果硬币是公平的( F F F),每次抛掷正面的概率为0.5,因此抛10次都正面的概率为:

    P ( D ∣ F ) = ( 0.5 ) 10 = 1 1024 P(D|F) = (0.5)^{10} = \frac{1}{1024} P(DF)=(0.5)10=10241

全概率 P ( D ) P(D) P(D)

使用全概率公式计算观察到10次正面的总概率:

P ( D ) = P ( D ∣ U ) ⋅ P ( U ) + P ( D ∣ F ) ⋅ P ( F ) P(D) = P(D|U) \cdot P(U) + P(D|F) \cdot P(F) P(D)=P(DU)P(U)+P(DF)P(F)

代入值:

P ( D ) = ( 1 ) ⋅ 1 1000 + 1 1024 ⋅ 999 1000 = 1 1000 + 999 1000 × 1024 P(D) = (1) \cdot \frac{1}{1000} + \frac{1}{1024} \cdot \frac{999}{1000} = \frac{1}{1000} + \frac{999}{1000 \times 1024} P(D)=(1)10001+102411000999=10001+1000×1024999

合并项:

P ( D ) = 1 1000 + 999 1024000 = 1024 1024000 + 999 1024000 = 1024 + 999 1024000 = 2023 1024000 P(D) = \frac{1}{1000} + \frac{999}{1024000} = \frac{1024}{1024000} + \frac{999}{1024000} = \frac{1024 + 999}{1024000} = \frac{2023}{1024000} P(D)=10001+1024000999=10240001024+1024000999=10240001024+999=10240002023

(注: 1000 × 1024 = 1 , 024 , 000 1000 \times 1024 = 1,024,000 1000×1024=1,024,000

后验概率 P ( U ∣ D ) P(U|D) P(UD)

根据贝叶斯定理:

P ( U ∣ D ) = P ( D ∣ U ) ⋅ P ( U ) P ( D ) P(U|D) = \frac{P(D|U) \cdot P(U)}{P(D)} P(UD)=P(D)P(DU)P(U)

代入值:

P ( U ∣ D ) = 1 ⋅ 1 1000 2023 1024000 = 1 1000 2023 1024000 = 1 1000 × 1024000 2023 = 1024000 1000 × 2023 = 1024 2023 P(U|D) = \frac{1 \cdot \frac{1}{1000}}{\frac{2023}{1024000}} = \frac{\frac{1}{1000}}{\frac{2023}{1024000}} = \frac{1}{1000} \times \frac{1024000}{2023} = \frac{1024000}{1000 \times 2023} = \frac{1024}{2023} P(UD)=10240002023110001=1024000202310001=10001×20231024000=1000×20231024000=20231024

简化分数

  • 分子 1024 = 2 10 1024 = 2^{10} 1024=210(2的10次方)。
  • 分母 2023 = 7 × 17 2 2023 = 7 \times 17^2 2023=7×172(分解质因数: 2023 ÷ 7 = 289 ,   289 = 17 × 17 2023 \div 7 = 289, \ 289 = 17 \times 17 2023÷7=289, 289=17×17)。
  • 分子和分母没有公因数(1024是偶数,2023是奇数,且质因数不同),因此 1024 2023 \frac{1024}{2023} 20231024 已是最简分数。

最终概率

因此,在抛掷10次都得到正面的条件下,选中的硬币是不公平硬币的概率为:

1024 2023 \boxed{\dfrac{1024}{2023}} 20231024

解释

  • 这个结果直观上也合理:不公平硬币总是产生正面,而公平硬币产生10次正面的概率很低(约0.000976),但由于公平硬币数量多(999枚),后验概率约为0.506(即 1024 2023 ≈ 0.506179 \frac{1024}{2023} \approx 0.506179 202310240.506179),略高于50%,表明观察到10次正面后,硬币更可能是不公平的。

Python 实现

以下是使用Python实现的代码,计算在抛掷10次都得到正面的条件下,选中的硬币是不公平硬币的概率,并输出精确分数和浮点数结果。

from fractions import Fraction
from typing import Tuple


def calculate_coin_probability(
    total_coins: int, unfair_coins: int, num_flips: int
) -> Tuple[Fraction, float]:
    """计算在连续抛出指定次数正面后,选中不公平硬币的后验概率。

    Args:
        total_coins (int): 硬币总数
        unfair_coins (int): 不公平硬币数量(两面都是正面)
        num_flips (int): 连续抛掷正面的次数

    Returns:
        Tuple[Fraction, float]:  后验概率的分数形式和小数形式
    """
    # 计算先验概率
    prob_unfair = Fraction(unfair_coins, total_coins)  # P(U)
    prob_fair = Fraction(total_coins - unfair_coins, total_coins)  # P(F)

    # 计算似然概率
    prob_heads_given_unfair = Fraction(1)  # 不公平硬币的正面概率 P(D|U)
    prob_heads_given_fair = Fraction(1, 2) ** num_flips  # 公平硬币连续正面的概率 P(D|F)

    # 计算全概率 P(D)
    prob_data = (
        prob_heads_given_unfair * prob_unfair + prob_heads_given_fair * prob_fair
    )

    # 计算后验概率 P(U|D)
    posterior_prob = (prob_heads_given_unfair * prob_unfair) / prob_data

    return posterior_prob, float(posterior_prob)


# 问题参数
TOTAL_COINS = 1000
UNFAIR_COINS = 1
NUM_FLIPS = 10

# 计算概率
prob_fraction, prob_decimal = calculate_coin_probability(
    total_coins=TOTAL_COINS, unfair_coins=UNFAIR_COINS, num_flips=NUM_FLIPS
)

# 输出结果
print(f"后验概率(分数): {prob_fraction}")
print(f"后验概率(小数): {prob_decimal:.6f}")
print(
    f"解释:抛掷10次都得到正面后,硬币是不公平的概率为{prob_fraction}{prob_decimal*100:.2f}%"
)

代码说明

  • 使用fractions.Fraction保持精确计算
  • 实现贝叶斯定理:
    • 先验概率: P ( U ) = 1 1000 , P ( F ) = 999 1000 P(U) = \frac{1}{1000}, P(F) = \frac{999}{1000} P(U)=10001,P(F)=1000999
    • 似然概率: P ( D ∣ U ) = 1 , P ( D ∣ F ) = ( 1 2 ) 10 P(D|U)=1, P(D|F)=(\frac{1}{2})^{10} P(DU)=1,P(DF)=(21)10
    • 后验概率: P ( U ∣ D ) = [ P ( D ∣ U ) P ( U ) ] P ( D ) P(U|D) = \frac{[P(D|U)P(U)]}{P(D)} P(UD)=P(D)[P(DU)P(U)]

输出:

后验概率(分数): 1024/2023
后验概率(小数): 0.506179
解释:抛掷10次都得到正面后,硬币是不公平的概率为1024/2023 ≈ 50.62%

这道面试题的本质是考察候选人将现实金融问题抽象为概率模型的能力在不确定性下动态更新决策的量化思维,这类能力直接对应高频交易信号过滤、风险事件评估和衍生品定价中的核心挑战。

🔑 核心知识点

  1. 贝叶斯推理
    • 金融场景中大量依赖贝叶斯更新(如市场信号分析、黑天鹅事件预测)
    • 核心公式: P ( U ∣ D ) = P ( D ∣ U ) P ( U ) P ( D ) P(U|D) = \frac{P(D|U)P(U)}{P(D)} P(UD)=P(D)P(DU)P(U)
  2. 条件概率计算
    • 处理低频高影响事件(如0.1%概率的欺诈交易检测)
  3. 稀有事件建模
    • 不公平硬币对应金融中的异常值(如极端市场波动)
  4. 数值稳定性
    • 避免浮点数误差(金融系统要求精确计算)

📊 面试评估维度

考察维度 具体表现要求 本题对应点
建模抽象能力 将业务问题转化为概率模型 定义事件空间 U U U/ F F F/ D D D 并量化先验/似然
动态决策思维 根据新信息更新概率信念 从先验概率0.1%更新至后验50.6%
数值严谨性 处理小概率事件的精度控制 用分数而非浮点数避免计算误差
金融直觉 理解极端事件对系统的影响 识别"连续10次正面"在风控中的警报意义
解释沟通能力 清晰传递复杂数学结论 说明后验概率跃升的金融逻辑

🧩 典型回答框架

  1. 定义事件空间

    • U U U: 选到不公平硬币, F F F: 选到公平硬币
    • D D D: 观测数据(10次连续正面)
  2. 计算先验概率

    • P ( U ) = 1 1000 P(U) = \frac{1}{1000} P(U)=10001, P ( F ) = 999 1000 P(F) = \frac{999}{1000} P(F)=1000999
  3. 推导似然函数

    • P ( D ∥ U ) = 1 P(D\|U) = 1 P(DU)=1(不公平硬币必然输出正面)
    • P ( D ∥ F ) = ( 0.5 ) 10 = 1 1024 P(D\|F) = (0.5)^{10} = \frac{1}{1024} P(DF)=(0.5)10=10241
  4. 应用全概率公式

    • P ( D ) = P ( D ∥ U ) P ( U ) + P ( D ∥ F ) P ( F ) P(D) = P(D\|U)P(U) + P(D\|F)P(F) P(D)=P(DU)P(U)+P(DF)P(F)
  5. 贝叶斯逆推

    • P ( U ∥ D ) = P ( D ∥ U ) P ( U ) P ( D ) P(U\|D) = \frac{P(D\|U)P(U)}{P(D)} P(UD)=P(D)P(DU)P(U)
  6. 金融场景映射

    • 解释结果:“10次连续正面使异常事件概率从0.1%升至50.6%,类似高频交易中连续异常报价需触发风控”

💡 核心洞察

在量化金融中,此题暗含两大深层逻辑:

  1. 信号噪声比决策
    • 连续10次正面如同市场中的极端信号,候选人需判断这是"真实模式"(不公平硬币)还是"随机噪声"(公平硬币的小概率事件)
  2. 先验敏感性认知
    • 若不公平硬币占比从1/1000改为1/10,000,后验概率骤降至9.1%——凸显金融建模中先验设定的极端重要性
  3. 高频场景映射
    • 直接对应:算法交易中连续订单流异常检测、黑箱模型失效预警等核心场景

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。


网站公告

今日签到

点亮在社区的每一天
去签到