ANALISI DEL CHURNMETRICHE DI CHURN

Analisi della retention per coorte negli abbonamenti, passo dopo passo

Costruisci una tabella di retention per coorte dai dati di fatturazione: coorti e clienti attivi, SQL, lettura della curva e trappole delle coorti piccole.

Pubblicato il 6 min di lettura

Un tasso di churn mensile mescola clienti arrivati la settimana scorsa con clienti presenti da tre anni. Quando si muove, non puoi capire se è cambiato il prodotto o il mix di clienti. Una tabella per coorte risolve il problema: raggruppa i clienti in base a quando hanno iniziato e segue ogni gruppo nel tempo.

Questa guida ne costruisce una da zero, dalle definizioni all’SQL alla lettura del risultato. Tutti i numeri sono ipotetici.

Passo 1: definire la coorte

Una coorte è un gruppo di clienti che condividono una data di inizio. Per gli abbonamenti, usa il primo periodo pagato, non la data di iscrizione:

  • Le prove gratuite e i piani gratuiti non sono ricavi. Se fai partire il conteggio all’iscrizione, gli abbandoni durante la prova si mescolano alla retention pagata.
  • Monitora a parte la conversione da prova a pagamento (come misurarla).

Per la maggior parte delle aziende raggruppa per mese di calendario. Le coorti settimanali aiutano se hai centinaia di nuovi clienti a settimana e vuoi vedere in fretta l’effetto di un cambiamento; quelle trimestrali aiutano se ne hai pochi.

Clienti che se ne vanno e tornano

Decidi se un cliente che ritorna entra in una nuova coorte o resta in quella originale. Le Billing analytics di Stripe lo tengono nella coorte originale (documentazione analytics di Stripe, consultata a novembre 2026). È un default ragionevole: mostra onestamente i ricavi della coorte nel tempo. In ogni caso, metti per iscritto la scelta.

Passo 2: definire “attivo”

Per ogni coorte e ogni mese dopo l’inizio, ti serve un sì o un no per ciascun cliente. Regola tipica: il cliente è attivo nel mese N se alla fine di quel mese ha un abbonamento pagato (o in uno stato pagato).

Casi limite da chiarire prima di scrivere qualsiasi query:

Caso Scelta comune
Scaduto, ancora in fase di nuovi tentativi Attivo finché l’abbonamento non termina, o fino a un numero fisso di giorni dopo l’ultimo tentativo
In pausa Non attivo, ma segnalato a parte per vedere i rientri dalla pausa
Disdetto, ancora nel periodo pagato Attivo fino alla fine del periodo
Downgrade a un piano gratuito Non attivo per la retention pagata
Piano annuale, a metà periodo Attivo; i clienti annuali possono davvero fare churn solo al rinnovo

L’ultima riga conta: mescolare piani mensili e annuali in un’unica tabella rende i mesi da 1 a 11 artificialmente piatti. Costruisci tabelle separate per ogni intervallo di fatturazione.

Passo 3: costruire la tabella

Supponi una tabella subscription_months con una riga per cliente per ogni mese in cui è stato attivo (customer_id, month). Puoi ricavarla dai tuoi dati di fatturazione o dagli eventi 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;

Dividi ogni riga per la dimensione della coorte al mese 0 per ottenere la percentuale di retention. Trasforma month_number in colonne per ottenere il classico triangolo.

Esempio (numeri ipotetici)

Coorte Dimensione M1 M2 M3 M4 M5
Gennaio 120 86% 79% 75% 73% 72%
Febbraio 140 84% 77% 74% 72%
Marzo 110 88% 82% 79%
Aprile 150 91% 85%
Maggio 130 90%

Le celle vuote non sono zero. Sono mesi che non sono ancora arrivati. Si chiama censura a destra, e fare la media di una colonna contando le celle vuote come zeri è un errore classico.

Passo 4: leggere la tabella

Leggere una riga

Una riga è la vita di una coorte. Cerca il punto in cui la curva si appiattisce. Nell’esempio, gennaio perde 14 punti nel mese 1, poi 7, 4, 2 e 1. La maggior parte della perdita è all’inizio, poi la curva si stabilizza. Una curva che continua a scendere allo stesso ritmo mese dopo mese significa che il prodotto non ha un nucleo stabile di utenti a quel prezzo.

Leggere una colonna

Una colonna confronta coorti alla stessa età. Nell’esempio, la retention al mese 1 sale dall’84 al 91% tra febbraio e aprile. Se hai cambiato l’onboarding a marzo, è qui che lo vedresti. Prima di festeggiare, verifica che il miglioramento regga nelle colonne successive; a volte una retention iniziale migliore ritarda soltanto il churn.

Leggere la diagonale

Una diagonale è un mese di calendario attraverso tutte le coorti. Se ogni coorte cala nello stesso mese di calendario, cerca una causa esterna: un cambio di prezzo, un’interruzione del servizio, un problema del processore di pagamento, un effetto stagionale.

Passo 5: aggiungere la retention dei ricavi

La retention dei clienti conta i clienti. La retention dei ricavi segue l’MRR della coorte, che può superare il 100% quando i clienti espandono.

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

Mostrale entrambe. Una coorte con il 70% di retention dei clienti e il 105% di retention dei ricavi ha perso molti clienti piccoli e ha fatto crescere gli altri. È un business diverso da uno in cui entrambi i numeri sono all’85%. Vedi NRR e GRR per le definizioni lato ricavi.

Passo 6: riassumere tra le coorti

Per un unico dato di “retention al mese N”, pondera per dimensione della coorte e includi solo le coorti che hanno raggiunto il mese N:

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

Nell’esempio, le coorti da gennaio a marzo hanno raggiunto il mese 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%

Nella pratica usa i conteggi reali invece delle percentuali arrotondate; i decimali qui derivano dall’arrotondamento.

Passo 7: dividere per segmento

Le tabelle per coorte più utili sono divise per qualcosa su cui puoi agire:

  • Intervallo di fatturazione (mensile o annuale)
  • Piano o fascia di prezzo
  • Canale di acquisizione o fonte di iscrizione
  • Tipo di metodo di pagamento
  • Se il cliente ha raggiunto un traguardo di attivazione (vedi attivazione e churn iniziale)

Ogni divisione rimpicciolisce le coorti. Tieni a mente la prossima regola.

Trappole

  1. Coorti piccole. Con 20 clienti, una sola disdetta sposta la retention di 5 punti. Mostra la dimensione della coorte accanto a ogni riga, o raggruppa per trimestre.
  2. Le coorti recenti sembrano migliori. I numeri del mese 1 per la coorte del mese scorso potrebbero non includere i pagamenti falliti ancora in fase di nuovi tentativi. Aspetta che la finestra dei tentativi si sia chiusa prima di leggere l’ultima colonna.
  3. Intervalli misti. I piani annuali fanno sembrare piatte le coorti mensili. Separali.
  4. Effetto sopravvivenza nei segmenti. Se segmenti per un comportamento che richiede tempo (per esempio “ha usato la funzione X”), i clienti andati via presto non hanno mai avuto la possibilità di farlo. Misura il comportamento in una finestra iniziale fissa, come i primi 14 giorni, per tutti.
  5. Correlazione non è causalità. Un segmento che trattiene meglio può differire in molti modi contemporaneamente. Quando puoi, testa i cambiamenti con un gruppo di controllo.

Farlo con NoChurn

NoChurn legge gli eventi di abbonamento dal tuo strumento di fatturazione (Stripe in un clic, molti altri tramite connettore o API REST) e ti permette di inviare via API i tuoi attributi dei clienti, come fonte di iscrizione, piano o attivazione, per vedere quali vanno di pari passo con il churn (correlazione, non causalità). Ogni cliente riceve un churn score da 0 a 100 all’iscrizione e a ogni cambiamento. Per agire su ciò che mostra una tabella per coorte, gestisce il recupero dei pagamenti falliti, flussi di disdetta con un’offerta per ogni motivo e disdetta in un clic sempre visibile, ed email di win-back a 30, 60 e 90 giorni. Ogni funzionalità è in ogni piano (il tuo dominio email da $9), con prezzo basato solo sull’MRR (prezzi).

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.

Smetti di perdere ricavi.

  • Gratis fino a $300 MRR
  • Nessuna carta richiesta
  • Attivo in 10 minuti
  • Mai una quota di ciò che recuperiamo