Filtrado Colaborativo Usuario-Usuario Para bromas Recomendación

Profundicemos en detalle y veamos varios puntos de configuración para cada paso.

Normalización de datos

Las calificaciones están muy influenciadas por la escala de individuos. Algunas personas son de buen corazón mientras califican y tienden a calificar alto, mientras que otras son de corazón frío y tienden a dar calificaciones medias para un buen contenido. La normalización es una forma de compensar el comportamiento de un usuario al ajustar la escala de calificación para que sea comparable o al mismo nivel que las calificaciones de otros usuarios.

Una técnica sencilla para normalizar las calificaciones es restar el promedio de calificación de cada usuario de sus calificaciones.

Aquí es la implementación de python de la normalización.

def normalization(dataframe):
dataframe_mean = dataframe.mean(axis=1)
return dataframe.subtract(dataframe_mean, axis = 'rows')

Implementemos este método para el conjunto de datos chistes. Para fines de demostración, seleccionaremos calificaciones de 10 usuarios para los primeros 10 chistes.

Fuente: Imagen de autor

también podemos implementar otras configuraciones en el paso de normalización.

La puntuación Z es otra forma posible de normalizar los datos de calificación donde el valor normalizado indica cuántas desviaciones estándar de la media es nuestra puntuación.

Computación en la Similitud

Cómputo de similitud entre los usuarios es la tarea principal en los algoritmos de filtrado colaborativo. La similitud entre usuarios (también conocida como la distancia entre usuarios) es un método matemático para cuantificar cuán diferentes o similares son los usuarios entre sí. Para un algoritmo de CF Usuario-Usuario, se calcula primero la similitud, sim between entre los usuarios x e y que tienen los mismos elementos clasificados. Para calcular esta similitud se utilizan diferentes métricas. Usaremos métricas de similitud basadas en correlación para calcular la similitud entre el usuario x y el usuario y, sim using usando correlación de Pearson

La elección de la correlación de Pearson tiene sentido, ya que las métricas de similitud, ya que los datos de calificación para cada usuario tienden a distribuirse normalmente. Al igual que otros coeficientes de correlación, este varía entre -1 y +1 con 0 que no implica correlación. Las correlaciones de -1 o + 1 implican una relación lineal exacta. Las correlaciones positivas entre el usuario x y el usuario y implican que si el usuario x ha calificado un chiste como positivo, hay una probabilidad muy alta de que el usuario y también califique positivamente el mismo chiste.

Aquí está la implementación de python de la Correlación de Pearson usando el paquete scipy.

def similarity_pearson(x, y):
import scipy.stats
return scipy.stats.pearsonr(x, y)

Ahora implementamos el método mencionado anteriormente para encontrar la similitud de Pearson para el conjunto de datos de calificaciones. Tenga en cuenta que aquí estamos evaluando la similitud utilizando el conjunto de datos de calificaciones y no por el conjunto de datos de calificaciones normalizadas porque el método de correlación de Pearson se encarga del paso de normalización.

Fuente: Imagen de autor

también podemos implementar otras configuraciones en el cómputo de similitud paso.

La similitud de coseno es otra configuración posible para calcular la similitud entre dos usuarios al calcular el coseno de los ángulos entre dos vectores de clasificación y determinar si ambos vectores apuntan en la misma dirección aproximadamente. La similitud de cosenos se usa a menudo para medir la similitud de documentos en el análisis de texto.

la Selección de Vecinos

Usuario-Usuario filtrado colaborativo (UUCF) enfoque depende en gran medida del usuario activo barrio de la información para hacer predicciones y recomendaciones. La selección de vecindario puede hacer o romper la recomendación para un usuario activo y puede tener una relación directa con la predicción de calificación y la recomendación de artículos.

Actualmente, cualquier sistema de recomendación comercial tiene un número muy grande de usuarios, por lo que el vecindario debe estar compuesto por el subconjunto de usuarios si el sistema de recomendación quiere garantizar un tiempo de respuesta aceptable.

La siguiente figura muestra cuatro enfoques tradicionales para seleccionar vecindarios.

Fuente: Imagen por autor
  1. Usar todo el conjunto de datos cuando el conjunto de datos es muy pequeño
  2. Seleccionar el conjunto de datos cuando la puntuación de similitud está por encima de cierto umbral
  3. Seleccionar el conjunto de datos N superior por puntuación de similitud
  4. Seleccionar un clúster similar mediante un método de agrupación en clúster como K-Mean

Utilizaremos el enfoque de umbral para seleccionar vecindarios para un usuario. Designemos al usuario del índice 2 como nuestro usuario activo.

Imagen de autor

El activo usuario ha leído sólo 4 de cada 10 de los chistes, así que vamos a averiguar, que el chiste de los restantes 6 será la mejor recomendación para el usuario activo.

Seleccionemos un umbral de 0.1 o superior para filtrar los vecinos.

Aquí está la implementación de python para encontrar vecinos similares utilizando el método de umbral. Aquí » sim » implica para matriz de similitud de tipo serie pandas.

def neighbours(sim):
return for i, v in enumerate(sim) if v>=0.1]

Aquí está la captura de pantalla de la matriz de similitud para nuestro usuario activo. Asegúrese de eliminar la propia similitud del usuario activo antes de trabajar.

Fuente: Imagen de autor

vamos a la aplicación de los «vecinos» método para la similitud de la matriz.

Imagen de autor

Como es evidente a partir de la imagen de arriba, aquí solo los usuarios con un índice de 3, 4, 6, 9 requisitos para ser vecinos.

Pero en cualquier sistema de recomendación comercial que tenga un gran número de datos, podemos terminar con un gran número de vecinos si optamos por el método de umbral. Así que surge la pregunta, ¿cuántos vecinos?

Teóricamente hablando, cuanto más mejor, si tenemos una buena matriz de similitud. Pero prácticamente, el ruido de vecinos diferentes disminuye la utilidad. si mezclamos muchos vecinos de baja similitud, la diferencia con el usuario objetivo puede comenzar a degradar la calidad de la recomendación. Entre 25-100, los vecinos de alta similitud a menudo se usan en sistemas de recomendación prácticos y comerciales.

Puntuación de elementos

La puntuación de elementos utilizando las clasificaciones de vecindario es el núcleo de la creación de un modelo de filtrado colaborativo. El promedio ponderado es uno de los métodos más comunes para la construcción de un sistema de puntuación. Utilizaremos el promedio ponderado para calcular la puntuación de nuestros artículos.

The first step is to select only those items which hadn’t yet been rated by the active user

Image by author

En nuestro caso, es joke_1, joke_2, joke_3, joke_4, joke_9, y joke_10. Dado que los cuatro chistes restantes ya están clasificados, no anotaremos esos artículos.

A continuación se muestra la captura de pantalla del marco de datos pandas neighbor_rating y neighbor_similarity. Vamos a estos dos dataframes y dataframe de calificaciones para crear puntuaciones para cada broma. Tenga en cuenta que aquí estamos utilizando el dataframe de calificación normalizado para encontrar la clasificación de vecinos.

Source: Image by author

Here is the python implementation to calculate the score of the items.

def score_item(neighbor_rating, neighbor_similarity, ratings ):
# aumr -> active user mean rating
aumr = np.mean(ratings.iloc)
score = np.dot(neighbor_similarity, neighbor_rating) + aumr
data = score.reshape(1, len(score))
columns = neighbor_rating.columns
return pd.DataFrame(data = data , columns = columns)

We will implement «score_item” method to find the score of all the jokes.

Source: Imagen del autor

Aquí, es claramente visible que joke_2 tiene la puntuación más alta, y joke_4 tiene la más baja.

Selección de ítems

Una vez que se decida la puntuación del ítem, el ítem con la puntuación máxima será la mejor recomendación. Por lo tanto, en nuestro caso, joke_2 será la recomendación más adecuada para nuestro usuario activo.

Recomendar broma 2 a nuestro usuario activo

Sin embargo, hay una alta probabilidad de que al usar este método la recomendación pueda saturarse a solo unas pocas recomendaciones cada vez. Esto puede conducir a una degradación de la calidad de la recomendación.

Una solución simple a este problema es tomar los elementos con puntuación positiva de top n y recomendar aleatoriamente uno de ellos.

Las trampas del filtrado Colaborativo Usuario-Usuario

Los sistemas de filtrado Colaborativo Usuario-Usuario han tenido mucho éxito en el pasado, pero su uso generalizado ha revelado algunos desafíos reales. Vamos a discutir brevemente los cuatro desafíos clave de usar un sistema de este tipo:

Arranque en frío :

Si un usuario es nuevo, no se puede calcular su similitud con otros usuarios, ya que el sistema puede no tener ningún tipo de datos sobre este nuevo usuario.Escalabilidad

:

A medida que el número de usuarios o elementos comenzó a aumentar, el filtrado colaborativo usuario-usuario sufre una caída en el rendimiento debido al crecimiento en el cálculo de similitud.

Escasez de datos:

Con conjuntos de elementos grandes, un pequeño número de calificaciones, a menudo hay situaciones en las que no se puede hacer una recomendación adecuada para el usuario.

Influenciar:

Una organización o persona puede manipular deliberadamente la predicción que se hace para otros creando múltiples cuentas civiles y poniendo calificaciones falsas.

Conclusión

El enfoque de filtrado colaborativo Usuario-usuario es la tecnología más utilizada y estudiada para hacer recomendaciones y ha sido ampliamente adoptada en toda la industria. El concepto central detrás de este enfoque es que » los usuarios similares tienden a tener gustos similares.»

En este blog, hemos presentado el enfoque de UUCF y su aplicación práctica en la recomendación de bromas utilizando el proceso de 5 pasos. También hemos mostrado la posibilidad de variedades de puntos de configuración en cada uno de estos pasos.

En muchos de estos pasos, no elegimos el mejor resultado, sino una opción más aleatoria de las opciones aceptables. Esta es la ironía principal del sistema de recomendaciones, ya que no buscamos el mejor resultado y el usuario siempre recibe un poco de aleatoriedad y es necesario, de lo contrario, toda la experiencia se vuelve monótona.

  1. http://eigentaste.berkeley.edu/dataset/
  2. https://github.com/abbi163/Jester-Joke-Recommender-System
  3. Marwa Hussien Mohamed, Mohamed Helmy Khafagy, Mohamed Ibrahim Hasan. «Encuesta de Desafíos y Soluciones de Sistemas de Recomendación». ITCE ‘ 2019, Asuán, Egipto, 2-4 de febrero de 2019
  4. Zhipeng Zhang, Yasuo Kudo y Tetsuya Murai. «Neighbor selection for user-based collaborative filtering using covering-based rough sets»(en inglés). Anales de Investigación de Operaciones, 8 de noviembre de 2016
  5. Dietmar Jannach, Markus Zanker, Alexander Felfering y Gerhard Friedrich. «Recommender System, An Introduction» (en inglés). Cambridge University Press, 2011
  6. Rounak Banik, «Hands-On Recommendation Systems with Python». Packt Publishing, 2018
  7. Coursera. Curso sobre «Filtrado Colaborativo del Vecino Más Cercano», por la Universidad de Minnesota. Semana 1 y Semana 2.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.