模型里只有你写进去的变量。Acme 的模型里没有「竞品促不促销」这一项,因为它从来没被记成字段。 这一篇讲怎么把「不知道」写进模型:不给点估计,给区间。 区间不是含糊,恰恰相反,区间宽度就是你对这件事掌握程度的度量。
上一篇比了两个模型,两个都只用了广告投入一个变量。这一篇补上那个被漏掉的变量。 「给区间」这个动作在第 7 章(主观概率)会变成正式的方法,在第 11 章(误差)会变成均方根误差。
一、模型里没有的变量
Acme 的模型只有广告投入。可销量还受一堆事影响:竞品促销、平台规则、天气、原料涨价。 这些事不是不重要,是「没被记成字段」。字段里没有的东西,回归跑一万遍也跑不出来。 所以要分清两件事:数据里没有,和世界上不存在。这两件事经常被当成一件。
二、不知道就写区间
竞品怎么动,你不知道。但你能给出三档:不动、小促、大促。 三档各配一个折扣系数,就能把「投 60 万」这件事的销量算成一个区间,而不是一个点。 点估计看起来精确,其实是在替你不知道的事编一个值。区间看起来含糊,其实把「我知道多少」说得更准。
三、区间宽度就是知识边界
如果竞品动作你能拿到情报,区间会窄;拿不到,区间就宽。 客户看到区间会问「为什么这么宽」。这是一个好问题——它在问你的知识边界在哪。 答得出,你就知道下一步该去补哪个信息。
| 信息状态 | 给什么 | 客户怎么用 |
|---|---|---|
| 竞品动作已知 | 一个点估计 | 直接排产 |
| 只有三档猜测 | 区间加情形表 | 按最坏情况留余量 |
| 完全不知道 | 只给方向 | 先做小规模试验 |
四、「我以为我知道」最贵
如果你确信竞品不会促销,上面那张三情形表就只剩第一行。 你会拿着最好的那个数去定生产计划、定人员、定预算。等到大促那季,库存堆成山。 事故报告里写得最多的一句是「当时认为」,不是「当时不知道」。不知道可以查,认为没法查。
五、模型该有的三层
确定的:销售额等于三个因子相乘。这是定义,不会错。 大概的:广告投入与销量正相关,但有上限。有大样本支持,方向可信,幅度待定。 不知道的:竞品动作、政策变化、突发事件。写不进公式,但必须写进报告。
三层缺一层,模型就会在某个方向上过度自信——而过度自信的代价,往往比无知高。
六、动手 Demo:把「你不知道的」写进模型
先用对数模型算出「投 60 万」的基准销量,再乘三个竞品情形系数,得到区间。 这段代码的重点不是算得多准,是最后那个区间是怎么来的。
import math
ad = [10, 20, 30, 40, 50, 60, 70, 80]
vol = [12.1, 18.4, 23.2, 26.2, 27.9, 28.3, 28.6, 28.5]
n = len(ad)
lx = [math.log(a) for a in ad]
mx, my = sum(lx) / n, sum(vol) / n
k = sum((x - mx) * (y - my) for x, y in zip(lx, vol)) / \
sum((x - mx) ** 2 for x in lx)
b = my - k * mx
base = b + k * math.log(60)
print('投 60 万的基准销量 %.1f 万件' % base)
for name, cut in (('竞品不动', 0.00), ('竞品小促', 0.08), ('竞品大促', 0.18)):
print('%-6s 被抢 %2d%% -> %.1f 万件'
% (name, cut * 100, base * (1 - cut)))
print('区间宽度 %.1f 万件' % (base * 0.18))
实跑输出:
--------------------------------------------------------------------
把「你不知道的」写进模型
--------------------------------------------------------------------
① 上一版的模型漏了一个东西
--------------------------------------------------------------------
模型 B 里只有广告投入一个变量。
可销量还受一件模型没写的事影响:竞品这个季度促不促销。
这件事在数据里没有,因为你从来没见过「竞品大促」这个字段。
② 不知道,就用区间
--------------------------------------------------------------------
竞品不动:销量按模型走
竞品小促:抢走约 8%
竞品大促:抢走约 18%
| 情形 | 被抢走 | 投 60 万时销量 | 差额 |
|---|---:|---:|---:|
| 竞品不动 | 0% | 28.1 | 0.0 |
| 竞品小促 | 8% | 25.8 | -2.2 |
| 竞品大促 | 18% | 23.0 | -5.0 |
所以投 60 万,能说的只有一句:销量落在 23.0 到 28.1 万件之间。
! 给一个点估计是撒谎,给一个区间才是诚实——区间的宽度就是你的知识边界。
③ 「你确信的观点」为什么最危险
--------------------------------------------------------------------
如果你确信「竞品不会促销」,上面这张表就只剩第一行。
你会拿着 28.1 万件去定生产计划,然后在大促那季库存堆成山。
危险的从来不是「我不知道」,是「我以为我知道」。
④ 心智模型该长什么样
--------------------------------------------------------------------
一个能用的心智模型至少要有三层:
确定的——销售额等于三个因子相乘,这是定义
大概的——广告投入与销量正相关,但有上限
不知道的——竞品动作、政策、天气、平台规则
第三层写不进去,前两层就是自说自话。
区间的最宽处由「最坏情形」决定。所以区间宽不宽,取决于你敢不敢想最坏。 这不是保守,是诚实:把最坏情形写出来,客户才有机会决定要不要为它留余量。
30 秒实验
- 把大促的影响从 18% 改成 35%,区间变成多少?
- 如果情报显示竞品一定小促,你会给客户一个点还是一个区间?为什么?
- 给三档各配一个概率(比如 0.6/0.3/0.1),算加权期望,看它落在区间的哪个位置。
常见误区
- 把不知道当成零:模型里没写的变量,默认影响就是零——这是最贵的默认值。
- 只报最坏情况:一直按最坏算,公司会失去所有进攻动作,同样是错。
- 区间给得太宽以求安全:宽到「从 0 到无穷」的区间等于没给。
- 把情景分析当成概率:三档情形不是三等分概率,除非你另外给了权重。
自测三问(点开对答案)
1. 为什么「数据里没有」不等于「不存在」? —— 字段是人为设的。很多真实影响因素从来没被记成字段,它们照样起作用,只是你没法回归出来。 2. 区间比点估计好在哪? —— 点估计会替你不知道的事编一个值;区间把这份不确定摆到台面上,客户能据此留余量或先做试验。 3. 心智模型三层里,哪一层最容易被漏掉? —— 第三层「不知道的」。因为它写不进公式,而人写报告时习惯只写算得出来的东西。模型搭好了,接下来要拿真数据去撞它。而第一次撞出来的结论,往往是错的——下一篇讲怎么往下再挖一层。
- ☐ (本篇完,下一篇 1.6 深入挖掘数据)