ANALYSE DU CHURNMÉTRIQUES DE CHURN

Analyse de la rétention par cohorte pour les abonnements, étape par étape

Un tableau de rétention par cohorte tiré de la facturation : cohortes, définition d’« actif », SQL, lecture de la courbe et pièges des petites cohortes.

Publié le 7 min de lecture

Un taux de churn mensuel mélange des clients arrivés la semaine dernière et des clients présents depuis trois ans. Quand il bouge, impossible de savoir si c’est le produit qui a changé ou la composition de la clientèle. Un tableau de cohortes règle ce problème : il regroupe les clients selon leur date de départ et suit chaque groupe dans le temps.

Ce guide en construit un de zéro, des définitions au SQL jusqu’à la lecture du résultat. Tous les chiffres sont hypothétiques.

Étape 1 : définir la cohorte

Une cohorte est un groupe de clients qui partagent une date de départ. Pour les abonnements, utilisez la première période payée, pas la date d’inscription :

  • Les essais gratuits et les offres gratuites ne sont pas du revenu. Si vous lancez le chronomètre à l’inscription, les abandons d’essai se mélangent à la rétention payante.
  • Suivez la conversion de l’essai au payant à part (comment la mesurer).

Regroupez par mois calendaire dans la plupart des cas. Les cohortes hebdomadaires aident si vous avez des centaines de nouveaux clients par semaine et voulez voir vite l’effet d’un changement ; les cohortes trimestrielles aident si vous en avez peu.

Les clients qui partent et reviennent

Décidez si un client qui revient rejoint une nouvelle cohorte ou reste dans la sienne. Les analytics de Stripe Billing le gardent dans sa cohorte d’origine (documentation analytics de Stripe, consultée en novembre 2026). C’est un choix par défaut raisonnable : il montre honnêtement le revenu de la cohorte dans le temps. Dans tous les cas, notez votre choix.

Étape 2 : définir « actif »

Pour chaque cohorte et chaque mois après le départ, il vous faut un oui ou un non par client. Règle courante : le client est actif au mois N s’il a un abonnement payé (ou dans un statut payé) à la fin de ce mois.

Cas limites à trancher avant d’écrire la moindre requête :

Cas Choix courant
En retard de paiement, relances en cours Actif jusqu’à la fin de l’abonnement, ou jusqu’à un nombre fixe de jours après la dernière relance
En pause Non actif, mais signalé à part pour voir les retours de pause
Résilié, encore dans la période payée Actif jusqu’à la fin de la période
Passé à une offre gratuite Non actif pour la rétention payante
Offre annuelle, en cours de période Actif ; un client annuel ne peut vraiment churner qu’au renouvellement

La dernière ligne compte : mélanger offres mensuelles et annuelles dans un même tableau rend les mois 1 à 11 artificiellement plats. Construisez un tableau par intervalle de facturation.

Étape 3 : construire le tableau

Supposons une table subscription_months avec une ligne par client et par mois où il était actif (customer_id, month). Vous pouvez la dériver de vos données de facturation ou des événements webhook.

with first_paid as (
  select customer_id, min(month) as cohort_month
  from subscription_months
  group by customer_id
),
activity as (
  select
    f.cohort_month,
    (extract(year from age(s.month, f.cohort_month)) * 12
      + extract(month from age(s.month, f.cohort_month)))::int as month_number,
    s.customer_id
  from subscription_months s
  join first_paid f using (customer_id)
)
select
  cohort_month,
  month_number,
  count(distinct customer_id) as active_customers
from activity
group by cohort_month, month_number
order by cohort_month, month_number;

Divisez chaque ligne par la taille de la cohorte au mois 0 pour obtenir le pourcentage de rétention. Pivotez month_number en colonnes pour obtenir le triangle habituel.

Exemple (chiffres hypothétiques)

Cohorte Taille M1 M2 M3 M4 M5
Janvier 120 86 % 79 % 75 % 73 % 72 %
Février 140 84 % 77 % 74 % 72 %
Mars 110 88 % 82 % 79 %
Avril 150 91 % 85 %
Mai 130 90 %

Les cellules vides ne valent pas zéro. Ce sont des mois qui ne sont pas encore passés. On parle de censure à droite, et faire la moyenne d’une colonne en comptant les cellules vides comme des zéros est une erreur classique.

Étape 4 : lire le tableau

Lire une ligne

Une ligne, c’est la vie d’une cohorte. Cherchez où la courbe s’aplatit. Dans l’exemple, janvier perd 14 points au mois 1, puis 7, 4, 2 et 1. L’essentiel de la perte arrive tôt, puis la courbe se stabilise. Une courbe qui continue de baisser au même rythme mois après mois signifie que le produit n’a pas de noyau stable d’utilisateurs à ce prix.

Lire une colonne

Une colonne compare des cohortes au même âge. Dans l’exemple, la rétention au mois 1 passe de 84 à 91 % entre février et avril. Si vous avez changé l’onboarding en mars, c’est là que vous le verriez. Vérifiez que le changement tient dans les colonnes suivantes avant de vous réjouir ; parfois, une meilleure rétention précoce ne fait que retarder le churn.

Lire la diagonale

Une diagonale, c’est un mois calendaire sur toutes les cohortes. Si toutes les cohortes chutent le même mois calendaire, cherchez une cause externe : un changement de prix, une panne, un problème chez le processeur de paiement, un effet saisonnier.

Étape 5 : ajouter la rétention du revenu

La rétention des logos compte les clients. La rétention du revenu suit le MRR de la cohorte, qui peut dépasser 100 % quand les clients montent en gamme.

revenue retention (cohort, month N) =
  MRR in month N from customers in the cohort
  ÷ MRR in month 0 from the cohort

Montrez les deux. Une cohorte avec 70 % de rétention des logos et 105 % de rétention du revenu a perdu beaucoup de petits clients et fait grandir les autres. C’est une autre entreprise qu’une cohorte où les deux chiffres sont à 85 %. Voir NRR et GRR pour les définitions côté revenu.

Étape 6 : résumer sur l’ensemble des cohortes

Pour un chiffre unique de « rétention au mois N », pondérez par la taille des cohortes et n’incluez que les cohortes qui ont atteint le mois N :

weighted month-3 retention =
  sum of active customers at M3 across cohorts that reached M3
  ÷ sum of their starting sizes

Dans l’exemple, les cohortes de janvier à mars ont atteint le mois 3 :

active at M3: 120 × 0.75 + 140 × 0.74 + 110 × 0.79 = 90 + 103.6 + 86.9 ≈ 280.5
starting size: 120 + 140 + 110 = 370
weighted month-3 retention ≈ 280.5 ÷ 370 ≈ 75.8%

En pratique, utilisez les effectifs réels plutôt que des pourcentages arrondis ; les décimales ici viennent de l’arrondi.

Étape 7 : découper par segment

Les tableaux de cohortes les plus utiles découpent selon quelque chose sur quoi vous pouvez agir :

  • Intervalle de facturation (mensuel ou annuel)
  • Offre ou niveau de prix
  • Canal d’acquisition ou source d’inscription
  • Type de moyen de paiement
  • Si le client a atteint une étape d’activation (voir activation et churn précoce)

Chaque découpage réduit la taille des cohortes. Gardez en tête la règle suivante.

Pièges

  1. Les petites cohortes. Avec 20 clients, une seule résiliation fait bouger la rétention de 5 points. Affichez la taille de la cohorte à côté de chaque ligne, ou regroupez par trimestre.
  2. Les cohortes récentes paraissent meilleures. Les chiffres du mois 1 de la cohorte du mois dernier peuvent ne pas inclure des paiements échoués encore en relance. Attendez que la fenêtre de relance soit close avant de lire la dernière colonne.
  3. Les intervalles mélangés. Les offres annuelles rendent les cohortes mensuelles plates. Séparez-les.
  4. Le biais du survivant dans les segments. Si vous segmentez par un comportement qui prend du temps (par exemple « a utilisé la fonctionnalité X »), les clients partis tôt n’ont jamais eu l’occasion de le faire. Mesurez le comportement dans une fenêtre précoce fixe, comme les 14 premiers jours, pour tout le monde.
  5. Corrélation n’est pas causalité. Un segment qui retient mieux peut différer de bien des façons à la fois. Testez vos changements avec un groupe témoin quand c’est possible.

Le faire avec NoChurn

NoChurn lit les événements d’abonnement de votre outil de facturation (Stripe en un clic, beaucoup d’autres par connecteur ou API REST) et vous permet d’envoyer vos propres attributs clients par API, comme la source d’inscription, l’offre ou l’activation, pour voir lesquels vont avec le churn (corrélation, pas causalité). Chaque client reçoit un score de churn de 0 à 100 à l’inscription et à chaque changement. Pour agir sur ce que montre un tableau de cohortes, NoChurn gère la récupération des paiements échoués, des parcours d’annulation avec une offre par raison et une résiliation en un clic toujours visible, et des emails de reconquête à J30, J60 et J90. Toutes les fonctionnalités sont dans toutes les offres (votre propre domaine d’email dès 9 $), avec un prix qui ne dépend que du MRR (tarifs).

PROMPT

Read https://www.nochurn.sh/llms.txt,
then follow https://www.nochurn.sh/docs/quickstart/
to add NoChurn to this app. Use a test key
(nc_test_…) until I say we go live.

Arrêtez de perdre du revenu.

  • Gratuit jusqu’à $300 de MRR
  • Sans carte bancaire
  • Prêt en 10 minutes
  • Jamais une commission sur ce que nous récupérons