Коригування часових ознак
Протягом цього курсу ми неодноразово згадували про ризики витоку інформації до моделі під час навчання. Витік даних призводить до занадто оптимістичних метрик точності, але на реальних даних результати часто розчаровують.
У цій вправі ми переконаємося, що DAYSONMARKET відображає лише ту інформацію, яку ми маємо на момент передбачення значення. Тобто, якщо будинок ще на ринку, ми не знаємо, скільки днів він там пробуде. Нам потрібно скоригувати test_df, щоб він відображав дані станом на 2017-12-10.
ПРИМІТКА: У цьому прикладі використано функцію lit(). Вона дозволяє підставляти поодинокі значення там, де у виклику функції зазвичай очікується весь стовпець.
Ця вправа є частиною курсу
Опрацювання ознак у PySpark
Інструкції до вправи
- Імпортуйте з
pyspark.sql.functionsтакі функції для подальшого використання:datediff(),to_date(),lit(). - Перетворіть рядок дати '2017-12-10' на дату pyspark: спершу викличте до нього літеральну функцію
lit(), а потім застосуйтеto_date(). - Створіть
test_df, відфільтрувавши рядки зOFFMKTDATEбільшим або рівнимsplit_dateтаLISTDATEменшим або рівнимsplit_dateза допомогоюwhere(). - Замініть
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()