1. Livres & vidéos
  2. Python pour l’analyse de données et les statistiques
  3. Monte Carlo
Extrait - Python pour l’analyse de données et les statistiques Fondamentaux, régression linéaire et simulations
Extraits du livre
Python pour l’analyse de données et les statistiques Fondamentaux, régression linéaire et simulations Revenir à la page d'achat du livre

Monte Carlo

Introduction à la méthode de Monte Carlo

1. Principe général

Les méthodes de Monte Carlo utilisent le hasard pour résoudre des problèmes numériques.

Le principe est simple : au lieu d’un calcul exact, on répète une expérience aléatoire un très grand nombre de fois. La moyenne des résultats de toutes ces expériences converge vers la solution recherchée. Il devient ainsi possible d’obtenir non pas la réponse exacte, mais une estimation dont la précision reste contrôlable.

Utiliser cette approche est pertinent quand un calcul direct est trop complexe, voire impossible. La complexité peut venir d’un trop grand nombre de variables ou de règles de systèmes complexes.

Au lieu de tenter de résoudre une équation mathématique exacte, le processus statistique qui génère le résultat est entièrement modélisé.

Prenons l’exemple d’une intégrale complexe. Un calcul analytique (la « formule exacte ») peut être impossible. Avec Monte Carlo, des milliers de points sont tirés au hasard dans le domaine d’intégration. La proportion de points qui tombent sous la courbe est ensuite calculée. Cette proportion, multipliée par l’aire du domaine, donne une estimation de l’intégrale.

Ces méthodes se retrouvent dans différents domaines. En finance, pour évaluer un risque, des milliers de scénarios de marché (krach, hausse subite, stagnation) sont reproduits afin d’observer la distribution des pertes ou gains potentiels. En logistique, pour optimiser une chaîne d’approvisionnement, la simulation des pannes de camions, des retards de fournisseurs ou des pics de demande permet de détecter les points faibles. Dans les jeux, pour définir une stratégie au poker, des millions de donnes aléatoires sont générées pour identifier les choix qui mènent le plus souvent à la victoire. L’hypothèse fondamentale est que si le modèle de simulation est correct, le comportement moyen des simulations reflétera le comportement réel du système.

Pour illustrer ce concept de « processus »...

Amélioration de la qualité de la simulation

La convergence lente en images/7eq_193.png impose de chercher des solutions pour réduire l’écart-type (images/7eq_192.png) de l’estimation sans augmenter le nombre de simulations images/7eq_191.png. Ces techniques sont regroupées sous le terme de méthodes de réduction de la variance.

1. Variables antithétiques

Cette technique cherche à introduire une corrélation négative entre deux simulations afin que l’erreur de l’une compense mécaniquement l’erreur de l’autre.

Pour chaque tirage aléatoire images/7eq_190.png suivant une loi uniforme sur [0; 1], son complémentaire images/7eq_188.png est utilisé simultanément. Si images/7eq_187.png est proche de 1), images/7eq_186.png sera proche de 0 , et vice-versa. L’estimation finale est calculée sur la moyenne de l’ensemble de ces paires.
Dans le cas de l’estimation de images/7eq_185.png, l’expérience repose sur le tirage de deux coordonnées images/7eq_184.png. La méthode de la variable antithétique peut s’appliquer uniquement sur la coordonnée images/7eq_183.png. Pour cela, une première série de images/7eq_182.png points images/7eq_181.png est générée. Ensuite, images/7eq_180.png points miroirs sont créés sous la forme images/7eq_179.png. Enfin, l’estimation est réalisée sur les images/7eq_178.png points combinés. La présence d’un point proche de la borne supérieure 1 se trouve compensée par son symétrique ce qui stabilise le taux de succès images/7eq_177.png, où images/7eq_176.png est le nombre total de succès obtenus.
En Python, la mise en place d’un tel processus s’effectue manuellement. La première étape consiste à générer la première série de couples images/7eq_175.png :
np.random.seed(42) 
N = 10000 
x1 = np.random.rand(N//2) 
y1 = np.random.rand(N//2)  
Une deuxième série de couples est ensuite construite par symétrie à partir de la première images/7eq_174.png :
x2 = x1 
y2 = 1 - y1 
K1 = np.sum(x1**2 + y1**2 <= 1) 
K2 = np.sum(x2**2 + y2**2 <= 1)  
Enfin, la formule standard est appliquée sur l’ensemble des points pour obtenir l’estimation de images/7eq_173.png:
K=K1 + K2 
estimated_pi=4 * K / N  

L’analyse de la convergence met en évidence l’apport de cette méthodologie :

images/07RI12.png
Ce graphique se compose de deux visualisations qui démontrent l’efficacité...

Variables aléatoires dépendantes

Jusqu’à présent, les développements se sont placés dans un cadre idéal et simplifié : celui de l’indépendance statistique. Dans les exemples précédents, le résultat d’un lancer de dé n’influençait pas le suivant, et la coordonnée images/7eq_33.png pour le calcul de images/7eq_32.png n’avait aucun lien avec la coordonnée images/7eq_31.png. Cependant, dans la majorité des problèmes réels, les variables interagissent.

1. Importance et enjeux de la dépendance

Ignorer les relations entre les variables peut rendre une simulation totalement inopérante, voire dangereuse dans un contexte de prise de décision.

Prenons un exemple concret en gestion de projet. Lors de la modélisation de la durée d’un chantier, le retard du peintre ne peut pas être considéré comme indépendant du retard du plâtrier. Si le plâtrier est en retard, le peintre le sera forcément. Si ces deux évènements sont modélisés comme indépendants, la simulation sous-estimera systématiquement la durée totale et le risque de retard final.

En finance, c’est encore plus critique. Lors de la simulation d’un portefeuille d’actions, supposer que les entreprises évoluent de manière totalement décorrélée conduit à sous-estimer le risque de krach. En réalité, lors d’une crise, toutes les actions ont tendance à chuter simultanément.

Pour que les simulations de Monte Carlo soient fidèles à la réalité, il est indispensable de pouvoir générer des variables capables d’évoluer conjointement.

L’outil mathématique standard pour définir ces relations est la matrice de covariance (ou sa version normalisée, la matrice de corrélation).

Si l’on a un vecteur de images/7eq_30.png variables aléatoires images/7eq_29.png la structure de dépendance est résumée par une matrice carrée images/7eq_28.png de taille images/7eq_27.png. Chaque élément images/7eq_26.png représente la covariance entre la variable images/7eq_25.png et la variable images/7eq_24.png. Dans le cas d’une matrice de corrélation, les valeurs sont normalisées entre -1 et 1. Une valeur de +1 indique une corrélation...