Probabilités
Mise en œuvre sur R et Python
- Présentation du cours
- Du dé aux probabilités
- Le vocabulaire du hasard
- Compter sans énumérer
- Permutations et arrangements
- Les combinaisons
- Les axiomes et les premières règles
- Conditionnement et indépendance
- Le théorème de Bayes
- La variable aléatoire
- Loi et fonction de répartition
- L'espérance mathématique
- Variance, covariance et couples
- Bernoulli et la loi binomiale
- Géométrique et Poisson
- Étude de cas : un portefeuille de crédits
- Du discret au continu
- Uniforme et exponentielle
- La loi normale
- Les lois dérivées et la carte des lois
- La loi des grands nombres
- Le théorème central limite
- Mise en œuvre sur R et Python
Probabilités
Chapitre 21 : Mise en œuvre sur R et Python
Le programme
Ce que ce chapitre reprend
Les vingt et un chapitres, en quelques lignes
| Ce qu’on refait | Chapitres |
|---|---|
| Dénombrement | 3 à 5 |
| Lois discrètes et leurs quantiles | 13 à 15 |
| Lois continues et la table normale | 16 à 19 |
| Simulation et vérification des théorèmes | 20, 21 |
Le but n’est pas d’apprendre un logiciel
C’est de vérifier les résultats calculés à la main et de comprendre la logique de nommage des fonctions — qui est la même partout.
Savoir lire une table normale reste utile : c’est ce qui permet de repérer un résultat aberrant, qu’aucun logiciel ne signalera.
La logique de nommage
Quatre lettres, et tout est dit
La convention de R
| Préfixe | Rôle | Question |
|---|---|---|
d |
densité ou P(X = k) | quelle probabilité pour cette valeur ? |
p |
répartition F(x) | quelle probabilité en dessous ? |
q |
quantile F^{-1}(\alpha) | quelle valeur pour cette probabilité ? |
r |
tirage aléatoire | simuler |
On accole le nom de la loi
binom, pois, geom, unif, exp, norm, chisq, t, f.
dbinom, pnorm, qpois, rexp : les trente-six fonctions du cours se déduisent de deux listes. Il n’y a rien d’autre à mémoriser.
Sur R
Le dénombrement
factorial(5) # 120
choose(10, 3) # 120 : le comité du chapitre 4
choose(49, 5) # 1906884 : les grilles de loterie
prod(12:10) # 1320 : l'arrangement A(12,3)Trois remarques
choose(n, k) est \binom{n}{k} ; il n’existe pas de fonction pour A_n^k, mais prod(n:(n-k+1)) la donne.
factorial(170) est le dernier calcul possible : au-delà, R renvoie Inf. Ne calculez jamais les factorielles séparément.
Le portefeuille de crédits
n <- 200 ; p <- 0.04
dbinom(8, n, p) # 0.1424619 : exactement 8 défauts
1 - pbinom(13, n, p) # 0.0312124 : au moins 14 défauts
qbinom(0.99, n, p) # 15 : le quantile à 99 %
n*p # 8 : E(X)
sqrt(n*p*(1-p)) # 2.771281 : sigma(X)Les cinq chiffres du chapitre 14
Le capital réglementaire s’écrit alors en une ligne :
(qbinom(0.99, n, p) - n*p) * 100000 # 700000 dirhamsPoisson et l’approximation
dpois(8, lambda = 8) # 0.1395865 contre 0.1424619
ppois(14, lambda = 8) # 0.9827430 contre 0.9847500Le contrôle par une seconde méthode
Deux calculs indépendants qui s’accordent à trois millièmes près : le résultat est fiable.
C’est la vérification la moins coûteuse qui soit, et elle prend une ligne.
La loi normale
pnorm(1.25) # 0.8943502 la table du chapitre 17
pnorm(9000, mean = 7158, sd = 1470) # 0.8949083
1 - pnorm(9000, 7158, 1470) # 0.1050917 les salaires élevés
qnorm(0.975) # 1.959964
qnorm(0.99) # 2.326348La table entière tient dans une fonction
pnorm(z) est la table. Elle accepte directement m et \sigma, ce qui dispense même de standardiser.
qnorm fait la lecture inverse — et donne le 1{,}96 de tous les intervalles de confiance.
Sur Python
Le module scipy.stats
from scipy import stats
from math import comb, factorial
comb(10, 3) # 120
factorial(5) # 120
n, p = 200, 0.04
stats.binom.pmf(8, n, p) # 0.14246191 -> le d de R
1 - stats.binom.cdf(13, n, p) # 0.03121238 -> le p de R
stats.binom.ppf(0.99, n, p) # 15.0 -> le q de R
stats.binom.rvs(n, p, size=5) # simulation -> le r de RLe module scipy.stats (suite)
La même logique, d’autres noms
| R | Python | Rôle |
|---|---|---|
dbinom |
binom.pmf |
probabilité d’une valeur |
pbinom |
binom.cdf |
fonction de répartition |
qbinom |
binom.ppf |
quantile |
rbinom |
binom.rvs |
tirage |
Les lois continues
stats.norm.cdf(1.25) # 0.8943502
stats.norm.cdf(9000, loc=7158, scale=1470) # 0.8949083
stats.norm.ppf(0.99) # 2.3263479
stats.expon.cdf(3, scale=1/0.2) # 0.4511884
stats.poisson.pmf(8, mu=8) # 0.1395865Une seule précaution, mais elle compte
Python attend scale, c’est-à-dire l’écart-type pour la normale et 1/\lambda pour l’exponentielle.
Écrire scale=0.2 au lieu de scale=1/0.2 donne un résultat parfaitement plausible et parfaitement faux. C’est l’erreur la plus fréquente du passage de R à Python.
Vérifier les deux théorèmes
La loi des grands nombres
set.seed(2024)
lancers <- sample(1:6, 100000, replace = TRUE)
moyennes <- cumsum(lancers) / seq_along(lancers)
moyennes[10] # 3.900000
moyennes[1000] # 3.472000
moyennes[100000] # 3.499870
plot(moyennes, log = "x", type = "l")
abline(h = 3.5, col = "red", lwd = 2)La figure du chapitre 19, reproduite en cinq lignes
Sur dix lancers, la moyenne vaut 3{,}9 ; sur cent mille, 3{,}4999.
Changez la graine et refaites : la trajectoire sera différente, la limite identique. C’est exactement ce que le théorème affirme.
Le théorème central limite
set.seed(2024)
n <- 30
moyennes <- replicate(10000, mean(sample(1:6, n, replace = TRUE)))
mean(moyennes) # 3.499 -> m = 3.5
sd(moyennes) # 0.312 -> sigma/sqrt(n) = 1.708/sqrt(30) = 0.312
hist(moyennes, breaks = 40, freq = FALSE)
curve(dnorm(x, 3.5, 1.708/sqrt(30)), add = TRUE, col = "red", lwd = 2)Trois vérifications d’un coup
- La moyenne des moyennes vaut bien m = 3{,}5.
- Leur écart-type vaut bien \sigma/\sqrt{n} = 0{,}312.
- L’histogramme épouse la courbe normale — alors que le dé est parfaitement plat.
Le même en Python
import numpy as np
rng = np.random.default_rng(2024)
moyennes = rng.integers(1, 7, size=(10000, 30)).mean(axis=1)
moyennes.mean() # 3.4995
moyennes.std() # 0.3119La simulation comme outil de gestion
Ce que nous venons de faire s’appelle une simulation de Monte-Carlo. Trois lignes suffisent.
Quand une loi est trop compliquée à calculer — un portefeuille aux actifs corrélés, un projet aux flux incertains — on ne calcule plus : on simule dix mille scénarios et l’on lit le quantile. C’est la méthode dominante en finance de marché.
Ce qu’il faut retenir
Le résumé du chapitre
Six points
- Quatre préfixes en R —
d,p,q,r— et le nom de la loi : trente-six fonctions en deux listes. - En Python :
pmf/pdf,cdf,ppf,rvsdansscipy.stats. pnormetnorm.cdfremplacent la table ;qnormen fait la lecture inverse.- Attention au
scalede Python : écart-type pour la normale, 1/\lambda pour l’exponentielle. - Cinq lignes reproduisent la loi des grands nombres, cinq autres le théorème central limite.
- Quand le calcul devient impossible, la simulation donne la réponse.
La fin du cours
Nous sommes partis d’un dé et de six fréquences. Nous arrivons au capital réglementaire d’une banque et à la marge d’erreur d’un sondage.
Rien de nouveau n’a été inventé en chemin : la moyenne est devenue espérance, la fréquence probabilité, le tableau de contingence loi jointe. Le calcul des probabilités est bien l’autre face de la statistique descriptive — et il ouvre maintenant sur la statistique inférentielle, où l’on remontera de l’échantillon vers la population.
Ressources du chapitre
- Diapositives
- Polycopié du chapitre
- Exercices corrigés
- Application interactive
- — Vidéo
- QCM (bientôt)