Introducción a las series de tiempo y Prophet
** También te puede interesar leer: 5 tendencias de analítica avanzada para retailers y cpgs
Las series de tiempo son un conjunto de valores recopilados, registrados o medidos en intervalos de tiempo regulares. Las series de tiempo pueden ser utilizadas para diferentes propósitos en ingeniería, medicina, negocios y finanzas, con el fin de analizar y predecir el comportamiento futuro de los datos en cuestión. Algunos ejemplos de series de tiempo podrían ser, histórico de precios de acciones, datos de ventas, datos de salud, entre otros muchos otros posibles casos.
Por su parte, Prophet es una herramienta open source desarrollada por Facebook que ayuda con la predicción y el análisis de las series de tiempo. Tiene como principal objetivo su rápida y fácil implementación dando buenos resultados gracias a su versatilidad para adaptarse a tendencias no lineales, estacionalidad e incluso los días festivos. En este blog te mostraremos un caso de uso de experimentación para que evalúes usarla.
Instalación de Prophet
Para instalar Prophet en Python se puede hacer de manera fácil debido a que que está en PyPI por lo que se puede usar pip para su instalación con el siguiente comando en la terminal de windows.
pip install prophet
Cabe mencionar que prophet solo funciona en versiones de Python superiores a 3.7.
También se puede instalar por medio de conda-forge utilizando el siguiente comando:
conda install -c conda-forge prophet
Una vez hecho esto, se puede empezar a utilizar la librería.
Análisis exploratorio de datos
Para tener un mejor entendimiento de los datos y por ende de que se debe esperar de la predicción de un modelo, se realiza un análisis exploratorio de los datos, en donde se espera encontrar patrones, valores atípicos o eventos anómalos, y relaciones entre variables.
** También te puede interesar leer: ¿Cómo segmentar mi mercado usando mapas? – Datlas Caso de Uso
Con el fin de que el entendimiento del blog sea transmitido de una mejor manera, estaremos desarrollando un modelo práctico con Prophet. En este caso, usaremos una base de datos que contiene el uso de electricidad en una ciudad de Estados Unidos. Primeramente usaremos un poco de python y su librería pandas para hacer nuestro análisis exploratorio.
Esta primera figura, desglosa el contenido de la base de datos que estamos utilizando, donde podemos ver el consumo de energía a través de los años, a primera vista esto no nos dice mucho, ya que parece que todo está similar, sin embargo se pueden hacer todavía más acciones para visualizar de una manera más significativa nuestros datos.
En la figura anterior tenemos una visualización de cómo se comporta dicho consumo de energía por día de la semana, además de una segmentación por estación del año. Aquí podemos notar como en la temporada de verano e invierno hay un consumo mayor a comparación del resto de las estaciones, esto se puede deber a los climas y/o calentadores que se suelen usar en dichas temporadas. Así mismo también vemos que los días sábados y domingos tienen un decrecimiento en el consumo de energía, lo cual se puede deber a que las personas tienden a estar menos tiempo en casa y por lo tanto consumen menos energía.
Analizar los datos antes de pasar a las predicciones es algo muy importante que se debe de llevar a cabo, ya que nos ayuda a tener una perspectiva más acertada de nuestros datos y de los pasos a seguir para su manejo.
Predicciones con Prophet
Ahora bien, pasando al modelado de futuras predicciones, Prophet tiene una forma fácil de hacer sus predicciones, ya que el único verdadero cambio que se debe de hacer a la base de datos original es renombrar la columna de tiempo a ‘ds’ y la columna a predecir a ‘y’.
**También te puede interesar : Tendencias en la Ciencia de Datos para el 2024 – COLUMNA DE OPINIÓN DATLAS
Una vez hecho esto, Prophet nos da la ventaja de entrenar al modelo con datos históricos, por lo que se recomienda primero ver qué tan bien se está ajustando a tus datos. Para esto podemos separar la base de datos en dos, una siendo nuestra base de datos ‘Train’, la cual le daremos al modelo para que entrene y la otra sería la de ‘Test’, en donde realizaremos la prueba de predicción para ver que tan bien se ajusta a los datos en cuestión.
Lo único que restaría sería llamar a la función de Prophet, la cual se puede hacer fácilmente asignando el objeto a una variable como lo sería ‘m=Prophet()’, después usamos el método ‘.fit’ de Prophet y les damos los valores de entrenamiento previamente especificados. Por último, utilizamos el atributo ‘.predict’ con los datos de prueba para que realice la predicción.
split_date = '1-Jan-2016'
df_train = df.loc[df.index <= split_date].copy()
df_test = df.loc[df.index > split_date].copy()
m = Prophet()
m.fit(df_train)
forecast = m.predict(df_test)
A continuación se muestra como fue la predicción del modelo Prophet en comparación de los datos reales que ya teníamos. En donde el azul son las predicciones y el rojo son los valores actuales.
Se puede observar que el modelo consideró que había una tendencia a la baja en la cantidad de uso de energía a través de los años y por ende los valores arrojados por la predicción son menores a los reales, sin embargo sus intervalos de confianza están dentro del rango de los valores reales.
**También te podría interesar: ¿Qué es el sell-in y sell-out? ¿Y cómo se aprovecha en el análisis de datos?
Por último, Prophet también puede hacer predicciones a futuro, para esto solo debemos de hacer unos pequeños cambios al código anterior, así como también especificar que tanto tiempo queremos predecir y listo, de esta forma tendríamos nuestras predicciones a futuro con sus respectivos intervalos de confianza.
model=Prophet()
model.fit(df)
future = model.make_future_dataframe(periods=365*24, freq='h', include_history=False)
forecast = model.predict(future)
Evaluación del modelo
Como a todo modelo, es importante hacer su respectiva evaluación, esto con la intención de saber si es lo suficientemente bueno para lo que buscamos o si es necesario realizar ajustes o incluso cambio al modelo. Para este caso se realizó el cálculo de “Error cuadrático medio”, “Error absoluto medio” y “Porcentaje de error absoluto medio”.
from sklearn.metrics import mean_squared_error, mean_absolute_error
np.sqrt(mean_squared_error(y_true=df_test['y'],
y_pred=forecast['yhat']))
mean_absolute_error(y_true=df_test['y'],
y_pred=forecast['yhat'])
def mean_absolute_percentage_error(y_true, y_pred):
y_true, y_pred = np.array(y_true), np.array(y_pred)
return np.mean(np.abs((y_true - y_pred) / y_true)) * 100
mean_absolute_percentage_error(y_true=df_test['y'],
y_pred=forecast['yhat'])
Donde se obtuvieron los valores, de 2603, 2045 y 13.58% respectivamente. Este último dato resulta el más útil, ya que nos dice que en promedio las predicciones realizadas cuentan con un 13.58% de error a comparación del valor real, por lo que si bien no es un número bajo, pudiera ser considerado dentro de un rango aceptable.
**También de podría interesar: IMPULSA TU NEGOCIO CON DATOS
Así mismo también se podría comparar contra otros modelos de series de tiempo como lo sería ARIMA, Holt Winters, ETS, etc. con el fin de ver cual es el modelo que mejor se está ajustando a tus datos.
Ventajas y limitaciones de Prophet
Tras realizar este ejercicio con la librería Prophet, nos pudimos dar cuenta de algunas de sus ventajas y desventajas, entre ellas destacan:
+Es rápido y fácil de usar aún para usuarios sin tanta experiencia.
+Da predicciones con intervalos de confianza que pueden llegar a ser útiles.
+Automatiza grandes partes del proceso de modelado de series de tiempo.
+Se puede agregar días festivos y/o eventos.
-Limitado para problemas de mayor complejidad.
-La interpretación no es tan intuitiva y puede resultar confusa.
-No es aplicable para todos los casos de series de tiempo.
En general es una buena herramienta para hacer pronósticos, sin embargo es importante considerar sus limitaciones y verificar que es aplicable para el caso que vayas a realizar para de esta forma maximizar su eficiencia, obteniendo los mejores resultados para la tarea en mano.
**También te podría interesar: El arte de las ventas: Diferencia entre venta inbound y outbound
-Keep it weird-