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

Створення часових розбиттів

У відео ми розглянули, чому випадкове розбиття небезпечне для часових рядів: дані з майбутнього можуть призвести до перенавчання моделі. Часто для часових рядів ви отримуєте нові дані щойно вони з'являються і хочете перевчити модель на найновіших даних. У відео ми показали, як зробити відсоткове розбиття на тренувальну і тестову вибірки, але припустімо, що ви хочете навчати на всіх доступних даних, окрім останніх 45 днів, які підуть у тестову вибірку.

У цій вправі ми створимо функцію, що знаходить дату розбиття, щоб використати останні 45 днів даних для тестування, а решту — для тренування. Зверніть увагу, що timedelta() уже імпортовано для вас зі стандартної бібліотеки python datetime.

Ця вправа є частиною курсу

Опрацювання ознак у PySpark

Переглянути курс

Інструкції до вправи

  • Створіть функцію train_test_split_date(), яка приймає датафрейм df, стовпець дати для розбиття split_col і кількість днів для тестової вибірки test_days, задавши для нього значення за замовчуванням 45.
  • Знайдіть мінімальну та максимальну дати для split_col, використовуючи ,().
  • Визначте дату розбиття тестової та тренувальної вибірок, використавши max_date і віднявши від нього test_days за допомогою timedelta(), яка приймає параметр days; у цьому випадку передайте test_days.
  • Використовуючи OFFMKTDATE як split_col, знайдіть split_date і застосуйте його для фільтрування датафрейма на два нові — train_df і test_df, де test_df — це лише останні 45 днів даних. Додатково переконайтеся, що test_df містить лише будинки, виставлені на продаж станом на дату розбиття, відфільтрувавши df['LISTDATE'] так, щоб вона була меншою або дорівнювала split_date.

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

def train_test_split_date(df, split_col, test_days=____):
  """Calculate the date to split test and training sets"""
  # Find how many days our data spans
  max_date = df.____({____: ____}).collect()[0][0]
  min_date = df.____({____: ____}).collect()[0][0]
  # Subtract an integer number of days from the last date in dataset
  split_date = ____ - timedelta(days=____)
  return split_date

# Find the date to use in spitting test and train
split_date = train_test_split_date(df, ____)

# Create Sequential Test and Training Sets
____ = df.where(df[____] < split_date) 
____ = df.where(df[____] >= split_date).where(df[____] <= split_date) 
Редагувати та запускати код