PyMC+AI提示词贝叶斯项目反应IRT理论Rasch分析篮球比赛官方数据:球员能力与位置层级结构研究

news2025/7/19 18:40:53

全文链接:tecdat.cn/?p=41666

在体育数据分析领域不断发展的当下,数据科学家们致力于挖掘数据背后的深层价值,为各行业提供更具洞察力的决策依据。近期,我们团队完成了一项极具意义的咨询项目,旨在通过先进的数据分析手段,深入探究篮球比赛中犯规判罚的内在规律点击文末“阅读原文”获取完整代码、数据、文档)。

本专题文章围绕篮球犯规判罚数据展开研究,运用贝叶斯项目反应理论(Bayesian Item Response Theory,IRT),结合 PyMC 软件强大的建模能力,对官方 2015 - 2021 年篮球比赛相关报告数据进行了全面分析。在项目过程中,我们首先对原始数据进行细致的收集与处理,提取关键信息;接着构建拉施模型(Rasch Model),定义模型参数并利用 PyMC 实现模型搭建;随后通过后验采样与收敛检查确保模型的可靠性;最后对后验结果进行多维度分析,不仅发现了模型中部分池化的效果,还揭示了球员表现与位置之间的潜在关系,为篮球比赛的策略制定和裁判判罚研究提供了新的视角。

专题项目文件已分享在交流社群,阅读原文进群和 500 + 行业人士共同交流和成长。在这里,您可以与众多志同道合的数据爱好者、行业专家一同探讨数据分析在体育领域的应用,碰撞思维的火花,共同推动数据分析技术在各行业的发展与创新。

文章脉络:

在篮球比赛中,犯规判罚是一个重要且复杂的环节。每一次犯规判罚的背后,都涉及到不同角色球员之间的互动,比如犯规球员和被侵犯球员。而这些判罚结果不仅与球员的角色有关,还可能与每个球员自身的潜在能力相关。那么,如何研究这种涉及众多球员、具有层级结构的多主体互动场景呢?
贝叶斯项目反应理论结合现代强大的统计软件为我们提供了一种优雅且有效的建模选择。接下来,我们将详细介绍如何运用该理论对篮球犯规判罚数据进行分析。

动机

在篮球比赛中,我们观察到的是一个二元结果,即犯规是否被吹罚,这一结果来自于两个不同角色球员(犯规球员和被侵犯球员)在一次篮球进攻中的互动。而且,每个犯规或被侵犯的球员可能会在多次进攻中被观察到。所以,我们希望估计每个球员作为犯规或被侵犯球员时,其潜在能力对观察到的判罚结果的贡献。通过这种方式,我们可以对球员进行从高到低的排名,量化排名中的不确定性,并发现犯规判罚中涉及的额外层级结构。

拉施模型(Rasch Model)

我们的数据来源于官方的篮球比赛相关报告,涵盖了2015年到2021年期间的比赛数据。在这个数据集中,每一行数据代表一次进攻,涉及两名球员(犯规球员和被侵犯球员),并且记录了这次进攻中犯规是否被吹罚。
我们为每个球员定义了两个潜在变量:

  • theta

    :用于估计球员在被侵犯时被吹罚犯规的能力。

  • b

    :用于估计球员在犯规时不被吹罚犯规的能力。
    这两个参数的值越高,对该球员所在的球队越有利。我们使用标准的拉施模型来估计这两个参数,假设在第k次进攻中,裁判吹罚犯规的对数几率比等于相应球员的theta-b。同时,我们对所有的thetab设置了层级超先验,以考虑球员之间的共享能力以及不同球员的观察数量差异。

分析过程

我们的分析主要包括以下四个步骤:数据收集与处理、拉施模型的定义与实例化、后验采样与收敛检查、后验结果分析。

数据收集与处理

首先,我们从原始数据集中导入数据。我们只导入了五列数据,分别是:

  • committing

    :犯规球员的名字。

  • disadvantaged

    :被侵犯球员的名字。

  • decision

    :对这次进攻的判定结果,有四个取值:CNC(正确未吹罚)、INC(错误未吹罚)、IC(错误吹罚)、CC(正确吹罚)。

  • committing_position

    :犯规球员的位置,取值包括G(后卫)、F(前锋)、C(中锋)、G-FF-GF-CC-F

  • disadvantaged_position

    :被侵犯球员的位置,取值与犯规球员位置类似。
    我们已经从原始数据集中删除了涉及球员少于两名的进攻(比如走步或违例),并且原始数据集不包含球员位置信息,这是我们自己添加的。
    以下是部分数据导入的代码(AI提示词:使用Python的pandas库从指定路径或数据获取函数导入篮球犯规数据):

csharp
代码解读
复制代码
try:
 df_orig = pd.read_csv(os.path.join("..", "data", sponse_nba.csv"), index_col=0)
except FileNotFoundError:
 df_orig = pd.read_csv(pm.get_data("itemnba.csv"), index_col=0)
df_orig.head()

接下来,我们对数据进行三步处理:

  1. 创建一个数据框df,删除df_orig中的位置信息;同时创建一个数据框df_position,收集所有球员及其相应位置(这个数据框在笔记本的最后才会用到)。

  2. df添加一个名为foul_called的列,如果一次进攻中吹罚了犯规,则该列赋值为1,否则为0。

  3. 为犯规球员和被侵犯球员分配ID,并使用这个索引来识别每次观察到的进攻中的相应球员。
    以下是数据处理的部分代码(AI提示词:使用Python的pandas库对导入的篮球犯规数据进行处理,包括创建新数据框、添加新列、对球员进行索引等操作):

项目反应模型
模型定义

我们用以下符号表示:

  • (N_d)和(N_c)分别表示被侵犯球员和犯规球员的数量。

  • (K)表示进攻的次数。

  • (k)表示一次进攻。

  • (y_k)表示在第(k)次进攻中观察到的犯规判罚结果(吹罚或未吹罚)。

  • (p_k)表示在第(k)次进攻中吹罚犯规的概率。

  • (i(k))表示第(k)次进攻中的被侵犯球员。

  • (j(k))表示第(k)次进攻中的犯规球员。
    我们假设每个被侵犯球员由潜在变量(\theta_i)((i = 1,2,…,N_d))描述,每个犯规球员由潜在变量(b_j)((j = 1,2,…,N_c))描述。
    然后,我们将每个观察值(y_k)建模为独立伯努利试验的结果,其概率为(p_k),其中:
    [ p_k = \text{sigmoid}(\eta_k) = \left(1 + e{-\eta_k}\right){-1}, \quad \text{with} \quad \eta_k = \theta_{i(k)} - b_{j(k)} ]
    通过定义(使用非中心参数化):

先验/超先验为:

PyMC实现

我们使用PyMC实现上述模型。为了方便跟踪球员(因为我们有数百名犯规和被侵犯球员),我们使用pymc.Modelcoords参数。以下是模型实现的代码(AI提示词:使用Python的PyMC库实现上述定义的篮球犯规判罚的项目反应模型,设置好相关的先验、超先验、确定变量和似然等部分):

我们绘制模型以显示thetab变量的层级结构(和非中心参数化):

scss
代码解读
复制代码
pm.model_to_graphviz(model)

采样与收敛

我们从拉施模型中进行采样:

ini
代码解读
复制代码
with model:
trace = pm.sample(1000, tune=1500, random_seed=RANDOM_SEED)

我们绘制获得的跟踪的能量差异。同时,我们假设采样器已经收敛,因为它通过了所有自动的PyMC收敛检查:

ini
代码解读
复制代码
az.plot_energy(trace);


点击标题查阅往期内容

图片

Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估

左右滑动查看更多

01

图片

02

图片

03

图片

04

图片


后验分析
部分池化的可视化

我们首先绘制每个被侵犯和犯规球员的原始平均概率(来自数据)与后验平均概率之间的差异((y)轴),以及每个被侵犯和犯规球员的观察数量((x)轴)。这些图表明,正如预期的那样,我们模型的层级结构倾向于将观察数量较少的球员的后验估计值拉向全局平均值。
以下是部分代码(AI提示词:使用Python的相关库对后验结果进行处理,计算原始平均概率与后验平均概率的差异,并绘制差异与观察数量的关系图):

ini
代码解读
复制代码
# 全局后验均值的μ_theta和μ_b
mu_theta_mean, mu_b_mean = trace.posterior["mu_theta"].mean(), 0
# 每个被侵犯球员的数据原始均值
disadvantaged_raw_mean = df.groupby("disadvantaged")["foul_called"].mean()
# 每个犯规球员的数据原始均值
committing_raw_mean = df.groupby("committing")["foul_called"].mean()
# 每个被侵犯球员的后验均值
disadvantaged_posterior_mean = (
 1 / (1 + np.exp(-trace.posterior["theta"].mean(dim=["chain", "draw"]))).to_pandas()
)
# 每个犯规球员的后验均值
committing_posterior_mean = (
 1
 / (1 + np.exp(-(mu_theta_mean - trace.posterior["b"].mean(dim=["chain", "draw"])))).to_pandas()
)
# 计算每个被侵犯和犯规球员的原始和后验均值的差异
def diff(a, b):

表现最佳和最差的犯规与被侵犯球员

由于我们成功估计了被侵犯(theta)和犯规(b)球员的技能,我们可以检查哪些球员在我们的模型中表现更好或更差。我们使用森林图绘制后验结果,分别绘制了在潜在技能thetab方面排名前十和后十的球员。
以下是相关代码(AI提示词:使用Python的相关库对后验结果进行处理,根据潜在技能对球员进行排序,并绘制森林图展示排名前十和后十的球员的后验估计):

ini
代码解读
复制代码
def order_posterior(inferencedata, var, bottom_bool):
xarray_ = inferencedata.posterior[var].mean(dim=["chain", "draw"])
 return xarray_.sortby(xarray_, ascending=bottom_bool)
top_theta, bottom_theta = (
 order_posterior(trace, "theta", False),
 order_posterior(trace, "theta", True),
)
top_b, bottom_b = (order_posterior(trace, "b", False), order_posterior(trace, "b", True))
amount = 10# 我们希望在每个类别中显示的顶级球员数量

通过查看相关研究,并对比其中使用不同赛季数据的拉施模型结果表格,我们发现,在我们使用更大数据集(涵盖2015 - 16到2020 - 21赛季)得到的模型中,一些在两种技能(thetab)上表现最佳的球员,仍然处于前十的排名。这表明我们的模型在不同数据规模下具有一定的稳定性和可靠性。

发现额外的层级结构

一个很自然的问题是,作为被侵犯球员表现出色(即theta值高)的球员,是否也有可能在作为犯规球员时同样表现出色(即b值高),反之亦然。接下来的两张图展示了在b(或theta)方面表现最佳的球员的theta(或b)得分情况。

ini
代码解读
复制代码
amount = 20# 我们希望显示的顶级球员数量
top_theta_players = top_theta["disadvantaged"][:amount].values
top_b_players = top_b["committing"][:amount].values
top_theta_in_committing = set(committing).intersect

这些图表明,theta得分高与b得分高或低之间没有明显的相关性。而且,对篮球稍有了解的人可以从图中直观地发现,中锋或前锋球员的b得分往往比后卫或控球后卫更高。基于这一观察,我们决定绘制直方图,展示在表现最佳的被侵犯(theta)和犯规(b)球员中,不同位置的出现频率。

从直方图中我们可以看到,表现最佳的被侵犯球员中,后卫占比最大;而表现最佳的犯规球员中,中锋占比最大,同时后卫的占比非常小。这表明在我们的模型中,或许有必要添加一个层级结构。具体来说,可以按照球员的位置对被侵犯球员和犯规球员进行分组,以考虑位置因素在评估潜在技能thetab时的作用。在拉施模型中,可以通过为按位置分组的每个球员设置均值和方差超先验来实现这一点,感兴趣的读者可以自行尝试。

结论

在本次研究中,我们运用贝叶斯项目反应理论对篮球犯规判罚数据进行了深入分析。通过构建拉施模型,结合实际数据,我们成功估计了球员在犯规和被侵犯情况下的潜在技能。
从数据收集与处理,到模型的定义、实现、采样与收敛检查,再到后验结果的详细分析,每一个环节都紧密相连。在分析过程中,我们不仅观察到了模型中部分池化的效果,还通过对后验结果的可视化,发现了球员表现与位置之间的潜在关系。
这一研究成果充分展示了贝叶斯建模在处理复杂层级结构数据时的强大能力和高度灵活性,它能够帮助我们量化在引入特定问题知识时的不确定性。同时,本次研究也为后续进一步优化篮球犯规判罚分析模型提供了重要的思路和方向,例如考虑添加基于球员位置的层级结构等。未来,我们可以在此基础上,继续探索更多影响篮球犯规判罚的因素,不断完善相关模型,为篮球比赛的分析和决策提供更有价值的参考 。

本文中分析的完整数据、代码、文档分享到会员群,扫描下面二维码即可加群! 


资料获取

在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。

点击文末“阅读原文”

获取完整代码、数据、文档。

本文选自《PyMC+AI提示词贝叶斯项目反应IRT理论Rasch分析篮球比赛官方数据:球员能力与位置层级结构研究》。

点击标题查阅往期内容

R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断

【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间

R语言马尔可夫MCMC中的METROPOLIS HASTINGS,MH算法抽样(采样)法可视化实例

python贝叶斯随机过程:马尔可夫链Markov-Chain,MC和Metropolis-Hastings,MH采样算法可视化

Python贝叶斯推断Metropolis-Hastings(M-H)MCMC采样算法的实现

Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

Matlab用BUGS马尔可夫区制转换Markov switching随机波动率模型、序列蒙特卡罗SMC、M H采样分析时间序列

R语言RSTAN MCMC:NUTS采样算法用LASSO 构建贝叶斯线性回归模型分析职业声望数据

R语言BUGS序列蒙特卡罗SMC、马尔可夫转换随机波动率SV模型、粒子滤波、Metropolis Hasting采样时间序列分析

R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型

R语言贝叶斯MCMC:用rstan建立线性回归模型分析汽车数据和可视化诊断

R语言贝叶斯MCMC:GLM逻辑回归、Rstan线性回归、Metropolis Hastings与Gibbs采样算法实例

R语言贝叶斯Poisson泊松-正态分布模型分析职业足球比赛进球数

R语言用Rcpp加速Metropolis-Hastings抽样估计贝叶斯逻辑回归模型的参数

R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病

R语言中贝叶斯网络(BN)、动态贝叶斯网络、线性模型分析错颌畸形数据

R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归

Python贝叶斯回归分析住房负担能力数据集

R语言实现贝叶斯分位数回归、lasso和自适应lasso贝叶斯分位数回归分析

Python用PyMC3实现贝叶斯线性回归模型

R语言用WinBUGS 软件对学术能力测验建立层次(分层)贝叶斯模型

R语言Gibbs抽样的贝叶斯简单线性回归仿真分析

R语言和STAN,JAGS:用RSTAN,RJAG建立贝叶斯多元线性回归预测选举数据

R语言基于copula的贝叶斯分层混合模型的诊断准确性研究

R语言贝叶斯线性回归和多元线性回归构建工资预测模型

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言stan进行基于贝叶斯推断的回归模型

R语言中RStan贝叶斯层次模型分析示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型

WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

R语言贝叶斯推断与MCMC:实现Metropolis-Hastings 采样算法示例

R语言使用Metropolis-Hastings采样算法自适应贝叶斯估计与可视化

视频:R语言中的Stan概率编程MCMC采样的贝叶斯模型

R语言MCMC:Metropolis-Hastings采样用于回归的贝叶斯估计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2343771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

⭐Unity_Demolition Media Hap (播放Hap格式视频 超16K大分辨率视频 流畅播放以及帧同步解决方案)

播放大分辨率视频以及实现局域网视频同步是许多开发者会遇到的需求,AVPro有一个 Ultra Edition版本,也能播放Hap格式视频,之外就是Demolition Media Hap插件啦,实测即使是 7208*3808 大分辨率的视频帧率还是能稳定在30帧,它能帮助我们轻松解决…

【数据可视化-22】脱发因素探索的可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个…

kubernetes》》k8s》》Heml

Heml 资料 下载地址 安装 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash# helm 添加 仓库 # helm repo add 仓库名称 仓库地址 helm repo add stable http://mirror.azure.cn/kubernetes/charts/ # 移除仓库 helm repo remove 仓库名…

MySQL表的操作 -- 表的增删改查

目录 1. 表的创建2. 表的查看3. 表的修改4. 表的删除5. 总结 1. 表的创建 1.查看字符集及效验规则 2. 表的创建 CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype ) character set 字符集 collate 校验规则 engine 存储引擎;创建用户表1 创建用…

GIS开发笔记(12)基于osg和osgearth实现三维地图上的轨迹线绘制

一、实现效果 二、实现原理 1.设置起点和终点,用函数模拟出轨迹点,如从武汉到长春; 2.将地理坐标点转换成为世界坐标点; 3.根据世界坐标点绘制轨迹线,并设置样式; 4.将轨迹节点挂接到根节点,并定位。 三、参考代码 void MainWindow::sltDrawTrajectory() {qDebug(

MTKAndroid13-Launcher3 屏蔽部分app不让显示

实现Launcher3 桌面屏蔽部分内容,不让显示 文章目录 修改文件路径-实现方式基础-源码模块配置Launcher3 源码位置编译模块配置配置如下参数 属性配置:默认的Launcher3 选项配置GMS的Launcher3 配置 第三方Launcher需要默认为Launcher时候-系统Launcher3 …

PostgreSQL 数据库备份与恢复全面指南20250424

PostgreSQL 数据库备份与恢复全面指南 在数据库管理中,备份与恢复操作对于确保数据安全性、可用性和完整性至关重要。PostgreSQL 作为一款开源关系型数据库系统,广泛应用于各行各业,尤其在现代 AI 和大数据应用中,作为数据存储的…

专家系统的知识获取、检测与组织管理——基于《人工智能原理与方法》的深度解析

前文我们已经了解了专家系统的基本概念和一般结构,系统中有专业的知识才是专家系统的关键,接下来对专家系统中的知识是如何获取、检测、组织和管理的进行探讨。 1.专家系统的基本概念:专家系统的基本概念解析——基于《人工智能原理与方法》…

让Editplus支持squirrel语言

用EditPlus配置完实现关键字、函数、高光代码、自动完成、代码调试。先看看效果: 主要是由 nut.stx (语法文件)和 nut.acp (自动完成)两个文件 实现 Nut.stx文件内容: ---------------------------------…

Leetcode 2845 题解

还是要把自己做题的思路写出来的,但是结果可能还是得去观摩一下题解,无论是大佬写的题解还是leetcode官方写的题解,看完题解后再去反思才能有收获,即使下次遇见一样的题不见得能写出来,但有思路比没思路更重要。 今天写…

【爬虫】DrissionPage-获取douyim用户下的视频

之前看过DrissionPage,觉得很厉害,比selenium简单,适合新手。因为盲目跟风逆向,今天看了一个DrissionPage案例直播,学习一下,真香哈。 DrissionPage官网:🛰️ 概述 | DrissionPage官…

【Python爬虫基础篇】--3.cookie和session

目录 1.cookie 1.1.定义 1.2.参数 1.3.分类 2.session 3.使用cookie登录微博 4.使用session登录 1.cookie 由于http是一个无状态的协议,请求与请求之间无法相互传递或者记录一些信息,cookie和session正是为了解决这个问题而产生。 例子&#xff1…

分数线降低,25西电马克思主义学院(考研录取情况)

1、马克思主义学院各个方向 2、马克思主义学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、马克思主义理论25年相较于24年下降10分,为355分 3、25vs24推免/统招人数对比 学长、学姐分析 由表可看出: 1、 马克思主义学院25年共接…

Cancer Cell|scRNA-seq + scTCR + 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” | 临床问题的组学解答

Cancer Cell|scRNA-seq scTCR 空间多组学整合分析,揭示CD8⁺ T细胞在免疫治疗中的“双路径” 👋 欢迎关注我的生信学习专栏~ 如果觉得文章有帮助,别忘了点赞、关注、评论,一起学习 近日,《Cancer Cell》…

C# 下 using 块的作用 + VS2022 下 using 语法糖怎样工作

🔍 using 的本意是什么? using 是 C# 中用于 自动释放资源 的语法糖,适用于实现了 IDisposable 接口的对象(比如数据库连接、文件、网络流等)。 🧐 首先看下SqlSugarClient类部分源码: SqlSug…

实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客

实体店的小程序转型之路:拥抱新零售的密码-中小企实战运营和营销工作室博客 在当今数字化浪潮的冲击下,实体店面临着前所未有的挑战,但小程序的出现为实体店转型新零售带来了新的曙光。先来看一组惊人的数据,据相关统计&#xff…

UML 类图基础和类关系辨析

UML 类图 目录 1 概述 2 类图MerMaid基本表示法 3 类关系详解 3.1 实现和继承 3.1.1 实现(Realization)3.1.2 继承/泛化(Inheritance/Generalization) 3.2 聚合和组合 3.2.1 组合(Composition)3.2.2 聚…

15.三数之和(LeetCode)java

个人理解: 1.使用双指针做法,首先对数组进行排序 第一重for循环控制第一个数,对数组进行遍历。双指针初始化为lefti1, rigthnums.length-1。然后使用while循环移动双指针寻找合适的数。因为返回的是数,不是下标,数不能…

如何通过 Websoft9 应用自托管平台一键安装任意版本 Odoo?

手工安装 Odoo 的复杂流程 环境准备阶段:安装 Docker 需熟悉 Linux 系统操作,需配置软件源、解决依赖冲突; 镜像获取阶段:从 Docker Hub 拉取官方镜像时可能因网络问题失败,且需自行验证版本兼容性; 容器…

VRRP与防火墙双机热备实验

目录 实验一:VRRP负载均衡与故障切换 实验拓扑​编辑一、实验配置步骤 1. 基础网络配置 2. VRRP双组配置 二、关键验证命令 1. 查看VRRP状态 2. 路由表验证 三、流量分析 正常负载均衡场景: 故障切换验证: 实验二:防火…