2 votos

¿Cómo encontrar la similitud entre las preferencias de películas (en forma de vector de probabilidades) de dos usuarios?

Estoy trabajando en sistemas de recomendación, y utilizando alguna metodología he obtenido una probabilidad de que a cada usuario le guste una película. Para explicarlo, digamos que el usuario $u_1$ tiene la siguiente distribución de preferencias de películas sobre $8$ películas:

m1     m2    m3   m4    m5    m6    m7   m8
0.12   0.2   0    0.15  0.15  0.3   0    0.08

Esto demuestra la preferencia de $u_1$ hacia el cine. Así que $u_1$ prefiere el cine $m_6$ los más , $m_4$ y $m_5$ por igual, y así sucesivamente. A $0$ significa que $u_1$ no ha visto películas $m_3$ y $m_7$ .

Del mismo modo tengo los valores de probabilidad para otro usuario $u_2$ en estas 8 películas. Necesito saber cómo calcular la similitud entre estos dos vectores de probabilidad, porque esto me ayuda a encontrar los usuarios más similares a un usuario dado, y esto es lo que me ayuda en filtrado colaborativo .

Conozco un método llamado similitud del coseno, pero no estoy seguro de que sea la mejor manera de encontrar la similitud en este contexto. ¿Hay otros métodos para encontrar la similitud entre dos usuarios?

1voto

Carlos Lima Puntos 2579

Q1: ¿Cuál es la similitud entre las preferencias cinematográficas de dos usuarios?

A1: Depende. Primero hay que definir el aspecto de similitud que está buscando. En mi opinión, para saber esto aspecto Antes de eso, tiene que especificar su objetivo de conocer esta puntuación de similitud.

¿Necesitas esta medida de similitud para crear clusters de usuarios con ideas similares, y luego usar las películas que ven para recomendarlas a otros en el mismo cluster que aún no las han visto?

Digamos que $S$ es la variable aleatoria de puntuación, $U$ es la variable aleatoria de los usuarios, y $M$ es la variable aleatoria de las películas. Para cualquier usuario $u_i$ y cualquier película $m_j$ Lo que queremos es conocer esta expectativa de puntuación: $$ \mathbb{E}\big[S|U=u_i, M=m_j\big] $$

Si la película $m_j$ no es visto por el usuario $u_i$ , y luego la película $m_j$ es un candidato para ser recomendado a $u_i$ . Si la expectativa de puntuación para la película $m_j$ es suficiente, es decir, mayor que algún umbral $t$ entonces lo recomendaremos al usuario $u_i$ .

Pero, ¿cómo podemos encontrar $\mathbb{E}\big[S|U=u_i, M=m_j\big]$ ? Seguimos en el pasado donde el usuario $u_i$ no ha visto $m_j$ .

Por lo tanto, necesitamos encontrar su estimación $\mathbb{\widehat E}\big[S|U=u_i, M=m_j\big]$ .


Q2: ¿Cómo podemos estimar $\mathbb{\widehat E}\big[S|U=u_i, M=m_j\big]$ ?

A2: Tenemos que ver el comportamiento del usuario $u_i$ en relación con las películas anteriores que $u_i$ ha visto, y luego mira cómo la película similar $m_j$ es a las películas pasadas, y en base a esta similitud decidir la puntuación que $u_i$ lo daría si lo mira.

Pero podemos hacerlo aún mejor si observamos a los usuarios de comportamiento similar $u_a,u_b, \ldots$ à $u_i$ para mejorar nuestra predicción de $\mathbb{\widehat E}\big[S|U=u_i, M=m_j\big]$ .

Podemos hacerlo aún mejor si también tenemos en cuenta los acontecimientos mundiales en general (¿lo llamamos contexto, tal vez?). Por ejemplo, ciertos acontecimientos recientes pueden hacer que ciertos usuarios acaben queriendo ver cosas diferentes.

Para abreviar, prueba esto:

  1. Representar a todos los usuarios como $n$ vectores dimensionales. Los componentes de dichos vectores podrían ser las calificaciones de las películas, o podrían ser otras cosas como la forma en que revisan las películas, o incluso cómo hacen clic y navegan por el sitio web de streaming de películas. La representación del usuario es muy general, lo que mencionas arriba (por ejemplo, las calificaciones de las películas) es sólo un caso especial de representación del usuario .
  2. Representar cada película como un $m$ vector dimensional. Hay muchas formas de hacerlo. Mirar simplemente la lista de clasificaciones de usuarios para la película es sólo un caso especial de representación de la película. Puedes mirar cosas como la duración de la película, la distribución del sonido, la distribución de los efectos visuales, los nombres de los personajes que aparecen en la película, etc. (¡Incluso puedes llegar al extremo de poner toda la película de forma que cada dimensión represente el valor del byte! Pero esto podría ser demasiado extremo).
  3. Crear un conjunto de datos tal que cada triple usuario-película-puntuación se represente como un vector. Esto nos dará una $n+m+1$ vector dimensional (recordemos que $n$ es la representación del usuario, y $m$ es la representación de la película). La puntuación es sólo un número, por lo que se suma sólo $+1$ a la dimensionalidad. Digamos que tiene $1000$ usuarios, entonces tendrá $1000$ filas, donde cada fila es un $n+m+1$ vector dimensional. También se puede añadir la información de contexto a cada fila del conjunto de datos (por ejemplo, aumentando una representación del contexto como $c$ vector dimensional, por lo que cada fila se convierte en $n+m+c+1$ vector dimensional).
  4. Entrene los bosques aleatorios en este conjunto de datos y pídale que analice el $n+m$ (componentes usuario-película) para predecir el último componente (la puntuación de la película). Esto le dará un modelo de regresión.

A continuación, para utilizar este modelo para predecir las puntuaciones, repita los mismos pasos del 1 al 3, excepto para emparejar a los usuarios con las películas que no han visto. A continuación, conecte estos vectores con el modelo de regresión Random Forests para obtener una puntuación esperada para la tuple usuario-película de prueba. Finalmente, si esta puntuación es lo suficientemente alta, se recomienda la película de prueba al usuario de prueba.

¿Por qué es bonito?

  • Los bosques aleatorios no son paramétricos y pueden identificar patrones no lineales.
  • Fácil de distribuir.

Q3: ¿Puede utilizar otros métodos de regresión?

A3: Sí. Tienes que elegir el algoritmo que parece funcionar mejor en tu dominio. He sugerido Random Forests porque creo que es una buena línea de base para empezar, pero puedes probar otros más sofisticados como los algoritmos de aprendizaje profundo junto con diferentes métodos de representación de tus usuarios y sus películas.

0voto

MaharajaX Puntos 133

En primer lugar, asegúrese de preprocesar los datos. También haz las normalizaciones.

Aquí tienes algunas opciones:

  1. similitud del coseno: se utiliza si el número de películas es pequeño y los datos son densos. Si las calificaciones son dispersas, es decir, si los usuarios a y b no califican las mismas películas, esto fallaría, porque los dos usuarios serían ortogonales en el espacio vectorial.

distancia euclidiana: produce resultados comparables a la similitud del coseno cuando los datos están normalizados y se enfrenta a los mismos problemas que la similitud del coseno

  1. factorización matricial: esencialmente encontrar vectores latentes para cada película y cada usuario. La similitud entre dos usuarios es simplemente la similitud del coseno de sus vectores latentes. Esto es útil cuando los datos son escasos.

0voto

Humpity Puntos 33

El análisis de correspondencia (AC), una variante del ACP, será el mejor método para dicho análisis. El AC implica un enfoque probabilístico. Proporciona una visualización gráfica bidimensional (biplot) que contiene puntos correspondientes a cada usuario y a cada película. Los usuarios de la misma categoría se colocan juntos. Las mismas películas se colocarán juntas (puede ser debido al género de las películas). También se pueden encontrar las películas que más gustan a un usuario utilizando el concepto de producto interno de vectores. El código para CA se puede encontrar en Internet y es fácil de usar.

0voto

Carlos Lima Puntos 2579

Esta es una visión alternativa a la respuesta aquí .

Usuario $u_i$ no ha visto la película $m_j$ todavía, pero ¿cuál es la probabilidad de que el usuario $u_i$ dará la película $m_j$ una puntuación que es $\ge t$ ¿si lo ve?

Digamos que el conjunto de puntuaciones de películas es discreto y es $\mathcal{S}$ . Lo cual es habitual. Por ejemplo, en un sistema de clasificación de 5 estrellas $\mathcal{S} = \{\frac{1}{5}, \frac{2}{5}, \frac{3}{5}, \frac{4}{5}, \frac{5}{5}\}$ . También digamos que $\mathcal{U}$ es el conjunto de usuarios, y $\mathcal{M}$ es el conjunto de películas.

$t$ es algún umbral que definimos y que creemos que es un buen punto de corte que nos dice cuándo es digno de recomendar una película a alguien. Quizás $t = \frac{4}{5}$ es una buena idea.

Digamos que $S$ es una puntuación r.v. que toma valores en $\mathcal{S}$ , $U$ son usuarios r.v. que toman valores en $\mathcal{U}$ et $M$ es películas r.v. que toman valores en $\mathcal{M}$ .

Entonces queremos encontrar esta probabilidad:

$$ P = \sum_{s \in \mathcal{S}:s \ge t}\Pr(S=s|U=u_i, M=m_j) $$

Sólo si $P > 0.5$ recomendamos la película $m_j$ al usuario $u_i$ .

Digamos que tenemos $n$ número de calificaciones de películas que su puntuación es $\ge t$ . Algunas de las valoraciones son por parte del usuario objetivo $u_i$ en diferentes películas, algunos más de ellos están en la película de destino $m_j$ pero por usuarios diferentes $u_k$ donde $k \ne i$ y, por lo general, la gran mayoría de ellos son de diferentes usuarios en diferentes películas.

$$ \widehat{\Pr}(S=s|U=u_i, M=m_j) = \frac{1}{n}\sum_{k\in\mathcal{U}}\sum_{l\in\mathcal{M}}\begin{cases} \texttt{sim}^*(u_i,u_k,m_j,m_l) & \text{ if } \texttt{score}(u_k,m_l) \ge s\\ 0 & \text{ if } \texttt{score}(u_k,m_l) < s\\ \end{cases} $$

Donde $\texttt{sim}^*(u_i,u_k,m_j,m_l)$ es una puntuación de similitud en $[0,1]$ es decir $1$ cuando $u_i$ es perfectamente similar a $u_k$ y $m_j$ es perfectamente similar a $m_l$ (es decir $u_i=u_k, m_j=m_l$ que nunca sucede), y es $0$ cuando $u_i$ es perfectamente dis similar a $u_k$ y $m_j$ es perfectamente dis similar a $m_l$ . Así que normalmente esta puntuación de similitud está entre $0$ y $1$ .

Así que lo que te sugiero es que renuncies a sólo buscando similitudes entre usuarios, y -en su lugar- ampliarlo a las similitudes entre usuarios y películas.

Hay que encontrar un equilibrio entre la importancia del usuario y las similitudes de las películas. Por ejemplo, si un usuario es extremadamente dis similar a $u_i$ pero ve una película que es extremadamente similar a la película $m_j$ Pero, sin embargo, le dice algo que es más que nada, y es mejor que considere ese algo. Pero si tanto el usuario como la película son dis similar a $u_i$ y $m_j$ entonces probablemente puedas ignorarlo.

Es necesario encontrar el $\texttt{sim}^*$ función. Esto se puede hacer buscando todas esas funciones de similitud y sólo elegir la que minimice algún error. El error que sugiero minimizar es este: $$ \texttt{sim}^* = \underset{\texttt{sim} \in \mathcal{H}}{\text{arg min }}\sum_{i \in \mathcal{U}}\sum_{j \in \mathcal{M}} \sum_{k \in \mathcal{U}}\sum_{l \in \mathcal{M}}|\texttt{sim}(u_i,u_k,m_j,m_l) \times \texttt{score}(u_i, m_j) - \texttt{score}(u_k, m_l)| $$ donde $\mathcal{H}$ es el espacio de las funciones.

Simplemente, se puede asumir que $\texttt{sim}^*$ es un polinomio, y luego utilizar cosas como el descenso de gradiente o la búsqueda en cuadrícula, o cualquier búsqueda adecuada para $\texttt{sim}^*$ y terminar encontrando su estimación $\widehat{\texttt{sim}}^*$ (debido a las limitaciones en la suposición de que $\texttt{sim}^*$ es un polinomio y limitaciones en el algoritmo de búsqueda). En cuanto a los usuarios y las películas, puedes representarlos como vectores, tal y como se describe aquí .

Nota: No estoy seguro del objetivo de minimización anterior. Creo que se puede simplificar al menos.

0voto

Carlos Lima Puntos 2579

Digamos que tenemos películas $m_1, m_2, \ldots, m_n$ . Así que tenemos $n$ muchas películas.

También digamos que tenemos usuarios $u_1, u_2, \ldots, u_k$ . Así que tenemos $k$ muchos usuarios.

Ahora ha elegido a dos usuarios de entre esos $k$ muchos usuarios. A saber: $u_1$ y $u_2$ usuarios.

Ahora, tu objetivo es encontrar la similitud entre estos dos usuarios $u_1$ y $u_2$ .

He aquí una heurística:

  1. Encuentre todas las películas comunes que fueron calificadas por los usuarios $u_1$ y $u_2$ . Digamos que los dos usuarios sólo tienen en común las siguientes clasificaciones de películas (digamos) $m_5, m_7, m_9, m_{12}$ .

  2. Cree esta tabla para cada usuario:

         | m_5 | m_7 | m_9 | m_12
    -----+-----+-----+-----+------
    u_1  | 0.1 | 0.8 | 0.5 | 0.3
    u_2  | 0.15| 0.7 | 0.6 | 0.8
  3. A continuación, encuentre las diferencias absolutas de las películas:

         | m_5 | m_7 | m_9 | m_12
    -----+-----+-----+-----+------
    u_1  | 0.1 | 0.8 | 0.5 | 0.3
    u_2  | 0.15| 0.7 | 0.6 | 0.8
    -----+-----+-----+-----+------
    diff | 0.05| 0.1 | 0.1 | 0.5
  4. A continuación, halla la media de las diferencias absolutas: $\frac{0.05 + 0.1 + 0.1 + 0.5}{4} = 0.1875$ .

La similitud entre los dos usuarios es entonces $0.1875$ .

Pero esta simple respuesta es realmente mala para cualquier escenario de la vida real por al menos las siguientes razones:

  • Ignora tiempo . Supone que si dos usuarios valoraron una película de forma similar en el pasado, entonces es exactamente igual de importante que si lo hicieran en el presente. Esto es realmente una suposición poco realista porque las personas crecen de forma diferente con el tiempo a medida que envejecen. Por lo tanto, es importante tener en cuenta el tiempo de calificación y penalizar los eventos más antiguos para que estén menos relacionados.
  • Ignora otros aspectos del comportamiento de los usuarios que pueden dar pistas sobre sus preferencias cinematográficas. Básicamente, asume que sólo conocer las valoraciones de las películas de los usuarios es suficiente para predecir qué películas les gustarán en el futuro. Lo cual, obviamente, no es realista. Cuanto más información obtengamos sobre los usuarios, más podremos predecir su comportamiento. Por supuesto, hay un límite de tamaño de los datos a partir del cual el rendimiento empieza a disminuir, pero creo que estamos muy lejos de esos límites y tenemos mucho margen para incorporar más información.

Estas limitaciones se aplican a todas las demás respuestas (incluida ésta, obviamente). Lo que he tratado de abordar en mis otras respuestas es una solución mejor que no tiene esos.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X