库存数据的季节性调整:如何剔除季节性因素?

做基差交易的人,最怕什么?

怕数据骗人。

明明库存看着在下降,你兴冲冲做多,结果价格反而跌了。为什么?因为那个下降是季节性规律,不是基本面驱动。我早年就吃过这个亏,后来才明白——库存数据必须做季节性调整

什么是季节性因素?

说白了,就是每年固定时间出现的规律性波动。

比如:

  • 春节前,下游停工,库存被动累积
  • 3-4月,开工旺季,库存快速去化
  • 7-8月,高温限电,生产受限
  • 年底,贸易商回笼资金,主动去库

这些规律每年都来一遍。如果你不做调整,就会把季节性波动误判成趋势性变化。

核心观点:季节性调整的目的,是把「每年都有的那部分」剥离掉,留下真正反映供需变化的「异常部分」。

三种主流调整方法

我这些年用过的方法不少,真正靠谱的就三种。我一个个说。

1. 同比法(最简单,但粗糙)

直接拿今年第N周的数据,跟去年同周比。

优点:操作简单,Excel拉一下就行。

缺点:忽略了趋势变化。如果去年是去库年,今年是累库年,同比会失真。

# 伪代码示例
adjusted_inventory = current_week_inventory - last_year_same_week_inventory

我的经验:同比法只适合快速看个大概。真要下单,别只用这个。

2. 移动平均比率法(Census X-12)

这是美国人口普查局搞出来的方法,后来被大宗商品领域广泛采用。

核心思路:

  1. 先算一个中心化移动平均,作为趋势-周期项
  2. 用原始数据除以这个移动平均,得到季节-不规则项
  3. 对季节-不规则项做平滑,提取出季节性因子
  4. 用原始数据除以季节性因子,得到调整后数据
# Python示例(使用statsmodels)
import statsmodels.api as sm

# 假设inventory是pandas Series,频率为周
decomposition = sm.tsa.seasonal_decompose(
    inventory, 
    model='multiplicative',  # 库存数据通常用乘法模型
    period=52                # 年度周期
)

seasonal_factor = decomposition.seasonal
adjusted_inventory = inventory / seasonal_factor

注意:这个方法要求数据至少3年以上。数据太短,季节性因子不稳定。

3. 回归法(我最常用的)

为什么我偏爱回归法?因为它灵活。

你可以把季节性因素拆成:

  • 周度哑变量(52周,每周一个系数)
  • 月度哑变量(12个月)
  • 节假日效应(春节、国庆等)
# Python示例
import pandas as pd
import statsmodels.api as sm

# 构造周度哑变量
df['week'] = df.index.isocalendar().week
week_dummies = pd.get_dummies(df['week'], prefix='W')

# 构造节假日哑变量
df['is_spring_festival'] = (df.index.month == 2).astype(int)

# 回归模型
X = sm.add_constant(week_dummies)
X['is_spring_festival'] = df['is_spring_festival']
y = df['inventory']

model = sm.OLS(y, X).fit()
df['adjusted_inventory'] = model.resid  # 残差就是调整后数据

避坑指南:我曾经用回归法时,忘了加入趋势项。结果季节性因子把趋势也吃掉了。后来我习惯在回归里加一个时间趋势变量(1,2,3,...N),效果就好多了。

实战中的三个关键点

方法讲完了,但真正用起来,有几个坑你得注意。

第一,数据频率要匹配

如果你做的是周度基差交易,就别用月度库存数据做季节性调整。频率不匹配,调整后的数据反而引入噪音。

第二,注意结构性变化

2018年贸易战、2020年疫情,这些事件会永久改变库存的季节性模式。我建议每2-3年重新估算一次季节性因子,别一套参数用十年。

第三,调整后的数据要跟价差一起看

季节性调整只是第一步。调整后的库存数据,要跟基差、月间价差放在同一张图上。如果调整后库存下降,但基差也在下降,那说明有其他因素在主导。

我的习惯:每次做季节性调整,我都会画一张对比图——原始库存vs调整后库存。如果两条线走势高度一致,说明季节性因素不强;如果差异明显,那调整就很有价值。

一张图看懂整个流程

下面这张图,是我自己总结的库存季节性调整流程。每次做数据前,我都会过一遍。

库存季节性调整流程图 原始库存数据 选择调整方法 同比法 X-12移动平均比率法 回归法(含哑变量) 验证:对比原始vs调整后 调整后库存数据

最后说两句

季节性调整不是万能药。它解决的是「规律性噪音」的问题,但解决不了「数据质量」的问题。

我见过有人把垃圾数据做了一通季节性调整,然后信心满满地建仓,结果亏得一塌糊涂。嗯,数据源本身的质量,比调整方法重要十倍。

所以我的建议是:先花80%的精力搞清楚数据是怎么来的,再花20%的精力做调整。顺序别搞反了。