Kom igångKom igång gratis

Skapa tidsuppdelningar

I videon lärde vi oss varför slumpmässig uppdelning av data kan vara problematisk för tidsserier, eftersom data från framtiden kan leda till överanpassning i modellen. Med tidsserier tillkommer ofta ny data efterhand, och du vill då träna om modellen med de senaste uppgifterna. I videon visade vi hur man gör en procentuell uppdelning i test- och träningsset – men tänk dig att du vill träna på all tillgänglig data utom de sista 45 dagarna, som du vill använda som testset.

I den här övningen skapar vi en funktion som hittar uppdelningsdatumet och använder de sista 45 dagarna som testdata och resten som träningsdata. Observera att timedelta() redan har importerats från standardbiblioteket datetime i python.

Den här övningen är en del av kursen

Feature Engineering med PySpark

Visa kurs

Övningsinstruktioner

  • Skapa en funktion train_test_split_date() som tar emot en dataram, df, den datumkolumn som ska användas för uppdelningen split_col, samt antalet dagar att använda för testsetet, test_days, med standardvärdet 45.
  • Hitta min- och max-datumen för split_col med hjälp av ,().
  • Beräkna det datum som ska användas för att dela upp test- och träningsset genom att utgå från max_date och subtrahera test_days med timedelta(), som tar parametern days – skicka in test_days här.
  • Använd OFFMKTDATE som split_col för att hitta split_date, och filtrera sedan dataramen till två nya: train_df och test_df, där test_df endast innehåller de sista 45 dagarnas data. Se dessutom till att test_df bara innehåller bostäder som listades före uppdelningsdatumet, genom att filtrera df['LISTDATE'] till värden som är mindre än eller lika med split_date.

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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) 
Redigera och kör kod