Comprendre pourquoi 60% des utilisateurs partent après J+1
⭐⭐⭐⭐ Difficulté: Avancé | ⏱️ Durée: 60 minutes
Contexte : L'app mobile perd 60% des utilisateurs après J+1.
Objectif : Comprendre les comportements et améliorer la rétention à 40%.
"""
PROJET 2 : Analyse Cohortes Application Mobile
Analyse de rétention et segmentation
"""
import pandas as pd
import numpy as np
import plotly.express as px
# Générer des événements utilisateurs
def generate_user_events(n_users=1000):
np.random.seed(42)
events = []
for user_id in range(1, n_users + 1):
# Date d"installation
install_date = datetime(2024, 1, 1) + timedelta(days=np.random.randint(0, 180))
# Source d"acquisition
source = np.random.choice(["Google Ads", "Facebook", "Organic"])
# Event: Install
events.append({
"user_id": user_id,
"event_type": "install",
"timestamp": install_date,
"source": source
})
# Sessions sur les premiers jours
for day in range(1, 31):
retention_prob = max(0.1, 0.8 - day * 0.03)
if np.random.random() < retention_prob:
events.append({
"user_id": user_id,
"event_type": "session",
"timestamp": install_date + timedelta(days=day),
"source": source
})
return pd.DataFrame(events)
# Calculer la rétention
def calculate_retention(df):
# Identifier première installation
installs = df[df["event_type"] == "install"]
# Calculer rétention J+1, J+7, J+30
retention = {}
for source in df["source"].unique():
source_users = installs[installs["source"] == source]
retention[source] = {
"D1": calculate_d1_retention(df, source_users),
"D7": calculate_d7_retention(df, source_users),
"D30': calculate_d30_retention(df, source_users)
}
return retention
# Exécution
df = generate_user_events(2000)
retention = calculate_retention(df)
print(retention)
📁 Fichier complet : projets/code/projet2_cohortes_starter.py
🚀 Exécution : python projet2_cohortes_starter.py
Analyser la rétention des utilisateurs groupés par mois d'installation
Comparer la rétention selon la source d'acquisition (Google, Facebook, Organic)
Créer 3 segments : Occasionnels, Actifs, Power Users