贝叶斯定理简介
贝叶斯方法:所谓的贝叶斯方法源于解决一个“逆概”的问题。那什么是“逆概”呢?如“假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大”,这是我们熟知的“正向概率”。而一个自然而然的问题是:如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个(或好几个)球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例作出什么样的推测?这个问题,就是所谓的逆概问题。
贝叶斯解决这个问题的基本思想是:可以先假定一个概率(先验概率),根据不断发生的新事实,调整相似度,得到接近实际的概率(后验概率)。可以表述成:后验概率 = 相似度*先验概率。贝叶斯网络则是这种思想的应用。
本文讨论了在一个故障背景下,根据历史数据,使用贝叶斯网络建立系统故障模型的过程。
系统故障背景
针对过往系统故障数据,引起系统故障的原因有系统缺陷、人为操作两大类。对于系统缺陷,有80%的缺陷能够在QA阶段发现,20%的缺陷会遗留到生产环境。人为操作在90%的情况下是没问题,10%会发生操作失误。当系统有缺陷,若是操作失误,系统发生故障的概率为90%;操作不发生失误时,系统发生故障的概率为70%。当系统没有缺陷,若是发生操作失误,系统发生故障的概率为20%;若是没有操作失误,系统发生故障的概率为10%。其他引发故障的原因未知。
系统故障模型
根据背景,我们可以将引发故障的情况使用以下形式化的模型进行表达:
系统发生故障的概率 = 各种条件情况下,系统故障的概率之和。
代码实现
概率:
某条件及其发生的概率:
一组条件下,事件发生的概率:
所有条件下,结果发生的概率:
故障网络模型:
根据历史数据,统计的概率:
运行模型,得出的系统故障概率(保留5位小数):0.23200
新的知识
随着新数据的更新,发现导致系统故障的原因还有一类:基础设施故障。基础设施发生故障的概率是0.001。当基础设施发生故障时,系统一定发生故障。重新建立系统故障模型如下:
概率描述:
代码实现:
更新概率数据:
更新模型的定义:
运行模型,得出的系统故障概率(保留5位小数):0.23277
进一步应用
除了不断有新知识的加入,更新模型之外。根据已建立的模型,我们也可以进行一些分析。
情况一:通过增强测试手段或者代码走查评审,系统缺陷的检出提高到了85%。运行模型可以得出系统故障的概率为0.20230。降低了0.0297,即降低了12.8%。
情况二:在情况一下,由于配置管理或者运营人员变动,操作人员是新手,导致人为操作失误的概率提升为0.15。运行模型可以得出系统故障的概率为0.20804。提升了0.00574,即提高了2.84%。
这样,根据不同的情况,随着新数据的不断出现,来预测系统发生故障的概率。
禅定
贝叶斯方法,需要大量计算 …… 已算晕。本文存在多处错漏之处。