Chaînes de Markov
Cours complet · mathématiques appliquées (ECG 2e année), chapitre 10 · prépa ECG, 2e année
Travailler ce chapitre sur Adloun Exercices corrigés de ce chapitre
Un client d'un opérateur téléphonique reste chez lui ou part chez le concurrent ; une page web renvoie vers d'autres pages ; un assuré passe d'un bonus à un malus. Dans tous les cas, un système occupe l'un de plusieurs états et change d'état au fil du temps, avec des probabilités qui ne dépendent que de l'état présent — jamais du chemin parcouru pour y arriver.
C'est une chaîne de Markov. Ce chapitre montre que son évolution s'écrit comme un produit matriciel, et que son comportement à long terme se lit sur un vecteur propre — celui de la valeur propre . Tout le chapitre 3 y sert.
Le programme est explicite : « tous les résultats de cette section seront admis ». Ce chapitre est un chapitre de modélisation et de calcul, pas de démonstration.
10.1 Graphe probabiliste et matrice de transition
Un graphe probabiliste à états est un graphe orienté dont les sommets sont numérotés de à et dont chaque arête porte une probabilité, la somme des probabilités sortant de chaque sommet valant .
La matrice de transition est la matrice de où
Ses coefficients sont positifs et chaque ligne somme à .
va de vers : c'est la ligne qui décrit le départ. En conséquence, l'état de la chaîne se note en vecteur ligne et la récurrence s'écrit , avec la matrice à droite. C'est l'inverse de ce à quoi le chapitre 3 a habitué, et l'erreur la plus fréquente.
La chaîne de Markov associée est la suite de variables aléatoires à valeurs dans , où est l'état occupé à l'instant . Le -ième état de la chaîne est le vecteur ligne
Pour tout et tout ,
Par récurrence immédiate, .
Avec et — on part certainement de l'état :
Le premier calcul : . Les suivants se poursuivent de même, et les valeurs semblent converger.
10.2 État stable
Un vecteur ligne à coefficients positifs de somme est un état stable lorsque
équivaut à : la colonne est un vecteur propre de associé à la valeur propre .
- Écrire le système , c'est-à-dire .
- Le résoudre — il est toujours de rang au plus , puisque est valeur propre de : la somme des lignes de est nulle.
- Normaliser : imposer que la somme des coefficients vaille . C'est cette dernière équation qui rend la solution unique.
Cherchons avec pour . La première composante donne
(La seconde composante donne la même équation — c'est toujours le cas.) La normalisation donne , donc et .
Vérification : .
Prenons : on change d'état à chaque pas, de façon certaine. Partant de , on obtient , , … La suite ne converge pas. Pourtant est bien un état stable : il existe, mais n'attire pas.
Soit
Chaque ligne somme à . La résolution de avec normalisation donne
Et en itérant depuis , on obtient exactement ces valeurs au bout d'une vingtaine d'étapes.
Python : Itérer, et vérifier l'état stable
import numpy as np
M = np.array([[0.8, 0.2], [0.3, 0.7]])
V = np.array([1.0, 0.0])
for n in range(5):
print(n, V.round(6))
V = V @ M # ATTENTION : V a GAUCHE, M a DROITE
# 0 [1. 0.] 1 [0.8 0.2] 2 [0.7 0.3]
# 3 [0.65 0.35] 4 [0.625 0.375]
S = np.array([0.6, 0.4])
print(np.allclose(S @ M, S)) # True <- c'est bien l'etat stable
Écrire M @ V au lieu de V @ M donne un résultat qui a l'air plausible — un vecteur de bonne taille, à coefficients positifs — et qui est faux. C'est l'erreur à surveiller.