Section 14.5.1 : Health scoring et churn prediction
🎯 Objectif pédagogique
Construire un système de health scoring client et un modèle de prédiction de churn pour anticiper les départs et maximiser la rétention.
Le coût du churn
Acquérir un nouveau client coûte 5 à 25x plus cher que retenir un existant. Le churn est l'ennemi n°1 de la croissance SaaS.
Health Score : le thermomètre client
## Composantes du Health Score (0-100)
### Usage (40% du score)
- Fréquence de connexion (daily/weekly/monthly)
- Feature adoption : % de fonctionnalités utilisées
- Depth of use : actions avancées vs basiques
- Tendance : usage en hausse/stable/baisse
### Engagement (25% du score)
- Participation aux webinars/trainings
- Ouverture des emails CS
- Réponse aux surveys (NPS, CSAT)
- Interactions avec le support (positives)
### Sentiment (20% du score)
- NPS score du dernier survey
- Sentiment des tickets support (IA)
- Feedback qualitatif
- Relation avec le CSM (qualité des échanges)
### Contractuel (15% du score)
- Temps avant renouvellement
- Historique des expansions/contractions
- Nombre d utilisateurs vs licences achetées
- Paiements en retard
Modèle de churn prediction
# Churn prediction avec des features temporelles
import pandas as pd
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
def build_churn_model(customer_data):
# Features
features = pd.DataFrame([{
# Usage trends (ratios semaine courante / semaine précédente)
'login_trend': c.logins_this_week / max(c.logins_last_week, 1),
'feature_adoption': c.features_used / c.total_features,
'dau_mau_ratio': c.daily_active / max(c.monthly_active, 1),
# Engagement
'support_tickets_30d': c.tickets_last_30d,
'nps_score': c.last_nps,
'email_open_rate': c.email_opens / max(c.emails_sent, 1),
# Contractuel
'days_to_renewal': c.days_until_renewal,
'contract_value': c.mrr,
'expansion_history': c.total_expansions,
'seats_utilization': c.active_seats / max(c.purchased_seats, 1),
# Target
'churned': c.churned_within_90_days
} for c in customer_data])
X = features.drop('churned', axis=1)
y = features['churned']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = GradientBoostingClassifier(
n_estimators=200,
max_depth=4,
learning_rate=0.1
)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print(classification_report(y_test, predictions))
return model
Actions selon le Health Score
Playbooks par niveau de Health Score
← Scroll horizontally →
Quelle feature est la plus prédictive du churn dans un SaaS ?
Learn AI, from prompts to agents