MulaiMulai sekarang secara gratis

Membuat Pemisahan Berbasis Waktu

Dalam video, kita mempelajari mengapa pemisahan data secara acak bisa berbahaya untuk deret waktu karena data dari masa depan dapat menyebabkan overfitting pada model kita. Sering kali pada deret waktu, Anda memperoleh data baru seiring ketersediaannya dan Anda ingin melatih ulang model menggunakan data terbaru. Dalam video, kami menunjukkan cara melakukan pemisahan persentase untuk himpunan uji dan latih, tetapi misalkan Anda ingin melatih pada semua data yang tersedia kecuali 45 hari terakhir yang ingin Anda gunakan sebagai himpunan uji.

Pada latihan ini, kita akan membuat fungsi untuk menemukan tanggal pemisah dengan menggunakan 45 hari terakhir data sebagai pengujian dan sisanya untuk pelatihan. Perhatikan bahwa timedelta() telah diimpor untuk Anda dari pustaka standar python, yaitu datetime.

Latihan ini adalah bagian dari kursus

Rekayasa Fitur dengan PySpark

Lihat Kursus

Petunjuk latihan

  • Buat fungsi train_test_split_date() yang menerima sebuah dataframe, df, kolom tanggal yang digunakan untuk pemisahan split_col, serta jumlah hari untuk himpunan uji, test_days, dan atur nilai default-nya menjadi 45.
  • Temukan tanggal min dan max untuk split_col menggunakan ,().
  • Temukan tanggal untuk memisahkan himpunan uji dan latih menggunakan max_date dan kurangi test_days darinya dengan menggunakan timedelta() yang memiliki parameter days; dalam hal ini, teruskan test_days.
  • Dengan menggunakan OFFMKTDATE sebagai split_col, temukan split_date dan gunakan itu untuk menyaring dataframe menjadi dua yang baru, train_df dan test_df, di mana test_df hanya berisi 45 hari terakhir dari data. Selain itu, pastikan bahwa test_df hanya berisi rumah yang telah terdaftar hingga tanggal pemisah dengan menyaring df['LISTDATE'] kurang dari atau sama dengan split_date.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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) 
Edit dan Jalankan Kode