5 votos

Algoritmo para determinar si el punto está "demasiado lejos de la media"

En resumen, tengo una colección de unos 30 scripts que manipulan conjuntos de datos y los colocan en una base de datos. Estos scripts reportan sus tiempos de ejecución así como cualquier error que ocurra a una base de datos separada. Escribí otro script que recorre esta base de datos diariamente y para cada script determina si se produjo un error. También comprueba el tiempo de ejecución de cada script 30 días atrás y los promedia.

Tomo el tiempo de ejecución del actual script y veo si es mayor de 3 desviaciones estándar que la media. Si lo es, informo de que el tiempo de ejecución está demasiado lejos de la media.

¿Es éste el método correcto para realizar dicha tarea? Tengo la impresión de que obtengo demasiados errores de "tiempo de funcionamiento demasiado alejado de la media". ¿Aumentar el tamaño de la muestra ayudaría, o no se aplica la regla de las 3 desviaciones estándar? Suponía que el 99% de los datos se encontraban dentro de las 3 desviaciones estándar y que una forma fiable de detectar los valores atípicos (un script que tardó mucho tiempo en ejecutarse) sería utilizar este método.

7voto

Bauna Puntos 176

Como ha señalado Richard, la "regla" de los tres sigmas sólo se aplica al distribución normal (curva de campana), que definitivamente no se aplica ya que sus tiempos de ejecución no pueden ser negativos:

El distribución logarítmica normal podría ser más preciso, ya que al menos sólo permite tiempos de ejecución positivos y podría tener algún tipo de sentido, de todos modos:

Pero en lugar de hacer una suposición "paramétrica" diferente sobre sus tiempos de ejecución (asumiendo algunos funcionales , podría utilizar un método no paramétrico en su lugar. En particular, si tiene muchas ejecuciones anteriores, por qué no mirar el CDF empírica ? Se trata de una función que, para un determinado x , le da a usted f(x) \= la proporción de muestras vistas anteriormente que son menores que el valor dado. Si quiere que se notifique el 1% de las ejecuciones, sólo tiene que buscar las ejecuciones que tardaron más que el 99% de las ejecuciones anteriores (el percentil 99 de la distribución empírica).

4voto

La "regla" de que sólo el 1% de una muestra está fuera de las 3 desviaciones estándar funciona cuando la distribución de valores es una distribución gaussiana (también conocida como "normal"). No sé qué distribución obtendrás para tus tiempos de ejecución. Pero es probable que no sean normales (no pueden ser inferiores a cero). También los diferentes scripts pueden tener diferentes distribuciones -- y una mezcla realmente ensucia la "Normalidad". No diré nada sobre la forma en que los tiempos de ejecución tienden a variar de vez en cuando.

Deberías echar un vistazo a las distribuciones del tiempo de ejecución de cada script -- obtén un histograma de una muestra grande. Y sólo entonces empezar a pensar en las medias y desviaciones estándar. Espero que alguien en esta lista de correo pueda sugerir una transformación de los datos de tiempo de ejecución que probablemente dé una distribución normal.

Mientras tanto: ¿qué tal si se mira el tiempo de ejecución más largo de cada lote? O un simple gráfico (estilo ASCII) puede ser muy útil para detectar un problema. Solía utilizar un script de shell UNIX tonto como el siguiente cuando monitorizaba el rendimiento de nuestras redes en los años 90.

: Display flipped histogram on ASCII display
sort -n|uniq -c|awk '{for(i=2;i<=NF;i++)printf("%s\t",$i);
mpl=85-NF*8;
if($1>=mpl)plot=mpl; else plot=$1;
for(i=1;i<=plot;i++)printf("="); print ""}'

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