3. 农产品价格时间序列的探索性分析

拿到一份农产品价格时间序列,例如某批发市场连续五年的月度白菜均价,在正式建模预测之前,必须先做探索性分析(EDA)。EDA 的目的不是"画几张图看看",而是回答四个具体问题:价格整体往哪个方向走(趋势)、每年同一时段是否重复出现相似涨跌(季节性)、是否存在跨年度的宽幅波动(周期性)、以及序列的集中程度与离散程度如何(描述统计)。这四个问题的答案,直接决定后续是否要差分、是否要加季节项、是否要取对数,以及模型残差应满足什么假设。

一、先看趋势:把长期方向从噪声中剥离

趋势是序列在较长时期内的持续上升或下降倾向。对农产品而言,趋势常来自生产成本、种植面积、消费结构的变化。最直接的做法是绘制原始序列折线图,并叠加移动平均线。以月度数据为例,取 12 期中心化移动平均可以平滑掉年内季节波动,留下的就是趋势项。若序列为 yt,则 12 期中心化移动平均为:

MA12_t = (0.5·y_{t-6} + y_{t-5} + … + y_{t+5} + 0.5·y_{t+6}) / 12

两端各取 0.5 权重,是为了让平滑窗口的中心正好落在 t 上,避免相位偏移。实操中可用 Python 的 pandas.Series.rolling(window=12, center=True).mean() 快速得到。观察移动平均线的斜率:若五年内从 2.8 元/公斤升至 3.6 元/公斤,年均涨幅约 5%,可判断为温和上升趋势;若某年出现断崖式下跌后未恢复,则要警惕结构性断点,此时单纯线性趋势拟合会失真,应结合事件(如扩种、进口冲击)分段处理。

二、看季节性:固定周期内的重复模式

季节性指在固定周期(通常为一年)内重复出现的波动。农产品季节性极强:蔬菜冬季偏贵、夏季回落;水果在集中上市期价格走低。识别季节性的常用工具是季节指数与月度箱线图。季节指数的计算可用"原始值除以中心化移动平均"得到季节比率,再按月份求平均并归一化,使 12 个月指数之和为 1200(以 100 为基准)。

例如某品种计算后,1 月季节指数 118、7 月 86,意味着 1 月价格通常比趋势水平高约 18%,7 月低约 14%。箱线图则能同时展示各月的中位数、四分位距与离群点,比单一指数更能暴露异常年份。判断季节性是否显著,可看各月箱体是否明显错位;若各月箱体重叠严重,说明季节效应弱,建模时可不加季节项。

三、看周期性:跨年度的宽幅起伏

周期性不同于季节性:它没有固定周期长度,常由"蛛网效应"驱动——本期高价刺激下期扩种,供给增加导致价格下跌,再引发减种,形成数年一轮的猪周期、蒜周期。识别周期性的可视化手段是自相关函数(ACF)图与谱分析。ACF 图中若在滞后 24、36、48 期附近出现逐渐衰减的峰,提示存在约两年的周期成分;若峰不随滞后衰减而稳定出现,则更可能是季节性而非周期性。

需要强调:周期性与趋势、季节性常叠加在一起。分解法(STL 或经典乘法分解)能把三者拆开:yt = Tt × St × Ct × It,其中 T 为趋势、S 为季节、C 为周期、I 为随机项。农产品价格波动幅度常随价格水平放大,因此乘法模型往往比加法模型更合适。

价格序列分解:原始值 = 趋势 × 季节 × 周期 × 随机 原始序列 yₜ 趋势 Tₜ(12期中心化移动平均) 温和上升 季节 Sₜ(12个月重复) 冬高夏低 周期 Cₜ(约2年一轮) 蛛网效应 随机 Iₜ

四、描述统计:用数字刻画集中与离散

图形给出直觉,描述统计给出可比较的量化指标。对价格序列,至少应计算:均值与中位数(判断偏态,若均值明显大于中位数,说明高价月份拉高了均值)、标准差与变异系数 CV(CV = 标准差/均值,用于跨品种比较波动性,农产品 CV 常达 15%~30%)、偏度与峰度(峰度高说明极端价格出现频繁)、以及同比与环比增长率序列。此外,一阶差分的标准差可衡量价格变化的剧烈程度,是后续建模选择差分阶数的依据。

一个容易被忽略的步骤是平稳性检验。趋势和季节性都会使序列非平稳,直接建模会导致伪回归。可先做 ADF 检验:若 p 值大于 0.05,说明存在单位根,需差分;对月度数据通常先做 12 阶季节差分再做一阶差分,然后重新检验。EDA 阶段就把这一步做掉,能避免后续反复返工。

实操建议:把"原始折线 + 移动平均 + 月度箱线图 + ACF 图 + 描述统计表"作为固定五件套一次产出。五张图并排看,趋势、季节、周期、离散程度一目了然,也便于向业务方解释。
注意区分季节性与周期性:季节性周期固定(12 个月),可用季节指数刻画;周期性周期不固定,需靠 ACF 或谱分析识别。把两者混为一谈,会在建模时错误地加入固定季节项,导致周期成分被误吸收。

完成上述分析后,应形成一份简短结论:趋势方向与强度、季节性是否显著及高峰月份、是否存在跨年周期、波动水平与异常点位置、序列是否平稳。这份结论就是下一步选择 ARIMA、季节分解或机器学习特征工程的直接输入。