2026 MCM/ICM Problem C | Finalist (F) Award | Team 2627351 | Hunan University
- Abstract
- Overall Workflow
- Core Models
- Task Dependencies
- Reproduction
- Repository Structure
- Paper-to-Code Mapping
- Reproducibility Notes
- 后日谈
- License
In the digital entertainment era, televised dance competitions blend professional judging with audience participation, yet the audience vote totals are usually hidden from viewers and contestants. This lack of transparency makes it difficult to understand whether weekly eliminations reflect dance quality, popularity, or both. To address this issue, we analyzed season-level and week-level competition data and built a modeling framework that infers unseen fan support and evaluates how different voting rules shape outcomes.
-
Task 1: We infer hidden fan support using a two-part strategy. The Feasible-Set Model quantifies uncertainty via elimination constraints, and the Likelihood Model yields stable point reconstructions. Model A is feasible in 96.6% of weeks and its representative point matches the observed elimination in 98.8% of feasible weeks, while Model B matches observed eliminations in 97.7% of weeks. A one-week-ahead sanity check over 213 eligible single-elimination weeks yields hit rates of 98.59% for Percentage and 78.87% for Rank. Uncertainty is quantified and remains nontrivial, with average interval width 0.1267 and normalized entropy mean 0.9344.
-
Task 2: We conduct weekly counterfactual simulations to compare two common aggregation rules, Rank and Percentage. Percentage shows stronger fan alignment, with mean
$\rho_{\text{fan}}$ near 0.78 versus about 0.70 under Rank. The rules disagree in 18.94% of analysis weeks, and in those conflicts Percentage empirically retains the higher-fan-share contestant. We refer to this mechanism as variance engulfing. -
Task 3: We fit a mixed-effects model to separate stable pro and contestant differences from week-to-week noise. In-sample fit reaches RMSE 0.6075 for judges and 0.5740 for fans. Conditional
$R^2$ remains substantially larger than marginal$R^2$ for both outcomes, showing that persistent random effects explain meaningful variance beyond observed covariates. -
Task 4: We introduce MARS-Soft+Disagreement, a revised weekly elimination mechanism that adds limited protection when strong judging support conflicts with unusually low inferred fan support. Tuning on early seasons selects
$\alpha=0.20$ ,$\beta=0.20$ ,$p=2$ . On held-out seasons, the rule achieves RescueRate 0.789 while keeping disruption moderate with ChangeRate 0.385 and maintaining a small balance gap with$\Delta\rho=0.210$ . With a nontrivial FII 0.161, the results suggest improved fairness and transparency without removing the meaningful role of audience participation.
Keywords: Fan vote inference, Elimination simulation, Voting rule comparison, Hierarchical effects, Fairness-oriented design
Data Cleaning → Model I (Fan Vote Inference) → Model II (Counterfactual Rule Comparison) + Model III (Mixed-Effects Analysis) → Model IV (New Rule Design)
Goal: Infer each contestant's weekly fan-vote share from the available weekly judges' scores and elimination outcomes.
Two-Model Framework:
- Model A (Feasible-Set): A constraint-based interval model that defines a feasible set of fan-share vectors and produces interval estimates using linear constraints.
- Model B (Likelihood): A likelihood-based point-estimation model that applies a Plackett–Luce likelihood to obtain fan-share point estimates.
Core Equation:
where
| Metric | Value |
|---|---|
| Model A Feasibility Rate ( |
96.6% (255 / 264 weeks) |
| Model A Representative-Point Validity ( |
98.8% (252 / 255 weeks) |
| Model B Elimination Consistency ( |
97.7% (258 / 264 weeks) |
| Mean Interval Width ( |
0.1267 |
| Mean Normalized Entropy ( |
0.9344 |
One-Week-Ahead Predictive Check (213 eligible single-elimination weeks):
| Rule | Hit Rate | Avg. Eliminated Predicted Rank |
|---|---|---|
| Percentage | 98.59% | 1.0141 |
| Rank | 78.87% | 1.1737 |
Code: src/model_task1.py | Results: results/task1/ | Figures: figures/task1/
Goal: Compare three elimination rules under the same information set and quantify systematic differences and fan amplification.
Three Rules:
| Rule | Combined Score | Elimination Decision |
|---|---|---|
| Rank | Minimum |
|
| Percentage (50-50) | Minimum |
|
| Judges' Save (Bottom2) | First identify bottom two under |
Judges choose who stays |
Key Findings:
- Percentage mean fan-bias coefficient
$\rho_{\text{fan}} = 0.7770$ ($F^P$ input) / 0.7827 ($F^R$ input), versus 0.6998 / 0.6976 under Rank. - The Rank and Percentage rules produce different eliminations in 50 out of 264 analysis weeks, corresponding to an 18.94% conflict rate.
- In every conflict week, the Percentage rule retains the contestant with the higher fan share (50 of 50 under both inputs).
- Variance Engulfing: Judges' totals are often tightly clustered while fan shares are much more uneven. Because the Percentage method adds the two shares directly, even a moderate gap in fan votes can outweigh a substantial deficit in judges' scores and reverse who gets eliminated.
Policy Recommendations: (1) Return to Rank aggregation to reduce structural fan amplification; (2) Strengthen judge intervention beyond Bottom2 when needed.
Code: src/model_task2.py | Results: results/task2/ | Figures: figures/task2/
Goal: Separate stable pro and contestant differences from week-to-week noise, comparing effects on judges' scores and on inferred fan shares.
Model Specification:
where
| Metric | Judges | Fans |
|---|---|---|
| RMSE | 0.6075 | 0.5740 |
| 0.2376 | 0.1324 | |
| 0.6035 | 0.3202 |
Key Findings:
-
$R^2_{\text{cond}} \gg R^2_{\text{marg}}$ : Persistent differences across pros and celebrities explain a lot beyond observed covariates. - Pro effects are more pronounced for judges than for fans, suggesting pros influence judges' scores more strongly than they influence fan voting.
- Age is negative for both outcomes. Some industry categories (e.g., Model) are negative for both, while others (e.g., Athlete) differ in direction.
| Variable | Judges: |
Fans: |
|---|---|---|
| Age (z) | −0.475 [−0.547, −0.402] | −0.254 [−0.318, −0.190] |
| Week | −0.081 [−0.093, −0.068] | −0.122 [−0.139, −0.105] |
| Industry: Model | −0.543 [−0.927, −0.159] | −0.703 [−1.059, −0.346] |
| Industry: Athlete | −0.264 [−0.466, −0.061] | 0.008 [−0.170, 0.186] |
Code: src/model_task3.py | Results: results/task3/ | Figures: figures/task3/
Goal: Design a weekly voting rule that preserves the transparency and stability of rank aggregation while addressing judge–fan mismatches.
Rule Definition:
Base score
When a contestant is not in the top
Evaluation Metrics:
- RescueRate: Fraction of baseline-eliminated contestants who are in judges' top-3 but are not eliminated by MARS.
-
Balance gap
$\Delta\rho$ : Average$|\rho_J - \rho_F|$ , where$\rho_J$ and$\rho_F$ are Spearman correlations between$S_i$ and the judge/fan ranks. - FII: Fan Impact Index, the rate at which small fan-share perturbations change the elimination.
- ChangeRate: Fraction of weeks where MARS changes the baseline elimination set.
| Split | Weeks | RescueRate | ChangeRate | |
|---|---|---|---|---|
| Train (S1–S17) | 134 | 0.588 | 0.186 | 0.299 |
| Test (S18–S34) | 130 | 0.789 | 0.210 | 0.385 |
Optimal parameters:
Code: src/model_task4.py | Results: results/task4/ | Figures: figures/task4/
Task 1 (Fan vote estimation → fan_vote_estimates.csv)
├── Task 2 (Counterfactual rule comparison, using estimated fan shares)
├── Task 3 (Mixed-effects analysis, using fan shares + cleaned data)
└── Task 4 (MARS new rule, using estimated fan shares)
pip install numpy scipy pandas statsmodels matplotlib seaborn# Task 1: Fan vote inference (Model A + B)
python src/model_task1.py
# Task 2: Counterfactual rule comparison (depends on Task 1 output)
python src/model_task2.py
# Task 3: Mixed-effects analysis
python src/model_task3.py
# Task 4: MARS new rule design (depends on Task 1 output)
python src/model_task4.pyRandom seed:
SEED = 42for full reproducibility.
.
├── README.md # This file
├── README.zh.md # Chinese version
├── LICENSE # MIT License
├── .gitignore
├── F_Award_2627351.pdf/png # Finalist certificate
├── 2627351_submitted_paper.pdf # Full paper (34 pages)
│
├── paper/ # LaTeX source
│ ├── mcmthesis.tex # Main file
│ ├── mcmthesis.cls # Document class
│ ├── model1_task1_section_revised_en_concise_no_parentheses_fig2_in_model_overview.tex
│ ├── model1_keyeqs_notation_compact_v3_no_parentheses.tex
│ ├── section5_all.tex # Section 5: Task 2 Counterfactual
│ ├── task4.tex # Section 6: Task 3 Mixed-Effects
│ ├── section7_all.tex # Section 7: Task 4 MARS Rule
│ ├── section_sensitivity.tex # Sensitivity analysis
│ ├── section_9_model_evaluation.tex # Model evaluation
│ ├── references.tex # References
│ ├── appendix_task4_fixed_effects_full_v2.tex # Appendix
│ ├── AI_report.tex # AI usage report
│ ├── workflow_flowchart*.pdf/png # Workflow diagram
│ ├── model_flowchart*.pdf/png # Task 1 model flowchart
│ ├── three_rules_pie.pdf/png # Three rules summary
│ ├── Proposed_Weekly_Voting_Adjustment_Mechanism.pdf/png
│ ├── figs_sec5_candidates/ # Task 2 candidate TikZ figures
│ ├── figs_sec7_candidates/ # Task 4 candidate PDF figures
│ └── ...
│
├── problems/ # Problem statement files
│ ├── 2026_MCM_Problem_C.pdf
│ ├── 2026_MCM_Problem_C_Data.csv
│ └── ...
│
├── data/ # Data
│ ├── raw/ # Raw data
│ ├── cleaned/ # Cleaned data
│ ├── figures/ # EDA figures
│ ├── clean_data.py # Cleaning script
│ ├── audit_cleaned_data.py # Data audit script
│ ├── cleaning_log.md # Cleaning log
│ └── data_audit_report.md # Audit report
│
├── src/ # Source code
│ ├── model_task1.py # Task 1: Fan vote inference
│ ├── model_task2.py # Task 2: Counterfactual comparison
│ ├── model_task3.py # Task 3: Mixed-effects analysis
│ ├── model_task4.py # Task 4: MARS rule design
│ ├── make_task2_figs.m # Task 2 MATLAB plotting
│ ├── make_task4_figs.m # Task 4 MATLAB plotting
│ ├── make_paper_figs.m # Paper figure generation
│ └── ...
│
├── results/ # Results (CSV/JSON)
│ ├── task1/ # Task 1: fan vote estimates, sensitivity
│ ├── task2/ # Task 2: counterfactual results, bias
│ ├── task3/ # Task 3: mixed-effects coefficients, CV
│ └── task4/ # Task 4: MARS parameter search, weekly results
│
└── figures/ # Figures
├── task1/ # Task 1 figures
├── task2/ # Task 2 figures (PDF + PNG + TikZ)
├── task3/ # Task 3 figures
├── task4/ # Task 4 figures
├── paper/ # Paper-style EDA figures
├── presentation/ # Presentation-style figures
└── *.pdf, *.tikz # Final paper figures & TikZ source
| Paper Section | Task | Code | Results | Figures |
|---|---|---|---|---|
| Section 4: Model I | Task 1 — Fan Vote Inference | src/model_task1.py |
results/task1/ |
figures/task1/ |
| Section 5: Counterfactual | Task 2 — Rule Comparison | src/model_task2.py |
results/task2/ |
figures/task2/ |
| Section 6: Mixed-Effects | Task 3 — Pro & Celebrity Effects | src/model_task3.py |
results/task3/ |
figures/task3/ |
| Section 7: MARS Rule | Task 4 — New Rule Design | src/model_task4.py |
results/task4/ |
figures/task4/ |
- Random seed:
SEED = 42 - Data cleaning log:
data/cleaning_log.md - Task 4 parameter grid:
results/task4/task4_param_grid_train.csv - No additional system dependencies; Python 3.8+ is sufficient.
以下记录一下第一次带队打美赛(也是第一次数模竞赛)的心得与经验,在备赛期间我在飞书写了个美赛教程,用于建立队友对美赛的初步认知和角色认知(当然也适用于自己),你可以把他当作了解美赛的一份资料,也可以当作一篇O奖论文复现指导(可能对你复现我们的论文有帮助)
是的你没听错我们从第一次看到数模题到开始打比赛只有三天,接下来我会说明最高效的数模速成方法
附上我们复现论文时的仓库(虽然用处不大)
怀着对O奖大佬的崇敬,我先去网上检索了官方公开的O奖论文,先进行翻译阅读(不用了解详细原理),了解一篇O奖论文具备什么部分即可。然后我使用codex对论文进行深度分析,codex按照论文思路直接给出代码运行并进行绘图我再对比论文进行修正与指导。值得一提的是,C题的数据清洗部分需要额外看重,毕竟脏数据对于后续建模的结果影响巨大,数据清理完全交给AI即可并总结清洗日志用于论文描述。可喜的是我拿到了跟论文数据相近的结果和图表,说明复现比较成功。(复现论文只花了我们一下午时间)
在对往年O奖论文进行阅读的过程中,我发现两个非常影响论文观感的细节,即论文的语言风格和绘图风格一致性。如果你已经看过我们的F奖论文,应该会发现我们的绘图色调采用的是蓝绿色调(全文一致性),语言风格更多采用短句,注重字句间的逻辑,这些也是受到O奖论文的启发:我们需要的可能不是炫技式的图表,全文色彩的一致性更加令人舒适;叙述语言不需要过度深奥,能用最易懂的方式讲好故事更为重要。
- 在Vibe Coding的时代美赛比的其实是提示词工程。 能够写好提示词可以让AI帮你完成任何事。赛前为了加速比赛时的方案敲定和对比、数据清洗、建模、绘图这一系列流程,我打造了一套专用于MCM/ICM的skills(虽然有待完善,但确实在开赛的前2个小时非常有效),期间我们使用多种AI(主要是Chatgpt和Gemini)进行左右脑互搏,在减小AI幻觉的同时拟定方案,而这些几乎都不需要你对具体建模有深刻的了解,当然你也可能发现AI提供的有些建模方案过于复杂(对于论文撰写不友好)或者过于新颖而不确定可行度,根据它提出的方案进行提示词优化是必要的,最终可以达到预期的效果。
- AI绘图:我们的论文流程图全部是Chatgpt的画笔功能生成的,我选择先喂给gpt期望达到的流程图色彩效果示例图(往期O奖论文中截取即可,注意色彩一致性),然后描述流程图的步骤即可(当然如果使用skills可以直接一把梭),而论文中的展示建模结果的图表都是用python绘制(尝试过matlab但感觉导出视觉效果不佳),不同类型图的选择和搭配也是需要抉择的点(你会发现我们绘制了很多废图hhh),信息密度低或者常见类型的图我们会尽量避免。
根据模型跑出来的结果AI给我绘制了一大堆图并给我了相应的论文表述后,我们检查了论文的逻辑(不止是该段的逻辑也应该是段落之间的逻辑),然后发现了很多逻辑谬误、图不能解释问题、段落之间断联等问题,但我们并没有放弃一些觉得画的好的图像,而是采用换角度解释使得跟问题产生联系的方式融入到我们的论文。因为建模的复杂性我们不能理解全部的原理,只能采用多agent分析推理的方式查找逻辑问题并同时进行简化(因为AI多半会越改越复杂)和修正,最后一天我全天修正逻辑错误和重写论文达到了可行的效果。
在比赛期间让人头疼的一点是不同的task对应的不同模型的符号难以统一(由于模型复杂度较高),所以notations的撰写反而是最后才确定的,有些具备多个复杂公式的模型直接采用小节内置一个小notations表很好地解决了这个问题(让评委不需要翻很久找到前面的符号对应表进行艰难阅读),从而大notations只需要具备一些重要且通用的符号。
在三天备赛期间我们就已经确定了latex模版、每个人的分工情况、github推送、合并、拉取分支的规范性、相关工具使用等,复现论文的模拟增加每个人的默契度,我们选择线下共同参赛的方式也可以促进我们的即时交流和反馈。所幸的是我的队友都十分给力,为我后期节省不少工作量。
在备赛期我们队伍三个人每个人分配了两种角色,比如我同时担任编程手和论文手(虽然好像一半的建模也是我做的hhh),不完全把某一方面全部交给同一个人避免了不必要的等待,也节省了不少交流成本。
This project is licensed under the MIT License.




