problem clustering performance algorithm math statistics

performance - problem - clustering wiki



Modelado de distribuciĆ³n de medidas de rendimiento. (6)

A menudo, cuando tiene un valor aleatorio que solo puede ser positivo, una distribución log-normal es una buena manera de modelarlo. Es decir, toma el registro de cada medición y asume que normalmente se distribuye.

Si lo desea, puede considerar que tiene múltiples jorobas, es decir, que es la suma de dos normales que tienen una media diferente. Es un poco difícil estimar los parámetros, ya que es posible que tenga que estimar, para cada medición, su probabilidad de pertenecer a cada joroba. Eso puede ser más de lo que quieres molestarte.

Las distribuciones log-normales son muy convenientes y de buen comportamiento. Por ejemplo, no se ocupa de su promedio, se trata de su media geométrica, que es la misma que su mediana.

Por cierto, en el modelado farmacométrico, las distribuciones lognormales son ubicuas, modelando cosas como el volumen de sangre, las tasas de absorción y eliminación, la masa corporal, etc.

AÑADIDO: si desea lo que llama una distribución flotante, se denomina distribución empírica o no paramétrica. Para modelar eso, normalmente se guardan las medidas en una matriz ordenada. Entonces es fácil quitar los percentiles. Por ejemplo, la mediana es el "número medio". Si tiene demasiadas mediciones para guardar, puede ir a algún tipo de ubicación después de tener suficientes mediciones para obtener la forma general.

AGREGADO: hay una manera fácil de saber si una distribución es normal (o log-normal). Tome los registros de las mediciones y colóquelos en una matriz ordenada. Luego genera una gráfica QQ (cuantil-cuantil). Para hacer eso, genere tantos números aleatorios normales como tenga muestras, y ordénelos. Luego simplemente trace los puntos, donde X es el punto de distribución normal, e Y es el punto de muestra de registro. Los resultados deben ser una línea recta. (Una forma realmente simple de generar un número aleatorio normal es simplemente sumar 12 números aleatorios uniformes en el rango +/- 0.5.)

¿Cómo modelaría matemáticamente la distribución de mediciones repetidas del rendimiento en la vida real? "Vida real", lo que significa que no solo está repasando el código en cuestión, sino que es solo un breve fragmento de una aplicación grande que se ejecuta en un escenario de usuario típico.

Mi experiencia muestra que normalmente tiene un pico alrededor del tiempo de ejecución promedio que puede modelarse adecuadamente con una distribución gaussiana. Además, hay una "cola larga" que contiene valores atípicos, a menudo con un múltiplo del tiempo promedio. (El comportamiento es comprensible considerando los factores que contribuyen a la penalización de la primera ejecución).

Mi objetivo es modelar valores agregados que reflejen esto razonablemente, y se pueden calcular a partir de valores agregados (como para el Gauss, calcular mu y sigma a partir de N, suma de valores y suma de cuadrados). En otros términos, el número de repeticiones es ilimitado, pero los requisitos de memoria y cálculo deben minimizarse.

Una distribución gaussiana normal no puede modelar la cola larga de manera apropiada y tendrá un sesgo promedio muy fuerte, incluso por un porcentaje muy pequeño de valores atípicos.

Estoy buscando ideas, especialmente si esto se ha intentado / analizado anteriormente. He comprobado varios modelos de distribución, y creo que podría resolver algo, pero mis estadísticas están oxidadas y podría terminar con una solución exagerada. Oh, una solución completa con envoltura retráctil también estaría bien;)

Otros aspectos / ideas: a veces se obtienen distribuciones de "dos jorobas", que serían aceptables en mi escenario con un solo mu / sigma que cubriera ambas, pero idealmente se identificarían por separado.

Extrapolando esto, otro enfoque sería un "cálculo de densidad de probabilidad flotante" que usa solo un búfer limitado y se ajusta automáticamente al rango (debido a la larga cola, es posible que los intervalos no estén espaciados uniformemente): no se ha encontrado nada, pero con algunos Los supuestos sobre la distribución deberían ser posibles en principio.

Por qué (desde que se le preguntó) -

Para un proceso complejo, necesitamos garantías tales como "solo el 0.1% de las ejecuciones exceden un límite de 3 segundos, y el tiempo promedio de procesamiento es de 2.8 segundos". El rendimiento de un fragmento de código aislado puede ser muy diferente de un entorno de tiempo de ejecución normal que involucra diferentes niveles de acceso a disco y red, servicios en segundo plano, eventos programados que ocurren dentro de un día, etc.

Esto se puede resolver de forma trivial acumulando todos los datos. Sin embargo, para acumular estos datos en producción, los datos producidos deben ser limitados. Para el análisis de piezas de código aisladas, está bien una desviación gaussiana más la penalización de la primera ejecución. Eso ya no funciona para las distribuciones encontradas arriba.

[editar] Ya tengo muy buenas respuestas (y finalmente, quizás, algo de tiempo para trabajar en esto). Estoy empezando una recompensa para buscar más aportaciones / ideas.


Además de las respuestas ya dadas, considerar las distribuciones empíricas . Tengo experiencia exitosa en el uso de distribuciones empíricas para el análisis del rendimiento de varios sistemas distribuidos. La idea es muy sencilla. Necesitas construir un histograma de mediciones de rendimiento. Las mediciones deben ser discretizadas con una precisión dada. Cuando tienes un histograma puedes hacer varias cosas útiles:

  • calcule la probabilidad de cualquier valor dado (solo está limitado por la precisión);
  • construir funciones PDF y CDF para las mediciones de rendimiento;
  • Generar secuencia de tiempos de respuesta según una distribución. Este es muy útil para modelar el rendimiento.

El estándar para los tiempos de llegada aleatorios para el modelado de rendimiento es la distribución exponencial o la distribución de Poisson (que es solo la distribución de múltiples distribuciones exponenciales sumadas).


El problema que describe se llama "Ajuste de distribución" y no tiene nada que ver con las mediciones de rendimiento, es decir, este es un problema genérico de ajuste de la distribución adecuada a cualquier muestra de datos recopilados / medidos.

El proceso estándar es algo así:

  1. Adivina la mejor distribución.
  2. Ejecutar pruebas de hipótesis para comprobar qué tan bien describe los datos recopilados.
  3. Repita 1-3 si no lo suficiente.

Puede encontrar un artículo interesante que describe cómo se puede hacer con el sistema de software de código abierto R here . Creo que especialmente útil para usted puede ser la función fitdistr .


Intente con la distribución gamma http://en.wikipedia.org/wiki/Gamma_distribution

De wikipedia

La distribución gamma es frecuentemente un modelo de probabilidad para tiempos de espera ; por ejemplo, en las pruebas de vida, el tiempo de espera hasta la muerte es una variable aleatoria que frecuentemente se modela con una distribución gamma.


No es exactamente la respuesta a su pregunta, pero aún es relevante: Mor Harchol-Balter hizo un muy buen análisis del tamaño de los trabajos enviados a un planificador, El efecto de las distribuciones de tamaño de los trabajos de gran peso en el diseño de sistemas informáticos (1999) . Descubrió que el tamaño de los trabajos enviados a su sistema de asignación de tareas distribuidas tenía una distribución de ley de poder, lo que significaba que ciertos conocimientos convencionales que había asumido en la construcción de su sistema de asignación de tareas, lo más importante es que los trabajos deberían estar bien cargados. equilibrado, tuvo terribles consecuencias para los postulantes de trabajos. Ella ha hecho un buen trabajo de seguimiento en este tema.

El punto más amplio es que debes hacer preguntas como:

  1. ¿Qué sucede si las suposiciones razonables sobre la distribución del desempeño, como que toman una distribución normal, se rompen?
  2. ¿Los conjuntos de datos que considero realmente representativos del problema que estoy tratando de resolver?