Un modèle de séquences où la probabilité de l'étape suivante ne dépend que de l'étape présente. Il suffit d'une matrice de transitions, estimée en comptant les passages d'un état à l'autre. En quelques lignes, on obtient le taux de conversion d'un parcours et l'effet d'une amélioration à chaque étape.
Au jeu de l'oie, le pion avance selon la case où il se trouve, sans mémoire des cases précédentes. Connaître les probabilités de passage suffit pour savoir combien de joueurs atteindront l'arrivée.
Ici, les pages du site : accueil, catégorie, produit, panier, paiement, plus deux fins possibles, la confirmation d'achat et la sortie.
Pour chaque page, on compte vers quelle page vont les visiteurs, puis on divise par le total. Chaque ligne de la matrice de transitions somme à 100 %.
La confirmation et la sortie sont des états absorbants : on n'en repart pas. Une inversion de matrice donne la probabilité de finir par un achat à partir de chaque page.
Chaque ligne donne la session, le numéro d'étape et la page vue. On en déduit, pour chaque page, la page suivante.
La matrice montre que 56 % des paniers passent au paiement et 25 % quittent le site. Le modèle prévoit 8,4 % de conversion depuis l'accueil, le taux observé dans les données.
Si 10 % des visiteurs du panier passent en plus au paiement au lieu de partir, la conversion monte de 8,4 % à 10,1 %. On peut ainsi comparer les chantiers : panier, fiche produit, paiement.
Pas d'hyperparamètre : la qualité dépend de la façon de découper les parcours.
Trop détaillés (une page par produit), les transitions sont estimées sur trop peu de passages ; trop grossiers, on perd l'information utile. On regroupe par type de page.
Une chaîne d'ordre 1 ne regarde que la page actuelle. Une chaîne d'ordre 2 regarde les deux dernières, au prix d'un nombre d'états qui explose. On vérifie d'abord si l'ordre 1 reproduit les taux observés.
Confirmation et sortie terminent la visite. Les déclarer comme tels permet de calculer le taux de conversion par la matrice fondamentale.
# Parcours web : chaîne de Markov en R
parcours <- read.csv("parcours_web.csv")
parcours <- parcours[order(parcours$id_session, parcours$etape), ]
pages <- c("accueil", "categorie", "produit", "panier", "paiement", "confirmation", "sortie")
# Page suivante dans la même session (NA en fin de session)
meme_session <- c(parcours$id_session[-1] == parcours$id_session[-nrow(parcours)], FALSE)
suivante <- ifelse(meme_session, c(parcours$page[-1], NA), NA)
# Matrice de transition : probabilité de passer de chaque page (ligne) à la suivante (colonne)
comptes <- table(factor(parcours$page, levels = pages), factor(suivante, levels = pages))
P <- unclass(prop.table(comptes, 1))
P[is.nan(P)] <- 0 # la sortie n'a pas de page suivante
print(round(P, 2))
taux_conversion <- function(P) {
transit <- pages[1:5] # confirmation et sortie terminent la visite (états absorbants)
B <- solve(diag(5) - P[transit, transit], P[transit, c("confirmation", "sortie")])
B[1, 1] # partir de l'accueil et finir en confirmation
}
cat("Conversion prévue depuis l'accueil :", round(taux_conversion(P), 3), "\n")
cat("Conversion observée :", round(mean(tapply(parcours$page == "confirmation", parcours$id_session, any)), 3), "\n")
# Scénario : +10 points de passage panier -> paiement, pris sur les sorties
P2 <- P
P2["panier", "paiement"] <- P2["panier", "paiement"] + 0.10
P2["panier", "sortie"] <- P2["panier", "sortie"] - 0.10
cat("Conversion avec le panier amélioré :", round(taux_conversion(P2), 3), "\n")
# Parcours web : chaîne de Markov en Python
import numpy as np
import pandas as pd
parcours = pd.read_csv("parcours_web.csv").sort_values(["id_session", "etape"])
parcours["page_suivante"] = parcours.groupby("id_session").page.shift(-1)
pages = ["accueil", "categorie", "produit", "panier", "paiement", "confirmation", "sortie"]
# Matrice de transition : probabilité de passer de chaque page (ligne) à la suivante (colonne)
P = pd.crosstab(parcours.page, parcours.page_suivante, normalize="index").reindex(index=pages, columns=pages, fill_value=0)
print(P.round(2).to_string())
def taux_conversion(P):
# Chaîne absorbante : confirmation et sortie terminent la visite
transit = pages[:5]
Q = P.loc[transit, transit].values
R = P.loc[transit, ["confirmation", "sortie"]].values
B = np.linalg.solve(np.eye(5) - Q, R) # probabilités d'absorption (matrice fondamentale)
return B[0, 0] # partir de l'accueil et finir en confirmation
print("Conversion prévue depuis l'accueil :", round(taux_conversion(P), 3))
print("Conversion observée :", round(parcours.groupby("id_session").page.apply(lambda p: "confirmation" in set(p)).mean(), 3))
# Scénario : +10 points de passage panier -> paiement, pris sur les sorties
P2 = P.copy()
P2.loc["panier", "paiement"] += 0.10
P2.loc["panier", "sortie"] -= 0.10
print("Conversion avec le panier amélioré :", round(taux_conversion(P2), 3))
La probabilité de l'état suivant ne dépend que de l'état présent, pas du chemin suivi pour y arriver. C'est une simplification : elle rend le modèle facile à estimer et à calculer, et elle suffit souvent pour des parcours web.
On modélise les parcours comme une chaîne entre canaux (email, recherche, réseaux sociaux) jusqu'à la conversion. L'effet de retrait (removal effect) mesure la baisse de conversion quand on supprime un canal : c'est sa contribution.
Un tableau où la case (i, j) donne la probabilité de passer de l'état i à l'état j en une étape. Chaque ligne somme à 1. En multipliant la matrice par elle-même, on obtient les probabilités à deux étapes, trois étapes ou plus.
Même mécanique, mais l'état n'est pas observé : on le devine à partir de signaux.
Voir la fiche → les enchaînements fréquentsCherche les suites d'étapes qui reviennent souvent, sans modèle de probabilité.
Voir la fiche → Markov avec décisionsAjoute des actions et des gains à la chaîne : on apprend quoi faire dans chaque état.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus