Lift SmartSequences
+9.2%
retención 90d (vs baseline 34%)
p-valor A/B
0.057
marginalmente no sig. (α=5%)
AUC-ROC Modelo Churn
0.701
Logistic Regression (campeón)
ATT Onboarding DiD
−6.6pp
reducción churn (p=0.079)
1
Experimento A/B — SmartSequences
Test two-proportion z-test · α=5% · Power=80%
Control — Sin SmartSequences
33.97%
581 / 1.710 usuarios convirtieron a 90d
Treatment — Con SmartSequences
37.09%
628 / 1.693 usuarios convirtieron a 90d
Resultados estadísticos
| Lift relativo | +9.17% |
| Diff. absoluta | +3.11pp |
| p-valor (z-test) | 0.0575 |
| Veredicto | ⚠ Marginalmente no sig. |
| IC 95% (abs) | [−0.001, +0.063] |
| Muestra requerida | 6.165/variante |
| Muestra actual | ~1.700/variante |
Visualización IC 95% (diferencia absoluta)
El intervalo de confianza cruza el cero — el experimento está infrapotenciado. Se necesita más tiempo de recogida.
−0.001
0 (nulo)
+0.031 (est.)
+0.063
Checklist de rigor experimental
- ✓Métrica primaria pre-registrada: retención a 90 días.
- ✓Aleatorización a nivel usuario (no sesión) para evitar leakage.
- ✓SRM check: |1710−1693|/1701 = 1.0% ≤ umbral 1% (marginal, ok).
- ⚠Duración insuficiente: recogidos 3.403 usuarios, se necesitan 12.330. Continuar 3-4 semanas más.
- ✗Corrección Bonferroni pendiente si se reportan métricas secundarias (open rate, feature adoption).
2
Modelo Predictivo de Churn
5-fold Stratified CV · n=1.200 cuentas · 7.3% churn rate
Comparativa de modelos — Validación cruzada estratificada (5 folds)
| Modelo | AUC-ROC | AUC-PR | Overfit Gap | Veredicto |
|---|---|---|---|---|
| Baseline (DummyClassifier) | 0.500 ±0.00 | 0.073 ±0.00 | 0.000 | Referencia |
| Logistic Regression ⭐ | 0.702 ±0.011 | 0.179 ±0.030 | 0.035 | Campeón |
| GBM (Gradient Boosting) | 0.659 ±0.058 | 0.169 ±0.044 | 0.341 ⚠ | Sobreajuste |
El GBM tiene un overfit_gap de 0.341 — muy elevado. Logistic Regression generaliza mejor con esta muestra. Recomendamos regularización más agresiva en GBM (max_depth=2, min_child_weight=10) o ampliar el dataset.
Top-8 features por importancia (GBM)
Pipeline de features (production-ready)
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
# Numeric: median imputation + standardization
numeric_pipe = Pipeline([
("impute", SimpleImputer(strategy="median")),
("scale", StandardScaler()),
])
# Categorical: mode imputation + OHE
cat_pipe = Pipeline([
("impute", SimpleImputer(strategy="most_frequent")),
("encode", OneHotEncoder(handle_unknown="ignore")),
])
preprocessor = ColumnTransformer([
("num", numeric_pipe, NUMERIC_COLS),
("cat", cat_pipe, CAT_COLS),
])
# Fit SOLO en train split — nunca en full dataset
X_tr = preprocessor.fit_transform(df_train)
X_te = preprocessor.transform(df_test)
Señales de riesgo de churn identificadas
- ▸ Días desde último login > 14d — señal #1 de abandono
- ▸ Tenure < 3 meses — periodo crítico de onboarding
- ▸ Logins < 3/mes — engagement muy bajo
- ▸ plan=starter + features_used < 2 — sin adopción de valor
Checklist de evaluación de modelos
- ✓AUC-PR reportado además de AUC-ROC (dataset con churn=7.3% — muy desbalanceado).
- ✓Baseline DummyClassifier superado: LR +20.2pp en AUC-ROC.
- ⚠GBM: overfit_gap=0.341 supera umbral >0.05. Ajustar hiperparámetros antes de producción.
- ⚠Calibrar probabilidades con Platt Scaling antes de usar scores en campaña de retención.
- ✗Validar importancias con SHAP values — pendiente ejecución en entorno con más datos.
- ✓Validación cruzada estratificada (StratifiedKFold) para preservar balance de clases.
3
Inferencia Causal — Diferencias en Diferencias
Onboarding guiado Oct 2025 · Panel jul–ene 2026 · HC3 robust SE
ATT estimado
−6.6pp
reducción churn en cuentas con onboarding guiado (post Oct 2025)
p-valor (HC3)
0.079
marginalmente no significativo (α=5%); tendencia positiva clara
IC 95%
[−13.9pp, +0.8pp]
intervalo cruza el cero — necesita más observaciones post-treatment
Churn rate pre/post por grupo
| Grupo | Pre-Oct 2025 | Post-Oct 2025 | Cambio |
|---|---|---|---|
| Control (cuentas existentes) | 12.0% | 11.0% | −1.0pp |
| Treatment (cuentas nuevas con onboarding) | 18.0% | 12.0% | −6.0pp |
| DiD (ATT) | — | — | −5.0pp (estimado) |
Las cuentas nuevas parten con más churn (early-life) — el onboarding guiado cierra parte de esa brecha.
Checklist de rigor causal
- ✓Errores estándar HC3 robustos a heterocedasticidad.
- ⚠Validar parallel trends en el período pre (jul–sep 2025).
- ⚠Panel corto (7 meses) — añadir datos a Q3 2026 aumentará potencia.
- ✗Considerar propensity score matching si los grupos difieren en MRR baseline.
- ✓Se reporta ATT con IC, no solo significancia estadística.
4
Recomendaciones Ejecutivas
Acciones prioritarias para GrowFlow
Extender el A/B de SmartSequences
El experimento está infrapotenciado al 28%. Necesitas ~4.700 usuarios más por variante (~3-4 semanas adicionales). El lift del 9.2% es económicamente significativo: proyecta +$38K ARR si se confirma.
Activar alerta de churn en 14d sin login
"days_since_login" explica el 43% de la varianza del modelo. Configura un trigger automático: si una cuenta no hace login en 14 días, envía una secuencia de reactivación personalizada (usar SmartSequences).
Escalar el onboarding guiado
La reducción de churn en cuentas nuevas es de −6.6pp (p=0.08). Aunque no supera el umbral formal, la dirección y magnitud del efecto justifican escalar el onboarding guiado a todos los planes en Q3 2026.
Regularizar el GBM para producción
El overfit gap de 0.341 es inaceptable en producción. Reducir max_depth a 2, aumentar min_child_weight a 10 y aplicar early stopping. Objetivo: overfit_gap < 0.05 manteniendo AUC-ROC > 0.70.
Ampliar dataset para modelos
Con n=1.200 y churn=7.3%, solo hay 88 eventos de churn — muy pocos para AUC-PR fiable. Apunta a n=5.000+ con mínimo 350 churns. Considera SMOTE para balancear en training.
Logging en MLflow desde hoy
Registrar cada experimento con mlflow.log_params + mlflow.log_metrics + mlflow.sklearn.log_model. Antes de deploy a producción, siempre comparar contra el modelo en producción en el mismo holdout set.