始める無料で始める

時間特徴量の調整

このコースを通して、学習時にモデルへ情報が漏れてしまう(リーケージ)ことの危険性について触れてきました。データリーケージがあると、学習時の精度指標は非常に楽観的になりますが、実データを通すと結果はしばしば期待外れになります。

この演習では、DAYSONMARKET が予測時点で入手可能な情報だけを反映するようにします。つまり、まだ販売中の物件については、市場にあと何日残るかは分かりません。2017-12-10 時点で手元にある情報を反映するように、test_df を調整しましょう。

注: この例では lit() 関数を使用します。この関数は、関数呼び出しで列全体が想定される箇所に単一値を渡せるようにするためのものです。

この演習はコースの一部です

PySparkで学ぶ特徴量エンジニアリング

コースを見る

演習の手順

  • 後で使用するために、pyspark.sql.functions から次の関数をインポートします: datediff(), to_date(), lit()
  • 文字列 '2017-12-10' を pyspark の日付に変換します。まず lit() を呼び、その結果に対して to_date() を適用します。
  • where() を使って、OFFMKTDATEsplit_date 以上、かつ LISTDATEsplit_date 以下の行を抽出し、test_df を作成します。
  • 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()
コードを編集して実行