计算器没错,错在它只交了一个数。数一离开分析师的桌子,就会被人当成承诺。 客户不是一个人,是三类人:员工要依据、人事要解释、老板要预算。一个点估计一个都答不了。 一个预测必须写成「一个数 + 一个误差」。少一半,对方一定会自己补,而且补错。
第 10 章把回归线立起来了,误差 0.94 个百分点。第 11 章讲这个误差怎么用、怎么交出去。 这一章的技术部 60 条和第 10 章完全同一批(同种子、同公式),所以 0.94 这个数是接得上的。
一、电话是周一早上来的
人事把加薪计算器拿去用了两周,然后打来电话,语气很硬。 问题不是「算错了」。他们核对过,算出来的数和历史数据基本对得上。 问题是「算出来的数被人当真了」:有人拿着计算器给的百分数去找主管,说按你们的模型我该拿这么多。
主管说制度上没有这一档。两边都不觉得自己错,事情就卡住了。 一个模型出了这种事,通常不是精度问题,是交付方式的问题。
二、计算器到底给了什么
回头看交付物:一张两列的表。左边输入点数,右边输出一个百分数。 55 分给 5.64%,70 分给 6.98%,85 分给 8.33%。每一行都是孤零零一个数。 没有「大概」,没有「上下」,没有「这个数的可信程度」。
这就是点估计:一个数,把不确定性全藏起来了。 藏起来不等于不存在。它只是从交付物里挪到了别人的想象里,而别人想的方向通常对你有利。
三、客户不是一个人,是三类人
| 谁 | 他要什么 | 计算器给了他什么 |
|---|---|---|
| 员工 | 我该拿多少,凭什么 | 一个百分数,没有依据 |
| 人事 | 这套制度能不能对外解释 | 一个方程,没有边界 |
| 老板 | 明年预算要多少 | 只能一个个算,没有总额 |
同一份计算器,三类人拿去问三个不同的问题。它一个都没答好。 因为你只交了一个数,他们各自往里填了自己想要的解释。 这不是他们理解能力的问题,是交付物本身留了太多空白。
四、缺的那句话
缺的是:这个数有多准。 说「你会加 8.6%」是一句话;说「8.6%,上下浮动一个点,十次里有六次落在里头」是另一句话。 第二句话才让人知道该拿它干什么:谈预算可以,签合同不行。
第一句话听着更干脆,但它把判断责任推给了听的人——而听的人没有算过模型。 交付一个预测,等于交付一个数加一个误差。这不是谨慎,是完整。
五、先查那个 108 分的
闹得最凶的那位,点数填的是 108——比模型见过的最高分 95 还高。 他的数是怎么算出来的?这个问题比「计算器准不准」更要紧。 下一篇专讲这件事。它有个名字,叫外插。
六、动手 Demo:客户大为恼火:一个数被当成了承诺
把计算器的交付物原样摆出来:四行「输入 → 输出」。 再看三类客户各自拿它问什么问题,以及缺的那句话是什么。
S = [20261102]
def rnd():
S[0] = (S[0] * 1103515245 + 12345) % 2147483648
return S[0] / 2147483648.0
DATA = []
for i in range(60):
x = 40 + int(round(i * 55 / 59.0))
y = 1.2 + 0.085 * x + (rnd() - 0.5) * 3.2
DATA.append((x, round(y, 1)))
XS = [d[0] for d in DATA]
YS = [d[1] for d in DATA]
n = len(XS)
mx = sum(XS) / float(n)
my = sum(YS) / float(n)
m = sum((x - mx) * (y - my) for x, y in zip(XS, YS)) / sum((x - mx) ** 2 for x in XS)
b = my - m * mx
print("计算器的交付物:")
for q in (55, 70, 85, 108):
print(" 点数 %3d -> %.2f%%" % (q, b + m * q))
print()
print("模型见过的范围:%d ~ %d 分" % (min(XS), max(XS)))
print("108 分在里面吗:%s" % ("在" if min(XS) <= 108 <= max(XS) else "不在"))
实跑输出:
--------------------------------------------------------------------
客户大为恼火:一个数被当成了承诺
--------------------------------------------------------------------
① 电话是周一早上来的
--------------------------------------------------------------------
人事把加薪计算器拿去用了两周,然后打来电话,语气很硬。
问题不是「算错了」,是「算出来的数被人当真了」。
有人拿着计算器给的数去找主管,说「按你们的模型我该拿这么多」,主管说「制度上没有这一档」。
② 计算器到底给了什么
--------------------------------------------------------------------
| 输入的点数 | 计算器给的加薪幅度 |
|:---:|---:|
| 55 | 5.64% |
| 70 | 6.98% |
| 85 | 8.33% |
| 108 | 10.40% |
四行都是孤零零一个百分数,后面什么都没有。
没有「大概」,没有「上下」,没有「这个数的根据是什么程度」。
! 这就是点估计:一个数,把不确定性全藏起来了。
③ 客户不是一个人,是三类人
--------------------------------------------------------------------
| 谁 | 他要什么 | 计算器给了他什么 |
|---|---|---|
| 员工 | 我该拿多少,凭什么 | 一个百分数,没有依据 |
| 人事 | 这套制度能不能对外解释 | 一个方程,没有适用边界 |
| 老板 | 明年预算要多少 | 只能一个人一个人加,没有总额 |
同一份计算器,三类人拿去问三个不同的问题。它一个都没答好。
因为你只交了一个数,他们各自往里填了自己想要的解释。
④ 缺的那句话
--------------------------------------------------------------------
缺的是:这个数有多准。
说「你会加 8.6%」是一句话;说「8.6%,上下浮动一个点,十次里有六次落在里头」是另一句话。
第二句才让人知道该拿它干什么:谈预算可以,签合同不行。
! 交付一个预测,等于交付一个数加一个误差。少一半,对方一定会自己补,而且补错。
⑤ 先查那个 108 分的
--------------------------------------------------------------------
闹得最凶的那位,点数填的是 108——比模型见过的最高分 95 还高。
下一节专讲这件事:那个数是怎么被算出来的。
四行输出长得一模一样,看不出哪一行是可信的、哪一行是硬算的。 这就是点估计最大的问题:它把可靠和不可靠抹成了同一个样子。 最后两行是在自查范围。这一步几乎没人做,但它能挡住后面一半的麻烦。
30 秒实验
- 如果把交付物改成三列(预测值、下界、上界),三类客户的追问会分别变成什么?
- 有人说「我不要区间,给我一个数就行」时,你该怎么回?
- 想一想:为什么同一个数,越是被当成精确答案,用起来越危险?
常见误区
- 只交点估计:一个数看着干脆,实际上把不确定性转嫁给了不会算的人。
- 以为客户恼火是因为算错:多数时候他们恼火是因为「说好的事不算数」。
- 把三类客户当一类:员工、人事、老板要的是三种不同的东西。
- 道歉并承诺「下次算准点」:问题不在精度,在交付物缺了一半。
自测三问(点开对答案)
1. 计算器算错了吗? —— 没有。系数和历史上对得上。它的问题是只给了点估计,没给误差,于是被人当成了承诺。 2. 三类客户分别缺什么? —— 员工缺依据,人事缺适用边界,老板缺可以直接汇总的总额。三者都需要误差才能补上。 3. 为什么说「交付预测等于交付一个数加一个误差」? —— 因为不确定性和估计值是一体两面。 只给一个数,等于让别人替你假设误差,而他们必然往有利自己的方向假设。先说清楚那个 108 分的数是怎么来的。它是这一章所有麻烦的起点。
- ☐ (本篇完,下一篇 11.2 外插法惹的祸)