Series de tiempo: métodos ingenuos

Introducción

Métodos ingenuos, como suponer que el valor predicho en el momento 't' es el valor real de la variable en el momento 't-1' o la media móvil de la serie, se utilizan para sopesar qué tan bien pueden funcionar los modelos estadísticos y los modelos de aprendizaje automático y enfatizar su necesidad.

En este capítulo, probemos estos modelos en una de las características de nuestros datos de series de tiempo.

Primero veremos la media de la característica de 'temperatura' de nuestros datos y la desviación a su alrededor. También es útil para ver los valores de temperatura máxima y mínima. Podemos usar las funcionalidades de la biblioteca numpy aquí.

Mostrando estadísticas

En [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'])
)

Tenemos las estadísticas de todas las 9357 observaciones a lo largo de una línea de tiempo equidistante que son útiles para comprender los datos.

Ahora probaremos el primer método ingenuo, estableciendo el valor predicho en el momento actual igual al valor real en el momento anterior y calcularemos la raíz del error cuadrático medio (RMSE) para cuantificar el rendimiento de este método.

Mostrando 1er método ingenuo

En [136]:

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

En [137]:

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

En [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 para el método ingenuo 1: 12.901140576492974

Veamos el siguiente método ingenuo, donde el valor predicho en el momento presente se equipara a la media de los períodos de tiempo que lo preceden. También calcularemos el RMSE para este método.

Mostrando 2 nd método ingenuo

En [139]:

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

En [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

Aquí, puede experimentar con varios períodos de tiempo anteriores también llamados 'retrasos' que desea considerar, que se mantienen como 3 aquí. En estos datos se puede ver que a medida que aumenta el número de retrasos y aumenta el error. Si el retraso se mantiene en 1, se vuelve igual que el método ingenuo utilizado anteriormente.

Points to Note

  • Puede escribir una función muy simple para calcular el error cuadrático medio de la raíz. Aquí, hemos utilizado la función de error cuadrático medio del paquete 'sklearn' y luego hemos tomado su raíz cuadrada.

  • En pandas, df ['column_name'] también se puede escribir como df.column_name, sin embargo, para este conjunto de datos, df.T no funcionará igual que df ['T'] porque df.T es la función para transponer un marco de datos. Por lo tanto, use solo df ['T'] o considere cambiar el nombre de esta columna antes de usar la otra sintaxis.