Aller au contenu

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.