Diseñé e implementé un motor de análisis de datos de marketing digital que combina procesamiento de datos comparativos, generación de insights con IA y chat conversacional contextual. El sistema transforma datos brutos de campañas publicitarias en análisis ejecutivos accionables y permite a los usuarios profundizar mediante conversaciones naturales con los datos.
Impacto en el usuario
- Análisis automático en minutos: los usuarios reciben insights de rendimiento de campañas comparando dos periodos sin esfuerzo manual.
- Comprensión inmediata: análisis en lenguaje natural (español/inglés) con recomendaciones accionables.
- Exploración conversacional: chat contextual para profundizar en métricas específicas sin perder el contexto del análisis.
- Escalabilidad de uso: soporte para múltiples secciones de la plataforma con la misma arquitectura.
Arquitectura técnica
1. Patrón de diseño
SectionRegistry
- Sistema de registro dinámico de secciones de análisis.
- Cada sección define: DataSource, Processor, Formatter y ComparativeModel.
- Permite agregar nuevas secciones sin modificar el core del sistema.
2. Pipeline de análisis
Fase 1: recolección de datos comparativos.
- Fetch paralelo de periodo actual + periodo anterior.
- Cálculo automático de periodo previo basado en duración.
- Rankings inteligentes: top 5 rendimiento, top 5 volumen y peores 5 (con lógica anti-spam).
- Soporte de eventos personalizados del usuario.
Fase 2: formateo para IA.
- Transformación de datos complejos → Markdown estructurado.
- Dos contextos:
format_for_analysis()yformat_for_chat(). - Preservación de jerarquía: métricas globales → rankings → comparación.
Fase 3: generación de insights.
- Prompts específicos por tipo de análisis.
- System prompt + analysis prompt + datos formateados.
- Salida en Markdown profesional con estructura predefinida.
Fase 4: almacenamiento con TTL.
- Redis con compresión gzip (reduce ~70% tamaño).
- Metadata ligera para listados rápidos.
- TTL de 6 horas (análisis) y 1 hora (sesiones de chat).
3. Chat conversacional con contexto
Inicialización de contexto.
- Cargar análisis generado + datos comparativos desde Redis.
- Construir system prompt específico de la sección.
- Formatear datos con
ApptrackerContextFormatter. - Inyectar contexto en primera interacción.
Ventajas del diseño.
- El modelo tiene acceso tanto al análisis generado como a los datos brutos.
- Los usuarios pueden preguntar sobre campañas específicas no mencionadas en el análisis.
- Persistencia de sesiones permite seguir conversaciones en múltiples requests.
4. API RESTful con FastAPI
Endpoints.
- POST /analysis/{section} → Generar análisis
- GET /analysis/{section}/{analysis_id} → Recuperar análisis
- GET /analysis/{section} → Listar análisis históricos
- GET /analysis/{section}/{analysis_id}/chat → Chat streaming
- POST /analysis/{section}/{analysis_id}/chat/clear → Resetear sesión
- GET /analysis/{section}/{analysis_id}/session → Estado de sesión
Decisiones técnicas clave
Escalabilidad horizontal
Interface-driven development:
DataSourceInterface: interfaz para fetching de datos.AnalysisProcessorInterface: interfaz para procesamiento + prompts.ContextFormatterInterface: interfaz para formateo markdown.
Añadir una nueva sección requiere solo:
- Implementar 3 interfaces.
- Definir modelo Pydantic de datos comparativos.
- Registrar en
section_registry.
Resultado: cero cambios en el core del motor de análisis.
Optimización de costos
Compresión gzip en redis.
- Análisis típico: ~150KB → ~45KB comprimido.
- Reduce latencia de red y uso de memoria en redis.
Context window management.
- Analysis: ~2000 tokens.
- Chat: ~8000 tokens.
- Compensación: precisión en análisis inicial vs exploración profunda en chat.
Calidad de análisis
Rankings con lógica de negocio.
- Peores 5: prioriza campañas con desperdicio de inversión.
- Top performance: score compuesto (30% volumen + 30% registros + 40% ventas).
- Exclusión de autoatribuidas: rankings de campañas gestionadas excluyen tráfico orgánico.
Validación de datos.
- Filtrado de registros con clicks=0, instalaciones=0 y coste=0.
- Verificación de disponibilidad de campañas antes del análisis.
Experiencia de usuario
Streaming de análisis.
- Server-Sent Events (SSE) para feedback inmediato.
- Usuario ve el análisis construyéndose en tiempo real.
Multiidioma nativo.
- Prompts, formatters y labels en ES/EN.
- Cambio de idioma sin refetch de datos.
Resultados
- Arquitectura probada: 2 secciones implementadas con código reutilizado al 85%.
- Performance: análisis completo de más de 500 campañas en segundos.
- Extensibilidad: nuevas secciones implementables en días vs semanas con arquitectura monolítica.
- Tasa de reutilización: core engine + chat service + storage = 100% compartido entre secciones.