☰
从先验到后验:贝叶斯概率模型的工程实践
2026/10/28 7:59:31 网站建设 项目流程

1. 概率不是算出来的,是“猜”出来的——先搞懂贝叶斯在干嘛

前几年带一个做内容推荐的项目,评审会上有人拍桌子问:这个新用户只点了两次,你凭什么给他推这类内容?做算法的同事回了一句“因为他点了两次”,会议室里一半人没听懂,另一半人觉得他在敷衍。其实这句话背后就是贝叶斯思维的全部:你手上永远没有足够的数据,但你必须现在做一个决定,于是你只能把“已有的先验判断”和“新来的这点证据”按可信度加权,得出一个当下最合理的结论,然后等下一批数据来了再改。

我把这套东西拆成三部曲来讲:先验、似然、后验。听起来像统计学教材,其实它就是普通人做判断的流程,只不过写成了公式。任何一个做AI、做数据分析、做产品决策的人,如果不把这套概率思维吃透,很容易掉进两个坑:要么数据少的时候瞎自信,要么数据多的时候还在凭直觉。这篇文章面向的是刚入门机器学习、或者做了几年工程但对概率模型始终隔着一层的人,我会用手算数字、可跑的代码和实际项目里的踩坑记录,把这三部曲讲成人话。

2. 第一部曲:先验——动手之前,你手里得先有张底牌

2.1 先验到底是什么:它是你还没看数据时的“最佳猜测”

先验概率,说白了就是在看新数据之前,你对某件事的信念有多强。注意这个词——“信念”,不是“事实”。它允许你不确定,允许你只是模糊地觉得“大概在这个范围”。这是贝叶斯派最被频率派诟病、也是它最实用的地方。

举个生活场景。你要判断一个从没接触过的用户会不会点击你的推送。你完全不了解他,但你知道整个平台的点击率长期在 20% 左右。那么“这个用户点击的概率约为 20%”就是一个合理的先验。它没有任何关于这个人的具体信息,却是你在信息真空中唯一能拿出手的判断。

这里有个关键点很多人想不通:先验不是玄学,它其实是历史数据的浓缩。平台的 20% 点击率不是拍脑袋来的,是过去几百万次曝光统计出来的。你只是把这批历史数据的结论,借给了眼前这个数据为零的新用户。所以“拍脑袋定先验”和“用历史数据定先验”是两回事,前者叫主观臆断,后者叫经验迁移。

在工程上,先验还有一个更实用的作用:它让模型在数据稀少的时候不至于失控。一个从没被点击过的内容,纯频率计算下点击率是 0,模型就再也不会推它,这叫“死锁”。先验的作用就是给每个新对象一个保底的起点,让它们都有机会被探索到。

2.2 先验怎么选:三种常见做法和它们的适用场景

先验的选择是贝叶斯建模里最考验功力的地方,我按“从保守到激进”排三种常见做法。

第一种,无信息先验。意思是“我什么都不知道,让数据自己说话”。比如做二项分布的参数估计时,用 Beta(1,1),也就是均匀分布,代表概率在 0 到 1 之间任何值都同等可能。这种先验在数据量大的时候完全没问题,因为数据会把先验淹没;但在数据量小的时候会带来麻烦,比如 Beta(1,1) 在观测到 1 次点击 0 次曝光之后,后验均值是 2/3,这个数字明显偏高,容易被业务方质疑“你凭什么给一个只出现过一次的东西 66% 的点击率”。

第二种,弱信息先验。这是我在实际项目里最常用的。做法是先验的“等效样本量”设得很小,比如 Beta(2,8),等效于“我假装已经看过 10 个样本,其中 2 个正例”。它的均值是 0.2,符合业务常识,但权重只有 10,一旦真实数据超过几百条,先验的影响就微乎其微了。这种先验既有兜底效果,又不会在高数据量时干扰结论,属于“能屈能伸”。

第三种,强信息先验。等效样本量设到几百上千,通常用在大规模历史数据已经非常可靠、而新场景数据极其稀缺的迁移场景。比如从成熟业务迁移到新业务线,把老业务的参数分布直接拿过来当先验。这种做法一旦先验设错,模型会顽固地错很久,因为新数据要积累到很大规模才能把它扳回来,所以用之前一定要做敏感性分析。

先验类型典型参数(Beta分布)等效样本量适用场景风险
无信息先验Beta(1,1)2数据充足、探索性分析小样本下估计偏激
弱信息先验Beta(2,8)10通用业务场景、冷启动先验方向设反会轻微拖累
强信息先验Beta(40,160)200跨场景迁移、极稀疏数据先验错误时纠偏成本高

选完类型还要选“形状”。二项分布用 Beta、多项分布用 Dirichlet、正态分布用正态-逆伽马,这些是共轭组合,后面会讲到为什么工程上特别偏爱它们。用非共轭先验不是不行,但后验没有解析解,只能靠采样,计算成本会上去一个量级。

注意:先验的均值重要,但“宽度”同样重要。同样均值 0.2,Beta(2,8) 的 95% 区间大概覆盖 0.03 到 0.45,而 Beta(20,80) 只覆盖 0.13 到 0.28。前者表示“我相信大概在 20% 附近但很不确定”,后者表示“我比较确信就在 20% 附近”。这两个先验在数据量少的时候给出的结论差别很大。

2.3 实操:给一个转化率装上先验

我们拿一个具体场景走一遍。某内容平台要评估一个新创作者的内容点击率。按平台大盘数据,长期点击率约 20%,波动比较大。我选 Beta(2,8) 作为先验,等效 10 个样本、均值 0.2、区间够宽,符合“大盘差不多这个数但我对这个作者一无所知”的处境。

用 Python 把这个先验画出来看一眼,这一步别省,很多人直接跳到建模,结果先验形状和直觉不符都不知道:

import numpy as np from scipy import stats alpha0, beta0 = 2, 8 dist = stats.beta(alpha0, beta0) print("先验均值:", alpha0 / (alpha0 + beta0)) print("先验标准差:", round(dist.std(), 4)) print("95%区间:", np.round(dist.interval(0.95), 3)) print("等效样本量:", alpha0 + beta0)

输出是均值 0.2、标准差约 0.115、区间约 [0.035, 0.44]、等效样本量 10。区间宽度接近 0.4,说明这个先验很“软”,对数据几乎没有约束力。

这就是第一部曲的完整产出:一个分布,不是一篇文章里说的那个“点估计”。贝叶斯的第一个思维转变,就是把“一个数”换成“一个分布”。你不再说“点击率是 20%”,而是说“点击率大概率在 20% 附近,但也可能在 5% 或 40%”。这个转变看着小,后面所有的好处都从这里来。

3. 第二部曲:似然——新来的证据,到底有多“硬”

3.1 似然在算的是“如果假设成立,这数据出现的可能性”

似然这个词把很多人卡住了,其实它问的是一个非常朴素的问题:如果点击率真的是 p,那我观察到这批数据的可能性有多大?

注意它和概率的区别。概率是“已知参数,问数据出现的可能性”;似然是“已知数据,反过来问不同参数下这批数据的可能性”。方向的翻转就是似然的核心。公式上,二项分布的似然是L(p) = C(n,k) * p^k * (1-p)^(n-k),前面的组合数在求最大值时是常数,可以丢掉,所以实际计算只看后面的部分。

似然是三部曲里唯一真正“看数据”的环节,它的分量完全由数据量决定。这个特性带来一个非常好用的直觉:数据量就是证据的硬度。10 条观测和 10000 条观测,即使正例比例一样,似然函数在参数空间里的“尖锐程度”完全不同,前者是一个胖馒头,后者是一根针。

实际项目里我经常用一个粗暴但有效的判断标准:当新样本量少于先验等效样本量的 3 倍时,先验的影响不可忽略,必须显式讨论;超过 10 倍,先验基本可以认为是无关项了。这个判断不精确,但能挡住大部分“先验设错导致结论错误”的事故。

3.2 数据量决定话语权:手算一组对比

我们来做两组手算,看清楚先验和似然是怎么争话语权的。

场景 A:新作者,曝光 10 次,点击 1 次。先验 Beta(2,8)。

似然正比于p^1 * (1-p)^9。后验参数就是把先验的 α、β 分别加上成功和失败次数:α = 2 + 1 = 3,β = 8 + 9 = 17,后验是 Beta(3,17)。

后验均值 = 3 / 20 =0.15。而纯频率派的估计是 1/10 =0.10,先验均值是 0.20。后验落在两者之间,偏向数据一侧但明显被先验托住。可以用加权算一下验证:先验以 10 个等效样本的权重说“0.2”,数据以 10 个样本的权重说“0.1”,加权平均是 (0.2×10 + 0.1×10) / 20 = 0.15,完全吻合。

场景 B:老作者,曝光 1000 次,点击 120 次。同一个先验 Beta(2,8)。

似然正比于p^120 * (1-p)^880。后验是 Beta(122, 888),均值 = 122 / 1010 ≈0.1208。纯频率估计是 0.12,先验均值是 0.20,后验几乎贴着数据走,先验的贡献只有 10 / 1010 ≈ 1%。

同一套先验,同一个公式,因为数据量差了 100 倍,结论的“归属”完全不同。这就是似然的威力:它不辩论对错,它只比拼证据量。你在数据少的时候骂模型“受先验影响太大”,其实是骂错了对象,真正的问题是你给的数据太少。

顺手把区间宽度也算出来,这组数字我经常在评审会上用来堵“你这结论靠谱吗”的问题。Beta(3,17) 的方差是αβ / ((α+β)²(α+β+1))= 3×17 / (400×21) ≈ 0.00607,标准差约 0.078,95% 区间大概覆盖 [0.04, 0.31],宽得能装下半个业务判断。Beta(122,888) 的方差约 0.000105,标准差约 0.0103,95% 区间收窄到 [0.10, 0.14]。样本从 10 涨到 1000,区间宽度缩了将近 8 倍,这个量级关系(宽度大致按样本量平方根倒数缩小)在估算实验样本量时非常有用。

3.3 实操:把似然写进代码,并且检查量纲

似然最容易出错的地方是对数似然溢出。样本一多,p^k * (1-p)^(n-k)直接下溢成 0,取对数之后变成负无穷,整个优化就废了。所以工程上永远写对数似然,而且用累加而不是累乘。

import numpy as np def log_likelihood(k, n, p): p = np.clip(p, 1e-12, 1 - 1e-12) # 防止 log(0) return k * np.log(p) + (n - k) * np.log(1 - p) for k, n in [(1, 10), (120, 1000)]: grid = np.linspace(0.01, 0.6, 5000) ll = log_likelihood(k, n, grid) mle = grid[np.argmax(ll)] print(f"k={k}, n={n} -> MLE={mle:.4f}")

两行输出分别是 0.1 和 0.12,和手算一致。这里加np.clip是必须的,业务代码里 p 被其他模块改坏成 0 或 1 的情况我见过不止一次,一个对数就变成-inf或者nan,然后整个训练静默地跑完,指标难看但没人知道原因。

另外提醒一句,似然函数的最大值点(MLE)不等于后验的众数,也不等于后验均值。在 Beta 二项这一族里,后验众数是(α-1)/(α+β-2),后验均值是α/(α+β),只有参数很大的时候这三个才靠到一起。小样本下随便挑一个用,结论能差出几个百分点。我一般业务上报数用后验均值,因为它对损失函数更友好,做区间估计和决策时也更好推。

4. 第三部曲:后验——把信念迭代成结论

4.1 为什么共轭先验是工程上的大杀器

把先验和似然乘起来再归一化,就得到后验分布。理论上这件事永远能做,实际上如果没有解析解,就得靠马尔可夫链蒙特卡洛采样,一次推断可能要跑几分钟甚至几小时,业务场景根本等不起。

共轭先验解决的正是这个问题:选一个和似然“同族”的先验,乘出来的后验还是同一族,只要更新两个参数就行。Beta 配二项分布、Dirichlet 配多项分布、正态配正态,这三对覆盖了日常八成的场景。上面场景 A 里,从 Beta(2,8) 加上 1 次成功 9 次失败,直接得到 Beta(3,17),整个更新就是两次加法,没有任何积分运算。

这就是为什么老工程师听到“贝叶斯”不慌,因为大部分时候它就是一个加减法。真正的计算复杂度出现在非共轭场景,比如逻辑回归的贝叶斯版本、深度模型的后验推断,那时候才需要变分推断或采样,工程代价完全不同。

不过共轭也有代价:它限制了你对先验形状的表达能力。Beta 分布只能表达单峰的、两端可以鼓也可以瘪的形状,如果你的真实先验是双峰的(比如“这个作者要么是爆款体质要么是扑街体质,中间地带很少”),Beta 表达不了。这种时候要么接受近似,要么上采样,没有第三条路。

4.2 一次更新不够,要让它一直滚动

贝叶斯最漂亮的性质是可增量更新:今天的后验,就是明天的先验。这意味着你不需要保存全部历史数据,只需要维护一组参数,每条新数据来了更新一次,内存占用是常数。

这个性质在流式场景里价值巨大。某内容平台做实时点击率预估,如果把过去 30 天的原始日志全部存下来重算,存储和计算都吃不消;但如果维护一个 Beta 参数对,每次曝光点击就做α += click, β += (1 - click),成本几乎为零,而且数学上等价于用全量数据算出来的结果。

class BetaTracker: def __init__(self, alpha=2.0, beta=8.0): self.alpha = alpha self.beta = beta def update(self, clicks, impressions): self.alpha += clicks self.beta += impressions - clicks def mean(self): return self.alpha / (self.alpha + self.beta) def sample(self, size=1): return np.random.beta(self.alpha, self.beta, size) tracker = BetaTracker() tracker.update(clicks=1, impressions=10) print("第一次更新后均值:", round(tracker.mean(), 4)) # 0.15 tracker.update(clicks=119, impressions=990) print("累计更新后均值:", round(tracker.mean(), 4)) # 0.1208

注意这里我用了sample()这个方法。Thompson 采样就是靠它工作的:给每个候选内容采样一个点击率,选采样值最高的推出去。数据少的内容采样方差大,偶尔会采到高值,于是获得探索机会;数据多的内容采样稳定在真实值附近,稳稳吃 exploitation 的收益。整个探索-利用平衡不需要调任何超参,这是我见过最优雅的方案之一。

还有一个实践细节:滚动更新的参数要设遗忘机制。用户兴趣会漂移,三个月前的点击行为和今天关系不大。常见做法是每次更新前先把 α、β 乘一个衰减系数(比如 0.999),或者干脆按时间窗口重置。不设遗忘,模型会对老数据过度自信,新趋势反应迟钝,这个坑我在两个项目里都踩过。

4.3 实操:三行代码跑完一轮完整的贝叶斯更新

把三部曲串起来,完整的流程其实就这么短:

import numpy as np from scipy import stats prior = stats.beta(2, 8) # 第一部曲:先验 data = {"clicks": 1, "impressions": 10} # 第二部曲:证据 post = stats.beta(2 + data["clicks"], 8 + data["impressions"] - data["clicks"]) # 第三部曲:后验 print("后验均值:", round(post.mean(), 4)) print("后验95%区间:", np.round(post.interval(0.95), 3)) print("后验概率 P(p > 0.15):", round(1 - post.cdf(0.15), 4))

最后那行1 - post.cdf(0.15)是我最推荐大家养成习惯的输出。它回答的不是“点击率是多少”,而是“点击率超过 15% 的可能性有多大”。前者是一个点,后者直接对应决策。业务方问“这个作者能不能进推荐池”,你回“有 52% 的概率点击率高于 15%”,比回一个 0.15 有用得多,因为它把不确定性也交代清楚了。

顺带说一下在线 A/B 测试,现在很多团队用它替代固定样本量的显著性检验。核心思路就是把上面这段代码跑在两个实验组上,每来一批数据更新一次后验,然后直接算“B 优于 A 的概率”。这个概率是贝叶斯框架天然给出的,不需要 p 值那套绕来绕去的解释,业务方一听就懂。当然它也有争议,比如频繁查看会推高假阳性,所以实践里一般会加一个最小样本量门槛和一定的查看频率限制。

5. 贝叶斯思维在AI系统里的四个真实落点

5.1 文本分类:拉普拉斯平滑就是最朴素的先验

朴素贝叶斯是很多人学的第一个分类器,也是最多人“用完就忘”的模型。但它里面的平滑技巧,恰恰是贝叶斯思维最直白的体现。

问题出在零概率上。假设训练集里“免费”这个词在正常邮件中出现过 2 次,在垃圾邮件中出现过 30 次,词表大小是 5000。不加平滑的话,P(免费|正常) = 2/900 ≈ 0.0022,看起来没问题。但如果某个词在正常邮件里一次都没出现过,条件概率就是 0,做连乘的时候直接把这个类别的概率清零,一封正常邮件因为一个生僻词就被判成垃圾邮件。这是典型的“没见过就否定”,和贝叶斯思维完全相反——没见过只能说明证据不足,不能说这件事不可能。

加一平滑的做法是给每个词的计数都加 1,分母加上词表大小 V:

def smoothed_prob(count, total, vocab_size, alpha=1.0): return (count + alpha) / (total + alpha * vocab_size) print(round(smoothed_prob(2, 900, 5000), 6)) # 0.000508

这里的alpha就是先验的“伪计数”,alpha * vocab_size就是先验的等效样本量。当 alpha=1、词表 5000 时,等效样本量是 5000,比真实样本 900 还大,说明这个先验很强,会把所有词的概率往均匀分布拉。这也是为什么实际项目中词表一大,平滑就要调小,或者改成按词频分层的平滑策略。

还有一个常被忽略的点:类别先验。垃圾邮件通常只占全部邮件的 10%,如果模型忽略这个先验,用 0.5 的默认假设,就会把大量边界样本误判成垃圾邮件。把P(垃圾) = 0.1显式写进去,误报率能直接降下来一大截。这件事的本质就是:在不平衡数据上,先验不是可选项,是必选项。

5.2 推荐排序:冷启动和长尾数据怎么救

推荐系统是贝叶斯方法的重灾区,因为它的数据分布极度长尾:头部内容有几百万次曝光,尾部内容可能一次都没有。纯频率统计在这个分布上基本失效——零曝光的内容永远是零分,永远拿不到曝光,形成死循环。

贝叶斯平滑在这里的标准做法是:把每个内容的点击率估计成(clicks + α) / (impressions + α + β),其中 α、β 来自全局先验。这样零曝光内容的得分等于全局平均点击率,能拿到基础的探索流量;曝光少的内容得分会被拉向全局均值,不会因为一两次偶然点击就冲到榜首。这个公式在工业界被叫作 Wilson 区间的简化版或者贝叶斯平滑,名字不同,思想一样。

更进一步的做法是对先验本身做分层。全局先验太粗,可以按内容类目、按时段、按创作者等级分别建先验,然后对每个具体内容在它所属层级上做更新。这本质上是分层贝叶斯的简化版:上层参数从数据中学习,下层参数在上层先验的基础上更新。它解决的是“全局平均值不适用于所有子群体”的问题,比如知识类内容的点击率天然低于娱乐类,用一个全局先验会把知识类内容全部压死。

我实际做过的一个改动是给新内容一个“探索预算”:前 100 次曝光强制按 Thompson 采样分配,之后转为正常的后验估计。这个改动把新内容的次日留存提升了几个点,因为原来纯靠先验保底的那点流量根本不够模型收敛。

5.3 模型的不确定性:什么时候该说“我不知道”

大部分人训练模型只关心准确率,但线上系统真正需要的是知道自己什么时候不靠谱。一个 99% 准确率的模型,如果在 1% 的样本上给出了极端错误的置信度,那 1% 就足以毁掉用户体验。

贝叶斯框架天然能给出不确定性。后验分布本身就是不确定性的度量,方差大就意味着模型对这个样本没把握。在实操中,常见的手段有几种:蒙特卡洛 Dropout(推理时开 dropout 多次采样,看输出的分散程度)、深度集成(训多个模型看预测分歧)、以及直接对输出做概率校准。

这里的关键是区分两种不确定性:数据不确定性(这件事本身就有随机性,比如掷硬币)和模型不确定性(我没见过这类样本,所以我不知道)。前者无法消除,后者可以通过增加数据来降低。在实际系统里,前者应该被容忍,后者应该被拦截——比如转人工、或者降级到更保守的策略。

我在一个内容审核项目里用过这个思路:模型输出一个概率,同时输出一个置信区间宽度,宽度超过阈值的样本自动转人工复核。这比单纯卡一个概率阈值好得多,因为它能识别出“模型没见过这类内容”,而不只是“模型觉得这条有问题”。

5.4 概率校准与阈值选择:一个被严重低估的环节

模型输出的 0.8 到底意味着什么?如果它真的意味着“这类样本里有 80% 是正例”,那这个模型是校准好的;如果实际只有 50%,那这个 0.8 就是个毫无意义的排序分数。大量深度模型属于后者,因为训练时的损失函数只关心排序,不关心绝对数值。

校准的常规做法是画可靠性曲线(把预测概率分桶,对比每桶的实际正例率),或者直接算期望校准误差。发现偏差之后,用 Platt 缩放或者等渗回归做一次后处理,成本很低但收益明显。

校准之后才是选阈值。这里有一个非常有用的结论:如果误报成本是 C_fp、漏报成本是 C_fn,那么最优阈值是 C_fp / (C_fp + C_fn)。举个具体数:一条违规内容漏过的代价是 10(舆情风险和后续处理成本),误判一条正常内容的代价是 1(用户申诉和人工复核)。那么阈值应该是 1 / (1 + 10) ≈ 0.091,而不是默认的 0.5。

这个数字第一次算出来的时候团队里有人不信,觉得阈值太低会误伤一片。但实际推上去之后,总体损失确实下降了,因为漏报的代价本来就高一个数量级。0.5 这个阈值没有任何理论依据,它只是 Sigmoid 函数的中间点,可惜太多系统就卡在这。

6. 踩坑记录与高频疑问速查

6.1 七个最容易犯的错

第一个错,把先验当成了客观事实。先验是主观的,你选 Beta(2,8) 还是 Beta(20,80),结论会不一样。正确做法是做完之后换个先验再跑一遍,看结论稳不稳。不稳就说明数据不够,别急着上线。

第二个错,在数据充足时还死抱着强先验。数据都上万了,先验还设着等效样本量 500,模型会长期偏离真实分布。我的经验是让先验的等效样本量控制在总样本量的 5% 以内。

第三个错,忘记加平滑就上线。零概率在任何连乘模型里都是灾难,测试集覆盖不到不代表线上遇不到。

第四个错,用后验均值去做需要保守估计的决策。均值是期望,不是保底。做风控、做安全策略时应该用后验的下分位数,比如 5% 分位数,宁可保守。

第五个错,把似然和概率搞混。写代码时对似然函数求积分是没意义的,对后验求积分才有意义。这个错误在论文复现时特别常见。

第六个错,忽略数据的时间衰减。三年前的数据和昨天的数据在贝叶斯更新里权重一样,模型会对过时的规律过度自信。加衰减或者加时间窗。

第七个错,以为贝叶斯能凭空变出信息。先验再强也不能替代数据,它只能在你数据不足的时候给你一个不至于翻车的起点。

6.2 问题速查表

现象可能原因排查方向处理建议
新对象得分恒为 0缺少先验保底检查是否有平滑引入全局先验或分层先验
模型对老数据过度自信无遗忘机制看参数是否单调累加加衰减系数或时间窗重置
小样本结论波动巨大先验太弱或数据太少算后验区间宽度增大先验权重或延迟决策
概率输出与真实比例不符未做校准画可靠性曲线Platt 缩放或等渗回归
阈值 0.5 导致大量漏判未考虑代价不对称统计两类错误的成本按成本比重新计算阈值
后验计算出现 nan似然溢出或 log(0)检查是否取了对数用对数似然并对概率做截断
某类目整体被压制全局先验不适用分类目看点击率分布改分层贝叶斯

6.3 我自己踩过的两个坑

第一个坑是先验设得过于自信。有个项目里,我根据上季度的数据给某类内容设了 Beta(80, 320) 的先验,等效样本量 400。结果新季度内容风格大变,真实点击率从 0.2 掉到了 0.08,模型却花了将近两周、积累了上万条数据才纠正过来,中间这段时间的推荐效果一直很差。后来我改成每次换季度就把先验重置成弱信息版本 Beta(2,8),让数据自己重新说话。教训是:先验的强度应该和“你对这个分布有多确信”匹配,而不是和“你有多少历史数据”匹配。

第二个坑是在线更新没有做数值保护。增量更新的 α、β 只增不减,跑了大半年之后 β 涨到了千万量级,然后一次浮点精度问题导致后验采样出负数,整个推荐列表崩了半天。后来加了两个保护:参数超过阈值时按比例缩放回安全区间(等比缩放不改变均值,只降低精度要求),以及每次采样后做一次范围裁剪。这种事文档里不会写,但线上跑久了迟早会遇到。

最后分享一个我觉得最有效的练习方式:每天找一个自己做的判断,把它写成先验、证据、后验三段。比如“我觉得这家店好吃”,先验是“这条街的店平均评分 4.0”,证据是“我朋友说不错,他平时口味和我接近”,后验是“我估计 4.2,但不确定性还挺大,值得一试”。写上一两个月,你会发现自己看数据、看报表、看模型指标的眼光完全变了——不再执着于那个点估计,而是下意识地想问一句:这个数字背后,先验占了多少,证据占了多少。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询