Modelos para pronosticar
Índice de contenido
Resumen:
El pronóstico, traducido groseramente como la tarea de predecir el futuro, ha estado presente en la sociedad humana durante siglos. Ya sea a través de adivinos, previsiones meteorológicas o negociación algorítmica de acciones, el hombre siempre ha estado interesado en predecir lo que depara el futuro.
¿Cómo citar el presente artículo?
Romero, J. (1 de febrero de 2018). Modelos para pronosticar. Python.JeshuaRomeroGuadarrama. https://www.Python.jeshuaromeroguadarrama.com/es/blog/advanced-forecasting/machine-learning-models-for-forecasting/.
Modelos para pronosticar by Jeshua Romero Guadarrama, available under Attribution 4.0 International (CC BY 4.0) at https://www.Python.jeshuaromeroguadarrama.com/es/blog/advanced-forecasting/machine-learning-models-for-forecasting/.
Modelos para pronosticar
Introducción
El pronóstico, traducido groseramente como la tarea de predecir el futuro, ha estado presente en la sociedad humana durante siglos. Ya sea a través de adivinos, previsiones meteorológicas o negociación algorítmica de acciones, el hombre siempre ha estado interesado en predecir lo que depara el futuro.
Sin embargo, pronosticar el futuro no es fácil. Considere a los adivinos, los gurús de la bolsa de valores o los meteorólogos: muchos intentan predecir el futuro, pero pocos lo logran. Y para aquellos que tienen éxito, nunca sabrás si fue suerte o habilidad.
En los últimos años, el poder de cómputo de los nuevos procesadores se ha vuelto mucho más asequible que, digamos, hace 30 años. Lo cual ha detonado el auge de su uso en algoritmos de Inteligencia Artificial (IA) y Aprendizaje Automático (AA). La inteligencia artificial y, especialmente, el aprendizaje automático se pueden utilizar para una amplia gama de tareas, incluida la robótica, los automóviles autónomos y el pronóstico (en este caso, se tiene una cantidad razonable de datos sobre el pasado suceptibles de ser proyectados hacia el futuro).
El objetivo de la siguiente serie de entradas es aprender las técnicas modernas de aprendizaje automático que son relevantes para el pronóstico. Por lo tanto, presentaré una gran cantidad de modelos de aprendizaje automático, junto con una explicación intuitiva del modelo, las bases matemáticas y un caso de uso aplicado. En consecuencia, se brindará una visión real de la aplicación de esos modelos de aprendizaje automático mediante ejemplos aplicados a partir de conjuntos de datos reales. La mejor parte consiste en una serie de evaluaciones honestas de los resultados: algunos modelos serán sumamente exitosos, mientras que otros serán menos exitosos.
De esta manera, la siguiente serie de entradas sobre pronóstico es diferente a muchos otros recursos, que a menudo presentan casos de uso que se ajustan perfectamente a los datos simulados. Para aprender el aprendizaje automático y la previsión de la vida real, es importante saber cómo funcionan los modelos, pero es aún más importante saber cómo evaluar un modelo de manera honesta y objetiva. Este punto de vista pragmático será la pauta a lo largo de las entradas.
Guía de lectura de las entradas
Antes de profundizar en los diferentes modelos a lo largo de esta serie, primero presentaré una descripción general del panorama del aprendizaje automático: Existen muchos tipos y familias de modelos. Cada uno de ellos tiene sus aplicaciones. Antes de comenzar, es importante tener una visión general de los tipos de modelos que existen en el aprendizaje automático y cuáles de ellos son relevantes para el pronóstico.
Después de esto, cubriré varias estrategias y métricas para evaluar modelos de pronóstico. Es importante comprender la evaluación objetiva antes de practicar: Debe comprender su objetivo antes de comenzar a practicar.
Cada una de las entradas restantes de la serie cubrirán un modelo específico con una explicación intuitiva del modelo, sus definiciones matemáticas y una aplicación en un conjunto de datos reales. Comenzaré de manera simple con métodos comunes y simples, avanzando hasta llegar a los métodos más recientes y de última generación en el mercado.
Panorama del aprendizaje automático
Tener un panorama general de los modelos de aprendizaje automático, antes de entrar en detalles, coadyuvará a comprender cómo se comparan los diferentes modelos entre sí y ayudará a mantener el panorama general a lo largo de la serie.
En primer lugar, se abordarán series de tiempo univariadas y modelos de regresión supervisados: Las principales categorías de modelos de pronóstico.
En segundo lugar, se verá una descripción más breve de las técnicas de aprendizaje automático que son menos relevantes para el pronóstico.
Modelos de series temporales univariantes
La primera categoría de modelos de aprendizaje automático de la que quiero hablar son los modelos de series temporales (series de tiempo univariadas). Los modelos de series de tiempo existen desde hace mucho tiempo, todavía se usan. También forman una base importante para varias técnicas de última generación. Son técnicas clásicas con las que cualquier pronosticador debería estar familiarizado.
Los modelos de series de tiempo son modelos que hacen un pronóstico de una variable al observar solo los desarrollos históricos de la variable misma. Esto significa que las series de tiempo, a diferencia de otras familias de modelos, no intentan describir ninguna relación “lógica” entre las variables. No intentan explicar el “por qué” de las tendencias o estacionalidades, sino que simplemente ponen una fórmula matemática sobre el pasado y tratan de proyectarla hacia el futuro.
El modelado de series de tiempo a veces se critica por esta “falta de ciencia”. Sin embargo, los modelos de series de tiempo han ganado un lugar importante en los pronósticos debido a su desempeño y no pueden ser ignorados.
Un ejemplo rápido del enfoque de series temporales
Veamos un ejemplo súper simple, puramente hipotético, de pronosticar el precio promedio de una taza de café en una ciudad imaginaria llamada $x$. Imagina que alguien ha hecho el esfuerzo de recopilar el precio promedio del café durante $90$ años en esta ciudad, con intervalos de $5$ años, y que esto ha producido los datos en la Tabla 1.
Tabla 1. Un ejemplo hipotético: El precio de una taza de café a lo largo de los años.
Año | Precio promedio |
---|---|
1960 | 0.80 |
1965 | 1.00 |
1970 | 1.20 |
1975 | 1.40 |
1980 | 1.60 |
1985 | 1.80 |
1990 | 2.00 |
1995 | 2.20 |
2000 | 2.40 |
2005 | 2.60 |
2010 | 2.80 |
2015 | 3.00 |
2020 | 3.20 |
Dichos datos ficticios muestran claramente un aumento de $20$ centavos en el precio cada $5$ años. Esta es una tendencia creciente lineal: Lineal porque aumenta con la misma cantidad cada año y creciente porque se vuelve más en lugar de menos.
Introduzcamos estos datos en Python para ver cómo trazar esta tendencia lineal creciente usando el siguiente código:
import warnings
warnings.filterwarnings('ignore')
# Introduciendo el ejemplo del café en Python y graficando la tendencia:
import pandas as pd
import matplotlib.pyplot as plt
años = [1965, 1970, 1975, 1980, 1985, 1990, 1995, 2000, 2005, 2010, 2015, 2020]
precios = [1.00, 1.20, 1.40, 1.60, 1.80, 2.00, 2.20, 2.40, 2.60, 2.80, 3.00, 3.20]
datos = pd.DataFrame({
'año' : años,
'precios': precios
})
ax = datos.plot.line(x = 'año')
ax.set_title('Precio del café a lo largo del tiempo', fontsize = 16)
# El gráfico del ejemplo del precio del café:
plt.show()
Se obtiene el gráfico anterior como resultado de correr todo el código.
Para hacer predicciones sobre el precio del café en esta ciudad hipotética, podría simplemente colocar su regla al lado del gráfico y continuar la línea ascendente: La predicción de esta variable no necesita ninguna variable explicativa más que sus valores pasados. Los datos históricos de este ejemplo le permiten pronosticar el futuro. Esta es una característica determinante de los modelos de series temporales.
Ahora veamos un ejemplo comparable, pero con los precios del chocolate caliente en lugar de los precios de una taza de café y datos trimestrales en lugar de datos cada cinco años, los cuales se pueden visualizar en la Tabla 2.
Tabla 2. Precios del chocolate caliente a lo largo de los años.
Período | Precio promedio |
---|---|
Primavera 2018 | 2.80 |
Verano 2018 | 2.60 |
Otoño 2018 | 3.00 |
Invierno 2018 | 3.20 |
Primavera 2019 | 2.80 |
Verano 2019 | 2.60 |
Otoño 2019 | 3.00 |
Invierno 2019 | 3.20 |
Primavera 2020 | 2.80 |
Verano 2020 | 2.60 |
Otoño 2020 | 3.00 |
Invierno 2020 | 3.20 |
¿Ves la tendencia? En el caso del chocolate caliente, no tiene un aumento de precio año tras año, pero sí se detecta cierta estacionalidad: En el ejemplo, los precios del chocolate caliente siguen a las temperaturas de las estaciones del año.
Introduzcamos estos datos en Python para ver cómo graficar esta tendencia estacional:
# Pasando el ejemplo del chocolate caliente a Python y graficando la tendencia:
estaciones = ["Primavera 2018", "Verano 2018", "Otoño 2018", "Invierno 2018",
"Primavera 2019", "Verano 2019", "Otoño 2019", "Invierno 2019",
"Primavera 2020", "Verano 2020", "Otoño 2020", "Invierno 2020"]
precios = [2.80, 2.60, 3.00, 3.20, 2.80, 2.60,
3.00, 3.20, 2.80, 2.60, 3.00, 3.20]
datos = pd.DataFrame({
'temporada': estaciones,
'precio': precios
})
ax = datos.plot.line(x = 'temporada')
ax.set_title('Precio del chocolate caliente a lo largo del tiempo', fontsize = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation = 45, ha = 'right')
# Gráfico de los precios del chocolate caliente:
plt.show()
Como en el ejemplo anterior, puede predecir fácilmente los precios futuros del chocolate caliente utilizando los datos anteriores sobre los precios del chocolate caliente: Los precios dependen solo de la temporada y no están influenciados por ninguna variable explicativa.
Los modelos de series temporales univariadas realizan predicciones basadas en tendencias y estacionalidad observadas en su propio pasado y no utilizan variables explicativas distintas de la variable objetivo: la variable que desea pronosticar.
Puede imaginar numerosos tipos de combinaciones de esos dos procesos; por ejemplo, tienen una estacionalidad trimestral y una tendencia lineal creciente, etc. Hay muchos tipos de procesos que pueden pronosticarse modelando los valores históricos de la variable objetivo.
Modelos de aprendizaje automático supervisado
Ahora que está familiarizado con la idea de usar el pasado de una variable, descubrirá un enfoque diferente para hacer modelos. Acaba de ver modelos de series de tiempo univariantes, que son modelos que usan solo el pasado de una variable para predecir su futuro.
A veces, este enfoque no es lógico: Los procesos no siempre siguen las tendencias y la estacionalidad. Algunas predicciones que le gustaría hacer pueden depender de otras fuentes de información independientes: variables explicativas.
En esos casos, puede usar una familia de métodos llamada aprendizaje automático supervisado que le permite modelar las relaciones entre las variables explicativas y una variable objetivo.
Un ejemplo rápido del enfoque de aprendizaje automático supervisado
Para entender este caso, tienes los datos ficticios de la Tabla 3: un nuevo ejemplo que contiene el monto de ventas de una empresa por trimestre, con tres años de datos históricos.
Tabla 3. Ventas trimestrales.
Período | Ventas trimestrales |
---|---|
Q1 2018 | 48,000 |
Q2 2018 | 20,000 |
Q3 2018 | 35,000 |
Q4 2018 | 32,0000 |
Q1 2019 | 16,000 |
Q2 2019 | 58,000 |
Q3 2019 | 40,000 |
Q4 2019 | 30,000 |
Q1 2020 | 32,000 |
Q2 2020 | 31,000 |
Q3 2020 | 63,000 |
Q4 2020 | 57,000 |
Para obtener estos datos en Python, puede usar el siguiente código:
# Obtener el ejemplo de ventas trimestrales en Python y graficar la tendencia:
trimestres = ["Q1 2018", "Q2 2018", "Q3 2018", "Q4 2018",
"Q1 2019", "Q2 2019", "Q3 2019", "Q4 2019",
"Q1 2020", "Q2 2020", "Q3 2020", "Q4 2020"]
ventas = [48, 20, 42, 32, 16, 58,
40, 30, 32, 31, 53, 40]
datos = pd.DataFrame({
'trimestre': trimestres,
'ventas': ventas
})
ax = datos.plot.line(x = 'trimestre')
ax.set_title('Ventas por trimestre', fontsize = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation = 45, ha = 'right')
# Gráfico de las ventas trimestrales:
plt.show()
El gráfico que se obtiene es un gráfico lineal que muestra las ventas a lo largo del tiempo.
Lo que puedes verse en este gráfico no se parece a los ejemplos anteriores: No existe una tendencia lineal clara (ni creciente ni decreciente), y tampoco una estacionalidad trimestral clara.
Pero como los datos se refieren a las ventas, puede imaginar muchos factores que influyen en las ventas que obtendrá. Busquemos variables explicativas que puedan ayudar a explicar las ventas. En la Tabla 4, los datos han sido actualizados con dos variables explicativas: Descuentos y Presupuesto publicitario. Ambas son variables potenciales que podrían influir en las cifras de ventas.
Tabla 4. Presupuesto trimestral de ventas, descuentos y publicidad.
Período | Ventas trimestrales | Descuento promedio | Presupuesto publicitario |
---|---|---|---|
Q1 2018 | 48,000 | 4% | 500 |
Q2 2018 | 20,000 | 2% | 150 |
Q3 2018 | 35,000 | 3% | 400 |
Q4 2018 | 32,0000 | 3% | 300 |
Q1 2019 | 16,000 | 2% | 100 |
Q2 2019 | 58,000 | 6% | 500 |
Q3 2019 | 40,000 | 4% | 380 |
Q4 2019 | 30,000 | 3% | 280 |
Q1 2020 | 32,000 | 3% | 290 |
Q2 2020 | 31,000 | 3% | 315 |
Q3 2020 | 63,000 | 6% | 625 |
Q4 2020 | 57,000 | 6% | 585 |
Echemos un vistazo a si sería posible usar esas variables para una predicción de ventas usando el siguiente código:
# Obtener el ejemplo de ventas trimestrales en Python y graficar la tendencia:
trimestres = ["Q1 2018", "Q2 2018", "Q3 2018", "Q4 2018", "Q1 2019", "Q2 2019",
"Q3 2019", "Q4 2019", "Q1 2020", "Q2 2020", "Q3 2020", "Q4 2020"]
ventas = [48, 20, 42, 32, 16, 58,
40, 30, 32, 31, 53, 40]
descuentos = [4, 2, 3, 3, 2, 6,
4, 3, 3, 3, 6, 6]
publicidad = [500, 150, 400, 300, 100, 500,
380, 280, 290, 315, 625, 585]
datos = pd.DataFrame({
'trimestre': trimestres,
'ventas': ventas,
'descuento': descuentos,
'publicidad': publicidad
})
ax = datos.plot.line(x = 'trimestre')
ax.set_title('Ventas por trimestre', fontsize = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation = 45, ha = 'right')
# Gráfico de las ventas por trimestre con variables correlacionadas:
plt.show()
El gráfico anterior, resultado de correr el código, muestra el desarrollo de las tres variables a lo largo del tiempo.
En este punto, visualmente, probablemente dirías que no hay una relación muy importante entre las tres variables. Pero echemos un vistazo más amplio al mismo gráfico con el siguiente código:
# Ampliando las variables correlacionadas del ejemplo de ventas trimestrales:
trimestres = ["Q1 2018", "Q2 2018", "Q3 2018", "Q4 2018", "Q1 2019", "Q2 2019",
"Q3 2019", "Q4 2019", "Q1 2020", "Q2 2020", "Q3 2020", "Q4 2020"]
ventas = [48, 20, 42, 32, 16, 58,
40, 30, 32, 31, 53, 40]
descuentos = [4, 2, 3, 3, 2, 6,
4, 3, 3, 3, 6, 6]
descuentos_escala_ajustada = [x * 10 for x in descuentos]
publicidad = [500, 150, 400, 300, 100, 500,
380, 280, 290, 315, 625, 585]
publicidad_escala_ajustada = [x / 10 for x in publicidad]
datos = pd.DataFrame({
'trimestre': trimestres,
'ventas': ventas,
'descuento': descuentos_escala_ajustada,
'publicidad': publicidad_escala_ajustada
})
ax = datos.plot.line(x = 'trimestre')
ax.set_title('Ventas por trimestre', fontsize = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation = 45, ha = 'right')
# Vista ampliada de las variables correlacionadas del ejemplo de ventas trimestrales:
plt.show()
De nuevo, el gráfico es resultado de correr el código. En este contexto, de repente, ¡en el gráfico se puede observar una relación muy clara entre las tres variables! La relación ya se encontraba en el gráfico sin ajustes, pero no era visualmente obvia debido a la diferencia en la escala de las curvas.
Imagine que observa una correlación tan fuerte como la del gráfico. Si tuviera que hacer este pronóstico de ventas para el próximo mes, simplemente podría preguntar a sus colegas cuál será el descuento promedio el próximo mes y cuál será el presupuesto de publicidad del próximo mes, así podría llegar a una estimación razonable del ventas futuras.
Este tipo de relaciones es lo que generalmente observa cuando realiza aprendizaje automático supervisado. El uso inteligente de esas relaciones es la idea fundamental detrás de las diferentes técnicas que verá a lo largo de esta serie.
Coeficiente de correlación
La forma visual de detectar la correlación es genial. Sin embargo, existe una forma más exacta de investigar las relaciones entre variables: El coeficiente de correlación. El coeficiente de correlación es una medida muy importante en estadística y aprendizaje automático, ya que determina cuánto se correlacionan dos variables.
En este sentido, una matriz de correlación es una matriz que contiene las correlaciones entre cada par de variables en un conjunto de datos.
Por consiguiente, el coeficiente de correlación entre dos variables $x$ e $y$ se puede calcular de la siguiente manera (utilice el siguiente código para obtener una matriz de correlación:):
# Obtener el ejemplo de ventas trimestrales en Python y graficar la correlación entre variables:
datos.corr()
ventas | descuento | publicidad | |
---|---|---|---|
ventas | 1.000000 | 0.848135 | 0.902568 |
descuento | 0.848135 | 1.000000 | 0.920958 |
publicidad | 0.902568 | 0.920958 | 1.000000 |
El código brinda las correlaciones entre cada par de variables en el conjunto de datos (una tabla de correlación con los datos del ejemplo de ventas trimestrales).
Un coeficiente de correlación siempre está entre $-1$ y $1$ (dirección de la correlación):
- Si el coeficiente de correlación tiene un valor positivo para el coeficiente de correlación significa que dos variables están correlacionadas positivamente: si una valor es más alto, entonces el otro generalmente también lo es.
- Si el coeficiente de correlación tiene un valor negativo para el coeficiente de correlación significa que dos variables están correlacionadas negativamente: si un valor es más alto, entonces el otro generalmente es más bajo.
También hay una noción de la fuerza de la correlación:
- Un coeficiente de correlación cercano a $1$ o $-1$ implica una correlación fuerte.
- Un coeficiente de correlación cercano a $0$ implica una correlación débil.
Las correlaciones fuertes son generalmente más interesantes, ya que una variable explicativa que está fuertemente correlacionada con su variable puede usarse para pronosticarla.
En las variables del ejemplo, se observa una fuerte correlación positiva entre ventas y descuento ($0.848$), así como una fuerte correlación positiva entre ventas y publicidad ($0.90$). Como las correlaciones son fuertes, podrían ser útiles para predecir las ventas futuras.
También se puede observar una fuerte correlación entre las dos variables explicativas descuento y publicidad ($0.92$). Es importante notar esto, ya que si dos variables explicativas están muy correlacionadas, puede ser de poco valor agregado usar ambas: Contienen casi la misma “información”, solo que medida en una escala diferente.
Más adelante, descubrirá numerosos modelos matemáticos que le permitirán crear modelos de las relaciones entre una variable objetivo y las variables explicativas. Esto le ayudará a elegir qué variables correlacionadas usar en un modelo predictivo.
Otras distinciones en modelos de aprendizaje automático
Para completar la descripción general del panorama del aprendizaje automático, hay algunos grupos más que deben mencionarse.
Modelos supervisados vs. Modelos no supervisados
Acabas de ver de qué se tratan los modelos supervisados. Pero también hay modelos sin supervisión. Los modelos no supervisados difieren de todos los enfoques anteriores, ya que no hay una variable objetivo en los modelos no supervisados.
Los modelos no supervisados son excelentes para hacer segmentaciones. Un ejemplo clásico es la reagrupación de clientes de una tienda, en función de la similitud de esos clientes. Hay muchos casos de uso excelentes para este tipo de segmentaciones, aunque dicho enfoque generalmente no es útil para el pronóstico.
Modelos de clasificación vs. Modelos de regresión
Dentro del grupo de modelos supervisados, existe una importante división entre clasificación y regresión. La regresión es un modelo supervisado en el que la variable objetivo es numérica. En los ejemplos que ha visto en las secciones anteriores, solo había variables objetivo numéricas (por ejemplo, cantidad de ventas). Por lo tanto, se considerarían regresiones.
En la clasificación, la variable objetivo es categórica. Un ejemplo de clasificación es predecir si un cliente específico comprará un producto (sí o no), en función de su comportamiento como cliente.
Existen muchos casos de uso importantes para la clasificación, pero cuando se habla de pronosticar el futuro, generalmente se trata de problemas numéricos y, por lo tanto, de modelos de regresión. Piense en el pronóstico del tiempo:
- En lugar de tratar de predecir el clima cálido o frío (que son categorías de clima), puede intentar predecir la temperatura (numérica).
- En lugar de predecir el clima lluvioso frente al clima seco (categorías), predeciría el porcentaje de lluvia.
Modelos univariados vs. Modelos multivariados
Una última división importante entre los diferentes enfoques en el aprendizaje automático es la división entre modelos univariados y modelos multivariados.
En los ejemplos que has visto hasta ahora, siempre había una variable objetivo (ventas). Pero en algunos casos, desea predecir múltiples variables relacionadas al mismo tiempo. Por ejemplo, en las redes sociales, es posible que desee pronosticar cuántos me gusta recibirá, pero también cuántos comentarios.
La primera posibilidad para tratar esto es construir dos modelos: un modelo para pronosticar me gusta y otro para pronosticar la cantidad de comentarios. Pero algunos modelos permiten beneficiarse de una correlación entre las variables objetivo. Estos se denominan modelos multivariantes y utilizan la correlación entre las variables objetivo de tal manera que la precisión del pronóstico mejora al pronosticar los dos al mismo tiempo.
Los modelos multivariados pueden ser excelentes descripciones científicas de la realidad, pero se debe tener cuidado con su desempeño predictivo. A veces, varios modelos tienen más rendimiento que un modelo que hace varias predicciones. Las estrategias de evaluación de modelos basadas en datos lo ayudarán a tomar la mejor decisión. Este será el alcance de la siguiente entrada.
Conclusiones
- Los modelos de series temporales univariantes utilizan datos históricos de una variable objetivo para hacer predicciones.
- La estacionalidad y la tendencia son efectos importantes que se pueden utilizar en los modelos de series temporales.
- El aprendizaje automático supervisado utiliza correlaciones entre variables para pronosticar una variable objetivo.
- El aprendizaje automático supervisado se puede dividir en clasificación y regresión. En clasificación, la variable objetivo es categórica; en regresión, la variable objetivo es numérica. La regresión es más relevante para la previsión.
- El coeficiente de correlación es un KPI de la relación entre dos variables. Si el valor está cerca de $1$ o $-1$, la correlación es fuerte; si está cerca de $0$, es débil. Una fuerte correlación entre una variable explicativa y la variable objetivo es útil en el aprendizaje automático supervisado.
- Los modelos univariados predicen una variable. Los modelos multivariados predicen múltiples variables. La mayoría de los modelos de pronóstico son univariantes, pero existen algunos modelos multivariantes.
popular post
El modelo AR de series temporales univariadas
Resumen: En esta entrada, descubrirá el modelo AR: El modelo autorregresivo.
Leer másEvaluación de modelos para pronosticar
Resumen: Al desarrollar modelos de aprendizaje automático, generalmente se comparan varios modelos durante la fase de construcción.
Leer másModelos para pronosticar
Resumen: El pronóstico, traducido groseramente como la tarea de predecir el futuro, ha estado presente en la sociedad humana durante siglos.
Leer más