Serie storiche - Metodi ingenui

introduzione

Metodi ingenui come presumere che il valore previsto al tempo "t" sia il valore effettivo della variabile al tempo "t-1" o la media mobile delle serie, vengono utilizzati per valutare il rendimento dei modelli statistici e dei modelli di apprendimento automatico e sottolineare la loro necessità.

In questo capitolo, proviamo questi modelli su una delle caratteristiche dei nostri dati di serie temporali.

Per prima cosa vedremo la media della caratteristica "temperatura" dei nostri dati e la deviazione attorno ad essa. È anche utile vedere i valori massimi e minimi di temperatura. Possiamo usare le funzionalità della libreria numpy qui.

Visualizzazione delle statistiche

In [135]:

import numpy
print (
   'Mean: ',numpy.mean(df['T']), '; 
   Standard Deviation: ',numpy.std(df['T']),'; 
   \nMaximum Temperature: ',max(df['T']),'; 
   Minimum Temperature: ',min(df['T'])
)

Abbiamo le statistiche per tutte le 9357 osservazioni su una linea temporale equidistanziata che ci sono utili per comprendere i dati.

Ora proveremo il primo metodo ingenuo, impostando il valore previsto al momento attuale uguale al valore effettivo della volta precedente e calcolando l'errore quadratico medio (RMSE) per quantificare le prestazioni di questo metodo.

Mostra il primo metodo ingenuo

In [136]:

df['T']
df['T_t-1'] = df['T'].shift(1)

In [137]:

df_naive = df[['T','T_t-1']][1:]

In [138]:

from sklearn import metrics
from math import sqrt

true = df_naive['T']
prediction = df_naive['T_t-1']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 1: ', error)

RMSE per il metodo ingenuo 1: 12.901140576492974

Vediamo il prossimo metodo ingenuo, in cui il valore previsto al momento attuale è equiparato alla media dei periodi di tempo che lo precedono. Calcoleremo l'RMSE anche per questo metodo.

Mostra il 2 ° metodo ingenuo

In [139]:

df['T_rm'] = df['T'].rolling(3).mean().shift(1)
df_naive = df[['T','T_rm']].dropna()

In [140]:

true = df_naive['T']
prediction = df_naive['T_rm']
error = sqrt(metrics.mean_squared_error(true,prediction))
print ('RMSE for Naive Method 2: ', error)

RMSE for Naive Method 2: 14.957633272839242

Qui puoi sperimentare vari numeri di periodi di tempo precedenti chiamati anche "ritardi" che desideri considerare, che qui vengono mantenuti come 3. In questi dati si può vedere che all'aumentare del numero di ritardi e dell'errore aumenta. Se il ritardo viene mantenuto 1, diventa lo stesso del metodo ingenuo utilizzato in precedenza.

Points to Note

  • È possibile scrivere una funzione molto semplice per calcolare l'errore quadratico medio della radice. Qui, abbiamo usato la funzione di errore quadratico medio dal pacchetto 'sklearn' e quindi abbiamo preso la sua radice quadrata.

  • In pandas df ['column_name'] può anche essere scritto come df.column_name, tuttavia per questo set di dati df.T non funzionerà come df ['T'] perché df.T è la funzione per la trasposizione di un dataframe. Quindi usa solo df ['T'] o considera la possibilità di rinominare questa colonna prima di usare l'altra sintassi.