Dans cet article, tu vas tout savoir sur la méthode d’inversion, son fonctionnement et la manière de la coder en Python. Il est indispensable de maîtriser cet exercice classique, car il tombe très souvent au concours, de façon plus ou moins sophistiquée en fonction des écoles. Il s’agit d’une méthode accessible et une fois qu’elle est comprise, c’est toujours le même principe !
Introduction et vulgarisation de la notion
Le script de la méthode d’inversion sur Python intervient dans des exercices où tu rencontres une fonction bijective dont il est possible de déterminer la bijection réciproque \(f^{-1}\). Il est très important de montrer au correcteur que tu maîtrises la traduction Python de l’exercice associé en mathématiques. Cela te fera gagner en crédibilité, car il verra que tu as aussi travaillé la partie informatique du programme.
La méthode d’inversion sert à simuler une variable aléatoire X dont on connaît la bijection réciproque de la fonction de répartition grâce à la loi uniforme sur [0;1]. On peut utiliser Python pour simuler cette variable aléatoire X. On parle donc de méthode d’inversion, car il s’agit « d’inverser » la fonction de répartition de X. On peut simuler la variable aléatoire X, car on connaît sa fonction de répartition F et on a :
\(X {=} F^{-1}(U)\)
avec U une variable aléatoire suivant une loi uniforme sur [0;1].
Présentation mathématique de la méthode d’inversion
Énoncé du principe de la méthode d’inversion
Soit \(X\) une variable aléatoire ayant pour fonction de répartition \(F.\)
Soit \(U\) une variable aléatoire telle que \(U \hookrightarrow \mathcal{U}([0,1])\).
On suppose que la fonction de répartition \(F\) réalisée est continue et strictement croissante, F réalise donc une bijection de \(\mathbb{R}\) sur [0 ;1].
La variable aléatoire \(X {=} F^{-1}(U)\) a alors pour fonction de répartition F.
Autrement dit, \(F^{-1}(U)\) et X ont la même loi.
Démonstration
F est continue et strictement croissante sur son ensemble de définition \(\mathbb{R}\), donc F est bijective.
Notons G la fonction de répartition de la variable aléatoire \(F^{-1}(U)\). On a donc pour tout \(x \in
\mathbb{R}, G(x) = P([F^{-1}(U)\le x])\).
Soient \(x\in\mathbb{R}\)et \(\omega\in\Omega\), on a :
\(\begin{align}\\&\omega\in [F^{-1}(U)\le x]\\& \Leftrightarrow F^{-1}(U(\omega)) \le x \\&\Leftrightarrow U(\omega) \le F(x) \\& \Leftrightarrow \omega\in [U\le F(x)]\end{align}\)
Ainsi, on a \(G(x)=P([F^{-1}(U)\le x]) = P([U\le F(x)]) = F(x)\)
Utilisation de Python pour la méthode d’inversion
Structure de l’algorithme
Les étapes sont les suivantes :
- Générer \(U\) telle que \(U \hookrightarrow \mathcal{U}([0,1])\)
- Coder la variable aléatoire \(X\) telle que \(X {=} F^{-1}(U)\)
- Afficher une simulation de \(X\)
Explication de l’algorithme
ATTENTION : nous raisonnons dans le cas où \(X\) est une variable aléatoire à densité de fonction de répartition F.
Le principe de la méthode d’inversion consiste à exprimer la probabilité \(P([U\le F(x)])\) sous la forme \(P([G(U)\le x]\), où \(G\) est la bijection réciproque de \(F\). Rappelons que dans les exercices faisant intervenir la méthode d’inversion, G peut être déterminée. Dès lors, la variable aléatoire \(G\) suivra la même loi que \(X,\) et on obtiendra une simulation de \(X\), d’abord en simulant la variable aléatoire \(U\) (à l’aide de la commande rd.random), puis en lui appliquant la fonction \(G\).
Applications
Les deux exemples ci-dessous sont absolument à maîtriser, car ce sont les deux scripts les plus classiques sur l’application en Python de la méthode d’inversion. Tu pourras retrouver ces questions dans des sujets EDHEC, EMLyon ou encore Ecricome.
Exemple 1 : loi exponentielle
Simulation d’une loi exponentielle à l’aide d’une loi uniforme. Soit U une variable aléatoire telle que \(U \hookrightarrow \mathcal{U}([0,1])\) et \(\lambda>0\).
On détermine la fonction de répartition de \(G = \displaystyle \frac{-1}{\lambda}ln(1-U)\).
Soit \(x\in [0;1]\).
On a : \(F_G(x) = P(\displaystyle \frac{-1}{\lambda}ln(1-U)\le x) = P(U\le1-e^{-\lambda x})= 1-e^{-\lambda x} \text{ car } 1-e^{-\lambda x} \in [0;1]\)
Donc :
\(F_G(x) =
\begin{cases}
0 &\text{si} \; x < 0\\
P(U\le1-e^{\lambda x}) &\text{sinon}
\end{cases}\)
Donc, G suit une loi exponentielle de paramètre λ. On peut donc simuler G grâce à \(U \hookrightarrow \mathcal{U}([0,1])\) :
Exemple 2 : loi uniforme sur [a;b]
Simulation d’une loi uniforme sur [a;b] à l’aide d’une loi uniforme sur [0;1]. Soit U une variable aléatoire telle que \(U \hookrightarrow \mathcal{U}([0,1])\) et a et b des réels.
On détermine la fonction de répartition de \(G=(b-a)U+a\).
Soit \(x\in [a;b]\).
On a : \(F_G(x) = P((b-a)U+a\le x) = P(U\le\displaystyle \frac{x-a}{b-a})= \displaystyle \frac{x-a}{b-a}\text{ car } \displaystyle \frac{x-a}{b-a} \in [0;1]\)
Donc :
\(F_G(x) =
\begin{cases}
0 &\text{si} \; x < a\\
P(U\le\displaystyle \frac{x-a}{b-a}) &\text{si } x\in[a;b]\\
1&\text{si } x>b
\end{cases}\)
Donc, G suit une loi uniforme sur [a;b]. On peut donc simuler G grâce à \(U \hookrightarrow \mathcal{U}([0,1])\) :
Pour s’entraîner
Le sujet HEC 2015 sur la loi de Gumbel est excellent pour s’entraîner à utiliser la méthode d’inversion sur Python. Tu trouveras parfois des énoncés en Scilab, mais les deux langages informatiques sont très proches. N’hésite pas à consulter notre répertoire d’annales.