開始使用免費開始

調整時間特徵

在本課程中我們多次提到,在訓練過程中把未來資訊洩漏給模型的風險。資料洩漏會讓模型的準確度指標過於樂觀,但一旦用真實資料跑模型,結果往往相當令人失望。

在這個練習中,你要確保 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_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()
編輯並執行程式碼