6.2 可视化分析:线图、季节图、箱线图


6.2 可视化分析:线图、季节图、箱线图

本节摘要:可视化是时序分析的第一道关卡。本节系统介绍 6 类核心图表——线图、季节图、滞后图、自相关图、箱线图、QQ 图——并讨论每类图回答什么问题、什么时候该用。

先看目标

阅读完本节,你应当能够:

  1. 列出 6 类时序可视化的名称和用途。
  2. 用 seaborn / matplotlib / statsmodels 各自画一遍。
  3. 解释"一张图回答一个问题"的工程原则——不为凑图而画图。

本节是建模前的"视觉体检"环节。读完后你拿到一段时序数据会先按"线图 → 季节图 → 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()

季节图回答的问题:不同周期位置的形状是否一致?有没有月份差异 / 星期差异?

四、滞后图(lag plot):y(t) vs y(t-1)

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 模型不一定合适。

五、自相关图(ACF / PACF)

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()
  • ACF:所有滞后阶的整体自相关。
  • PACF:在排除中间滞后影响后,"纯"自相关。

这两个图直接给 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("按星期几的销量分布")

盒图能同时展示:

  • 中心趋势(中位数)
  • 离散度(盒高)
  • 异常值(散点)

七、QQ 图:判断残差正态性

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 + 盒图"组合起来用最稳。

九、一个完整可视化诊断流程

拿到一段时序数据,按这个顺序看图:

  1. 线图:看整体趋势、异常点、缺失。
  2. 季节图:看是否有周/月/年季节性。
  3. ACF / PACF:看周期长度 + 自相关结构。
  4. 滞后图:看 AR 模型是否合适。
  5. 残差 QQ 图:建模后看残差是否正态。

每张图只读一个信息,五张图下来你对数据的理解就完整了。

本节要点回顾

  • 6 类核心图:线图、季节图、滞后图、ACF / PACF、盒图、QQ 图。
  • 一图一问题:不要用线图回答"周期长度",不要用滞后图回答"季节性"。
  • 诊断流程:线图 → 季节图 → ACF → 滞后图 → 残差 QQ 图。
  • 可视化优先:先看图,再看统计量,最后建模。
  • 下一节线索:6.3 深入 ACF / PACF 的解读,掌握 ARIMA 阶数选择的统计依据。

图:四种时间序列图

图:四种时间序列图


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U