時間特徴量の調整
このコースを通して、学習時にモデルへ情報が漏れてしまう(リーケージ)ことの危険性について触れてきました。データリーケージがあると、学習時の精度指標は非常に楽観的になりますが、実データを通すと結果はしばしば期待外れになります。
この演習では、DAYSONMARKET が予測時点で入手可能な情報だけを反映するようにします。つまり、まだ販売中の物件については、市場にあと何日残るかは分かりません。2017-12-10 時点で手元にある情報を反映するように、test_df を調整しましょう。
注: この例では lit() 関数を使用します。この関数は、関数呼び出しで列全体が想定される箇所に単一値を渡せるようにするためのものです。
この演習はコースの一部です
PySparkで学ぶ特徴量エンジニアリング
演習の手順
- 後で使用するために、
pyspark.sql.functionsから次の関数をインポートします:datediff(),to_date(),lit()。 - 文字列 '2017-12-10' を pyspark の日付に変換します。まず
lit()を呼び、その結果に対してto_date()を適用します。 where()を使って、OFFMKTDATEがsplit_date以上、かつLISTDATEがsplit_date以下の行を抽出し、test_dfを作成します。DAYSONMARKETを置き換えます。DAYSONMARKETという新しい列を計算し、その値はsplit_dateとLISTDATEの日数差とします。日付計算には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()