9 · Factores latentes
Deja de comparar usuarios con usuarios. En su lugar, dale a cada usuario e ítem un vector corto de 'dimensiones de gusto' ocultas — la valoración predicha es solo su producto punto.
Representa cada usuario e ítem como un vector latente de k dimensiones. La valoración predicha es su producto punto: R ≈ P Qᵀ. Los factores son 'dimensiones de gusto' (acción-vs-romance, indie-vs-taquillazo) descubiertas automáticamente — y vuelven a la enorme matriz de valoraciones aproximadamente de BAJO RANGO.
Sin esto:
El CF basado en memoria (Cap.3) guarda toda la matriz y recalcula similitudes cada vez — no escala y se atasca con la dispersión. Los factores latentes comprimen millones de usuarios/ítems en vectores diminutos que generalizan sobre los huecos.
El filtrado colaborativo del Capítulo 3 era basado en memoria: guarda toda la matriz, encuentra usuarios parecidos (o ítems) al vuelo, promedia sus valoraciones. Funciona, pero no escala y muere con la dispersión — dos usuarios que no comparten ítems valorados tienen similitud indefinida.
La factorización de matrices adopta una visión completamente distinta, basada en modelo. La idea clave: una valoración no es aleatoria — la impulsan unas pocas dimensiones ocultas de gusto. Quizá un eje es acción ↔ romance, otro es taquillazo ↔ indie. No nombramos estos ejes; el modelo los descubre. La idea es darle:
- a cada usuario
uun vector de longitudkP[u]— cuánto le importa cada dimensión latente, y - a cada ítem
iun vector de longitudkQ[i]— cuánto expresa ese ítem cada dimensión.
Entonces la valoración predicha es simplemente su producto punto:
R[u,i] ≈ P[u] · Q[i] = Σ_f P[u,f] · Q[i,f]
Un usuario que ama la acción (alto en el factor acción) emparejado con un ítem fuertemente de acción (alto en el mismo factor) da un producto punto grande → una valoración predicha alta. En forma matricial toda la predicción es R ≈ P Qᵀ, donde P es usuarios × k y Q es ítems × k.
Como k es diminuto (piensa 10–200) comparado con el número de usuarios o ítems, esto dice que la matriz de valoraciones es aproximadamente de bajo rango: su información esencial vive en un puñado de dimensiones. Esa es toda la premisa de las próximas dos lecciones — cómo encontrar buenos P y Q.
Abajo construimos a mano los factores para que puedas leerlos, reconstruir R = P Qᵀ y ver cómo el vector de un usuario explica qué ítems le gustarán.
Python (in browser)
Factores latentes acción/romance hechos a mano. La valoración predicha es el producto punto de un vector de usuario y de ítem — y toda la matriz es de bajo rango (rango ≤ k).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
En un modelo de factores latentes, ¿cómo se calcula la valoración predicha R[u,i]?
- Cada usuario e ítem se vuelve un vector latente de k dimensiones; la valoración predicha es su producto punto: R ≈ P Qᵀ.
- Los factores latentes son 'dimensiones de gusto' (acción↔romance, taquillazo↔indie) descubiertas automáticamente — nunca etiquetadas a mano en la práctica.
- Como k es diminuto, la matriz de valoraciones es aproximadamente de BAJO RANGO — su señal vive en un puñado de dimensiones.
La misma idea del producto punto de embeddings impulsa los modelos MF de Netflix, la recuperación de dos torres en YouTube y word2vec — los embeddings son factores latentes en todo el ML.
Si lo quitas: Sin factores latentes te quedas recalculando similitudes por pares sobre una matriz gigante y dispersa — lento, e incapaz de generalizar entre usuarios que nunca se solapan.