开始使用免费开始使用

调整时间特征

在整个课程中,我们多次提到在训练过程中向模型泄露信息的风险。数据泄露会让模型在准确率等指标上看起来非常理想,但一旦用真实数据运行,结果往往令人失望。

在本练习中,我们要确保 DAYSONMARKET 只反映预测时点能够获得的信息。也就是说,如果房子仍在售,我们并不知道它还会在市场上停留多少天。因此需要调整 test_df,使其反映截至 2017-12-10 我们当前掌握的信息。

注意:本例将使用 lit() 函数。该函数用于在函数调用期望整列时传入单个值。

本练习是课程的一部分

使用 PySpark 进行特征工程

查看课程

练习说明

  • pyspark.sql.functions 导入以下函数以便后续使用:datediff()to_date()lit()
  • 先对日期字符串 '2017-12-10' 调用字面量函数 lit(),再调用 to_date(),将其转换为 PySpark 日期类型。
  • 使用 where() 过滤创建 test_df:筛选 OFFMKTDATE 大于等于 split_dateLISTDATE 小于等于 split_date 的记录。
  • 用新计算的列替换 DAYSONMARKET:新列名为 DAYSONMARKET,其值为 split_dateLISTDATE 的差值,使用 datediff() 完成日期差计算。使用提供的代码检查新列与原列。

交互式实操练习

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

from pyspark.sql.functions import ____, ____, ____

split_date = ____(____('2017-12-10'))
# Create Sequential Test set
test_df = df.____(df[____] >= ____).____(df[____] <= ____)

# Create a copy of DAYSONMARKET to review later
test_df = test_df.withColumn('DAYSONMARKET_Original', test_df['DAYSONMARKET'])

# Recalculate DAYSONMARKET from what we know on our split date
test_df = test_df.withColumn(____, ____(____, ____))

# Review the difference
test_df[['LISTDATE', 'OFFMKTDATE', 'DAYSONMARKET_Original', 'DAYSONMARKET']].show()
编辑并运行代码