Amazon Cinema

Amazon Personalize

Motor de Recomendaciones con Machine Learning

Servicio fully-managed de AWS que genera recomendaciones personalizadas en tiempo real usando los mismos algoritmos de ML que Amazon.com

¿Qué es Amazon Personalize?

Amazon Personalize es un servicio de machine learning que permite crear sistemas de recomendación sin necesidad de experiencia en ML. Usa la misma tecnología que Amazon.com utiliza para recomendar productos a sus clientes.

Fully Managed

No requiere infraestructura de ML. AWS maneja entrenamiento, hosting y escalamiento

Real-Time

Recomendaciones en milisegundos. Se adapta al comportamiento del usuario en tiempo real

Sin expertise ML

Solo necesitas datos de interacciones. Personalize selecciona el mejor algoritmo automáticamente

¿Cómo funciona?

1

Importar datos

Subes tus datasets a S3: interacciones (quién hizo qué), items (catálogo), users (metadata)

2

Entrenar modelo

Personalize selecciona la mejor receta (algoritmo) y entrena un Solution Version con tus datos

3

Crear campaña

Despliegas el modelo como un endpoint de inferencia con TPS (transacciones por segundo) configurables

4

Obtener recomendaciones

Llamas a GetRecommendations con un user_id y recibes items rankeados por probabilidad de interés

¿Con base en qué recomienda?

El modelo User-Personalization combina tres señales para decidir qué recomendar a cada usuario:

📊

Historial del usuario

Qué items consumió en el pasado, en qué orden, y con qué frecuencia

Ejemplo:

User 1 → vio Crimson Tide, The Firm, Cape Fear

Patrón detectado: thrillers/acción

👥

Usuarios similares (collaborative filtering)

Usuarios con historial parecido tienden a querer los mismos items

Ejemplo:

Users que vieron Fargo también vieron L.A. Confidential

Co-ocurrencia → recomendación

🏷️

Metadata de items

Géneros, categorías y atributos del item complementan cuando hay poco historial

Ejemplo:

Item 50 = Action|Sci-Fi|Adventure

Similar a items ya consumidos

Requisitos para usar Personalize

Datos mínimos

  • Mínimo 1,000 interacciones (más = mejor)
  • Mínimo 25 usuarios únicos con 2+ interacciones
  • Dataset de interactions obligatorio (USER_ID, ITEM_ID, TIMESTAMP)
  • Datasets de items y users opcionales pero recomendados

Infraestructura

  • Bucket S3 para almacenar datasets
  • IAM Role con permisos para Personalize
  • Campaña con TPS provisionado (mínimo 1 TPS)
  • Opcional: VPC Endpoint para red privada

De datos a recomendación — ejemplo real

Así es como el modelo llega a recomendar items específicos para un usuario:

Flujo de datos a recomendación

Ejemplo: Usuario Carlos Mendoza (ID ...) — ... interacciones históricas

1. El modelo vio su historial

  • ... y -5 interacciones más

2. Detectó patrones

    3. Generó ranking

      Traducido a Amazon Cinema (F&B):

      Si Carlos siempre compra Combo Nachos + ICEE + Brownie con Helado, el modelo detecta ese patrón y le recomienda esos items primero. Pero también le muestra un Combo Director Premium (exploración) por si descubre algo nuevo que le guste. Cada compra que haga actualiza el modelo en tiempo real.

      Recomendaciones en vivo

      Perfil: 🎬 Carlos Mendoza · México

      #Item IDPelículaScore ML

      Cómo se entrenó este modelo

      Dataset de entrenamiento

      Interacciones100,000
      Usuarios únicos943
      Items (películas)1,682
      Metadata de itemsGéneros (19 categorías)
      RecetaUser-Personalization
      Regiónus-east-1

      Caso de uso Amazon Cinema (producción)

      Usuarios4.97 millones (Cinema Club)
      ItemsCatálogo de alimentos F&B
      Momentos de personalización2 por transacción
      RecetasPersonalizada + Populares
      MercadosMéxico → Sudamérica (expansión)
      Latencia validada164ms (red privada)

      Filtros por país — implementación técnica

      Filter Expressions de Personalize limitan qué items se recomiendan sin reentrenar el modelo:

      Opción A: Filtro por metadata de item

      # Filter Expression

      INCLUDE ItemID WHERE

      Items.AVAILABLE_COUNTRIES

      IN ("MX", "AR", "BR")

      Cada item tiene campo AVAILABLE_COUNTRIES. Solo devuelve items del mercado del usuario.

      Opción B: Filtro dinámico por parámetro

      # Filter con variable

      INCLUDE ItemID WHERE

      Items.COUNTRY IN ($COUNTRY)

      # En runtime:

      filterValues: { COUNTRY: "BR" }

      País como parámetro en cada request. Sin filtros separados por mercado.

      Métricas y cold-start

      User-Personalization

      Receta (algoritmo)

      Event Tracker

      Actualización real-time sin reentrenar

      164ms p50

      Latencia red privada (VPC Endpoint)

      Cold-start handling

      Usuarios nuevos

      Usa metadata (país, tier, edad) + popularidad. Conforme interactúa, se personaliza.

      Items nuevos

      Se agregan via PutItems API. El modelo los incorpora por metadata sin reentrenar.

      ¿Cada cuánto se actualiza el modelo?

      Hay dos tipos de actualización — una automática y otra manual:

      Actualización en tiempo real (automática)

      El Event Tracker captura cada interacción nueva y ajusta las recomendaciones sin reentrenar el modelo completo.

      • Se activa con cada evento (view, purchase, click)
      • Efecto inmediato en las recomendaciones
      • No requiere acción manual
      • Ideal para: "el usuario acaba de comprar nachos → ya no le recomiendes nachos"

      Reentrenamiento completo (manual/programado)

      Se crea una nueva Solution Version con todos los datos acumulados. Mejora la calidad general del modelo.

      • Frecuencia recomendada: cada 1-2 semanas
      • Obligatorio cuando: cambias el catálogo significativamente o agregas muchos usuarios nuevos
      • Duración: 1-4 horas (depende del volumen de datos)
      • Se puede automatizar con Step Functions o EventBridge (ej: todos los lunes a las 3am)

      Para Amazon Cinema:

      Con 4.97M usuarios y ~100 SKUs de F&B, el reentrenamiento semanal es suficiente. El Event Tracker se encarga del día a día (compras nuevas, items agotados). Solo se necesita reentrenar cuando hay cambios grandes: nuevo menú por temporada, lanzamiento de producto, o expansión a nuevo país.

      Personalización por país

      El idioma no afecta las recomendaciones. Personalize trabaja con patrones de comportamiento (IDs + metadata), no con texto. Mismo modelo para todos los mercados, con filtros por disponibilidad local.

      🇲🇽 México

      Catálogo completo. Modelo entrenado con historial de 4.97M usuarios

      En producciónus-east-1 (local) · 164ms

      🇦🇷 Argentina

      Mismo modelo, filtro por items disponibles en AR. Catálogo parcial

      Expansión planeadaus-east-1 (cross-region) · ~507ms

      🇧🇷 Brasil

      Mismo modelo, items en portugués en el catálogo. ML no procesa idioma

      Validado (PoC)sa-east-1 → us-east-1 · 507ms

      🇪🇸 España

      Personalize desplegado en eu-central-1 (Frankfurt). Lambda en eu-south-2 consume localmente

      Validado (PoC)eu-south-2 → eu-central-1 · 188ms

      Arquitectura Local: México (us-east-1)

      Lambda y Personalize en la misma región. Latencia mínima por red privada.

      Arquitectura México

      Resultados de la prueba (us-east-1 local)

      Cold start: 236ms
      Warm: 164ms
      Runtime: Python 3.12 arm64
      Tráfico público: Cero

      Tipo

      Intra-región (óptimo)

      Red

      100% PrivateLink

      Umbral UX

      < 1 segundo ✓

      Qué esperar por tipo de usuario

      Cambia el perfil en el header para ver cómo las recomendaciones cambian en tiempo real.

      🎬

      🎬 Cinéfilo (MX)

      Thrillers, acción, sci-fi — películas de alta intensidad

      👨‍👩‍👧

      👨‍👩‍👧 Familia (MX)

      Comedias, aventura, animación — contenido familiar

      🇦🇷

      🇦🇷 Argentina

      Dramas modernos, romance — cine contemporáneo

      🇧🇷

      🇧🇷 Brasil

      Clásicos, drama europeo — cine de autor

      🇪🇸

      🇪🇸 España

      Cine europeo, drama, sci-fi — variado con preferencia autoral