MCM520 ← 资料站首页 Models for Olympic Medal Tables(优秀范文二:贝叶斯层级模型 + 后验预测 + 多口径决策) 打开交互阅读器 →

Models for Olympic Medal Tables(优秀范文二:贝叶斯层级模型 + 后验预测 + 多口径决策)

2025 美赛 MCM C 题 · 优秀范文二。视角:范文一用 OLS 给了点估计和重抽样区间,本篇把不确定性放进模型本身——在 2424 国 ×8\times 8 届的同一合成面板上建立贝叶斯层级模型(国别随机效应 + 共轭 Gibbs 抽样,纯标准库实现),让参数不确定性、国别异质性与观测噪声各就各位;用后验预测直接模拟出一届完整的未来奥运会(奖牌 + 金银铜拆分 + 三张榜单),把「哪种奖牌榜更公平」从哲学讨论变成可计算的决策问题:每国每口径的前 kk 名概率、期望名次与口径翻转风险一目了然。正文 / 配图 / 附录 / 真源四路数字一致(固定种子 seed=20250316,链 B 保留 1000 个后验抽样)。

摘要

本文在同一合成面板上回答三个递进的问题:参数有多不确定?预测有多不准?以及——排名口径的选择到底值多少个名次?层级模型 log⁡(Mt+1+1)=x′β+bi+ε\log(M_{t+1}+1)=x'\beta+b_i+\varepsilon(bi∼N(0,τ2)b_i\sim N(0,\tau^2) 为国别随机效应)经 6000 步共轭 Gibbs 抽样(烧入 2000、稀疏化后保留 1000 个样本)给出后验:残差 σ=0.0212\sigma=0.0212、国别异质性 τ=0.0065\tau=0.0065——数据明确说国别异质性很弱,部分合并因此把不合并基准的截距离散度压缩 29.9%(两法相关 r=0.996r=0.996,图 2)。系数层面给出第一张体检报告:四个系数的 OLS 点估计全部落入贝叶斯 90% 可信区间(4/4),后验均值与 OLS 最大偏差仅 0.01——弱先验下两派在点估计上和解,随机效应只从惯性项分走约 0.01 的归因。样本外检验(训练剔除 2016→2024 对)显示层级模型的点精度与 OLS 相当(MAE 4.21 枚 vs 4.04 枚,贵 4%),换来的是内生的预测区间:24 国 90% 区间覆盖 23 国,目标国 C08 点预测 67.4、实际 68、区间 [51.9,87.0][51.9,87.0] 宽 35.1 枚稳稳覆盖——不需要 Bootstrap 技巧,区间是模型的天然产物。决策层是本篇独有贡献:每个后验抽样模拟一届 2028 年奥运会并在同一抽样下排出三张榜单,结果显示 C04 以期望 99.9 枚卫冕、C11(92.3 枚)凭更高经济增速反超 C23(80.5 枚);C08 进前五概率 39.4%;而「银铜厚度型」的 C06(末届金 5 银 9 铜 12)在金牌榜进前十概率高达 83.3%、加权榜只有 33.4%——金牌榜因银牌并列规则高估它 50 个百分点。全表 24 国中有 18 国的最优口径是金牌优先(其前十门槛更低)、三口径下前三名集合完全一致的概率仅 5.6%(金vs总)到 57.6%(总vs加权)——口径选择不是呈现细节,而是结论的一部分。

一、问题重述

题目要求四件事:①构建各国奖牌数的预测模型;②刻画历史趋势与主办国效应;③比较不同奖牌榜排名口径并讨论公平性;④量化预测的不确定性(区间与爆冷概率)。范文一已用对数线性 OLS 处理①并以 Kendall τ 触碰③;本篇聚焦④的贝叶斯解法与③的决策化——把「公平」翻译成「你在哪张榜上以多大概率排到哪个位置」,并把②的主办红利作为系数之一纳入层级框架(下一届主办未知时取 0)。

二、模型假设

  1. 奖牌产出沿用三层生成结构:竞技惯性(自回归)、经济人口基本盘、主办红利;各层在对数空间线性可加。
  2. 存在不可观测的国别基底差异 bib_i,服从零均值正态——代表体育传统、体制投入等面板特征未捕捉的持久因素。
  3. 观测噪声 ε\varepsilon 服从对数空间正态,涵盖临场发挥、禁赛与项目设置的随机性。
  4. 先验弱信息化:β∼N(0,100I)\beta\sim N(0,100I),σ2∼IG(2,0.5)\sigma^2\sim IG(2,0.5),τ2∼IG(2,0.05)\tau^2\sim IG(2,0.05)——量级由数据主导。
  5. 预测 2028 时主办国未知取 host=0,GDP 按各国历史增速外推一步。

三、符号说明

符号 含义
bib_i 国家 ii 的随机效应(国别基底)
τ2,σ2\tau^2,\sigma^2 国别异质性方差、观测噪声方差
β^jB,CI90\hat\beta_{j}^{B}, \mathrm{CI}_{90} 贝叶斯后验均值与 90% 可信区间
λ\lambda 截距离散度的收缩率
P(≤k)P(\le k) 后验预测下进入前 kk 名的概率
Δrw−g\Delta r_{w-g} 同一抽样下加权榜与金牌榜的名次差

四、建模过程

技术路线见图 1:层级设定 → 共轭 Gibbs → 后验检验 → 整届比赛模拟 → 三口径决策矩阵,每一格的数字都能被附录代码原样复现。

图1

4.1 为什么必须"层级":一个可识别性的教训

最自然的对照方案是给每国单独拟合一条回归。但这在本面板上数学上不可行:一国之内人口恒定、GDP 只以年增速缓慢漂移(7 届累计不过零点几个对数单位),设计矩阵近似奇异——逐国截距的估计方差爆炸。这个失败本身就是层级模型的动机:当组内信息不足以识别组参数时,必须向总体借信息。故不合并基准取「合并斜率下的国别偏残差均值」,部分合并即后验均值 E[β0+bi]\mathbb{E}[\beta_0+b_i]。

4.2 共轭 Gibbs:纯标准库的完整贝叶斯

四个条件分布全部共轭:β\beta 多元正态(高斯消元求逆 + Cholesky 分解抽样)、bib_i 一元正态、σ2,τ2\sigma^2,\tau^2 逆伽马。6000 步迭代、烧入 2000、每 4 步留 1,得 1000 个联合后验样本(图 3 的 β1\beta_1 轨迹平稳无漂移)。全程只用 random 与手写的 5×55\times5 线性代数——贝叶斯计算不需要重型依赖,需要的是正确的条件分布。

4.3 收缩:部分合并看见了什么

图 2 把 24 国的不合并截距与部分合并后验画成散点:两者高度一致(r=0.996r=0.996),但部分合并系统性向全局均值收缩——离散度从 0.020 压到 0.014,收缩率 29.9%。后验 τ=0.0065\tau=0.0065 说明这批国家的真实异质性本来就不大:大部分"国别特色"已被 GDP、人口与惯性解释,剩下的持久成分有限——收缩不是损失信息,而是拒绝把噪声当成特色。

图2

4.4 系数对照:点估计的和解

图 4 并列展示 OLS 点估计与贝叶斯后验均值:自回归 0.3407 vs 0.3308、经济 0.2698 vs 0.2735、人口 0.1363 vs 0.1373、主办 0.2926 vs 0.2883——四对数字几乎重合,OLS 估计全部落入对应的 90% 可信区间(4/4)。这个"没有新闻"的结果其实是层级模型的第一张体检报告:在点估计层面,弱先验下的贝叶斯与频率派殊途同归;随机效应只从自回归项里分走了约 0.01 的归因(各国对全球规律的持久偏离被 bib_i 承接,惯性系数轻微下移),量级远小于抽样噪声。真正的增量不在点的位置,而在点周围的云——下一节检验那朵云是否诚实。

图3

图4

4.5 样本外体检:点精度持平,区间内生

严格剔除 2016→2024 训练对后(链 A),层级模型 24 国平均 MAE 4.21 枚,与范文一 OLS 的 4.04 枚相当(贵 4%)——点预测没有免费午餐。差别在区间:图 5 的后验预测均值紧贴完美线,24 个 90% 区间盖住 23 国实际值;C08 点预测 67.4、实际 68、区间宽 35.1 枚,与范文一混合 Bootstrap 的 37.0 枚惊人接近——两条完全不同的路(重抽样 vs 后验预测)收敛到同一个诚实宽度,这是对"±27% 才是真话"的交叉验证。

图5

五、多口径决策:把"公平"变成概率表

5.1 一千次 2028:整届比赛的后验模拟

每个保留抽样都生成一届完整的 2028 年奥运会:24 国奖牌总数(含观测噪声)、按各国成色拆金银铜、再排三张榜——三张榜来自同一次模拟,国别冲击完全联动(公共随机数思想),口径间的差异因此纯粹反映口径本身。期望榜单:C04 以 99.9 枚卫冕,C11(92.3)凭更高的经济增速反超 C23(80.5),C10、C24 分列四五。C08 的登台路线见图 6:进前三仅 11.8%、前五 39.4%、前十已是 100%——它的现实目标是保五争三,而非奢望奖牌榜首。

图6

5.2 C06 案例:一张成绩单的三种命运

事实锚点:C06 末届金 5 银 9 铜 12 共 26 枚,金牌榜第 10、总数榜第 13、加权榜第 13——典型的「银铜厚度型」。2028 后验预测把它讲得更透(图 7):金牌榜进前十概率 83.3%、加权榜只有 33.4%,期望名次分别是 9.0 与 11.0;同一批模拟里加权名次比金牌名次更差的概率 92.2%、"更好"的概率为 0%。机理有二:其一,金牌榜并列时按银牌破平局,C06 的 9 枚银子常把它的 5 枚金抬上位次;其二,加权制 4:2:1 给成色定价,铜牌在这里近乎免费。决策含义:这类代表团若以金牌榜做内部 KPI 会系统性自我高估约 50 个百分点——合理的做法是内部按加权口径管理预期,对外才用金牌口径叙事。

图7

5.3 门槛效应:为什么 18 国的"最优口径"都是金牌优先

全表统计(图 8 热力图)显示:按进前十概率最大者选边,24 国中 18 国的最优口径是金牌优先、6 国是总数优先、加权优先为零。这不是说金牌榜"更容易",而是它的通货不同:第 10 名的金牌数往往只是个位数,门槛远低于总数榜的第 10 名(30 枚上下),于是中游集团在金牌榜普遍显得更能达标。读懂这一点就不会被"某国金牌榜跻身前十"的宣传带偏——先问门槛,再看概率。

5.4 口径分歧有多大:领奖台都可能换人

同一份后验下,三口径的前三名集合完全一致的概率:金vs总仅 5.6%、金vs加权 15.8%、总vs加权 57.6%;Top12 候选国的加权-金牌期望名次差平均 1.38 位。换句话说,超过九成的可能世界里,金牌前三与总数前三不是同一批国家。"哪种奖牌榜更公平"因此没有客观答案,但有客观后果——发布榜单而不声明口径,等于隐藏了结论的一半。

图8

六、灵敏度分析

  • τ2\tau^2 先验 IG(2,0.05)→IG(2,0.5):后验 τ\tau 从 0.0065 升至约 0.011,收缩率降至约 15%——异质性信念越强收缩越少,但系数与决策结论排序不变。
  • 剔除随机效应(退化为范文一 OLS):样本外 MAE 4.04、但区间需靠 Bootstrap 外挂;层级框架的价值不在点精度而在不确定性的内生一致性。
  • 模拟次数 1000→400:P(前10) 的蒙特卡洛标准误约 ±1.5 个百分点,C06 的 83.3%/33.4% 差距稳健。
  • 加权方案 4:2:1→3:2:1:C06 加权榜进前十概率升至约 41%,方向不变——结论对权重微调不敏感,对"是否给成色定价"敏感。

七、模型评价与改进

优点:①不确定性三层分账(参数、国别、观测),区间内生且覆盖率经样本外检验(23/24);②后验预测直接输出整届比赛,多口径决策有了统一的概率语言;③全共轭 Gibbs 纯标准库实现,教学透明可复现。局限:①线性弹性与对数正态噪声仍是简化,未建项目层面的夺牌结构;②2028 主办未知取 0,若东道主确定应叠加 β4≈0.29\beta_4\approx0.29 的红利项;③国别随机效应为 exchangeable 设定,未利用地理与文化相关性。改进:泊松/负二项似然处理小计数国、空间层级引入邻国相关、以及把「爆冷概率」定义为 P(实际名次优于期望名次 ≥k\ge k)——这正是范文三的主题。

八、结论

贝叶斯层级模型在这道题上交出三句话:第一,数据比我们先知道答案——τ=0.0065\tau=0.0065 表明国别异质性微弱,29.9% 的收缩自动拒绝了过拟合;第二,点精度不免费、区间才值钱——MAE 4.21 对 4.04 打平,但 23/24 的内生覆盖率让"±35 枚"成为模型的输出而非事后的补丁;第三,口径即立场,立场可计算——C06 的 83.3% 对 33.4%、18 国的门槛效应、5.6% 的领奖台一致率,把"公平"从价值争论变成一张可以打印的概率表。一句话:与其争论哪张榜公平,不如同时报出三张榜及其分歧概率——诚实的模型自己会说话。

参考文献

  1. COMAP. MCM Problem C: Models for Olympic Medal Tables. 2025.
  2. Gelman A., Hill J. Data Analysis Using Regression and Multilevel/Hierarchical Models. Cambridge University Press, 2007.
  3. Bernard A. B., Busse M. R. Who Wins the Olympic Games: Economic Resources and Medal Totals. Rev. Econ. Stat., 2004.
  4. Casella G., George E. I. Explaining the Gibbs Sampler. The American Statistician, 1992.
  5. Kendall M. G. Rank Correlation Methods. Griffin, 1970.

附录:核心 Python 实现

import sys, os
_HERE = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(_HERE, "..", "..", "..", "tools")))
import gen_mcm2025c as B      # 范文一真源:共用合成面板与基础函数
import gen_mcm2025c_2 as H    # 本篇真源:层级贝叶斯 + 多口径决策

# 1) 同一面板 + 全样本链 B
ctys, panel = B.gen_panel()
rows_all, idx = H.build_rows(panel)
draws_b = H.gibbs(rows_all, seed=H.SEED)
nb = len(draws_b)
sig = sum(d[2] for d in draws_b) / nb
tau = sum(d[3] for d in draws_b) / nb
print("链B保留=%d  σ=%.4f  τ=%.4f" % (nb, sig, tau))

# 2) 系数对照与可信区间
beta_full, _r2 = B.fit_full(panel)
for j in range(1, 5):
    col = sorted(d[0][j] for d in draws_b)
    pm = sum(col) / len(col)
    lo, hi = H.quantile(col, 0.05), H.quantile(col, 0.95)
    print("β%d: OLS=%.4f 后验=%.4f 90%%CI=[%.4f,%.4f] 落入=%s"
          % (j, beta_full[j], pm, lo, hi, lo <= beta_full[j] <= hi))

# 3) 收缩与样本外检验
np_est = H.nopool_intercepts(rows_all, idx)
pp_est = {c: sum(d[0][0] + d[1][idx[c]] for d in draws_b) / nb for c in np_est}
bar_np = sum(np_est.values()) / len(np_est)
bar_pp = sum(pp_est.values()) / len(pp_est)
d_np = sum(abs(v - bar_np) for v in np_est.values()) / len(np_est)
d_pp = sum(abs(v - bar_pp) for v in pp_est.values()) / len(pp_est)
print("收缩率=%.1f%%  相关r=%.3f"
      % (100 * (1 - d_pp / d_np), B.pearson([np_est[c] for c in sorted(np_est)],
                                            [pp_est[c] for c in sorted(np_est)])))
chk = H.predict_2024_chain(panel)
print("2024样本外: MAE=%.2f  覆盖=%d/24  %s点%.1f实际%d区间[%.1f,%.1f]"
      % (chk["mae"], chk["n_covered"], chk["tgt"], chk["point"],
         chk["actual"], chk["lo"], chk["hi"]))

# 4) 2028 后验预测与三口径决策
sims = H.simulate_future(panel, draws_b, ctys)
ranks = H.rank_tables(sims)

def ptop(cal, cid, k):
    return 100.0 * sum(rt[cal][cid] <= k for rt in ranks) / len(ranks)

print("C08总数口径: P(前3)=%.1f%% P(前5)=%.1f%%" % (ptop(1, "C08", 3), ptop(1, "C08", 5)))
print("C06 P(前10): 金%.1f%% 总%.1f%% 加权%.1f%%"
      % (ptop(0, "C06", 10), ptop(1, "C06", 10), ptop(2, "C06", 10)))
agree = sum(set(c for c in rt[0] if rt[0][c] <= 3) ==
            set(c for c in rt[1] if rt[1][c] <= 3) for rt in ranks)
print("前三集合一致率 金vs总=%.1f%%" % (100.0 * agree / len(ranks)))