8 MIN LECTURA · Pedro Thomaz

Cómo construir un sistema de recomendación sin rastrear usuarios

Un sistema de recomendación sin rastreo se basa en características del contenido y señales locales de la sesión, no en perfiles cruzados. Así lo construimos — y la precisión que cedemos.

Cómo construir un sistema de recomendación sin rastrear usuarios

Se puede construir un sistema de recomendación genuinamente útil sin rastrear a un solo usuario. El truco está en dejar de intentar saber quién es alguien a lo largo de varias visitas y, en su lugar, ordenar un catálogo finito usando lo que los propios artículos contienen, más el puñado de señales que la sesión actual ofrece gratis. Se pierden los últimos puntos de precisión que aporta la elaboración de perfiles cruzados entre usuarios. Para la mayoría de los productos, esa pérdida no compensa una responsabilidad de vigilancia.

Qué significa de verdad "un sistema de recomendación sin rastreo"

Un recomendador sin rastreo de usuarios es un sistema de ordenación que produce sugerencias con apariencia personalizada sin construir un perfil persistente y cruzado de una persona identificable. Sin cookie que te siga, sin huella digital del dispositivo, sin ID de usuario cosido entre visitas, sin datos de comportamiento enviados a terceros. El modelo nunca necesita responder "¿quién es este?" — solo "dados estos artículos y lo que acaba de ocurrir en esta sesión, ¿qué debo mostrar a continuación?".

Conviene ser preciso, porque la industria lo difumina a propósito. Hay tres grandes familias de recomendadores:

La recomendación que prioriza la privacidad vive casi por completo en la segunda y la tercera familias, pegadas con lo que la sesión en vivo revela legítimamente. Ese es todo el espacio de diseño, y es mayor de lo que se supone.

La versión corta

1. Recomendar es sobre todo ordenar, y ordenar es sobre todo contenido

Lo argumentamos en detalle en nuestro alegato a favor del ML frente a la IA: la mayoría de las "funciones de IA" son listas de sugerencias ordenadas disfrazadas de chatbot. El mismo replanteamiento disuelve el problema de privacidad. Si el trabajo es "ordenar este conjunto conocido de artículos", entonces la señal más rica disponible casi siempre son los propios artículos — no un dosier sobre el usuario.

Mira Delicious Diamonds, la casa de chocolate de lujo para la que trabajamos. El "también te podría gustar" en una página de praliné no necesita conocer tu historial de compras por toda la web abierta. Necesita saber que el praliné que estás viendo es de origen único de Madagascar, 72% de cacao, en la franja de precio de regalo, con nota cítrica — y que otros tres artículos del catálogo comparten la mayoría de esos atributos. Es una búsqueda de vecinos basada en contenido sobre unos cientos de SKU. Corre en un milisegundo y es correcta en una primera visita, con un tarro de cookies vacío, para un navegador sin sesión iniciada detrás de una VPN.

El filtrado colaborativo cruzado es la forma cara e invasiva de aproximar algo que las características de contenido a menudo te dan directamente. Cuando tu catálogo es pequeño y está bien descrito, no necesitas a la multitud.

Construir características de contenido sin vigilancia

El trabajo pasa de la recogida de datos a la descripción de datos. Para cada artículo guardas un vector de características construido con cosas que ya posees:

La similitud es entonces la distancia coseno sobre esos vectores, opcionalmente reponderada por reglas de negocio. Nada de ello hace referencia a una persona. Se calcula cuando cambia el contenido, se cachea, y se sirven los vecinos precalculados como una búsqueda estática.

2. Señales locales de la sesión: personalización que olvida a propósito

La pura similitud de contenido es impersonal. El término medio honesto es la sesión — la única unidad de contexto que puedes usar sin convertirte en un rastreador, porque empieza y termina con la visita.

Dentro de una sola sesión sabes legítimamente: las páginas visitadas en esta visita, los artículos añadidos al carrito o marcados como favoritos, los términos de búsqueda escritos, el idioma de interfaz declarado, y contexto aproximado como la clase de viewport o la hora del día. A partir de ahí puedes mantener un vector de interés de la sesión — una media móvil de los vectores de características de los artículos con los que el visitante ha interactuado en esta visita — y ordenar candidatos por su cercanía a él. Navega por tres tabletas intensas y ricas en cacao y la página se inclina discretamente hacia la intensidad frente al dulzor, sin tener ni idea de quién eres y sin recordarte mañana.

La disciplina que hace esto orientado a la privacidad en lugar de rastreo con otro nombre:

Esto refleja cómo gestionamos el sitio que estás leyendo. Como escribimos en no rastreamos usuarios, nuestra analítica es un único beacon anónimo por sesión sin retención de IP más allá de siete días. El recomendador sigue la misma regla: la sesión es la unidad, y nada le sobrevive.

3. Enfoques en el dispositivo y agregados para los casos más difíciles

A veces contenido más sesión genuinamente no basta — quieres que el modelo aprenda. Hay dos maneras de obtener aprendizaje sin construir dosieres por usuario en un servidor.

Personalización en el dispositivo

Envía el ordenador al cliente y deja que el estado personal nunca lo abandone. Los vectores de características del catálogo son públicos; los pesos de preferencia del usuario se calculan y guardan localmente (IndexedDB, almacenamiento en el dispositivo) y se aplican en el momento del renderizado. El servidor envía el mismo conjunto neutro de candidatos a todos; el dispositivo lo reordena. Así es exactamente como el ordenador de Jofit puede adaptarse al historial de adherencia de una persona — ese historial es de la propia persona, en su propio dispositivo, y nuestros servidores nunca ven el rastro.

El coste es real y conviene nombrarlo: no puedes calcular, desde un solo dispositivo, cosas que requieren a la población, como tendencias reales o valores por defecto de arranque en frío. Esos los derivas de agregados.

Señales solo agregadas

Puedes usar a la multitud sin rastrear individuos si solo lees a la multitud en agregado, y solo por encima de un umbral. "Este artículo fue visto por suficientes sesiones distintas esta semana como para contar como popular" es una señal global segura para la privacidad, siempre que guardes contadores, no eventos — incrementa un recuento, nunca una fila vinculada a una identidad. Todo lo que esté por debajo de un recuento mínimo (digamos, menos de 50 sesiones distintas) se suprime, para que ningún agregado pueda singularizar a una persona. Es el mismo instinto de k-anonimato que hace segura nuestra analítica por beacon.

Para equipos que quieran ir más lejos, el aprendizaje federado y la privacidad diferencial formalizan esto: entrenar en el dispositivo, enviar solo actualizaciones de modelo con ruido, nunca comportamiento en bruto. Recurriríamos a eso en un gran producto B2C. Para un sitio de estudio o una tienda de unos cientos de SKU, es sobreingeniería — contenido más sesión más agregados con umbral ya te da el 90% de la calidad percibida.

4. El compromiso de precisión, dicho con honestidad

Aquí está la parte que la mayoría de los proveedores no imprime. Renunciar al rastreo cruzado te cuesta precisión, y el tamaño del coste depende por completo de tu catálogo.

Lo que cedes:

Lo que conservas, o ganas:

La regla de decisión que usamos: si el catálogo es pequeño y está bien descrito, el basado en contenido gana de plano y la brecha de precisión es despreciable. Cuanto más grande y más insípido el catálogo, y cuanto más dependa tu margen de exprimir el último punto porcentual de conversión, más te habría aportado el filtrado colaborativo — y con más honestidad tienes que sopesar eso frente a la responsabilidad de datos que crea.

5. Una arquitectura de referencia que puedes lanzar este sprint

En concreto, en nuestra stack — PHP 8.3, Cockpit CMS, sin paso de build, renderizado en el servidor — un recomendador que prioriza la privacidad son tres piezas modestas:

  1. Construcción de características offline. Al publicar contenido, calcula el vector de características de cada artículo (atributos + embedding de texto) y los top-N vecinos de contenido. Guárdalos como JSON junto al contenido. Sin coste en tiempo de ejecución, sin unión de base de datos en el camino caliente.
  2. Vector de sesión. Un pequeño acumulador del lado del cliente mantiene una media móvil de los vectores de características de los artículos tocados en esta visita, en sessionStorage. Se envía al endpoint de ordenación como un array corto y opaco — { session_vec: [...], context: { lang, viewport } } — nunca un registro de eventos.
  3. Ordenador. Un endpoint de servidor mezcla similitud de contenido, cercanía de sesión y popularidad agregada con umbral en una sola puntuación, aplica reglas de negocio estrictas, y devuelve la lista ordenada. Sin estado. No registra nada vinculado a la identidad.

Eso es todo. Cabe en un sprint, corre en alojamiento compartido, y no hay ninguna parte que te incomodara explicar en una política de privacidad.

La conclusión

La mayoría de los productos no necesitan rastrear usuarios para recomendar bien — necesitan describir bien su catálogo y respetar la frontera de la sesión. Recurre al filtrado colaborativo solo cuando tu catálogo sea demasiado grande y demasiado genérico para que las características de contenido carguen con el peso, y solo después de haber valorado la vigilancia que exige. Para todos los demás, un ordenador basado en contenido y local de la sesión es más rápido de construir, más barato de operar, legal sin el baile del consentimiento, y lo bastante honesto como para explicárselo a la persona a la que sirve. Los pocos puntos de precisión que dejas sobre la mesa son el seguro más barato que comprarás jamás.