Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

  • A+
所属分类:编程语言

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

有人质疑打击率的作用,但正如C. Trent Rosecrans所说,“尽管如此,打击率相较于其他统计数据而言确实是有历史和背景意义。我们都知道AVG为0.300打者的水平怎么样,我们也知道AVG为0.200打者有多糟,以及AVG为0.400打者有多棒。”

在美国职业棒球大联盟(MLB)中,春季训练是在常规赛季开始之前的一系列练习和表演赛。

我会尝试解决以下两个问题:

  • 如何解读2018年春季训练中的打击率

  • 怎么比较两名球员的打击率

在进入代码内容之前,我会简要介绍一下Rasmus Bååth在他的视频中所讲的内容。

首先,我们需要三样东西来完成贝叶斯分析。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

import matplotlib.pyplot as plt

import numpy as np

mu, sigma = 0, 0.1 # mean and standard deviation

s = np.random.normal(mu, sigma, 1000)

plt.hist(s)

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

就贝叶斯分析而言,我们会逆向生成模型并尝试用观测数据推断参数。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

接着,我们选择一个感兴趣的球员,并对其统计数据进行分析。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

纽约大都会队春季训练的统计页面

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

在我们的例子里,AVG是成功的概率,AB是试验次数,H是成功次数。

先记住这些术语,然后我们来 定义逆向生成模型

我们将从定义的均匀分布中随机选取一个概率值,并将此概率用作生成模型的参数。假设我们随机挑选的概率值为0.230,这意味着在二项分布中成功的概率为23%。

试验次数为1(DS有1个AB),如果生成模型的结果与我们观察到的结果相匹配(DS有1个H),那么概率值为0.230保持不变。如果我们重复这个过程并进行过滤,最终将得到一个概率分布,由它所得到的结果与我们观察到的结果相同。

这就是后验概率。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

  • 可信区间:根据观察数据,AVG的真实值落在可信区间内的概率为95%。

  • 置信区间:当我们用这类数据计算置信区间时,有95%的置信区间会包含AVG的真实值。

注意两者的区别,可信区间是在给定固定边界情况下对参数值的概率描述,置信区间是在给定固定参数值情况下的边界概率。

在现实生活中,我们想知道的是真实的参数而不是边界,因此,贝叶斯可信区间是更合适的选择。在这种情况下,我们只对球员的真实AVG感兴趣。

有了上面的后验分布,我有95%的把握断定DS真正的AVG将在0.155到0.987之间。但这个范围太大了。换句话说,在没有先验知识并且在只观察了一次试验的情况下,我不太确定DS的真实AVG是多少。

场景二

对于第二个场景,我们假设知道上一年的春季训练的统计数据。

dominic_smith_spring.iloc[-2:]

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

posterior(ds_n_trials, ds_k_success, prior_i)

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

和在场景一中使用均匀分布的先验假设得到的后验结果相比,这里95%的分位数区域已经被缩小了。现在我有95%的把握断定DS的AVG会在0.095到0.340之间。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

posterior(ds_n_trials, ds_k_success, prior_i_02)

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

现在我有95%的把握断定DS的真正AVG将在0.146到0.258之间。虽然范围不是很精确,但与场景一和场景二相比,场景三的可信区间要窄得多。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

如果我们用Pymc3中的plot_posterior函数绘制DS_AVG、GC_AVG和DvG (DS_AVG - GC_AVG)的后验分布,我们可以看到图中出现的术语是HPD而不是分位数(quantile)。

最大后验密度(Highest Posterior Density,HPD)区间是我们可以对后验密度函数使用的另一种可信区间。HPD区间会选择包括众数在内的最大后验概率密度值所在的最窄区间。

在Rasmus Bååth的另一篇文章中,比较了分位数区间和最高密度区间,并提供了简单明晰的对比图。以下是六种不同后验分布中的众数和覆盖了95%的概率密度的最高密度区间。

文章链接:

http://www.sumsar.net/blog/2014/10/probable-points-and-credible-intervals-part-one/

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

可能的点和可信区间,第1部分:图形总结

分位数区间包含中位数,中位数落在区间左侧的概率是50%,落在右侧的概率也是50%,同时以95%的可信区间为例,落在区间任意一侧的概率是2.5%。

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

可能的点和可信区间,第1部分:图形总结

就DS和GC的AVG来看,它们的众数和中位数看起来并没有多大区别,若实际情况确实如此,两位选手AVG的HPD区间和分位数区间应该也大致相同。让我们看看它们到底长什么样。

pm.summary(trace)

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

Python代码加贝叶斯理论会摩擦出什么样的火花?他才是最好的选手

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: