使用概率编程的开关点检测 (pymc)

机器算法验证 可能性 马尔可夫链蒙特卡罗 pymc 变化点
2022-03-29 17:48:28

我目前正在阅读《黑客的概率编程和贝叶斯方法》“书”。我已经阅读了几章,并且正在考虑第一章,其中 pymc 的第一个示例包括检测短信中的巫婆点。在该示例中,指示切换点何时发生的随机变量用τ. MCMC 步骤后的后验分布 τ给出:在此处输入图像描述

首先,从该图中可以了解到,切换点发生在第 45 天的概率接近 50%。但如果没有切换点怎么办?我不想假设有一个切换点然后试图找到它,而是想检测是否确实存在一个切换点。

作者通过“如果没有发生变化,或者随着时间的推移逐渐发生变化,则τ 会更分散”。但是你怎么能用概率来回答这个问题,例如有 90% 的机会发生切换点,并且有 50% 的机会发生在第 45 天。

模型需要改变吗?或者这可以用当前模型来回答吗?

2个回答

SeanEaster 有一些很好的建议。贝叶斯因子可能难以计算,但有一些专门针对 PyMC2 中的贝叶斯因子的优秀博客文章。

一个密切相关的问题是模型的拟合优度。一个公平的方法就是检查——后验可以为我们提供拟合优度的证据。喜欢引用:

“如果没有发生变化,或者随着时间的推移变化是渐进的,那么τ会更分散”

这是真的。后部在时间 45 附近达到峰值。正如您所说 > 50% 的质量在 45 处,而如果没有切换点,质量应该(理论上)在时间 45 接近 1/80 = 1.125%。

您的目标是根据您的模型忠实地重建观察到的数据集。第 2 章中,它们是生成假数据的模拟。如果您观察到的数据看起来与您的人工数据大相径庭,那么您的模型可能不是正确的拟合。

我为不严谨的答案道歉,但实际上这是我没有有效克服的主要困难。

这更像是一个模型比较问题:感兴趣的是没有切换点的模型是否比有切换点的模型更好地解释数据。回答这个问题的一种方法是计算有和没有切换点的模型的贝叶斯因子简而言之,贝叶斯因子是两种模型下数据的概率之比:

K=Pr(D|M1)Pr(D|M2)=Pr(θ1|M1)Pr(D|θ1,M1)dθ1Pr(θ2|M2)Pr(D|θ2,M2)dθ2

如果是使用切换点的模型,而的高值可以解释为强烈支持切换点模型。(上面链接的维基百科文章给出了值得注意的 K 值的指南。)M1M2K

另请注意,在 MCMC 上下文中,上述积分将替换为 MCMC 链中参数值的总和。此处提供了对贝叶斯因子的更彻底处理以及示例

对于计算切换点概率的问题,这相当于求解如果您假设两个模型的先验相等,则模型的后验概率等于贝叶斯因子。(请参见此处的幻灯片 5。 )然后只需使用贝叶斯因子和 for n的要求求解(独家)正在考虑的模型事件。P(M1|D)P(M1|D)i=1nP(Mi|D)=1