BR4 用实例学贝叶斯

📅 2026/8/21 10:02:33
BR4 用实例学贝叶斯
回访某老客户的质量经理。经理按你上次4个月前建议迭代回顾分析缺陷排除率或遗漏率和返工工作量。现在已经有十来个团队研发团队开始每2-4周 一轮迭代迭代后开发团队都一起回顾分析缺陷和返工。现在已经累计了 接近100组数据。 可以怎样分析我妳真棒可否让我先大概看看收集到的项目数据几分钟后让我先详细介绍A. Johnson [1] 如何从美国Cherry Blossom 10 英里赛跑的记录抽取其中36位不同年龄(50 多岁和 60 多岁)的跑手连续几年的记录建立预测模型预估某跑手在某岁数的完成时间然后才解答妳的问题。,分析美国10英里长跑数据从下图36位跑手的完成时间Y轴单位分钟箱线图分布看到跑手之间的差异很大 例如17号比较慢而且偏差很大29 号时间最短而且很稳定。如果假设完成时间与年龄数据是按线性回归方程关系 和具体是哪位跑手无关可以汇总所有跑手数据求回归方程关系。从分析结果看出斜率近乎水平线完成时间按年只增加0.27分钟 从下面36位跑手的散点图看到大部分跑手的完成时间是按年递增跑手间的速度和按年变化都有差异如果挑4位细看尽管部分跑者确实以相似的速度逐渐减慢(如4号和5号)但另一些跑者的减慢速度比其他快(如 20号)还有些跑手每年的速度几乎没有任何变化(如29号)。 所以难以用所有数据得出的回归方程预测下一年完成时间。虽然跑手之间差异很大可否对每位跑手的数据单独分析做预测但每位跑手最多只有四、五组数据虽然理论上四个点也可以按回归方程算出线性关系 但预测的偏差范围会很广。虽然跑手间的数据差异大 但绝大部分的完成时间都是按年递增如果针对某跑手的数据独立分析并没有利用上所有数据的趋势 更无法对新跑手从她的年龄预测她首次参赛的完成时间因缺乏历史数据。层级模型可以用来解决以上上面两种分析方法的不足。上一篇文章(BR3) 看到可以用成级模型吸收其他组的数据关系让本组数据的预测范围收窄。 如想多理解当每组都只有少量数据时如何使用层级模型分析请读附件1恐龙化石数据分析。DAG Directed Acyclic GraphDAG 能帮助大家“看到” 层级模型的特性图 基本层级模型左 单元之间完全独立中 源自同一个单元右右面的DAG 假设36位跑手的数据都是源自同样总体分布的随机样本代表上面第一种分析方法把所有跑手数据汇总一起分析。中间的DAG 假定每位跑手有自己的分布之间没有任何关系完全独立。这代表上面第二种分析方法 对每位跑手数据独立分析。(这例子N36)左面的 DAG 是基本层级模型也同样假定每位跑手有自己的分布 但都是源自所有跑手的总体 (population) 分布, 所以虽然相似但不同假如按正态分布从单元 i 得出的一组数据是按的具体参数生成。下面细看2 种层级模型在分析跑手数据时每一层有那些假设。模型 1假定 每位跑手的时间(Y) 与 年龄(X) 的回归方程 斜率不变但截距会不同。第一层上面DAG图的最底下一层分析每位跑手j的数据变化假定每位的速度和他的年龄有以下的线性关系(1) i某跑手的i轮数据~这层描述每位跑手j完成时间与年龄的关系。上面公式{2)假定时间分布是按跑手j 的时间平均值正态分布。是跑手j的时间平均值是依据上面回归公式(1) 代入跑手的年龄X , 估算出。这估算公式依赖以下 3 个参数跑手J回归方程的截距 (Y intercept) 各跑手的截距都不同跑手J回归方程的截距 (slope)假定各跑手都一样每位跑手回归方程完成时间组内部数据变化的标准差后面会介绍如何设定这通用参数的 先验估算值。第二层是针对各跑手之间的关系- 在回归方程里不同跑手间的差异。这模型假设只是截距有变化。假定按正态分布~ 所有跑手总体(population)的通用(global)截距平均值总体不同跑手之间截距分布的标准差从下图看到每位跑手的斜率都相同但截距平均值是并按标准差成正态分布最顶层要制定总体的通用先验参数 从36位跑手样本数据看到完成时间范围是每英里8-12分钟所以整个十英里赛事的的完成时间是80-120分钟所以用平均值100标准差10 大部分跑手的完成时间都是按年递升但斜率多少就不太确定估计范围是每年按年递升0.5-4.5分钟所以我们就选平均值2.5分钟标准差1 对不同跑手之间的差异和每位跑手每年完成时间的偏差都没有概念所以我们就挑选一些弱的先验参数假设。最终得出以下的模型输入。~;~~~~~模型 2假设每位跑手的回归方程除了截距会变化斜率也会变化下面 右图代表 模型 2 中图代表 模型 1斜率不变 左图假设每位跑手都类似包所有36位的数据一起分析也可以用同样方式得出模型输入但比以前的模型复杂多了:之前的模型有40个参数这个新模型有78个参数里面包括36个关于跑手的截距36个关于跑手的年龄斜率6个通用参数()所以这个模型跑下来的时间起码要半个小时前面的层级模型约十分钟内可以跑完。比较以上两模型上图黑线是实际值浅蓝色是预测值从上图看到模型1和模型2的预测比最左面的图(complete pooled model)更贴近实际最左图把所有跑手的数据汇总一起得出1条回归方程所以只考虑模型1或2。比较模型1与模型2从上面的预测总结看到模型1和模型2的偏差分别是2.63和2.53分钟等同0.46和0.44个标准差最右面那列是有多少实际数据落在模型预测范围的95%区间模型1和模型2都是0.973落在50%区间的模型1是0.6865模型2是0.7027。从以上比较看到模型1和2的预测能力接近但因为模型2比模型1复杂所以最终挑选模型1。使用模型1预测例子上图是跑手1和10的历史数据记录。模型除了可以预估他们未来到61岁时的完成时间更可以一位新手Miles到61岁时的时间。从上图看到新手Miles因为缺乏历史数据参考的预测范围比1 或10 都宽与质量经理 QnA经理: 怎样能用于我们软件开发项目做预测我我初步看了你们的项目数据绝大部分项目组数据都是每轮迭代逐步完善与上面介绍绝大部分跑手的完成时间都是按年递升类似。所以应该可以直接套用程序来分析你们软件开发项目数据。当成跑手完成10英里的实践时间分钟便可以把项目组数据输入程序便能出结果。10英里长跑迭代开发质量分组跑手项目组X年龄迭代轮次Y完成时间分钟返工工作量人时/迭代规模功能点客户验收缺陷率所以你们可以简单地用上表把项目返工数据替代跑手完成时间分析建立模型预测新一伦迭代的结果也同样用项目客户缺陷密度数据分析建预测模型。补充:刚刚说整个程序完全不用修改不正确实际上既需要按项目组的数据修改两组数值共4个数字但其他部分完全可以用复用。经理: 我几乎毕业后都没有再写过程序了,估计难以用上。我: 因为程序已经写好并可以用来分析跑手数据所以你只需要按我们的安装说明手册使用我们提供的U盘。里面已经安装好环境你只需要把数据换成电影程序读得到他会自动跑给你结果结果给出。 在跑程序之前以及需要依据实际数据的范围计算处两个线系数的平均值和标准差。 程序率本来的数字改过来就可以了其他序的内容完成保持不变。在前面介绍过要对顶层制定通用参数依据数据的范围和趋势至正两个先验系数的平均值和标准差因为样本数据变了 对应先验参数也要对应修改。上面是需要按数据调整通用先验参数的代码截图例如上图的 100 和 10 是对应模型1里~100 是数据的平均值 10 是标准差。下一行的 2.5 和 1 是对应模型1里~2.5是斜率的平均值 1是标准差。经理: 可否举例说明我看你们过去几个月的项目迭代数据绝大部分的项目的客户缺陷密度都是逐步往下降。可以发你刚辅导另一家公司脱敏后分析。两份报告针对返工、针对客户缺陷的输出分析图表与跑手分析类似。请看看能否同样用于你们的项目建立项目预测模型.详见附件2经理: 程序用什么语言需要什么环境我: 程序用R语语言加上要下载一些贝叶斯程序包。 R是针对数据分析的开源程序我们通常在Linux环境运行比较稳定。例如我们现在用的是Debian 12经理: 听起来在很多场景都可以用层级模型分析 反问有什么情况不适合使用我: 如果样本数据已经包括总体的各种可能抽样 把分组编成预测变量(predictor)更合适。例如想分析spotify数据判断其中唱中文歌的歌手的受欢迎程度得分如果数据样本已经包括所有中文歌的歌手便可以把歌手作为预测变量依据她以往歌曲的得分预测她新歌的得分不需要使用层级模型来分析。但如果某次抽样调查从某个社区随机抽样了37所学校做调研便可以用层级模型分析让分析结果不仅仅适用于有已经被抽样的37所学校也可以广泛预计区域内没有被抽样的的学校。好比 用层级模型分析10英里跑手的速度可以用于预测36位跑手以外某47岁新手首次完成时间。附件1恐龙化石数据分析 [2]收集了20组恐龙化石,里面包括4类恐龙专家分析每一组化石能估计恐龙的年龄和体重希望从这些数据估计每类恐龙的生长模型体重与年龄关系。 但每一类恐龙的数据很少最少的一类只有三组数据是否能使用贝叶斯层级模型从这20组数据看到生长都不是简单的直线线性回归模型 如果我们把X和Y都取对数看起来好像也可以用直线把点连起来模型一 指数增长模型(exponential growth model)假设每种恐龙的生长都是独立相互间没有关系如上面中间的DAG得出的模型图看到虽然数据上但波动范围很宽 原因是数据量太小。模型二基于模型一使用层级模型借用其他恐龙数据来提高预测的准确度(Borrow strength)如左边的DAG看到波动范围比模型一减少很多4种恐龙的方差相同 回顾方程参数按层级模型例如~,~,~模型三 按逻辑回归但模型一二不太合理因为生长模型估计年龄越大体重越高最终可以增长到无限大所以这种模型只能假定适用范围不能超过现有真实数据的上线才可以以用来做预测。针对模型一二的不足这模型是按逻辑回归增长x log (age)是0岁时的平均体重是全生命周期的总体重增长是物种成长了一半的岁数是增长速度系数为了保证0001.2.3.4.所以到了一定的年纪增长,体重增长会最后停下来直到死亡比较合理。 但如果还是按每一类恐龙化石的数据独立做预测出来的波动范围非常大 先验分布都是选无信息模型四针对模型三的不足使用层级模型类似模型二后验分布的偏差范围明显减少用DIC比较模型二和四的调整后DIC类似系数越低越好如果差异大于5才算明显但因模型四不会随着年龄增长体重一直提升而是回到了某水平后放缓然后停止增长较合理。modelDICpD模型一 log-linear unpooled 独立2925模型二 log-linear pooled 层级-39模型三 logistic unpooled 独立6441模型四 logistic pooled 层级-212DIC :- penalized deviancepD : - penalty2: 开发项目组数据分析结果下面是利用跑手层级模型程序对6个项目的迭代数据分析结果(里面2组通用先验参数已经按数据的范围做了调整)A分析迭代客户缺陷密度趋势项目缺陷率散点图模型1与实际的偏差模型2与实际的偏差模型1比较多有偏差比较模型1与2 的预测偏差模型1比2 偏差多了大概 50%模型1预测 项目8 6 和 11 全新项目没有历史数据下一轮迭代范围B分析迭代每功能点返工人时趋势项目散点图模型1与实际的偏差模型2与实际的偏差1与2 类似比较模型1与2 的预测偏差模型1比2 偏差多了接近 50%模型1预测 项目8 6 和 11 全新项目没有历史数据下一轮迭代范围参考资料1Johnson, A.A., Ott, M.Q. and Dogucu M. (2022).Bayes Rules!CRC Press2Reich, B.J. and Ghosh, S.K.(2019)Bayesian Statistical Methods CRC Press.