Motor de recomendaciones híbrido con ML y .NET

Motor de recomendaciones híbrido en .NET: cómo Claprec combina ML, geolocalización y comportamiento implícito

La mayoría de los sistemas de recomendación que vemos en producción hacen una de dos cosas: muestran lo más reciente o lo más popular. Ambos enfoques son fáciles de implementar y ambos fallan de la misma manera — terminan siendo genéricos, predecibles y, con el tiempo, aburridos para el usuario.

Claprec, una plataforma de reseñas construida en .NET, tomó un camino diferente. En lugar de elegir un solo criterio, construyeron un motor híbrido que combina Matrix Factorization (aprendizaje automático colaborativo), heurísticas geoespaciales y señales de comportamiento implícito. El resultado es un feed que se siente personalizado sin pedirle al usuario que configure nada manualmente.

En este artículo analizamos la arquitectura de ese sistema, qué decisiones técnicas la hacen funcionar y cómo estos mismos principios pueden aplicarse en sistemas empresariales en Perú y América Latina.

1. La estrategia de tres contextos: no todos los usuarios son iguales

El primer acierto del diseño de Claprec es reconocer que un sistema de recomendaciones no puede tratar igual a todos los usuarios. La lógica del backend pivota según tres estados distintos del cliente:

  • Usuario anónimo sin ubicación: el sistema muestra contenido por popularidad y recencia. Sin datos, sin personalización posible.
  • Usuario autenticado: se activa el modelo de ML que prioriza intereses explícitos, seguido de popularidad y recencia.
  • Usuario autenticado con ubicación: la geolocalización entra como señal prioritaria, seguida de intereses, popularidad y recencia.

Este enfoque resuelve elegantemente el problema del cold start — qué hacer cuando no tienes historial de un usuario. En lugar de forzar un modelo vacío, el sistema degrada de forma inteligente hacia criterios más simples hasta tener suficientes datos para personalizar.

Desde el punto de vista de arquitectura, esto se traduce en un único punto de entrada (Recommended()) que evalúa el estado del usuario y despacha la lógica correspondiente. Limpio, mantenible y escalable.

2. Feedback implícito: el tiempo de lectura como señal de interés

Una de las decisiones más interesantes del sistema es cómo define "interés". No usa likes, no usa ratings explícitos, no le pide al usuario que haga nada. En cambio, mide cuánto tiempo pasa el usuario mirando una reseña: 10 segundos, 30 segundos, 60 segundos.

Cada vez que se registra una de estas actividades, el sistema evalúa si se ha alcanzado un umbral de reentrenamiento. Si es así, el modelo de Matrix Factorization se reentrena con todos los datos de comportamiento disponibles. El modelo aprende en producción, de forma incremental, sin intervención manual.

Esto es feedback implícito en su forma más pura. El usuario no sabe que está entrenando el sistema — simplemente lo usa. Y el sistema aprende qué tipo de contenido retiene la atención de cada perfil de usuario.

Para los desarrolladores .NET que trabajan con ML.NET, este patrón es directamente aplicable: la biblioteca incluye soporte nativo para Matrix Factorization con datos de interacción implícita, sin necesidad de frameworks externos.

3. El buffer de paginación: cómo evitar que el contenido viejo domine el feed

Aquí está uno de los problemas de ingeniería más subestimados en sistemas de ranking dinámico: la paginación estándar (Skip(x).Take(y)) se rompe cuando el orden de los resultados cambia en tiempo real por predicciones de ML y proximidad geoespacial.

La solución de Claprec es elegante: en lugar de paginar directamente sobre la base de datos con el ranking final, primero se extrae un buffer de 100 registros ordenados por fecha de creación (un criterio estable). Luego, toda la lógica pesada — predicciones del modelo, cálculo de proximidad, matching de categorías — se aplica en memoria sobre ese buffer.

Esto tiene un beneficio adicional que no es obvio a primera vista: evita el efecto "los ricos se hacen más ricos". Si rankeáramos toda la base de datos por popularidad global, las reseñas antiguas con muchas vistas dominarían el feed indefinidamente. Al anclar el buffer a CreatedAt, la popularidad solo compite dentro de contenido reciente. El contenido nuevo tiene siempre una oportunidad real de ser descubierto.

4. Cómo aplica esto en empresas de Perú y América Latina

A primera vista, esto parece un problema exclusivo de plataformas de consumo tipo Netflix o Spotify. Pero los mismos principios tienen aplicación directa en sistemas empresariales de la región.

En implementaciones de Odoo ERP, por ejemplo, la lógica de "mostrar lo relevante según el contexto del usuario" aparece constantemente: ¿qué productos mostrarle primero a un vendedor según su historial de cotizaciones? ¿Qué proveedores sugerir en una orden de compra según el historial de la empresa? ¿Qué reportes priorizar en el dashboard según el rol y comportamiento del usuario?

El patrón de los tres contextos (anónimo, autenticado, autenticado con datos adicionales) es directamente aplicable a cualquier sistema con roles y perfiles. El concepto de feedback implícito — aprender del comportamiento sin pedirle al usuario que configure nada — es especialmente valioso en empresas donde la adopción del sistema es un reto cultural.

Y el buffer de paginación resuelve un problema real en reportes con filtros dinámicos: cuando el orden de los resultados depende de múltiples variables calculadas, la paginación tradicional produce resultados inconsistentes entre páginas. La estrategia de buffer en memoria es una solución práctica y eficiente para conjuntos de datos medianos.

¿Cómo aplica esto en tu empresa?

Si tu sistema actual le muestra lo mismo a todos los usuarios sin importar su rol, historial o ubicación, estás dejando valor sobre la mesa. Aquí hay tres acciones concretas que puedes evaluar:

  • Mapea los contextos de tus usuarios: ¿Cuántos perfiles distintos usan tu sistema? ¿Tienen necesidades de información diferentes? Si la respuesta es sí, la lógica condicional por contexto es el primer paso.
  • Identifica señales implícitas disponibles: Antes de implementar ML, pregúntate qué comportamientos ya registra tu sistema. Tiempo en pantalla, módulos más visitados, búsquedas frecuentes — todo eso es datos de entrenamiento potencial.
  • Evalúa ML.NET para proyectos .NET existentes: Si tu stack es .NET, no necesitas migrar a Python para tener Machine Learning. ML.NET soporta Matrix Factorization y otros algoritmos directamente en el ecosistema que ya conoces.

La personalización no es exclusiva de las grandes plataformas tecnológicas. Con las herramientas disponibles hoy, una empresa mediana puede implementar recomendaciones inteligentes en su ERP, su app móvil o su portal de clientes con un equipo técnico pequeño y en un tiempo razonable.

Conclusión

El motor de recomendaciones de Claprec es un ejemplo concreto de que Machine Learning en producción no requiere infraestructura masiva ni equipos de decenas de data scientists. Requiere diseño cuidadoso, decisiones pragmáticas y una comprensión clara del problema que se quiere resolver.

La combinación de feedback implícito, lógica contextual y una estrategia de paginación inteligente produce un sistema que aprende, escala y no se estanca. Esos tres atributos son valiosos en cualquier software empresarial, no solo en plataformas de consumo.

En Consultoría-Ti trabajamos con equipos técnicos en Perú y América Latina que quieren llevar sus sistemas al siguiente nivel — desde implementaciones de Odoo ERP hasta desarrollo de software a medida con .NET, Flutter y arquitecturas modernas. Si estás evaluando cómo incorporar inteligencia en tu plataforma, conversemos.

Fuentes y Referencias

Kenan Sejmenović — Claprec: Machine Learning in Practice (4/6) — Dev.to



✨ Contenido generado con ContentFlow — Consultoría-Ti

Compartir
Etiquetas
Mensajes de error accesibles: JAWS, NVDA y VoiceOver