Adloun

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() &lt;= p au lieu de &lt; ne change rien en pratique, la probabilité de tomber exactement sur p étant nulle ; en revanche, écrire rd.random() &lt; 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.