Estoy trabajando en las estadísticas de las construcciones de software. Tengo datos de cada compilación sobre el tiempo transcurrido y el tiempo de aprobación, y generamos unos 200 por semana.
La tasa de éxito es fácil de agregar, puedo decir que el 45% aprobó una semana cualquiera. Pero también me gustaría agregar el tiempo transcurrido, y quiero asegurarme de no tergiversar demasiado los datos. He pensado que es mejor preguntar a los profesionales :-)
Digamos que tengo 10 duraciones. Representan casos de aprobación y de fracaso. Algunas construcciones fallan inmediatamente, lo que hace que la duración sea inusualmente corta. Algunas se cuelgan durante las pruebas y finalmente se agotan, lo que provoca duraciones muy largas. Construimos diferentes productos, por lo que incluso las construcciones exitosas varían entre 90 segundos y 4 horas.
Puede que consiga un juego como este:
[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]
Mi primera aproximación fue obtener la mediana del tiempo ordenando el conjunto y eligiendo el valor medio, en este caso 7812 (no me molesté en hacer la media aritmética de los conjuntos pares).
Desgraciadamente, esto parece generar mucha variación, ya que sólo elijo un valor determinado. Así que si yo fuera a la tendencia de este valor sería rebotar alrededor de entre 5000-10000 segundos, dependiendo de lo que construir estaba en la mediana.
Así que para suavizar esto, intenté otro enfoque: eliminar los valores atípicos y luego calcular una media sobre los valores restantes. Decidí dividirlo en terciles y trabajar sólo en el del medio:
[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]
La razón por la que esto me parece mejor es doble:
- No queremos ninguna acción sobre las construcciones más rápidas, ya están bien
- Las acumulaciones más largas son probablemente inducidas por el tiempo de espera, y siempre estarán ahí. Tenemos otros mecanismos para detectar esos
Así que me parece que estos son los datos que busco, pero me preocupa haber conseguido la suavidad eliminando, bueno, la verdad.
¿Es esto controvertido? ¿Es un método sano?
Gracias.
0 votos
Todavía no has dicho por qué quieres tener tu medida del tiempo transcurrido. ¿Necesita estimar el tiempo total de la máquina que está pagando? ¿Necesita estimar cuántos viajes a la máquina de café podría hacer? ¿Cuál es la acción que probablemente tomaría si conociera los tiempos?
0 votos
Además, si tienes productos heterogéneos que construyes, el rebote es natural, y no debes tratar de deshacerte de él. Si tiene una medida de la complejidad de un proyecto determinado (número de archivos, número de líneas de código, número de rutinas, etc.), entonces puede interesarle el tiempo transcurrido normalizado por la complejidad, que puede ser más estable. Si lo que quieres es que sea realmente estable y plano en el tiempo, entonces no podrás saber cuándo tienes que tomar tus medidas.
0 votos
@StasK: gracias por tus comentarios, es una aportación valiosa. La medida ya es conocida: muchas de estas construcciones tardan waaaay demasiado tiempo, y deberíamos trabajar para hacerlas más rápidas. Quiero usar la medida agregada para ver si las cosas están mejorando o empeorando.
0 votos
Y sí, lo ideal sería hacerlo por producto, pero los datos de origen no mantienen esa información, así que hago trampas basándome en lo que sé de la distribución. Esto podría cambiar con el tiempo, por supuesto, y puede que tenga que replanteármelo.
0 votos
Bueno, me parece que tienes tres grupos en tus datos: (i) construcciones que se construyen; (ii) construcciones que fallan (y dices que tienden a fallar bastante rápido), y (iii) construcciones que se cuelgan (o casi) - y ese es probablemente el principal, si no el único grupo sobre el que quieres actuar. La medida agregada del tiempo puede no ser de gran utilidad; pero algo como la décima compilación más larga, o el décimo percentil más alto de la distribución de los tiempos de compilación, podría ser una mejor medida de lo que está en el extremo de la distribución que te interesa. Eso es lo que utiliza la EPA en su control de la contaminación.
0 votos
Gracias. En realidad, no. El grupo sobre el que queremos actuar es el caso normal; las construcciones que construyen. Colectivamente hacemos eso ~500 veces/día, y si podemos optimizar ese caso ahorramos cantidades masivas de tiempo. Los otros son realmente atípicos: los rápidos son los pocos afortunados que mantienen productos pequeños o fallos inmediatos. Los lentos suelen estar colgados o funcionando en máquinas inusualmente cargadas. Ambos extremos son excepcionales.
0 votos
¿hay alguna forma de clasificar las construcciones por adelantado? ¿O al menos tiene alguna información que pueda utilizar para clasificarlas? Agrupar cosas que no son homogéneas no suele ser una buena idea, sobre todo si tienes una forma de separarlas.
0 votos
Actualmente, no. Pero podría ser algo a tener en cuenta en el futuro. Veo lo que dices sobre agrupar las cosas.