1.1 什么是时间序列


1.1 什么是时间序列:定义、维度、与横截面数据的本质差异

本节摘要:时间序列是同一变量在多个等距或不等距时间点上的有序观测集合。它与横截面数据的核心差异在于"样本之间不独立"——今天的值携带着昨天的信息。本节给出形式化定义、三条本质差异清单,并用一个 60 天股价片段做现场演示。

本节路线图

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

  1. 写出时间序列的数学形式化定义,并指出它与横截面数据在样本独立性上的根本不同。
  2. 区分"等距时间序列"与"事件流"两类常见形态,并举出各自的应用场景。
  3. 用 pandas 构造一个带 DatetimeIndex 的 Series,理解频率(freq)属性的工程意义。

本节从"现场勘查"的视角切入:先给时间序列下个工程定义,再用一段 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——这会破坏自相关结构。

三、用 Python 现场勘查一段股价

下面这段代码展示如何从 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;如果是日内分钟级,会是 Tmin。明确频率是后续所有建模的前提。
  • s.autocorr(lag=1) 是 lag-1 自相关系数。对股价这种带惯性的序列,这个值通常显著大于 0;这正是横截面回归的 i.i.d. 假设彻底失效的证据。
  • 如果你换成"日销量"做同样测试,lag-7 自相关往往会陡然升高——这是周季节性的"指纹"。1.2 节会沿着这条线索继续。

四、常见误解与澄清

最后列出三个常被混为一谈但必须分清的概念:

  • 时间序列 ≠ 时序数据库:时序数据库(InfluxDB、TimescaleDB)是存储层;时间序列分析是统计/建模方法。
  • 时间序列 ≠ 时间戳字段的表格:表格里可以有多列;时间序列分析里每一列都是单独的"案件",多列就升级为"多元时间序列",方法与单列不同。
  • 自相关 ≠ 因果关系:销量今天高、昨天也高,并不能推出"昨天导致今天";可能只是双休日效应让两天一起高。这条 1.2 节会有更具体的反例。

本节要点回顾

  • 形式化定义:时间序列是按时间顺序排列的观测值集合,时间戳 t_i 的间距可以是常数(等距)也可以不等(事件流)。
  • 三条本质差异:样本不独立、分布会漂移、顺序即信息。
  • 现场勘查第一步:把数据放进带 DatetimeIndex 的 pandas Series,确认 index.freq、检查 lag-1 自相关是否显著大于 0。
  • 下一节线索:1.2 节会进一步追问——既然自相关这么强,为什么普通回归模型就一定失败?我们会用一个股价反例把这点钉死。

侦探笔记:把数字读出"时间感"

一个朴素的问题:拿一组数字给我,我能否立即判断它"是不是时间序列"?答案是看三个特征。

第一,时间维度连续且不可重排。今天的温度、今天的股价,今天只能取一次;调换顺序,物理意义就变了。这是时间序列与横截面数据的本质差异——后者假设观测独立同分布,前者明确违反这一假设。

第二,存在"跨期依赖"。今天高温,明天才可能高温持续;今天股价暴涨,明天未必继续。跨期依赖让我们必须看 ACF/PACF 而非只算 mean/std。

第三,信号在时间上有多尺度叠加。股票日线上有日内的均值回归,季度上有盈利驱动的趋势,年际上有经济周期。把不同尺度的信号拆开,是时间序列分析的核心动作——后面所有章节都是围绕"怎么拆、拆完怎么用"展开的。

小结

理解时间序列,先理解它"为什么不是普通数据"。一旦接受了"时间不可重排 + 跨期依赖 + 多尺度叠加"这三个特征,后面的趋势、季节性、周期性、建模、评估都顺理成章。


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