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

基于滞后数据与外生时间序列的降雨分类预测:方法与模型选型

解决方案:基于历史时序特征的降雨预测

一、数据预处理:构造时序滞后特征

每个区域的降雨是独立时间序列,需按region分组,为每个样本生成历史周的降雨(rain)和云量(clouds)特征,将过去n周的观测值作为当前周降雨预测的输入。

具体代码实现

假设用前1~3周的数据预测当前周降雨,通过shift方法生成滞后特征:

import pandas as pd

# 初始化原始数据
df = pd.DataFrame({
    'region': [1,1,1,1,2,2,2,2,3,3,3,3],
    'week': [1,2,3,4,1,2,3,4,1,2,3,4],
    'rain': [1,1,0,1,1,1,1,1,1,0,0,0],
    'clouds': [1,1,0,0,0,0,1,0,1,0,0,0]
})

# 按区域分组生成滞后特征
def create_lagged_features(group, lag_steps=[1,2,3]):
    for lag in lag_steps:
        group[f'rain_lag_{lag}'] = group['rain'].shift(lag)
        group[f'clouds_lag_{lag}'] = group['clouds'].shift(lag)
    return group

df_lagged = df.groupby('region').apply(create_lagged_features).reset_index(drop=True)

# 移除无足够历史数据的行(前3周)
df_lagged = df_lagged.dropna().reset_index(drop=True)

处理后数据集会新增rain_lag_1(前1周降雨)、clouds_lag_1(前1周云量)等特征,目标变量为当前周的rain。

二、划分训练集与测试集

时序数据需保持时间顺序划分,禁止随机打乱:

  • 对每个区域,将前k周数据作为训练集,后m周作为测试集(示例中每个区域4周,可将前3周作为训练、第4周作为测试)。

示例代码:

# 按区域和周排序
df_lagged = df_lagged.sort_values(['region', 'week'])

# 划分训练/测试集
train = df_lagged[df_lagged['week'] <= 3]
test = df_lagged[df_lagged['week'] == 4]

# 分离特征与目标变量
X_train = train.drop(['region', 'week', 'rain'], axis=1)
y_train = train['rain']
X_test = test.drop(['region', 'week', 'rain'], axis=1)
y_test = test['rain']

三、适用的模型

1. 传统统计模型

  • 逻辑回归:结构简单、可解释性强,适合特征维度低的场景,能快速得到基准结果。
  • ARIMAX/SARIMAX:专为时间序列设计,ARIMA扩展到多变量(加入云量等外部特征),擅长捕捉时序的趋势与周期性。
  • Prophet:由Facebook开发,自动处理时序周期性、节假日效应,支持加入自定义外部特征,上手简单。

2. 机器学习模型

  • 树模型(随机森林/XGBoost/LightGBM):捕捉特征间非线性关系,对缺失值、异常值鲁棒性强,支持输出特征重要性,便于分析降雨影响因素。
  • 支持向量机(SVM):在小样本数据集上表现稳定,适合数据量不大的场景。

3. 深度学习模型

  • LSTM/GRU:循环神经网络变体,擅长捕捉长时序依赖,适合利用多周历史数据的场景,自动学习时序复杂模式。
  • 时间序列Transformer:基于注意力机制,能更好捕捉长序列中不同时间步的关联,适合更长历史序列输入的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:17