Recomendaciones para un Científico de Datos que quiera iniciarse en Sistemas de Recomendación

Juan Arévalo

d&a blog, data processing, RecSys

Como Científico de Datos, se espera que seas capaz de construir todo tipo de productos de datos. En muchas ocasiones se trata de identificar tendencias de negocio sencillas (pero muy valiosas) extraídas a través de consultas y limpieza de datos; y, a veces, uno tiene que aplicar algoritmos de aprendizaje automático más sofisticados para predicción, clasificación o incluso recomendación. Sin embargo, el comienzo (coldstart) en un tema específico puede ser difícil para los científicos de datos, especialmente para aquellos que no tienen experiencia con un problema de dominio específico. Pensar por primera vez sobre qué métrica necesitas, cuál es la ingeniería adecuada, elegir un modelo base, etc., puede ser una tarea complicada.

En este artículo respondemos preguntas relacionadas con el “Qué” y el “Cómo” de los Sistemas de Recomendación (SR), basados en una pregunta real de un compañero de BBVA que estaba interesado en desarrollar un producto completo de SR desde cero.

  • ¿Qué tipo de datos tienes? y, ¿cómo es de grande? Lo más probable es que gestiones conjuntos de datos con feedback implícito, en forma de clicks, vistas, escuchas, compras, etc. ¡Afrontémoslo, la era de los ratings ha terminado! Por lo tanto, es más correcto centrarse en predecir la preferencia de un usuario por un producto y no tanto en la calificación explícita que se le da a un producto. Además, echa un vistazo al tamaño de tu problema: ¿cuántos usuarios y elementos hay en tu sistema? y ¿cuántas interacciones hay entre ellos? En los servicios online, los usuarios suelen ser del orden de cientos de miles a cientos de millones, y los artículos son del orden de miles a millones. En promedio, los usuarios normalmente interactúan con decenas de productos diferentes, de modo que la densidad de la matriz de interacciones usuario/producto (o matriz de ratings) es del orden de 0.1-5%.
    ¡Pero no todos los SR son tan grandes y con tan pocas interacciones entre usuarios y productos! Por ejemplo, en BBVA hemos creado un SR para productos financieros que, según la forma en que se expresa el problema, tiene un catálogo de productos que abarca desde las decenas hasta el centenar de productos. En este escenario, tratar el problema de recomendación como un problema de clasificación multiclase probablemente tenga mucho sentido como una primera aproximación. De manera similar, cuando Spotify personaliza su página de inicio para ti (las diferentes listas que aparecen dispuestas en filas), lo hace mediante un SR basado en Contextual Bandits.
  • Elige una métrica offline. No utilices métricas de clasificación tradicionales como el AUC ROC, ya que en SR no tenemos un conocimiento completo sobre muestras negativas y, por lo tanto, las métricas orientadas a la precisión están mal planteadas. Y nunca utilices RMSE en conjuntos de datos con feedback implícito (consulta esta excelente charla para comprender por qué). En su lugar, céntrate en métricas que tengan en cuenta el ordenamiento de la lista de recomendación, como MAP, NDCG, etc. (echa un vistazo a esta publicación para ver con qué frecuencia se utilizó cada métrica en la Conferencia RecSys de 2017). Además, trata de medir otros comportamientos importantes de tu producto, y no sólo la relevancia de la recomendación: diversidad, novedad, popularidad o cobertura.
  • Define un modelo de base y pruébalo con conjuntos de datos públicos. Un algoritmo basado simplemente en la popularidad puede ser más difícil de superar de lo que uno piensa, ya que al fin y al cabo, algo es popular porque a la gente le gusta. Además, los métodos de vecinos más cercanos (k-nn) dan un desempeño sorprendentemente bueno la mayor parte de las veces. Las reglas de asociación pueden ser otro buen punto de partida, y hay implementaciones escalables por ahí.

    Los Algoritmos de Factorización de Matrices también son un modelo popular; consulta, por ejemplo, la implementación de Alternating Least Squares de Spark. Además, los métodos de ordenamiento por pares o lista (como Bayesian Personalized Ranking, también conocido como BPR) tienen una gran aceptación dentro de la comunidad SR. Sin embargo, varios artículos de investigación en el último par de años sugieren que los métodos de ordenamiento por pares pueden tener un rendimiento bajo en métricas que tienen en cuenta el ordenamiento. Como se explica aquí, BPR optimiza la curva ROC, lo que no implica necesariamente mejoras en las métricas que consideran el orden, como MAP o NDCG. En nuestra experiencia, los métodos de ordenamiento por pares o listas de productos tienden a recomendar elementos populares con menos frecuencia que sus contrapartes basadas en estimaciones producto a producto. Este recomendar productos menos conocidos podría en realidad ser algo bueno, si no tuviera asociada una caída de las métricas, como ocurre en algoritmos tipo BPR. Y ya que hablamos sobre cómo diferentes algoritmos pueden estar orientados hacia recomendaciones de corte más popular, es posible que te interese nuestro último trabajo, que muestra cómo recomendar de forma efectiva artículos menos conocidos, sin poner en peligro la relevancia de la recomendación.

  • Incorpora tu negocio en el modelo. Esta es la parte más importante de un producto de SR y, a veces, la más olvidada. Piensa bien en lo que caracteriza tu negocio. Por ejemplo, incorporar información adicional como categorías de productos, perfiles de usuario, etc. aumentará seguramente el rendimiento de tu modelo. ¿Hay alguna estacionalidad en tus datos o alguna tendencia en la forma en que recoges el feedback? Intenta hacer uso del grafo de relaciones de usuarios y productos, ¡esconde mucha información!  
  • Un aviso cuando se usen Redes Neuronales. Aunque el Aprendizaje Profundo  haya mostrado un éxito rotundo en muchos dominios, las mejoras observadas en SR aún son limitadas. Sin duda, la principal ventaja del Aprendizaje Profundo aplicado a los SR reside en la incorporación de información adicional, no tanto en el modelado de los ratings per se. En ese sentido, los SR pueden ser muy útiles si se combinan con la experiencia del dominio en el que se esté trabajando. Respecto al modelado en sí de los ratings, los Autoencoders proporcionan un algoritmo de aprendizaje más compacto (con menos parámetros) que la Factorización de Matrices tradicional, mejorando ligeramente el rendimiento cuando se combinan con técnicas que añaden ruido a la entrada. Por otro lado, las redes neuronales recurrentes tienen un gran potencial en los SR que modelizan sesiones (como listas de Spotify o Youtube), así como en la predicción de siguientes acciones dado un histórico. Sin embargo, un estudio reciente indica que estamos lejos de explotar todo el potencial de las redes recurrentes en SR (de acuerdo con dicho estudio, tienen un desempeño similar a los métodos de vecinos próximos).

 

Hay muchos otros temas que podríamos abordar aquí. Por ejemplo, los problemas con  sesgos de selección y cómo el análisis contrafactual puede prevenirlo. También, podríamos hablar de cómo realizar test A/B  de manera efectiva, o cómo incorporar la dimensión temporal en el sistema. No obstante, esperamos que los consejos de este artículo puedan servirte como punto de partida para lanzar tu primer Sistema de Recomendación.