【2023美国大学生数学建模竞赛】2024美赛C题 问题分析、数学模型、实现代码、完整论文
引言
本人是计算机博士,拥有10年网球球龄,2023年的温网决赛,熬夜到半夜全称观看完了直播,对于网球规则、比赛的数据非常熟悉,这个题应该没有人比我更懂了。我们团队将会陆续更新问题分析、数学模型和实现代码,最后发布完整的论文。
更新进展:
(1)2024年2月1日22:00发布博客
(2)2024年2月2日6:00发布题目
(3)2024年2月2日7:00发布问题分析
【2024美国大学生数学建模竞赛】2024美赛C题网球运动中的势头,网球教练4.0没人比我更懂这个题了!!!
1 题目
A题:2024MCM问题C:网球运动中的势头
在2023年温布尔登网球公开赛男子组决赛中,20岁的西班牙新星卡洛斯-阿尔卡拉斯击败了36岁的诺瓦克-德约科维奇。这是德约科维奇自2013年以来首次在温布尔登输掉比赛,也结束了这位大满贯历史上最伟大球员之一的辉煌战绩。
[1]德约科维奇似乎注定会轻松获胜,他在第一盘以6-1的比分占据优势(7局比赛中赢了6局)。然而,第二盘比赛却十分紧张,最终阿尔卡雷斯在决胜盘中以7-6获胜。第三盘与第一盘相反,阿尔卡拉兹以6-1的比分轻松获胜。第四盘开始后,年轻的西班牙人似乎完全控制了局面,但不知何故,比赛的走势再次发生了变化,德约科维奇完全控制了局面,以6-3的比分赢得了这一盘。第五盘也是最后一盘比赛开始后,德约科维奇延续了第四盘的优势,但比赛的走向再次发生了变化,阿尔卡拉斯以6-4取得了胜利。本场比赛的数据在提供的数据集中,“match_id"为"2023-wimbledon-1701”。您可以使用"set_no"列(等于1)查看第一盘德约科维奇占优时的所有得分。似乎占优的一方有时会出现多分甚至多局的惊人波动,这通常归因于"势头"。
在字典中,“势头"的定义是"通过运动或一系列事件获得的力量或作用力。”[2]在体育运动中,一支球队或一名球员可能会觉得他们在比赛中拥有势头或"力量/作用力",但很难衡量这种现象。此外,如果存在"势"的话,比赛中的各种事件是如何产生或改变"势"的,也不是一目了然的。
提供2023年温布尔登网球公开赛前两轮之后所有男子比赛中每一分的数据。您可以自行决定加入其他球员信息或其他数据,但必须完整记录数据来源。使用这些数据
(1)建立一个模型,捕捉赛点发生时的比赛流程,并将其应用到一场或多场比赛中。您的模型应能确定哪位球员在比赛中的某个特定时间段表现更好,以及他们的表现好到什么程度。根据您的模型提供可视化的比赛流程描述。注意:在网球比赛中,发球的一方赢得赛点/比赛的概率要高得多。您可能希望以某种方式将这一因素考虑到您的模型中。
(2)一位网球教练对"势头"在比赛中的作用持怀疑态度。相反,他假设比赛中的波动和一名球员的成功是随机的。请使用您的模型/度量来评估这一说法。
(3)练们很想知道,是否有一些指标可以帮助判断比赛的流程何时会从偏向一名球员变为偏向另一名球员。
(4)利用提供的至少一场比赛的数据,建立一个模型来预测比赛中的这些波动。哪些因素似乎最相关(如果有的话)?
(5)考虑到过去比赛"势头"波动的差异,您如何建议球员在新的比赛中对阵不同的球员?
(6)在一场或多场其他比赛中测试您开发的模型。您对比赛中的波动预测得如何?
如果模型有时表现不佳,您是否能找出未来模型中可能需要包含的任何因素?您的模型对其他比赛(如女子比赛)、锦标赛、球场表面和其他运动(如乒乓球)的通用性如何?
(7)撰写一份不超过25页的报告,介绍您的研究结果,并附上一至两页的备忘录总结您的研究结果,并就"动力"的作用以及如何让球员做好准备,应对网球比赛中影响比赛进程的事件,向教练提出建议。
您的PDF解决方案总页数不超过25页,其中应包括
一页摘要表。
• 目录
• 您的全套解决方案
• 一至两页的备忘录。
• 参考文献列表。
• 人工智能使用报告(如已使用,则不计入25页限制。)
注意:对于提交的完整材料,没有具体的最低页数要求。你可以用最多25页的篇幅来完成所有的解答工作,以及你想包含的任何附加信息(例如:图纸、图表、计算、表格)。我们接受部分解决方案。我们允许谨慎使用人工智能,如ChatGPT,但没有必要为这一问题创建解决方案。如果您选择使用生成式人工智能,则必须遵守COMAP人工智能使用政策。这将导致一份额外的人工智能使用报告,您必须将其添加到PDF解决方案文件的末尾,并且不计入解决方案的25页总页数限制中。
2 提供的文件:
(1)Wimbledon_featured_matches.csv-2023年温布尔登网球赛第二轮之后的男子单打比赛数据集。
(2)data_dictionary.csv-数据集说明。
(3)data_examples-帮助理解所提供数据的示例。
2 问题重述
比赛描述和数据:
-
详细描述了2023年温布尔登网球公开赛男子组决赛的比赛情况以及提供的比赛数据。
-
解释了"势头"在体育运动中的定义以及难以衡量的问题。
问题:
-
建立一个模型,包括:
- 捕捉赛点发生时的比赛流程的模型。
- 应用到一场或多场比赛中以确定表现更好的球员,并提供可视化描述。
-
对一位怀疑"势头"作用的网球教练的说法,使用模型/度量来评估。
-
探讨一些指标,用于判断比赛流程何时会从偏向一名球员变为偏向另一名球员。
-
利用提供的比赛数据,建立一个波动预测模型,并确定最相关的因素。
-
提出如何建议球员在新的比赛中对阵不同的球员,考虑到过去比赛"势头"波动的差异。
-
在一场或多场其他比赛中测试开发的模型,并评估模型的波动预测。
-
撰写报告和备忘录,介绍研究结果并向教练提出建议。
3 问题分析
3.1 问题一:捕捉赛点发生时的比赛流程的模型
2023美网比赛数据
(1)模型思路:这是一个时间序列预测回归问题。将赛点发生时的比赛情况建模为状态转移过程,根据历史比赛数据和技术统计来预测赛点的发生。由于计分的模型是按每一盘、每一局计分的,大满贯的需要打5盘3胜出,每一盘是赢6局,或者6:6时,一局定胜负,这一局是先抢到7分的胜出,如果6:6时,需要再净胜出2分才能赢下这一局。在数据预处理部分,可以将前面的赢下的盘作为一个特征,如果前4盘中已经赢下2盘,则直接预测第三盘是否会出现赛点。并且由于将计分转为一条时间序列的数据,可以将计分数据转换为事件数据,例如记录每一个赛点的发生情况,赛点发生时双方的计分情况,以及赛点赢家等。之后用时间序列回归模型预测即可,以下给出示例代码。
(2) 模型
- 马尔可夫链模型(Markov Chain Model): 将比赛状态建模为马尔可夫链,推断赛点发生的概率。
隐马尔可夫模型(Hidden Markov Model): 考虑比赛状态的隐含变量,对赛点的发生进行建模。 - 逻辑回归模型(Logistic Regression): 根据选手的技术统计特征,预测赛点的可能性。
生存分析模型(Survival Analysis): 考虑赛点发生的时间,建立生存分析模型来预测赛点的发生。 - 朴素贝叶斯模型(Naive Bayes): 基于历史数据和技术统计,利用贝叶斯方法预测赛点的发生。
要将网球大满贯中5盘的计分数据转换为一条时间序列的数据,可以将每个赛点的计分情况转换为时间序列中的事件,然后使用这些事件数据来建立时间序列模型,例如隐马尔可夫模型或马尔可夫链模型,来预测赛点的发生。下面是举例理解Python代码:
(3)示例:举例的5盘比赛的计分数据
import pandas as pd
# 假设我们有原始的比分数据,包括每局的比分情况
# 这里的具体每一局的分数,是我瞎编的,需要根据提供的表格计算得出准确值,后续我会更新正确。
score_data = {
'Set1': ['4-1', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2'],# 第一盘,打了7局,6:1
'Set2': ['4-1', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2'],# 第二盘,打了13局,7:6
'Set3': ['4-1', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2'],# 第三盘,打了7局,6:1
'Set4': ['4-1', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2','4-3', '4-2'],# 第四盘,打了9局,3:6
'Set5': ['4-3', '4-2','4-1', '1-4', '4-2', '4-0', '4-0', '4-3', '4-2','4-3'] # 第五盘,打了10局,4:6
}
# 转换成时间序列的事件数据
events = []
for set_num in score_data:
set_scores = score_data[set_num]
for game_score in set_scores:
# 分割比分
player1, player2 = game_score.split('-')
player1 = int(player1)
player2 = int(player2)
# 判断赛点情况
if player1 >= 4 and player1 - player2 >= 2:
events.append({'set': set_num, 'game': game_score, 'player': 'Alcaraz', 'event': '赛点'})
elif player2 >= 4 and player2 - player1 >= 2:
events.append({'set': set_num, 'game': game_score, 'player': 'Djokovic', 'event': '赛点'})
# 转换为DataFrame
events_df = pd.DataFrame(events)
# 打印事件数据
print(events_df)
上述代码将原始计分数据转换为了赛点事件的时间序列数据。然后可以使用events_df
进行时间序列建模,例如应用隐马尔可夫模型:
from hmmlearn import hmm
# 建立隐马尔可夫模型
model = hmm.GaussianHMM(n_components=2, covariance_type="full")
X = events_df[['set', 'game']] # 选择用于建模的特征
model.fit(X)
# 进行赛点预测
predicted_states = model.predict(X)
# 打印预测结果
print(predicted_states)
3.2 问题二:评估"势头"作用的模型
(1)模型思路:这是一个因子分析问题,通过统计和机器学习方法,评估球员的赛事表现是否受到"势头"的影响,探索势头效应的存在和程度。
(2) 模型
- 线性回归模型(Linear Regression):分析球员的比赛表现与势头的相关性,探索线性关系。
时间序列模型(Time Series Model):分析球员的比赛结果时间序列,检测势头效应的存在和影响。 - 因子分析(Factor Analysis):挖掘比赛数据中的潜在因子,探索势头对表现的影响。
贝叶斯结构学习(Bayesian Structural Learning):利用贝叶斯方法建立模型,评估势头作用的概率和影响。 - 强化学习模型(Reinforcement Learning):通过建立马尔可夫决策过程模型来评估势头对球员战术选择的影响。
3.3 问题三: 判断比赛流程转向的指标
(1)模型思路:这是一个分类问题,是球员A赢下的概率大,还是球员B的概率大。建立状态转移模型来判断比赛流程何时转向另一名球员,考虑技术统计和比分变化。
(2) 模型:
- 隐马尔可夫模型(Hidden Markov Model):考虑比赛状态的隐含变量,判断比赛流程的转向。
KNN模型(K-Nearest Neighbors):根据历史数据中邻近的比赛情况来判断比赛流程的转向。 - 决策树模型(Decision Tree):利用技术统计特征来建立决策树模型,判断比赛流程的转向。
时间序列分析模型(Time Series Analysis):分析比赛数据的时间序列特征,判断比赛流程转向的规律。 - 支持向量机模型(Support Vector Machine):根据技术统计特征,建立支持向量机模型来判断比赛流程的转向。
3.4 问题四: 建立波动预测模型
(1)模型思路:这是时间序列预测问题,将问题一的数学模型拿来用就行,做一些漂亮的回归分析和可视化。利用比赛数据和技术统计,建立波动预测模型来确定比赛结果的波动,并找出最相关的因素。
(2)模型:
- 时间序列模型(Time Series Model):建立时间序列预测模型,预测比赛结果的波动。
- ARIMA模型:利用自回归与移动平均模型,预测比赛结果的波动情况。
- LSTM模型(Long Short-Term Memory):利用循环神经网络模型来预测比赛结果的波动。
- 随机森林模型(Random Forest):利用多颗决策树组成的模型来预测比赛结果的波动。
- 因果推断模型(Causal Inference Model):利用因果推断方法来确定比赛结果波动的因果关系。
3.5 问题五:战术建议
(1)建议思路:这是一个决策问题,通过比较对阵不同对手时的比赛"势头"波动差异,给出针对不同对手的战术建议,简答一点做就是用决策树做,要做复杂点就加入博弈论的思想,方法更高级。
(2)模型
- 博弈论模型(Game Theory):分析不同对手之间的博弈关系,给出对应的战术建议。
强化学习模型(Reinforcement Learning):通过与不同对手的交互学习,给出对应的战术建议。 - 决策树模型(Decision Tree):根据对手的特点建立决策树模型,给出相应的战术建议。
概率图模型(Probabilistic Graphical Model):利用概率图模型分析不同对手的特点,给出对应的战术建议。
3.6 问题六:模型评估
以上几乎都是回归问题,回归问题的模型评价方法部分举例如下:
- 交叉验证(Cross-validation):对模型在其他比赛中的表现进行交叉验证,评估模型的波动预测能力。
- 均方误差(Mean Squared Error):计算模型在其他比赛中的均方误差,评估模型的预测准确性。
- ROC曲线分析(ROC Curve Analysis):通过绘制ROC曲线,评估模型的波动预测性能。
- 查准率与召回率(Precision and Recall):计算模型的查准率与召回率,评估模型的波动预测能力。
- AUC值评估(AUC Value Evaluation):计算模型的AUC值,评估模型的波动预测性能。
):对模型在其他比赛中的表现进行交叉验证,评估模型的波动预测能力。
- 均方误差(Mean Squared Error):计算模型在其他比赛中的均方误差,评估模型的预测准确性。
- ROC曲线分析(ROC Curve Analysis):通过绘制ROC曲线,评估模型的波动预测性能。
- 查准率与召回率(Precision and Recall):计算模型的查准率与召回率,评估模型的波动预测能力。
- AUC值评估(AUC Value Evaluation):计算模型的AUC值,评估模型的波动预测性能。
4 获取方式
完整资料,请看评论区