MCM520 ← 资料站首页 预测 Wordle 结果(MCM 2023 C)范文三:参与度预测、推荐系统与模型稳健性 打开交互阅读器 →

预测 Wordle 结果(MCM 2023 C)范文三:参与度预测、推荐系统与模型稳健性

摘要

前两篇论文分别建立了难度底座与属性→分布的回归预测。本文完成赛题剩余的两条主线并给出稳健性结论。第一条主线是参与度的时间序列预测:赛题要求解释"报告结果数逐日变化"并为 2023-03-01 给出预测区间。我们基于 2022 全年 360 天的每日报告数,拟合对数线性衰减模型(含周末效应),在 R2=0.9927R^2=0.9927 的拟合优度下,预测 2023-03-01 的报告数为 48745,95% 预测区间 [45448, 52280]。第二条主线是未来单词推荐:我们定义"好 Wordle"为难度适中(潜在难度接近 0.5)的单词,据此从 360 词中推荐出 abuse、burst、crime、court、great、charm、march、doubt、eaten、blast 等十个候选。在稳健性方面,五折交叉验证 MAE 稳定于 0.0068,逐一剔除特征后失败率回归 R2R^2 最低仍达 0.6595,系数 ±10% 扰动下推荐重叠率为 1.000,表明结论对建模选择不敏感。最后,我们以一封致《纽约时报》谜题编辑的信,把全部发现凝练为可操作的选词与经营建议。

1 问题重述

赛题的主线任务可归为三块:其一,刻画每日报告结果数的变化并预测 2023-03-01(给出预测区间而非单点);其二,对未来单词预测其得分分布并评估不确定性(已在范文二完成);其三,按难度分类并识别有趣的数据特征,最终以一封一两页的信向《纽约时报》谜题编辑总结结果。本文聚焦第一块(参与度)与第三块中的推荐、稳健性、有趣特征与信件。

2 子模型 A:每日报告数的时间序列预测

Wordle 热度在 2022 年呈明显"先高后稳"的衰减形态:年初爆红时每日报告数可达数十万,随新鲜感消退逐步回落。我们以"距 2022-01-07 的天数" tt 为自变量,对每日报告数 N(t)N(t) 取对数后拟合:

ln⁡N(t)=β0+β1t+β2⋅Iweekend(t)+ε\ln N(t) = \beta_0 + \beta_1 t + \beta_2\cdot\mathbb{I}_{\text{weekend}}(t) + \varepsilon

该对数线性形式同时刻画了长期指数衰减与周末参与的小幅抬升。用 2022 全年 360 天数据拟合,得 R2=0.9927R^2=0.9927,残差近似同方差,说明模型抓住了参与度的主导规律。

预测区间的构造基于回归残差:对 2022 全年拟合后,残差标准差 σ^ε\hat\sigma_\varepsilon 由 ∑εi2/n\sqrt{\sum\varepsilon_i^2/n} 估计;对未来的第 419 天,点预测的对数报告数为 ln⁡N^\ln\hat N,其 95% 区间取 ln⁡N^±1.96σ^ε\ln\hat N\pm1.96\hat\sigma_\varepsilon,再指数还原为报告数区间 [45448, 52280]。这种基于残差的分布区间与单纯的"置信区间"不同:它刻画的是"单个未来观测可能落在哪里",而非"均值落在哪里",因此对赛题要求的"预测区间(prediction interval)"更为贴切。区间宽度约 ±3400,相对点预测 48745 的 ±7%,与参与度模型极高的拟合优度(R2=0.9927R^2=0.9927)相符——模型已解释绝大部分系统性变化,剩余不确定性主要源于周末效应以外的随机扰动。

展示 2022 年每日报告数的衰减轨迹(蓝线)与对 2023-03-01(距基准第 419 天)的外推点(红点)。代入 <span class=t=419t=419 得点预测 N^=48745\hat N=48745,并依据残差标准差给出 95% 预测区间 [45448, 52280]。需要说明:预测区间反映的是"在既定衰减趋势延续"假设下的不确定性;若届时出现病毒式传播或版本改动等外生冲击,实际值可能偏离该区间——这正是赛题所要求的"相关不确定性"之一。">

图1 展示 2022 年每日报告数的衰减轨迹(蓝线)与对 2023-03-01(距基准第 419 天)的外推点(红点)。代入 t=419t=419 得点预测 N^=48745\hat N=48745,并依据残差标准差给出 95% 预测区间 [45448, 52280]。需要说明:预测区间反映的是"在既定衰减趋势延续"假设下的不确定性;若届时出现病毒式传播或版本改动等外生冲击,实际值可能偏离该区间——这正是赛题所要求的"相关不确定性"之一。

3 未来单词推荐系统

赛题希望识别"哪些词适合作为未来 Wordle"。我们定义"好 Wordle"的选词准则为难度适中:过易(难度<0.4)缺乏挑战、玩家易生厌倦;过难(难度>0.65)挫败感强、失败率飙升。因此以推荐得分 Srec=−((d−0.5)2)+0.1(1−frare)S_{\text{rec}} = -((d-0.5)^2) + 0.1(1-f_{\text{rare}}) 衡量,越高越理想,即偏好潜在难度贴近 0.5 且不含过多罕见字母的词。

列出推荐得分最高的十个单词及其难度:abuse(0.495)、burst(0.507)、crime(0.507)、court(0.492)、great(0.508)、charm(0.508)、march(0.508)、doubt(0.509)、eaten(0.511)、blast(0.488)。它们的难度全部集中在 0.49–0.511 的极窄区间,恰好印证"难度居中"的推荐逻辑。

图2 列出推荐得分最高的十个单词及其难度:abuse(0.495)、burst(0.507)、crime(0.507)、court(0.492)、great(0.508)、charm(0.508)、march(0.508)、doubt(0.509)、eaten(0.511)、blast(0.488)。它们的难度全部集中在 0.49–0.511 的极窄区间,恰好印证"难度居中"的推荐逻辑。

列出推荐得分最高的十个单词及其难度:abuse(0.495)、burst(0.507)、crime(0.507)、court(0.492)、great(0.508)、charm(0.508)、march(0.508)、doubt(0.509)、eaten(0.511)、blast(0.488)。它们的难度全部集中在 0.49–0.511 的极窄区间,恰好印证"难度居中"的推荐逻辑。

图3 以散点展示全部 360 词的"难度—推荐得分"关系(灰点),绿色高亮十个推荐词:它们稳定落在难度 0.5 附近的推荐得分峰值带,说明推荐结果并非个别异常,而是源于清晰的难度—得分结构。

4 模型稳健性:交叉验证与敏感度

一个可在生产环境使用的模型必须经得起稳健性检验。我们从三个角度验证:

  • 交叉验证:五折交叉验证的 MAE 在 0.005–0.008 间小幅波动,均值 0.0068,与留出测试 MAE(0.0052)一致,证明泛化能力稳定(图4)。
  • 特征剔除敏感度:逐一剔除六项特征中的任一项后重拟合,失败率回归 R2R^2 由 0.9516 降至 0.66–0.95 区间;其中剔除最重要特征(常见词形 fbigramf_{\text{bigram}})时降幅最大,R2R^2 跌至 0.6595(图5)。这既说明模型对单一特征不过度依赖,也揭示了常见词形确为最强信号。
  • 系数扰动:将平均字母频率系数分别扰动 ±10% 后重新排序推荐词,top10 集合与原始完全一致(重叠率 1.000,图6),说明推荐结论对系数微小变动不敏感、足够稳健。

)。

图4 给出五折交叉验证的 MAE,各折表现接近,无某一折异常恶化。

给出五折交叉验证的 MAE,各折表现接近,无某一折异常恶化。

图5 显示逐一剔除特征后的 R2R^2:即便去掉最强特征,模型仍保留约 0.66 的解释力,整体对特征选择具有鲁棒性。

显示逐一剔除特征后的 <span class=R2R^2:即便去掉最强特征,模型仍保留约 0.66 的解释力,整体对特征选择具有鲁棒性。">

图6 显示系数 ±10% 扰动下推荐重叠率均为 1.000,推荐结论高度稳定。

综合三项稳健性证据,我们可以给出模型的"适用边界":它在"属性—难度—分布"这一核心链条上高度可靠,可用于日常选词辅助与参与度趋势外推;但它本质上是描述性的线性近似,不捕捉玩家学习效应(同一批玩家随时间变强)与版本改动等结构性断点。因此在真实经营中,应以本模型输出为基线、结合编辑领域知识做最终裁决,而非全自动决策。这一"模型辅助而非替代人工"的定位,正是数学建模在产业场景中应有的谦逊姿态。

5 数据其他有趣特征

除主线结论外,数据集还呈现出若干值得记录的特征:

  1. 难度两极共性鲜明:最难词(jazzy、known、pygmy、klutz)几乎都含重复辅音或罕见字母;最易词(earth、death、heart)则多含 th/ea/ar 等高频双字母,难度画像高度可解释。
  2. 重复字母的强效应:含重复字母词平均难度 0.665,比无重复字母词(0.522)高出 0.14,是单因素中区分度最高的结构信号之一。
  3. 元音并非主因:元音占比与难度的相关系数仅 −0.22,且回归中边际系数接近零,打破了"元音多就简单"的朴素直觉——真正重要的是词形是否符合英语拼写习惯。
  4. 参与度衰减但趋稳:每日报告数虽从年初峰值大幅回落,但模型显示衰减速率放缓、趋于平稳底,预示 Wordle 已固化为稳定的日常习惯型产品而非短暂热潮。
  5. 难度与参与弱耦合:单词自身难度与当日报告数几乎不相关——玩家参与由外部热度而非当日单词难易决定,这提示选词可在不影响参与的前提下自由调节难度,为编辑提供了"难度调控不影响流量"的操作空间。

以流程图概括从原始数据到难度建模、分布预测、分类推荐的整体链路,呼应三篇论文的方法论闭环。

图7 以流程图概括从原始数据到难度建模、分布预测、分类推荐的整体链路,呼应三篇论文的方法论闭环。

6 给《纽约时报》谜题编辑的信

尊敬的谜题编辑:

感谢贵报提供 Wordle 的公开对局数据,使我们得以用数学模型刻画这款产品的玩家行为。现将核心发现总结如下,供选词与经营参考。

第一,关于参与度。基于 2022 全年数据,每日报告数呈指数衰减并趋于平稳,我们预测 2023 年 3 月 1 日的报告数约为 48700(95% 区间 45400–52300)。建议持续监测是否出现偏离该趋势的外生冲击(如重大改版)。

第二,关于选词难度。我们将 360 个单词按潜在难度分为 Easy(43)、Moderate(236)、Hard(81)三档,分类准确率超过 0.92。最佳玩家体验来自 Moderate 档——既保留挑战又避免挫败。我们推荐 abuse、burst、crime、court、great、charm、march、doubt、eaten、blast 等十个难度居中(潜在难度约 0.5)的单词作为未来题目的优选;它们预计失败率约 18%、平均 3.9 次猜中,体验均衡。

第三,关于具体示例。以 EERIE 为例,模型预测其潜在难度 0.575(中等),失败率约 18.3%,得分分布以 4 次猜中为主峰(40.6%)。该预测建立在属性→难度的强关联之上,外样本误差小于 1 个百分点,置信度较高。

第四,关于不确定性。模型对特征选择与系数扰动均表现稳健;主要不确定来自外生事件对参与度的冲击,以及线性假设对极少数极端词的近似误差。我们建议将本模型作为选词辅助工具,结合编辑判断使用。

顺颂编安。

以看板表汇总全部关键结论:样本量 360、平均失败率 0.1766、双回归 <span class=R2R^2 优于 0.95、难度三分类 43/236/81、最难 jazzy、最易 earth、EERIE 中等难度、2023-03-01 预测 48745(区间 45448–52280)。">

图8 以看板表汇总全部关键结论:样本量 360、平均失败率 0.1766、双回归 R2R^2 优于 0.95、难度三分类 43/236/81、最难 jazzy、最易 earth、EERIE 中等难度、2023-03-01 预测 48745(区间 45448–52280)。

7 小结

本文完成了 MCM 2023 C 的参与度预测与推荐主线:对数线性衰减模型以 R2=0.9927R^2=0.9927 预测 2023-03-01 报告数 48745(区间 45448–52280);难度居中推荐得到十个优选词;稳健性分析(交叉验证、特征剔除、系数扰动)表明结论可靠;并以致《纽约时报》编辑的信凝练全部建议。三篇论文从数据底座、预测验证到推荐与稳健性,构成对本题的完整、可复现解答,全部数字均来自 tools/gen_mcm2023c.py(SEED=2024)。

参考文献

[1] COMAP. 2023 MCM Problem C: Predicting Wordle Results.
[2] Box G E P, Jenkins G M, Reinsel G C. Time Series Analysis: Forecasting and Control. Wiley, 2015.
[3] 本书站真题库配套:tools/gen_mcm2023c.py(确定性真源)与 data/mcm2023c.csv。

附录:核心 Python 实现

下列代码需位于 tools/ 目录运行,调用真源独立复现本文全部权威数字(SEED=2024,确定性)。

import gen_mcm2023c as G
D = G.gen_mcm2023c()
k = D["key"]
print("2023-03-01 预测报告数 = %.0f  区间 [%.0f, %.0f]" % (
    k["pred_2023_03_01"], k["pi_lo"], k["pi_hi"]))
print("参与度模型 R2 = %.4f" % k["part_r2"])
print("推荐 top10 =", k["rec_top"])
print("敏感度:剔除单特征最低 R2 = %.4f" % k["sens_drop_min_r2"])
print("系数扰动推荐重叠 = %.4f" % k["pert_overlap_lo"])