Les probabilités
Mesurer le hasard
Quand toutes les issues ont la même chance, la probabilité se calcule en comptant :
probabilité = nombre de cas favorables / nombre de cas possibles
- un dé tombe sur 6 : 1 cas favorable sur 6 possibles, probabilité 1/6, environ 0,167 ;
- un dé tombe sur un nombre pair : 3 cas (2, 4, 6) sur 6, probabilité 1/2.
Simuler pour vérifier
Un ordinateur peut lancer un dé un million de fois en une fraction de seconde. NumPy a un générateur de nombres aléatoires :
import numpy as np
rng = np.random.default_rng(42) # 42 : la « graine »
des = rng.integers(1, 7, size=100000) # 100 000 lancers, entre 1 et 6
print((des == 6).mean()) # environ 0.167
(des == 6).mean() : le masque vaut 1 pour chaque 6 et 0 sinon, sa moyenne est donc la proportion de 6.
Pratique : Lance des dés
Tape chaque ligne et observe. Change ensuite la taille (10, puis 1 000 000) pour voir la loi des grands nombres.
Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer
Exercice : Simuler deux dés
Avec le générateur donné, simule 200 000 lancers de deux dés (deux tableaux de1 et de2). Calcule :
p_double_six: la proportion de lancers où les deux dés font 6 ;p_somme_7: la proportion de lancers où la somme fait 7 ;somme_frequente: la somme la plus fréquente.
Compare avec le calcul : un double six a une probabilité de 1/36 (environ 0,028), une somme de 7 a 6 chances sur 36 (environ 0,167).
Voir une solution
import numpy as np
rng = np.random.default_rng(2026)
de1 = rng.integers(1, 7, size=200000)
de2 = rng.integers(1, 7, size=200000)
p_double_six = ((de1 == 6) & (de2 == 6)).mean()
p_somme_7 = (de1 + de2 == 7).mean()
somme_frequente = np.bincount(de1 + de2).argmax()
print(p_double_six, p_somme_7, somme_frequente)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Le piège du test positif
Une maladie touche 1 % de la population. Un test de dépistage la détecte chez 90 % des malades, mais il se trompe aussi chez 9 % des personnes saines (il dit « positif » alors qu'elles ne sont pas malades : un faux positif).
Ton test est positif. Quelle est la probabilité que tu sois vraiment malade ?
La plupart des gens, y compris beaucoup de médecins dans les études, répondent « 90 % ». La vraie réponse est environ 9 %.
Imagine 10 000 personnes testées :
| Malades (1 %) | Saines (99 %) | |
|---|---|---|
| Nombre | 100 | 9 900 |
| Test positif | 90 (90 % des malades) | 891 (9 % des saines) |
Il y a 90 + 891 = 981 tests positifs, dont seulement 90 viennent de vrais malades : 90 / 981, environ 9 %. Comme les personnes saines sont beaucoup plus nombreuses, même un petit taux d'erreur chez elles produit plus de faux positifs que de vrais.
En machine learning, c'est exactement le problème des classes déséquilibrées : un modèle qui détecte la fraude bancaire, rare, déclenchera souvent plus de fausses alertes que de vraies. Tu verras comment le mesurer avec la précision et le rappel.
Exercice : Vérifier par la simulation
Simule le dépistage sur 1 000 000 de personnes pour vérifier le résultat surprenant :
malade: un tableau deTrue/False,Trueavec une probabilité de 1 %. Astuce :rng.random(n)tire des nombres décimaux entre 0 et 1 ;rng.random(n) < 0.01vautTruedans 1 % des cas ;positif: pour chaque personne,Trueavec une probabilité de 0,90 si elle est malade, 0,09 sinon. Utilisenp.where(malade, 0.90, 0.09), qui choisit 0,90 là oùmaladeest vrai et 0,09 ailleurs ;p: parmi les positifs, la proportion de vrais malades.
Voir une solution
import numpy as np
rng = np.random.default_rng(7)
n = 1000000
malade = rng.random(n) < 0.01
positif = rng.random(n) < np.where(malade, 0.90, 0.09)
p = malade[positif].mean()
print(p)Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice