Estoy tratando de hacer alguna detección de anomalías entre series de tiempo # usando Python y sklearn (¡pero otras sugerencias de paquetes son definitivamente bienvenidas!).
Tengo un conjunto de 10 series temporales; cada serie temporal consta de datos recopilados del valor de torque de un neumático (por lo tanto, 10 neumáticos en total) y los conjuntos pueden no contener el mismo número de puntos de datos (el tamaño del conjunto difiere) . Cada dato de serie temporal es más o menos solo tire_id, marca de tiempo y sig_value (valor de la señal o el sensor). Los datos de muestra para una serie temporal se ven así:
tire_id timestamp sig_value
tire_1 23:06.1 12.75
tire_1 23:07.5 0
tire_1 23:09.0 -10.5
Ahora tengo 10 de ellos, y 2 de ellos se comportan de manera extraña. Entiendo que este es un problema de detección de anomalías, pero la mayoría de los artículos que leo en línea están detectando puntos de anomalías dentro de la misma serie temporal (es decir, si en algunos puntos los valores de torque no son normales para ese neumático).
Para detectar qué 2 neumáticos se comportan de manera anormal, intenté usar el método de agrupamiento, básicamente agrupamiento k-significa (ya que no está supervisado).
Para preparar los datos para alimentar la agrupación de k-means, para cada serie de tiempo (también conocido como para cada neumático), calculé:
- Los 3 conjuntos principales de máximo local adyacente y mínimo local con mayor amplitud (diferencia)
- Valor medio del par
- Desviación estándar de valores de torque
También configuré el número de clústeres en solo 2, por lo tanto, clúster 1 o 2.
Entonces mi resultado final (después de asignar grupos) se ve así:
amplitude local maxima local minima sig_value_std \
tire_0 558.50 437.75 -120.75 77.538645
tire_0 532.75 433.75 -99.00 77.538645
tire_0 526.25 438.00 -88.25 77.538645
tire_1 552.50 -116.50 436.00 71.125912
tire_1 542.75 439.25 -103.50 71.125912
sig_value_average cluster
tire_0 12.816990 0
tire_0 12.816990 0
tire_0 12.816990 0
tire_1 11.588038 1
tire_1 11.588038 0
Ahora tengo una pregunta de qué hacer con este resultado ... por lo que cada neumático tiene 3 filas de datos, ya que elegí los 3 pares superiores de max / min local con 3 amplitudes más grandes, y eso significa que cada fila puede ser asignados a un grupo, y a veces se asignan a diferentes grupos para 1 llanta incluso. Además, el tamaño del clúster es normalmente mayor que solo 2.
Mis preguntas son:
- ¿Cómo hacer la detección de anomalías sobre el "conjunto de series temporales" y no solo puntos de datos individuales?
- ¿Es mi enfoque razonable / lógico? Si es así, ¿cómo puedo limpiar mi resultado para obtener lo que quiero? Y si no, ¿qué puedo hacer para mejorar?
fuente