📊 第7章 数据统计分析案例
📄 一句话概括

帕累托分析就三步:排序、算占比、算累计占比。 这次是 8 个品类(占 53.3%)贡献了 81.34% 的销售额。 帕累托不是精确的二八开。80% 是习惯值,不是定律。

📝 本章和前面几章的关系

上一篇讲单个指标怎么变,这一篇讲「谁在撑盘子」——贡献度分析。 用的还是那十五个品类的全年销售额,合计 1586 万元。

一、从排序到累计

第一步排序,第二步算占比,第三步算累计占比。三步,一条流水线。 文学 15.89%、少儿 14.38%、教辅 12.93%,三个加起来已经 43.19%。 累计到第五名生活,是 63.37%;累计到第八名外语,81.34%。

累计占比是这条分析的主线。单看占比只能排个序,看累计才知道「攒到哪一档」。

二、找到那条 80% 的线

从第一名往下加,第一次超过 80% 是第八名外语,累计 81.34%。 也就说:8 个品类,占全部品类的 53.3%,贡献了 81.34% 的销售额。 剩下 7 个品类合起来只有 18.66%。

这就是帕累托法则的实操版:少数关键,多数次要。 但注意,这里不是「两成挑八成」,是「五成多挑八成」。

三、二八开是个传说吗

帕累托法则说的是「少数原因造成多数结果」,不是「精确的 20% 和 80%」。 这次的数是 53.3% 对 81.34%,离二八开很远,但「少数关键」这个结论照样成立。 别把经验法则当数学定理。每份数据的分界点都得自己算。

如果十五个品类换成一百五十个,「两成挑八成」反而更常见——分母大了才接近。

四、这条线拿来干什么

挑重点:前 8 个品类要盯住,库存、陈列、推广都先保它们。 找长尾:后 7 个加起来不到两成,但每个都占着货架、占着人力。 砍不砍是决策,不是结论。数据只说「它们贡献小」,没说「可以砍」。

有的长尾品类是为了「一站式」才留着的,砍了会连带影响前八名。这种账,数据算不出来。

五、换个阈值试试

80% 是习惯值。想更狠就画 70% 的线,想更稳就画 90% 的线。 70% 的线落在第六名艺术(70.49%),只要 6 个品类。 90% 的线要拉到第十名考试(89.22%),还不够,得算到第十一名医学(91.99%)。

阈值一动,结论就变。所以报结果时必须写清自己用的是哪条线。

六、动手 Demo:贡献度分析:帕累托法则

排序、算占比、算累计,一次把十五个品类排完。 然后自动找出累计占比第一次超过 80% 的那一行。

import pandas as pd

CAT = ["文学", "少儿", "教辅", "科技", "生活", "艺术", "经管",
       "外语", "计算机", "考试", "医学", "法律", "农业", "体育", "其他"]
VAL = [252, 228, 205, 175, 145, 113, 92, 80, 68, 57, 44, 36, 28, 22, 41]

df = pd.DataFrame({"品类": CAT, "销售额": VAL})
df = df.sort_values("销售额", ascending=False).reset_index(drop=True)
df.index = df.index + 1
df["占比"] = (df["销售额"] / df["销售额"].sum() * 100).round(2)
df["累计"] = df["占比"].cumsum().round(2)
print(df.to_string())

k = df["累计"].ge(80).idxmax()
print("第 %d 名 %s,累计 %.2f%%" % (k, df.loc[k, "品类"], df.loc[k, "累计"]))
print("%d 个品类占全部的 %.1f%%" % (k, k / len(df) * 100))
print("剩下 %d 个只有 %.2f%%"
      % (len(df) - k, 100 - df.loc[k, "累计"]))

for line in (70, 90):
    k2 = df["累计"].ge(line).idxmax()
    print("画 %d%% 的线:要 %d 个品类,累计 %.2f%%"
          % (line, k2, df.loc[k2, "累计"]))

实跑输出:

--------------------------------------------------------------------
贡献度分析:帕累托法则
--------------------------------------------------------------------

  ① 从排序到累计
  --------------------------------------------------------------------
  帕累托分析就三步:排序、算占比、算累计占比。
  十五个品类合计 1586 万元,按从高到低排。

| 名次 | 品类 | 销售额 | 占比 | 累计占比 |
|---|---|---:|---:|---:|
| 1 | 文学 | 252 | 15.89% | 15.89% |
| 2 | 少儿 | 228 | 14.38% | 30.26% |
| 3 | 教辅 | 205 | 12.93% | 43.19% |
| 4 | 科技 | 175 | 11.03% | 54.22% |
| 5 | 生活 | 145 | 9.14% | 63.37% |
| 6 | 艺术 | 113 | 7.12% | 70.49% |
| 7 | 经管 | 92 | 5.80% | 76.29% |
| 8 | 外语 | 80 | 5.04% | 81.34% |
| 9 | 计算机 | 68 | 4.29% | 85.62% |
| 10 | 考试 | 57 | 3.59% | 89.22% |
| 11 | 医学 | 44 | 2.77% | 91.99% |
| 12 | 其他 | 41 | 2.59% | 94.58% |
| 13 | 法律 | 36 | 2.27% | 96.85% |
| 14 | 农业 | 28 | 1.77% | 98.61% |
| 15 | 体育 | 22 | 1.39% | 100.00% |


  ② 找到那条 80% 的线
  --------------------------------------------------------------------
  累计到第 8 名(外语)时,占比第一次超过 80%,是 81.34%。
  也就是说:8 个品类,占全部品类的 53.3%,贡献了 81.34% 的销售额。
  剩下的 7 个品类合起来只有 18.66%。
  ! 帕累托不是精确的二八开。这次是 8 个品类挑 53%,不是「两成挑八成」。

  ③ 这条线拿来干什么
  --------------------------------------------------------------------
  挑重点:前 8 个品类是要盯住的,库存、陈列、推广都先保它们。
  找长尾:后面 7 个品类加起来不到两成,但每一个都占着货架和人力。
  做完这一步,才谈得上「资源怎么分」。没有累计占比,讨论就只能靠感觉。
  ! 80% 是习惯值,不是定律。想更狠就画 70% 的线,想更稳就画 90% 的线,看砍到哪一刀合适。

ge(80) 是「大于等于 80」,idxmax() 找第一个 True 的位置, 两个一拼就是「80% 第一次被超过」那一行。 这套写法比手写循环可靠:阈值一改,结果自动跟着变,不用回去数行。 cumsum() 是累计求和,它沿着行一路加下去,这就是累计占比的全部秘密。

30 秒实验

  1. 把阈值改成 60,看要几个品类,再想想这条线还合不合理。
  2. 把最后两个品类合并成「其他」,重跑,看 80% 的线落在第几名。
  3. 想一想:如果十五个品类换成一百五十个,「两成挑八成」会不会更接近?

常见误区

  1. 把帕累托当精确的二八开:这次是 53.3% 挑 81.34%,差得远。
  2. 只算占比不算累计:单看占比只能排名,看不出「攒到哪一档」。
  3. 拿累计占比当砍人的依据:数据只说贡献小,没说能砍。
  4. 不写阈值就报结论:70%、80%、90% 三条线给三个答案。
自测三问(点开对答案) 1. 帕累托分析的三步是什么? —— 排序、算占比、算累计占比。 2. 这次 80% 的线落在第几名? —— 第八名外语,累计 81.34%。8 个品类占全部的 53.3%。 3. 为什么说帕累托不是精确的二八开? —— 它讲的是「少数关键」这个规律,具体比例每份数据都不一样,得自己算。

知道谁贡献大了,接下来问:两组人到底一样不一样。下一篇讲差异化分析。

相关笔记