## Page 1
# Sistemas de recomendación
## Resumen
Gestión de la Información
Grado en Ingeniería Informática
Universidad de Burgos
José Ignacio Santos
---
## Page 2
# ¿Por qué recomendar productos?
Muchas empresas e-commerce disponen de un catálogo de productos inmenso y necesitan proponer (filtrar) aquellos productos que a priori pueden interesar al cliente. Cuanto más se acerquen a sus preferencias mayores probabilidades de compra/?
<img>amazon logo</img> <img>Netflix logo</img> <img>TikTok logo</img>
<img>Spotify logo</img>
<img>LinkedIn logo</img> <img>YouTube logo</img> <img>Facebook logo</img>
---
## Page 3
# ¿Cómo recomendar?
* Recomendar un item a un usuario
* Estimar el rating (preferencia) del usuario al item
* Filtros basados en contenidos
* Filtros colaborativos
* Context-aware recommenders
* Predecir el siguiente item que el usuario va a consumir
* Modelos secuenciales (RNN, transformers)
* Reinforcement Learning recommenders
* ...
* Bob Dylan>Joan Baez>Simon & Garfunkel>?
---
## Page 4
Filtro basado
en contenidos
Content-Based
Filtering (CBF)
---
## Page 5
# Filtros basados en contenidos (CBF)
Supongamos un sistema de recomendación de películas. ¿Cómo recomendar?
Predecimos el rating o preferencia del usuario a un conjunto de películas y le proponemos las películas con mayor valoración
Un sistema de recomendación se preguntaría ¿qué rating pondría yo 😊 a la película IT?
<img>IT movie poster with a child holding a red balloon</img>
<img>Orange smiley face with a question mark above its head</img>
---
## Page 6
# Filtros basados en contenidos (CBF)
1) Supongo que existe una función que devuelve mi rating a la película
f😊(IT) = y_IT😊 (rating)
2) ¿Cómo construyo esta función?
Supongo que conozco un conjunto de características de las películas 🎬: romance, acción, ciencia ficción, humor, ...
Asumo una función lineal
f😊(🎥)=θ😊₀ + θ😊romance (romance🎥) + θ😊acción (acción🎥) + θ😊ciencia fic. (ciencia fic.🎥) + ...
Los parámetros representan θ😊 mis preferencias hacia cada característica
Recojo datos pasados de películas valoradas por mi y estimo los parámetros θ😊 (regresión)
---
## Page 7
# Filtros basados en contenidos (CBF)
Datos pasados de mis valoraciones de otras películas
| Película |
Romance |
Acción |
Ciencia ficción |
Humor |
Duración (min) |
Año |
País:EEUU |
Rating Y_k😊 |
| Love Actually |
0.9 |
0 |
0 |
0.7 |
135 |
2003 |
1 |
3 |
| Matrix |
0 |
0.8 |
1 |
0.2 |
136 |
1999 |
1 |
4 |
| Django Unchained |
0.2 |
1 |
0 |
0.4 |
165 |
2012 |
1 |
4 |
| Amélie |
1 |
0 |
0 |
0.8 |
120 |
2001 |
0 |
2 |
Estimar θ😊 = encontrar los valores θ😊 que minimizan la función de costes
J(θ😊) = Σ(y_k😊 - f😊(x_k))²
---
## Page 8
# Filtros basados en contenidos (CBF)
1) Supongo que existe una función que devuelve mi rating a la película
f😊(IT) = y_IT😊 (rating)
2) ¿Cómo construyo esta función?
Supongo que conozco un conjunto de características de las películas 🎬: romance, acción, ciencia ficción, humor, ...
Asumo una función lineal
f😊(🎬)=θ😊₀ + θ😊romance (romance🎬) + θ😊acción (acción🎬) + θ😊ciencia fic. (ciencia fic.🎬) + ...
Los parámetros representan θ😊 mis preferencias hacia cada característica
Recojo datos pasados de películas valoradas por mi y estimo los parámetros θ😊 (regresión)
3) Calculo la predicción de rating para la película IT conocidas sus características
f😊(IT)=θ😊₀ + θ😊romance (romance_IT) + θ😊acción (acción_IT) + θ😊ciencia fic. (ciencia fic_IT) + ...
---
## Page 9
# Filtros basados en contenidos (CBF)
La principal desventaja del CBF es que se necesita definir y medir las características de todas las películas
¿Podemos hacer algo parecido pero sin tener que proponer y medir estas características?
Sí -> Filtro Colaborativo
---
## Page 10
Filtro
colaborativos
---
## Page 11
# Filtros Colaborativos
Y = [ y <img>movie reel icon</img> <img>smiling face with heart eyes emoji</img> ]
Modelos que utilizan exclusivamente la matriz de ratings de los usuarios
El adjetivo colaborativo se debe a que aprendemos de los datos que los propios usuarios generan al evaluar, puntuar o interactuar con los ítems, es decir, colaboran colectivamente en la construcción de la matriz de utilidad o matriz de ratings
No necesitamos conocer las características de los items (¡VENTAJA!)
Dos aproximaciones: basados en modelos y basados en memoria
---
## Page 12
Filtro
colaborativos:
basados en modelos
---
## Page 13
# Filtros Colaborativos basados en modelos
Descomponemos la matriz de ratings Y como producto de dos matrices X y Θ que capturan las características latentes de ítems (X) y de usuarios Θ
Y = XΘᵗ
Esto se llama problema de factorización matricial de bajo rango
<img>A diagram showing three matrices. The first matrix on the left is labeled "Items" with dimensions m x u. It has a red arrow pointing to it. The second matrix in the middle is labeled "Users" with dimensions k x u. It has a red arrow pointing to it. The third matrix on the right is labeled "Y" with dimensions m x k. It has a red arrow pointing to it. Below these matrices, the equation yᵢⱼ = θ₁(X₁) + θ₂(X₂) + ... + θₖ(Xₖ) is written.</img>
k es un parámetro del modelo y representa el tamaño del espacio de características latentes
X y Θ son matrices que representan las películas (filas) y los usuarios (columnas) en dicho espacio. Podemos interpretarlas como matrices de características y de preferencias, aunque sus valores no tienen el significado que damos en el caso del CBF
---
## Page 14
# Filtros Colaborativos basados en modelos
En los filtros colaborativos basados en modelos estimamos los parámetros (matrices X y Θ) minimizando una función de costes basada en MSE (enriquecida con los términos de regularización que evitan el overfitting)
J(θ) = Σ(y_ij - x_i θ_j^T)^2 + λΣ(x_ik)^2 + λΣ(θ_ik)^2
La función de costes es continua y derivable por lo que podemos utilizar técnicas de optimización basadas en el descenso del gradiente
---
## Page 15
# Filtros Colaborativos basados en modelos
Existe una **variante** del problema de factorización de bajo rango propuesta por **Koren, Bell y Volinsky (2009)** en el contexto del Netflix Prize (2008–2009)
Incluye sesgos (biases).
Cada predicción no es solo $X_i \cdot \theta_j^T$ sino que además sumamos un sesgo global $\mu$ (media de todos los ratings), un sesgo por usuario $b_j$ y un sesgo por ítem $b_i$
$y_{ij} = \mu + b_j + b_i + X_i \cdot \theta_j^T$
Los sesgos capturan que algunos usuarios tienden a puntuar más alto/bajo en general, y que algunos ítems suelen recibir mejores/peores valoraciones (son más o menos populares), independientemente de las características latentes
---
## Page 16
Filtro
colaborativos:
basados en memoria
---
## Page 17
# Filtros Colaborativos basados en memoria
No ajustamos ningún modelo, solo vamos a calcular similitudes entre usuarios o productos que utilizamos para estimar el rating
Por ejemplo, para la similitud entre usuarios:
|
Items |
| Usuarios |
U₁ |
U₂ |
U₃ |
U₄ |
U₅ |
| U₁ |
|
|
|
|
|
| U₂ |
1 |
3 |
4 |
5 |
|
| U₃ |
|
|
|
|
|
| U₄ |
2 |
4 |
3 |
5 |
4 |
| U₅ |
|
|
|
|
|
U₂ = [3, 4, 5]
U₄ = [4, 5, 4]
Sim₂,₄ = Cos(U₂, U₄)
---
## Page 18
# Filtros Colaborativos basados en memoria
* y
* yi,j = Σk wk yik
* Similitud entre usuario k y el usuario j
* Basado en usuarios: media ponderada de las evaluaciones de otros usuarios al item
* y
* yi,j = Σk wk ykj
* Similitud entre item k y el item i
* Basado en productos: media ponderada de los items ya evaluados por el usuario
Una vez calculadas las similitudes, calculamos un rating ...