Logotipo de Zephyrnet

Aumente la precisión de sus pronósticos con la agrupación de series temporales

Fecha:

Las series de tiempo son secuencias de puntos de datos que ocurren en orden sucesivo durante un período de tiempo. A menudo analizamos estos puntos de datos para tomar mejores decisiones comerciales u obtener ventajas competitivas. Un ejemplo es Shimamura Music, que usó Pronóstico del Amazonas a mejorar las tasas de escasez y aumentar la eficiencia empresarial. Otro gran ejemplo es Arneg, quien usó Forecast para predecir las necesidades de mantenimiento.

AWS proporciona varios servicios que se adaptan a datos de series temporales que son de código bajo/sin código, que tanto los profesionales de aprendizaje automático (ML) como los que no lo son pueden usar para crear soluciones de ML. Esto incluye bibliotecas y servicios como AutoGluón, Lienzo de Amazon SageMaker, Wrangler de datos de Amazon SageMaker, Piloto automático Amazon SageMakery Pronóstico del Amazonas.

En esta publicación, buscamos separar un conjunto de datos de series temporales en grupos individuales que muestren un mayor grado de similitud entre sus puntos de datos y reduzcan el ruido. El propósito es mejorar la precisión entrenando un modelo global que contenga la configuración del clúster o teniendo modelos locales específicos para cada clúster.

Exploramos cómo extraer características, también llamadas Características, a partir de datos de series de tiempo usando el Biblioteca TSFresh—un paquete de Python para calcular una gran cantidad de características de series temporales— y realizar agrupaciones utilizando el Algoritmo K-Means implementado en el biblioteca scikit-learn.

Utilizamos el agrupamiento de series temporales utilizando TSFresh + KMeans cuaderno, que está disponible en nuestro Repositorio GitHub. Recomendamos ejecutar este portátil en Estudio Amazon SageMaker, un entorno de desarrollo integrado (IDE) basado en la web para ML.

Resumen de la solución

La agrupación en clústeres es una técnica de ML no supervisada que agrupa elementos en función de una métrica de distancia. La distancia euclidiana se usa más comúnmente para conjuntos de datos no secuenciales. Sin embargo, debido a que una serie de tiempo tiene inherentemente una secuencia (marca de tiempo), la distancia euclidiana no funciona bien cuando se usa directamente en la serie de tiempo porque es invariable a los cambios de tiempo, ignorando la dimensión temporal de los datos. Para una explicación más detallada, consulte Clasificación y agrupamiento de series temporales con Python. Una mejor métrica de distancia que funciona directamente en series temporales es Dynamic Time Warping (DTW). Para ver un ejemplo de agrupación basada en esta métrica, consulte Datos de series temporales de clústeres para usar con Amazon Forecast.

En esta publicación, generamos funciones a partir del conjunto de datos de series temporales utilizando la biblioteca TSFresh Python para la extracción de datos. tsfresco es una biblioteca que calcula una gran cantidad de características de series de tiempo, que incluyen la desviación estándar, el cuantil y la entropía de Fourier, entre otras. Esto nos permite eliminar la dimensionalidad temporal del conjunto de datos y aplicar técnicas comunes que funcionan para datos con formatos planos. Además de TSFresh, también utilizamos Escalador estándar, que estandariza las características eliminando la media y escalando a la varianza de la unidad, y Análisis de componentes principales (PCA) para realizar la reducción de dimensionalidad. El escalado reduce la distancia entre los puntos de datos, lo que a su vez promueve la estabilidad en el proceso de entrenamiento del modelo, y la reducción de la dimensionalidad permite que el modelo aprenda de menos características mientras conserva las principales tendencias y patrones, lo que permite un entrenamiento más eficiente.

Carga de datos

Para este ejemplo, usamos el Conjunto de datos de UCI Online Retail II y realizar pasos básicos de limpieza y preparación de datos como se detalla en el Cuaderno de limpieza y preparación de datos.

Extracción de características con TSFresh

Comencemos usando TSFresh para extraer características de nuestro conjunto de datos de series temporales:

from tsfresh import extract_features
extracted_features = extract_features( df_final, column_id="StockCode", column_sort="timestamp")

Tenga en cuenta que nuestros datos se han convertido de una serie temporal a una tabla que compara StockCode valores contra Feature values.

tabla de características

A continuación, eliminamos todas las funciones con n/a valores utilizando el dropna método:

extracted_features_cleaned=extracted_features
extracted_features_cleaned=extracted_features_cleaned.dropna(axis=1)

Luego escalamos las características usando StandardScaler. Los valores en las características extraídas consisten en valores negativos y positivos. Por lo tanto, usamos StandardScaler en lugar de Escalador MínMáx:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
extracted_features_cleaned_std = scaler.fit_transform(extracted_features_cleaned)

Usamos PCA para hacer reducción de dimensionalidad:

from sklearn.decomposition import PCA
pca = PCA()
pca.fit(extracted_features_cleaned_std)

Y determinamos el número óptimo de componentes para PCA:

plt.figure(figsize=(20,10))
plt.grid()
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance')

La razón de varianza explicada es el porcentaje de varianza atribuido a cada uno de los componentes seleccionados. Por lo general, determina la cantidad de componentes que se incluirán en su modelo sumando acumulativamente la relación de varianza explicada de cada componente hasta llegar a 0.8–0.9 para evitar el sobreajuste. El valor óptimo suele darse en el codo.

Como se muestra en el siguiente cuadro, el valor del codo es de aproximadamente 100. Por lo tanto, usamos 100 como el número de componentes para PCA.

PCA

Agrupación con K-Means

Ahora usemos K-Means con la métrica de distancia euclidiana para la agrupación. En el siguiente fragmento de código, determinamos la cantidad óptima de clústeres. Agregar más clústeres disminuye el valor de inercia, pero también disminuye la información contenida en cada clúster. Además, más clústeres significa más modelos locales para mantener. Por lo tanto, queremos tener un tamaño de clúster pequeño con un valor de inercia relativamente bajo. La heurística del codo funciona bien para encontrar el número óptimo de clústeres.

from sklearn.cluster import KMeans
wcss = []
for i in range(1,10): km = KMeans(n_clusters=i) km.fit(scores_pca) wcss.append(km.inertia_)
plt.figure(figsize=(20,10))
plt.grid()
plt.plot(range(1,10),wcss,marker='o',linestyle='--')
plt.xlabel('number of clusters')
plt.ylabel('WCSSS')

El siguiente gráfico visualiza nuestros hallazgos.

codo

Basándonos en este gráfico, hemos decidido usar dos grupos para K-Means. Tomamos esta decisión porque la suma de cuadrados dentro del grupo (WCSS) disminuye a la tasa más alta entre uno y dos grupos. Es importante equilibrar la facilidad de mantenimiento con el rendimiento y la complejidad del modelo, porque aunque el WCSS continúa disminuyendo con más clústeres, los clústeres adicionales aumentan el riesgo de sobreajuste. Además, ligeras variaciones en el conjunto de datos pueden reducir inesperadamente la precisión.

Es importante tener en cuenta que ambos métodos de agrupación, K-Means con distancia euclidiana (discutido en esta publicación) y Algoritmo de K-medias con DTW, tienen sus fortalezas y debilidades. El mejor enfoque depende de la naturaleza de sus datos y de los métodos de pronóstico que esté utilizando. Por lo tanto, recomendamos experimentar con ambos enfoques y comparar su rendimiento para obtener una comprensión más holística de sus datos.

Conclusión

En esta publicación, discutimos las poderosas técnicas de extracción de características y agrupación para datos de series temporales. Específicamente, mostramos cómo usar TSFresh, una popular biblioteca de Python para la extracción de características, para preprocesar sus datos de series temporales y obtener características significativas.

Cuando se completa el paso de agrupación en clústeres, puede entrenar varios modelos de pronóstico para cada clúster o usar la configuración del clúster como una característica. Referirse a Guía para desarrolladores de Amazon Forecast para obtener información sobre ingesta de datos, entrenamiento predictory generar pronósticos. Si tiene metadatos de elementos y datos de series temporales relacionados, también puede incluirlos como conjuntos de datos de entrada para el entrenamiento en Forecast. Para obtener más información, consulte Inicie su viaje exitoso con la previsión de series temporales con Amazon Forecast.

Referencias


Acerca de los autores

patrusheAleksandr Pátrushev es Arquitecto de Soluciones Especializado en IA/ML en AWS, con sede en Luxemburgo. Le apasiona la nube y el aprendizaje automático, y la forma en que podrían cambiar el mundo. Fuera del trabajo, disfruta del senderismo, los deportes y pasar tiempo con su familia.

celimawsChong En Lim es arquitecto de soluciones en AWS. Siempre está explorando formas de ayudar a los clientes a innovar y mejorar sus flujos de trabajo. En su tiempo libre, le encanta ver anime y escuchar música.

emiasnikEgor Miásnikov es un arquitecto de soluciones en AWS con sede en Alemania. Le apasiona la transformación digital de nuestras vidas, negocios y el mundo mismo, así como el papel de la inteligencia artificial en esta transformación. Fuera del trabajo, disfruta leer libros de aventuras, hacer caminatas y pasar tiempo con su familia.

punto_img

Información más reciente

punto_img