Bernoulli, puis binomiale, sans le générateur tout fait
Exercice d'entraînement · niveau 2 · mathématiques (ECT 2e année), chapitre 12 — Informatique et travaux pratiques · Simulation de lois
Énoncé
1. Écrire une fonction Python qui simule une loi de Bernoulli de paramètre p en n'utilisant que rd.random. 2. En déduire une fonction simulant une loi binomiale de paramètres n et p. 3. Donner l'instruction utilisant le générateur tout fait, et les valeurs vers lesquelles doivent tendre la moyenne et la variance pour et .
Corrigé
1. La loi de Bernoulli. Comme rd.random() rend un réel uniforme de , l'événement « le tirage est inférieur à p » a la probabilité p : c'est exactement un succès.
import numpy as np
import numpy.random as rd
def bernoulli(p):
if rd.random() < p:
return 1
return 0
2. La loi binomiale. Elle compte les succès de n épreuves de Bernoulli indépendantes, chacune de paramètre p. Il suffit donc de les additionner :
def binomiale(n, p):
s = 0
for i in range(n):
s = s + bernoulli(p)
return s
3. Le générateur tout fait, et la comparaison.
rd.seed(6)
a = np.array([binomiale(20, 0.3) for i in range(10000)])
b = rd.binomial(20, 0.3, 10000)
print(np.mean(a), np.mean(b))
print(np.var(a), np.var(b))
Les valeurs attendues sont celles de la loi binomiale :
Ce que chaque méthode apporte. La construction à la main est plus lente — elle fait tirages là où le générateur n'en fait qu'un — mais elle explique la loi : la binomiale n'est rien d'autre qu'une somme de Bernoulli indépendantes. Le générateur, lui, est un outil, pas une définition.
Le point délicat. Écrire rd.random() <= p au lieu de < ne change rien en pratique, la probabilité de tomber exactement sur p étant nulle ; en revanche, écrire rd.random() < 1 - p inverserait les rôles du succès et de l'échec.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.