Probabilités

15 minutes de Python

La bibliothèque numpy.random : simulations de lois continues usuelles

Thème : Probabilités

Niveau : ECG2

Année : Maths appliquées, Maths approfondies

Objectif : Savoir simuler des lois continues (uniforme, exponentielle, normale) et estimer des quantités simples (moyenne, probabilité d’un événement) par simulation.

Simulation de lois continues usuelles

Le module numpy.random permet de simuler directement des variables aléatoires à densité suivant les lois usuelles, sans avoir à modéliser explicitement l’expérience aléatoire correspondante.




Simulation d’une variable aléatoire de loi usuelle

On peut notamment simuler :

  • une loi uniforme sur [0,1[ à l’aide de rd.random,
  • une loi exponentielle à l’aide de rd.exponential,
  • une loi normale à l’aide de rd.normal,
  • une loi gamma à l’aide de rd.gamma (option maths approfondies uniquement).

On rappelle ci-dessous les paramètres de chacune de ces fonctions.

  • rd.random() permet de simuler une variable aléatoire suivant la loi uniforme sur [0,1[.
  • rd.exponential(a) permet de simuler une variable aléatoire suivant une loi exponentielle de paramètre \( \dfrac{1}{a} \). Le paramètre a correspond donc à l’espérance de la variable aléatoire simulée.
  • rd.normal(m,s) permet de simuler une variable aléatoire suivant une loi normale \( \mathcal{N}(m,s^2) \). Le paramètre m est l’espérance et s l’écart-type.
  • rd.gamma(a,1) permet de simuler une variable aléatoire suivant une loi gamma \( \gamma(a) \).

Dans chacun des cas précédents, la fonction renvoie une seule réalisation de la variable aléatoire considérée.

Par exemple, l’instruction

X = rd.normal(0,1)

renvoie une simulation d’une variable aléatoire suivant la loi normale centrée réduite.

De même, l’instruction

Y = rd.exponential(2)

renvoie une simulation d’une variable aléatoire suivant une loi exponentielle d’espérance 2.




Simulation de plusieurs variables aléatoires indépendantes

Les fonctions de numpy.random permettent également de simuler plusieurs réalisations indépendantes d’une même variable aléatoire en une seule instruction. Pour cela, on ajoute un second paramètre indiquant le nombre de réalisations souhaitées.

X = rd.loi(parametres, n)

loi est à remplacer par l’une des lois précédentes (random, exponential, normal, gamma) et parametres par les paramètres adéquats.

La variable X est alors un tableau numpy contenant n réalisations indépendantes de la variable aléatoire considérée.

On peut également demander une matrice contenant des réalisations indépendantes en fournissant un couple de dimensions :

X = rd.loi(parametres, [n,p])

Dans ce cas, X est une matrice de taille n × p dont les coefficients sont des réalisations indépendantes de la même variable aléatoire.

X = rd.normal(0,1,1000)

La variable X est alors un tableau contenant 1000 réalisations indépendantes d’une variable aléatoire suivant la loi normale centrée réduite.

Exemple

import numpy as np
import numpy.random as rd

N = 200000
X = rd.normal(0, 1, N)

Y=np.abs(X) 

print(np.mean(Y <= 1.96))

Explication

Ce script simule N réalisations indépendantes d’une variable aléatoire \( X \) suivant la loi normale centrée réduite \( \mathcal{N}(0,1) \), via rd.normal(0, 1, N).

Y=np.abs(X) affecte alors à Y les valeurs prises par \( | X | \).

L'instruction Y <= 1.96 construit un tableau de booléens (les coefficients sont tous égaux à True ou False) indiquant, pour chaque réalisation, si l’événement \( [ | X | \le 1.96] \) est réalisé.

La fonction np.mean(...) renvoie la moyenne de ces booléens (True compte comme 1 et False compte comme 0), donc la fréquence de réalisation de l’événement. Elle fournit ainsi une estimation de \( \mathbb{P}( | X | \le 1.96) \).

Trois commandes utiles aujourd’hui

Clique sur une carte pour voir l’instruction utile.

np.mean
np.std
Calculer le produit des éléments d’un tableau

Un exercice pour vérifier ta maîtrise

On considère le script Python suivant.

  1. Compléter la ligne X = pour que X reçoive une simulation de N variables aléatoires indépendantes de loi uniforme sur [0,1[.
  2. Compléter la ligne Esp = pour que print(Esp) affiche une estimation de l’espérance de \( \dfrac{1}{X+1} \).
  3. Donner une approximation de la valeur affichée par print(Prob).

Et pour quelques minutes de plus…

Prendre en main la programmation, pas à pas.

Ces exercices sont conçus pour t’aider à maîtriser progressivement la programmation en Python, en partant de la lecture et de la compréhension du code, jusqu’à l’écriture autonome de scripts complets.

L’objectif n’est pas d’aller vite, mais de construire des automatismes solides, en comprenant ce que fait chaque instruction, puis en apprenant à les utiliser par toi-même.

L’ordre des exercices est volontaire : on lit, on comprend, on complète, puis on écrit seul. Prends le temps de chaque étape : c’est la clé pour progresser durablement.

Niveau 1 Analyser un code

Comprendre avant d’écrire.
Dans cette première série, tu observes et analyses des scripts Python déjà écrits. L’objectif est de comprendre la logique du programme, le rôle des variables, des boucles et des conditions, et d’être capable de prévoir ce que le code affiche ou calcule.

Niveau 2 Compléter un code

Écrire, mais avec un cadre.
Ici, tu passes à l’écriture sans partir de zéro. Le squelette du programme est fourni : il te reste à compléter certaines instructions pour que le code fonctionne correctement. Ce format permet de se concentrer sur l’essentiel, sans se perdre dans la structure générale.

Niveau 3 Écrire un code complet

Passer à l’autonomie.
Dans cette dernière série, tu écris un programme complet à partir d’une consigne. Tu dois organiser ton code, choisir les bonnes instructions et construire la logique globale du script. C’est ici que tu mets en pratique tout ce que tu as appris dans les niveaux précédents.

error: Ce contenu est protégé !