## 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/?

&lt;img&gt;amazon logo&lt;/img&gt; &lt;img&gt;Netflix logo&lt;/img&gt; &lt;img&gt;TikTok logo&lt;/img&gt;
&lt;img&gt;Spotify logo&lt;/img&gt;

&lt;img&gt;LinkedIn logo&lt;/img&gt; &lt;img&gt;YouTube logo&lt;/img&gt; &lt;img&gt;Facebook logo&lt;/img&gt;

---


## 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?

&lt;img&gt;IT movie poster with a child holding a red balloon&lt;/img&gt;
&lt;img&gt;Orange smiley face with a question mark above its head&lt;/img&gt;

---


## 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

<table>
  <thead>
    <tr>
      <th>Película</th>
      <th>Romance</th>
      <th>Acción</th>
      <th>Ciencia ficción</th>
      <th>Humor</th>
      <th>Duración (min)</th>
      <th>Año</th>
      <th>País:EEUU</th>
      <th>Rating Y_k😊</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Love Actually</td>
      <td>0.9</td>
      <td>0</td>
      <td>0</td>
      <td>0.7</td>
      <td>135</td>
      <td>2003</td>
      <td>1</td>
      <td>3</td>
    </tr>
    <tr>
      <td>Matrix</td>
      <td>0</td>
      <td>0.8</td>
      <td>1</td>
      <td>0.2</td>
      <td>136</td>
      <td>1999</td>
      <td>1</td>
      <td>4</td>
    </tr>
    <tr>
      <td>Django Unchained</td>
      <td>0.2</td>
      <td>1</td>
      <td>0</td>
      <td>0.4</td>
      <td>165</td>
      <td>2012</td>
      <td>1</td>
      <td>4</td>
    </tr>
    <tr>
      <td>Amélie</td>
      <td>1</td>
      <td>0</td>
      <td>0</td>
      <td>0.8</td>
      <td>120</td>
      <td>2001</td>
      <td>0</td>
      <td>2</td>
    </tr>
  </tbody>
</table>

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 &lt;img&gt;movie reel icon&lt;/img&gt; &lt;img&gt;smiling face with heart eyes emoji&lt;/img&gt; ]

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

&lt;img&gt;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.&lt;/img&gt;

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:

<table>
  <thead>
    <tr>
      <th></th>
      <th colspan="5">Items</th>
    </tr>
    <tr>
      <th>Usuarios</th>
      <th>U₁</th>
      <th>U₂</th>
      <th>U₃</th>
      <th>U₄</th>
      <th>U₅</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>U₁</td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td>U₂</td>
      <td>1</td>
      <td>3</td>
      <td>4</td>
      <td>5</td>
      <td></td>
    </tr>
    <tr>
      <td>U₃</td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
    <tr>
      <td>U₄</td>
      <td>2</td>
      <td>4</td>
      <td>3</td>
      <td>5</td>
      <td>4</td>
    </tr>
    <tr>
      <td>U₅</td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tbody>
</table>

U₂ = [3, 4, 5]
U₄ = [4, 5, 4]

Sim₂,₄ = Cos(U₂, U₄)

---


## Page 18

# Filtros Colaborativos basados en memoria

*   y
    *   y<sub>i,j</sub> = Σ<sub>k</sub> w<sub>k</sub> y<sub>ik</sub>
        *   Similitud entre usuario k y el usuario j
        *   Basado en usuarios: media ponderada de las evaluaciones de otros usuarios al item
*   y
    *   y<sub>i,j</sub> = Σ<sub>k</sub> w<sub>k</sub> y<sub>kj</sub>
        *   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 ...