BaşlayınÜcretsiz başlayın

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

Kursa Göz Atın

Egzersiz talimatları

  • df adlı bir dataframe, bölme için kullanılacak tarih sütunu split_col ve test seti için gün sayısı test_days alan, varsayılan değeri 45 olan bir train_test_split_date() fonksiyonu oluştur.
  • split_col için min ve max tarihlerini ,() kullanarak bul.
  • Test ve eğitim setlerini böleceğin tarihi max_date üzerinden, days parametresi alan timedelta() ile test_days çıkararak bul; bu durumda test_days değerini geçir.
  • split_col olarak OFFMKTDATE kullanarak split_date değerini bul ve dataframe’i iki yeni dataframe’e filtrele: train_df ve test_df. Burada test_df yalnı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çin df['LISTDATE'] değerini split_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) 
Kodu Düzenle ve Çalıştır