📈 第1章 数据分析引言
📄 一句话概括

模型里只有你写进去的变量。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 秒实验

  1. 把大促的影响从 18% 改成 35%,区间变成多少?
  2. 如果情报显示竞品一定小促,你会给客户一个点还是一个区间?为什么?
  3. 给三档各配一个概率(比如 0.6/0.3/0.1),算加权期望,看它落在区间的哪个位置。

常见误区

  1. 把不知道当成零:模型里没写的变量,默认影响就是零——这是最贵的默认值。
  2. 只报最坏情况:一直按最坏算,公司会失去所有进攻动作,同样是错。
  3. 区间给得太宽以求安全:宽到「从 0 到无穷」的区间等于没给。
  4. 把情景分析当成概率:三档情形不是三等分概率,除非你另外给了权重。
自测三问(点开对答案) 1. 为什么「数据里没有」不等于「不存在」? —— 字段是人为设的。很多真实影响因素从来没被记成字段,它们照样起作用,只是你没法回归出来。 2. 区间比点估计好在哪? —— 点估计会替你不知道的事编一个值;区间把这份不确定摆到台面上,客户能据此留余量或先做试验。 3. 心智模型三层里,哪一层最容易被漏掉? —— 第三层「不知道的」。因为它写不进公式,而人写报告时习惯只写算得出来的东西。

模型搭好了,接下来要拿真数据去撞它。而第一次撞出来的结论,往往是错的——下一篇讲怎么往下再挖一层。

相关笔记