数据分析的第一步不是打开数据,是把委托方那句「帮我提高销量」翻译成一个能判对错的问句。 这一篇讲三件事:一句话缺什么、恒等式怎么找、拆到哪一层才算能算。 最后你会看到,Acme 真正的麻烦不是销量,是每单件数。
这是全书的第一篇,没有前置章节。 它给的是整本书的动作顺序:先定问题,再拆因子,最后才轮到算和画图。 后面每一章都会回到这个顺序——第 2 章用实验确认因果,第 3 章在约束里找最优, 第 10 章把关系写成一个方程,第 12 章把关系存进数据库。
一、一句话缺了什么
Acme 化妆品公司的首席执行官找到你,只说了一句:帮我提高销量。 这句话在日常对话里完全够用,但拿来做分析不行。它没说清四件事——
| 缺的东西 | 为什么必须有 | 缺了会怎样 |
|---|---|---|
| 对象 | 提高谁的销量 | 线上还是线下、彩妆还是护肤,动的地方完全不同 |
| 指标 | 用什么量 | 销售额、件数、毛利是三个数,优化的方向不一样 |
| 期限 | 多久见效 | 一个季度和一个财年,能做的事差一个量级 |
| 可动范围 | 我能碰什么 | 能改价却动不了配方,方案就完全不同 |
这四项不是礼节,是约束。分析就是在约束里找答案,约束没写清,答案就没有意义。
二、把名词换成指标
「销量」是个名词,不是指标。指标得能算出数来。 Acme 用三个数描述生意:客户数、每人每季购买次数、客单价。三个一乘,就是销售额。 这不是模型,是定义——任何一季的销售额都必然等于这三项相乘。 把委托里的名词换成指标,是第一步;把指标换成能拿到手的字段,是第二步。 Acme 的系统里这三项都有,所以这一步走得通。 要是换成「客户满意度」,那得先去做问卷,分析还没开始,数据采集先开始了。
三、为什么要先找恒等式
恒等式是一组「乘起来正好等于总量」的因子。找到它,你就有了一个不会漏项也不会重复的骨架。 好处有三个:拆开的每一块都能单独查;每一块的变化能加总回总量; 任何一块算错,乘起来就对不上总数,当场能发现。 这就是为什么有经验的人动手前先问「这个数是怎么来的」。答不上来,后面的拆解全是猜。
四、拆到能算为止
客单价还能再拆一层:客单价等于单件均价乘每单件数。 拆到这一层,问题的形状才露出来。Acme 两年里客户数涨了、次数也涨了,唯独客单价在跌; 而客单价里,单件均价几乎没动,掉的是每单件数。 于是「提高销量」变成了「为什么客户每单买的件数从 1.49 掉到 1.41」。 后一句能查:促销组合、货架陈列、套装是不是下架了。前一句不能查。
五、一个好问题的三个特征
判断手里的问题合不合格,看三条——
| 特征 | 意思 | 反例 |
|---|---|---|
| 有指标 | 答案是一个能算的数 | 「提升品牌形象」 |
| 有基线 | 知道现在是多少 | 「把件数提上去」——提到多少 |
| 可证伪 | 做完了能判对错 | 「加强客户黏性」——怎么算没做到 |
三条都过的问句,才值得你花两周去算。
六、动手 Demo:把「提高销量」问成一个能回答的问题
下面这段代码把 Acme 的八个季度数据摆开,先验证恒等式,再把三个因子各自的变化算出来。 注意最后那一步:客单价再往下拆一层,问题的落点就换了地方。
cust = [52000, 54000, 55000, 56000, 56500, 57000, 57200, 56800]
freq = [1.72, 1.75, 1.78, 1.80, 1.82, 1.84, 1.85, 1.86]
price = [131.0, 132.0, 133.0, 134.0, 130.5, 126.8, 123.2, 120.0]
sales = [c * f * p / 10000 for c, f, p in zip(cust, freq, price)]
print('两年合计 %.1f 万 / %.1f 万' % (sum(sales[:4]), sum(sales[4:])))
def avg(v, half):
return sum(v[half * 4:half * 4 + 4]) / 4.0
for name, v in (('客户数', cust), ('人均次数', freq), ('客单价', price)):
r = avg(v, 1) / avg(v, 0) - 1
print('%-6s %+6.1f%%' % (name, r * 100))
# 客单价再拆一层:单件均价 × 每单件数
print('2014 单件均价 %.1f' % (avg(price, 0) / 1.489))
print('2015 单件均价 %.1f' % (avg(price, 1) / 1.412))
print('件数变化 %+.1f%%' % ((1.412 / 1.489 - 1) * 100))
实跑输出:
--------------------------------------------------------------------
把「提高销量」问成一个能回答的问题
--------------------------------------------------------------------
① 委托原话与它的问题
--------------------------------------------------------------------
首席执行官:帮我提高销量。
这句话回答不了,因为它没说清三件事——
提高到多少?在什么时间内?允许我动哪些东西?
数据分析的第一动作不是算,是把这句委托改写成一个能判对错的问句。
② 先找到那个恒等式
--------------------------------------------------------------------
销售额 = 客户数 × 每人购买次数 × 客单价
这不是什么理论,是定义。任何一个月的销售额都必然等于这三项相乘。
| 季度 | 客户数 | 人均次数 | 客单价 | 销售额万 |
|---|---:|---:|---:|---:|
| 2014Q1 | 52,000 | 1.72 | 131.0 | 1171.7 |
| 2014Q2 | 54,000 | 1.75 | 132.0 | 1247.4 |
| 2014Q3 | 55,000 | 1.78 | 133.0 | 1302.1 |
| 2014Q4 | 56,000 | 1.80 | 134.0 | 1350.7 |
| 2015Q1 | 56,500 | 1.82 | 130.5 | 1341.9 |
| 2015Q2 | 57,000 | 1.84 | 126.8 | 1329.9 |
| 2015Q3 | 57,200 | 1.85 | 123.2 | 1303.7 |
| 2015Q4 | 56,800 | 1.86 | 120.0 | 1267.8 |
按恒等式重算一遍,两年合计:5071.9 万对 5243.3 万
和财务给的数一分不差——这个恒等式就是后面所有拆解的地基。
③ 三个因子各自往哪走
--------------------------------------------------------------------
| 因子 | 2014 平均 | 2015 平均 | 变化 |
|---|---:|---:|---:|
| 客户数 | 54,250 | 56,875 | +4.8% |
| 人均次数 | 1.762 | 1.843 | +4.5% |
| 客单价 | 132.50 | 125.12 | -5.6% |
④ 三个数乘起来,看是不是等于总量的变化
--------------------------------------------------------------------
1.0484 × 1.0454 × 0.9443 = 1.0350,也就是 +3.5%
总量的实际变化:+3.4%
! 两个数差了 0.1 个百分点。这不是算错——
上面乘的是「三个因子各自平均值之比」,而真实的总量比是「每月销售额之和之比」,权重不同,
所以只是近似相等。做数据的人必须知道自己在用哪一个。
⑤ 要是客单价没跌呢
--------------------------------------------------------------------
客户数和次数都在涨,光这两项就能带来 +9.6%
实际只涨了 3.4%,差的那 6.1 个百分点,全被客单价吃掉了。
⑥ 客单价再往下拆一层
--------------------------------------------------------------------
客单价 = 单件均价 × 每单件数
2014:单件均价 89.0 元,每单 1.489 件
2015:单件均价 88.6 元,每单 1.412 件
单件均价几乎没动(-0.4%),件数掉了 5.2%
! 真正的问题不是「提高销量」,是「为什么每单买的件数从 1.49 掉到 1.41」。
这一句才能回答:可以查促销组合、查货架陈列、查套装有没有下架。
输出里的 3.5% 和 3.4% 差了一个小数点后的数,这不是 bug。 前者是「三个因子各自平均值的比再相乘」,后者是「两年销售额之和的比」,权重不同,只是近似相等。 这类近似必须当场说清,否则读者下一次自己算,会发现对不上,然后怀疑整套方法。
30 秒实验
- 把 price 最后两个数改成 128 和 126,重算三个因子的变化,看总量的涨跌有没有翻过来。
- 把 freq 全部加 0.1,看销售额涨几个百分点——体会「次数」这个杠杆有多轻。
- 算一下:如果只把件数从 1.41 拉回 1.49,客单价能涨多少,销售额能追回多少。
常见误区
- 一上手就画图:图是给人看的,问题没定清楚,画出来的是好看的废纸。
- 把恒等式当模型:销售额等于三项相乘是定义,不解释任何因果;解释要靠后面的实验。
- 拆解重复计算:把「老客复购」和「客户数」同时放进一个加法式,同一笔钱算了两遍。
- 拿平均值直接相乘当精确值:本篇 3.5% 对 3.4% 就是例子,差多少要说出来。
自测三问(点开对答案)
1. 客户说「帮我提升客户满意度」,这句话缺哪几项? —— 缺指标(满意度怎么算)、缺基线(现在几分)、缺期限、缺可动范围。四项全缺。 2. 为什么先找恒等式,而不是先看数据分布? —— 恒等式给的是「不重不漏」的骨架。没有骨架,看到的分布不知道属于哪一块,也没法加总回总量。 3. 本篇最后把问题落到「每单件数」,这个落点合理在哪? —— 它是三个因子里唯一在跌的,而且再往下拆已经没有更细的字段了——落点必须落在一个能查的地方。问题定下来之后,客户的第一反应通常是「这不是我要的」。下一篇讲怎么把他的反馈拆成能干活的组块。
- ☐ (本篇完,下一篇 1.2 反馈、拆解与评估)