Challenge Recomendador

Defensa de la entrega del challenge de Recomendador para flow

Campus Party 2021

Gianmarco Cafferata - I. Javier Mermet

Problema inicial

Evaluar las top-20 recomendaciones para ~100k usuarios de flow desde feedback implícito

Desafíos personales

Poca disponibilidad personal para la competencia

image.png

Evaluar el uso del dataset para las clases de Organización de Datos, cátedra Collinet ✨📚

Escalabilidad

Teníamos que idear una solución que pudiera generar las recomendaciones en un tiempo aceptable

Innovación

Queríamos salir del molde y probar ideas nuevas que nos resultaran interesantes 🧠

Nuestro camino al segundo score más alto

  • Arrancar por código de utilidades común a cualquier enfoque
  • Definir e implementar la metodología de evaluación de modelos
  • Discutir posibles sesgos de las metodologías utilizadas
  • Armar un modelo baseline naive para tener un score de referencia
    • Un score cercano al de baseline pero con mayor serendipia es considerado mejor

Baseline

  • Contenidos más populares
  • Todas las vistas de cada usuario de cada contenido

score alcanzado en test: 0.031757233518683224

Baseline normalizado

  • Contenidos más populares
  • Todas las vistas de cada usuario de cada contenido
  • Normalizado por la cantidad de assets

score alcanzando en test: 0.03327874393933289

NMF

In [4]:
from surprise import NMF

Descartado por consumir RAM excesiva (40+GB)

LightFM

In [6]:
from lightfm import LightFM

Enfoque basado en Factorization machines (paper)

Representaciones implicítas de usuarios e ítems

Incluyendo matriz de features de ítems

  • OHE de variables categóricas
  • Pendiente: TF-IDF de variables de texto
  • Peores métricas de evaluación
    • Pendiente de revisión

Búsqueda de hiperparámetros

aggregation method

n_components

max_sampled

lr

epochs

Evaluación

score alcanzado en test: 0.04172341550928344

Escalabilidad

Wall time: 20min 10s

(Dell XPS 9560 - Intel® Core™ i7-7700HQ CPU @ 2.80GHz × 8 - 16 GB RAM - SSD - Fedora 34 - python38)

Se puede correr como batch en airflow

Clustering si la base de usuarios escala!

K-Deep Encoder

  • Redes de arquitectura siamesa para el encoding de items
  • Encoding de secuencia de entrada $I$ y de salida $O$ con attention y convoluciones

    $\underset{o \in O}{\arg\max}\,\textit{Model}(I, O)$

Content Encoder

Qries

  • 6300∼ parámetros
  • AUC-ROC: 0.8832

Sequence predictor

Qries

Sequence predictor

Qries

  • 13873 parámetros de la red

Sequence predictor

Version sin optimizar

  • Tiempo: 25.09s/usuario
  • MAP en test: 0.1099041433105365

Version optimizada

  • Tiempo: 5.28s/usuario
  • MAP en test: 0.08420398669885898

Conclusiones

  • LightFM fue el sweet spot del tradeoff entre resultados y escalabilidad
  • Puntos de mejora identificados
  • Queda lugar para mejorar los resultados e incorporar nuevas técnicas

Gracias!

Ignacio Javier Mermet - ML Engineer @ Mutt Data
Qries Qries

Gianmarco Cafferata - Data Scientist @ Mercado libre
Qries Qries