調整時間特徵
在本課程中我們多次提到,在訓練過程中把未來資訊洩漏給模型的風險。資料洩漏會讓模型的準確度指標過於樂觀,但一旦用真實資料跑模型,結果往往相當令人失望。
在這個練習中,你要確保 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_date,且LISTDATE小於或等於split_date。 - 以新計算的欄位覆蓋
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()