开始使用免费开始使用

创建时间切分

在视频中,您已经了解到,为时间序列随机划分数据是有风险的,因为来自未来的数据会让模型过拟合。时间序列场景下,您通常会在有新数据时获取并希望用最新数据重新训练模型。视频里我们演示了如何按比例划分训练集和测试集。但假设您希望用除最后 45 天之外的所有可用数据来训练,并将最后 45 天的数据作为测试集。

在本练习中,我们将编写一个函数来找到切分日期:使用最后 45 天的数据做测试,剩余数据做训练。请注意,标准 pythondatetime 中的 timedelta() 已为您导入。

本练习是课程的一部分

使用 PySpark 进行特征工程

查看课程

练习说明

  • 创建函数 train_test_split_date(),其入参为数据框 df、用于切分的日期列 split_col,以及测试集天数 test_days,并将 test_days 的默认值设为 45。
  • 使用 ,() 查找 split_colminmax 日期。
  • 使用 max_date 并通过 timedelta()(接收 days 参数,此处传入 test_days)减去 test_days,得到测试集与训练集的切分日期。
  • OFFMKTDATE 作为 split_col 求出 split_date,并据此将数据框过滤为两个新数据框 train_dftest_df,其中 test_df 仅包含最后 45 天的数据。此外,请确保 test_df 只包含在切分日期之前已上架的房源,即再根据 df['LISTDATE'] 小于或等于 split_date 进行过滤。

交互式实操练习

通过完成这段示例代码来试试这个练习。

def train_test_split_date(df, split_col, test_days=____):
  """Calculate the date to split test and training sets"""
  # Find how many days our data spans
  max_date = df.____({____: ____}).collect()[0][0]
  min_date = df.____({____: ____}).collect()[0][0]
  # Subtract an integer number of days from the last date in dataset
  split_date = ____ - timedelta(days=____)
  return split_date

# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)

# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date) 
____ = df.where(df[____] >= split_date).where(df[____] <= split_date) 
编辑并运行代码