数据的重要性毋庸置疑,但是如何让数据产生价值呢/p>
对一个全栈老码农而言,经常在开发或者研发管理的时候遇到各种预测、决策、推断、分类、检测、排序等诸多问题。面对“你的代码还有bug么这样的挑战,一种理智的回答是,我们已经执行了若干测试用例,代码中存在bug的可能性是百分之零点几。也就是说,我们对当前程序中没有bug的信心是百分之九十九点几。这实际上就是一直贝叶斯思维,或者说使用了贝叶斯方法。不论我们看到,还是没有看到,它都在那里,熠熠生辉。
如果预测当前软件有没有bug呢是要从贝叶斯定理看起。
贝叶斯定理的浅解
对老码农来说,贝叶斯定理的概率表达相对清晰,理解起来会相对容易。回忆一下我们学过的概率论,联合概率是满足交换律的,即:
对联合概率以条件概率展开:
从而得到:
简单的变换一下,得到:
大功告成,这就是神奇的贝叶斯定理。其中:
- P(B) 为先验概率,即在得到新数据前某一假设的概率;
- P(B|A) 为后验概率,即在观察到新数据后计算该假设的概率;
- P(A|B)为似然度,即在该假设下得到这一数据的概率;
- P(A)为标准化常量,即在任何假设下得到这一数据的概率。
还可以加点料,在计算P(A)的时候,可以用加法定理表示:
从而有:
其中B_ 是与B相反的事件。就测试与bug 之间的估算而言,《贝叶斯推断的思想》(http://www.jianshu.com/p/0a038974d48c)一文给出了贝叶斯推断的结果,其中就使用了这样的方法。
贝叶斯方法
贝叶斯方法是一个非常通用的推理框架,用客观的新信息更新我们最初关于某个事物的信念后,就会得到一个新的改进了的信念。通过引入先验的不确定性,允许了初始推断的错误,获得了更新的证据后,也没有放弃初始的推断,而是调整为更符合目前的证据。
但是,P(A|B) 和 P(B|A) 之类的经常让人混淆,@待字闺中的陈老师给出了理解的一个关键点,区分出规律和现象,就是将A看成“规律”,B看成“现象”,那么贝叶斯公式看成:
陈老师在《这的理解贝叶斯公式吗》和《又一个生活中的贝叶斯应用》给出了几个通俗易懂的例子,这里不再赘述。
回归到码农生活,我们在改善系统功能的时候,通常的一个手段是AB测试。AB测试是用来检测两种不同处理方式的差异化程度的一种统计设计模式,例如两个 站谁会带来更高的转化率,这里的转化可以是用户的购买、注册、或其他的行为。AB测试的关键点在于组别之间只能容许一个不同点。实验后的分析一般都是用假设检验完成的,例如均值差异检验或者比例差异检验,往往涉及Z分数或令人困惑的p值,而用贝叶斯方法则会自然的多。
对A,B两个 站的转化概率进行建模。转化率在0~1之间,可采用Beta分布。如果先验是Beta(a1,b1),且 观测到N次访问里有X次转化,那么此时的后验分布是Beta(a1+X,b1+N-X). 假设先验是Beta(1,1),等价于【0,1】上的均匀分布,则示例代码如下:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!