Python | Modelo ARIMA para Pronóstico de Series de Tiempo

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

  • Predecir el número de clientes entrantes o salientes.
  • Para explicar patrones estacionales en las ventas.
  • Para detectar eventos inusuales y estimar la magnitud de su efecto.
  • Estimar el efecto de un producto recién lanzado sobre el número de unidades vendidas.
  • 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.
    • 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).

    • 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.
    • Tipos de modelo ARIMA

    • ARIMA: Medias móviles integradas autorregresivas no estacionales
    • SARIMA: ARIMA Estacional
    • SARIMAX: ARIMA estacional con variables exógenas
    • 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:

    Publicación traducida automáticamente

    Artículo escrito por samishawl y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *