0%

2025-MCM-C赛后复盘

赛题:file-20250204120555442.png

选题心路历程

先简述一下我们队的情况。我们队都是没有经过正经训练,大家速成了几天就来打美赛的大二计科选手。所以其实我们拥有扎实的和ai交流的能力和不太死板的数学建模思想(即我们不会拘泥于常用常考的模型,而是想到什么用什么)。
我是论文手,DB是建模手,L是代码手。但是事实上分工并不是那么明确)
我们约定第一天7:00开始看题,到8:30的时候就已经定下来选c题了。有几个原因:
C题给了数据。
我们不太会找数据,也不敢冒险找一些不一定可以做出结果的数据。所以范围缩小到C和D。
C题有一个大致的思路,和我们搞计算机的小孩接触的东西也更加接近。
D题要用网络流,但是我们三个人都不会。F一开始也在考虑范畴之内,但是我们因为找数据能力和语文建模能力不一定行还是退缩了。

题目初步分析

其实读题是一件很重要的事情,但是感觉当时没有建立起这个共识。而且是第一次接触这种题目,有一些表述翻译为中文之后也不理解题目需要我们给一个什么样的答案。此外,也不知道这些题目全用“一个”模型来解决还是应该用多个模型拼凑。 这造成了我们检查论文的时候发现了特别多的漏洞),然后赶紧女娲补天。
大家初步讨论的结果是:
第一问奖牌榜预测是一个回归问题,可以考虑蒙特卡洛/随机森林等。
第二问伟大教练效应分析只有大致的思路,一开始也想用回归去做。
第三问就是通过前面两个模型得出一个结论分析一下。
接下来我先去谷歌学术找论文参考,他们先找找有没有合适的模型。

第一题

题目需求分析

数据处理

题目给的数据像是从奥运官网直接拿到的,内涵了很多历史变迁或者政治因素的痕迹,例如苏联解体,东西德合并,俄罗斯禁赛等。需要将对应的信息进行处理。
题目给了四个文件,但是我们如果要把数据扔进模型里面,应该只能放一个完整的文件进去。这一步需要将对应的信息进行整合。
还要对应不同的小题的个别需求做出回归预测之外需要的数据。

模型建立

第一问的核心是做一个奖牌预测模型,并进行正确率的衡量。下面有三个小问,在赛后看来
第一小问,2028奖牌榜预测和置信区间。这是需要我们给一个奖牌预测模型的结果。
第二小问,问我们有多少国家实现了零个奖牌的突破,应该是要我们的模型着重考虑这个数据特征(即国家-奖牌数据有很多的0),再对模型进行设计的优化。还需要对这个分类问题给出一个置信度。
第三小问,考虑项目对不同国家的重要性以及东道国选择的项目对他们奖牌国家的增益。这两个部分应该和预测模型的主体关系不大。我们计算出之后把这两个问题作为特征放进了预测模型的输入中。

论文参考

谷歌学术上做奖牌预测的文章还是比较多的,我们选了下面这一篇作为主要的参考。
Schlembach, C., Schmidt, S. L., Schreyer, D., & Wunderlich, L. (2022). Forecasting the Olympic medal distribution – A socioeconomic machine learning model. Technological Forecasting and Social Change, 175, 121314. https://doi.org/10.1016/j.techfore.2021.121314
这篇文章使用了两阶段随机森林。第一阶段先对国家进行分类,分为有潜力获奖和没有潜力获奖的;第二阶段再对有潜力获奖的国家进行奖牌数的预测。
先分类再预测和我们这个题目的需求也是比较吻合的。所以我们就参考了这个框架进行建模。

我们的工作

模型建立

image.png
这个模型的建立实际上并不是一蹴而就的。我们中间差点大吵一架)这里贴的图是当时梳理得到的思路图。
简单来说,我们还是选择两阶段的模式进行预测。分类阶段,改进tobit模型来做分类(涉及到一个threshold);预测阶段,还是用随机森林做预测。
还需要构建指标评价体系。这个里面的一些指标的设计也参考了上面提到的论文。
第三问的sports importance是用加权评分模型做的;东道主效应一开始找了一个论文上的公式进行参考,后来觉得不对,处理数据画了个热力图来说明,

实际操作

L的代码建模工作并不顺利。一开始,他先试图搞一个单层随机森林的预测模型。再我们讨论之后,需要增加tobit模型进行分类。当时很奇怪,python中现成的tobit库不能正常使用,只能靠他手搓一个。具体细节我也不是很了解)
DB主要进行数据处理和第三问的工作。主力工具是python和excel。(真是速成了一个excel大师
我的主力工具:cursor+latex+overleaf。我先写了假设和问题分析。然后开始根据使用的模型写模型原理的部分。模型原理参考o奖论文画了核心模型原理图。其他算法使用了伪代码的形式。

结果呈现

图片

  1. 核心模型流程图
  2. 决策树示意图
  3. 训练流程示意图
  4. events和medal走势的折线图
  5. sports importance 举了三个国家的例子,绘制南丁格尔玫瑰图
    1. image.png
  6. 选取一届奥运会 分析国家和events的热力图
    1. image.png
  7. 奖牌榜top17变化柱状图
    1. image.png

表格

奖牌榜
acc指标表格
奖牌榜预测结果的正确率(利用test数据给出)
零突破国家正确率——计算置信区间

第二题

由于第一题时间花费较多,我们第二题做的比较仓促。

需求分析

  1. 第一问,从数据中推测伟大教练效应。应该是从数据中找到一个突变的峰值,这个峰值和伟大教练任教的时间段是吻合的。
  2. 第二问,估计伟大教练效应对奖牌的贡献。肯定要进行量化。
  3. 第三问,推荐三个国家的项目来请教练。推荐的项目应该是有讲究的,国家任选。

模型建立

这一部分的模型没有找到很一致的参考文献,(感觉伟大教练效应是出题人编造的/:D)
我们大部分思路来源于网上的分析和deepseek
我们选择的例子是Béla Károlyi在罗马尼亚和美国的两段执教经历。

第一问

需要排除的影响因素:东道国效应(手动删除数据),政治因素影响(如苏联解体)
我们的理解是这里找到两段符合题给例子的数据序列即可。
使用的模型:滑动窗口+AD检验
AD检验需要计算一个统计量,然后我们设定的置信度为5%
代码运行结果如下:
image.png
其实影响最终呈现效果的是异常值的处理部分,但是和建模关系不大,在此不赘述

第二问

我们需要量化伟大教练效应的影响。换句话说,就是我们要估计相比没有请教练的时候,请教练带来了多少增益。
基于这个朴素的想法,我们就要思考怎么获得没有请教练的情况下的预估奖牌数。
因而,我们选择了合成控制法(SCM)来操作。通过综合中国、日本、罗马尼亚的数据来模拟美国体操没有请教练时的数据。这样就可以得到提升的奖牌数。
结果呈现:
image.png

第三问

如何从我们选定的国家中选择合适的项目应该是这个问题中最主要的一环。
基于此,我们认为这是一个评价模型。所以选择了TOPSIS+熵权法。
这个方法会给每个项目计算一个得分,得分越高,越适合请教练。
我们选择的三个国家为:RSA,COL,IND
结果呈现:
一张柱状图展示得分:image.png
还有一段文字的分析阐述
奖牌数的提升没有仔细做,参考第二问给出的。

第三题

当时备选的结论有:东道主长尾效应,俱乐部效应/马太效应
但是时间有限,只写了马太效应。
给奥委会的建议还是后来补的)

灵敏度分析

我们一开始忘记了这个部分)或者说有意识忽略..
后来在我们的预测模型上做了两个特征的变化来看模型灵敏度…
按照我的理解,应该还可以放一个类似ablation的那种图
例如:(这是随机森林模型的一个评价体系)
image.png
但是因为我们实际使用的feature很简单,但是效果很好) 最终没有放这个图(会显得我们的模型很简陋:D)

论文写作与检查

总结几点经验:

  1. 算法部分多用伪代码或者流程图,清晰且比较节约空间
  2. 论文手要把每一问最终需要什么可视化的产出整理清楚告诉队友)一个类似于产品经理的活
  3. 写摘要的时间还需要多留一些,这次感觉时间比较紧(也确实没有什么经验
  4. 目录可以通过一些技巧缩到一页,空出空间给后面的论文
  5. 读题 的时候搞清楚题目的需求,确定结果呈现的形式再去找模型
    1. 我们在最后检查的时候发现,第三问给奥委会的建议没写…第二遍检查发现,2028奖牌榜上没放置信区间..还好这个数值已经算出来了…

碎碎念

总之就挺手忙脚乱的
但是第一次零经验参赛顺利完赛了!我自己可以给我们的结果打80分!
这种很纯粹的把时间投入在这一件事情上面,和队友一起战斗的感觉,特别好
很感谢我的队友们。虽然L有的时候没有理解我和DB的讲的模型,虽然我总是临时提出一些可视化的需求要DB重新做数据,大家都没有说什么(都在默默配合/默默崩溃:D 最好的是我们没有严格的职业划分,我也可以帮着改代码,他们最后也会帮我一起赶论文,真的特别好