ПочатиПочніть безкоштовно

Коригування часових ознак

Протягом цього курсу ми неодноразово згадували про ризики витоку інформації до моделі під час навчання. Витік даних призводить до занадто оптимістичних метрик точності, але на реальних даних результати часто розчаровують.

У цій вправі ми переконаємося, що 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()
Редагувати та запускати код