Surprise, librería de Python a la ayuda de los Sistemas de Recomendacion

Gretel Garcia
4 min readJun 20, 2023

--

Uso de Python para implementación de Sistemas de recomendación

Los Sistemas de Recomendación (SR), aunque el nombre no sea muy familiar para algunos, forman parte de la vida cotidiana de todos los usuarios de la Web. Tenemos contacto con poderosos sistemas de recomendación a diario. Cuando disfrutamos de un video en Youtube o dejamos que Spotify haga una mezcla de artistas para una playlist, estamos consumiendo esta herramienta, pero también aportando elementos de personalización para que estos sistemas construyan sus recomendaciones.

Un sistema de recomendación es una herramienta que establece un conjunto de criterios y valoraciones sobre los datos de los usuarios para realizar predicciones sobre recomendaciones de elementos que puedan ser de utilidad o valor para el usuario. Estos sistemas seleccionan datos proporcionados por el usuario de forma directa o indirecta, y procede a analizar y procesar información del historial del usuario para transformar estos datos en conocimiento de recomendación.

El funcionamiento de los sistemas de recomendación ha evolucionado gracias al Machine Learning. Anteriormente los motores de búsqueda, plataformas de contenido y ventas de producto funcionaban con rankings o listas de popularidad. Estos sistemas eran funcionales hasta cierto punto, pero no podían personalizar la experiencia del usuario y mostraban elementos que no se correspondían a nuestros intereses.

En este punto es donde podemos preguntarnos: ¿Cómo podemos hacer un sistema de recomendación robusto y que recomiende realmente lo que espera el usuario?

Existen varias herramientas y lenguajes de programación que podríamos elegir a la hora de desarrollar un SR. En esta publicación me gustaría sugerir el uso de la librería Surprice para el desarrollo de SR en Python.

Surprice library

El nombre SurPRISE , por sus siglas en inglés, significa: Simple Python Recommendation System Engine.

Surprise, es un scikit de Python para construir y analizar sistemas de recomendación que se ocupan de datos de calificación explícitos.

Surprise fue diseñado con los siguientes propósitos en mente:

Ofrecer a los usuarios un control perfecto sobre sus experimentos. Para ello, se pone un fuerte énfasis en la documentación, que hemos intentado que sea lo más clara y precisa posible señalando cada detalle de los algoritmos.

Hacer más llevadero el manejo de conjuntos de datos. Los usuarios pueden usar conjuntos de datos integrados (Movielens, Jester) y sus propios conjuntos de datos personalizados.

Proporcionar varios algoritmos de predicción listos para usar, como algoritmos de referencia, métodos de vecindad, basados ​​en factorización de matriz (SVD, PMF, SVD++, NMF) y muchos otros. Además, se incorporan varias medidas de similitud (coseno, MSD, Pearson…).

Proporcionar herramientas para evaluar, analizar y comparar el rendimiento de los algoritmos. Los procedimientos de validación cruzada se pueden ejecutar muy fácilmente utilizando potentes iteradores de CV (inspirados en las excelentes herramientas de scikit-learn), así como una búsqueda exhaustiva sobre un conjunto de parámetros.

Instalación

Luego de ver que son los SR y como la librería Surprice puede aportar en el desarrollo y buenos resultados de los mismos es necesario entrar en un poco de detalles y ver como la podemos utilizar en nuestros proyectos.

Ante que nada usemos el comendo pip para hacer la instalación

$ pip install numpy
$ pip install scikit-surprise

Si prefiere usar conda, el comando a utilizar seria el siguiente:

$ conda install -c conda-forge scikit-surprise

El algoritmo KNN (K Nearest Neighbors) es un método de Machine Learning muy conocido, debido su simplicidad, ya que es muy fácil de entender y utilizar. Pertenece al conjunto de algoritmos de Aprendizaje Supervisado, en esencia el algoritmo K-NN (K Nearest Neighbors) o en castellano, K Vecinos Más Cercanos, trata de buscar los K puntos más cercanos a un punto concreto para poder inferir su valor. Dada su definición, intuimos cuán importante puede ser este algoritmo a la hora de construir sistemas de recomendación, ya que estos, a grandes rasgos, lo que hacen es acordar las diferencias (distancias), entre gustos o preferencias de los usuarios. O sea, los de menor distancia o gustos más parecidos podemos agruparlos como semejantes no así los que sus gustos (distancias) sean más lejanas.

En la librería Surprice, existen varias implementaciones del algoritmo KNN, de ahí que cobre mayor importancia en el desarrollo de SR, ya que dichas implementaciones están optimizadas en dependencia del caso al que se le quiera aplicar. Aquí muestro algunos ejemplos:

KNNBaseline

KNNBasic

Centered KNN

Ejemplo de uso

Existen algoritmos interesantes basados en técnicas de clustering, búsqueda de vecinos mas cercanos e incluso redes neuronales como RBM’s, autoencoders o RNN para hacer recomendaciones. Pero por su calidad, sencillez y efectividad, comenzar con el algoritmo SVD o SVD++ es una buena práctica para implementar un primer SR.

Es muy efectivo, y sencillo de usar y comprender. Su versión mejorada es SVD ++ que es muy parecido. En la librería Surprise de Python, que está exclusivamente dedicada a sistemas de recomendación con distintos algoritmos, existe esta implementación.

from surprise import SVD++
from surprise import Dataset
from surprise import accuracy
from surprise.model_selection import train_test_split


# Cargamos los datos
data = Dataset.load_builtin('ml-100k')

# Dividimos en train y test
trainset, testset = train_test_split(data, test_size=.25)

# Instanciamos SVD++
algo = SVD++()

# Entrenamos y realizamos predicciones
algo.fit(trainset)
predictions = algo.test(testset)

# Calculamos el error.
accuracy.rmse(predictions)

--

--