Archive for the ‘recommenders’ Category
Blueknow
Blueknow es un nuevo proyecto sobre recomendadores. El objetivo es crear un motor genérico de recomendación que pueda integrarse fácilmente en comercios online.
Los recomendadores están cada día más de moda y los beneficios son evidentes. Ante grandes catálogos de productos, el recomendar selecciona un conjunto de productos que se ajustan a los gustos del usuario y de esta forma el usuario encuentra lo que busca, y la tienda vende sus productos. Un win-win.
La idea es muy buena, y de hecho ya es finalista y una de las favoritas del concurso-selección de nuevos emprendedores del BBVA. Además juega a favor del proyecto el increible equipo de profesionales que hay detrás, que llevan trabajando juntos desde 2007, por lo que funcionan como un mecanismo de precisión.
Buena suerte con el proyecto, y por favor, votad por ella!
Solo para ti
Voy a abrir una serie de capítulos hablando sobre las diferentes funcionalidades de dooplan. Hoy empezamos con “Solo para tí“. Esta sección representa el recomendador de dooplan. Mucha gente todavía no sabe qué es un recomendador, ni qué puede hacer por tí. Simlpificando mucho, es una herramienta que te sugiere eventos que es posible que puedan gustarte, debido al perfil personalizado que tenemos tuyo.
Cómo se construye este perfil? Se sostiene en cuatro patas (que nosotros llamamos tu ADN). Por un lado, la madre de todo el cordero, son las votaciones. Según vas votando eventos, el sistema va “aprendiendo” qué te gusta y qué no te gusta. Lo de aprendiendo no es exacto, sino que realmente te podemos comparar con otra gente con tus mismos gustos, y entonces sugerirte planes que les hayan gustado a ellos y tú todavía no conozcas.
Por otro lado, como es difícil que un usuario vote mucho, sobre todo al principio, tenemos lo que llamamos el “Test Inicial” para acelerar el proceso. La gracia de este test es que todos respondemos a las mismas preguntas, por lo que es más o menos sencillo trazar las diferencias entre 2 usuarios.
En tercer lugar es super importante que tengas una red de amigos. Tus amigos son tus mejores consejeros, y si tus amigos deciden ir a tal evento, entonces es probable que a tí también te guste.
Por último están tus intereses. Esta es una de las funcionalidades con más recorrido y que más debe cambiar de esta sección. Es demasiado potentente y no es fácil de usar. Al enumerar tus intereses provocas que cuando entre en el sistema un nuevo evento que su descripción se ajuste a tus intereses, el recomendador pueda sugerírtelo. Pero no es siempre directo. Si me dices que te gusta la música, no voy a sugerirte los 500 conciertos que tenemos en dooplan, sino que tendré que hacer otro filtrado…
En defintiva, si un usuario vota regularmente, tiene una red de amigos con los que comparte su ocio y va actualizando sus intereses (el sistema intenta hacerlo por tí!), el recomendador le podrá ayudar a encontrar los mejores planes de entre los cientos que hay cada semana en tu ciudad!
Presentación recommenders
Para la presentación de la fiberparty del 7 de marzo del 2009 he preparado esta presentación.
Recommenders en la Fiberparty
Como y anuncié hace algún tiempo, este sábado se celebra la fiberparty y yo estaré allí haciendo una charla sobre motores de recomendación.
La charla será el sábado 7 a las 13.00 horas en el Aula Magna (Edifico A3), de la UPC (Campus Nord). Entrada libre.
Página dooplan de la fiberparty.
Web conceptual?
Esta semana hemos tenido en dooplan una muy interesante visita de Carles Udina i Cobo presentando su teoría de sistema de conocimiento (o filtrado) conceptual. Dice estar muy por delante de lo que son los buscadores actuales o la web semántica, está en lo cierto? Aquí os dejo el link a su página con toneladas de información.
Charla en la Fiberparty
Este año estaré en la fiberparty, (la party de la facultad de informática de Barcelona, 7 y 8 de marzo) haciendo una charla sobre Motores de recomendación.
Hablaré sopbre algoritmos de filtrado basado en el contenido, filtrado colaborativo, web semántica y web conceptual.
Clustering with django-recommender
Clustering users and items is an interesting technique when you work with big data sets. Due to the complexity of the calculations, and RAM consumption, it’s really useful to work with smaller sets. When you cluster users (or items) what you get are groups of similar users, so in addtion to have a smaller data set, the opinions of this users will be closer among them, and the recommendations may improve.
django-recommender implements 2 methods for clustering:
- def cluster_users(self, users, items, cluster_count=2):
- def cluster_items(self, users, items, cluster_count=2):
Both methods use django-voting for its calculations, because it must be consistent with the other methods. If we use a criteria for getting people similarity, we must respect it when grouping people in clusters.
The result of both methods is a list of sublists, containing the object ids of the elements in each cluster. For instance, you have 10 user (ids from 1 to 10), and want to have 4 clusters, a possible result may be:
user_cluster = [[2,9,1],[3],[5,10,8,6],[4,7]]
Bear in mind the result can vary, because there is a random conponent in first centroids calculation, and more than one solution is possible for the problem.
Pequeñas mejoras internas en el django-recommender
He hecho algunas pequeñas mejoras en el django-recommender. La más importante ha sido el cambio de la librería statistics (una cosa rara de unos japos) por la estandar python stats. Por supuesto, está incluida en el proyecto, por lo que no hace falta instalarla en local.
Por otro lado, he refactorizado el método get_content_based_recs, para que funcionara de la misma manera que con los de filtrado colaborativo. Se le pasan los objetos a comparar y el manager se busca la vida (básicamente, obtiene sus atributos usando django-tagging).
Además, he desacoplado un poco el código, dejando en el managers.py los métodos que se suponen que se deben usar en la aplicación, y he añadido un utils.py con la lógica más del recomendador, los cálculos y así.
Por último, he añadido un par de pelis más al juego de test para que hubiera un poco más de resultados variados.
Content Based filtering with django-recommender
Content Based filtering technique is the classical approach for recommendations. This technique has been used before the internet recommenders, because it’s just the comparison between two elements. Currently it is very typical in matching recommenders, like meetic.com or match.com.
However, although the results aren’t any impressive it can be useful in several scenarios: for matching elements in a non-voting system (meetic again), to create alarms, or having a second opinion to weight and complete your collaborative filtered recommendations.
The first scenario is obvious. The second one can be useful for fuzzy or rough searches, and the third scenario is usefull to weight the collective recommendation with what the user really likes.
For django-recommender, the usage is based on tags. It uses django-tagging to tag any element of the system. The algorithm just gets the list of tags of a user and the list of tags for all the other items of the system, and it calculates the distance value using a modified version of Tanamoto algorithm. Tanamoto is too demanding, because it checks the position of very element of the arrays. In this version, the order is not important. For systems with too much tag dispersion, tanamoto may return poor results, so it could be interesting on simpler tag comparision (f.i., if there is a coincidence, return 0.5, if there are more than one, return 0,7…)
To use this technique you need to install django-tagging application, and to tag the user and the elements you want to recommend. Then ,just invoke:
Recommender.objects.get_content_based_recs(user_tags,
item_tag_matrix)
And you will get a paired list containg: [(rec_value, item), (rec_value,item)...], where 0.0<rec_value<1.0, and 1.0 is best.


