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.
fuente
Respuestas:
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
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
hclust
asegurará de que tenga series de tiempo que representen una amplia gama de características de series de tiempo en sus datos.fuente
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:
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 .
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.
fuente