Mieux de 13 points, ou par chance ?
La significativité statistique demande si l’écart entre deux agents dépasse ce que le hasard donnerait. C’est utile, car un agent diffère à chaque essai : un seul taux par version peut indiquer la mauvaise direction.
La nouvelle version de l’agent de la boutique a 13 points de plus. La mettez-vous en service ?
À la fin de cette leçon
Remarque
Je peux dire si un agent est meilleur qu’un autre quand chaque essai diffère.
Mots-clés
| Mot | Ce que ça veut dire |
|---|---|
| Réussite sur k | un cas réussi dans au moins un des k essais |
| Réussite à chaque fois | un cas réussi dans tous les k essais |
| Intervalle | la plage où un taux peut vraiment se trouver |
| Test des signes | un test sur le nombre de cas meilleurs ou pires |
| Valeur p | la chance d’un écart aussi grand par hasard seul |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Lancer chaque cas plusieurs fois
Passez chaque cas k fois pour chaque version, ici cinq. Deux nombres décrivent un cas. La réussite sur k dit qu’il a réussi au moins une fois : l’agent en est capable. La réussite à chaque fois dit qu’il a réussi dans les k essais : on peut s’y fier.
Un agent de support qui doit réussir à chaque fois n’a pas la même barre qu’un agent qui doit réussir parfois.
Exemple travaillé : huit cas, cinq essais chacun
| Version | Taux | Réussite sur 5 | Réussite à chaque fois |
|---|---|---|---|
| Ancienne | 60 pour cent | 7 sur 8 | 2 sur 8 |
| Nouvelle | 73 pour cent | 8 sur 8 | 3 sur 8 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Demander quelle part de l’écart vient du hasard
Un taux tiré de 40 essais est une estimation. Tracez un intervalle d’environ deux erreurs types de chaque côté. Si l’intervalle de l’ancienne et celui de la nouvelle se recouvrent beaucoup, l’écart peut être dû au hasard.
Plus d’essais et plus de cas resserrent l’intervalle. C’est la seule façon honnête de rendre net un petit écart.
Compter les cas qui ont bougé
Le test des signes ignore l’ampleur de chaque changement. Il compte les cas meilleurs et les cas pires. Les égalités ne comptent pas.
La valeur p est la chance d’un partage aussi déséquilibré si les versions étaient vraiment égales. Fixez la limite d’abord. Ici, c’est 0,05 : une valeur p plus basse permet de dire mieux ou pire.
Écrire les essais enregistrés
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Cinq essais enregistrés de chaque cas : 1 réussi, 0 raté.' 'const ancienne = [\"11111\", \"11101\", \"10100\", \"11011\", \"00000\", \"01101\", \"11111\", \"00010\"];' 'const nouvelle = [\"11111\", \"11111\", \"10101\", \"11110\", \"00100\", \"11011\", \"11111\", \"01010\"];' 'module.exports = { ancienne, nouvelle };' > essais.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire la comparaison, partie 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { ancienne, nouvelle } = require(\"./essais\");' 'function reussites(texte) {' ' return texte.split(\"\").filter(function (c) { return c === \"1\"; }).length;' '}' > stats.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire la comparaison, partie 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function resume(nom, version) {' ' const comptes = version.map(reussites);' ' const total = comptes.reduce(function (a, b) { return a + b; }, 0);' ' const essais = version.length * version[0].length;' ' const p = total / essais;' ' const deux = 2 * Math.sqrt(p * (1 - p) / essais);' ' const auMoins = comptes.filter(function (n) { return n > 0; }).length;' ' const toujours = comptes.filter(function (n) { return n === version[0].length; }).length;' ' console.log(nom + \" : taux \" + Math.round(p * 100) + \" pour cent, intervalle \" + Math.round((p - deux) * 100) + \" à \" + Math.round((p + deux) * 100));' ' console.log(nom + \" : réussite sur 5 \" + auMoins + \" cas sur \" + version.length + \", réussite à chaque fois \" + toujours + \" cas sur \" + version.length);' '}' 'resume(\"Ancienne\", ancienne);' 'resume(\"Nouvelle\", nouvelle);' >> stats.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire la comparaison, partie 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function pSignes(mieux, pire) {' ' const n = mieux + pire;' ' if (n === 0) return 1;' ' const bas = Math.min(mieux, pire);' ' let total = 0;' ' let facons = 1;' ' for (let i = 0; i <= bas; i = i + 1) {' ' total = total + facons;' ' facons = facons * (n - i) / (i + 1);' ' }' ' return Math.min(1, 2 * total / Math.pow(2, n));' '}' >> stats.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Écrire la comparaison, partie 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'let mieux = 0;' 'let pire = 0;' 'ancienne.forEach(function (texte, rang) {' ' const a = reussites(texte);' ' const b = reussites(nouvelle[rang]);' ' if (b > a) mieux = mieux + 1;' ' if (b < a) pire = pire + 1;' '});' 'const p = pSignes(mieux, pire);' 'console.log(\"Cas meilleurs : \" + mieux + \", pires : \" + pire + \", égaux : \" + (ancienne.length - mieux - pire));' 'console.log(\"p du test des signes : \" + p.toFixed(4));' 'console.log(\"Verdict : \" + (p < 0.05 ? (mieux > pire ? \"meilleure\" : \"pire\") : \"incertain\"));' >> stats.js"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Comparer les deux versions
docker exec -w /home/node/project agent node stats.jsAffichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Ce que la comparaison affiche
| Ligne | Ce qu’elle montre |
|---|---|
| Taux de l’ancienne | 60 pour cent, intervalle de 45 à 75 |
| Taux de la nouvelle | 73 pour cent, intervalle de 58 à 87 |
| Cas | meilleurs 5, pires 0, égaux 3 |
| p du test des signes | 0.0625 |
| Verdict | incertain |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À vous
Astuce
Dans essais.js, changez le quatrième cas de nouvelle de "11110" en "11111", puis comparez de nouveau. Six cas sont maintenant meilleurs et aucun pire : p passe sous 0,05.
Une erreur fréquente
Attention
Beaucoup relancent la comparaison jusqu’à ce que la valeur p passe sous 0,05, puis s’arrêtent. Chaque relance est une nouvelle chance d’avoir de la chance. Fixez d’abord le nombre de cas et d’essais, lancez une fois et rapportez ce qui sort.