Detección de anomalías: ¿qué algoritmo usar?

10

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):

plausibility(p)=qDGauss(distance(p,q))

Con esa cuantificación, puedo seleccionar un umbral que separe los datos plausibles de los datos inverosímiles. Estoy usando python / numpy.

Mis problemas:

  1. 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.
  2. 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.

Georg
fuente
Consulte mi respuesta a stats.stackexchange.com/questions/97946/changepoints-in-r, ya que trata esta pregunta molesta (¡para algunos!).
IrishStat
¿ Estaría stats.stackexchange.com/questions/213 como el tipo de cosa que está buscando?
whuber
Dudo que puedas hacer que esto funcione para booleanos.
Aksakal
@whuber No estoy seguro, no parece cubrir cómo se pueden ignorar las dimensiones irrelevantes.
Georg
1
Por cierto, también estoy luchando por encontrar una formalización para el enfoque que describí. Si supiera el término formal, también me ayudaría con mi investigación. Quizás haya una variación de este algoritmo que aborde al menos el problema de la dimensión independiente / irrelevante.
Georg

Respuestas:

7

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 )mxxip(x)

p(x)=i=1mp(xi;μi,σi2)

donde cada es gaussiano distribuido:x iN ( μ i , σ 2 i )xixiN(μi,σi2)

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 .xixiloglog(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

F1=2PrecisionRecallPrecision+Recall

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Σ

p(x)=1(2π)m2(detΣ)1/2e12(xμ)TΣ1(xμ)

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.ϵΣ

WaTeim
fuente
Ya he probado este enfoque, incluida la distribución gaussiana multivariante. De hecho, las características no relacionadas no son un gran problema con este enfoque. Lo que encontré fue que este enfoque no es adecuado para modelos complejos. Por ejemplo, si tuviera un conjunto de datos 2D con las características F1, F2, en el caso de que aproximadamente F2 = F1 ^ 3, la distribución gaussiana multivariante solo dibuje una elipse alrededor de los datos y los modele de manera aproximada. Es por eso que elegí el enfoque descrito en la pregunta (donde no hay una q, sino muchas qs).
Georg
Entonces, ¿hay alguna manera de adoptar el enfoque gaussiano multivariado y aplicarlo para capturar modelos de datos más complejos? Por ejemplo, ¿podrían los modelos mixtos ayudarme en este caso? He leído un poco sobre esos en mi investigación, pero todavía no entiendo completamente cómo aplicarlos.
Georg
@ Georg Hmm Me pregunto si su problema no es un problema de modelos complejos, sino de datos complejos y modelos demasiado simplistas. O, en otras palabras, poco adecuado. En el caso anterior, ¿qué sucede si en lugar de usar usa ? Las características pueden tomarse de los datos o calcularse. (F1,F2)(F1,F21/3)
waTeim
Sí, lo que quiero decir es falta de ropa interior. Y sí, eso funcionaría, pero quiero que el algoritmo lo detecte automáticamente. No puedo modificar manualmente las características, debería funcionar para cualquier caso.
Georg
Aquí hay un ejemplo: los dos gráficos muestran datos de altura (eje x) y peso (eje y) (Perdón por los subtítulos en alemán;)). El primer gráfico muestra el resultado del enfoque gaussiano multivariante, el segundo del enfoque descrito en la pregunta. En ambos casos, el umbral se eligió de tal manera que el 97% de los datos de CV se considera plausible. El segundo enfoque es capaz de capturar mejor la complejidad de los datos. 1: dl.dropboxusercontent.com/u/26034024/anomaly/gauss.png 2: dl.dropboxusercontent.com/u/26034024/anomaly/distance.png
Georg
3

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.||x1x2||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.

Georg
fuente