Sistemas de recomendación: Filtrado colaborativo

En el artículo anterior, presentamos el sistema de recomendación: filtrado basado en contenido , que se puede calcular en función de los metadatos del producto, brinda opciones para hacer recomendaciones y recomienda productos que son más similares a los productos que los usuarios compraron en el pasado. hablará sobre cómo Un método para proporcionar recomendaciones explotando las similitudes entre usuarios y productos.

El filtrado colaborativo es un método que explota la similitud entre usuarios y productos para proporcionar recomendaciones. El filtrado colaborativo analiza usuarios similares o productos calificados de manera similar y recomienda usuarios en función de este análisis.

El filtrado colaborativo se divide en 3 subtítulos:

  1. Filtrado colaborativo basado en elementos
  2. Filtrado colaborativo basado en el usuario
  3. Filtrado colaborativo basado en modelos

Filtrado colaborativo basado en elementos

Este método es un método para analizar la similitud del producto o la evaluación de los productos por parte de los usuarios, y hacer sugerencias basadas en los resultados del análisis.

La siguiente tabla muestra las calificaciones de n películas por parte de m usuarios. Nos gustaría recomendar una película con calificaciones similares a "Split" a los usuarios que vieron y les gustó "Split".

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-F4m38xjs-1682045339104) (https://secure2.wostatic.cn/static/ nh9h3Jr1Vg6hJXUDBpw8nn/image.png?auth_key =1682045334-hR3aHVH6qXEDx5p5hi6sSV-0-28c9cff8b9c7b399781d9eaf4ec17bcd)]

En este caso, se puede recomendar Film 4 para este usuario, una película con una orientación similar (tanto gustos como disgustos) a Split.

Ejemplo:

Una plataforma de películas en línea quiere desarrollar un sistema de recomendación basado en filtrado colaborativo para satisfacer las necesidades y opiniones de su comunidad de usuarios. Cuando a un usuario le gusta una película, el sistema recomendará otras películas similares al usuario en función de patrones similares de agrado. Esto se hace para brindar servicios de recomendación más acordes con los gustos de los usuarios.

Sobre el conjunto de datos:

Película:

  • movieId: el id de la película
  • titulo: el titulo de la pelicula

puntaje:

  • userId: la identificación del usuario
  • movieId: el id de la película
  • puntuación: la calificación del usuario para la película
  • tiempo: la marca de tiempo de la partitura

Puede encontrar el conjunto de datos aquí . Para este proyecto, fusionaremos los conjuntos de datos "Películas" y "Calificaciones" en "Películas".

Al comienzo del proyecto, los conjuntos de datos se leen y fusionan. Puede ver el código completo del proyecto.

Cree un marco de datos de películas de usuario:

En este paso, crearemos el marco de datos de películas de usuario, pero no queremos escasez en él . Por ejemplo, supongamos que un usuario solo ha calificado una película. Incluso si se clasifica 1 película, ese usuario obtiene una celda para cada otra película en el marco de datos User-Movie. Esto retrasa la realización de los cálculos y provoca problemas de rendimiento. Para evitar estos problemas de cálculo y evitar que las películas vistas por muy pocos usuarios se incluyan en las recomendaciones, se debería realizar algún proceso de reducción.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-NJjLalb1-1682045339106) (https://secure2.wostatic.cn/static/ tzQaN2WcageQarx1ML3bi7/image.png?auth_key =1682045334-953F1nCidf8aWDcB97gct4-0-daae8c0d17ffa7c0c487a78b8a7ef502)]

Una vez que se completa el proceso de reducción, se crea una tabla dinámica con "ID de usuario" en la fila, "título" en la columna y "calificación" en la intersección.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-p2ul2z2v-1682045339107) (https://secure2.wostatic.cn/static/ vdy7Zgmi6TkiMCLBc5qvqt/image.png?auth_key =1682045334-hLTVuC2SE5iSoSes6rqkwo-0-3fbc2b9f5029a46b4ee56a4a2d262aef)]

En el marco de datos User-Movie, si un usuario no ha calificado una película, las celdas en su intersección se representan mediante NaN.

Predicción de películas basada en el artículo:

Dado que se ha creado la matriz de películas del usuario, es posible encontrar similitudes entre películas y otras películas observando las correlaciones entre películas.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-Anj2092j-1682045339108) (https://secure2.wostatic.cn/static/ 2iy6vG8s5iuj1ZmsHqSdVF/image.png?auth_key =1682045334-dRcHm7hYDyJ8DXr6Y9BiUU-0-ced5a18406c465187e8bc9101765922c)]

Después de seleccionar una película al azar, calcule la correlación de esta película con otras películas. Se pueden recomendar películas con una correlación alta, lo que significa que ya se recomendaron películas que exhiben un comportamiento similar a esta película.

Las películas también se pueden seleccionar y comprobar manualmente. Puede usar el fragmento de código a continuación para buscar por palabra clave para obtener los nombres completos de las películas en el conjunto de datos.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-9hD8sKvq-1682045339109) (https://secure2.wostatic.cn/static/ kY4A6szyKaaEMuQwAkXemy/image.png?auth_key =1682045334-wcxYQYrJkBNT71YaFZKnBH-0-fbdee8447299258434b1ee7fd4487e7c)]

Filtrado colaborativo basado en el usuario

El filtrado colaborativo es un método para analizar el comportamiento de los usuarios (me gusta, el primer sistema de recomendación de Toutiao) y proporcionar recomendaciones basadas en los gustos de los usuarios que mostraron un comportamiento similar.

[Falló la transferencia de la imagen del enlace externo, el sitio de origen puede tener un mecanismo de enlace antirrobo, se recomienda guardar la imagen y cargarla directamente (img-8poc35et-1682045339110) (https://secure2.wostatic.cn/static/ jDzmynpeqTU1zvE6BzSRCX/image.png?auth_key =1682045334-8c4xkU9KRsXyxAWNHcP76L-0-6bb4475fd07393e8ebcfcc19523b6018)]

Esta tabla muestra las calificaciones de n películas por parte de m usuarios. Las calificaciones de las películas no vistas por el usuario se dejan en blanco. Es necesario recomendar películas que sean similares al usuario 3 y que le puedan gustar. Para hacer esto, primero se deben encontrar los usuarios que exhiben un comportamiento similar. Se puede ver que el usuario que exhibe un comportamiento similar en la película evaluada por el usuario 3 es el usuario 2, y luego selecciona la película 3 que le gusta al usuario 2 pero que el usuario 3 no ha visto para recomendarla. Como resultado de esta sugerencia, se espera que al usuario 3 le guste la película.

Ejemplo:

En este proyecto, se utilizará el mismo conjunto de datos utilizado en el filtrado colaborativo basado en elementos. La operación se realizará en un marco de datos de película de usuario creado en un proyecto basado en proyecto. Aquí está el código completo del proyecto, el proceso de inspección del conjunto de datos y la creación del marco de datos.

Determine qué películas recomendar a un usuario que vea:

Los usuarios son seleccionados al azar. Después de esta selección, el marco de datos de películas debe reducirse para este usuario. De esta forma, se pueden determinar las películas que el usuario ha visto.

A través de len(movies_watched), se encuentra que random_user ha visto 33 películas.

Visita a otros usuarios viendo la misma película:

En este paso, primero debemos averiguar cuántas películas han visto otros usuarios con usuarios aleatorios.

En este punto, necesitamos una restricción porque un usuario que solo haya visto 1 o 2 películas promedio con random_user no será un criterio para el proceso de recomendación.

Identificar los usuarios con el comportamiento más similar al usuario a sugerir

Esto se hará en 3 pasos:

Paso 1: Agregar random_user y los datos de otros usuarios

Paso 2: Crear el marco de datos asociado

Paso 3: encuentre los usuarios más similares (usuarios principales)

El valor encontrado en la etapa anterior es el valor relevante para todos los usuarios. El propósito es cubrir usuarios con alta correlación con random_user. Por lo tanto, seleccione usuarios con una correlación superior a 0,65.

Calcule la puntuación media ponderada del recomendador:

Si se ordena por rango, se ignora la influencia de la relevancia, y si se ordena por relevancia, se ignora la influencia del rango. Para evitar esto y ver el impacto de ambos, multiplicaremos estos dos valores para obtener una nueva variable llamada "weighted_rating" y ordenaremos según eso.

De esta forma, se pueden hacer recomendaciones como las anteriores a los usuarios, teniendo en cuenta la relevancia y las valoraciones.

Filtrado colaborativo basado en modelos (factorización de matriz)

En el filtrado colaborativo basado en modelos, este problema se aborda de manera más integral. Supongamos que hay un problema que necesita ser optimizado.

El objetivo es predecir y llenar las celdas marcadas EN BLANCO en la matriz de m usuarios y n películas.

Para llenar los vacíos, se encuentran ponderaciones para "características latentes" que asumen la presencia de usuarios y películas en los datos existentes, y se utilizan estas ponderaciones para hacer predicciones para observaciones que no existen.

La matriz User-Movie se descompone en 2 matrices con menos dimensiones. Suponga que la transformación de matriz 2 a matriz de película de usuario ocurre bajo factores latentes. Los pesos de los factores latentes se encuentran en las observaciones llenas y las observaciones vacías se llenan con los pesos encontrados.

Para entender este proceso más claramente, es útil pasar por un ejemplo.

Tenemos una matriz de películas de usuarios como la anterior y queremos estimar valores nulos aquí. Primero, lo dividimos en 2 matrices de menor dimensión, factores de usuario y factores de película.

En este punto, los pesos de los factores latentes en las observaciones de la población deberían verse así:

Todos los valores de p y q se encuentran de forma iterativa sobre los valores existentes y se utilizan. Inicialmente, intenta predecir valores aleatorios de p y q y valores en la matriz de puntuación. En cada iteración se programan las estimaciones equivocadas y se intenta aproximar los valores en la matriz de calificación. Así, como resultado de una iteración particular, las matrices p y q se llenan.

Para entender si un pronóstico es bueno o malo, se necesita una medida común. Para hacer esto, sume los cuadrados de las diferencias entre todos los valores estimados y reales, saque la raíz cuadrada y luego promedie (valores RMSE y MSE). Esto nos da información sobre todos los datos. De esta forma, podemos obtener información sobre el error medio de las predicciones que hicimos al principio del estudio a partir de los valores asignados a las matrices de usuario y película. Actualice los valores p y q para minimizar este error.

Descenso de gradiente para la factorización de matrices:

Una forma de encontrar los pesos de p y q es usar el descenso de gradiente. El descenso de gradiente es un método de optimización para la minimización de funciones.

Los valores de los parámetros se actualizan iterativamente en la dirección del "descenso más pronunciado" (definido como el valor negativo del gradiente), y se encuentran los parámetros que darán el valor mínimo de la función asociada.

Aquí, los pesos en las matrices p y q se intercambian según la derivada. La derivada de una función en un punto da la dirección máxima en la que crece la función. Los valores de los parámetros se actualizan para minimizar la función de correlación cuando iterativamente a lo largo de la dirección negativa definida como gradiente, es decir, opuesta a la dirección creciente.

Ejemplo:

En este proyecto final de filtrado colaborativo, se utilizarán los mismos conjuntos de datos utilizados en el filtrado colaborativo basado en elementos y en el usuario. Aquí está el código completo para el proyecto que verifica el proceso del conjunto de datos .

Preparación de datos:

Para la trazabilidad, reduciría el conjunto de datos en función de estas 4 películas y sus identificadores y crearía un marco de datos de películas de usuario a partir del conjunto de datos reducido.

Dado que este proyecto utiliza la biblioteca sorpresa y tiene su estructura de datos especial, movie_user_df debe convertirse a esta estructura especial.

Modelado:

Para el paso de modelado, los datos primero deben dividirse en conjuntos de entrenamiento y prueba con una proporción de 75% y 25%. A continuación, se debe crear el objeto modelo para SVD y ajustarlo al conjunto de entrenamiento. A continuación, el modelo debe probarse en el conjunto de prueba.

La métrica RMSE puede ser más adecuada para evaluar el error medio de los pronósticos.

El valor de puntuación real de la unidad de visualización cuyo ID de usuario es 1.0 y movieId es 541 es el siguiente.

Cuando hicimos predicciones con el modelo que construimos para la misma unidad de observación, obtuvimos una puntuación de 4.33:

Ajustes del modelo:

En este paso se realizará la optimización del modelo, es decir, se intentará aumentar el rendimiento predictivo del modelo. Esto se logrará mediante la optimización de hiperparámetros.

Teniendo en cuenta las fórmulas discutidas en la sección de teoría, los hiperparámetros son época, factor latente, tasa de aprendizaje y λ. Para la optimización de hiperparámetros, definiremos el conjunto de parámetros para la época y la tasa de aprendizaje de la siguiente manera. Luego, al probar estos conjuntos de parámetros posibles con GridSearchCV, se calcula el error promedio para la combinación de época y tasa de aprendizaje, lo que dará el error promedio más bajo posible.

Modelo final y predicciones:

Los valores predeterminados del modelo y los mejores parámetros que encontramos con GridSearchCV son diferentes entre sí. Por lo tanto, el objeto del modelo SVD debe recrearse con estos parámetros óptimos.

Hasta ahora, hemos dividido los datos en conjuntos de prueba y entrenamiento, verificado los errores y optimizado los hiperparámetros. Si el modelo se basa en datos más grandes, puede aprender mejor. Por lo tanto, el modelo se construirá sobre todos los datos.

El proceso de predicción del par userId-movieId en el paso de modelado:

En el paso de modelado, el valor previsto para un ID de usuario de 1,0 y un ID de película de 541 es 4,33. Después de la optimización de hiperparámetros, puede ver que la nueva predicción es 4.23. Después de la optimización de hiperparámetros, el proceso de predicción se ha realizado más cerca del valor real (4,00), es decir, el error ha disminuido.

El modelo optimizado resultante proporciona la probabilidad de hacer predicciones sobre el par deseado de película y usuario. Una vez hechas las predicciones pertinentes, se pueden proyectar las películas. A estos usuarios se les recomiendan películas con calificaciones altas previstas para ciertos usuarios.

Supongo que te gusta

Origin blog.csdn.net/stone1290/article/details/130283232
Recomendado
Clasificación