machine learning algorithms machine-learning classification

machine-learning - machine learning classification algorithms



¿Técnica recomendada de detección de anomalías para un escenario simple y unidimensional? (3)

Echa un vistazo a la regla de tres sigma :

mu = mean of the data std = standard deviation of the data IF abs(x-mu) > 3*std THEN x is outlier

Un método alternativo es la prueba atípica IQR :

Q25 = 25th_percentile Q75 = 75th_percentile IQR = Q75 - Q25 // inter-quartile range IF (x < Q25 - 1.5*IQR) OR (Q75 + 1.5*IQR < x) THEN x is a mild outlier IF (x < Q25 - 3.0*IQR) OR (Q75 + 3.0*IQR < x) THEN x is an extreme outlier

esta prueba generalmente es empleada por los diagramas de caja (indicados por los bigotes):

EDITAR:

Para su caso (datos simples 1D univariados), creo que mi primera respuesta es adecuada. Sin embargo, eso no es aplicable a datos multivariantes.

@smaclell sugirió usar K-means para encontrar los valores atípicos. Además del hecho de que es principalmente un algoritmo de agrupamiento (no una técnica de detección de valores atípicos), el problema con los k-means es que requiere saber de antemano un buen valor para la cantidad de clústeres K.

Una técnica más adecuada es el DBSCAN : un algoritmo de agrupamiento basado en la densidad. Básicamente, crece regiones con una densidad suficientemente alta en grupos que serán un conjunto máximo de puntos conectados a la densidad.

DBSCAN requiere dos parámetros: epsilon y minPoints . Comienza con un punto arbitrario que no ha sido visitado. Luego encuentra todos los puntos vecinos dentro del epsilon de distancia del punto de inicio.

Si el número de vecinos es mayor o igual que minPoints , se forma un clúster. El punto de partida y sus vecinos se agregan a este clúster y el punto de partida se marca como visitado. El algoritmo repite el proceso de evaluación para todos los vecinos recursivamente.

Si el número de vecinos es menor que minPoints , el punto se marca como ruido .

Si un clúster está totalmente expandido (se visitan todos los puntos dentro del alcance), entonces el algoritmo procede a iterar a través de los puntos no visitados restantes hasta que se agoten.

Finalmente, el conjunto de todos los puntos marcados como ruido se consideran atípicos .

Tengo un escenario en el que tengo varios miles de instancias de datos. Los datos en sí se representan como un único valor entero. Quiero ser capaz de detectar cuando una instancia es un extremo atípico.

Por ejemplo, con los siguientes datos de ejemplo:

a = 10 b = 14 c = 25 d = 467 e = 12

d es claramente una anomalía, y me gustaría realizar una acción específica basada en esto.

Estuve tentado de probar un uso de mi conocimiento del dominio particular para detectar anomalías. Por ejemplo, calcule una distancia del valor medio que es útil, y verifique eso, basado en la heurística. Sin embargo, creo que es probablemente mejor si investigo técnicas de detección de anomalías más generales y robustas, que tienen alguna teoría detrás de ellas.

Dado que mi conocimiento práctico de las matemáticas es limitado, espero encontrar una técnica que sea simple, como el uso de la desviación estándar. Esperemos que la naturaleza unidimensional de los datos haga de este un problema bastante común, pero si se requiere más información para el escenario, por favor deje un comentario y le daré más información.

Editar: pensé que agregaría más información sobre los datos y lo que he intentado en caso de que haga una respuesta más correcta que otra.

Los valores son todos positivos y no son cero. Espero que los valores formen una distribución normal. Esta expectativa se basa en una intuición del dominio en lugar de en el análisis, si esto no es algo malo de asumir, házmelo saber. En términos de agrupamiento, a menos que también haya algoritmos estándar para elegir un valor k, me resultaría difícil proporcionar este valor a un algoritmo de k-medias.

La acción que deseo realizar para un valor atípico / anomalía es presentárselo al usuario, y recomendar que el punto de datos se elimine básicamente del conjunto de datos (no entraré en cómo lo harían, pero tiene sentido para mi dominio), por lo tanto, no se usará como entrada a otra función.

Hasta ahora he intentado tres sigma y la prueba de IQR atípico en mi conjunto de datos limitados. IQR señala valores que no son lo suficientemente extremos, three-sigma señala instancias que se ajustan mejor a mi intuición del dominio.

La información sobre algoritmos, técnicas o enlaces a recursos para aprender sobre este escenario específico son respuestas válidas y bienvenidas.

¿Qué es una técnica de detección de anomalías recomendada para datos simples y unidimensionales?


Hay una variedad de técnicas de agrupamiento que podría usar para tratar de identificar tendencias centrales dentro de sus datos. Uno de esos algoritmos que utilizamos mucho en mi curso de reconocimiento de patrones fue K-Means . Esto le permitiría identificar si hay más de un conjunto de datos relacionados, como una distribución bimodal . Esto requiere tener cierto conocimiento de cuántos conglomerados esperar, pero es bastante eficiente y fácil de implementar.

Una vez que tenga los medios, podría tratar de averiguar si algún punto está lejos de cualquiera de los medios. Puedes definir ''lejos'' como quieras, pero recomendaría las sugerencias de @Amro como un buen punto de partida.

Para una discusión más profunda de los algoritmos de agrupamiento, consulte la entrada de wikipedia sobre la agrupación.


Tanto la regla de tres sigma como la prueba de IQR se utilizan a menudo, y hay un par de algoritmos simples para detectar anomalías.

The three-sigma rule is correct mu = mean of the data std = standard deviation of the data IF abs(x-mu) > 3*std THEN x is outlier

La prueba IQR debe ser:

Q25 = 25th_percentile Q75 = 75th_percentile IQR = Q75 - Q25 // inter-quartile range If x > Q75 + 1.5 * IQR or x < Q25 - 1.5 * IQR THEN x is a mild outlier If x > Q75 + 3.0 * IQR or x < Q25 – 3.0 * IQR THEN x is a extreme outlier