如何按指定年份拆分时间序列数据集?求最佳实践方案
时间序列按年份拆分的最佳实践
对于时间序列数据,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
相关产品推荐
相关产品推荐

