本节摘要:时间序列是同一变量在多个等距或不等距时间点上的有序观测集合。它与横截面数据的核心差异在于"样本之间不独立"——今天的值携带着昨天的信息。本节给出形式化定义、三条本质差异清单,并用一个 60 天股价片段做现场演示。
阅读完本节,你应当能够:
本节从"现场勘查"的视角切入:先给时间序列下个工程定义,再用一段 60 天股价片段做示范,最后澄清三个常被混为一谈的概念。读完后你对"时间序列不是普通表格"会有具体体感。
先看一个具体的例子。某只股票在 2024 年 1 月 1 日到 2 月 29 日共 60 个交易日的收盘价,构成一列数。把时间抽掉,它就只是 60 个数字;但只要把"时间"这个维度还回来,数字之间就有了"先后顺序"和"间隔长度"两个额外信息。这两条信息,正是时间序列区别于普通表格数据的命门。
形式化地讲,一个单变量时间序列可以写成:
X = { x(t_1), x(t_2), ..., x(t_n) },其中 t_1 < t_2 < ... < t_n
t_i 是时间戳,x(t_i) 是该时刻的观测值。进一步区分:
t_{i+1} - t_i = 常数(例如日收盘价、小时气温、分钟级服务器 QPS)。t_{i+1} - t_i 变化(例如客户下单时间、网页点击流、设备故障记录)。这类数据需要先重采样成等距,才能套用经典方法;不重采样也可以走 Hawkes 过程、生存分析等专门路线。很多初学者把时序分析想成"加一列时间戳的回归"。这种理解会直接导致翻车。下面三条差异,是教科书里讲过但实战里必须刻在脑子里的:
| 维度 | 横截面数据 | 时间序列 |
|---|---|---|
| 样本独立性 | 假设独立同分布(i.i.d.) | 强烈自相关:今天的值依赖昨天甚至更早 |
| 分布稳定性 | 通常假设来自同一分布 | 常带趋势、季节性、周期性,分布会随时间漂移 |
| 观测顺序 | 顺序可任意打乱 | 顺序就是分析的核心信息;打乱顺序就丢失结构 |
第三条是新手最容易忽略的。当你把销量数据按时间排序画折线图时,"顺序"本身承载了趋势与季节;如果随机打乱后画图,你会得到一团看不出规律的散点。所以在时序分析里,绝不能像普通表格那样随便 shuffle——这会破坏自相关结构。
下面这段代码展示如何从 CSV 读入一段股价数据,确认它的等距性、缺失与基础分布。这是一段概念性片段,跑在 CPU 笔记本上几秒钟出结果:
import pandas as pd import numpy as np # 构造一段 60 个交易日的合成股价(真实场景可换成 pd.read_csv) dates = pd.bdate_range("2024-01-01", periods=60) # 60 个工作日 np.random.seed(42) price = 100 + np.cumsum(np.random.normal(0, 1.2, size=60)) # 随机游走 s = pd.Series(price, index=dates, name="close") print("类型:", type(s.index)) # DatetimeIndex print("频率:", s.index.freq) # B (business day) print("前 5 个值:\n", s.head()) print("自相关 lag=1:", s.autocorr(lag=1)) # 通常很高(>0.9) print("自相关 lag=10:", s.autocorr(lag=10)) # 仍可能为正
代码里有三个值得停下来看的地方:
s.index.freq 返回 B,代表"工作日频率"。如果你的数据来自交易所,自然就是 B;如果是日内分钟级,会是 T 或 min。明确频率是后续所有建模的前提。s.autocorr(lag=1) 是 lag-1 自相关系数。对股价这种带惯性的序列,这个值通常显著大于 0;这正是横截面回归的 i.i.d. 假设彻底失效的证据。最后列出三个常被混为一谈但必须分清的概念:
t_i 的间距可以是常数(等距)也可以不等(事件流)。DatetimeIndex 的 pandas Series,确认 index.freq、检查 lag-1 自相关是否显著大于 0。一个朴素的问题:拿一组数字给我,我能否立即判断它"是不是时间序列"?答案是看三个特征。
第一,时间维度连续且不可重排。今天的温度、今天的股价,今天只能取一次;调换顺序,物理意义就变了。这是时间序列与横截面数据的本质差异——后者假设观测独立同分布,前者明确违反这一假设。
第二,存在"跨期依赖"。今天高温,明天才可能高温持续;今天股价暴涨,明天未必继续。跨期依赖让我们必须看 ACF/PACF 而非只算 mean/std。
第三,信号在时间上有多尺度叠加。股票日线上有日内的均值回归,季度上有盈利驱动的趋势,年际上有经济周期。把不同尺度的信号拆开,是时间序列分析的核心动作——后面所有章节都是围绕"怎么拆、拆完怎么用"展开的。
理解时间序列,先理解它"为什么不是普通数据"。一旦接受了"时间不可重排 + 跨期依赖 + 多尺度叠加"这三个特征,后面的趋势、季节性、周期性、建模、评估都顺理成章。