Sistema de análisis de marketing con IA: arquitectura escalable y extensible

PythonFastAPIOpenAI APIDesign patternsRedisAsync programmingPydanticREST API

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() y format_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.

  1. Cargar análisis generado + datos comparativos desde Redis.
  2. Construir system prompt específico de la sección.
  3. Formatear datos con ApptrackerContextFormatter.
  4. 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:

  1. Implementar 3 interfaces.
  2. Definir modelo Pydantic de datos comparativos.
  3. 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.