Estás leyendo la publicación: ¿Cómo usar XGBoost para el análisis de series de tiempo?
XGBoost es una técnica eficiente para implementar el aumento de gradiente. Cuando hablamos de modelado de series de tiempo, generalmente nos referimos a técnicas como los modelos ARIMA y VAR. XGBoost, como técnica de aumento de gradiente, se puede considerar como un avance de las técnicas de modelado tradicionales. En este artículo, aprenderemos cómo podemos aplicar el aumento de gradiente con la técnica XGBoost para el modelado efectivo de series de tiempo. Los puntos principales que se discutirán en este artículo se enumeran a continuación.
Tabla de contenido
- ¿Qué es el aumento de gradiente?
- ¿Qué es XGBoost?
- Uso de XGBoost en series temporales
- El procedimiento
- Análisis de los datos
- Conversión de datos
- Ajuste del modelo
- Pronóstico
Comencemos con una breve introducción al aumento de gradiente.
¿Qué es el aumento de gradiente?
En el aprendizaje automático, el aumento de gradiente es un algoritmo que ayuda a realizar tareas de regresión y clasificación. Usando el conjunto de modelos de predicción débiles, el aumento de gradiente nos ayuda a hacer predicciones. Ejemplos de modelos débiles pueden ser árboles de decisión. Los modelos ensamblados que utilizan aprendices de árboles débiles pueden considerarse árboles potenciados por gradientes. Los árboles potenciados por gradiente son comparables al bosque aleatorio, aunque pueden funcionar mejor que los bosques aleatorios si se ajustan con precisión. Ayuda a generalizar el otro modelo optimizando la función de pérdida diferencial arbitraria.
¿Qué es XGBoost?
XGBoost es una biblioteca que puede ayudarnos a regularizar el aumento de gradiente en diferentes lenguajes como python, R, Julia, c ++ y Java. XGBoost significa máquina de aumento de gradiente extremo. Como software, el objetivo principal de XGBoost es acelerar y aumentar el rendimiento de los árboles de decisión potenciados por gradientes. Este software puede proporcionarnos un aumento de gradiente escalable, portátil y distribuido. Usando esta biblioteca podemos utilizar la funcionalidad en máquinas de procesamiento individuales y distribuidas.
Uso de XGBoost en series temporales
Como discutimos en la sección anterior, el aumento de gradiente se enfoca principalmente en mejorar el rendimiento de los modelos de aprendizaje automático y con el aumento de gradiente usando XGBoost podemos acelerar el procedimiento y obtener mejores resultados. Cuando hablamos del campo del análisis y pronóstico de series de tiempo, usamos modelos tradicionales como ARIMA (promedio móvil integrado autorregresivo) donde el enfoque principal o el modelo está en el análisis de regresión y si podemos realizar esta regresión con tal software y técnica podemos también lograr un rendimiento de vanguardia en el modelado de series de tiempo. El conjunto de modelos de aprendizaje automático débiles para el aumento de gradiente regularizado puede ayudarnos a mejorar los resultados en cada sección de la ciencia de datos. La sección también puede ser una serie temporal. En este artículo, veremos cómo podemos hacer que XGBoost funcione en el modelado de series de tiempo.
El procedimiento
En el procedimiento, vamos a utilizar datos de Kaggle, que son datos de pedidos de comida para llevar. Podemos encontrar los datos aquí. En estos datos, tenemos detalles sobre los pedidos con la fecha del pedido y la cantidad en el pedido. Usando esta información, estaremos prediciendo el número de pedidos para las próximas fechas. Para el procedimiento, usaremos el lenguaje python y algunas bibliotecas básicas como NumPy, pandas, matplotlib y sklearn, con esto usaremos el software XGBoost. Comencemos con el procedimiento, ya que avanzaremos mucho en el proceso, conoceremos cómo es nuestro análisis de los datos y cómo podemos usar XGBoost para pronosticar.
Análisis de los datos
Vamos a empezar con la carga de los datos.
importar pandas como pd data = pd.read_csv(‘/content/drive/MyDrive/Yugesh/time series analysis with xgboost/restaurant-1-orders.csv’) data.columns = [‘number’, ‘date’, ‘item’, ‘quantity’, ‘price’, ‘total_items’]
datos.head()
Producción:
Aquí, en los datos, podemos ver que tenemos el número de pedido, la fecha, el nombre del artículo, el precio, la cantidad y el total de artículos en el pedido. Ahora vamos a convertir los valores de fecha en valores de fecha y hora.
datos[‘date’] = pd.to_datetime(datos[‘date’].str[:10]) datos.head()
Producción:
Aquí podemos entender que para hacer predicciones sobre el recuento de pedidos, debemos tener el número de pedido, el total de artículos y la fecha en los datos. Extraigamos estos valores de nuestros datos.
order_data = datos[[‘number’,’total_items’, ‘date’]]datos de los pedidos
Producción:
Aquí podemos entender que estamos obligados a tener datos donde podamos ver cuántos pedidos tenemos en un día. Realicemos algunas operaciones más en los datos para obtener la frecuencia diaria de venta de los artículos.
res = nuevos datos[‘number’].nunique() res=res.to_frame() res
Producción:
Aquí, utilizando la columna del número de pedido, hemos encontrado el número o el pedido único y el recuento de valores. Nuestra columna de fecha ahora es un índice de datos y así es como hemos convertido nuestros datos en series de tiempo. Grafiquemos los datos.
res.plot()
Producción:
Aquí en la trama, podemos ver que nuestra serie temporal está muy dispersa y también estamos recibiendo de 5 a 15 pedidos todos los días. Dejemos clara la visualización.
importar numpy como np importar seaborn como sns importar matplotlib.pyplot como plt color_pal = [“#F8766D”, “#D39200”, “#93AA00”, “#00BA38”, “#00C19F”, “#00B9E3”, “#619CFF”, “#DB72FB”]
_ = res.plot(estilo=”.”, figsize=(15,5), color=color_pal[0]título=”venta”)
Producción:
Las cosas están mucho más claras ahora, podemos decir que ahora tenemos la densidad principal de números de pedido en el rango de 5 a 10 o 15. Ahora nuestros datos requieren algunas conversiones para que podamos ajustarlos al modelo.
Conversiones de datos
Dividamos nuestros datos.
split_date=”01-ene-2019″ data_train = res.loc[res.index <= split_date].copy() prueba_datos = res.loc[res.index > split_date].Copiar()
En esto, hemos dividido nuestros datos en datos de entrenamiento y prueba después de la fecha 1 de enero de 2019. Para que podamos verificar nuestro modelo después del año 2018. Veamos cómo están nuestros conjuntos de datos divididos.
tren_datos
Producción:
prueba_de_datos
Producción:
Grafiquemos nuestros datos divididos.
_ = data_test \ .rename(columns={‘number’: ‘TEST SET’}) \ .join(data_train.rename(columns={‘number’: ‘TRAINING SET’}), how=’outer’) \ . trama (tamaño de figura = (15,5), título = “venta”, estilo = “.”)
Producción:
Aquí podemos ver que nuestros conjuntos de datos tienen diferentes colores. Después de esto, podemos crear una función que pueda crear características de series temporales a partir de nuestros datos.
def create_features(df, etiqueta=Ninguna): df[‘date’] = df.índice df[‘hour’] = gl[‘date’].dt.hora df[‘dayofweek’] = gl[‘date’].dt.día de la semana df[‘quarter’] = gl[‘date’].dt.cuarto df[‘month’] = gl[‘date’].dt.mes df[‘year’] = gl[‘date’].dt.año df[‘dayofyear’] = gl[‘date’].dt.dayofyear df[‘dayofmonth’] = gl[‘date’].dt.día df[‘weekofyear’] = gl[‘date’].dt.weekofyear X = df[[‘hour’,’dayofweek’,’quarter’,’month’,’year’,
‘dayofyear’,’dayofmonth’,’weekofyear’]]si etiqueta: y = df[label]
devuelve X, y devuelve X
Usemos la función en nuestros datos.
Tren_X, tren_y = crear_características(tren_datos, etiqueta=”número”) Prueba_X, prueba_y = crear_características(prueba_datos, etiqueta=”número”) Tren_X
Producción:
En el resultado anterior, podemos ver cuáles son las características que tenemos en nuestros datos para el entrenamiento. Dado que XGBoost es un proceso de aprendizaje supervisado para trabajar con él, debemos hacer que nuestros datos sean los datos para el aprendizaje supervisado.
Ajuste del modelo
Importemos XGBoost y otras bibliotecas para optimizar el proceso.
importar xgboost como xgb desde xgboost importar plot_importance, plot_tree desde sklearn.metrics importar mean_squared_error, mean_absolute_error
Instanciando nuestro modelo
reg = xgb.XGBRegresor(n_estimadores=1000)
Ajustando nuestros datos en el modelo.
reg.fit(X_tren, y_tren, eval_set=[(X_train, y_train), (X_test, y_test)]early_stopping_rounds=50, detallado=Falso)
Antes de hacer predicciones sobre los datos de prueba, también podemos seguir el proceso de selección de características. En este proceso, podemos hacer esto utilizando la técnica de importancia de características. Este proceso nos ayudará a encontrar la característica a partir de los datos en los que más se basa el modelo para hacer la predicción. Una cosa más que es importante aquí es que estamos usando XGBoost, que funciona en función de la división de datos usando la función importante. Por lo tanto, encontrar la característica importante hará que el proceso en segundo plano sea mucho más claro.
_ = plot_importance(reg, altura=0.9)
Producción:
En el resultado anterior, podemos ver que el día del año es nuestra característica más importante y el modelo lo ha usado más comúnmente para dividirse en más nodos. Feature Month tiene la importancia más baja.
Pronóstico
Después de ajustar el modelo y el proceso de selección de características, podemos hacer predicciones utilizando nuestros datos de prueba y nuestro modelo. Usando las siguientes líneas de códigos podemos hacer esto.
prueba_de_datos[‘number_Prediction’] = reg.predict(X_test) data_all = pd.concat([data_test, data_train]ordenar=Falso)
Ahora vamos a trazar nuestra predicción
_ = datos_todos[[‘number’,’number_Prediction’]].plot(tamaño de figura=(15, 5))
Producción:
Aquí podemos ver nuestra predicción. Como hemos discutido, los valores de orden se mueven alrededor del rango entre 5 y 15 y nuestro modelo también predice dentro de este rango. Usando esas predicciones, podemos decirle al restaurante que se prepare alrededor de este rango solo para que podamos reducir el desperdicio de alimentos y maximizar las ganancias.
Ultimas palabras
En este artículo, hemos pasado por el proceso de aplicación de XGBoost en el modelado y pronóstico de series temporales. Además, con esto, hemos discutido algunos de los procesos de análisis de datos que pueden ser útiles para resolver problemas de la vida real.