¿Mejor por 13 puntos o por suerte?
La significancia estadística pregunta si la diferencia entre dos agentes supera lo que daría el azar. Sirve porque un agente difiere en cada ejecución, y una sola tasa por versión puede apuntar en la dirección equivocada.
La nueva versión del agente de la tienda puntúa 13 puntos más. ¿La publicas?
Al final de esta lección
Nota
Puedo decir si un agente es mejor que otro cuando cada ejecución difiere.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Pasa en k | un caso que pasó en al menos una de k ejecuciones |
| Pasa siempre | un caso que pasó en las k ejecuciones |
| Intervalo | el rango donde puede estar de verdad una tasa |
| Prueba de signos | una prueba sobre cuántos casos mejoran o empeoran |
| Valor p | la probabilidad de una diferencia así solo por azar |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Ejecuta cada caso varias veces
Ejecuta cada caso k veces con cada versión, aquí cinco. Dos números describen un caso. Pasa en k dice que pasó al menos una vez, así que el agente puede hacerlo. Pasa siempre dice que pasó en las k ejecuciones, así que puedes fiarte.
Un agente de soporte que debe pasar siempre exige más que uno que debe pasar a veces.
Ejemplo resuelto: ocho casos, cinco ejecuciones cada uno
| Versión | Tasa | Pasa en 5 | Pasa siempre |
|---|---|---|---|
| Antigua | 60 por ciento | 7 de 8 | 2 de 8 |
| Nueva | 73 por ciento | 8 de 8 | 3 de 8 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pregunta cuánto de la diferencia es azar
Una tasa de 40 ejecuciones es una estimación. Dibuja un intervalo de unos dos errores estándar a cada lado. Si el intervalo de la versión antigua y el de la nueva se solapan mucho, la diferencia puede ser suerte.
Más ejecuciones y más casos estrechan el intervalo. Es la única forma honesta de aclarar una diferencia pequeña.
Cuenta los casos que se movieron
La prueba de signos ignora lo grande que es cada cambio. Cuenta los casos que mejoraron y los que empeoraron. Los empates no cuentan.
El valor p es la probabilidad de un reparto tan desigual si las versiones fueran iguales. Elige el límite antes. Aquí es 0,05, y un valor p por debajo permite decir mejor o peor.
Escribe las ejecuciones grabadas
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Cinco ejecuciones grabadas de cada caso: 1 pasó, 0 falló.' 'const oldVersion = [\"11111\", \"11101\", \"10100\", \"11011\", \"00000\", \"01101\", \"11111\", \"00010\"];' 'const newVersion = [\"11111\", \"11111\", \"10101\", \"11110\", \"00100\", \"11011\", \"11111\", \"01010\"];' 'module.exports = { oldVersion, newVersion };' > runs.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la comparación, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { oldVersion, newVersion } = require(\"./runs\");' 'function passes(text) {' ' return text.split(\"\").filter(function (c) { return c === \"1\"; }).length;' '}' > stats.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la comparación, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function summary(name, version) {' ' const counts = version.map(passes);' ' const total = counts.reduce(function (a, b) { return a + b; }, 0);' ' const runs = version.length * version[0].length;' ' const p = total / runs;' ' const two = 2 * Math.sqrt(p * (1 - p) / runs);' ' const atLeast = counts.filter(function (n) { return n > 0; }).length;' ' const every = counts.filter(function (n) { return n === version[0].length; }).length;' ' console.log(name + \": tasa \" + Math.round(p * 100) + \" por ciento, intervalo \" + Math.round((p - two) * 100) + \" a \" + Math.round((p + two) * 100));' ' console.log(name + \": pasa en 5 \" + atLeast + \" de \" + version.length + \", pasa siempre \" + every + \" de \" + version.length);' '}' 'summary(\"Antigua\", oldVersion);' 'summary(\"Nueva\", newVersion);' >> stats.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la comparación, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function signP(better, worse) {' ' const n = better + worse;' ' if (n === 0) return 1;' ' const low = Math.min(better, worse);' ' let total = 0;' ' let ways = 1;' ' for (let i = 0; i <= low; i = i + 1) {' ' total = total + ways;' ' ways = ways * (n - i) / (i + 1);' ' }' ' return Math.min(1, 2 * total / Math.pow(2, n));' '}' >> stats.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe la comparación, parte 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'let better = 0;' 'let worse = 0;' 'oldVersion.forEach(function (text, at) {' ' const a = passes(text);' ' const b = passes(newVersion[at]);' ' if (b > a) better = better + 1;' ' if (b < a) worse = worse + 1;' '});' 'const p = signP(better, worse);' 'console.log(\"Casos mejores: \" + better + \", peores: \" + worse + \", iguales: \" + (oldVersion.length - better - worse));' 'console.log(\"p de la prueba de signos: \" + p.toFixed(4));' 'console.log(\"Veredicto: \" + (p < 0.05 ? (better > worse ? \"mejor\" : \"peor\") : \"incierto\"));' >> stats.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Compara las dos versiones
docker exec -w /home/node/project agent node stats.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Lo que imprime la comparación
| Línea | Lo que muestra |
|---|---|
| Tasa antigua | 60 por ciento, intervalo de 45 a 75 |
| Tasa nueva | 73 por ciento, intervalo de 58 a 87 |
| Casos | mejores 5, peores 0, iguales 3 |
| p de la prueba de signos | 0.0625 |
| Veredicto | incierto |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Pruébalo
Consejo
En runs.js cambia el cuarto caso de newVersion de "11110" a "11111" y compara otra vez. Ahora seis casos son mejores y ninguno peor, y p baja de 0,05.
Un error frecuente
Advertencia
Mucha gente repite la comparación hasta que el valor p baja de 0,05 y entonces para. Cada repetición es otra oportunidad de tener suerte. Fija antes el número de casos y ejecuciones, lanza una vez y comunica lo que salga.