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

如何按指定年份拆分时间序列数据集?求最佳实践方案

时间序列按年份拆分的最佳实践

对于时间序列数据,train_test_split的随机拆分逻辑完全不适用——它会打乱时序,导致模型学习到未来数据的信息(数据泄露),这在时间序列预测场景中是致命的。你需要严格按时间顺序、基于年份规则直接筛选数据,具体实现步骤如下:

步骤1:处理日期列

首先确保Date列是datetime类型,方便后续按年份筛选:

import pandas as pd

# 读取数据
df = pd.read_csv('weatherAUS.csv')
# 将Date列转为datetime格式
df['Date'] = pd.to_datetime(df['Date'])
# 按日期排序(可选,但确保时序逻辑正确)
df.sort_values(by='Date', ascending=True, inplace=True)

步骤2:按年份拆分数据集

直接通过年份条件筛选,精准拆分训练/验证/测试集:

# 先拆分特征和目标变量(假设你的目标列是RainTomorrow,可根据实际需求修改)
X = df.drop('RainTomorrow', axis=1)
y = df['RainTomorrow']

# 定义各数据集的年份筛选条件
train_mask = df['Date'].dt.year.isin(range(2007, 2015))  # 匹配2007-2014年
val_mask = df['Date'].dt.year == 2015
test_mask = df['Date'].dt.year.isin(range(2016, 2018))  # 匹配2016-2017年

# 完成数据集拆分
X_train, y_train = X[train_mask], y[train_mask]
X_val, y_val = X[val_mask], y[val_mask]
X_test, y_test = X[test_mask], y[test_mask]

为什么不能用train_test_split?

时间序列的核心逻辑是用过去的数据预测未来,随机拆分会让模型在训练阶段接触到未来的样本,导致模型在真实的时序预测场景中彻底失效,这种情况属于严重的数据泄露,必须绝对避免。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 05:45:03