1. 时间序列分解基础概念
时间序列数据就像是一本记录着事物变化的历史书,每一页都按时间顺序记载着某个指标的变化情况。比如每天的股票价格、每月的销售额、每小时的温度变化等。这些数据往往不是随机波动的,而是由几个关键因素共同作用的结果。
想象一下你经营着一家冰淇淋店。销售额通常会呈现以下特征:长期来看可能逐年增长(趋势),夏天卖得多冬天卖得少(季节性),还有各种不可预测的小波动(残差)。时间序列分解就是要把这些成分拆分开来,让我们能更清晰地理解数据背后的故事。
statsmodels库中的seasonal_decompose函数就是这样一个"拆解专家",它采用经典的移动平均方法,可以把时间序列分解为三个主要部分:
- 趋势成分:反映数据的长期走向,比如销售额的逐年增长
- 季节性成分:固定周期内重复出现的模式,比如冰淇淋夏季热销
- 残差成分:去除趋势和季节性后剩下的"无法解释"的部分
这种分解对于理解数据特征、检测异常值、选择合适预测模型都很有帮助。我第一次使用时,发现它能直观地展示出数据中隐藏的模式,就像给时间序列做了一次"X光检查"。
2. seasonal_decompose函数详解
2.1 核心参数解析
让我们深入看看这个函数的参数配置,就像了解一台精密仪器的控制面板:
statsmodels.tsa.seasonal.seasonal_decompose(
x, # 时间序列数据
model='additive', # 模型类型
filt=None, # 滤波器系数
period=None, # 周期长度
two_sided=True, # 移动平均方式
extrapolate_trend=0 # 趋势外推设置
)
x参数接受多种格式的时间序列数据。如果是Pandas Series且具有DatetimeIndex,函数会自动识别频率;否则需要明确指定period。我建议尽量使用Pandas时间序列对象,这样能减少出错概率。
model参数决定分解的数学形式:
- 'additive'(加法模型):适用于季节性波动幅度不随时间变化的场景
- 'multiplicative'(乘法模型):适用于季节性波动与数据水平成比例的场景
选择模型的小技巧:先绘制原始数据,如果季节性波动的幅度随着趋势增长而增大,


8194

被折叠的 条评论
为什么被折叠?



