data
March 10, 2023

Desatando la Magia del Cine: Guía Paso a Paso para Construir tu Algoritmo de Filtrado Colaborativo

Desatando el Poder de las Preferencias de Usuario para Mejorar la Experiencia

En el mundo actual impulsado por los datos, la capacidad de personalizar las experiencias de los usuarios se ha convertido en un factor crucial para el éxito empresarial. Los sistemas de recomendación, impulsados por algoritmos de aprendizaje automático, juegan un papel clave en este esfuerzo, permitiendo a las empresas sugerir productos, servicios o contenidos relevantes a sus usuarios. Entre las diversas técnicas empleadas en los sistemas de recomendación, el filtrado colaborativo destaca como un enfoque poderoso que aprovecha la sabiduría colectiva de los usuarios para predecir preferencias.

En esta guía completa, nos embarcaremos en un viaje para desmitificar el filtrado colaborativo, profundizando en sus principios y aplicaciones en el ámbito de las recomendaciones de películas. Exploraremos los matices de construir un algoritmo de filtrado colaborativo desde cero, utilizando el popular conjunto de datos MovieLens como campo de entrenamiento. En el camino, obtendremos una comprensión más profunda del funcionamiento interno de este algoritmo y su capacidad para descubrir patrones y conexiones ocultas en las preferencias de los usuarios.

Aprovecharemos el poder de la correlación de Pearson para estimar la similitud entre películas, una medida estadística que cuantifica cuán estrechamente se relacionan dos elementos (en este caso, películas). Cuanto mayor sea la correlación, más similares son las películas en términos de preferencias de los usuarios.

Requisitos Previos

Para comprender eficazmente los conceptos presentados en esta guía, se recomienda tener conocimientos básicos de fundamentos de aprendizaje automático y programación en Python. También será útil estar familiarizado con bibliotecas de manipulación de datos como pandas.

Paso 1: Cargar el conjunto de datos (MovieLens)

La base de cualquier proyecto de aprendizaje automático radica en la calidad de los datos. Para nuestro sistema de filtrado colaborativo, utilizaremos el conjunto de datos MovieLens, una rica colección de valoraciones de películas y preferencias de usuarios. El conjunto de datos consta de dos tablas principales: 'movies.csv' que contiene información sobre las películas y 'ratings.csv' que contiene valoraciones de usuarios para varias películas.

PYTHON
import pandas as pd
from scipy import sparse

# Cargar conjunto de datos MovieLens
movies = pd.read_csv('dataset/movies.csv')
ratings = pd.read_csv('dataset/ratings.csv')

ratings = pd.merge(movies, ratings).drop(['genres', 'timestamp'], axis=1)

print(ratings.shape)
ratings.head()

Paso 2: Mantener datos útiles

Para asegurar que nuestras predicciones sean lo más precisas posible, nos enfocamos en películas con suficientes valoraciones de usuarios. Este paso elimina las películas que podrían no ofrecer información significativa. Filtramos los datos así:

PYTHON
# Mantener datos útiles
userRatings = ratings.pivot_table(index=['userId'], columns=['title'], values='rating')
userRatings.head()
print("Antes: ", userRatings.shape)
userRatings = userRatings.dropna(thresh=10, axis=1).fillna(0, axis=1)
print("Después: ", userRatings.shape)

Paso 3: Construir una Matriz de Correlación

Para capturar eficazmente las relaciones entre los usuarios y sus preferencias cinematográficas, construiremos una matriz de calificaciones usuario-película. Esta matriz representará las valoraciones dadas por cada usuario para cada película, proporcionando una visión general completa de las preferencias del usuario.

La matriz de correlación es la piedra angular de nuestro algoritmo de filtrado colaborativo. Cuantifica el grado de similitud entre cada par de películas basándose en las valoraciones de los usuarios. Un valor alto de correlación indica que los usuarios tienden a valorar estas películas de manera similar, lo que sugiere una preferencia compartida:

PYTHON
# Construir la matriz de correlación
corrMatrix = userRatings.corr(method='pearson')
corrMatrix.head(10)

Paso 4: Obtener Películas Similares

Dada una película específica y su puntuación, podemos identificar otras películas que podrían atraer al mismo usuario. Esto se logra calculando la correlación entre la película objetivo y otras películas en el conjunto de datos.

PYTHON
def get_similar(movie_name, rating):
    similar_ratings = corrMatrix[movie_name] * (rating - 2.5)
    similar_ratings = similar_ratings.sort_values(ascending=False)
    return similar_ratings

Paso 5: Construir el Sistema de Recomendación

El corazón de nuestro sistema de recomendación radica en su capacidad para sugerir películas adaptadas a cada usuario individual. Esto implica utilizar la matriz de correlación para identificar películas similares en función de las valoraciones y preferencias anteriores del usuario.

Para evaluar el rendimiento de nuestro sistema de recomendación, utilizaremos métricas como precisión, exhaustividad y F1-score. Estas métricas nos darán información sobre la precisión y efectividad de nuestras recomendaciones.

PYTHON
def recommender(user_ratings):
    movie_titles = [movie[0] for movie in user_ratings]
    similar_movies_list = []
    for movie, rating in user_ratings:
        similar_movies_list.append(get_similar(movie, rating))

    similar_movies = pd.concat(similar_movies_list, axis=1)
    similar_movies_sum = similar_movies.sum(axis=1)
    similar_movies_sum_sorted = similar_movies_sum.sort_values(ascending=False)

    # Filtrar películas ya vistas por el usuario
    similar_movies_result = similar_movies_sum_sorted[~similar_movies_sum_sorted.index.isin(movie_titles)]

    return similar_movies_result

Paso 6: Evaluar el Sistema de Recomendación

Para evaluar el rendimiento de nuestro sistema de recomendación, utilizaremos métricas como precisión, recall y F1-score. Estas métricas nos proporcionarán información sobre la precisión y efectividad de nuestras recomendaciones.

PYTHON
# Probar el recomendador
amante_accion = [
    ("Amazing Spider-Man, The (2012)", 5),
    ("Mission: Impossible III (2006)", 4),
    ("Toy Story 3 (2010)", 2),
    ("2 Fast 2 Furious (Fast and the Furious 2, The) (2003)", 4)
]

recomendaciones_accion = recommender(amante_accion)
recomendaciones_accion.head(20)
PYTHON
# Ejemplo romántico
amante_romantico = [
    ("(500) Days of Summer (2009)", 5),
    ("Alice in Wonderland (2010)", 3),
    ("Aliens (1986)", 1),
    ("2001: A Space Odyssey (1968)", 2)
]

recomendaciones_romantico = recommender(amante_romantico)
recomendaciones_romantico.head(20)
PYTHON
# Recomendaciones para Potterheads
potterhead = [
    ("Harry Potter and the Sorcerer's Stone (a.k.a. Harry Potter and the Philosopher's Stone) (2001)", 5),
    ("Harry Potter and the Chamber of Secrets (2002)", 5),
    ("Harry Potter and the Prisoner of Azkaban (2004)", 5),
    ("Harry Potter and the Goblet of Fire (2005)", 5)
]

recomendaciones_potterhead = recommender(potterhead)
recomendaciones_potterhead.head(20)

Ajustando la Experiencia

¡Nuestro recomendador es solo el comienzo! Podemos personalizarlo aún más mediante:

  • Incorporación de datos adicionales: más allá de las valoraciones, considera usar géneros, directores o fechas de estreno.
  • Filtrado de recomendaciones: excluye películas que ya has visto o que no encajan con tus géneros preferidos.
  • Uso de diferentes medidas de similitud: experimenta con otras métricas como similitud coseno o correlación de Spearman para ver cómo cambian las recomendaciones.

Aplicaciones del Mundo Real del Filtrado Colaborativo

El filtrado colaborativo se ha adoptado ampliamente en varios dominios, incluyendo comercio electrónico, servicios de música en streaming y plataformas de contenido. Algunos ejemplos destacados incluyen:

  • Amazon: El motor de recomendaciones de productos de Amazon utiliza filtrado colaborativo para sugerir productos basados en el historial de compras y navegación del usuario.
  • Netflix: El sistema de recomendación de Netflix utiliza filtrado colaborativo para identificar películas y series que podrían interesar al usuario según sus hábitos de visualización.
  • Spotify: El algoritmo de filtrado colaborativo de Spotify genera listas de reproducción personalizadas según las preferencias de escucha del usuario, sugiriendo artistas y canciones similares.

Puntos Clave

  • El filtrado colaborativo recomienda películas basándose en cómo las valoran usuarios similares.
  • La correlación de Pearson mide la similitud entre películas según las valoraciones.
  • Experimenta con diferentes datos y métricas de similitud para refinar tus recomendaciones.
  • El filtrado colaborativo se aplica ampliamente en múltiples industrias.