Module L11 · Partie G · Mathématiques de l’informatique
Probabilités et statistiques : raisonner sous incertitude.
Un capteur ment un peu à chaque mesure. Un modèle d’IA se trompe parfois. Un algorithme aléatoire est plus rapide qu’un déterministe. Ce module donne les outils pour quantifier l’incertitude : lois, espérance, variance, loi des grands nombres, théorème central limite, estimation, Bayes, tests — toujours vérifiés par simulation, parce que la simulation est l’expérience du probabiliste.
Durée : 3 séances · Prérequis : modules 3e « simulations », L10. Objectifs : variables aléatoires et lois usuelles, espérance/variance et leurs propriétés, LGN et TCL, estimation et intervalles de confiance, règle de Bayes et inférence, chaînes de Markov, tests d’hypothèses, Monte-Carlo et bootstrap.
Ce que vous saurez faire à la fin
- Choisir la loi d’un phénomène (binomiale, Poisson, normale, exponentielle) et la simuler.
- Donner un intervalle de confiance à une mesure et savoir combien de mesures il faut.
- Mettre à jour une croyance avec Bayes : diagnostic, localisation de robot, filtre.
- Tester une hypothèse (« ce dé est-il truqué ? », « ce modèle est-il meilleur ? ») proprement.
Références : Probability and Computing (Mitzenmacher-Upfal), programme MPSI/MP (probabilités), cours MIT 6.041, Think Stats (Downey).
Fiche de cours · Définitions
Probabilités et statistiques : définitions
Fiche de cours · Formules
Lois et formules à connaître
| Loi | P(X = k) ou densité | E | Var | Modélise |
|---|---|---|---|---|
| Bernoulli(p) | pk(1−p)1−k | p | p(1−p) | Un essai |
| Binomiale(n, p) | C(n,k)pk(1−p)n−k | np | np(1−p) | Nombre de succès en n essais |
| Géométrique(p) | (1−p)k−1p | 1/p | (1−p)/p² | Rang du premier succès |
| Poisson(λ) | e−λλk/k! | λ | λ | Événements rares par unité de temps |
| Uniforme[a, b] | 1/(b−a) | (a+b)/2 | (b−a)²/12 | Ignorance totale |
| Exponentielle(λ) | λe−λx | 1/λ | 1/λ² | Durée de vie sans mémoire |
| Normale(μ, σ²) | e−(x−μ)²/2σ²/(σ√2π) | μ | σ² | Somme de nombreux petits effets ; bruit de mesure |
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (1/2)
Fiche de cours · Théorèmes et démonstrations
Démonstrations à savoir refaire (2/2)
Fiche de cours · Méthodes
Méthodes et pièges
rng = np.random.default_rng(graine) ; vectoriser (rng.random((n_essais, n))) ; estimer la précision par l’écart-type des répétitions.Pièges : confondre P(A | B) et P(B | A) (procureur) ; supposer indépendantes des variables corrélées (les capteurs d’un même robot subissent les mêmes vibrations) ; corrélation ≠ causalité ; « significatif » ≠ « important » ; oublier que la variance de la moyenne décroît en 1/n, pas l’écart-type ; utiliser la normale pour des quantités positives (durées) ou bornées (proportions proches de 0 ou 1).
Fiche de cours · Exercices corrigés
Exercices corrigés
01 / Lois
Les lois usuelles, simulées et comparées à la théorie
Quelle loi pour quoi
| Situation | Loi | E, Var |
|---|---|---|
| n essais indépendants, k succès | Binomiale(n, p) | np, np(1−p) |
| Événements rares dans un intervalle | Poisson(λ) | λ, λ |
| Attente jusqu’au premier succès (discret) | Géométrique(p) | 1/p, (1−p)/p² |
| Temps entre événements (continu, sans mémoire) | Exponentielle(λ) | 1/λ, 1/λ² |
| Somme de nombreux petits effets | Normale(μ, σ²) | μ, σ² |
| Aucune information dans [a, b] | Uniforme | (a+b)/2, (b−a)²/12 |
01 / Lois
Espérance, variance, et leurs règles
La linéarité de l’espérance ne demande aucune indépendance : c’est l’outil le plus puissant de l’analyse d’algorithmes aléatoires (« le nombre attendu de comparaisons est la somme des probabilités de chaque comparaison »). La variance, elle, ne s’additionne que pour des variables indépendantes (ou non corrélées).
02 / Grands nombres
Loi des grands nombres et théorème central limite
Pourquoi c’est LE résultat à connaître
La LGN dit que la simulation converge (Monte-Carlo marche). Le TCL dit à quelle vitesse et avec quelle forme : l’erreur d’une moyenne de n mesures est ≈ normale d’écart-type σ/√n. Conséquences : diviser l’erreur par 2 demande 4 fois plus de mesures ; la moyenne de 50 lectures d’un capteur bruité est un excellent estimateur, quelle que soit la loi du bruit ; et toutes les « barres d’erreur » des articles scientifiques viennent de là. Le TCL explique aussi pourquoi la loi normale est partout : tout ce qui est une somme de petites causes indépendantes est normal.
02 / Grands nombres
Estimer, avec un intervalle de confiance
Un intervalle de confiance à 95 % n’est pas « la vraie valeur a 95 % de chances d’être dedans » (elle est fixe !) mais « la procédure qui produit cet intervalle capture la vraie valeur 95 % du temps ». La simulation ci-dessus le montre. Le bootstrap (rééchantillonner ses propres données) est l’outil moderne quand la formule n’existe pas.
03 / Bayes
La règle de Bayes : mettre à jour une croyance
Le filtre bayésien, ancêtre de tout
Le petit programme de localisation est un filtre bayésien : prédiction (le mouvement étale la croyance) puis correction (l’observation la concentre). Avec une croyance gaussienne et un modèle linéaire, c’est le filtre de Kalman (module L19) ; avec des particules au lieu de cases, le filtre particulaire (module L20) ; avec des mots au lieu de cases, le classifieur naïf bayésien (spam). Le paradoxe de l’alarme (moins de 1 % d’incendie malgré un capteur « à 99 % ») est le piège du taux de base : un test, même excellent, sur un événement rare produit surtout des faux positifs.
03 / Bayes
Chaînes de Markov : le futur ne dépend que du présent
Les chaînes de Markov modélisent les machines à états probabilistes, les files d’attente, les textes (le « modèle de langue » le plus simple, ancêtre des LLM), PageRank, et servent d’outil de simulation (MCMC) en physique et en statistique bayésienne. Les temps d’atteinte se calculent par un système linéaire (module L10) — c’est aussi la base de l’apprentissage par renforcement (module L16).
04 / Tests
Tester une hypothèse : le dé est-il truqué ? le modèle est-il meilleur ?
Ce qu’une p-valeur dit, et ne dit pas
La p-valeur est la probabilité, si H0 était vraie, d’observer un écart au moins aussi grand. Petite ⇒ les données sont surprenantes sous H0 ⇒ on doute de H0. Elle ne dit pas la probabilité que H0 soit vraie (ce serait du Bayes). Le seuil 0,05 est une convention : 1 fois sur 20, un résultat « significatif » est un coup de chance — d’où la crise de la reproductibilité. En recherche, on rapporte l’effet (2,5 s), son intervalle de confiance, et on pré-enregistre l’hypothèse avant de regarder les données. Les tests par permutation et bootstrap remplacent avantageusement les formules quand on sait programmer.
04 / Tests
Algorithmes aléatoires : quand le hasard est plus rapide
Miller-Rabin est un algorithme Monte-Carlo (toujours rapide, parfois faux avec probabilité contrôlée) ; le tri rapide randomisé est Las Vegas (toujours juste, temps aléatoire). Le hasard sert aussi au hachage (module L03), aux protocoles réseau (backoff), à la cryptographie, aux tests par propriétés et à l’optimisation (recuit simulé).
Cours
Cours 1 — Le formalisme : univers, événements, probabilités, variables aléatoires
| Notion | Définition | Exemple (deux dés) |
|---|---|---|
| Univers Ω | Ensemble des issues possibles | {1..6}², 36 issues équiprobables |
| Événement | Sous-ensemble de Ω | « somme = 7 » = {(1,6), …, (6,1)}, 6 issues |
| Probabilité | P : événements → [0, 1], P(Ω) = 1, additive sur les disjoints | P(somme = 7) = 6/36 |
| Conditionnelle | P(A | B) = P(A ∩ B) / P(B) | P(somme = 7 | premier dé = 3) = 1/6 |
| Indépendance | P(A ∩ B) = P(A) P(B) | Les deux dés ; mais « somme = 7 » et « premier = 3 » sont indépendants aussi (coïncidence à vérifier !) |
| Variable aléatoire | Fonction X : Ω → ℝ | X = somme ; loi : P(X = k) |
| Espérance | E[X] = Σ k P(X = k) | E[somme] = 7 |
| Formule des probabilités totales | P(A) = Σ P(A | B_i) P(B_i) pour une partition (B_i) | Base de Bayes |
Cours
Cours 2 — Exemple travaillé : combien de mesures pour décider ? (puissance d’un test)
Problème. Un nouveau firmware est censé réduire le temps de parcours de 52 s à 50 s (σ ≈ 6 s entre essais). Combien d’essais par version pour le détecter avec un test au seuil 5 % et une probabilité de détection (puissance) de 80 % ?
Raisonnement. La différence des moyennes de deux échantillons de taille n a un écart-type σ√(2/n). Rejeter H₀ si la différence dépasse 1,96 σ√(2/n) (seuil 5 % bilatéral). Sous H₁ (vraie différence 2 s), on veut P(dépasser le seuil) = 0,8, soit 2 ≥ (1,96 + 0,84) σ√(2/n) ⇒ n ≥ 2 (2,8 σ / 2)² ≈ 141 essais par version. Avec 30 essais (module L11 §04), la puissance n’est que ≈ 25 % : on ratera l’amélioration trois fois sur quatre.
Avant toute expérience (module L24), calculez la puissance : une expérience sous-dimensionnée ne peut conclure ni dans un sens ni dans l’autre, et coûte autant qu’une bonne. Les deux erreurs : type I (fausse alerte, contrôlée par le seuil α) et type II (rater l’effet, contrôlée par la puissance 1 − β).
Cours
Cours 3 — Estimation : biais, variance, maximum de vraisemblance
Estimateur : une fonction des données qui vise un paramètre θ. Ses qualités : biais E[θ̂] − θ (nul pour la moyenne empirique ; non nul pour la variance divisée par n, d’où n − 1) ; variance ; consistance (θ̂ → θ quand n → ∞). Erreur quadratique = biais² + variance : le compromis biais-variance du module L13 vient de là.
Maximum de vraisemblance (MV). Choisir θ qui rend les données observées les plus probables : θ̂ = argmax P(données | θ). Pour des observations indépendantes, on maximise Σ log P(x_i | θ). Exemples : proportion de succès (θ̂ = k/n), moyenne d’une normale (θ̂ = x̄), et — module L13 — la régression logistique est exactement le MV d’un modèle de Bernoulli.
TP guidé
TP — Un rapport statistique complet sur des données de capteurs (sur PC, 2 h 30)
- Données. 10 minutes de lectures d’un capteur de distance (ou simulez : valeur vraie qui change par paliers, bruit gaussien, 2 % d’aberrations, une dérive lente). CSV → NumPy/pandas.
- Description. Histogramme, moyenne, médiane, écart-type, quantiles, boîte à moustaches ; QQ-plot contre une normale (
scipy.stats.probplot) : le bruit est-il gaussien ? Les aberrations apparaissent-elles ? - Estimation. Pour chaque palier : moyenne avec IC à 95 % (formule et bootstrap) ; médiane avec IC bootstrap. Combien de lectures pour ±0,1 cm ?
- Test. Deux paliers ont-ils vraiment des valeurs différentes ? Test t (
scipy.stats.ttest_ind) et test de permutation maison : comparez les p-valeurs. Puissance : simulez pour dimensionner. - Modèle. Ajustez une chaîne de Markov à deux états (« calme » / « bruyant ») sur la variance glissante ; estimez la matrice de transition par comptage ; simulez 1000 secondes et comparez les durées de séjour.
- Rapport. 3 pages avec figures : chaque chiffre a son incertitude ; chaque affirmation (« le bruit est gaussien », « les paliers diffèrent ») a son test et sa p-valeur ; une section « limites ». C’est le format attendu en TIPE et en stage.
Exercices
Exercices auto-corrigés — probabilités
Exercice 1 — Calculs exacts par énumération
Avec des Fraction et l’énumération de Ω, calculez : a) la probabilité qu’en lançant 4 dés, tous soient différents ; b) l’espérance du maximum de 3 dés ; c) la probabilité d’au moins un 6 en 4 lancers ; d) P(somme de deux dés = 9 | au moins un dé est pair).
Correction
O4 = list(product(range(1, 7), repeat=4)); O3 = list(product(range(1, 7), repeat=3)); O2 = list(product(range(1, 7), repeat=2))
a = F(sum(len(set(w)) == 4 for w in O4), len(O4))
b = sum(F(max(w), len(O3)) for w in O3)
c = F(sum(6 in w for w in O4), len(O4))
pair = [w for w in O2 if any(x % 2 == 0 for x in w)]; d = F(sum(sum(w) == 9 for w in pair), len(pair))Exercice 2 — Bayes séquentiel : quel dé ?
Une boîte contient un dé à 6 faces et un dé à 20 faces. On en tire un au hasard et on le lance plusieurs fois. posterior(resultats) renvoie P(dé à 6 | résultats). Puis nb_lancers_pour(seuil) : le plus petit nombre de lancers tous ≤ 6 après lequel P(dé à 6) ≥ seuil.
Correction
def posterior(res):
p6, p20 = F(1, 2), F(1, 2)
for r in res:
p6 *= F(1, 6) if r <= 6 else 0; p20 *= F(1, 20)
return p6 / (p6 + p20) if p6 + p20 else F(0)
def nb_lancers_pour(seuil):
n = 0
while posterior([1] * n) < seuil: n += 1
return nExercices
Exercices auto-corrigés — statistiques
Exercice 3 — Intervalle de confiance et couverture
Écrivez ic_moyenne(x, niveau=0.95) (formule z avec écart-type estimé, ddof=1) et couverture(n, repetitions) qui mesure la fréquence à laquelle l’IC contient la vraie moyenne pour des échantillons normaux de taille n. Vérifiez que la couverture est proche de 95 % pour n = 50, et un peu inférieure pour n = 5 (pourquoi ? — loi de Student).
Correction
def ic_moyenne(x, niveau=0.95):
m, s = x.mean(), x.std(ddof=1); h = 1.96 * s / np.sqrt(len(x)); return m - h, m + h
def couverture(n, repetitions=4000):
X = rng.normal(5, 2, (repetitions, n)); m = X.mean(1); s = X.std(1, ddof=1); h = 1.96 * s / np.sqrt(n)
return np.mean((m - h <= 5) & (5 <= m + h))Pour n = 5, l’écart-type estimé est lui-même très incertain ; le quantile 1,96 (normal) est trop petit, il faudrait 2,78 (Student à 4 degrés de liberté).
Exercice 4 — Test de permutation générique
test_permutation(a, b, statistique, n=5000) renvoie la p-valeur bilatérale pour n’importe quelle statistique (fonction de deux échantillons). Testez avec la différence des moyennes et la différence des médianes.
Correction
def test_permutation(a, b, stat, n=5000):
obs = abs(stat(a, b)); tout = np.concatenate([a, b]); k = len(a); compte = 0
for _ in range(n):
rng.shuffle(tout); compte += abs(stat(tout[:k], tout[k:])) >= obs
return compte / n05 / Défis
Défi ★ — Le capteur et ses statistiques
Consigne
Simulez 1000 lectures d’un capteur de distance : vraie valeur 50 cm, bruit normal σ = 2, plus 3 % de lectures aberrantes (valeur uniforme entre 0 et 400). 1) Comparez moyenne et médiane comme estimateurs : laquelle résiste ? 2) Filtre par moyenne glissante de 10 vs médiane glissante de 10 : tracez. 3) Intervalle de confiance bootstrap de la médiane. 4) Combien de lectures pour ±0,2 cm avec la moyenne (sans aberrantes) ?
Correction (extrait)
x = 50 + rng.normal(0, 2, 1000)
aberr = rng.random(1000) < 0.03
x[aberr] = rng.uniform(0, 400, aberr.sum())
print("moyenne", x.mean().round(2), "médiane", np.median(x).round(2))
def glissante(x, f, k=10): return np.array([f(x[max(0, i - k + 1):i + 1]) for i in range(len(x))])
m1, m2 = glissante(x, np.mean), glissante(x, np.median)
print("erreur RMS moyenne glissante :", np.sqrt(((m1 - 50)**2).mean()).round(2), "| médiane glissante :", np.sqrt(((m2 - 50)**2).mean()).round(2))
print("n pour ±0,2 :", int(np.ceil((1.96 * 2 / 0.2)**2)))La médiane a un « point de rupture » de 50 % : elle ignore les aberrantes tant qu’elles sont minoritaires. La moyenne est tirée par n’importe quelle valeur extrême. Les filtres médians sont standard pour les capteurs ultrason et lidar.
05 / Défis
Défi ★★ — Le bandit à deux bras et la loi de Bayes
Consigne
Deux versions d’une page (ou deux stratégies de robot) ont des taux de succès inconnus p_A = 0,30 et p_B = 0,35. À chaque essai, vous choisissez l’une, observez succès/échec. 1) Stratégie « 50/50 pendant 1000 essais puis la meilleure » : regret total ? 2) Thompson sampling : maintenez pour chaque bras une loi Bêta(succès + 1, échecs + 1), tirez un échantillon de chaque, jouez le plus grand. Comparez le regret sur 5000 essais, moyenné sur 100 répétitions. 3) Tracez l’évolution de la croyance sur p_B.
Correction
def thompson(T=5000):
s = np.zeros(2); e = np.zeros(2); regret = 0
for t in range(T):
bras = np.argmax(rng.beta(s + 1, e + 1))
succes = rng.random() < p[bras]
s[bras] += succes; e[bras] += not succes
regret += p.max() - p[bras]
return regret
def ab_test(T=5000, exploration=1000):
s = np.zeros(2); n = np.zeros(2); regret = 0
for t in range(T):
bras = t % 2 if t < exploration else np.argmax(s / n)
s[bras] += rng.random() < p[bras]; n[bras] += 1
regret += p.max() - p[bras]
return regret
print("regret A/B :", np.mean([ab_test() for _ in range(100)]).round(1))
print("regret Thompson :", np.mean([thompson() for _ in range(100)]).round(1))La loi Bêta est le posterior conjugué de la binomiale : après s succès et e échecs avec un prior uniforme, la croyance sur p est Bêta(s+1, e+1). Thompson sampling explore naturellement (les bras incertains ont des tirages dispersés) puis exploite. C’est l’algorithme des tests A/B modernes, des recommandations et le point d’entrée de l’apprentissage par renforcement (module L16).
05 / Défis
Défi ★★★ — Esprit prépa : analyse en espérance du tri rapide et du hachage
Consigne
1) Montrez que le nombre attendu de comparaisons du tri rapide randomisé sur n éléments distincts est Σ_{i<j} 2/(j − i + 1) ≈ 2n ln n. Indice : deux éléments de rangs i et j sont comparés si et seulement si l’un des deux est le premier pivot choisi parmi les éléments de rangs i..j (linéarité de l’espérance sur les indicatrices). Vérifiez numériquement pour n = 50, 200, 1000 en comptant les comparaisons. 2) Table de hachage avec n clés dans m cases (hachage uniforme) : espérance de la longueur de la chaîne d’une case ? Du maximum des chaînes (≈ ln n / ln ln n pour m = n) ? Simulez. 3) Paradoxe des anniversaires : nombre attendu de clés avant la première collision ≈ √(πm/2). Simulez et concluez sur les hachages cryptographiques à 256 bits.
Correction (extrait)
def tri_compte(t):
c = 0
def rec(t):
nonlocal c
if len(t) <= 1: return t
p = random.choice(t); c += len(t) - 1
return rec([x for x in t if x < p]) + [x for x in t if x == p] + rec([x for x in t if x > p])
rec(t); return c
for n in (50, 200, 1000):
moy = sum(tri_compte(random.sample(range(10**6), n)) for _ in range(20)) / 20
theo = sum(2 / (j - i + 1) for i in range(n) for j in range(i + 1, n))
print(n, round(moy), round(theo), round(2 * n * math.log(n)))
def collision(m):
vus = set(); k = 0
while True:
h = random.randrange(m); k += 1
if h in vus: return k
vus.add(h)
for m in (365, 10**4, 10**6):
print(m, sum(collision(m) for _ in range(500)) / 500, round(math.sqrt(math.pi * m / 2), 1))Pour un hachage à 256 bits, m = 2256 : il faut ≈ 2128 essais pour une collision — plus que le nombre d’atomes accessibles à tous les ordinateurs jusqu’à la fin du soleil. C’est ce qui rend Git, les signatures et les blockchains sûrs, et c’est un argument probabiliste, pas une preuve d’impossibilité.
06 / Vérification
Vous moyennez n lectures d’un capteur bruité. Pour diviser l’incertitude par 2, il faut :
Deux questions supplémentaires
1. Un test à 99 % de sensibilité sur une maladie touchant 1 personne sur 10 000 : que signifie un résultat positif ? Surtout un faux positif (Bayes : la probabilité d’être malade reste faible, ≈ 1 % si 1 % de faux positifs).
2. Pourquoi Var[X + Y] = Var[X] + Var[Y] exige-t-il l’indépendance ? Le terme croisé 2 Cov(X, Y) n’est nul que si les variables sont non corrélées.
Référence
Les mots à retenir
| Mot | Définition |
|---|---|
| Espérance | Moyenne pondérée par les probabilités ; linéaire sans condition. |
| Variance | E[(X − μ)²] ; additive pour des variables indépendantes. |
| LGN | La moyenne empirique converge vers l’espérance. |
| TCL | La moyenne de n variables est ≈ normale d’écart-type σ/√n. |
| Intervalle de confiance | Procédure qui capture la vraie valeur avec une fréquence donnée. |
| Bootstrap | IC par rééchantillonnage des données. |
| Bayes | Posterior ∝ vraisemblance × prior. |
| Chaîne de Markov | Processus dont le futur ne dépend que de l’état présent. |
| p-valeur | P(données au moins aussi extrêmes | H0). |
| Monte-Carlo / Las Vegas | Algorithme aléatoire parfois faux / toujours juste. |
| Thompson sampling | Choisir selon un tirage du posterior : explore puis exploite. |
Pour continuer
Vous quantifiez l’incertitude
Module suivant : le calcul numérique — dérivées, intégrales, équations différentielles, optimisation par descente de gradient : les moteurs des simulateurs et de l’apprentissage.
À faire chez soi
- Refaire toutes les simulations du module 3e « probabilités » avec NumPy et des intervalles de confiance.
- Lire Think Stats chapitres 1-8 (gratuit) et refaire les exercices.
- Prouver que la médiane de n tirages a un point de rupture de 50 %.