同比跟去年同期比,环比跟上一期比,定比跟一个固定基期比。 三个指标的分子都是本期,差别全在分母。分母选错,结论就全错。 同比消除季节、环比消除滞后、定比消除基数,各有各的盲区。
上一篇是横向对比,这一篇是纵向对比:现在的自己跟什么时候的自己比。 数据用同一家书店 2024 和 2025 两年的月度销售额,单位万元。
一、三个词,三种分母
| 指标 | 分母是什么 | 用来看什么 |
|---|---|---|
| 同比 | 去年同期 | 长期增长,抵消季节 |
| 环比 | 上一期 | 短期变化,最灵敏 |
| 定比 | 固定的基期 | 累计幅度,一条线到底 |
分子都是「本期」,差别全在分母。分母选错,同一个数能算出三个结论。 月度数据看环比、年度数据看同比,这不是习惯,是周期长短决定的。
二、同比:2025 对 2024
2025 全年 1586 万元,2024 全年 1457 万元,整体同比涨 8.85%。 十二个月里十一个正增长,都在 9% 到 11% 之间,很稳。 只有 6 月同比是负的,-5.04%。2024 年 6 月卖了 119 万,2025 年 6 月只有 113 万。
这一个负数,比十一个正数都值得追——它说明某个月出了事。
三、定比:永远跟 1 月比
把 1 月的 108 万设成 100,后面每个月除以它再乘 100。 12 月的定比是 177.78,意思是比 1 月高了 77.78%。 定比的分母永远不变,所以一整列可以直接比大小,看谁离基期最远。
基期选谁很关键。这次选 1 月,正好是低点,于是后面十一个月全都「涨」。 换成 12 月当基期,同一份数据会变成「全线下跌」。数据没变,说法全反。
四、环比:跟上一期比
环比要有「上一期」。1 月的上一期是去年 12 月的 174 万。 所以 1 月环比是 -37.93%——看着吓人,其实是跨年造成的假象。 2 月环比 -11.11%,3 月 +22.92%,7 月 +25.66%,起伏很大。
环比最灵敏,也最容易被一个异常月带偏。单月暴涨暴跌先看它,长期走势别看它。 12 月环比 +14.29%,全年排第四高,年末旺季确实起来了。
五、三个一起看才完整
同一个 6 月:同比 -5.04%,环比 -9.60%,定比 104.63。 同比说「比去年同月差」,环比说「比 5 月差」,定比说「还是比 1 月高」。 三句话都对,只是回答的问题不同。只报一个,等于只让人看一个侧面。
习惯做法:同比看大势,环比看拐点,定比看累计走了多远。
六、动手 Demo:同比、定比与环比
两年的十二个月数据,一次把三个指标全算出来,摊成一张表。 重点看 6 月那一行:同比是唯一的负数。
import pandas as pd
MON = ["%d 月" % m for m in range(1, 13)]
S24 = [99, 88, 107, 101, 113, 119, 129, 126, 117, 132, 152, 174]
S25 = [108, 96, 118, 112, 125, 113, 142, 138, 129, 145, 168, 192]
df = pd.DataFrame({"月份": MON, "去年": S24, "今年": S25})
df["同比"] = ((df["今年"] - df["去年"]) / df["去年"] * 100).round(2)
df["定比"] = (df["今年"] / df["今年"].iloc[0] * 100).round(2)
prev = [S24[-1]] + S25[:-1]
df["环比"] = ((df["今年"] - pd.Series(prev))
/ pd.Series(prev) * 100).round(2)
print(df.to_string(index=False))
print("全年同比 %+.2f%%" % ((sum(S25) - sum(S24)) / sum(S24) * 100))
print("同比为负的月份:%s" % df.loc[df["同比"] < 0, "月份"].tolist())
print("12 月定比 %.2f,比 1 月高 %.2f%%"
% (df["定比"].iloc[11], df["定比"].iloc[11] - 100))
实跑输出:
--------------------------------------------------------------------
同比、定比与环比
--------------------------------------------------------------------
① 三个词,三种分母
--------------------------------------------------------------------
同比:跟去年同期比。环比:跟上一期比。定比:跟一个固定基期比。
三个指标的分子都是本期,差别全在分母。分母选错,结论就全错。
! 月度数据看环比,年度数据看同比。这不是习惯问题,是周期长短决定的。
② 同比:2025 对 2024
--------------------------------------------------------------------
2025 全年 1586 万元,2024 全年 1457 万元,整体同比 +8.85%。
| 月份 | 2024 | 2025 | 同比 |
|---|---|---:|---:|
| 1 月 | 99 | 108 | +9.09% |
| 2 月 | 88 | 96 | +9.09% |
| 3 月 | 107 | 118 | +10.28% |
| 4 月 | 101 | 112 | +10.89% |
| 5 月 | 113 | 125 | +10.62% |
| 6 月 | 119 | 113 | -5.04% |
| 7 月 | 129 | 142 | +10.08% |
| 8 月 | 126 | 138 | +9.52% |
| 9 月 | 117 | 129 | +10.26% |
| 10 月 | 132 | 145 | +9.85% |
| 11 月 | 152 | 168 | +10.53% |
| 12 月 | 174 | 192 | +10.34% |
十二个月里有 1 个月同比是负的,就是 6 月。
最惨的是 6 月,同比 -5.04%。
! 一个负数比十一个正数更值得追。先找出异常的那一个,再解释为什么。
③ 定比:永远跟 1 月比
--------------------------------------------------------------------
把 1 月当基期,设成 100,后面每个月除以它再乘 100。
| 月份 | 销售额 | 定比(1 月 = 100) |
|---|---:|---:|
| 1 月 | 108 | 100.00 |
| 2 月 | 96 | 88.89 |
| 3 月 | 118 | 109.26 |
| 4 月 | 112 | 103.70 |
| 5 月 | 125 | 115.74 |
| 6 月 | 113 | 104.63 |
| 7 月 | 142 | 131.48 |
| 8 月 | 138 | 127.78 |
| 9 月 | 129 | 119.44 |
| 10 月 | 145 | 134.26 |
| 11 月 | 168 | 155.56 |
| 12 月 | 192 | 177.78 |
12 月的定比是 177.78,意味着比 1 月高了 77.78%。
定比的分母永远不变,所以一整列可以直接比大小,看谁离基期远。
! 基期选谁很关键。这次选 1 月,正好是低点,所以后面十一个月全都「涨」。选 12 月就全跌。
④ 环比:跟上一期比
--------------------------------------------------------------------
环比要有「上一期」。1 月的上一期是去年 12 月,也就是 174 万元。
| 月份 | 上月 | 本月 | 环比 |
|---|---:|---:|---:|
| 1 月 | 174(去年 12 月) | 108 | -37.93% |
| 2 月 | 108 | 96 | -11.11% |
| 3 月 | 96 | 118 | +22.92% |
| 4 月 | 118 | 112 | -5.08% |
| 5 月 | 112 | 125 | +11.61% |
| 6 月 | 125 | 113 | -9.60% |
| 7 月 | 113 | 142 | +25.66% |
| 8 月 | 142 | 138 | -2.82% |
| 9 月 | 138 | 129 | -6.52% |
| 10 月 | 129 | 145 | +12.40% |
| 11 月 | 145 | 168 | +15.86% |
| 12 月 | 168 | 192 | +14.29% |
12 月环比 +14.29%,是全年第 4 高的环比增速。
环比最灵敏,也最容易被一个异常月带偏。单月暴涨暴跌先看环比,长期走势别看它。
! 同比消除季节、环比消除滞后、定比消除基数。三个指标各有各的盲区,别只报一个。
prev = [S24[-1]] + S25[:-1] 这一行是关键:1 月的上一期不在今年,在去年 12 月。
漏了这一步,1 月的环比就变成空值或者 0,看起来像「没变化」,其实是没算。
同比、环比都是百分比,定比是「指数」。定比不做减 100 的处理,它本身不是涨跌幅。
30 秒实验
- 把定比的基期改成 12 月,看十二个数变成什么样。
- 把环比的第一项直接设成 None,看表里会打出来什么。
- 想一想:如果只看环比,你会怎么描述 1 月?这个描述公平吗?
常见误区
- 把定比当涨跌幅:定比 177.78 是「涨了 77.78%」,不是「涨了 177.78%」。
- 1 月环比直接空着:上一期是去年 12 月,得把它接上。
- 只用环比看长期趋势:单月波动会盖住真正的走势。
- 基期随便挑:挑低点就是全线涨,挑高点就是全线跌,同一份数据两种故事。
自测三问(点开对答案)
1. 同比、环比、定比的分母分别是什么? —— 去年同期、上一期、一个固定基期。分子都是本期。 2. 为什么 1 月的环比要接去年 12 月? —— 环比的「上一期」是时间上的上一期,1 月的上一期就是去年 12 月。 3. 定比 177.78 该怎么念? —— 比基期高了 77.78%。定比是指数,不是涨幅本身。增长算清楚了,接下来看贡献:哪些品类撑起了全盘。下一篇是帕累托。
- ☐ (本篇完,下一篇 7.3 贡献度分析:帕累托法则)