问题描述
我的数据如下所示:
Player | Avg_goals | Minutes played
A | 10 | 100
B | 12.1 | 900
C | 15 | 1600
D | 8.3 | 3200
E | 3 | 750
...
Z | 2.4 | 420
我想做什么
是为不确定性源为avg_goals
的任何玩家建模并获得 true Minutes
。
在这种情况下,我更确定 true 的比率更接近记录的Avg_goals
,其中Minutes
是高,而对于少分钟的球员,他们的真实费率更接近Avg_goals
列中的值时,方差更大,不确定性更大。因此,由于分钟数,我更确定播放器D的速率比播放器Z的速率更接近8.3(记录值= 2.4)。
问题
我不确定如何在PyMC3模型中描述Avg_goals
和Minutes
之间的关系。
我决定在目标列之前使用Poisson,但之后不知道如何进行。到目前为止,我的代码(不完整)是
import pymc3 as pm
import numpy as np
minutes = np.array([100,900,1600,3200,750])
goals_ = np.array([10,12.1,15,8.3,3])
with pm.Model() as model:
lambda = pm.normal('lambda',goals_.mean())
goals_ = pm.Poisson('goals_',lambda)
###NO IDEA WHAT COMES NEXT??!!
任何帮助将不胜感激。如果我可以在PyMC3中实现类似的示例,那就太好了。
解决方法
没有实际重复,不确定性如何随时间缩放将是任意的。但是,您是正确的,至少可以观察到不确定性的相对关系。只是不确定性的绝对单位将取决于先验中的选择。
为了简化模型,我建议使用minutes_played
和total_goals
,而不是OP中的变量。我们仍然可以指定有一个goal_rate
输出,但这将是模型参数的确定性函数。应该注意的是,OP数据中给出的某些条目没有任何意义。例如,在1600分钟的比赛中,没有一个目标可以达到15个目标/ 90分钟的进球总数。因此,我更改了数据以使其有效。
二项式回归模型
首先,我将提出一个二项式回归模型,在该模型中,我们将玩家制作的total_goals
建模为二项式随机变量,其中N对应于minutes_played
且比率为每分钟特定于玩家的目标。回归部分是,我们将假设所有玩家的平均目标进球率都相同,并且我们将推断一个特定于玩家的系数,该系数定义了他们与均值的偏差。
这不是确切的模型。例如,假设所有玩家的得分率为每分钟0到1个目标(GPM)。尽管GPM超过1的逻辑上没有不可能,但实际上这是不可行的,因此我认为该模型并非不合理。
数据
minutes_played = np.array([10,90,750,900,1800,3600])
goals_per_game = np.array([18,10,3,12.1,15,8.3])
total_goals = goals_per_game * minutes_played / 90
n_players = len(total_goals)
型号
with pm.Model() as model:
# regression model coefficients
c_player = pm.Normal('c_player',tau=1,shape=n_players)
c_mu = pm.Normal('c_mu',10)
# goals per minute (by player)
gpm = pm.math.invlogit(c_mu + c_player)
# intuitive variables
pm.Deterministic('avg_goal_rate',pm.math.invlogit(c_mu)*90)
pm.Deterministic('goal_rate',gpm*90)
# log-likelihood
pm.Binomial('llik',n=minutes_played,p=gpm,observed=total_goals)
trace = pm.sample()
结果
该示例似乎没有太多问题:
和“直觉”变量的后验分布通常反映了人们的期望,即,分钟数更少的球员的不确定性更高:
pm.plot_forest(trace,var_names=['avg_goal_rate','goal_rate'])
缩放不确定度
在此模型中,用于控制不确定度标度的参数是tau
中的c_player = pm.Normal('c_player',shape=n_players)
参数。在模型方面,这种精度调节着玩家真正偏离平均进球率的合理性。更高的精度意味着更低的可信度。我建议您尝试使用该值(例如0.1、10),看看它如何改变每个球员的进球率周围的不确定性。