Una guía para la ingeniería de características en series temporales con Tsfresh

Estás leyendo la publicación: Una guía para la ingeniería de características en series temporales con Tsfresh

La ingeniería de características juega un papel crucial en muchas de las tareas de modelado de datos. Este es simplemente un proceso que define características importantes de los datos mediante los cuales un modelo puede mejorar su rendimiento. En el modelado de series de tiempo, la ingeniería de características funciona de manera diferente porque son datos secuenciales y se forman utilizando los cambios en cualquier valor según el tiempo. En este artículo, vamos a discutir la ingeniería de características en series de tiempo y también cubriremos una implementación de la ingeniería de características en series de tiempo usando un paquete llamado tsfresh. Los puntos principales que se discutirán en el artículo se enumeran a continuación.

Tabla de contenido

  1. Ingeniería de características en series de tiempo
  2. ¿Qué es tsfresh?
  3. Implementación de tsfresh para la ingeniería de características

Comencemos por entender qué características tiene la ingeniería en series de tiempo.

Ingeniería de características en series de tiempo

En el aprendizaje supervisado, la ingeniería de funciones tiene como objetivo escalar relaciones sólidas entre las nuevas funciones de entrada y salida. Hablando sobre el modelado de series de tiempo o el modelado secuencial, no alimentamos ninguna variable de entrada al modelo o no esperamos ninguna variable de salida (la entrada y las salidas están en la misma variable). Dado que las características de los datos y los métodos que conocemos sobre el modelado de series de tiempo funcionan de una naturaleza diferente. Estos datos consisten en características de tiempo en los datos con algunos valores que cambian con la característica de tiempo.

Al observar estos datos, podemos decir que las características de cualquier serie de datos de tiempo son el tiempo o que la característica principal que usamos en el modelado es el tiempo y que también es responsable de predecir buenos resultados. En series de tiempo estamos obligados a realizar ingeniería de características con la variable de tiempo. Por ejemplo, podemos requerir fechas de ingeniería del año en el que encontramos que el valor de nuestras ventas está aumentando. Los datos de series temporales se crean utilizando la variable independiente, donde el tiempo es la variable más común. La siguiente imagen puede ser un ejemplo de un gráfico de serie temporal.

🔥 Recomendado:  Cómo elegir un nicho para sitios afiliados: marco de 14 pasos

Fuente de imagen

En el gráfico, podemos ver que hemos cambiado los valores a medida que pasa el tiempo. Es posible que queramos encontrar algunas de las características de estos datos. Ejemplos de características pueden ser el valor máximo o mínimo, el valor promedio o el pico temporal en los datos. Tome un ejemplo de la imagen de abajo.

Fuente de imagen

Aquí podemos ver en qué puede consistir la característica por datos de series temporales. Podemos realizar ingeniería de características de series temporales utilizando el paquete tsfresh. Entendamos qué es tsfresh.

¿Qué es tsfresh?

tsfresh es un paquete de Python de código abierto que puede ayudarnos en la ingeniería de características de datos de series temporales. Como hemos discutido antes, la serie de tiempo son datos secuenciales, por lo que este paquete también se puede usar con cualquier tipo de datos secuenciales. Una cosa que es obligatoria sobre los datos que debería haber generado utilizando una variable independiente. Por ejemplo, en datos de series de tiempo, encontramos que la variable de tiempo es una variable independiente.

Al utilizar esta herramienta, podemos extraer características y podemos realizar análisis basados ​​en los nuevos conocimientos. La extracción de características también es útil para crear grupos a partir de la serie temporal o también podemos realizar tareas de clasificación y regresión mediante la extracción de características.

Una cosa más que puede ser muy útil para nosotros en este paquete es que es compatible con la biblioteca pandas para la manipulación de datos y también es compatible con la biblioteca sklearn que nos ayuda a proporcionar varios modelos de aprendizaje automático. Analicemos cómo se puede usar este paquete.

🔥 Recomendado:  ¿Cómo acelerar las operaciones de aprendizaje automático con Jax?

Implementación

Podemos instalar este paquete usando las siguientes líneas de códigos:

!pip instalar tsfresh

Después de la instalación, estamos listos para usar el paquete. Para comprender la naturaleza del trabajo de tsfresh, vamos a realizar una tarea de clasificación utilizando el conjunto de datos proporcionado por tsfresh que consiste en información sobre la falla del robot. En los datos, encontramos que cada robot ha recopilado series temporales de diferentes sensores. Carguemos los datos.

from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, \ load_robot_execution_failures download_robot_execution_failures()

Definición de x e y

x, y = load_robot_execution_failures()

Aquí tenemos características de los datos en la instancia x y la característica objetivo está en la instancia y.

x.cabeza()

Producción:

y.cabeza()

Producción:

En el encabezado de x podemos ver que tenemos 6 columnas en el nombre de los datos como F_x, F_y, F_z, T_x, T_y, T_z son las series de tiempo y la columna id da los diferentes robots. Visualicemos algunos de los datos usando matplotlib.

importar matplotlib.pyplot como plt x[x[‘id’] == 4].plot(subplots=Verdadero, sharex=Verdadero, figsize=(12,12)) plt.show()

Producción:

En el resultado anterior, podemos ver la serie temporal para el ID de muestra 4 que no representa ningún error. Busquemos otra muestra.

X[x[‘id’] == 14].plot(subplots=Verdadero, sharex=Verdadero, figsize=(12,12)) plt.show()

Producción:

Aquí podemos ver que tenemos algunos fallos. Comprobemos si nuestro modelo puede capturar estos detalles o no.

Extracción de características

de tsfresh import extract_features características = extract_features(x, column_id=”id”, column_sort=”time”)

Producción:

Aquí se completa el proceso de extracción de características de la serie temporal. Veamos cuántas características tenemos de estas diferentes series temporales.

características

Producción:

Aquí podemos ver 88 filas y 4734 columnas en características extraídas. Puede haber muchos no valores en las características extraídas que se pueden eliminar usando las siguientes líneas de códigos.

🔥 Recomendado:  5 estrategias de marketing en línea para pequeñas empresas que funcionan

de tsfresh.utilities.dataframe_functions importar imputar imputar (características)

Ahora podemos seleccionar características relevantes usando las siguientes líneas de códigos.

de tsfresh import select_features filtered_features = select_features(features, y) filtered_features

Producción:

En el resultado anterior, podemos ver que solo se presentan 682 columnas después de la filtración de las características. Aquí hemos realizado dos cosas con los datos: primero, extrajimos las características de los datos y segundo, filtramos las características extraídas.

Ahora podemos comparar los resultados de cualquier modelo de sklearn utilizando los datos con todas las funciones y los datos con funciones filtradas. Dividamos los datos en pruebas y entrenemos.

from sklearn.model_selection import train_test_split X_feature_train, X_feature_test, y_train, y_test = train_test_split(features, y, test_size=.4) X_filtered_train, X_filtered_test = X_feature_train[filtered_features.columns]X_feature_test[filtered_features.columns]

Ajustemos los datos con todas las características en un modelo de árbol de decisión.

from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import Classification_report classifier_feature = DecisionTreeClassifier() classifier_feature.fit(X_feature_train, y_train) print(classification_report(y_test, classifier_feature.predict(X_feature_test)))

Producción:

Aquí tenemos algunos buenos resultados con todas las características. Verifiquemos un modelo usando datos que han sido filtrados.

classifier_filtered = DecisionTreeClassifier() classifier_filtered.fit(X_filtered_train, y_train) print(classification_report(y_test, classifier_filtered.predict(X_filtered_test)))

Producción:

Aquí podemos ver que un modelo similar ha mejorado su rendimiento con el modelo filtrado.

Ultimas palabras

Aquí en este artículo, hemos discutido la ingeniería de características en series de tiempo. Junto con eso, hemos discutido un paquete de python llamado tsfresh, que se puede usar en la ingeniería de características de series temporales. Usando algunos de los módulos que hemos realizado ingeniería de características y después de la ingeniería de características, encontramos algunas mejoras en el rendimiento del modelo.

Referencias