
Case Study: Complete Product Analysis
Practical Project: Analyze the product end-to-end and present recommendations. From the health dashboard to behavioral segmentation, up to the prioritized roadmap.
What you will learn
- Misurare salute prodotto con MAU, DAU/MAU, activation e retention per coorte
- Isolare il mix di acquisizione dal degrado reale con coorti per canale
- Tradurre i driver in roadmap a tre orizzonti con owner e soglia di rollback
Case Study: Complete Product Analysis
Questa lezione si sviluppa sul binario ml-tabellare: il caso FitTrack è una lunga tabella che parte dai numeri di salute e arriva alla roadmap, passando per coorti, segmenti e ipotesi verificate. È il banco di prova dell’intero modulo, dove tutti i concetti delle lezioni precedenti vengono messi a lavorare insieme su un problema concreto.
Il compito in sintesi
Il caso FitTrack mostra come unire journey, coorti e segmenti per passare da metriche di volume a roadmap con decisioni verificabili.
Il percorso metodologico in sei passi
- Definisci decisione, metrica norte e baseline storica prima di interrogare i dati.
- Misura salute con
MAU, rapportoDAUoverMAU,activationeretentionper coorte. - Isola mix di acquisizione da degrado reale con coorti per canale.
- Trova il collo di bottiglia con
funneloperativo e tempi mediani. - Segmenta per comportamento e identifica driver con modello interpretabile.
- Traduci insight in tre orizzonti con
owner, scadenza e soglia di rollback.
Salute e coorti che smascherano il volume
FitTrack raggiunge 2,3 milioni di download in diciotto mesi con CAC in calo del 34 percento. Nello stesso periodo il primo workout crolla dal 52 al 38 percento. La retention a 30 giorni scende al 18 percento contro il 31 storico.
The model freemium a 9,99 euro al mese regge solo con curva stabile. Il LTV premium stimato è 140 euro. Tra gennaio e giugno i MAU salgono del 67 percento da 180k a 301k. Nello stesso periodo il rapporto DAU over MAU scende dal 22 al 19 percento.
-- Stickiness trend mensile
WITH monthly AS (
SELECT
DATE_TRUNC('month', event_date) AS month,
COUNT(DISTINCT user_id) AS mau,
COUNT(DISTINCT CASE WHEN event_date >= DATE_TRUNC('month', event_date) + INTERVAL '1 day' THEN user_id END) AS dau
FROM events
WHERE event_name IN ('app_open', 'workout_start', 'workout_complete')
GROUP BY 1
)
SELECT
month,
mau,
dau,
ROUND(dau::numeric / NULLIF(mau, 0) * 100, 1) AS dau_mau_pct
FROM monthly
ORDER BY month;
Le coorti paid social da metà aprile mostrano retention a 30 giorni tra 14 e 19 percento. Il confronto è contro 28-33 organico. Il mix passa da 70 organico a 55 paidData drift payback si allunga da 4,2 a 11,8 mesi oltre la soglia interna di 8 mesi.
-- Retention D30 per coorte settimanale e canale
WITH signup_cohort AS (
SELECT
user_id,
DATE_TRUNC('week', MIN(event_date))::date AS cohort_week,
MAX(CASE WHEN utm_source IS NOT NULL THEN utm_source ELSE 'organic' END) AS acquisition_channel
FROM events
WHERE event_name = 'signup'
GROUP BY user_id
),
retention_d30 AS (
SELECT
sc.cohort_week,
sc.acquisition_channel,
COUNT(DISTINCT sc.user_id) AS cohort_size,
COUNT(DISTINCT CASE
WHEN e.event_date BETWEEN sc.cohort_week AND sc.cohort_week + INTERVAL '30 days'
AND e.event_name IN ('workout_complete', 'app_open')
THEN e.user_id END) AS retained_users
FROM signup_cohort sc
LEFT JOIN events e ON sc.user_id = e.user_id
GROUP BY 1, 2
)
SELECT
cohort_week,
acquisition_channel,
cohort_size,
retained_users,
ROUND(retained_users::numeric / NULLIF(cohort_size, 0) * 100, 1) AS retention_d30_pct
FROM retention_d30
WHERE cohort_week >= '2024-01-01'
ORDER BY cohort_week DESC, acquisition_channel;
Activation e cinque archetipi comportamentali
Theactivation con primo workout entro 24 ore è al 38 percento. La mediana è a 47 minuti. Chi attiva entro 15 minuti trattiene al 41 percento a 30 giorni. Chi attiva oltre i 60 minuti trattiene solo al 12 percento.
The funnel perde il passaggio maggiore alla scelta piano. Qui la conversione passa dal 54 al 42 percento. La causa è l’eccesso di opzioni prima del valore.
-- Funnel onboarding con tempi
WITH steps AS (
SELECT
user_id,
MIN(CASE WHEN event_name = 'app_open' THEN event_date END) AS t0,
MIN(CASE WHEN event_name = 'goal_selected' THEN event_date END) AS t1,
MIN(CASE WHEN event_name = 'plan_chosen' THEN event_date END) AS t2,
MIN(CASE WHEN event_name = 'workout_start' THEN event_date END) AS t3,
MIN(CASE WHEN event_name = 'workout_complete' THEN event_date END) AS t4
FROM events
WHERE event_date >= '2024-04-01'
GROUP BY user_id
)
SELECT
COUNT(*) AS total_signups,
COUNT(t1)::numeric / COUNT(*) * 100 AS pct_goal,
COUNT(t2)::numeric / COUNT(*) * 100 AS pct_plan,
COUNT(t3)::numeric / COUNT(*) * 100 AS pct_start,
COUNT(t4)::numeric / COUNT(*) * 100 AS pct_complete,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY EXTRACT(EPOCH FROM (t4 - t0))/60) AS median_min_to_complete
FROM steps;
| Segment | Quota utenti | Workout in 14 giorni | Retention D30 | LTV stimato |
|---|---|---|---|---|
| inactive | 31 percento | 0 | 3 percento | 0 euro |
| curious_dormant | 24 percento | 1-2 | 8 percento | 12 euro |
| casual_mover | 22 percento | 3-5 | 22 percento | 45 euro |
| consistent_builder | 14 percento | 6-11 | 54 percento | 128 euro |
| athlete_power | 9 percento | 12 e oltre | 78 percento | 280 euro |
Gli athlete_power sono il 9 percento della base. Generano il 52 percento del revenue premium e il 61 percento dei referral organici. Il clustering è stabile con silhouette a 0,62.
Driver e roadmap a tre orizzonti
Il modello logistico regolarizzato studia la transizione da casual a consistent. I driver sono primo workout rapido, riepilogo progressi entro 24 ore, reminder contestuali entro 3 giorni e challenge entro 7 giorni. Il modello ha AUC a 0,82 con validazione temporale su coorti successive.
# Driver analysis: logistic regression con SHAP
import pandas as pd
import shap
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
# feature matrix X (utenti casual_mover nei primi 14gg), target y (diventa consistent_builder entro 60gg)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = LogisticRegression(penalty='l2', C=0.1, max_iter=1000, random_state=42)
model.fit(X_scaled, y)
# SHAP per interpretabilità
explainer = shap.LinearExplainer(model, X_scaled)
shap_values = explainer.shap_values(X_scaled)
shap.summary_plot(shap_values, X, feature_names=feature_names)
| Horizon | Iniziativa | Metrica successo | Baseline |
|---|---|---|---|
| Quick win 0-4 sett | Piano preselezionato con workout da 10 minuti in un tap | Quota workout entro 15 minuti | Mediana a 47 minuti |
| Strategico 4-16 sett | Challenge sociali Primi 14 giorni con squad | Quota casual verso consistent a 60 giorni | 18 percento verso target 28 |
| Moonshot oltre 16 sett | Coach adattivo su segnali real-time | Retention D30 coorti paid | 18 percento verso target 35 |
Il verdetto dell’analisi: la quick win riduce il tempo al valore, lo strategico sposta il segmento e il moonshot scala solo con dataset etichettato.
Verdetto: la quick win vince per ridurre il tempo al valore, lo strategico per spostare il segmento; il moonshot si scala solo con dataset etichettato.
Riferimenti: Croll e Yoskovitz Lean Analytics 2013, Kohavi Tang e Xu Trustworthy Online Controlled Experiments 2020, McClure AARRR 2007, Fogg Behavior Model 2009, Chapelle e Li Empirical Evaluation of Thompson Sampling 2011.
Strava: la conferma esterna del playbook
Nel 2022 Strava supera 100 milioni di atleti registrati dopo anni di crescita guidata da challenge sociali, segmenti e kudos invece di solo acquisizione paid. Le challenge da 7 e 14 giorni creano accountability esterna e il tasso di passaggio da uso occasionale a uso costante sale in modo misurabile tra chi partecipa. Il meccanismo replica FitTrack con primo valore rapido, feedback visibile sui progressi e pressione sociale leggera. La lezione tabellare è identica: coorte, comportamento iniziale e retention prima e dopo l’intervento sociale.
Domande per chiudere il caso
- Quale metrica norte segnala per prima il secchio bucato?
- Quale canale spiega il calo di retention tra coorti?
- Quale step del funnel blocca l’activation misurata?
- Quale driver sposta casual verso consistent builder?
Bloccato su questo argomento o vuoi applicarlo al tuo caso? Prenota una call di 15 minuti con un analista esperto.
Related Path
Lessons to read together
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.