2. 农产品价格数据的获取与清洗
时间序列分析的第一道关口不是建模,而是数据。农产品价格数据在进入模型之前,往往要经历“找得到、拿得全、对得齐、洗得净”四个环节。本节围绕三类常见数据源展开,说明它们各自的口径与获取方式,再重点讲清缺失值处理、异常值识别和数据对齐这三项清洗工作,最后给出一个可直接套用的清洗流程示例。
一、三类常见数据源及其口径差异
农产品价格数据最常用的来源有三类,它们的统计目的不同,导致同一品种的价格可能相差很大,混用前必须先弄清口径。
农业农村部(批发市场价格监测):主要发布全国定点批发市场的鲜活农产品价格,如“农产品批发价格200指数”及分品种周度、日度价格。特点是频率高、贴近流通环节,适合分析短期波动与季节性。其价格通常是批发市场大宗交易价,不含零售加价。
国家统计局:发布居民消费价格指数中的食品类价格、农产品生产者价格指数等。特点是频率较低(月度为主)、覆盖全国、以指数形式呈现,适合做宏观趋势与通胀关联分析,但难以直接得到单一品种的绝对价格。
交易所(如大连商品交易所、郑州商品交易所):提供玉米、大豆、白糖、棉花等期货合约的日行情,包括开盘价、收盘价、结算价、成交量、持仓量。特点是频率高、连续、标准化,适合做高频波动与套期保值分析,但期货价格反映的是预期,与现货价格存在基差。
二、缺失值的识别与处理
缺失在农产品价格数据中非常普遍:节假日休市、监测点未上报、品种季节性停报都会造成空缺。处理前先区分缺失类型:完全随机缺失(如偶发漏报)、随机缺失(与某些可观测因素相关)、非随机缺失(如低价时不愿上报)。类型不同,处理策略也不同。
常用处理方法有四类。第一,删除:仅适用于缺失比例极低且随机的情况,直接删除整行或整列,简单但会损失信息。第二,前向填充:用上一个有效值填补,适合价格短期粘性强的场景,但连续缺失多期时会人为制造“平台”。第三,线性插值:在相邻两个有效值之间按时间等距插值,适合缺失期较短且趋势平缓的序列。第四,模型填补:用季节性ARIMA或均值回归模型预测缺失点,精度较高但实现复杂,且需避免用未来信息填补过去(信息泄漏)。
实操中建议先统计缺失率:单品种缺失率低于5%可用插值,5%~20%应结合业务判断并做敏感性分析,超过20%则要考虑该数据段是否可用。无论采用哪种方法,都应在数据表中新增“是否填补”标记列,保留可追溯性。
三、异常值的识别
异常值不等于错误值。农产品价格中的“异常”可能来自真实事件(如疫情、极端天气导致的价格跳涨),也可能是录入错误(如小数点错位、单位混用)。识别方法主要有三类。
统计规则法:基于均值和标准差,将偏离均值3倍标准差以外的点标记为异常;或使用四分位距(IQR)法,将小于Q1−1.5×IQR或大于Q3+1.5×IQR的点视为离群。前者对极端值敏感,后者更稳健。
业务规则法:设定合理价格区间,如某品种批发价历史区间为每公斤2~8元,超出即标记;或检查相邻两期涨跌幅是否超过阈值(如单日涨跌超过30%)。这类规则直接、可解释,适合工程落地。
时间序列法:用移动平均或STL分解得到趋势与季节项,将残差超过阈值的点判为异常。它能区分“趋势性上涨”与“突发跳变”,但需要足够长的历史数据。
识别出异常后不要急于删除。正确做法是:先回溯原始记录核对,确认为录入错误的直接修正;确认为真实事件的保留并打标签;无法判断的单独存放,在建模时做剔除与保留两套对比,观察结果是否稳健。
四、数据对齐:让不同来源说同一种语言
多源数据合并时,最常见的坑是时间与口径不一致。时间对齐包括频率对齐和时点对齐:日频与月频合并时,可将日频聚合为月均值或月末值;不同交易所的交易日历不同,需以共同交易日为基准做内连接,避免用前值填充造成虚假连续。口径对齐包括单位(元/公斤与元/吨)、品种名称(“马铃薯”与“土豆”)、地区范围(全国与主产区)的统一,建议建立一张字段映射表逐项核对。
下面这张图概括了从多源获取到可用序列的完整清洗链路,以及每个环节的关键判断点。
五、一个可执行的清洗流程示例
假设我们要分析某蔬菜品种2020—2023年的批发价格,数据来自农业农村部日频监测,同时补充统计局月度食品CPI做对照。可按以下顺序操作:
- 建表与溯源:原始表保留“日期、品种、市场、价格、单位、来源、采集时间”字段,另建清洗日志表记录每一步操作。
- 统一口径:将价格统一为元/公斤,品种名按映射表归一,地区统一到省级。
- 缺失检查:按日统计缺失率,节假日休市造成的缺失标记为“非随机”,用前向填充;偶发漏报用线性插值,并写入“填补方式”列。
- 异常识别:先用IQR法初筛,再用“单日涨跌幅超过30%”业务规则复核,逐条回溯原始记录,确认为录入错误的修正,确认为真实事件的打“事件”标签。
- 频率对齐:将日频价格聚合为月度均值,与CPI按月内连接,检查连接后样本量是否与预期一致。
- 输出与验证:输出清洗后序列与日志,绘制时序图目视检查是否存在断点、平台或突变,确认无误后进入建模环节。
完成上述步骤后,得到的不仅是一条干净的价格序列,还有一份可复现的清洗日志。这份日志在后续建模、结果解释和他人复核时,往往比数据本身更有价值。