Resumen
El episodio 58 de enCoders es una sesión de estudio en la que Mati presenta lo que aprendió sobre sistemas recomendadores, un tema que debe manejar en su nuevo trabajo. Parte con una pregunta del chat sobre cómo practicar código (escribirlo uno mismo y entenderlo línea por línea). Luego define un sistema recomendador como un algoritmo que sugiere ítems relevantes a un usuario y cuenta el caso del Netflix Prize. Clasifica los métodos en collaborative filtering (memory based y model based), content based e híbridos, y explica el problema de las matrices sparse. Desarrolla un caso juguete de filtrado colaborativo con similitud coseno y centrado por la media. Cierra con evaluación (RMSE, MAE), diversidad, explicabilidad, cold start y escalabilidad. La conclusión principal es que conviene entender el algoritmo detrás de las librerías, y que la métrica de error no basta: importa el objetivo real del negocio.
Capítulos
- 00:00IntroPregunta del chat sobre cómo practicar código: se recomienda entender línea por línea y escribirlo uno mismo en vez de copiar y pegar, y luego crear alias o atajos. Mati explica que el título original era "ayudando a Mati" y que no ha trabajado antes con recomendadores.
- 04:45Cómo partimos con el estudioMati le pidió a ChatGPT un plan de estudio (conceptos básicos, intermedios y avanzados) y luego siguió un post de Data Science como guía principal, combinado con otras fuentes. Dejará los links en el Discord.
- 06:17Qué son los sistemas recomendadoresEs un algoritmo que sugiere ítems relevantes a un usuario (películas, libros, productos, videos). El ejemplo más simple es recomendar a todos las 10 películas más populares. Se menciona el experimento de las mermeladas (6 vs 30 opciones): la parálisis por exceso de opciones, y que el recomendador ofrece lo mejor de ambos mundos.
- 10:00Motivación: Caso de NetflixNetflix liberó unos 100 millones de registros (usuario, película, fecha, rating de 1 a 5) y ofreció un millón de dólares a quien mejorara en 10% su sistema Cinematch, medido con RMSE. Hubo un foro comunitario, un aporte clave con SVD y equipos que se fusionaron. Ganó BellKor's Pragmatic Chaos sobre The Ensemble por enviar 20 minutos antes, con puntaje idéntico. La secuela se canceló por una demanda tras identificarse usuarios en los datos, y Kaggle se menciona como inspirado en este concurso.
- 26:35Clasificación de sistemas recomendadoresLos métodos se separan en dos grandes mundos, collaborative y content based, que luego se subdividen.
- 27:22Collaborative FiltersUsan solo la matriz usuario-ítem, con ratings explícitos (estrellas) o implícitos (tiempo gastado, clics). La idea es recomendar según usuarios similares. Se menciona el problema de cold start y la solución trivial de recomendar los más populares.
- 33:23Content BasedAdemás de las interacciones usa atributos del usuario (género, edad, trabajo) y del ítem (actores, duración). Permite recomendar a usuarios nuevos y es más fácil obtener datos de los ítems que de los usuarios. Se mencionan los híbridos, que combinan ambos enfoques.
- 37:23Tipos de sistemas recomendadoresEsquema con content based, colaborativos (memory based y model based, este último con descomposición de matrices) e híbridos.
- 38:43Matrices SparseEl dataset de Netflix en matriz completa (unos 480.000 usuarios por 17.000 películas) daría cerca de 8.000 millones de celdas, mayormente vacías. Almacenarla de forma densa es ineficiente, por lo que existen estructuras y algoritmos para matrices sparse.
- 42:48MemesMemes de la semana: instancias EC2 olvidadas, mensajes de commit inútiles, Java, la parálisis de la elección y cómo se arruina el recomendador de YouTube. Se discute que YouTube optimiza el tiempo de uso, el caso de Tinder y que Rodo usa varias cuentas de YouTube para no "ensuciar" el algoritmo.
- 53:49Memory basedSe distingue el enfoque user-user (buscar usuarios parecidos) del item-item (buscar ítems cercanos a los que gustaron). Según lo leído, item-item funciona mejor, aunque Mati no sabe por qué. Se sugiere usar ambos y probar con A/B testing.
- 58:00Caso de jugueteEjemplo de filtrado colaborativo con una matriz usuario-ítem y un dataset con ID de usuario, ítem, rating y timestamp (no se exploró el uso del timestamp). Se buscan usuarios similares que hayan calificado el ítem y se calcula el rating esperado. Se compara kNN con la similitud coseno, que mide ángulos y no distancia euclidiana, y la distancia como 1 menos el coseno. Se explica el ajuste por la media (centered cosine), el overlap y el promedio ponderado por cercanía. Rodo conecta esto con reducción de dimensiones y embeddings como Word2Vec, y ambos insisten en entender el método antes de usar una librería.
- 01:18:46Cómo evaluarloSe separa un conjunto de test y se compara la nota predicha con la real mediante RMSE (la métrica de Netflix) o MAE. El RMSE de Netflix rondaba 0,9. Se explica que el cuadrado facilita derivar la métrica.
- 01:20:45DiversidadUn RMSE bajo no garantiza variedad: podría recomendar solo toda la saga de Star Wars. Hace falta exploración de contenido nuevo, como hace Spotify.
- 01:25:10ExplicabilidadAl usuario le gusta saber por qué se le recomienda algo (por ejemplo "usuarios como tú vieron tal cosa"). Además, lo que importa es la métrica de negocio, como que la gente vea más películas, y no solo acertar el rating.
- 01:26:17Cold startCuesta recomendar a usuarios o ítems sin calificaciones. Muchas apps piden elegir gustos al instalarse como forma de mitigarlo.
- 01:27:20Otros métodosDescomposición de matrices, content based y otros enfoques que Mati leyó pero le parecieron complejos (regularizadores, optimización). Insiste en estudiar el algoritmo antes de aplicar una librería. Menciona que en su trabajo hay un recomendador hecho in-house y que escalabilidad y deployment son temas por estudiar.
- 01:30:28CierreInvitación a usar el Discord para dudas, memes y links. Se menciona multi-armed bandit (con la anécdota del test psicolaboral de mazos de cartas) y que en buscadores como Google aparecen resultados promocionados.