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?

-1voto

¿Quizá un buen método sería ignorar cualquier resultado que esté más allá de algún valor definido fuera de la media actual?

-1voto

tufkab Puntos 599

La respuesta ingenua (y posiblemente la mejor) a la pregunta del bootstrapping es "Aceptar los N primeros valores sin filtrar". Elija N para que sea lo más grande posible mientras sigue permitiendo que el tiempo de configuración sea "corto" en su aplicación. En este caso, usted podría considerar el uso de la anchura de la ventana (64 muestras) para N.

Entonces yo optaría por algún tipo de filtro basado en media y sigma.

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