本节摘要:可视化是时序分析的第一道关卡。本节系统介绍 6 类核心图表——线图、季节图、滞后图、自相关图、箱线图、QQ 图——并讨论每类图回答什么问题、什么时候该用。
阅读完本节,你应当能够:
本节是建模前的"视觉体检"环节。读完后你拿到一段时序数据会先按"线图 → 季节图 → ACF → 滞后图 → 残差 QQ 图"的顺序过一遍,再决定用什么模型。
很多分析师喜欢直接看统计量(ACF、ADF、相关系数),但忽略了眼睛是最强的模式识别器。一个明显的季节峰、趋势突变、异常点,肉眼 0.1 秒就能识别;而 ADF 检验只能告诉你"平稳或不平稳",没法告诉你"在哪个时间点变了"。
工程原则:先看图,再看统计量,最后建模。下面是 6 类核心图。
import pandas as pd import numpy as np import matplotlib.pyplot as plt rng = np.random.default_rng(0) n = 365 y = np.cumsum(rng.normal(0, 1, n)) + 50 s = pd.Series(y, index=pd.date_range("2024-01-01", periods=n)) fig, ax = plt.subplots(figsize=(10, 3)) ax.plot(s.index, s.values, lw=0.6) ax.set_title("线图:随时间变化")
线图回答的问题:序列随时间怎么变化?有没有突变、缺失、异常?
df = s.to_frame("y") df["month"] = df.index.month df["weekday"] = df.index.dayofweek # 月度季节图:12 张子图,每个月份一个 fig, axes = plt.subplots(2, 6, figsize=(12, 4), sharey=True) for m, ax in zip(range(1, 13), axes.ravel()): ax.plot(df[df.month == m].index.dayofyear, df[df.month == m]["y"]) ax.set_title(f"月份 {m}") plt.tight_layout()
季节图回答的问题:不同周期位置的形状是否一致?有没有月份差异 / 星期差异?
from pandas.plotting import lag_plot fig, ax = plt.subplots(figsize=(4, 4)) lag_plot(s, lag=1, ax=ax) ax.set_title("滞后 1 阶散点图")
如果数据点分布在对角线附近 → 强自相关。这是判断"AR 模型是否合适"的最快方法。如果散点呈云状 → 自相关弱,AR 模型不一定合适。
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf fig, axes = plt.subplots(1, 2, figsize=(10, 3.5)) plot_acf(s, lags=30, ax=axes[0]) plot_pacf(s, lags=30, ax=axes[1], method="ywm") plt.tight_layout()
这两个图直接给 ARIMA 的 p、q 选型。6.3 节会专门讲怎么解读。
import seaborn as sns df = s.to_frame("y") df["weekday"] = df.index.dayofweek fig, ax = plt.subplots(figsize=(8, 4)) sns.boxplot(data=df, x="weekday", y="y", ax=ax) ax.set_title("按星期几的销量分布")
盒图能同时展示:
from statsmodels.graphics.gofplots import qqplot resid = s.diff().dropna() qqplot(resid, line="45", fit=True)
QQ 图回答:残差近似正态吗?如果点大致落在 45° 线上 → 残差正态。这是 ARIMA 假设检验的一部分(ARIMA 假设残差为白噪声;许多变种还假设残差为正态)。
| 图 | 回答的问题 | 不该用它回答的问题 |
|---|---|---|
| 线图 | 序列随时间怎么变 | 周期长度 |
| 季节图 | 季节性是否一致 | 趋势方向 |
| 滞后图 | 自相关强度 | 季节性长度 |
| ACF | 周期长度 + 整体自相关 | 残差正态性 |
| PACF | AR 模型的阶数 | 季节性 |
| 盒图 | 中心 / 离散 / 异常 | 时间趋势 |
| QQ 图 | 残差正态性 | 周期结构 |
💡 关键直觉:每张图只该回答一类问题。把"线图 + ACF + 盒图"组合起来用最稳。
拿到一段时序数据,按这个顺序看图:
每张图只读一个信息,五张图下来你对数据的理解就完整了。
