Dans cet article, tu vas à la fois comprendre à quoi sert la méthode de Monte-Carlo, son fonctionnement, la manière de la coder en Python, avec un point bonus pour aller plus loin. C’est une méthode clé de ton programme Python et savoir la coder te sera indispensable, car de nombreux sujets de concours (notamment en ECG) sont très axés sur les probabilités (par exemple EDHEC 2018 voie E).
Qu’est-ce que la méthode de Monte-Carlo ?
Cette méthode va te permettre d’estimer de manière assez précise, grâce à Python, l’espérance d’une variable aléatoire ou d’une transformée, la probabilité d’un événement ou encore la fonction de répartition d’une loi.
Comme tu le sais probablement, Python n’est pas capable de te donner des valeurs exactes, mais tu peux tout de même t’approcher au plus près du résultat réel. Ce qui peut à la fois te permettre de vérifier un calcul ou d’obtenir un ordre de grandeur lorsque le calcul mathématique est trop complexe.
Comment fonctionne-t-elle ?
Utiliser la méthode de Monte-Carlo revient à reproduire ce que tu faisais au collège pour estimer la probabilité de tomber sur 1 quand tu lances un dé à six faces. Tu réalisais un grand nombre de réalisations de l’expérience aléatoire et à chaque réalisation, tu notais le résultat. Ensuite, tu regardais le nombre de 1 que tu avais noté par rapport au nombre de lancers totaux.
Plus mathématiquement, cette méthode se base sur la loi faible des grands nombres (LFGN). Je t’en rappelle la formule ci-contre :
\( \forall \epsilon > 0, \lim \limits_{n \to +\infty} P(\vert \overline{Xn}-m \vert) =0 \)
Autre rappel : \(\overline{Xn}= \frac{1}{n}\displaystyle \sum_{k=1}^{n}X_k\), où les \((X_k)_{k \in [\! [1,n]\!]}\) sont des variables indépendantes suivant la même loi \(X\).
En effet, on voit que réaliser une simulation de variables aléatoires suivant la même loi que \(X\) un très grand nombre de fois, puis calculer la moyenne de ces réalisations permet de s’approcher de m, c’est-à-dire de l’espérance.
Je vais maintenant te donner concrètement des codes qui fonctionnent et les erreurs à éviter.
Pour estimer l’espérance
Si tu souhaites estimer l’espérance à l’aide de la méthode de Monte-Carlo, tu dois reproduire le processus expliqué dans le paragraphe précédent d’une manière ou d’une autre. Je te rappelle qu’en Python, il existe mille et une façons de créer un code pour atteindre le même objectif.
Par exemple, tu crées une liste L dans laquelle tu vas ajouter la valeur obtenue à chacune des réalisations de X et, à la fin, tu renvoies la moyenne de cette liste. Cela revient à calculer \(\overline{Xn}\) pour n très grand et donc, d’après la LFGN, à se rapprocher de l’espérance de X.
Pour estimer l’espérance d’une variable aléatoire suivant une loi de Bernoulli de paramètre \(\frac{1}{2}\), le code suivant est une possibilité :
Pour estimer une probabilité
De la même manière, il est possible d’estimer la probabilité d’un événement lorsqu’on connaît la loi ou qu’on peut créer un script qui permet de la simuler.
Le processus est similaire : tu simules un grand nombre de réalisations de la loi, puis tu calcules le rapport entre le nombre de fois où l’événement recherché a été réalisé et le nombre total de simulations de la loi.
Par exemple, si la fonction SimulX() te permet de simuler une réalisation d’un lancer de dé à six faces et que tu cherches à savoir quelle est la probabilité de tomber sur 4, le code suivant fonctionne :
Si tu as un autre code, vérifie bien que pour \(n=10000\), tu tombes sur environ 0,1666667.
Les erreurs à éviter
La première et principale erreur à éviter est de penser que tu vas pouvoir, grâce à Python, trouver des valeurs exactes. La méthode de Monte-Carlo permet de fournir une estimation qui sera plus ou moins précise en fonction du nombre de réalisations choisi, mais en aucun cas une valeur exacte. Dans ta copie, il ne faut pas que tu laisses penser au correcteur que Python te permet de trouver une valeur exacte. Utilise toujours des tournures de phrase adaptées : « on peut conjecturer que », « vraisemblablement »…
Ensuite, une erreur classique est d’oublier d’importer un ou plusieurs modules qui te seront essentiels pour calculer des probas, faire des manipulations sur les variables et les listes.
Enfin, dans ton code, il ne faut pas oublier de réaliser une moyenne par une technique ou une autre afin de ne pas renvoyer quelque chose d’incohérent, car multiplié par n. En clair, n’oublie pas à la dernière ligne d’utiliser np.mean ou de diviser par ton n (10000 dans mon exemple).
Bonus : un point de culture générale
Le nom de la méthode de Monte-Carlo provient du nombre important de casinos sur le rocher monégasque. Du fait de l’importance des jeux de hasard à Monaco et de l’intérêt d’estimer la probabilité de gain (ou de perte, selon le point de vue du joueur ou du casino), cette méthode a pris ce nom à la fin des années 1940, lorsque le physicien Nicholas Metropolis et le mathématicien Stanislaw Ulam écrivirent un article à ce sujet.
Conclusion
Finalement, l’intérêt de cette méthode est d’estimer rapidement avec un ordinateur quelque chose de très long à estimer soi-même. Pour ce faire, il faut que tu penses bien aux cinq lignes utiles à ton script : la définition de la fonction, la création de la liste, la définition du range, l’ajout d’éléments à la liste et le renvoi à l’utilisateur du résultat. Une fois que cela est fait, je ne te souhaite plus que de tomber sur une question de ce type aux concours pour rafler un maximum de points !