Script de vérification¶
Tous les chiffres statistiques de ce rapport qui ne sont pas cités d'une source
— taux de fausses alarmes, ARL, puissance des cartes, effet de l'asymétrie et
de l'autocorrélation — sont recalculés par un script en Python pur, sans
dépendance : verif_spc.py.
python3 verif_spc.py # environ 1 minute
Un second script, verif_we_exact.py, calcule les ARL
exacts des combinaisons de règles de Western Electric par propagation sur une
chaîne de Markov (environ 6 minutes). Il redonne 91,75 pour les quatre règles,
la valeur publiée par Champ et Woodall en 1987, et fournit les tableaux de
combinaisons et de décalages du chapitre
Règles WE et Nelson.
La graine aléatoire est fixée : relancer le script redonne les mêmes chiffres. Chaque section se termine par des assertions qui portent la thèse du chapitre correspondant ; si une thèse ne tient plus (après une modification des paramètres, par exemple), le script s'arrête avec une erreur.
Ce que le script calcule¶
| Section | Question | Chapitres qui l'utilisent |
|---|---|---|
| §1 | ARL en contrôle de chaque règle seule et des combinaisons Western Electric 1-4, Nelson 1-4 et 1-8 | Règles WE et Nelson |
| §2 | Délai de détection d'un décalage de 1σ : Shewhart, Western Electric, EWMA, CUSUM | Autres familles |
| §3 | Fausses alarmes sur données asymétriques et autocorrélées | Pièges, Temps de cycle |
| §4 | Carte p d'un taux de réussite d'agent ; nombre d'essais pour distinguer deux taux | Mesurer un agent |
| §5 | pass@k contre pass^k | Mesurer un agent |
| §6 | Fausses alarmes avec plusieurs cartes en parallèle | Pièges |
| §7 | Entonnoir de Deming : effet du sur-ajustement sur la variance | Pièges |
| §8 | Erreur de classement d'une requête de déclenchement de skill selon le nombre de runs | Tester un skill |
| §9 | Intervalle de confiance d'un écart-type estimé sur 3 runs | Tester un skill |
| §10 | Règle « 3 échecs de suite » pour les tests instables | Intégration continue |
| §11 | Ce que prouve une revue par échantillon qui ne trouve aucun défaut | Échantillonnage |
Résultats de référence¶
Sortie du script au 7 octobre 2026 (20 000 trajectoires Monte-Carlo par ARL) :
== 1. Fausses alarmes des règles (processus maîtrisé, gaussien) ==
Règle 1 seule, exact : p = 0.00270 par point, ARL0 = 370.4
Règle 1 seule, simulé : ARL0 = 373
Règle seule WE2 2 sur 3 > 2σ : ARL0 = 523
Règle seule WE3 4 sur 5 > 1σ : ARL0 = 291
Règle seule WE4 8 du même côté : ARL0 = 256
Règle seule N2 9 du même côté : ARL0 = 515
Règle seule N3 6 monotones : ARL0 = 420
Règle seule N4 14 alternés : ARL0 = 615
Règle seule N7 15 en zone C : ARL0 = 950
Règle seule N8 8 hors zone C : ARL0 = 10800
Western Electric 1-4 : ARL0 = 91 (Champ & Woodall 1987 : 91,75)
Nelson 1-8 : ARL0 = 74
Nelson 1-4 : ARL0 = 119 (Nelson : < 1 chance sur 100 par point)
== 2. Détection d'un décalage de 1 sigma ==
Shewhart règle 1 : ARL0 373 ARL1(1σ) 43.7
Western Electric : ARL0 91 ARL1(1σ) 9.3
EWMA λ=0,2 L=2,86 : ARL0 365 ARL1(1σ) 8.7
CUSUM k=0,5 h=5 : ARL0 470 ARL1(1σ) 10.4
== 3. Données logicielles : asymétrie et autocorrélation ==
gaussien règle 1 : 0.29 % des points WE 1-4 : 1.86 %
log-normal σ=1 règle 1 : 3.38 % des points WE 1-4 : 9.34 %
log(log-normal) règle 1 : 0.26 % des points WE 1-4 : 1.83 %
AR(1) φ=0,7 règle 1 : 9.91 % des points WE 1-4 : 41.31 %
== 4. Taux de réussite d'un agent : carte p ==
n= 10 essais/lot LCL=0.421 P(alarme|80%)=0.0064 P(alarme|70%)=0.047 ARL1≈21 lots
n= 30 essais/lot LCL=0.581 P(alarme|80%)=0.0031 P(alarme|70%)=0.084 ARL1≈12 lots
n= 50 essais/lot LCL=0.630 P(alarme|80%)=0.0025 P(alarme|70%)=0.141 ARL1≈7 lots
n=100 essais/lot LCL=0.680 P(alarme|80%)=0.0016 P(alarme|70%)=0.289 ARL1≈3 lots
Essais par version pour distinguer 80 % de 70 % (α=5 %, puissance 80 %) : 294
... et 80 % de 75 % : 1094
== 5. pass@k contre pass^k ==
p=0.60 k=1: pass@k=0.600 pass^k=0.600 k=5: pass@k=0.990 pass^k=0.078 k=10: pass@k=1.000 pass^k=0.006
p=0.80 k=1: pass@k=0.800 pass^k=0.800 k=5: pass@k=1.000 pass^k=0.328 k=10: pass@k=1.000 pass^k=0.107
p=0.95 k=1: pass@k=0.950 pass^k=0.950 k=5: pass@k=1.000 pass^k=0.774 k=10: pass@k=1.000 pass^k=0.599
== 6. Plusieurs cartes en parallèle ==
1 indicateurs, ARL0= 370.4 : P(>=1 fausse alarme/jour)=0.00 -> une tous les 370.4 jours
1 indicateurs, ARL0= 91.8 : P(>=1 fausse alarme/jour)=0.01 -> une tous les 91.7 jours
10 indicateurs, ARL0= 370.4 : P(>=1 fausse alarme/jour)=0.03 -> une tous les 37.5 jours
10 indicateurs, ARL0= 91.8 : P(>=1 fausse alarme/jour)=0.10 -> une tous les 9.6 jours
30 indicateurs, ARL0= 370.4 : P(>=1 fausse alarme/jour)=0.08 -> une tous les 12.8 jours
30 indicateurs, ARL0= 91.8 : P(>=1 fausse alarme/jour)=0.28 -> une tous les 3.6 jours
== 7. Entonnoir de Deming : corriger après chaque écart ==
Variance après sur-ajustement / variance sans toucher : 2.00
== 8. Skills : tester le déclenchement avec 3 runs par requête ==
1 runs : requête vraie à 70 % -> mal classée 0.30 ; vraie à 90 % -> 0.100
3 runs : requête vraie à 70 % -> mal classée 0.22 ; vraie à 90 % -> 0.028
5 runs : requête vraie à 70 % -> mal classée 0.16 ; vraie à 90 % -> 0.009
15 runs : requête vraie à 70 % -> mal classée 0.05 ; vraie à 90 % -> 0.000
20 requêtes à 70 % réels, 3 runs : 4.3 mal classées en moyenne
== 9. Écart-type « mean ± stddev » estimé sur 3 runs ==
IC 95 % du vrai sigma : de 0.52 s à 6.28 s (facteur 12 entre bornes)
== 10. Tests instables : « 3 échecs de suite » (Google, 2016) ==
test qui échoue au hasard 1% du temps : fausse alarme 1% -> 1.0e-06 par exécution ; prix : une vraie casse n'est signalée qu'au 3e run
test qui échoue au hasard 5% du temps : fausse alarme 5% -> 1.3e-04 par exécution ; prix : une vraie casse n'est signalée qu'au 3e run
test qui échoue au hasard 20% du temps : fausse alarme 20% -> 8.0e-03 par exécution ; prix : une vraie casse n'est signalée qu'au 3e run
== 11. Revue humaine par échantillon : zéro défaut trouvé, que conclure ? ==
10 PR relues, 0 défaut : taux réel < 25.9% (règle de trois : 30.0%)
30 PR relues, 0 défaut : taux réel < 9.5% (règle de trois : 10.0%)
100 PR relues, 0 défaut : taux réel < 3.0% (règle de trois : 3.0%)
300 PR relues, 0 défaut : taux réel < 1.0% (règle de trois : 1.0%)
Toutes les thèses tiennent.
Choix de modélisation à connaître¶
Ce que le script suppose
- Les règles sont appliquées en phase II : centre et écart-type du processus supposés connus (§1, §2), ou estimés sur une très longue série (§3). Avec des limites estimées sur 20 ou 30 points seulement, les ARL réels sont plus courts et plus dispersés.
- Les règles de Nelson sont codées selon leur forme usuelle : 9 points du même côté, 6 points strictement monotones, 14 points alternés, 15 points dans la zone C, 8 points hors de la zone C.
- L'asymétrie est modélisée par une loi log-normale de paramètre σ = 1, choix illustratif pour des temps de cycle ; l'autocorrélation par un AR(1) de coefficient 0,7, choix illustratif pour des durées de build. Vos données réelles peuvent être plus ou moins sévères.
- Les sections §4, §8 et §10 supposent des essais indépendants. Des échecs corrélés (même machine, même tâche difficile) réduisent la puissance réelle.
L'accord avec la littérature est le meilleur contrôle de l'implémentation :
l'ARL simulé des quatre règles de Western Electric (91) retrouve la valeur
exacte publiée par Champ et Woodall (91,75) — qu'un calcul exact par chaîne
de Markov, mené séparément pour ce rapport, reproduit lui aussi à deux
décimales (verif_we_exact.py) ; les ARL simulés des règles « 8 du même côté » (256) et « 9 du
même côté » (515) retrouvent la formule exacte \(2^k - 1\) (255 et 511) ; et l'ARL de la carte CUSUM
(k = 0,5, h = 5) retrouve la table du NIST : 10,4 pour un décalage de 1σ, et
930 en contrôle pour la version unilatérale, soit environ 465 pour la version
bilatérale simulée ici
(NIST). Les paramètres de l'EWMA
(λ = 0,2, L = 2,86, limites exactes variables dans le temps) ont été choisis
pour donner un ARL en contrôle comparable à celui de la règle 1 seule (≈ 370),
ce qui rend la comparaison des délais de détection équitable.