ParcoursOuvrir l'appli

Les probabilités

Les maths du ML, en code · 50 min

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

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 :

  1. malade : un tableau de True / False, True avec une probabilité de 1 %. Astuce : rng.random(n) tire des nombres décimaux entre 0 et 1 ; rng.random(n) < 0.01 vaut True dans 1 % des cas ;
  2. positif : pour chaque personne, True avec une probabilité de 0,90 si elle est malade, 0,09 sinon. Utilise np.where(malade, 0.90, 0.09), qui choisit 0,90 là où malade est vrai et 0,09 ailleurs ;
  3. 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