Simuler des échantillons en Python
Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.
Créer un compteÉchantillon simulé
Simuler un échantillon de taille $n$ d'une expérience à deux issues (succès / échec), c'est répéter $n$ fois la même expérience aléatoire à l'aide de l'ordinateur, puis observer le nombre de succès obtenus. La fréquence de succès est alors $f = \dfrac{\text{nombre de succès}}{n}$.
Méthode
Pour simuler un échantillon puis répéter la simulation sur $N$ échantillons :
- Étape 1 : importer la fonction de tirage aléatoire avec from random import randint.
- Étape 2 : pour un échantillon de taille $n$, répéter $n$ tirages avec une boucle for ; à chaque tirage, comparer le résultat à la condition de succès et incrémenter un compteur si le succès est réalisé.
- Étape 3 : calculer la fréquence de succès $f = \dfrac{\text{succès}}{n}$ (penser à diviser par n, pas par un entier au hasard).
- Étape 4 : pour étudier la fluctuation, recommencer l'étape 2 sur $N$ échantillons à l'aide d'une seconde boucle, et compter combien de fréquences vérifient $|f - p| \leqslant \dfrac{1}{\sqrt{n}}$, où $p$ est la probabilité de succès.
- Étape 5 : la proportion de ces cas, sur les $N$ échantillons, estime la part des fréquences proches de $p$.
Un échantillon : fréquence de pile
On lance $n = 1000$ fois une pièce équilibrée. Le succès est l'issue « pile », ici codée par $1$. On code « pile » et « face » par randint(0, 1), qui renvoie $0$ ou $1$ au hasard, et on compte les piles :
from random import randint
n = 1000
succes = 0
for i in range(n) :
tirage = randint(0, 1) # 0 = face, 1 = pile
if tirage == 1 :
succes = succes + 1
frequence = succes / n
print("Nombre de piles :", succes)
print("Fréquence :", frequence)
Étape 1 : from random import randint permet d'utiliser randint(0, 1), qui renvoie $0$ ou $1$ avec la même probabilité.
Étape 2 : La boucle for répète $1000$ tirages ; le compteur succes augmente de $1$ à chaque pile (quand tirage == 1).
Étape 3 : On divise par n pour obtenir la fréquence. Un résultat possible :
Nombre de piles : 511
Fréquence : 0.511
La fréquence observée $0{,}511$ est proche de la probabilité $p = 0{,}5$ : c'est ce qu'illustre la loi des grands nombres pour un grand échantillon.
N échantillons : proportion des fréquences proches de p
On simule maintenant $N = 1000$ échantillons de taille $n = 100$ d'un lancer de dé, où le succès est « obtenir un six » (probabilité $p = \dfrac{1}{6}$). Pour chaque échantillon, on calcule la fréquence $f$, puis on compte combien vérifient $|f - p| \leqslant \dfrac{1}{\sqrt{n}}$. Ici $\dfrac{1}{\sqrt{100}} = \dfrac{1}{10} = 0{,}1$ :
from random import randint
N = 1000
n = 100
p = 1 / 6
seuil = 1 / n ** 0.5 # 1 / racine de n
proches = 0
for k in range(N) :
succes = 0
for i in range(n) :
if randint(1, 6) == 6 : # un six = succès
succes = succes + 1
f = succes / n
if abs(f - p) <= seuil :
proches = proches + 1
proportion = proches / N
print("Proportion des écarts <= 1/racine(n) :", proportion)
Étape 1 : La boucle extérieure (for k in range(N)) parcourt les $1000$ échantillons.
Étape 2 : La boucle intérieure (for i in range(n)) simule un échantillon de $100$ lancers ; on compte les six avec randint(1, 6) == 6.
Étape 3 : Pour chaque échantillon, abs(f - p) mesure l'écart entre la fréquence et la probabilité ; on incrémente proches quand cet écart ne dépasse pas le seuil $0{,}1$.
Étape 4 : On divise par N pour obtenir la proportion. Un résultat possible :
Proportion des écarts <= 1/racine(n) : 0.997
Une très grande majorité des échantillons ont une fréquence proche de $p$ : l'écart dépasse rarement $\dfrac{1}{\sqrt{n}}$.
Remarque
Comme les tirages sont aléatoires, les nombres affichés changent à chaque exécution : il est normal de ne pas retrouver exactement $0{,}511$ ou $0{,}997$. Seul l'ordre de grandeur est stable.
On obtient le nombre de succès en s'arrêtant à la variable succes, et la fréquence en divisant par n : c'est selon ce que l'énoncé demande de renvoyer.
Attention
randint(a, b) inclut les deux bornes : randint(1, 6) peut donner $6$, et randint(0, 1) donne bien $0$ ou $1$. Écrire randint(1, 5) pour un dé oublierait la face $6$.
Penser à réinitialiser le compteur succes = 0 au début de chaque échantillon (à l'intérieur de la boucle extérieure). S'il est remis à zéro une seule fois avant les deux boucles, les succès s'accumulent et les fréquences calculées sont fausses.