Accueil / Factory / Algos ML / Modèle de Cox — factory / algos ML / analyse de survie

MODÈLE DE COX.

Un modèle qui explique le temps avant un événement : départ d'un client, panne, résiliation. Il tient compte des clients encore présents, dont on ne connaît pas encore la date de départ. Chaque variable reçoit un hazard ratio, qui dit par combien elle multiplie le risque de partir à tout moment.

SurvieChurnCensureModèle interprétableNiveau : avancé

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceSolide référence de survie, battue sur les effets complexes
InterprétabilitéHazard ratios lisibles, comme des odds ratios
VitesseQuelques secondes sur des centaines de milliers de lignes
Facilité de réglagePeu de réglages, une hypothèse clé à vérifier
Tolérance aux données brutesManquants à traiter, sensible aux effets qui varient dans le temps
EN 30 SECONDES

Un compte à rebours propre à chaque client, qui tourne plus ou moins vite. Le modèle ne décrit pas le compte à rebours de base : il mesure seulement ce qui l'accélère ou le ralentit.

1. On déclare durée et événement

Pour chaque client : depuis combien de mois il est là, et s'il est parti. Un client encore présent est « censuré » : on sait seulement qu'il a tenu au moins jusqu'ici.

2. On compare ceux qui partent aux présents

À chaque départ, le modèle compare le client parti à tous ceux encore présents à cette ancienneté. Les variables qui distinguent les partants reçoivent un poids.

3. On lit des risques relatifs

Le risque de base, qui varie avec le temps, n'est pas modélisé. Chaque variable le multiplie par un facteur constant : le hazard ratio.

LE CAS MÉTIER

churn · télécom / assurance / SaaS
EN ENTRÉE

Une ancienneté et un statut

Pour chaque client : ancienneté en mois, départ ou non, appels au support, incidents récents, montant mensuel, type de contrat. Les clients toujours là ne sont pas écartés : ils comptent jusqu'à leur ancienneté actuelle.

EN SORTIE

Ce qui accélère le départ

Sur le jeu d'exemple, chaque appel au support multiplie le risque de départ par 1,3, chaque incident par 1,26. Un contrat mensuel le multiplie par 1,7 par rapport à un contrat annuel, un contrat deux ans le divise par près de 2.

CE QU'ON MESURE

Concordance et hypothèse vérifiée

L'indice de concordance mesure si les clients partis plus tôt avaient bien un risque plus élevé : 0,5 correspond au hasard, 1 à la perfection. On vérifie aussi que chaque effet reste stable dans le temps (test des résidus de Schoenfeld).

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Question de durée : quand un client part, quand une machine tombe en panne, quand un prêt est remboursé
  • Nombreux individus encore actifs, qu'on ne veut pas écarter
  • Besoin de hazard ratios lisibles et reconnus, en santé, assurance ou banque
  • Comparer l'effet de plusieurs facteurs sur la vitesse de départ

NON

  • Effet qui change avec le temps, comme un contrat qui protège puis ne protège plus : variables dépendantes du temps ou stratification
  • Seule question : quelle part reste après n mois, sans facteurs : Kaplan-Meier suffit
  • Horizon fixe et tous les individus suivis jusqu'au bout : une régression logistique à 12 mois est plus simple
  • Recherche de la précision maximale : forêts aléatoires de survie ou boosting de survie
LES 4 CHOIX QUI COMPTENT

Noms donnés pour R (survival) et Python (lifelines).

Surv(durée, événement) / duration_col, event_col

La définition de la durée et de l'événement fait tout le modèle. Un client parti vaut 1, un client présent vaut 0 et sa durée est son ancienneté actuelle.

cox.zph / check_assumptions

Le test des risques proportionnels. Une p-value faible sur une variable signale un effet qui varie dans le temps : on stratifie sur cette variable (strata) ou on la fait dépendre du temps.

ties / gestion des ex aequo

Avec une durée en mois, beaucoup de clients partent au même moment. La méthode d'Efron, par défaut en R comme dans lifelines, les gère correctement.

penalizer (Python)

lifelines peut pénaliser les coefficients, comme Ridge ou Lasso. Utile avec beaucoup de variables ; à laisser à 0 pour retrouver les résultats de R.

LE CODE MINIMAL

jeu d'exemple : clients_churn.csv ↓
# Moteurs du départ client : modèle de Cox en R
library(survival)

clients <- read.csv("clients_churn.csv")
clients$contrat <- factor(clients$contrat)   # référence : annuel

# Durée = ancienneté en mois, événement = départ (churn = 1), sinon client toujours là
modele <- coxph(Surv(anciennete, churn) ~ appels_support + incidents_3m + montant + contrat,
                data = clients)

# Hazard ratios et intervalles à 95 % : effet multiplicatif sur le risque instantané de départ
print(round(summary(modele)$conf.int[, c("exp(coef)", "lower .95", "upper .95")], 3))
cat("Indice de concordance :", round(summary(modele)$concordance[1], 3), "\n")

# Hypothèse des risques proportionnels : une p-value faible signale un effet qui varie dans le temps
print(cox.zph(modele))

# Part de clients encore là à 12 et 24 mois, pour deux profils
profils <- data.frame(appels_support = c(0, 4), incidents_3m = c(0, 2), montant = 45,
                      contrat = factor(c("deux_ans", "mensuel"), levels = levels(clients$contrat)))
print(summary(survfit(modele, newdata = profils), times = c(12, 24)))

QUESTIONS FRÉQUENTES

Comment interpréter un hazard ratio ?

Un hazard ratio de 1,3 pour les appels au support signifie qu'à tout moment, chaque appel supplémentaire multiplie par 1,3 le risque instantané de départ, les autres variables étant égales. Au-dessus de 1, le départ est accéléré ; en dessous, il est retardé.

Qu'est-ce que la censure en analyse de survie ?

Un individu est censuré quand l'événement ne s'est pas encore produit à la fin de l'observation : un client toujours abonné, une machine qui fonctionne encore. On sait seulement que sa durée dépasse la durée observée. Les modèles de survie utilisent cette information au lieu d'écarter ces individus.

Qu'est-ce que l'hypothèse des risques proportionnels ?

Le modèle de Cox suppose que chaque variable multiplie le risque par un facteur constant dans le temps. Si un contrat deux ans protège fortement la première année puis plus du tout, l'hypothèse est violée. On le teste avec les résidus de Schoenfeld (cox.zph en R).

LES ALGOS VOISINS

à comparer avant de choisir
la courbe de base

Kaplan-Meier

Décrit la part de clients restants au fil du temps, sans variable explicative. À tracer avant le Cox.

Voir la fiche →
à horizon fixe

Régression logistique

Prévoit un départ oui / non à une date donnée. Plus simple, mais perd l'information sur les clients récents.

Voir la fiche →
en version survie

Random Forest

Les forêts aléatoires de survie captent les effets non linéaires, au prix de la lisibilité.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →