Aller au contenu

Reconnaissez des événements indépendants

Une serre automatisée mesure sa température avec un capteur qui fonctionne correctement 95 % du temps. Pour être plus sûr, l’ingénieur en installe trois. Mais trois capteurs, est-ce trois fois plus fiable ? Tout dépend de la façon dont on les combine, et surtout d’une hypothèse cachée : leurs pannes sont-elles indépendantes ?

L’indépendance est l’hypothèse la plus utilisée (et la plus mal utilisée) en probabilités. Dans ce chapitre, vous allez la définir proprement, apprendre à la reconnaître, et l’appliquer au calcul de fiabilité de notre serre.

Intuitivement, AA et BB sont indépendants si savoir que BB s’est produit ne change rien à la probabilité de AA : P(A∣B)=P(A)P(A \mid B) = P(A). En remplaçant P(A∣B)P(A \mid B) par sa définition, on obtient la forme qu’on retient, qui a l’avantage d’être symétrique et de fonctionner même si P(B)=0P(B) = 0 :

A et B sont indeˊpendants  ⟺  P(A∩B)=P(A) P(B)A \text{ et } B \text{ sont indépendants} \iff P(A \cap B) = P(A) \, P(B)

Pour vérifier une indépendance, on calcule les trois probabilités et on compare. Pour l’utiliser, on multiplie.

123456dé rouge123456dé bleuP(A ∩ B) = 1/36P(A) P(B) = 1/6 × 1/6 = 1/36indépendantsA (rouge = 6) et B (somme = 7)123456dé rouge123456P(A ∩ C) = 1/36P(A) P(C) = 1/6 × 1/36 = 1/216dépendantsA (rouge = 6) et C (somme = 12)
À gauche, B coupe la colonne A dans la même proportion que le reste de la grille (1 case sur 6) : indépendance. À droite, C est tout entier dans A : savoir C rend A certain.

Si AA et BB sont indépendants, alors AA et Bˉ\bar{B} le sont aussi, de même que Aˉ\bar{A} et Bˉ\bar{B}. C’est logique : si BB n’apporte aucune information sur AA, son contraire non plus. Ce résultat servira sans cesse, car on raisonne souvent sur « la panne » plutôt que sur « le bon fonctionnement ».

Avec trois événements ou plus, la définition demande plus que l’indépendance de chaque paire. Les événements A1,…,AnA_1, \dots, A_n sont mutuellement indépendants si, pour tout sous-ensemble d’indices II (de taille au moins 2) :

P(⋂i∈IAi)=∏i∈IP(Ai)P\left(\bigcap_{i \in I} A_i\right) = \prod_{i \in I} P(A_i)

Le symbole ⋂\bigcap désigne l’intersection de tous les événements d’indice dans II, et ∏\prod le produit de leurs probabilités. Pour trois événements, cela fait quatre égalités : les trois paires, et le triplet.

Pourquoi tant d’exigence ? Parce que l’indépendance deux à deux ne suffit pas à garantir celle de l’ensemble.

En pratique, l’indépendance mutuelle se justifie rarement par le calcul. Elle se postule à partir de la situation physique : des lancers de dés distincts, des tirages avec remise, des composants fabriqués séparément et qui n’interagissent pas. C’est une hypothèse de modélisation, qu’il faut énoncer clairement.

Répéter une expérience : la règle du « au moins un »

Section intitulée « Répéter une expérience : la règle du « au moins un » »

Quand on répète nn fois une expérience de façon indépendante, et que l’événement AA a la probabilité pp à chaque fois, la probabilité que AA ne se produise jamais vaut (1−p)n(1-p)^n (produit de nn probabilités identiques). D’où la règle, déjà rencontrée avec les paris de dés du chapitre 1 :

P(au moins une fois A)=1−(1−p)nP(\text{au moins une fois } A) = 1 - (1 - p)^n

Cette formule a des conséquences surprenantes. Un événement rare, de probabilité 1 % par jour, se produit au moins une fois en 100 jours avec une probabilité 1−0,99100≈0,631 - 0{,}99^{100} \approx 0{,}63, et en 300 jours avec une probabilité de 0,95 environ. C’est pour cela qu’un défaut « rare » finit toujours par apparaître sur un système qui tourne longtemps, ou sur un grand parc de machines.

0100200300400500nombre n de jours (répétitions indépendantes)0,00,20,40,60,81,0P(au moins une fois)100 jours : 0,63300 jours : 0,95événement de probabilité 1 % par jour
Un événement à 1 % par jour a déjà presque deux chances sur trois de s'être produit au bout de 100 jours.

Le fil rouge : la fiabilité des capteurs de la serre

Section intitulée « Le fil rouge : la fiabilité des capteurs de la serre »

Revenons à la serre. Chaque capteur fonctionne avec une probabilité p=0,95p = 0{,}95 (sa fiabilité), et l’on suppose d’abord que les trois capteurs tombent en panne indépendamment les uns des autres. Trois architectures sont possibles.

En série : le système ne marche que si tous les capteurs marchent (par exemple, trois capteurs qui mesurent trois zones différentes, toutes indispensables). Par indépendance :

Rseˊrie=p3=0,953≈0,857R_{\text{série}} = p^3 = 0{,}95^3 \approx 0{,}857

Ajouter des composants en série dégrade la fiabilité.

En parallèle (redondance) : le système marche si au moins un capteur marche. On passe par le contraire, « tous en panne » :

Rparalleˋle=1−(1−p)3=1−0,053=0,999 875R_{\text{parallèle}} = 1 - (1 - p)^3 = 1 - 0{,}05^3 = 0{,}999\,875

Vote majoritaire (2 sur 3) : on garde la valeur donnée par au moins deux capteurs concordants, ce qui protège contre un capteur qui renvoie une valeur fausse. Le système marche si exactement deux capteurs marchent (3 façons de choisir le capteur en panne) ou si les trois marchent :

R2/3=3p2(1−p)+p3≈0,135+0,857=0,993R_{2/3} = 3 p^2 (1 - p) + p^3 \approx 0{,}135 + 0{,}857 = 0{,}993
ArchitectureFormuleFiabilité avec p=0,95p = 0{,}95
Un seul capteurpp0,95
3 en sériep3p^30,857
3 en parallèle1−(1−p)31 - (1-p)^30,999 875
Vote 2 sur 33p2(1−p)+p33p^2(1-p) + p^30,993
C1C2C3R = p³ ≈ 0,857En série : tous doivent marcherC1C2C3R = 1 − (1 − p)³ ≈ 0,9999En parallèle : un seul suffitC1C2C3vote2 sur 3R = 3p²(1 − p) + p³ ≈ 0,993Vote : au moins deux d’accord
En série, le courant doit traverser les trois capteurs ; en parallèle, une seule branche suffit ; le vote exige deux capteurs concordants.
0,50,60,70,80,91,0fiabilité p d’un capteur0,20,40,60,81,0fiabilité R du systèmep = 0,95R quand p = 0,953 en parallèle : 0,9999vote 2 sur 3 : 0,993un seul capteur : 0,953 en série : 0,857
Le parallèle et le vote sont au-dessus de la diagonale (un seul capteur) et le série en dessous : la redondance améliore la fiabilité, la mise en série la dégrade.

Tout repose sur l’hypothèse d’indépendance. Supposons maintenant que deux capteurs en parallèle partagent la même alimentation, qui tombe en panne avec une probabilité de 1 %. Chaque capteur fonctionne si l’alimentation marche et s’il est lui-même en bon état : P(capteur OK)=0,99×0,95=0,9405P(\text{capteur OK}) = 0{,}99 \times 0{,}95 = 0{,}9405.

  • Si l’on croyait les deux capteurs indépendants, on calculerait 1−(1−0,9405)2≈0,99651 - (1 - 0{,}9405)^2 \approx 0{,}9965.
  • En réalité, le système marche si l’alimentation marche et qu’au moins un capteur marche : 0,99×(1−0,052)≈0,98750{,}99 \times (1 - 0{,}05^2) \approx 0{,}9875.

La probabilité de panne réelle (1,25 %) est plus de trois fois celle du calcul naïf (0,35 %). Les pannes des deux capteurs sont dépendantes, car elles ont une cause commune. En sûreté de fonctionnement, on parle de mode commun ; c’est l’une des premières questions à poser devant un calcul de redondance.

alimentationcommune0,99C1 : 0,95C2 : 0,95si l’alimentation tombe,les deux capteurs tombent ensemblecalcul naïf(indépendance)réalité(cause commune)0,00,20,40,60,81,01,21,4probabilité de panne (%)0,35 %1,25 %
L'alimentation commune est un point de passage obligé : sa panne fait tomber les deux branches à la fois, et le risque réel est plus de trois fois celui du calcul naïf.

Une simulation confirme ces chiffres et permet de tester des architectures plus compliquées sans refaire les calculs :

set.seed(10)
n <- 1e6
alim <- runif(n) > 0.01 # l'alimentation fonctionne (99 %)
c1 <- runif(n) > 0.05 # le capteur 1 est en bon état (95 %)
c2 <- runif(n) > 0.05 # le capteur 2 est en bon état (95 %)
systeme <- alim & (c1 | c2) # parallèle, mais alimentation commune
mean(systeme) # proche de 0.9875
# Les pannes des deux capteurs sont-elles indépendantes ?
ok1 <- alim & c1; ok2 <- alim & c2
mean(ok1 & ok2) - mean(ok1) * mean(ok2) # nettement positif : dépendance

La dernière ligne compare P(A∩B)P(A \cap B) à P(A) P(B)P(A) \, P(B) sur les données simulées : l’écart est positif, signe que les deux capteurs ont tendance à fonctionner (ou à tomber en panne) ensemble.

  • AA et BB sont indépendants si P(A∩B)=P(A) P(B)P(A \cap B) = P(A) \, P(B), ce qui équivaut à P(A∣B)=P(A)P(A \mid B) = P(A) quand P(B)>0P(B) > 0.
  • L’indépendance passe aux contraires ; elle n’a rien à voir avec l’incompatibilité (deux événements incompatibles de probabilités non nulles sont dépendants).
  • L’indépendance mutuelle d’une famille exige la factorisation pour tous les sous-ensembles ; l’indépendance deux à deux ne suffit pas.
  • Pour nn répétitions indépendantes, P(au moins une fois)=1−(1−p)nP(\text{au moins une fois}) = 1 - (1-p)^n.
  • Fiabilité : en série pnp^n, en parallèle 1−(1−p)n1 - (1-p)^n, en vote 2 sur 3 3p2(1−p)+p33p^2(1-p) + p^3.
  • Une cause commune rend les pannes dépendantes et ruine les calculs de redondance faits sous hypothèse d’indépendance.

Exercice · Indépendants ou non ?

facile

On tire une carte dans un jeu de 32 cartes (8 valeurs, du 7 à l’as, dans 4 couleurs). Les événements AA = « la carte est un as » et BB = « la carte est un cœur » sont-ils indépendants ? Et AA et CC = « la carte est un roi » ?

Voir la solution

P(A)=4/32=1/8P(A) = 4/32 = 1/8, P(B)=8/32=1/4P(B) = 8/32 = 1/4, et A∩BA \cap B est l’as de cœur : P(A∩B)=1/32=1/8×1/4P(A \cap B) = 1/32 = 1/8 \times 1/4. Donc AA et BB sont indépendants : savoir que la carte est un cœur ne change pas la chance d’avoir un as.

AA et CC sont incompatibles (une carte ne peut pas être à la fois un as et un roi), donc P(A∩C)=0≠P(A) P(C)=1/64P(A \cap C) = 0 \neq P(A) \, P(C) = 1/64. Ils sont dépendants.

En code

import pandas as pd
# Les 32 cartes : 8 valeurs dans 4 couleurs, toutes équiprobables
valeurs = ["7", "8", "9", "10", "valet", "dame", "roi", "as"]
couleurs = ["coeur", "carreau", "trefle", "pique"]
jeu = pd.DataFrame([(v, c) for v in valeurs for c in couleurs], columns=["valeur", "couleur"])
A = jeu.valeur == "as"
B = jeu.couleur == "coeur"
C = jeu.valeur == "roi"
# On compare P(A et B) au produit P(A) P(B)
print((A & B).mean(), A.mean() * B.mean()) # 0.03125 0.03125 -> indépendants
print((A & C).mean(), A.mean() * C.mean()) # 0.0 0.015625 -> dépendants

Exercice · Combien de capteurs ?

moyen

Des capteurs bon marché ont une fiabilité de 0,9 chacun et tombent en panne indépendamment. Combien faut-il en installer en parallèle pour que le système fonctionne avec une probabilité d’au moins 0,9999 ?

Voir la solution

Avec nn capteurs en parallèle, R=1−0,1nR = 1 - 0{,}1^n. On veut 1−0,1n≥0,99991 - 0{,}1^n \geq 0{,}9999, soit 0,1n≤10−40{,}1^n \leq 10^{-4}, donc n≥4n \geq 4.

Il faut 4 capteurs. Avec 3, on n’atteint que 1−0,001=0,9991 - 0{,}001 = 0{,}999. En R : 1 - 0.1^(1:5) affiche les fiabilités pour 1 à 5 capteurs.

En code

import numpy as np
n = np.arange(1, 6)
fiabilite = 1 - 0.1 ** n # n capteurs en parallèle
for k, r in zip(n, fiabilite):
print(k, round(r, 5)) # 1 0.9 / 2 0.99 / 3 0.999 / 4 0.9999 / 5 0.99999
# Plus petit n tel que R >= 0.9999 (petite marge pour les arrondis machine)
print(n[fiabilite >= 0.9999 - 1e-12][0]) # 4

Exercice · Un montage mixte

difficile

La serre utilise maintenant trois capteurs indépendants de fiabilité 0,9 : les capteurs A et B sont montés en série (il faut les deux), et ce bloc est monté en parallèle avec le capteur C.

  1. Calculez la fiabilité du système.
  2. Sachant que le système fonctionne, quelle est la probabilité que le capteur C soit en panne ?
Voir la solution
  1. Le bloc série fonctionne avec probabilité 0,92=0,810{,}9^2 = 0{,}81. Le système tombe en panne seulement si le bloc et C sont en panne, ce qui arrive avec probabilité (1−0,81)(1−0,9)=0,19×0,1=0,019(1 - 0{,}81)(1 - 0{,}9) = 0{,}19 \times 0{,}1 = 0{,}019 par indépendance. Donc R=1−0,019=0,981R = 1 - 0{,}019 = 0{,}981.

  2. On cherche P(Cˉ∣OK)P(\bar{C} \mid \text{OK}). Si C est en panne, le système marche seulement grâce au bloc A-B : P(Cˉ∩OK)=0,1×0,81=0,081P(\bar{C} \cap \text{OK}) = 0{,}1 \times 0{,}81 = 0{,}081. Donc :

P(Cˉ∣OK)=0,0810,981≈0,083P(\bar{C} \mid \text{OK}) = \frac{0{,}081}{0{,}981} \approx 0{,}083

C’est un peu moins que la probabilité de panne a priori de C (0,1) : savoir que le système marche rend légèrement plus probable que C marche aussi.

En code

import numpy as np
p = 0.9
bloc_ab = p * p # A et B en série
R = 1 - (1 - bloc_ab) * (1 - p) # bloc en parallèle avec C
print(R) # 0.981
print((1 - p) * bloc_ab / R) # 0.0826 P(C en panne | système OK)
# Vérification par simulation
rng = np.random.default_rng(0)
a, b, c = rng.random((3, 1_000_000)) < p # chaque capteur marche avec proba 0.9
ok = (a & b) | c
print(ok.mean(), (~c[ok]).mean()) # 0.9808 0.0821