Scoprire cosa predice il churn con i dati dei tuoi clienti
Quali attributi ed eventi raccogliere, come fare analisi per coorte e di rischio relativo, ed evitare falsi positivi e numeri inventati dall'IA.
Ogni business in abbonamento ha una teoria sul perché i clienti se ne vanno. «I clienti dalle campagne a pagamento fanno più churn.» «I team che non invitano un secondo utente non restano mai.» Alcune di queste teorie sono giuste. Molte no, e l’unico modo per saperlo è verificarle sui tuoi dati.
Questa guida spiega cosa raccogliere, come confrontare i gruppi con analisi per coorte e di rischio relativo, come evitare le trappole statistiche che fanno sembrare il rumore casuale un’intuizione, e come usare l’IA per spiegare i risultati senza lasciarle inventare numeri.
Passo 1: decidi cosa significa «churn»
Prima di qualsiasi analisi, metti per iscritto una definizione. Per esempio:
- In churn: abbonamento disdetto o terminato per mancato pagamento, e non riattivato entro 30 giorni.
- Finestra di osservazione: i primi 90 giorni del cliente, o un periodo di calendario.
- Chi conta: solo i clienti paganti, o anche le prove (analizzale a parte; la conversione delle prove è un’altra domanda).
Separa il churn volontario (il cliente ha disdetto) da quello involontario (un pagamento è fallito e non è mai stato recuperato). Hanno cause diverse. Una carta prepagata e un utente deluso non sono lo stesso problema. Il nostro articolo sul churn involontario tratta il lato dei pagamenti.
Passo 2: raccogli gli attributi e gli eventi giusti
Ti servono dati che esistevano prima che il cliente facesse churn e su cui potresti agire. Un buon insieme di partenza:
| Campo | Tipo | Valori d’esempio | Perché conta |
|---|---|---|---|
signup_date |
Attributo | 2026-06-12 | Coorti; stagionalità |
signup_source |
Attributo | google_ads, facebook_ads, organic, referral |
Qualità del canale, non solo volume |
plan |
Attributo | starter, team |
Adeguatezza tra piano e bisogno |
seats |
Attributo | 1, 5, 20 | Gli account con una sola postazione spesso si comportano diversamente |
company_size / country / industry |
Attributo | 11-50, DE, agency |
Adeguatezza del segmento |
trial_length_days |
Attributo | 7, 14 | Se le prove più lunghe aiutano |
coupon_at_signup |
Attributo | LAUNCH50, nessuno |
Clienti acquisiti con uno sconto |
payment_method |
Attributo | card_credit, card_prepaid, sepa, link |
Rischio di churn involontario |
activated_at |
Evento / data | 2026-06-14 | Ha raggiunto il primo momento di valore? |
last_active_at |
Attributo | 2026-09-30 | Quanto è recente l’utilizzo |
key_feature_used |
Conteggio di eventi | reports_created: 4 |
Profondità d’uso |
support_tickets |
Conteggio | 0, 3 | Attrito |
nps_score |
Attributo | da 0 a 10 | Soddisfazione dichiarata |
Qualche nota per farlo bene:
- Definisci l’attivazione in modo concreto. «Ha creato un primo progetto e invitato un collega entro 7 giorni» è misurabile. «Ha ottenuto valore» no.
- Registra i valori a una data precisa. Se confronti il
last_active_atdei clienti in churn con quello dei clienti attivi, il gruppo in churn sembrerà inattivo perché ha fatto churn. Non ti dice nulla. Usa un punto fisso, come l’attività nei primi 14 giorni. - Tieni le categorie larghe. Venti fonti di iscrizione con tre clienti ciascuna non si possono analizzare. Raggruppale (ricerca a pagamento, social a pagamento, organico, referral, altro).
- Dati sul metodo di pagamento da Stripe. Gli oggetti carta in Stripe includono un campo
funding(credit, debit, prepaid o unknown) (riferimento API di Stripe), che puoi usare senza gestire numeri di carta. - Attenzione alla privacy. Raccogli ciò che ti serve, documenta perché e rispetta la tua privacy policy e la legge locale.
Passo 3: costruisci le coorti e confronta i tassi di churn
L’analisi utile più semplice confronta i tassi di churn tra gruppi che differiscono per un solo attributo.
Prendi tutti gli iscritti in un periodo abbastanza lungo perché il churn emerga (per esempio, iscritti nel primo trimestre, osservati per 90 giorni). Per ogni valore di un attributo, conta i clienti e i clienti in churn.
Esempio illustrativo (dati non reali):
| Fonte di iscrizione | Clienti | In churn entro 90 giorni | Tasso di churn |
|---|---|---|---|
| Organico | 400 | 60 | 15% |
| Social a pagamento | 200 | 50 | 25% |
| Referral | 100 | 10 | 10% |
Rischio relativo
Il rischio relativo (RR) confronta il tasso di churn di ogni gruppo con una base di riferimento. Usando l’organico come riferimento:
- Social a pagamento: 25% / 15% = RR 1,67. I clienti dai social a pagamento hanno fatto churn circa 1,7 volte più spesso.
- Referral: 10% / 15% = RR 0,67. I clienti da referral hanno fatto churn circa un terzo in meno.
Il rischio relativo è facile da spiegare a chiunque in azienda, ed è il suo principale vantaggio rispetto a modelli più complessi. Vedi rischio relativo per la definizione formale.
Passo 4: verifica se la differenza è reale
Una differenza in una tabella non è automaticamente una scoperta. Con gruppi piccoli, il caso da solo produce grandi differenze.
Dimensione del campione
Guarda i conteggi, non solo le percentuali. Se i social a pagamento avessero avuto 20 clienti e 5 in churn, il loro tasso del 25% potrebbe facilmente essere 10% o 45% con un altro mese di iscrizioni. Una regola pratica: diffida di qualsiasi gruppo con meno di qualche decina di clienti o meno di circa dieci eventi di churn, e dichiaralo nel report.
Intervalli di confidenza
Riporta un intervallo, non solo un numero. Un intervallo di confidenza al 95% per un rischio relativo ti dice l’insieme di valori compatibili con i tuoi dati. Con la tabella illustrativa qui sopra, l’intervallo per i social a pagamento risulta circa da 1,2 a 2,3, quindi il rischio più alto è abbastanza chiaro. Se fosse da 0,8 a 3,4, non sapresti se i social a pagamento siano davvero peggiori. Il metodo standard usa il logaritmo del rischio relativo; la maggior parte delle librerie statistiche lo calcola per te.
Una versione rapida in Python, per un confronto:
import math
def relative_risk(a_churn, a_total, b_churn, b_total, z=1.96):
rr = (a_churn / a_total) / (b_churn / b_total)
se = math.sqrt(1/a_churn - 1/a_total + 1/b_churn - 1/b_total)
low = math.exp(math.log(rr) - z * se)
high = math.exp(math.log(rr) + z * se)
return rr, low, high
# Paid social vs organic, illustrative numbers from the table above
print(relative_risk(50, 200, 60, 400)) # about (1.67, 1.19, 2.33)
Confronti multipli
È la trappola in cui cade la maggior parte delle dashboard. Se testi 40 attributi con un livello di significatività del 5%, devi aspettarti che circa 2 sembrino «significativi» per puro caso, anche se nessuno conta. Più tagli i dati, più scoperte false ottieni.
Come gestirlo:
- Decidi prima una breve lista di ipotesi, e tratta tutto il resto come esplorazione.
- Correggi per il numero di test. La correzione di Bonferroni (dividi la soglia di significatività per il numero di test) è semplice e severa. La procedura di Benjamini-Hochberg controlla il tasso di false scoperte ed è meno conservativa.
- Conferma su dati nuovi. Trova uno schema negli iscritti del primo trimestre, poi verifica se vale per il secondo. Una scoperta che si replica merita un’azione.
Passo 5: correlazione, non causalità
Anche un rischio relativo solido e replicato ti dice che un attributo va insieme al churn. Non ti dice che l’attributo causa il churn.
Modi comuni in cui va storto:
- Confondimento. I clienti dai social a pagamento potrebbero fare più churn perché sono soprattutto freelance che lavorano da soli, e i freelance da soli fanno più churn indipendentemente dal canale. Verifica la relazione all’interno dei segmenti (social a pagamento contro organico, solo tra gli account con una postazione).
- Causalità inversa. I clienti che aprono molti ticket di supporto potrebbero fare più churn, oppure i clienti che già non riescono a ottenere valore aprono più ticket.
- Selezione. I clienti che hanno scelto il piano annuale sono già più convinti. La fatturazione annuale potrebbe non causare la retention; potrebbero essere i clienti convinti a scegliere la fatturazione annuale.
Il modo per stabilire una causa è un esperimento: cambia una cosa per un gruppo casuale e confronta. Per esempio, se l’attivazione sembra predire la retention, testa una modifica dell’onboarding che aumenti l’attivazione per una metà casuale dei nuovi iscritti e guarda se la retention segue. La nostra guida al test delle offerte di retention applica la stessa logica del gruppo di controllo alle offerte del flusso di disdetta.
Passo 6: trasforma le scoperte in azioni
| Scoperta (esempio) | Azione possibile | Come verificare |
|---|---|---|
| Gli iscritti dai social a pagamento fanno più churn | Cambiare targeting o landing page; confrontare le coorti | La coorte social a pagamento del trimestre successivo |
| Gli account con una postazione fanno più churn | Invito ad aggiungere un collega durante l’onboarding | A/B test dell’invito |
| Chi non è attivato entro il giorno 7 fa più churn | Promemoria ai giorni 3 e 5, aiuto alla configurazione | A/B test dei promemoria |
| Le carte prepagate falliscono di più ai rinnovi | Chiedere un metodo di pagamento di riserva, promemoria anticipati | Confrontare il tasso di rinnovi falliti |
| Un NPS basso precede la disdetta | Ricontattare entro una settimana chi dà punteggi bassi | Confrontare il churn tra ricontattati e non |
Usare l’IA per spiegare i risultati, in sicurezza
I modelli linguistici sono bravi a trasformare una tabella di risultati in un riassunto chiaro e in una lista di idee. Sono pessimi in aritmetica e producono numeri plausibili ma sbagliati. La divisione sicura è:
- Calcola ogni numero nel codice. Tassi di churn, rischi relativi, intervalli, dimensioni dei campioni e p-value corretti vengono da uno script deterministico o da una query SQL.
- Dai al modello solo i risultati calcolati, come dati strutturati, e chiedigli di spiegarli.
- Vieta numeri nuovi. Istruisci il modello a usare solo cifre presenti nell’input, e controlla l’output: ogni numero nel riassunto deve corrispondere a un numero nei risultati.
- Richiedi le avvertenze. Chiedigli di segnalare campioni piccoli, intervalli ampi e che le scoperte sono correlazioni.
- Tieni una persona nel processo per tutto ciò che cambia prezzi, targeting o prodotto.
Una breve struttura di prompt che funziona:
You are given churn analysis results as JSON. Each row has an attribute,
a value, customers, churned, relative_risk, ci_low, ci_high and
adjusted_p. Explain the three strongest findings for a non-technical
founder. Use only numbers that appear in the JSON. Mention sample size
for each finding. Say these are correlations, not causes. Suggest one
experiment per finding.
Checklist
- Churn definito per iscritto, volontario e involontario separati.
- Attributi registrati a una data fissa.
- Categorie raggruppate così che ognuna abbia abbastanza clienti.
- Rischio relativo con intervalli di confidenza per ogni confronto.
- Dimensioni dei campioni mostrate accanto a ogni risultato.
- Correzione per confronti multipli, o risultati confermati su dati nuovi.
- Fattori di confondimento verificati all’interno dei segmenti.
- I riassunti dell’IA usano solo numeri calcolati.
- Le scoperte principali trasformate in esperimenti.
Come aiuta NoChurn
Con i dati personalizzati di NoChurn, invii qualsiasi attributo cliente o evento di utilizzo tramite l’API, in batch, via CSV o con l’SDK. NoChurn calcola le statistiche nel codice (rischio relativo, dimensione del campione e confidenza) per trovare quali attributi vanno insieme al churn, poi usa l’IA per spiegare i risultati e suggerire azioni, indicate come correlazione, non causa. Gli stessi dati, insieme a metodo di pagamento e fonte di iscrizione, alimentano il churn score assegnato a ogni cliente all’iscrizione. Vedi il riferimento API e i prezzi.