Previsión de tuberías

En este tutorial, aprenderá a realizar pronósticos de canalizaciones: cómo comparar y seleccionar modelos de series de tiempo según el rendimiento.

previsión de tuberías

Avance

En la primera parte, aprenderá sobre muchos modelos de series temporales. Esta parte se divide en tres partes:

  • modelos clásicos de series de tiempo,
  • modelos supervisados,
  • y modelos basados en el aprendizaje profundo.

En la segunda parte, verá una aplicación a un caso de uso en el que creará algunos modelos de series de tiempo para el pronóstico del mercado de valores y aprenderá algunas técnicas de modelado de series de tiempo. Los modelos se compararán entre sí para seleccionar el de mejor rendimiento.

Preprocesamiento

Debido a la naturaleza de los datos de series de tiempo, el modelado de series de tiempo tiene una serie de detalles que no son relevantes para otros conjuntos de datos.

La primera especificidad de las series temporales es que la marca de tiempo que identifica los datos tiene un significado intrínseco. Los modelos univariados de series de tiempo son modelos de pronóstico que utilizan una sola variable (la variable objetivo) y su variación temporal para predecir el futuro. Los modelos univariados son específicos de series temporales.

En otras situaciones, es posible que tenga datos explicativos adicionales sobre el futuro. Por ejemplo, imagine que desea incluir los pronósticos meteorológicos en los pronósticos de demanda de sus productos, o que tiene otros datos que influirán en sus pronósticos. En este caso, puede utilizar modelos de series temporales multivariantes. 

Los modelos de series de tiempo multivariados son modelos de series de tiempo univariados adaptados para incorporar variables externas. También puede utilizar el aprendizaje automático supervisado para esta tarea.

Si desea utilizar variación temporal en sus datos de series temporales, primero deberá comprender los diferentes tipos de variación temporal que puede esperar.

La descomposición de series de tiempo es una técnica para extraer múltiples tipos de variación de su conjunto de datos. Hay tres componentes importantes en los datos temporales de series temporales: estacionalidad, tendencia y ruido.

La estacionalidad es un movimiento recurrente presente en la variable de su serie temporal. Por ejemplo, la temperatura de un lugar será más alta durante los meses de verano y más baja durante los meses de invierno. Puede calcular las temperaturas mensuales promedio y utilizar esta estacionalidad como base para predecir valores futuros.

Una tendencia puede ser una tendencia ascendente o descendente a largo plazo. En una serie temporal de temperaturas, podría estar presente una tendencia debido al calentamiento global. Por ejemplo, además de la estacionalidad verano/invierno, es posible que observes un ligero aumento en las temperaturas promedio con el tiempo.

El ruido es parte de la variabilidad de una serie temporal que no puede explicarse por una estacionalidad o una tendencia. Al crear modelos, terminas combinando diferentes componentes en una fórmula matemática. Dos elementos de dicha fórmula pueden ser la estacionalidad y la tendencia. Un modelo que combine ambos nunca representará perfectamente los valores de temperatura: siempre quedará un error. Esto está representado por la figura de ruido.

Veamos un breve ejemplo para comprender cómo descomponer una serie temporal en Python, utilizando el conjunto de datos de CO2 de la biblioteca statsmodels.

Puede importar los datos de la siguiente manera:

importar statsmodels.datasets.co2 como co2
co2_data = co2.carga().datos
imprimir (datos_co2)

Hay algunos valores de NA que puede eliminar mediante interpolación, de la siguiente manera:

datos_co2 = datos_co2.fillna(datos_co2.interpolate())

Puedes ver la evolución temporal de los valores de CO2 utilizando el siguiente código:

co2_data.plot()

previsión de tuberías

Puede realizar una descomposición inmediata utilizando la función statsmodels season_decompose. El siguiente código generará un gráfico que divide la serie de tiempo en tendencia, estacionalidad y ruido (aquí llamado residual):

de statsmodels.tsa.seasonal importar season_decompose
resultado = descomposición_estacional (datos_co2)
resultado.plot()

previsión de tuberías

El desglose de los datos de CO2 muestra una tendencia al alza y una fuerte estacionalidad.

Búsqueda de correlación

Pasemos al segundo tipo de información temporal que puede estar presente en los datos de series temporales: la autocorrelación.

La autocorrelación es la correlación entre el valor actual de una serie temporal y los valores pasados. Si es así, puede utilizar los valores actuales para predecir mejor los valores futuros.

La autocorrelación puede ser positiva o negativa:

  • La autocorrelación positiva significa que es probable que un valor alto ahora produzca un valor alto en el futuro y viceversa. Pensemos en el mercado de valores: si todo el mundo compra una acción, el precio aumenta. Cuando el precio sube, la gente piensa que es una buena acción para comprar y también la compran, lo que hace que el precio suba aún más. Sin embargo, si el precio cae, todos temen una caída, venden sus acciones y el precio cae.
  • La autocorrelación negativa es lo contrario: un valor alto hoy implica un valor bajo mañana, y un valor bajo hoy implica un valor alto mañana. Un ejemplo común son las poblaciones de conejos en entornos naturales. Si hay muchos conejos salvajes a lo largo de un verano, se comerán todos los recursos naturales disponibles. Durante el invierno no quedará nada que comer, por lo que muchos de ellos morirán y la población de conejos supervivientes será pequeña. Durante este año con una población de conejos pequeña, los recursos naturales crecerán y permitirán que la población de conejos crezca el año siguiente.

Dos gráficos famosos pueden ayudarle a detectar la autocorrelación en su conjunto de datos: el gráfico ACF y el gráfico PACF.

Puede calcular un gráfico ACF usando Python de la siguiente manera:

de statsmodels.graphics.tsaplots importar plot_acf
plot_acf(datos_co2)

previsión de tuberías

En el eje x puedes ver los pasos de tiempo (retroceso en el tiempo). A esto también se le llama número de turnos. En el eje y puede ver qué tan cerca se correlaciona cada paso de tiempo con el tiempo "presente". Es evidente que existe una autocorrelación significativa en este gráfico.

El PACF es una alternativa al ACF. En lugar de dar las autocorrelaciones, le da la autocorrelación parcial. Esta autocorrelación se denomina parcial porque en cada paso atrás sólo se enumera una autocorrelación adicional. Esto es diferente del ACF, porque el ACF contiene correlaciones duplicadas cuando la variabilidad puede explicarse en múltiples puntos en el tiempo.

Por ejemplo, si el valor de hoy es el mismo que el de ayer, pero también el mismo que anteayer, el ACF mostrará dos pasos altamente correlacionados. El PACF solo mostraría ayer y eliminaría anteayer.

Puede calcular un gráfico PACF usando Python de la siguiente manera:

de statsmodels.graphics.tsaplots importar plot_pacf
plot_pacf(datos_co2)

previsión de tuberías

Puede ver a continuación que este gráfico PACF ofrece una representación mucho mejor de la autocorrelación en los datos de CO2. Existe una fuerte autocorrelación positiva con el retraso 1: un valor alto ahora significa que lo más probable es que vea un valor alto en el siguiente paso. Dado que la autocorrelación que se muestra aquí es parcial, no se ven efectos duplicados con retrasos anteriores, lo que hace que el gráfico PACF sea más nítido y claro.

Estacionariedad

Otra definición importante de series de tiempo es la estacionariedad. Una serie de tiempo estacionaria es una serie de tiempo sin tendencia. Algunos modelos de series temporales no son capaces de manejar tendencias (más sobre esto más adelante). Puede detectar la no estacionariedad mediante la prueba de Dickey-Fuller y eliminar la no estacionariedad mediante la diferenciación.

La prueba de Dickey-Fuller es una prueba de hipótesis estadística que puede detectar la no estacionariedad. Puede utilizar el siguiente código Python para aplicar una prueba de Dickey-Fuller a los datos de CO2:

de statsmodels.tsa.stattools importar adfuller
adf, pval, usedlag, nobs, crit_vals, icbest = adfuller(co2_data.co2.values)
print('estadística de prueba ADF:', adf)
print('valores p de ADF:', pval)
print('Número ADF de retrasos utilizados:', retraso usado)
print('Número de observaciones del ADF:', nobs)
print('valores críticos del ADF:', crit_vals)
print('Criterio de mejor información del ADF:', icbest)

previsión de tuberías

La hipótesis nula de la prueba ADF es que hay una raíz unitaria presente en la serie de tiempo. La hipótesis alternativa es que los datos son estacionarios.

El segundo valor es el valor p. Si este valor p es menor que 0,05, puede rechazar la hipótesis nula (rechazar la no estacionariedad) y aceptar la hipótesis alternativa (estacionariedad). En este caso, no podemos rechazar la hipótesis nula y será necesario asumir que los datos son no estacionarios. Como has visto los datos, sabes que hay una tendencia, por lo que esto también confirma el resultado que obtuvimos.

Diferenciación

Puede eliminar la tendencia de su serie temporal. El objetivo es tener únicamente variaciones estacionales: esta puede ser una forma de utilizar ciertos modelos que funcionen con la estacionalidad pero no con las tendencias.

prev_co2_value = co2_data.co2.shift()
diferencia_co2 = datos_co2.co2 – valor_co2_prev
diferenciad_co2.plot()

previsión de tuberías

Si repite la prueba del ADF en los datos diferenciados, confirmará que estos datos ahora son estacionarios:

adf, pval, usedlag, nobs, crit_vals, icbest = adfuller(differenced_co2.dropna())
print('estadística de prueba ADF:', adf)
print('valores p de ADF:', pval)
print('Número ADF de retrasos utilizados:', retraso usado)
print('Número de observaciones del ADF:', nobs)
print('valores críticos del ADF:', crit_vals)
print('Criterio de mejor información del ADF:', icbest)

previsión de tuberías

El valor p es muy bajo, lo que indica que la hipótesis alternativa (estacionariedad) es cierta.

Suavizado en caso de ruido significativo

El suavizado exponencial es una técnica estadística básica que se puede utilizar para suavizar series de tiempo. Los modelos de series de tiempo suelen tener una alta variabilidad a largo plazo, pero también una (ruidosa) variabilidad a corto plazo. El suavizado le permite suavizar la curva para que la variabilidad a largo plazo se vuelva más evidente y se eliminen los patrones (ruidosos) a corto plazo.

Esta versión suavizada de la serie temporal se puede utilizar para el análisis.

Si quieres ir aún más lejos, puedes utilizar el suavizado exponencial triple, también llamado suavizado exponencial de Holt Winter. Sólo debes usarlo cuando haya tres señales importantes en los datos de tu serie temporal. Por ejemplo, una señal podría ser la tendencia, otra podría ser la estacionalidad semanal y una tercera podría ser la estacionalidad mensual.

En el siguiente ejemplo, verá cómo aplicar un suavizado exponencial simple a los datos de CO2. El nivel de suavidad indica qué tan suave debe volverse su curva. En el ejemplo está muy bajo, lo que indica una curva muy suave. Siéntete libre de jugar con esta configuración y ver cómo se ven las versiones menos fluidas.

desde statsmodels.tsa.api importar SimpleExpSmoothing
es = SimpleExpSmoothing(co2_data.co2.values)
es.fit(smoothing_level=0.01)
plt.plot(co2_data.co2.valores)
plt.plot(es.predict(es.params, inicio=0, fin=Ninguno))
plt.mostrar()

suavizado

Una vez que se suaviza la curva, es mucho más fácil de aprender (aquí equivale a hacer la tendencia).

Modelos de un paso o de varios pasos (oneshot o autorregresivos)

El último concepto que es importante comprender antes de comenzar con el modelado es el de modelos de una sola etapa versus modelos de múltiples etapas.

Algunos modelos funcionan muy bien para predecir el siguiente paso en una serie temporal, pero carecen de la capacidad de predecir varios pasos a la vez. Estos modelos son modelos de un solo paso. Puede crear modelos de varios pasos con ellos colocando ventanas en sus predicciones, pero existe un riesgo: cuando utiliza valores predichos para hacer predicciones, sus errores pueden acumularse rápidamente y volverse muy grandes.

Los modelos de múltiples etapas son modelos que tienen la capacidad intrínseca de predecir varias etapas a la vez. Generalmente son la mejor opción para pronósticos a largo plazo y, a veces, también para pronósticos de un solo paso. Es esencial que decida cuántos pasos desea predecir antes de comenzar a crear modelos. Simplemente depende de su caso de uso.

Tipos de modelos

Ahora que ha visto los principales detalles de los datos de series de tiempo, es hora de observar los tipos de modelos que se pueden usar para predecir series de tiempo. Esta tarea suele denominarse previsión.

Modelos clásicos de series temporales.

Los modelos de series de tiempo clásicos son una familia de modelos tradicionalmente ampliamente utilizados en muchas áreas de pronóstico. Se basan en gran medida en la variación temporal dentro de una serie temporal y funcionan bien con series temporales univariadas. Existen algunas opciones avanzadas para agregar también variables externas a los modelos. Por lo general, estos modelos solo se aplican a series temporales y no son útiles para otros tipos de aprendizaje automático.

Modelos supervisados

Los modelos supervisados son una familia de modelos que se utilizan para muchas tareas de aprendizaje automático. Un modelo de aprendizaje automático se supervisa cuando utiliza variables de entrada claramente definidas y una o más variables de salida (objetivo).

Los modelos supervisados se pueden utilizar para series temporales, siempre que se tenga una manera de extraer la estacionalidad y ponerla en una variable. Los ejemplos incluyen la creación de una variable para un año, mes o día de la semana, etc. Luego se utilizan como variables X en su modelo supervisado y la "y" es el valor real de la serie temporal. También puede incluir versiones retrasadas de y (el valor anterior de y) en los datos X, para agregar efectos de autocorrelación.

Aprendizaje profundo y modelos recientes.

La creciente popularidad del aprendizaje profundo en los últimos años también ha abierto nuevas puertas para la predicción, ya que se han inventado arquitecturas específicas de aprendizaje profundo que funcionan muy bien con datos de secuencia.

La computación en la nube y la popularización de la IA como servicio también han dado lugar a una serie de nuevos inventos en este campo. Facebook, Amazon y otras grandes empresas tecnológicas están abriendo sus productos de pronóstico o poniéndolos a disposición en sus plataformas en la nube. La disponibilidad de estos nuevos modelos de "caja negra" brinda a los pronosticadores nuevas herramientas para probar y, en ocasiones, incluso pueden superar a los modelos anteriores.

Modelo clásico (AutoARIMA)

La familia de modelos ARIMA es un conjunto de modelos más pequeños que se pueden combinar. Cada parte del modelo ARIMA se puede utilizar como un componente independiente o se pueden combinar los diferentes elementos básicos. Cuando se ensamblan todos los componentes individuales, se obtiene el modelo SARIMAX. 

La dificultad con los modelos ARIMA o SARIMAX es que tienes muchos parámetros (pp, d, q) o incluso (p, d, q)(P, D, Q) que debes elegir.

En algunos casos, puede inspeccionar gráficos de autocorrelación e identificar opciones lógicas para los parámetros. Puede utilizar la implementación de modelos estadísticos de SARIMAX y probar el rendimiento con los parámetros de su elección.

Otro enfoque es utilizar una función auto-arima que optimice automáticamente los hiperparámetros por usted. La biblioteca Pyramid Python hace precisamente eso: prueba diferentes combinaciones y selecciona la que tiene mejor rendimiento.

importar pmdarima como pm
desde pmdarima.model_selection importar train_test_split
importar numpy como np
importar matplotlib.pyplot como plt

entrenar, prueba = train_test_split(co2_data.co2.values, train_size=2200)

modelo = pm.auto_arima(tren, estacional=Verdadero, m=52)
preds = modelo.predict(prueba.forma[0])

plt.plot(co2_data.co2.values[:2200], tren)
plt.plot(co2_data.co2.values[2200:], preds)
plt.mostrar()

pronóstico automático de tuberíasARIMA

En este gráfico, la línea azul representa los datos reales (datos de entrenamiento) y la línea naranja representa el pronóstico.

Es posible que vea la autorregresión vectorial, o VAR, como una alternativa multivariada a Arima. En lugar de predecir una variable dependiente, se predicen varias series de tiempo al mismo tiempo. Esto puede resultar especialmente útil cuando existen relaciones sólidas entre las diferentes series temporales. La autorregresión vectorial, al igual que el modelo AR estándar, contiene solo un componente autorregresivo.

El modelo VARMA es el equivalente multivariado del modelo ARMA. VARMA es para ARMA lo que VAR es para AR: agrega un componente de media móvil al modelo.

Si quieres ir más allá, puedes usar VARMAX. La X representa variables externas (exógenas). Las variables exógenas son variables que pueden ayudar a su modelo a realizar mejores predicciones, pero no es necesario predecirlas por sí mismas. Implementar modelos de estadísticas VARMAX es una buena manera de comenzar a implementar modelos VARMAX.

Existen versiones más avanzadas como Seasonal VARMAX (SVARMAX), pero se vuelven tan complejas y específicas que será difícil encontrar implementaciones para hacerlo de manera fácil y eficiente. Una vez que los patrones se vuelven tan complejos, resulta difícil entender lo que sucede dentro del patrón y, a menudo, es mejor comenzar a observar otros patrones familiares.

Modelo de regresión lineal

los regresión Linear es posiblemente el modelo de aprendizaje automático supervisado más simple. La regresión lineal estima relaciones lineales: cada variable independiente tiene un coeficiente que indica cómo esa variable afecta a la variable objetivo.

La regresión lineal simple es una regresión lineal en la que solo hay una variable independiente. Un ejemplo de un modelo de regresión lineal simple en datos que no son series podría ser: ventas de chocolate caliente que dependen de la temperatura exterior (grados Celsius).

En la regresión lineal múltiple, en lugar de utilizar una única variable independiente, se utilizan varias variables independientes. Puedes imaginar que el gráfico 2D se convierte en un gráfico 3D, donde el tercer eje representa la variable Precio. En este caso, construirá un Modelo lineal que explica las ventas utilizando temperatura y precio. Puede agregar tantas variables como sea necesario.

Por supuesto, este no es un conjunto de datos de series de tiempo: no hay variables temporales presentes. Entonces, ¿cómo se podría utilizar esta técnica para series temporales? La respuesta es bastante simple. En lugar de utilizar sólo la temperatura y el precio en este conjunto de datos, puede agregar las variables año, mes, día de la semana, etc.

Si está construyendo un modelo supervisado en series de tiempo, tiene la desventaja de tener que hacer un poco de ingeniería de características para extraer la estacionalidad de las variables de una forma u otra. La ventaja, sin embargo, es que agregar variables exógenas resulta mucho más fácil.

Ahora veamos cómo aplicar la regresión lineal en el conjunto de datos de CO2. Puede preparar datos de CO2 de la siguiente manera:

importar numpy como np

# extrae los datos de estacionalidad
meses = [x.mes para x en co2_data.index]
años = [x.año para x en co2_data.index]
día = [x.día para x en co2_data.index]

# se convierte en una matriz
X = np.array([día, meses, años]).T

Entonces tienes tres variables independientes: día, mes y semana. También puedes pensar en otras variables estacionales como el día de la semana, el número de semana, etc., pero por ahora, sigamos con eso.

Luego puedes usar scikit-learn para crear un modelo de regresión lineal y hacer predicciones para ver qué ha aprendido el modelo:

de sklearn.linear_model importar LinearRegression

# se ajusta al modelo
my_lr = Regresión lineal()
my_lr.fit(X, co2_data.co2.valores)

Pronóstico # en el mismo período
preds = my_lr.predict(X)

# traza lo aprendido
plt.plot(co2_data.index, co2_data.co2.valores)
plt.plot(co2_data.index, preds)

regresión lineal

Bosque aleatorio

El modelo lineal es muy limitado: sólo puede ajustarse a relaciones lineales. A veces esto es suficiente, pero en la mayoría de los casos es mejor utilizar modelos más eficientes. Random Forest es un modelo ampliamente utilizado para ajustar relaciones no lineales. Sigue siendo muy sencillo de utilizar.

La biblioteca scikit-learn tiene RandomForestRegressor que puedes usar simplemente para reemplazar LinearRegression en el código anterior.

desde sklearn.ensemble importar RandomForestRegressor

# se ajusta al modelo
my_rf = RandomForestRegressor()
my_rf.fit(X, co2_data.co2.valores)

Pronóstico # en el mismo período
preds = my_rf.predict(X)

# traza lo aprendido
plt.plot(co2_data.index, co2_data.co2.valores)
plt.plot(co2_data.index, preds)

bosque aleatorio

Por ahora, basta con comprender que este Random Forest pudo aprender mejor los datos de entrenamiento. En una parte posterior de este artículo, aprenderá sobre métodos más cuantitativos para la evaluación de modelos.

XGBoost

El modelo XGBoost es un tercer modelo que absolutamente debes conocer. Hay muchos otros modelos, pero Random Forests y XGBoost se consideran clásicos absolutos entre la familia del aprendizaje automático supervisado.

XGBoost es un modelo de aprendizaje automático basado en el marco de mejora de gradiente. Este modelo es un modelo de conjunto de alumnos débil como el Random Forest pero con una ventaja interesante. En el aumento de gradiente estándar, los árboles individuales se ajustan en secuencia y cada uno árbol El árbol de decisión consecutivo se ajusta para minimizar el error de los árboles anteriores. XGBoost logra el mismo resultado pero aún puede realizar aprendizaje en paralelo.

Puede utilizar el paquete XGBoost de la siguiente manera:

importar xgboost como xgb

# se ajusta al modelo
mi_xgb = xgb.XGBRegressor()
my_xgb.fit(X, co2_data.co2.valores)

Pronóstico # en el mismo período
preds = my_xgb.predict(X)

# traza lo aprendido
plt.plot(co2_data.index, co2_data.co2.valores)
plt.plot(co2_data.index, preds)

XGBoost

Como puede ver, este modelo también se ajusta muy bien a los datos. Aprenderá cómo realizar la evaluación del modelo en la última parte de este artículo.

Otros modelos a implementar

GARCIA

GARCH significa heterocedasticidad condicional autorregresiva generalizada. Este es un enfoque para estimar la volatilidad de los mercados financieros y normalmente se utiliza para este caso de uso. Rara vez se utiliza para otros casos de uso.

El modelo funciona bien para esto porque asume un modelo ARMA para la varianza del error de la serie temporal en lugar de los datos reales. De esta manera puede predecir la variabilidad en lugar de los valores reales.

Hay varias variaciones de la familia de modelos GARCH; por ejemplo, eche un vistazo a esto. Es bueno conocer este modelo, pero solo debe usarse cuando es necesario pronosticar la variabilidad y, por lo tanto, es relativamente diferente de los otros modelos presentados en este artículo.

TBATS

TBATS representa la combinación de los siguientes componentes:

Estacionalidad trigonométrica
Transformación Box-Cox
Errores ARMA
Tendencia
Componentes estacionales

El modelo fue creado en 2011 como una solución para pronosticar series temporales con múltiples períodos estacionales. Al ser relativamente nuevo y relativamente avanzado, está menos extendido y utilizado que los modelos de la familia ARIMA.

Se puede encontrar una implementación útil de TBATS en Python en el paquete sktime de Python.

Ahora verá tres modelos más nuevos que también se pueden utilizar con fines de previsión. Son aún más complejos de entender y dominar y pueden (o no) producir mejores resultados, dependiendo de los datos y las características específicas del caso de uso.

LSTM (memoria larga a corto plazo)

Los LSTM son redes de neuronas periódico. Las redes neuronales son modelos de aprendizaje automático muy complejos que pasan datos de entrada a través de una red. Cada nodo de la red aprende una operación muy sencilla. La red neuronal consta de muchos de estos nodos. El hecho de que el modelo pueda utilizar una gran cantidad de nodos simples hace que la predicción general sea muy compleja. Por tanto, las redes neuronales pueden adaptarse a conjuntos de datos muy complejos y no lineales.

Los RNN son un tipo especial de red neuronal, en la que la red puede aprender de datos de secuencia. Esto puede resultar útil para varios casos de uso, en particular para comprender series temporales (que son claramente secuencias de valores a lo largo del tiempo), pero también texto (las oraciones son secuencias de palabras).

Los LSTM son un tipo específico de RNN. En repetidas ocasiones han demostrado su utilidad para la previsión de series temporales. Requieren ciertos datos y son más complicados de aprender que los modelos supervisados. Una vez que los domine, pueden ser muy poderosos según sus datos y su caso de uso específico.

Para comenzar con LSTM, la biblioteca Keras en Python es un excelente punto de partida.

Profeta

Prophet es una biblioteca de series temporales de código abierto de Facebook. Este es un modelo de caja negra, ya que generará pronósticos sin muchas especificaciones por parte del usuario. Esto puede ser una ventaja porque puedes generar modelos de pronóstico casi automáticamente sin mucho conocimiento o esfuerzo.

D'un autre côté, il existe également un risque : si vous n'y prêtez pas suffisamment attention, vous pourriez très bien produire un modèle qui semble bon pour l'outil de création de modèles automatisé, mais qui, en réalité, ne fonctionne mal.

Se recomienda una validación y evaluación exhaustiva del modelo cuando se utilizan dichos modelos de caja negra, pero si descubre que funcionan bien en su caso de uso específico, puede encontrar mucho valor agregado.

Puede encontrar muchos recursos en GitHub de Facebook.

AR profundo

DeepAR es otro modelo de caja negra desarrollado por Amazon. La operación es diferente en profundidad, pero en términos de experiencia de usuario, es relativamente igual a Prophet. La idea nuevamente es tener una biblioteca de Python que haga todo el trabajo pesado por usted.

Una vez más, se recomienda precaución, ya que nunca se puede esperar que un modelo de caja negra sea completamente confiable. En la siguiente parte, verá más sobre la evaluación y evaluación comparativa de modelos, lo cual es extremadamente importante con modelos tan complejos. ¡Cuanto más complejo es un modelo, más erróneo puede ser!

Una implementación interesante y fácil de usar de DeepAR está disponible en el paquete Gluon.

Cómo evaluar modelos

Métricas de series temporales

Lo primero que hay que definir al seleccionar modelos es la métrica que se quiere mirar. En la parte anterior, vio varios ajustes con diferentes cualidades (piense en regresión lineal versus bosque aleatorio).

Para llevar la selección de modelos más allá, deberá definir una métrica para evaluar sus modelos. Un modelo muy utilizado en la predicción es el error cuadrático medio. Esta métrica mide el error en cada momento y lo eleva al cuadrado. El promedio de estos errores cuadráticos se llama error cuadrático medio. Una alternativa de uso frecuente es el error cuadrático medio: la raíz cuadrada del error cuadrático medio.

Otra medida utilizada con frecuencia es el error medio absoluto: en lugar de tomar el cuadrado de cada error, aquí se toma el valor absoluto. El error porcentual absoluto medio es una variación de esto donde el error absoluto en cada momento se expresa como un porcentaje del valor real. Esto da una medida en forma porcentual, muy fácil de interpretar.

Distribución de pruebas de formación en series temporales.

La segunda cosa a considerar al evaluar el aprendizaje automático es considerar que un modelo que funciona bien con datos de entrenamiento no necesariamente funciona bien con datos nuevos fuera de la muestra. Un modelo de este tipo se denomina modelo de sobreajuste.

Hay dos enfoques comunes que pueden ayudarle a estimar si un modelo se generaliza correctamente: pruebas divididas y validación cruzada.

La división de pruebas de tren significa que elimina algunos de sus datos antes de ajustar el modelo. Como ejemplo, puede eliminar los últimos 3 años de la base de datos de CO2 y utilizar los 40 años restantes para ajustar el modelo. Luego pronosticaría los tres años de datos de prueba y mediría la métrica de evaluación de su elección entre sus predicciones y los valores reales de los últimos tres años.

Para comparar y elegir modelos, puede crear varios modelos a partir de los 40 años de datos y realizar una evaluación del conjunto de pruebas en cada uno de ellos. Según el rendimiento de esta prueba, puede seleccionar el modelo con mejor rendimiento.

Por supuesto, si está construyendo un modelo de pronóstico a corto plazo, usar tres años de datos no tendría sentido: elegiría un período de evaluación comparable al período que realmente pronosticaría.

Validación cruzada de series temporales.

Un riesgo con la distribución de pruebas de trenes es que solo se mide en un momento dado. En el caso de datos que no son series, el conjunto de prueba generalmente se genera mediante una selección aleatoria de puntos de datos. Sin embargo, en series temporales esto no funciona en muchos casos: cuando se utilizan secuencias, no se puede eliminar un punto de la secuencia y seguir esperando que el modelo funcione.

Por lo tanto, es mejor aplicar distribuciones de pruebas de trenes de series temporales seleccionando el período final como conjunto de pruebas. El riesgo aquí es que podría salir mal si tu último período no es muy confiable. Durante los últimos períodos de la covid, podemos imaginar que muchas previsiones económicas se han deteriorado por completo: las tendencias subyacentes han cambiado.

La validación cruzada es un método que realiza evaluaciones repetidas de las pruebas de trenes. En lugar de dividir una prueba de tren, crea varias (el número exacto es un parámetro definido por el usuario). Por ejemplo, si utiliza una validación cruzada triple, dividirá su conjunto de datos en tres partes iguales. Luego ajustará el mismo modelo tres veces en dos tercios del conjunto de datos y utilizará el otro tercio para la evaluación. En última instancia, tiene tres puntajes de evaluación (cada uno en un conjunto diferente de pruebas) y puede usar el promedio como medida final.

Al hacer esto, evita seleccionar aleatoriamente un modelo que funcione en el conjunto de prueba: ahora tiene la seguridad de que funciona en múltiples conjuntos de prueba.

Sin embargo, en series temporales, no se puede aplicar una selección aleatoria para obtener múltiples conjuntos de prueba. Si hiciera esto, terminaría con secuencias a las que les faltan muchos puntos de datos.

Se puede encontrar una solución en la validación cruzada de series temporales. Lo que hace es crear múltiples conjuntos de pruebas de trenes, pero cada uno de los conjuntos de pruebas corresponde al final del período. Por ejemplo, la primera distribución de pruebas de trenes podría basarse en los primeros 10 años de datos (5 trenes, 5 pruebas). El segundo modelo se realizaría sobre los primeros 15 años de datos (10 trenes, 5 pruebas), etc. Esto puede funcionar bien, pero tiene la desventaja de que cada uno de los modelos no utiliza la misma cantidad de años en los datos de entrenamiento.

Una alternativa es hacer una división continua (siempre 5 años de entrenamiento, 5 años de prueba), pero la desventaja aquí es que nunca puedes usar más de 5 años para los datos de entrenamiento.

Experimentos sobre modelos de series temporales.

En conclusión, a la hora de seleccionar modelos de series temporales, es fundamental definir las siguientes cuestiones antes de empezar a experimentar:

  • ¿Qué métrica utilizas?
  • ¿Para qué período quieres planificar?
  • ¿Cómo se asegura de que su modelo funcione en puntos de datos futuros que el modelo no ha visto?

Una vez que tenga la respuesta a las preguntas anteriores, puede comenzar a probar diferentes modelos y utilizar la estrategia de evaluación definida para seleccionar y mejorar modelos.

Ir más lejos

Respecto a las opciones mencionadas en el apartado anterior, te invito a leer los tutoriales correspondientes. Buena lectura !