Pourquoi une cohorte dit plus qu'un taux de churn global
Quand un fondateur me montre son taux de churn mensuel, je pose presque toujours la même question : le churn de qui ? Un chiffre global mélange les clients arrivés il y a deux ans, fidèles par habitude, et ceux signés le mois dernier sur une promo. Si vous recrutez beaucoup, la masse des anciens peut masquer une vraie fuite chez les nouveaux. Et l'inverse existe aussi.
L'analyse de cohortes règle ça. On regroupe les clients par mois d'arrivée, puis on suit chaque groupe dans le temps. Vous voyez si les clients de mars restent mieux que ceux de janvier, si votre nouvel onboarding a changé quelque chose, à quel moment les gens décrochent. C'est le préalable à tout travail sérieux sur les leviers pour faire baisser le churn d'un SaaS : avant de corriger, il faut savoir où ça fuit.
Pas besoin d'outil payant ni de data analyst : un tableur suffit tant que votre volume reste raisonnable.
Étape 1 : récupérer les bonnes données (et décider ce que « actif » veut dire)
Tout part d'un export brut, une ligne par événement. Pour un abonnement, c'est l'historique des paiements sorti de votre outil de facturation. Pour un e-commerce, l'historique des commandes. Collez-le dans un onglet que j'appelle toujours « data », avec au minimum :
- Colonne A : l'identifiant client (email ou ID, peu importe, mais toujours le même pour une même personne) ;
- Colonne B : la date de l'événement (paiement, commande) ;
- Colonne C : le montant, facultatif mais utile pour la variante en chiffre d'affaires.
La vraie décision n'est pas technique. Qu'est-ce qui fait qu'un client compte comme « retenu » un mois donné ? En SaaS, c'est simple : il a payé ce mois-là. En e-commerce, on regarde s'il a racheté. Pour une app gratuite, ce serait une connexion ou une action clé. Choisissez une définition et tenez-vous-y, sinon vos tableaux ne se compareront pas d'un mois sur l'autre.
Petit ménage : retirez les remboursements et les commandes test, et uniformisez les emails. Une colonne avec =LOWER(TRIM(A2)) évite que « Julie@… » et « julie@… » deviennent deux clientes différentes.
Et si ce que vous voulez suivre, ce sont des visiteurs plutôt que des clients qui paient, GA4 propose une exploration de cohortes toute prête (voir mon tutoriel Google Analytics 4 pour débutants). Pour la rétention client, la source de vérité reste votre facturation.
Étape 2 : trois colonnes calculées
On ajoute trois colonnes à côté des données. Les formules utilisent le point-virgule, le séparateur de Google Sheets quand la feuille est réglée sur la France (Fichier > Paramètres) ; en paramètres américains, remplacez-le par une virgule.
- Colonne D, la date de première commande du client :
=MINIFS(B:B;A:A;A2) - Colonne E, la cohorte, c'est-à-dire le premier jour du mois de cette première commande :
=EOMONTH(D2;-1)+1. Passez la colonne au format date « mois année » pour qu'elle soit lisible. - Colonne F, l'âge de l'événement en mois depuis l'arrivée :
=(YEAR(B2)-YEAR(E2))*12+MONTH(B2)-MONTH(E2)
Étirez les trois formules jusqu'en bas (double-clic sur la petite poignée en bas à droite de la cellule). Exemple : une cliente arrivée le 12 mars qui recommande le 3 mai aura la cohorte « mars » et un âge de 2. Sa toute première commande, elle, a l'âge 0.
Étape 3 : le tableau croisé dynamique qui fait tout le travail
Sélectionnez les colonnes A à F de l'onglet data, puis Insertion > Tableau croisé dynamique, dans une nouvelle feuille. Dans l'éditeur :
- Lignes : la cohorte (colonne E) ;
- Colonnes : l'âge (colonne F) ;
- Valeurs : l'identifiant client (colonne A), récapitulé par COUNTUNIQUE. Surtout pas COUNTA, sinon un client qui commande deux fois dans le même mois compte double.
Vous obtenez un triangle. Chaque ligne est une cohorte, la colonne 0 donne sa taille de départ, les suivantes le nombre de clients encore actifs 1, 2, 3 mois plus tard. Les cohortes récentes ont moins de colonnes remplies, c'est normal. Si un réglage vous échappe, la page d'aide Google sur les tableaux croisés dynamiques détaille chaque option.

L'intérêt de passer par un tableau croisé plutôt que par des dizaines de COUNTIFS écrits à la main ? La mise à jour. Le mois suivant, vous collez les nouvelles lignes, étirez les formules, et tout se recalcule. À condition que la plage source couvre des colonnes entières (data!A:F), sinon les nouvelles lignes passent à la trappe.
Étape 4 : passer en pourcentages et ajouter de la couleur
Les valeurs brutes ne se comparent pas : une cohorte de 40 clients et une de 120, ce n'est pas le même match. À droite du tableau croisé, recréez la même grille en divisant chaque cellule par la colonne 0 de sa ligne. Si la taille de la première cohorte est en B3, tapez dans la première case de la nouvelle grille =IF(B3="";"";B3/$B3), formatez en pourcentage, puis étirez vers la droite et vers le bas. Le dollar bloque la colonne B : chaque ligne se divise par sa propre taille de départ. Laissez de côté la ligne « Total » que Sheets ajoute en bas.
Ensuite, Format > Mise en forme conditionnelle > Échelle de couleurs sur la grille en pourcentages. Les zones qui pâlissent trop vite sautent aux yeux.
Une variante que j'ajoute souvent : un second tableau croisé avec SUM sur la colonne montant au lieu de COUNTUNIQUE. Vous suivez alors le chiffre d'affaires de chaque cohorte, ce qui révèle les montées en gamme. Une cohorte peut perdre des clients et garder son chiffre d'affaires, et ça change complètement la lecture.
Comment lire votre tableau sans vous raconter d'histoires
Trois lectures, dans cet ordre.
En ligne d'abord : vous suivez la vie d'une cohorte. La chute entre le mois 0 et le mois 1 est presque toujours la plus forte, ce n'est pas un drame. Ce qui compte, c'est la suite. Une rétention qui se stabilise, même basse, vaut mieux qu'une rétention haute qui continue de glisser chaque mois.
En colonne ensuite : vous comparez les cohortes au même âge. Le mois 3 des clients de septembre est-il meilleur que celui des clients de juin ? Si oui, quelque chose a fonctionné entre les deux (offre, onboarding, ciblage). C'est la lecture qui juge vos décisions.
En diagonale enfin. Une diagonale correspond au même mois calendaire pour toutes les cohortes. Si elle pâlit partout d'un coup, ce n'est pas un problème de cohorte, c'est un événement : hausse de prix, bug, saisonnalité.
Méfiez-vous des petites cohortes. Avec une vingtaine de clients, un seul départ fait bouger le pourcentage de cinq points. Tant que vos volumes sont faibles, regroupez par trimestre. Et quand vous aurez une durée de vie client crédible, branchez-la dans le calcul de ce qu'est le ratio LTV/CAC et ce qu'il dit de votre rentabilité.
Les erreurs que je croise le plus souvent
- Garder le mois en cours. Il est incomplet, sa colonne aura l'air catastrophique. Arrêtez l'export au dernier mois clos.
- Compter les essais gratuits comme des clients. Ils gonflent la colonne 0 et écrasent la rétention. Si la conversion des essais vous intéresse, faites une analyse à part.
- Changer la définition d'« actif » en cours de route, ce qui rend les anciennes cohortes incomparables aux nouvelles.
Une fois en place, ce tableau devient l'onglet que j'ouvre en premier chaque début de mois avec mes clients. Quelques minutes de mise à jour, et on sait si ce qu'on a lancé le trimestre précédent a servi à quelque chose.



