6 · Filtrado colaborativo usuario-usuario
'Usuarios como tú también disfrutaron…'. Encuentra los vecinos más cercanos del usuario objetivo por sus vectores de valoración y luego predice una valoración no vista como el promedio ponderado por similitud de lo que opinaron esos vecinos.
El CF usuario-usuario no necesita características de ítems: trata a cada usuario como su fila de la matriz de valoraciones, encuentra los usuarios cuyo gusto es más similar (tras quitar el sesgo de escala de cada persona centrando en su media) y predice una valoración no vista como el promedio ponderado por similitud de las opiniones de esos vecinos.
Sin esto:
Si omites el centrado en la media, un usuario generoso que valora todo con 4-5 parece similar a todos, mientras uno severo de 1-2 no parece similar a nadie — la similitud termina midiendo hábitos de valoración en lugar de gusto.
Los métodos basados en contenido (Capítulo 2) necesitaban características de los ítems. El filtrado colaborativo (CF) descarta las características y aprende solo de la matriz: asume que si tú y yo coincidimos en los ítems que ambos valoramos, coincidiremos en los que solo uno de los dos ha visto. Esa es la idea completa detrás de 'usuarios como tú también disfrutaron'.
El CF más simple es el filtrado usuario-usuario (basado en memoria). Para predecir cómo el usuario u valoraría el ítem i:
- Trata a cada usuario como un vector — su fila de la matriz de valoraciones.
- Mide la similitud entre
uy cada otro usuario (usaremos coseno). - Quédate con los k vecinos más cercanos de
uque de hecho valoraron el ítemi. - Predice
R[u,i]como el promedio ponderado por similitud de las valoraciones de esos vecinos.
Hay un paso de preprocesamiento esencial: el centrado en la media. La gente usa la escala de valoración de forma distinta — el 4 de un calificador indulgente significa lo que el 2 de uno severo. Si comparas filas crudas, mides sobre todo hábitos de valoración, no gusto. Así que antes de calcular la similitud (y antes de promediar), resta la media propia de cada usuario de sus valoraciones observadas. La fórmula de predicción sobre valoraciones centradas es:
pred(u,i) = media(u) + Σ_v sim(u,v)·(R[v,i] − media(v)) / Σ_v |sim(u,v)|
La media(u) devuelve la respuesta a la escala personal de u, y los vecinos aportan sus desviaciones respecto a sus propias medias. Abajo construimos una matriz pequeña, ocultamos una entrada real y la reconstruimos desde los vecinos.
Python (in browser)
CF usuario-usuario: centrar filas en la media, similitud coseno para hallar vecinos, predecir una valoración oculta como el promedio ponderado por similitud de las valoraciones centradas de los vecinos.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
¿Por qué centramos en la media las valoraciones de cada usuario ANTES de calcular la similitud usuario-usuario?
- El CF usuario-usuario predice una valoración no vista a partir de las valoraciones ponderadas por similitud de los vecinos más cercanos del usuario objetivo — sin características de ítems.
- Centra primero cada fila de usuario en su media para eliminar el sesgo de escala, luego vuelve a sumar la media del objetivo en la predicción.
- Es 'basado en memoria': mantiene la matriz completa y calcula los vecinos bajo demanda — interpretable pero difícil de escalar a millones de usuarios.
Los recomendadores originales de GroupLens/MovieLens eran CF usuario-usuario, y los módulos de 'personas similares a ti' aún usan la misma lógica de vecinos hoy.
Si lo quitas: Sin el CF basado en vecinos volverías a la popularidad para todos — perdiendo la personalización que la matriz da gratis.