¿Por qué recomendar?

Muchas veces hacemos caso omiso de los consejos recibidos si estos no son solicitados. Debe ser parte de un sistema de autodefensa del ego, ya que gran parte del tiempo estos hacen referencia a nuestras falencias o cosas que no queremos ver.

A nivel de las aplicaciones de uso diario, esto también pasa. Por ejemplo, a mi cuenta de e-mail le llegan diariamiente al menos decenas de correos no solicitados con publicidad, que por suerte van directo a mi carpeta de spam que tiene mi proveedor (técnicamente, un approach de clasificación), ahorrándome una cantidad impresionante de clicks. Muchas gracias Gmail!

¡Feliz día lunes! Que tal tu finde, amigo?

Hoy en día, nos enfrentamos a un sinnúmero de alternativas al momento de escoger un producto. Tanto así, que muchas veces no logramos decidir con que quedarnos porque quedamos sumidos entre tanta opción, una especie de parálisis del análisis. Nuestro cerebro parece querer optimizar la elección comparando los parámetros de cada uno, pero el espacio del problema es tan complejo que nos termina “fundiendo”. ¿Por qué lo hacemos? Tal vez sea para evitar arrepentirnos después, “mejor me compraba el otro”.

Un estudio clásico sobre elecciones, popularmente conocido como el experimento de las mermeladas, describe el comportamiento de compra de los clientes en un supermercado cuando se le presentan 6 vs 24 tipos de mermeladas (y otros productos), donde la menor cantidad de opciones genera una tasa de conversión de 30% versus 3% de la que tiene más. Algunos desacreditan el estudio por temas de metodología, entre otras cosas, pero según el meta-análisis de 99 estudios similares, la cantidad de elecciones si puede ser significativa en la toma de decisiones, siempre y cuando va en conjunto de otros factores.

Dado lo anterior, lo importante es ser capaces de entregar información acotada relevante para nuestros usuarios o nosotros mismos, que nuestras aplicaciones cuenten con recomendaciones relevantes que permitan mejorar la experiencia en el uso de sistemas de información. En general, es hacer más fácil la vida.

¡Que pasen los sistemas de recomendación!

A la fecha, estoy participando como alumno del Diplomado de Big Data de la UC (shameless plug), donde uno de los temas que estamos revisando corresponde a Sistemas de Recomendación. La definición vista en clases dice que estos apuntan a ayudar a un usuario o grupo de usuarios a seleccionar items dentro de un espacio atestado de información de forma personalizada.

Muchos de los sistemas que hoy usamos utilizan este principio a través de una serie de algoritmos para finalmente mostrarnos información relevante a nuestros intereses. Es cosa de abrir Facebook y revisar el timeline, gracias al feedback respecto a su uso nos permite filtrar la información no relevante, como la selfie de tu amigo en el baño, de lo que de verdad nos importa, memes de gatos.

Otro caso es Amazon. Según un estudio de McKinsey en el 2013, el 35% de los ingresos de su sitio corresponde a recomendaciones de productos generadas por sus sistemas.

Excelente, entonces sabemos que existen sistemas que nos puede ayudar a obtener recomendaciones relevantes. Y, ¿Como hacen para funcionar?

SysRec: (des)clasificados

En general, lo que deseamos lograr con un sistema de recomendación es predecir la preferencia de un usuario con respecto a un item. Usualmente, esto se logra a través de la aplicación de un algoritmo de optimización que minimiza la diferencia entre la calificación o preferencia esperada versus su preferencia real. También, esto se puede lograr a través del uso de medidas de cercanía.

Hay (al menos) 2 formas de clasificar a los sistemas de recomendación, con subclasificaciones, las cuales son las siguientes:

  • Considerando los datos usados: depende de que datos utilizamos para generar el modelo de decisión. Hay 3 tipos: basado en reglas, basado en contenido, y filtrado colaborativo. Para basado en reglas, donde en base a los datos se modelan arboles de decisión y sus variantes, la ventaja de esto es que se puede apreciar a simple vista los criterios de decisión para una recomendación (por ejemplo, una regla que define que si te gusto una canción de un artista, es posible que te guste otra del mismo). La clasificación basada en contenido toma en cuenta los atributos de items (pot ejemplo, las palabras de un libro, género, etc) , y agrupa con medidas de similitud entre ellos, asumiendo que un usuario desea consumir items parecidos. Finalmente, el filtrado colaborativo utiliza perfiles de usuarios y/o items en base a los datos para recomendar basado en medidas de distancia.
  • Considerando al modelo: tiene que ver con la forma en que se realiza la predicción. Existen 2 clasificaciones: basado en memoria, y basado en modelo. El primero se refiere a los que recorre todos (o una parte) de los datos cada vez que se realiza una predicción (como el algoritmo k-NN, vecinos cercanos). El otro, construye un modelo en base a los datos que es reutilizado cada vez que se necesite realizar una predicción (por ejemplo, Single Value Decomposition).

Antes de que se alargue demasiado el post, paso a un pequeño overview del filtrado colaborativo y cerramos, vale?

Filtrado colaborativo basado en usuario

Este modelo se basa en la premisa de que si tengo gustos en común con otro usuario, por ejemplo, le ponemos ratings similares a las cosas que ambos hemos consumido, es probable que también me gusten cosas que yo no he consumido y a este le hayan gustado.

Hay 2 tareas principales en el proceso de filtrado colaborativo cuando queremos encontrar recomendaciones para un usuario:

  1. Encontrar la vecindad de usuarios se encuentra el usuario objetivo (usando KNN)
  2. Calculamos los ratings de los items que más le gustan la vecindad y se lo recomendamos!
Paso 1. Busco mis vecinos más cercanos con KNN, usando correlación de Pearson para buscar similaridad
Paso 2. Calculo predicción de ratings en base a la similitud con otros usuarios, y escojo los N mejores

¿Cuáles son los pro?

  1. Es facil de implementar.
  2. Puede aplicar a cualquier contexto, mientras exista una medida de preferencia (como ratings).
  3. Es bastante preciso comparado con otros métodos.

¿Y los contra?

  1. Sparsity/dispersión de los datos, muy pocos usuarios generan ratings.
  2. Cold-start, un usuario nuevo no tiene ratings, por lo tanto, no podemos asociarlo a una vecindad.
  3. New item, homólogo a lo anterior, los items sin ratings no son recomendables.

Consideramos de todas formas que con este modelo contamos con la capacidad de predecir los ratings de un usuario en base a información de ratings de otros usuarios similares, ¿como mido que tan efectivas son mis predicciones?

Métricas de evaluación de predicción

Para probar la efectividad de un algoritmo de recomendación, podemos separar parte de los datos que tenemos a nuestra disposición con sus respectivos ratings y usarlo como un set de testing para compararlo versus otros algoritmos. En general, las métricas más simples toman el rating predicho para un par usuario-item (ȓᵤᵢ) y le restan el rating real (rᵤᵢ), lo que finalmente corresponde al error que se acumula y promedia. Eventualmente, entre más bajo el número entregado por la métrica, menor es el error y mejor la performance del algoritmo.

Algunas de las métricas simples de medición son:

RMSE (Root Mean Square Error), se toman la diferencia entre predicción y rating real, se eleva al cuadrado para que no sea negativo y se suma al error, el cual finalmente es promediado y se calcula su raíz cuadrada.

MSE (Mean Square Error), lo mismo que lo anterior, pero esta vez no se calcula la raíz cuadrada.

MAE (Mean Absolute Error), lo mismo que lo anterior, pero en vez de elevar al cuadrado se hace uso del valor absoluto para dejar la suma positiva.

Dentro del espacio de sistemas de recomendación existen muchas otras métricas especializadas que nos ayudan a medir performance, las cuales ahondaré en un post futuro con mayor detalle.

OK. Tenemos una pincelada de que se tratan los sistemas de recomendación y la necesidad que cubren, y como medimos, faltaría ahondar en los detalles finos que vendrán en los próximos posts, pero dejaré en la mesa una última idea/opinión personal…

No cualquiera puede recomendar (en cualquier momento)

En otro de los cursos del diplomado, Teoría de grafos, vimos algoritmos de centralidad para grafos como PageRank, creado por Google desde sus inicios para la búsqueda de páginas relevantes. A grandes rasgos, PageRank es un algoritmo de optimización capaz de rankear la relevancia de páginas dependiendo de que tan referenciadas sean por otras páginas. Si por ejemplo, una página es linkeada muchas veces por otros sitios, se podría decir que es una autoridad con respecto a un tema. Así mismo, si un sitio es referenciado por otras autoridades, esto hace que tenga aún más peso.

Haciendo alusión a lo anterior, una cosa es que Amazon me recomiende un producto, Netflix una serie o Waze una ruta, a que alguna telco me llame desde callcenter a mi teléfono personal para ofrecerme portabilidad o una segunda línea. A lo que voy, es importante hacer una recomendación relevante, siempre y cuando sea yo quien inicie la interacción. O por último, si yo no la inicio, pero resulta ser que eres una autoridad y confío en ti, puede que de una oportunidad para escucharte. Esto es como volver al punto inicial del consejo no solicitado, si no lo pedí, no lo quiero. /rant

Con esto finalizo mi primer post, el próximo va ir por el lado más profundo con respecto a filtrado colaborativo. Stay tuned!