Processing math: 100%

18 votos

Corrección de valores atípicos en una media corrida

Tenemos un demonio que lee datos de algunos sensores, y entre las cosas que calcula (además de simplemente informar del estado) está el tiempo medio que tardan los sensores en cambiar de un valor a otro. Mantiene una media de 64 puntos de datos y asume que el tiempo de ejecución es bastante constante.

Por desgracia, como demuestra el gráfico siguiente, los datos de entrada no son los más prístinos:

(Cada línea representa un conjunto diferente de datos; el eje x no significa realmente nada, aparte de un vago eje temporal histórico).

Mi solución obvia sería crear un histograma de los datos y luego elegir la moda. Sin embargo, me preguntaba si habría otros métodos que dieran mejores resultados o fueran más adecuados para operar con una media corrida. Algunas búsquedas rápidas en Wikipedia sugieren que los algoritmos para detectar valores atípicos también pueden ser adecuados. La simplicidad es una ventaja, ya que el demonio está escrito en C.

Editar : He buscado en Wikipedia y he encontrado estas técnicas:

  • Criterio de Chauvenet: utilizando la media y la desviación típica, calcular la probabilidad de que ocurra un dato concreto y excluirlo si la probabilidad es realmente tan mala es inferior al 50%. Aunque esto parece adecuado para corregir una media sobre la marcha, no estoy muy convencido de su eficacia: parece que con conjuntos de datos grandes no querría descartar puntos de datos.

  • La prueba de Grubbs: Otro método que utiliza la diferencia de la media a la desviación típica, y tiene alguna expresión para cuando se rechaza la hipótesis de "no valores atípicos"

  • La distancia del cocinero: Mide la influencia que tiene un punto de datos en una regresión por mínimos cuadrados; nuestra aplicación probablemente lo rechazaría si superase 1

  • Media truncada: Descarta el extremo inferior y el extremo superior, y luego toma la media como normal

¿Alguien tiene alguna experiencia concreta y puede comentar estas técnicas estadísticas?

Además, algunos comentarios sobre la situación física: estamos midiendo el tiempo medio hasta la finalización de una lavadora mecánica, por lo que su tiempo de funcionamiento debería ser bastante constante. No estoy seguro de si en realidad tiene una distribución normal.

Edición 2 : Otra pregunta interesante: cuando el demonio está arrancando, es decir, no tiene datos previos que analizar, ¿cómo debería tratar los datos entrantes? ¿Simplemente no hacer ninguna poda de valores atípicos?

Edición 3 : Una cosa más... si el hardware cambia de tal forma que los tiempos de ejecución sean diferentes, ¿merece la pena hacer el algoritmo lo suficientemente robusto como para que no descarte estos nuevos tiempos de ejecución?

13voto

Si ese gráfico de ejemplo que tienes es típico, entonces cualquiera de los criterios que enumeras funcionará. La mayoría de esos métodos estadísticos sirven para bordear los errores justo en el nivel difuso de "¿es esto realmente un error?". Pero tu problema parece salvajemente simple.. tus errores no son sólo un par de desviaciones estándar de la norma, son 20+. Estas son buenas noticias para ti.

Así que utiliza la heurística más sencilla. Acepte siempre los 5 primeros puntos, más o menos, para evitar que un pico de arranque le arruine el cálculo. Mantenga la media y la desviación estándar. Si su punto de datos queda 5 desviaciones estándar fuera de la norma, deséchelo y repita el punto de datos anterior como relleno.

Si conoce de antemano el comportamiento típico de sus datos, puede que ni siquiera necesite calcular la media y la desviación típica, ya que puede fijar límites absolutos de "rechazo". Esto es mejor, ya que un error inicial no hará explotar el detector.

5voto

sebastiaan Puntos 2910

La definición de lo que constituye un valor anormal debe ajustarse a los propios datos. El método clásico para hacerlo consiste en calcular la puntuación z de cada uno de los puntos de datos y descartar de la media cualquier valor superior a 3 puntuaciones z. La puntuación z puede hallarse tomando la diferencia entre el punto de datos y la media y dividiéndola por la desviación típica.

4voto

Yo calcularía una mediana corriente (alternativa robusta a la media) y una mad corriente (alternativa robusta a la sd), eliminaría todo lo que se aleje más de 5 mad de la mediana

https://ec.europa.eu/eurostat/documents/1001617/4398385/S4P1-MIRROROUTLIERDETECTION-LIAPIS.pdf

3voto

qrdl Puntos 17813

Otra solución es utilizar la media armónica.

Su caso es muy similar al ejemplo tratado en

http://economistatlarge.com/finance/applied-finance/differences-arithmetic-geometric-harmonic-means

1voto

Es necesario tener una idea de la variación o distribución esperada, si se quiere poder excluir como erróneos ciertos casos (más elevados) de variación. Por ejemplo, si puede aproximar la distribución del resultado de "tiempos medios" a una distribución normal (gaussiana), entonces puede hacer lo que sugiere ojblass y excluir aquellos resultados que muestren una variación superior a algún múltiplo de la desviación estándar (que puede calcularse sobre la marcha junto con su media actual). Si quiere excluir los resultados que tienen un 99,75% (más o menos) de posibilidades de ser erróneos, excluya los que varían más de 3 desviaciones estándar de la media. Si sólo quiere un 95% de certeza, excluya los que varíen más de 2 desviaciones estándar, y así sucesivamente.

Seguro que si buscas en Google "desviación típica" o "distribución gaussiana" te será de ayuda. Por supuesto, esto supone que esperas una distribución normal de los resultados. Puede que no sea así. En ese caso, el primer paso sería adivinar qué distribución esperas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X