Time Series Analysis
时间序列分析研究按时间排序的数据,以发现趋势、季节性和异常,并使用统计模型和深度模型预测未来数值。
时间序列分析研究按时间顺序记录的数据点,通常以固定间隔采样,例如每小时的传感器读数、每日销售额,或交通摄像头每分钟检测到的车辆数量。它与其他数据分析的不同之处在于,顺序本身携带信息:每次观测都依赖此前的观测,因此打乱数据会破坏关注的模式。主要目标包括通过趋势和季节性模式描述序列、预测未来值、检测异常,以及对整个序列进行分类,例如分类 ECG 中的心律。
趋势、季节性与平稳性#
大多数序列由几个部分组成。趋势是长期方向;季节性是按固定周期重复的模式,例如每天、每周或每年;周期是没有固定周期的较长期起伏;残差则是剩余部分。分解可以将这些部分分开,经典方法使用移动平均,更稳健的方法是 STL,即基于局部回归的季节—趋势分解方法,由 Robert Cleveland 及其同事于 1990 年发表。
自相关是序列与其滞后副本之间的相关性,可以揭示这类结构:在小时数据中,滞后 24 期的强相关值意味着每个小时都与前一天的同一小时相似。许多统计模型还假设序列平稳,也就是均值、方差和自相关不会随时间变化。增广 Dickey-Fuller 检验可以检测一种常见的非平稳形式;差分则建模相邻步骤之间的变化,而非建模数值水平,因此可以消除趋势。
下面的示例模拟了连续四周每小时的车辆数量,其中包含每日周期、缓慢上升的趋势和噪声;示例会计算自相关,并用两种方法预测最后一天:
import numpy as np
import pandas as pd
# Four weeks of hourly vehicle counts: a daily cycle, a slow upward trend, and noise
rng = np.random.default_rng(0)
hours = pd.date_range("2026-03-01", periods=24 * 28, freq="h")
daily_cycle = 40 + 30 * np.sin(2 * np.pi * (hours.hour - 9) / 24)
counts = pd.Series(daily_cycle + 0.02 * np.arange(len(hours)) + rng.normal(0, 5, len(hours)), index=hours)
# Autocorrelation: how strongly each count resembles the count 1, 12, and 24 hours earlier
for lag in [1, 12, 24]:
print(f"Autocorrelation at lag {lag}: {counts.autocorr(lag):.2f}")
# Forecast the final day from the 27 days before it
history, actual = counts[:-24], counts[-24:].to_numpy()
naive = np.full(24, history.iloc[-1]) # repeat the last observed count
seasonal_naive = history.iloc[-24:].to_numpy() # repeat the same hour of the previous day
print(f"Naive MAE: {np.abs(actual - naive).mean():.1f} vehicles")
print(f"Seasonal naive MAE: {np.abs(actual - seasonal_naive).mean():.1f} vehicles")滞后 1 期的自相关为 0.92;滞后 12 期(下午高峰与夜间低谷对齐)为 -0.89;滞后 24 期为 0.95。重复最后一次观测的车辆数量,平均每小时会产生 24.5 辆的误差;重复前一天同一时段的数量,平均误差则为 5.6 辆,因此季节性朴素预测是预测模型必须超越的基线。
预测方法#
统计方法依然表现强劲,尤其适用于较短的序列。Charles Holt 和 Peter Winters 于 1960 年前后开发的指数平滑法会赋予近期观测最高权重,并加入趋势和季节项。George Box 和 Gwilym Jenkins 于 1970 年推广的 ARIMA 模型结合了自回归、差分和过去误差的移动平均。Meta 的 Prophet 会为业务数据拟合趋势、季节性和节假日效应。
机器学习模型将预测视为基于滞后值和日历特征的预测建模任务。在 2020 年的沃尔玛销售额 M5 竞赛中,LightGBM等梯度提升树占据主导地位;而在拥有 100,000 条序列的 2018 年 M4 竞赛中,Slawek Smyl 将指数平滑与循环神经网络结合的混合模型夺得冠军。深度学习模型包括 LSTM、状态空间模型和 Transformer;Amazon 的 Chronos 和 Google 的 TimesFM 等预训练基础模型则可以零样本预测新的序列。卡尔曼滤波器解决的是相关任务:根据实时噪声测量值估计隐藏状态,例如物体的位置。
评估必须遵循时间顺序。随机交叉验证会让模型看到未来数据,这属于数据泄露;因此,预测通常通过滚动起点评估进行测试:使用截止点之前的所有数据训练模型,预测截止点之后的时间段,并随着截止点向前移动重复这一过程。
来自视频的时间序列#
计算机视觉可以将视频转换为时间序列。交通摄像头上的目标计数会生成每分钟的车辆数量,目标跟踪会生成每帧的物体位置和速度,商店摄像头则会生成每小时的占用人数。之后,这些序列可以输入相同的方法:预测交通高峰时段或人员需求,并通过异常检测标记事故发生后交通量突然下降等情况。在 Ultralytics 分析解决方案中,analytics_type="line" 会使用 YOLO26 模型跟踪物体,并每 30 帧绘制一次视野内的物体数量;对于 30 fps 视频,这约为每秒一次,因此摄像头画面在播放时会转换为数量序列。
时间序列分析与自然语言处理中的序列建模有所交集;文本按位置排序,但没有采样间隔。通过检测、跟踪和视频理解模型从视频中提取的数量和速度,所占空间远小于帧本身,因此可以存储多年的数据,并在不同摄像头之间进行比较。










