Zaman Bölmeleri Oluşturma
Videoda, zaman serileri için veriyi rastgele bölmenin neden tehlikeli olabileceğini öğrendik; çünkü gelecekten gelen veriler modelimizde aşırı öğrenmeye yol açabilir. Zaman serilerinde genellikle yeni veri geldikçe bunları toplarsın ve modelini en güncel verilerle yeniden eğitmek istersin. Videoda test ve eğitim setleri için yüzdeye göre bölmeyi gösterdik; ancak diyelim ki eldeki tüm verilerde eğitmek, son 45 günü ise test seti olarak kullanmak istiyorsun.
Bu egzersizde, test için son 45 günü ve geri kalanını eğitim için kullanacak şekilde bölme tarihini bulacak bir fonksiyon oluşturacağız. Lütfen timedelta() fonksiyonunun standart python kütüphanesi datetime içinden senin için zaten içe aktarıldığını unutma.
Bu egzersiz, kursun bir parçasıdır
PySpark ile Özellik Mühendisliği
Egzersiz talimatları
dfadlı bir dataframe, bölme için kullanılacak tarih sütunusplit_colve test seti için gün sayısıtest_daysalan, varsayılan değeri 45 olan birtrain_test_split_date()fonksiyonu oluştur.split_coliçinminvemaxtarihlerini,()kullanarak bul.- Test ve eğitim setlerini böleceğin tarihi
max_dateüzerinden,daysparametresi alantimedelta()iletest_daysçıkararak bul; bu durumdatest_daysdeğerini geçir. split_cololarakOFFMKTDATEkullanaraksplit_datedeğerini bul ve dataframe’i iki yeni dataframe’e filtrele:train_dfvetest_df. Buradatest_dfyalnızca verinin son 45 gününü içermelidir. Ek olarak,test_df’nin yalnızca bölme tarihi itibarıyla listelenmiş evleri içermesini sağlamak içindf['LISTDATE']değerinisplit_date’e küçük veya eşit olacak şekilde filtrele.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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)