Una serie de tiempo se define como una serie de puntos de datos indexados en orden de tiempo. El orden de tiempo puede ser diario, mensual o incluso anual. A continuación se muestra un ejemplo de una serie temporal que ilustra el número de pasajeros de una aerolínea por mes desde el año 1949 hasta 1960.
Pronóstico de series
temporales El pronóstico de series temporales es el proceso de utilizar un modelo estadístico para predecir valores futuros de una serie temporal en función de resultados pasados.
Algunos casos de uso
Componentes de una serie temporal:
- Tendencia: la tendencia muestra una dirección general de los datos de la serie temporal durante un largo período de tiempo. Una tendencia puede ser creciente (hacia arriba), decreciente (hacia abajo) u horizontal (estacionaria).
- Estacionalidad: el componente de estacionalidad exhibe una tendencia que se repite con respecto al momento, la dirección y la magnitud. Algunos ejemplos incluyen un aumento en el consumo de agua en verano debido a las condiciones climáticas cálidas o un aumento en el número de pasajeros de aerolíneas durante las vacaciones de cada año.
- Componente cíclico: estas son las tendencias sin repetición establecida durante un período de tiempo particular. Un ciclo se refiere al período de altibajos, auges y depresiones de una serie de tiempo, que se observa principalmente en los ciclos económicos. Estos ciclos no exhiben una variación estacional pero generalmente ocurren durante un período de tiempo de 3 a 12 años dependiendo de la naturaleza de la serie temporal.
- Variación irregular: Estas son las fluctuaciones en los datos de la serie temporal que se hacen evidentes cuando se eliminan las variaciones de tendencia y cíclicas. Estas variaciones son impredecibles, erráticas y pueden o no ser aleatorias.
- Descomposición
ETS La descomposición ETS se utiliza para separar diferentes componentes de una serie temporal. El término ETS significa error, tendencia y estacionalidad. - AR( p ) Autorregresión : un modelo de regresión que utiliza la relación dependiente entre una observación actual y las observaciones durante un período anterior. Un componente autorregresivo ( AR(p) ) se refiere al uso de valores pasados en la ecuación de regresión para la serie temporal .
- I( d ) Integración : utiliza la diferenciación de observaciones (restando una observación de la observación en el paso de tiempo anterior) para hacer que la serie de tiempo sea estacionaria. La diferenciación implica la resta de los valores actuales de una serie con sus valores anteriores d número de veces.
- MA( q ) Promedio móvil : un modelo que utiliza la dependencia entre una observación y un error residual de un modelo de promedio móvil aplicado a observaciones retrasadas. Un componente de promedio móvil representa el error del modelo como una combinación de términos de error anteriores. El orden q representa el número de términos a incluir en el modelo.
- ARIMA: Medias móviles integradas autorregresivas no estacionales
- SARIMA: ARIMA Estacional
- SARIMAX: ARIMA estacional con variables exógenas
Código: ETS Descomposición del conjunto de datos de pasajeros de líneas aéreas:
# Importing required libraries import numpy as np import pandas as pd import matplotlib.pylot as plt from statsmodels.tsa.seasonal import seasonal_decompose # Read the AirPassengers dataset airline = pd.read_csv( 'AirPassengers.csv' , index_col = 'Month' , parse_dates = True ) # Print the first five rows of the dataset airline.head() # ETS Decomposition result = seasonal_decompose(airline[ '# Passengers' ], model = 'multiplicative' ) # ETS plot result.plot() |
Producción:
Modelo ARIMA para pronósticos de series temporales
ARIMA significa modelo de promedio móvil integrado autorregresivo y se especifica mediante tres parámetros de orden: (p, d, q).
Tipos de modelo ARIMA
Pirámide Auto-ARIMA
La función ‘auto_arima’ de la biblioteca ‘pmdarima’ nos ayuda a identificar los parámetros más óptimos para un modelo ARIMA y devuelve un modelo ARIMA ajustado.
Código: análisis de parámetros para el modelo ARIMA
# To install the library pip install pmdarima # Import the library from pmdarima import auto_arima # Ignore harmless warnings import warnings warnings.filterwarnings( "ignore" ) # Fit auto_arima function to AirPassengers dataset stepwise_fit = auto_arima(airline[ '# Passengers' ], start_p = 1 , start_q = 1 , max_p = 3 , max_q = 3 , m = 12 , start_P = 0 , seasonal = True , d = None , D = 1 , trace = True , error_action = 'ignore' , # we don't want to know if an order does not work suppress_warnings = True , # we don't want convergence warnings stepwise = True ) # set to stepwise # To print the summary stepwise_fit.summary() |
Producción:
Código: ajuste el modelo ARIMA al conjunto de datos AirPassengers
# Split data into train / test sets train = airline.iloc[: len (airline) - 12 ] test = airline.iloc[ len (airline) - 12 :] # set one year(12 months) for testing # Fit a SARIMAX(0, 1, 1)x(2, 1, 1, 12) on the training set from statsmodels.tsa.statespace.sarimax import SARIMAX model = SARIMAX(train[ '# Passengers' ], order = ( 0 , 1 , 1 ), seasonal_order = ( 2 , 1 , 1 , 12 )) result = model.fit() result.summary() |
Producción:
Código: Predicciones del modelo ARIMA contra el conjunto de prueba
start = len (train) end = len (train) + len (test) - 1 # Predictions for one-year against the test set predictions = result.predict(start, end, typ = 'levels' ).rename( "Predictions" ) # plot predictions and actual values predictions.plot(legend = True ) test[ '# Passengers' ].plot(legend = True ) |
Producción:
Código: evaluar el modelo usando MSE y RMSE
# Load specific evaluation tools from sklearn.metrics import mean_squared_error from statsmodels.tools.eval_measures import rmse # Calculate root mean squared error rmse(test[ "# Passengers" ], predictions) # Calculate mean squared error mean_squared_error(test[ "# Passengers" ], predictions) |
Producción:
Código: pronóstico usando el modelo ARIMA
# Train the model on the full dataset model = model = SARIMAX(airline[ '# Passengers' ], order = ( 0 , 1 , 1 ), seasonal_order = ( 2 , 1 , 1 , 12 )) result = model.fit() # Forecast for the next 3 years forecast = result.predict(start = len (airline), end = ( len (airline) - 1 ) + 3 * 12 , typ = 'levels' ).rename( 'Forecast' ) # Plot the forecast values airline[ '# Passengers' ].plot(figsize = ( 12 , 5 ), legend = True ) forecast.plot(legend = True ) |
Producción: