Inspiration

En organizaciones con miles de socios, el churn silencioso representa una pérdida constante que pasa desapercibida hasta que es demasiado tarde. Nos inspiramos en la necesidad de pasar de un enfoque reactivo a uno preventivo: detectar quién está en riesgo antes de que se vaya, entender por qué, y actuar automáticamente.

What we built

Desarrollamos una plataforma de retención predictiva que: Desarrollamos una plataforma de retención predictiva integrada de extremo a extremo que:

  • Analiza el historial mensual: Consulta y procesa historiales de compras (cajas vendidas, transacciones y scores históricos) para 1,000 clientes únicos conectados en tiempo real a MongoDB Atlas.
  • Clasifica niveles de riesgo dinámicos: Categoriza a cada cliente en niveles de riesgo—Alto (Riesgo Crítico), Medio (Riesgo Moderado) y Bajo—tanto en los filtros de búsqueda del backend como en los componentes visuales del frontend.
  • Diagnostica factores con evidencia: Identifica los factores del modelo ML y los fusiona visualmente con sus datos de respaldo (ej. caídas de volumen como De 635 cajas → 166 cajas o cantidad de enfriadores asignados), eliminando redundancias en la interfaz.
  • Alerta discrepancias tempranas: Muestra un banner de advertencia cuando el score predictivo del mes (lote) es bajo, pero el cliente ya presenta señales transaccionales de alerta recientes en su último pedido.
  • Genera Análisis con IA (Gemini): Crea reportes comerciales estructurados (análisis, contexto competitivo y frase clave) usando Google Search Grounding para investigar el mercado local y un presupuesto de razonamiento (Thinking) para analizar las tendencias de ventas.
  • Chat interactivo con Function Calling: Incorpora un chat de seguimiento donde Gemini utiliza llamadas a funciones para consultar el historial de la base de datos de manera autónoma cuando el vendedor le hace preguntas sobre las ventas del cliente.
  • Dispara llamadas de retención (ElevenLabs): Integra un botón de acción rápida en la tarjeta de recomendaciones que realiza una solicitud POST a nuestro backend Node.js para iniciar una llamada telefónica saliente con un agente de voz conversacional de ElevenLabs.

How we built it

Trabajamos con 4 tablas de datos que consolidamos en un historial de 241,805 socios. Entrenamos un modelo XGBoost con 15 features incluyendo tendencia de ventas de los últimos 3 meses, meses sin actividad e historial de enfriadores. Validamos con 5-fold cross validation obteniendo un AUC-ROC de 0.994 con desviación estándar de 0.0002, confirmando que el modelo generaliza consistentemente. El equipo desarrolló en paralelo un backend Node.js y un frontend React (Vite) con buscador por ID de socio. Durante la integración, implementamos los siguientes componentes clave y "extras":

  • MongoDB Atlas Search: Diseñamos un índice de búsqueda con soporte de comodines (wildcards) y coincidencias de prefijo para permitir búsquedas instantáneas y fluidas sobre los IDs encriptados de los clientes directamente en el buscador.
  • Consistencia y De-duplicación en UI: Diseñamos una arquitectura de información limpia donde cada dato aparece exactamente una vez. Eliminamos redundancias del perfil del cliente y las sugerencias, logrando que los indicadores de negocio y la cantidad de enfriadores se muestren de forma contextualizada únicamente junto al factor que los detona. Además, aplicamos Grid Stretch en CSS para balancear simétricamente el alto de las tarjetas.
  • Inteligencia y Grounding de Gemini: El análisis inicial aprovecha Google Search Grounding para recopilar contexto competitivo del territorio del socio, y un presupuesto de razonamiento (Thinking de 2048 tokens) para procesar las fluctuaciones del historial de compras. Desarrollamos una estrategia de fallback automática para reintentar las llamadas a la API sin búsqueda en Google si se exceden los límites regionales o de cuota.
  • Structured Output Schema: Vinculamos las respuestas de Gemini a un esquema estricto de JSON en el backend que divide el reporte en interpretación detallada, contexto competitivo regional, nivel de urgencia y la frase clave de venta.
  • Interceptor de Function Calling: En el panel de chat en vivo, configuramos a Gemini para que pueda solicitar de forma autónoma el historial transaccional de la tienda usando llamadas a funciones. Nuestro frontend intercepta la petición, extrae los datos de la base de datos local y responde al modelo sin sobrecargar el prompt inicial.
  • Integración de Telefonía de Voz (ElevenLabs): El botón de retención en la tarjeta de recomendaciones realiza una solicitud POST a nuestra API de Node.js, la cual se conecta a la API de ElevenLabs para iniciar una llamada telefónica saliente automatizada utilizando un agente conversacional de IA.

Challenges

  • Evitar data leakage al calcular features temporales: Resolvimos excluyendo el último mes de cada cliente de las agregaciones históricas.
  • Dataset desbalanceado (18% churn): Manejado de forma nativa gracias a la robustez de XGBoost y su balanceo de pesos.
  • Parseo de JSON progresivo en tiempo real: Procesar arrays de texto de Gemini en un stream activo sin romper el render de la UI. Lo solucionamos implementando un extractor y parser basado en expresiones regulares de recuperación progresiva.
  • Resiliencia en el Grounding de Google Search: Los límites de cuota de búsqueda del API a veces arrojaban errores regionales o de tasa de transferencia. Diseñamos un interceptor en el backend que realiza un reintento automático (fallback) sin grounding si detecta fallas de conexión.
  • Deduplicación y balanceo en la UI: Evitar que datos de enfriadores, tamaño y meses en riesgo se repitieran en múltiples tarjetas. Lo resolvimos mapeando banderas lógicas de renderizado único y alineando las tarjetas superiores a la misma altura mediante flexbox y grid.

What we learned

Que los datos temporales son mucho más predictivos que los promedios históricos, y que perder un enfriador es la señal más temprana y accionable de abandono.

What's next for ChurnGuard

  • Automatización del ciclo de vida de ML: Implementar tuberías de datos (pipelines) automatizadas en MongoDB Atlas para reentrenar continuamente el modelo XGBoost a medida que se consolidan las transacciones de cada cierre de mes.
  • Alertas proactivas push: Desarrollar notificaciones automáticas móviles en tiempo real cuando un vendedor ingresa a su territorio geográfico o en el instante en que el sistema detecta una anomalía transaccional crítica a mitad de período.
  • Análisis de sentimiento post-llamada: Transcribir y analizar el sentimiento de las conversaciones de ElevenLabs para registrar automáticamente en la base de datos las objeciones del cliente, permitiendo que Gemini adapte las futuras propuestas con este nuevo contexto de viva voz.
  • Modo offline enriquecido: Mejorar el almacenamiento en caché local (offline-first) para asegurar que los representantes de ventas mantengan el acceso a perfiles predictivos y guiones de retención, incluso en áreas de México con cobertura de red limitada.

Built With

Share this project:

Updates