Todos los proyectos

End-to-End

Caso de estudio

Plataforma de retención B2B

Customer Success intervenía cuando la cuenta ya no respondía. El modelo solo no alcanzaba: hacía falta un lugar donde el riesgo, el porqué y el playbook convivieran.

+22% retención

en el segmento marcado como alto riesgo

  • #MachineLearning
  • #Nextjs
  • #SQL
  • #XGBoost

Esta es la pieza end-to-end del portfolio. El label de churn salió de cohortes SQL. El ranking, de un XGBoost con umbral por valor de contrato. SHAP tradujo el score a drivers que una persona de CS puede leer.

La interfaz es Next.js: una cola de cuentas, el motivo principal de riesgo y una acción a 45 días. Sin esa capa, el modelo hubiera sido un CSV más en un Drive.

No generaliza a enterprise con ciclo anual. El label cambia si la ventana de inactividad es 14 o 30 días. Eso está escrito en la ficha, no escondido en un footnote.

Problema
Las cancelaciones se veían cuando el cliente ya no respondía. Customer Success actuaba sin prioridad y el CAC de cuentas mid-market no se recuperaba.
Solución & pipeline
Cohortes y features de uso en SQL, XGBoost con umbral por valor de contrato, y una webapp en Next.js donde CS ve riesgo, drivers (SHAP) y un playbook a 45 días.
Límite / alcance
No generaliza a planes enterprise con contratos anuales. El label de churn es sensible a la ventana de inactividad (14 vs. 30 días).

SQL

WITH usage AS (
  SELECT account_id,
         COUNT(*) FILTER (WHERE event_date >= CURRENT_DATE - 30)
           AS events_30d,
         MAX(event_date) AS last_seen
  FROM product_events
  GROUP BY 1
)
SELECT a.account_id, a.mrr, u.events_30d
FROM accounts a
JOIN usage u USING (account_id)
WHERE a.status = 'active';