Clasificación de series de tiempo: resultados muy pobres

11

Estoy trabajando en un problema de clasificación de series temporales en el que la entrada son datos de uso de voz de series temporales (en segundos) durante los primeros 21 días de una cuenta de teléfono celular. La variable objetivo correspondiente es si esa cuenta se canceló o no en el rango de 35-45 días. Por lo tanto, es un problema de clasificación binaria.

Estoy obteniendo resultados muy pobres de todos los métodos que he probado hasta ahora (en diversos grados). Primero probé la clasificación k-NN (con varias modificaciones) y obtuve resultados extremadamente malos. Esto me llevó a extraer características de la serie de tiempo, es decir, media, varianza, máximo, mínimo, días de ceros totales, días cero finales totales, diferencia entre el promedio de la primera mitad y el promedio de la segunda mitad, etc. y las características más predictivas parecían ser totales días ceros y días cero finales totales (utilizando varios algoritmos de clasificación). Esto funcionó mejor, pero el rendimiento aún no fue muy bueno.

Mi siguiente estrategia fue sobremuestrear las instancias negativas en mi conjunto de entrenamiento ya que había muy pocas. Esto resultó en una predicción de cancelación más correcta pero a expensas de más falsos positivos.

Estoy empezando a pensar que tal vez los datos de uso de series temporales en sí mismos simplemente no son muy predictivos (aunque el sentido común dice que debería serlo). Quizás haya alguna variable latente que no estoy considerando. Mirar los datos también muestra un comportamiento extraño. es decir, algunos ejemplos muestran un uso muy pequeño o decreciente (o, a veces, ninguno) y no se cancelan, y algunos muestran un aumento en el uso que sí se cancela. Quizás este comportamiento contradictorio no genera un límite de decisión muy claro para un clasificador.

Otra posible fuente de error es el hecho de que muchos ejemplos de capacitación son muy escasos (es decir, muchos días con 0 de uso). Una idea que aún no he probado es dividir las series de tiempo en segmentos y generar algunas características de esa manera, pero no tengo muchas esperanzas.

usuario1893354
fuente
1
Para empezar, te recomiendo que pruebes variantes de lo siguiente. Agregue los datos de uso por horas / días. 2. A partir de sus datos de entrenamiento, superponga los gráficos de estas series de tiempo para ver los patrones dentro de los dos grupos. 3. Explore varios modelos de series temporales / regresión que se ajustan bien a sus datos. 4. Use los coeficientes del modelo como características para su clasificador.
ramhiser
Me gusta tu técnica de extracción de características. Voy a probarlo. Me he convencido de que mis datos son demasiado escasos para encontrar patrones, pero quién sabe. ¡Gracias!
user1893354

Respuestas:

13

He tenido bastante éxito aplicando KNN con la deformación dinámica del tiempo como la métrica de distancia.

Mi investigación (pdf) sugiere que este enfoque es muy difícil de superar. El siguiente esquema es de mi implementación en Python de KNN y DTW en github . O ver en IPython Notebook

KNN y DTW

Si su conjunto de datos de entrenamiento es muy grande, le sugiero que realice una agrupación jerárquica de la matriz de distancia. Luego muestree de los grupos deseados para producir su conjunto de datos de entrenamiento más pequeño. Se hclustasegurará de que tenga series de tiempo que representen una amplia gama de características de series de tiempo en sus datos.

Mark Regan
fuente
44
¿Podría actualizar el enlace a su trabajo de investigación?
tilaprimera
10

Los dos enfoques para la clasificación de series de tiempo

Hay dos formas de lidiar con la entrada estructurada temporal para las tareas de clasificación:

  1. Modelo dedicado de series temporales: el algoritmo de aprendizaje automático incorpora las series temporales directamente. Cuento el modelo KNN con DTW en esta categoría.
  2. Enfoque basado en características: aquí las series temporales se asignan a otra representación, posiblemente de menor dimensión. Esto significa que el algoritmo de extracción de características calcula características tales como el valor promedio o máximo de las series de tiempo. Luego, las características se pasan como una matriz de características a un aprendizaje automático "normal", como una red neuronal, un bosque aleatorio o una máquina de vectores de soporte. Este enfoque tiene la ventaja de una mejor explicabilidad de los resultados. Además, nos permite utilizar una teoría bien desarrollada del aprendizaje automático supervisado.

También estaba implementando con éxito KNN con DTW en el pasado. Sin embargo, casi siempre pude superar su precisión con un modelo que usa características bien diseñadas. Además, KNN con DTW para escalas de clasificaciones binarias con O (n_t · m_ {train} · m_ {test}) con n_t como la longitud de la serie temporal, mtrain y mtest son el número de dispositivos en el tren y el conjunto de prueba, respectivamente . Esto significa que los cálculos toman bastante tiempo.

Por lo tanto, recomendaría seguir un enfoque basado en características.

tsfresh calcula una gran cantidad de funciones

El paquete de python tsfresh calcula una gran cantidad de tales características a partir de un pandas.DataFrame que contiene la serie temporal. Puede encontrar su documentación en http://tsfresh.readthedocs.io .

ingrese la descripción de la imagen aquí

Puedes probarlo para calcular una gran cantidad de funciones. Más tarde, puede filtrar las características por su importancia e identificar candidatos prometedores.

Descargo de responsabilidad: soy uno de los autores de tsfresh.

MaxBenChrist
fuente
Muchas gracias por tu maravillosa publicación. Tengo una serie temporal muy pequeña (p. Ej., 10 puntos de datos por serie temporal). En ese caso, ¿recomendaría usar tsfresh para mi conjunto de datos? Gracias :)
EmJ