Skip to content

Repository files navigation

Behind the Ballroom Scores:
Reconstructing Fan Voting and Designing Fairer Rules for DWTS

MCM/ICM 2026 Problem C Finalist Team 2627351 Hunan University

2026 MCM/ICM Problem C | Finalist (F) Award | Team 2627351 | Hunan University

2026 MCM Finalist Certificate

Full Paper (PDF) | 中文版 README


Table of Contents


Abstract

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


Overall Workflow

Overall Workflow

Data Cleaning → Model I (Fan Vote Inference) → Model II (Counterfactual Rule Comparison) + Model III (Mixed-Effects Analysis) → Model IV (New Rule Design)


Core Models

Model I: Fan Vote Inference via Feasible-Set and Likelihood Models (Task 1)

Goal: Infer each contestant's weekly fan-vote share from the available weekly judges' scores and elimination outcomes.

Task 1 Model Flowchart

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:

$$C_{i,s,t} = w , j_{i,s,t} + (1-w) , p_{i,s,t}$$

where $j_{i,s,t}$ is the softmax judge signal, $p_{i,s,t}$ is the fan-vote share, and $w$ is the mixture weight.

Metric Value
Model A Feasibility Rate ($FR_A$) 96.6% (255 / 264 weeks)
Model A Representative-Point Validity ($VR_A$) 98.8% (252 / 255 weeks)
Model B Elimination Consistency ($EC_B$) 97.7% (258 / 264 weeks)
Mean Interval Width ($\bar w$) 0.1267
Mean Normalized Entropy ($\tilde H$) 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/


Model II: Voting Mechanism Audit via Counterfactual Analysis (Task 2)

Goal: Compare three elimination rules under the same information set and quantify systematic differences and fan amplification.

Three Elimination Rules

Three Rules:

Rule Combined Score Elimination Decision
Rank $S^A_i = r_J(i) + r_F(i)$ Minimum $S^A_i$
Percentage (50-50) $S^B_i = \frac{1}{2}\frac{J_i}{\sum J_k} + \frac{1}{2}F_i$ Minimum $S^B_i$
Judges' Save (Bottom2) First identify bottom two under $S^B_i$ 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/


Model III: Impact of Pros and Celebrity Characteristics — Mixed-Effects Model (Task 3)

Goal: Separate stable pro and contestant differences from week-to-week noise, comparing effects on judges' scores and on inferred fan shares.

Model Specification:

$$y^J = \beta_0^J + \mathbf{x}^\top \boldsymbol{\beta}^J + \alpha_s + u_p + u_c + \varepsilon$$

$$y^F = \beta_0^F + \mathbf{x}^\top \boldsymbol{\beta}^F + \alpha_s + u_p + u_c + \varepsilon$$

where $u_p$ is the pro random intercept, $u_c$ is the celebrity random intercept, and $\alpha_s$ is the season fixed effect.

Metric Judges Fans
RMSE 0.6075 0.5740
$R^2_{\text{marg}}$ 0.2376 0.1324
$R^2_{\text{cond}}$ 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: $\hat\beta$ [95% CI] Fans: $\hat\beta$ [95% CI]
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/


Model IV: Proposed Weekly Voting Rule — MARS-Soft+Disagreement (Task 4)

Goal: Design a weekly voting rule that preserves the transparency and stability of rank aggregation while addressing judge–fan mismatches.

MARS-Soft+Disagreement Mechanism Overview

Rule Definition:

Base score $S^0_i = R_J(i) + R_F(i)$, with a gated, soft protection term:

$$q_i = \frac{R_J(i)-1}{n-1}, \quad g_i = \left(1 - \frac{q_i}{\alpha}\right)_+^{p}, \quad d_i = \frac{\max(0,, R_F(i)-R_J(i))}{n-1}$$

$$S_i = S^{0}_i - \lambda_t , g_i , d_i, \quad \lambda_t = \beta n$$

When a contestant is not in the top $\alpha$ fraction by judges or when judges and fans agree ($R_F(i) \le R_J(i)$), the bonus vanishes and the rule reduces to the rank-sum baseline.

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 $\Delta\rho$ ChangeRate
Train (S1–S17) 134 0.588 0.186 0.299
Test (S18–S34) 130 0.789 0.210 0.385

Optimal parameters: $\alpha = 0.20$, $\beta = 0.20$, $p = 2$ | Test FII = 0.161

Code: src/model_task4.py | Results: results/task4/ | Figures: figures/task4/


Task Dependencies

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)

Reproduction

Environment

pip install numpy scipy pandas statsmodels matplotlib seaborn

Run

# 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.py

Random seed: SEED = 42 for full reproducibility.


Repository Structure

.
├── 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-to-Code Mapping

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/

Reproducibility Notes


后日谈

以下记录一下第一次带队打美赛(也是第一次数模竞赛)的心得与经验,在备赛期间我在飞书写了个美赛教程,用于建立队友对美赛的初步认知和角色认知(当然也适用于自己),你可以把他当作了解美赛的一份资料,也可以当作一篇O奖论文复现指导(可能对你复现我们的论文有帮助)

重生之我花三天备战美赛拿F?

是的你没听错我们从第一次看到数模题到开始打比赛只有三天,接下来我会说明最高效的数模速成方法

复现O奖论文

附上我们复现论文时的仓库(虽然用处不大)

怀着对O奖大佬的崇敬,我先去网上检索了官方公开的O奖论文,先进行翻译阅读(不用了解详细原理),了解一篇O奖论文具备什么部分即可。然后我使用codex对论文进行深度分析,codex按照论文思路直接给出代码运行并进行绘图我再对比论文进行修正与指导。值得一提的是,C题的数据清洗部分需要额外看重,毕竟脏数据对于后续建模的结果影响巨大,数据清理完全交给AI即可并总结清洗日志用于论文描述。可喜的是我拿到了跟论文数据相近的结果和图表,说明复现比较成功。(复现论文只花了我们一下午时间)

论文的语言风格和绘图风格

在对往年O奖论文进行阅读的过程中,我发现两个非常影响论文观感的细节,即论文的语言风格和绘图风格一致性。如果你已经看过我们的F奖论文,应该会发现我们的绘图色调采用的是蓝绿色调(全文一致性),语言风格更多采用短句,注重字句间的逻辑,这些也是受到O奖论文的启发:我们需要的可能不是炫技式的图表,全文色彩的一致性更加令人舒适;叙述语言不需要过度深奥,能用最易懂的方式讲好故事更为重要。

怎么用好AI打好这个“AI大赛”?

  • 在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),不完全把某一方面全部交给同一个人避免了不必要的等待,也节省了不少交流成本。

License

This project is licensed under the MIT License.

About

🏆 Finalist Award |MCM/ICM| 2026年美赛C题F奖代码、论文开源,三天备战美赛全攻略

Resources

Stars

20 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages