You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多分组场景下单一Random Forest Regression预测模型构建咨询

单随机森林多地点气温预测落地方案

你之前遇到的测试集仅覆盖单个地点的问题,和Location字段的one-hot编码无关,核心是错误使用了面向独立同分布样本的随机划分逻辑,不匹配时序预测+全地点覆盖的验证要求。

核心实现流程

  • 特征工程处理
    Location字段直接做one-hot编码即可,不需要调整编码方式。在现有Month、Year字段基础上补充两类特征提升预测精度:
    • 连续时间步特征:将年月转换为递增的整数值,例如2018年3月记为time_step = (Year - 2018)*12 + Month,让模型学习长期气温变化的趋势性
    • 月份周期特征:对Month做正余弦转换,还原月份的环形周期属性(避免模型把相邻的12月和1月判定为相差11的离散值),转换代码如下:
      import numpy as np
      df['month_sin'] = np.sin(2 * np.pi * df['Month'] / 12)
      df['month_cos'] = np.cos(2 * np.pi * df['Month'] / 12)
      
  • 数据集划分(解决测试集地点覆盖不全问题)
    完全抛弃默认的随机train_test_split,采用时间前切分逻辑:
    1. 按时间先后对所有样本排序,取时间最早的80%区间内所有地点的样本作为训练集,时间最晚的20%区间内所有地点的样本作为测试集。例如你有2018.1-2021.12共48个月的数据,就取2018.1-2021.2的全地点样本做训练,2021.3-2021.12的全地点样本做测试。这种划分方式完全匹配“用历史数据预测未来”的场景,不会出现数据泄露,且测试集天然覆盖全部50个地点。
    2. 交叉验证环节使用TimeSeriesSplit做时序分折,禁止使用普通K折随机打乱分折,每一轮验证集的时间必须晚于对应训练集的时间,保证每折验证都覆盖所有地点。
  • 模型训练与批量预测
    1. 训练阶段输入特征为time_step、month_sin、month_cos、Year、所有Location的one-hot列,标签为Temp,直接训练单个RandomForestRegressor即可,不需要为每个地点单独建模。
    2. 预测未来x个月时,先构造完整的待预测特征表:
      • 先生成未来x个月所有月份对应的Month、Year、time_step、month_sin、month_cos值
      • 对每个未来月份,拼接50个地点的one-hot编码,最终生成x*50行的特征表(每个地点每个月对应1行)
      • 将构造好的特征表输入训练完成的模型,输出结果即为所有地点对应月份的气温预测值。

注意:绝对不要在时序气象预测任务中使用随机打乱样本的划分方式,这种方式会让模型在训练阶段间接接触到未来时间的气温信息,得到的测试集精度是虚高的,实际预测未来数据时效果会出现明显下跌。

内容的提问来源于stack exchange,提问作者Nina Hartley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 21:15:20