Problema
Un cliente e-commerce mid-market aveva costi di acquisizione clienti in aumento ma nessun segnale affidabile su quali clienti stessero per lasciare. Le regole standard "non ha comprato in 90 giorni" segnalavano tutti troppo tardi — a quel punto il cliente era già passato a un concorrente.
Approccio
Costruito un layer di survival analysis sugli eventi di transazione combinato con un classificatore gradient-boosted che prevede la probabilità di churn a 30/60/90 giorni. Feature engineering su recency, frequency, diversità del basket, sentiment dei ticket di supporto, pattern di browse-without-buy e ancore stagionali. Probabilità di churn per cliente abbinata ad attribuzione per-feature, così il team di retention poteva vedere perché il modello segnalava ogni account.
Stack
Python · XGBoost · lifelines · event-stream pipeline · Postgres · scikit-learn
Risultato
Il team di retention si è spostato da campagne win-back generiche a interventi per-segmento. L'attribuzione del "perché" è risultata l'unlock più grande del punteggio stesso — segmenti diversi fanno churn per ragioni diverse, e email di retention one-size-fits-all stavano bruciando budget su clienti che avevano bisogno di tutt'altro.