Contexto: estoy desarrollando un sistema que analiza datos clínicos para filtrar datos inverosímiles que podrían ser errores tipográficos.
Lo que hice hasta ahora:
Para cuantificar la plausibilidad, mi intento hasta ahora fue normalizar los datos y luego calcular un valor de plausibilidad para el punto p en función de su distancia a los puntos de datos conocidos en el conjunto D (= el conjunto de entrenamiento):
Con esa cuantificación, puedo seleccionar un umbral que separe los datos plausibles de los datos inverosímiles. Estoy usando python / numpy.
Mis problemas:
- Este algoritmo no puede detectar dimensiones independientes. Idealmente, podría poner todo lo que sé sobre el registro en el algoritmo y dejar que descubra por sí mismo que la dimensión X no influye en la plausibilidad del registro.
- El algoritmo realmente no funciona para valores discretos como booleanos o entradas seleccionadas. Podrían asignarse a valores continuos, pero es contrario a la intuición que Seleccionar 1 está más cerca de Seleccionar 2 que de Seleccionar 3.
Pregunta:
¿Qué tipo de algoritmos debo buscar para esta tarea? Parece que hay un montón de opciones que incluyen enfoques basados en el vecino más cercano, en clustering y estadísticos. Además, tengo problemas para encontrar documentos que aborden la detección de anomalías de esta complejidad.
Cualquier consejo es muy apreciado.
[Editar] Ejemplo:
Supongamos que los datos consisten en la altura de una persona, el peso de una persona y la marca de tiempo, por lo que son datos 3D. El peso y la altura están correlacionados, pero la marca de tiempo es completamente independiente. Si solo considero las distancias euclidianas, tendría que elegir un umbral pequeño para ajustar la mayoría de mis datos de validación cruzada. Idealmente, el algoritmo simplemente ignoraría la dimensión de marca de tiempo, porque es irrelevante determinar si un registro es plausible, porque la marca de tiempo no se correlaciona con las otras dimensiones de ninguna manera. Cualquier marca de tiempo es plausible.
Por otro lado, uno podría inventar ejemplos donde la marca de tiempo sí importa. Por ejemplo, podría ser que el valor Y para la característica X sea plausible cuando se mide antes de una fecha determinada, pero no después de una fecha determinada.
Respuestas:
Una formulación típica de detección de anomalías es encontrar la media y la varianza para cada uno de dispone de datos no anómalos y si es un vector de las características que tienen componentes definir la probabilidad de una combinación de características comox x i p ( x )m x xi p(x)
donde cada es gaussiano distribuido:x i ∼ N ( μ i , σ 2 i )xi xi∼N(μi,σ2i)
se produce una anomalía cada vez quep(x)<ϵ
La distribución de cada no necesita ser realmente normal, pero es mejor si es al menos normal. Pero las características que usa son arbitrarias; pueden tomarse directamente de los datos sin procesar o calcularse, por lo que, por ejemplo, si cree que una característica se modela mejor con , configure la característica para lugar de .xi xi log log(xi) xi
Esto parece ser muy similar a lo que está haciendo si toma .q=μ
Determinandoϵ
El algoritmo se ajusta a ejemplos negativos (no anomalías). Pero se determina a partir del conjunto de validación cruzada, y generalmente se selecciona como el valor que proporciona la mejor puntuaciónϵ F1
Pero para calcular F1 necesita saber qué es anómalo y qué no; Es decir, los verdaderos positivos son cuando el sistema predice una anomalía y en realidad es una anomalía, los falsos positivos son anomalías predichas que en realidad no lo son, etc. Entonces, a menos que tenga eso, entonces puede que tenga que recurrir a las conjeturas.
El problema de las características correlacionadas
Sin embargo, lo anterior tiene un inconveniente si las características están correlacionadas. Si lo son, entonces el cálculo anterior puede fallar al marcar algo como realmente anómalo. Una solución para esto es usar el gaussiano multivariado para características donde es la matriz de covarianza.m Σ
Lo mismo ocurre con la búsqueda de y este enfoque también tiene un inconveniente, que es que debe calcular el inverso de . Por lo tanto, debe haber al menos tantas muestras como características y si el número de características es grande, el proceso será computacionalmente intensivo, y debe protegerse contra características linealmente dependientes. Tenga en cuenta esas advertencias, pero parece que no es un problema.ϵ Σ
fuente
Casi terminé el proyecto donde necesitaba resolver estos problemas y me gustaría compartir mi solución, en caso de que alguien tenga los mismos problemas.
En primer lugar, el enfoque que describí es muy similar a una Estimación de la densidad del núcleo . Entonces, eso fue bueno saber para la investigación ...
Características independientes
Las características independientes se pueden filtrar midiendo su coeficiente de correlación . Comparé todas las características por par y medí la correlación. Luego, tomé el coeficiente de correlación absoluto máximo de cada característica como factor de escala. De esta forma, las características que no se correlacionan con ninguna otra se multiplican por un valor cercano a 0 y, por lo tanto, su efecto sobre la distancia euclidiana(también conocida como ) es insignificante.||x1−x2|| distance(x1,x2)
Tenga cuidado: el coeficiente de correlación solo puede medir correlaciones lineales. Vea la página wiki vinculada para más detalles. Si la correlación en los datos se puede aproximar linealmente, esto funciona bien. De lo contrario, debería echar un vistazo a la última página de este documento y ver si puede usar su medida de correlación para obtener un factor de escala.
Valores discretos
Usé el algoritmo descrito solo para valores continuos. Se utilizaron valores discretos para filtrar el conjunto de entrenamiento. Entonces, si tengo la altura y el peso de una persona y sé que es mujer, solo miraré muestras de otras mujeres para verificar si hay alguna anomalía.
fuente