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
Petunjuk latihan
- Buat fungsi
train_test_split_date()yang menerima sebuah dataframe,df, kolom tanggal yang digunakan untuk pemisahansplit_col, serta jumlah hari untuk himpunan uji,test_days, dan atur nilai default-nya menjadi 45. - Temukan tanggal
mindanmaxuntuksplit_colmenggunakan,(). - Temukan tanggal untuk memisahkan himpunan uji dan latih menggunakan
max_datedan kurangitest_daysdarinya dengan menggunakantimedelta()yang memiliki parameterdays; dalam hal ini, teruskantest_days. - Dengan menggunakan
OFFMKTDATEsebagaisplit_col, temukansplit_datedan gunakan itu untuk menyaring dataframe menjadi dua yang baru,train_dfdantest_df, di manatest_dfhanya berisi 45 hari terakhir dari data. Selain itu, pastikan bahwatest_dfhanya berisi rumah yang telah terdaftar hingga tanggal pemisah dengan menyaringdf['LISTDATE']kurang dari atau sama dengansplit_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)