Sistemas de Recomendação usando Mahout

Alison Marczewski
Álvaro Reis Neto
Workshop de Mineração de Dados
Julho de 2012
Agenda
Fazendo Recomendações

●

●
●

Entendendo Recomendação Baseada em usuário
Explorando Recomendação baseada em usuário
●
●
●

O algoritmo
GenericUserBasedRecommender
Explorando user neighborhoods
●
Neighborhoods de tamanho fixo
●
Neighborhoods por limite de similaridade
Agenda
●

Explorando métricas de similaridade
●
●
●
●

●

Recomendação baseada em item
●
●

●

Correlação de Pearson
Distância Euclidiana
Correlação de Spearman
Coeficiente de Tanimoto
O algoritmo
Explorando recomendação baseada em item

Recomendador Slope-one
Pensando rápido...

Por que não perguntamos ao
usuário do que ele gosta?
Entendendo recomendação
baseada em usuários
Entendendo Recomendação
Baseada em usuário
●
Situação I
●

➢

➢

➢

➢
➢
➢

adulto: Quero comprar um CD para um
adolescente
vend: qual tipo de música ou banda que ele
gosta?
adulto: de tudo que os jovens gostam hoje em
dia
vend: qual tipo de música ou banda?
adulto: não sei, pra mim é tudo barulhento.
vend: bom, muitos adolescentes estão
comprando o cd da banda restart.
adulto: vou querer esse!
Entendendo recomendação
baseada em usuários
●

➢

➢

➢

➢

➢

Situação II
adulto: Quero comprar um CD para
um adolescente
vend: qual tipo de música ou banda
que ele gosta?
adulto: eu não sei, mas o seu melhor
amigo gosta de metal
vend: bom, iron maiden é a banda
mais famosa de metal.
adulto: então vou querer o álbum
mais recente dessa banda.
Entendendo recomendação
baseada em usuários
●

➢

➢

➢

➢

➢

Situação III
adulto: Quero comprar um CD para um
adolescente
vend: qual tipo de música ou banda que ele
gosta?
adulto: música? Bom, eu não sei. Mas anotei o
nome das bandas presentes nos posters que
tem no quarto dele. São as bandas: sonata
arctica, rammstein, helloween, blind guardian,
rhapsody of fire, soad.
vend: bom, meu filho também gosta muito
dessas bandas. Ultimamente ele tem
comentado sobre a banda stratovarius.
adulto: interessante, vou querer um CD deles.
Explorando recomendação
baseada em usuários
●

Algoritmo
para cada item i que u não tem avaliado ainda
para cada outro usuario v que tem avaliado i
calcular a similaridade s entre u e v
incorporar as preferencias de v para i, levando em
consideração a similaridade s
retornar os itens ordenados de forma decrescente pela nota
Explorando recomendação
baseada em usuários
●

GenericUserBasedRecommender
para cada outro usuario w
calcular a similaridade s entre u e w
guardar em n(vizinhança) os usuários mais similares
para cada item i que algum usuário em n tenha avaliado, mas
que u não tenha avaliado ainda
para cada outro usuario v em n que tem avaliado i
calcular a similaridade s entre u e v
incorporar as preferencias de v para i, levando em
consideração a similaridade s
retornar os itens ordenados de forma descrescente pela nota
Explorando recomendação
baseada em usuários
●

Neighborhood
Explorando recomendação
baseada em usuários
●

Explorando user neighborhoods
●
Neighborhoods de tamanho fixo
●
NearestNUserNeighborhood(100, similarity,
model);
Explorando recomendação
baseada em usuários
●

Explorando user neighborhoods
●
Neighborhoods por limite de similaridade
●
ThresholdUserNeighborhood(0.7, similarity,
model)
Explorando recomendação
baseada em usuários
•

Explorando user neighborhoods
DataModel model = new GroupLensDataModel (new File("ratings.dat"));
RecommenderEvaluator evaluator = new
AverageAbsoluteDifferenceRecommenderEvaluator ();
RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
@Override
public Recommender buildRecommender(DataModel model) throws
TasteException {
UserSimilarity similarity = new
PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(100,
similarity, model);
return new GenericUserBasedRecommender(model, neighborhood,
similarity);
}
};
double score = evaluator.evaluate(recommenderBuilder, null, model,
0.95, 0.05);
System.out.println(score);
Explorando métricas de
similaridade
●

Correlação de Pearson
●
PearsonCorrelationSimilarity
●
Varia entre -1 e 1. Mede a tendência que duas
séries possuem de se descolocarem juntas
Explorando métricas de
similaridade
●

Correlação de Pearson
Explorando métricas de
similaridade
●

Correlação de Pearson
●
Problemas apresentados
●
Usa como base apenas itens que ambos
avaliaram
●
Não faz o cálculo caso tenha apenas um item em
comum
●
Se todos os valores de uma série forem idênticos,
o cálculo também não é realizado
Explorando métricas de
similaridade
●

Distância Euclidiana
●
EuclideanDistanceSimilarity
●
Calcula-se a “distância” d entre dois usuários
●
Cada item é uma dimensão
●
Retorna 1 / (1 + d)
●
1: os usuários possuem preferências idênticas (d
= 0)
●
Quanto mais próximo de 0(valor de d
aumentando), menos similares.
Cosseno?
Explorando métricas de
similaridade
●

Distância Euclidiana
Explorando métricas de
similaridade
●

Correlação de Spearman
●
SpearmanCorrelationSimilarity
●
Variante da correlação de Pearson
●
Retorna sempre -1 ou 1
●
Para a menor nota, atribui 1. Para segunda menor,
atribui 2 e assim por diante. Após esse processo,
aplicar pearson sobre os valores transformados
●
Muito lento
●
Muito usado para fins de análise, mas para
comerciais não
●
Pode-se usar o CachingUserSimilarity(faz um préprocessamento e armazena o resultado em cache)
Explorando métricas de
similaridade
●

Correlação de Spearman
Explorando métricas de
similaridade
●

Correlação de Tanimoto
●
TanimotoCoefficientSimilarity
●
Ignora preferência de valores
●
Retorna valores entre 0 e 1
●
É possível transformar esse resultado para [-1, 1].
●
similarity = 2 * similarity - 1
Explorando métricas de
similaridade
●

Correlação de Tanimoto
●

similarity = C / (A + B – C)
●
A = Num.Itens avaliados por a
●
B = Num.Itens avaliados por b
●
C = Item avaliados por a e b
Explorando métricas de
similaridade
●

Correlação de Tanimoto
Recomendação baseada em
item
●

Entendendo a recomendação baseada em item
●
Situação
➢
➢
➢

➢

➢

adulto: Quero comprar um CD para um adolescente
vend: qual tipo de música ou banda que ele gosta?
adulto: não sei, mas ele está sempre usando alguma
blusa do Serj Tankian
vend: bom, quase todo mundo que eu conheço que gosta
de escutar Serj Tankian, parece gostar da banda Scars on
Broadway
adulto: vou querer um CD deles!
Recomendação baseada em
item
●

Pandora
●
Eles acreditam que uma música é composta por
uma série de características
●
Assim como o genoma descreve uma pessoa,
essas características descrevem uma música
●
Aproximadamente 400 parâmetros, como:
melodia, harmonia, ritmo, instrumentação,
performance vocal...
●
Análise feita manualmente(gargalo)
●
Como resolver?
●
Rede de confiança
●
Gostou/não gostou da música
Recomendação baseada em
item
●

Diferença entre recomendação baseada em usuário
e por item
●
Usuário: Quem é similar a esta pessoa e que
gosta do que ela gosta?
●
Item: O que é similar ao que ele gosta?
Recomendação baseada em
item
●

Algoritmo
para cada item i que u não avaliou ainda
para cada item j que u avaliou
calcular a similaridade s entre i e j
guardar as preferencias de u para j, levando em
consideração a similaridade s
retornar os itens ordenados de forma decrescente pela nota.

vizinhança?
Recomendação baseada em
item
●

Explorando recomendação baseada em item
●

As métricas de similaridade também funcionam para
item, pois implementam a interface ItemSimilarity

public Recommender buildRecommender(DataModel model)
throws TasteException {
ItemSimilarity similarity = new
PearsonCorrelationSimilarity(model);
return new GenericItemBasedRecommender(model,
similarity);
}
Recomendador slope-one
Ideia:

A maioria das pessoas que gostam do filme A
também gostam do filme B. Mas as pessoas
tendem a gostar um pouco mais do filme B.
Agora vamos imaginar que a maioria das pessoas
que avaliaram o filme A com 4, avaliaram o filme B
com 5 e a maioria das que avaliaram o filme A com
3, avaliaram o filme B com 4. Podemos concluir que
em média, o filme B é avaliado com um ponto a
mais em relação a A.
Recomendador slope-one
●

Exemplo:

Vamos imaginar que as pessoas avaliaram, em
média, o filme Scarface com um ponto a mais que
Carlito's Way. Vamos imaginar também que todos
avaliaram, em média, com a mesma nota os filmes
Scarface e The Godfather. Supomos agora que há
um usuário que avaliou Carlito's Way com 2 e The
Godfather com 4. Qual a estimativa de nota desde
usuário para o filme Scarface?
Recomendador slope-one
●

Algoritmo:
para cada item i
para cada outro item j
para cada usuario u que avaliou i e j
adicionar a diferenca nas preferencias de u para i e j em
média
para cada item i que o usuario u nao avaliou
para cada item j que o usuario u avaliou
encontrar a diferenca média na preferencia entre j e i
add esta diferenca nas preferencia de u para j
add tal diferença para a media em execucao
retornar os itens ranqueados por essas medias
Recomendador slope-one
●
●

●
●
●

SlopeOneRecommender
É uma ótima escolha em contextos onde as
preferências mudam rapidamente
Esté método funciona muito bem em muitos casos
O algoritmo não faz uso de métricas de similaridade
O DiffStorage consome muita memória. Para resolver
tal problema, os dados são pré-processados e
armazenados em uma base de dados
●
Tal pré-processamento demanda muito
processador. É aconselhável que este préprocessamento seja realizado de forma distribuída.
Recomendador slope-one
●

Sistemas de recomendação que usam essa métrica
●
Hitflip: sistema de recomendação de dvds
●
InDiscover: sistema de recomendação de mp3
●
Value Investing News
●
AllTheBests
●
AllFamo
●
Qué libro me recomiendas
Pensando mais um pouco...
●

●
●

●

Como será a métrica de recomendação do(a):
●
Last.fm
●
Stumbleupon
●
Amazon
●
Limbíseti
●
Curiosidades: vinhança(2, dist. euclidiana) e filtro
●
Outros?
Recomendação baseada em contexto
Recomendação baseada em rede de confiança.
●
E a desconfiança?
Sugestões?
Análise de dados
●

Análise de dados - limbiseti
Sistemas de Recomendação Usando Mahout - Dia 2

Sistemas de Recomendação Usando Mahout - Dia 2

  • 1.
    Sistemas de Recomendaçãousando Mahout Alison Marczewski Álvaro Reis Neto Workshop de Mineração de Dados Julho de 2012
  • 2.
    Agenda Fazendo Recomendações ● ● ● Entendendo RecomendaçãoBaseada em usuário Explorando Recomendação baseada em usuário ● ● ● O algoritmo GenericUserBasedRecommender Explorando user neighborhoods ● Neighborhoods de tamanho fixo ● Neighborhoods por limite de similaridade
  • 3.
    Agenda ● Explorando métricas desimilaridade ● ● ● ● ● Recomendação baseada em item ● ● ● Correlação de Pearson Distância Euclidiana Correlação de Spearman Coeficiente de Tanimoto O algoritmo Explorando recomendação baseada em item Recomendador Slope-one
  • 4.
    Pensando rápido... Por quenão perguntamos ao usuário do que ele gosta?
  • 5.
    Entendendo recomendação baseada emusuários Entendendo Recomendação Baseada em usuário ● Situação I ● ➢ ➢ ➢ ➢ ➢ ➢ adulto: Quero comprar um CD para um adolescente vend: qual tipo de música ou banda que ele gosta? adulto: de tudo que os jovens gostam hoje em dia vend: qual tipo de música ou banda? adulto: não sei, pra mim é tudo barulhento. vend: bom, muitos adolescentes estão comprando o cd da banda restart. adulto: vou querer esse!
  • 6.
    Entendendo recomendação baseada emusuários ● ➢ ➢ ➢ ➢ ➢ Situação II adulto: Quero comprar um CD para um adolescente vend: qual tipo de música ou banda que ele gosta? adulto: eu não sei, mas o seu melhor amigo gosta de metal vend: bom, iron maiden é a banda mais famosa de metal. adulto: então vou querer o álbum mais recente dessa banda.
  • 7.
    Entendendo recomendação baseada emusuários ● ➢ ➢ ➢ ➢ ➢ Situação III adulto: Quero comprar um CD para um adolescente vend: qual tipo de música ou banda que ele gosta? adulto: música? Bom, eu não sei. Mas anotei o nome das bandas presentes nos posters que tem no quarto dele. São as bandas: sonata arctica, rammstein, helloween, blind guardian, rhapsody of fire, soad. vend: bom, meu filho também gosta muito dessas bandas. Ultimamente ele tem comentado sobre a banda stratovarius. adulto: interessante, vou querer um CD deles.
  • 8.
    Explorando recomendação baseada emusuários ● Algoritmo para cada item i que u não tem avaliado ainda para cada outro usuario v que tem avaliado i calcular a similaridade s entre u e v incorporar as preferencias de v para i, levando em consideração a similaridade s retornar os itens ordenados de forma decrescente pela nota
  • 9.
    Explorando recomendação baseada emusuários ● GenericUserBasedRecommender para cada outro usuario w calcular a similaridade s entre u e w guardar em n(vizinhança) os usuários mais similares para cada item i que algum usuário em n tenha avaliado, mas que u não tenha avaliado ainda para cada outro usuario v em n que tem avaliado i calcular a similaridade s entre u e v incorporar as preferencias de v para i, levando em consideração a similaridade s retornar os itens ordenados de forma descrescente pela nota
  • 10.
    Explorando recomendação baseada emusuários ● Neighborhood
  • 11.
    Explorando recomendação baseada emusuários ● Explorando user neighborhoods ● Neighborhoods de tamanho fixo ● NearestNUserNeighborhood(100, similarity, model);
  • 12.
    Explorando recomendação baseada emusuários ● Explorando user neighborhoods ● Neighborhoods por limite de similaridade ● ThresholdUserNeighborhood(0.7, similarity, model)
  • 13.
    Explorando recomendação baseada emusuários • Explorando user neighborhoods DataModel model = new GroupLensDataModel (new File("ratings.dat")); RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator (); RecommenderBuilder recommenderBuilder = new RecommenderBuilder() { @Override public Recommender buildRecommender(DataModel model) throws TasteException { UserSimilarity similarity = new PearsonCorrelationSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(100, similarity, model); return new GenericUserBasedRecommender(model, neighborhood, similarity); } }; double score = evaluator.evaluate(recommenderBuilder, null, model, 0.95, 0.05); System.out.println(score);
  • 14.
    Explorando métricas de similaridade ● Correlaçãode Pearson ● PearsonCorrelationSimilarity ● Varia entre -1 e 1. Mede a tendência que duas séries possuem de se descolocarem juntas
  • 15.
  • 16.
    Explorando métricas de similaridade ● Correlaçãode Pearson ● Problemas apresentados ● Usa como base apenas itens que ambos avaliaram ● Não faz o cálculo caso tenha apenas um item em comum ● Se todos os valores de uma série forem idênticos, o cálculo também não é realizado
  • 17.
    Explorando métricas de similaridade ● DistânciaEuclidiana ● EuclideanDistanceSimilarity ● Calcula-se a “distância” d entre dois usuários ● Cada item é uma dimensão ● Retorna 1 / (1 + d) ● 1: os usuários possuem preferências idênticas (d = 0) ● Quanto mais próximo de 0(valor de d aumentando), menos similares. Cosseno?
  • 18.
  • 19.
    Explorando métricas de similaridade ● Correlaçãode Spearman ● SpearmanCorrelationSimilarity ● Variante da correlação de Pearson ● Retorna sempre -1 ou 1 ● Para a menor nota, atribui 1. Para segunda menor, atribui 2 e assim por diante. Após esse processo, aplicar pearson sobre os valores transformados ● Muito lento ● Muito usado para fins de análise, mas para comerciais não ● Pode-se usar o CachingUserSimilarity(faz um préprocessamento e armazena o resultado em cache)
  • 20.
  • 21.
    Explorando métricas de similaridade ● Correlaçãode Tanimoto ● TanimotoCoefficientSimilarity ● Ignora preferência de valores ● Retorna valores entre 0 e 1 ● É possível transformar esse resultado para [-1, 1]. ● similarity = 2 * similarity - 1
  • 22.
    Explorando métricas de similaridade ● Correlaçãode Tanimoto ● similarity = C / (A + B – C) ● A = Num.Itens avaliados por a ● B = Num.Itens avaliados por b ● C = Item avaliados por a e b
  • 23.
  • 24.
    Recomendação baseada em item ● Entendendoa recomendação baseada em item ● Situação ➢ ➢ ➢ ➢ ➢ adulto: Quero comprar um CD para um adolescente vend: qual tipo de música ou banda que ele gosta? adulto: não sei, mas ele está sempre usando alguma blusa do Serj Tankian vend: bom, quase todo mundo que eu conheço que gosta de escutar Serj Tankian, parece gostar da banda Scars on Broadway adulto: vou querer um CD deles!
  • 25.
    Recomendação baseada em item ● Pandora ● Elesacreditam que uma música é composta por uma série de características ● Assim como o genoma descreve uma pessoa, essas características descrevem uma música ● Aproximadamente 400 parâmetros, como: melodia, harmonia, ritmo, instrumentação, performance vocal... ● Análise feita manualmente(gargalo) ● Como resolver? ● Rede de confiança ● Gostou/não gostou da música
  • 26.
    Recomendação baseada em item ● Diferençaentre recomendação baseada em usuário e por item ● Usuário: Quem é similar a esta pessoa e que gosta do que ela gosta? ● Item: O que é similar ao que ele gosta?
  • 27.
    Recomendação baseada em item ● Algoritmo paracada item i que u não avaliou ainda para cada item j que u avaliou calcular a similaridade s entre i e j guardar as preferencias de u para j, levando em consideração a similaridade s retornar os itens ordenados de forma decrescente pela nota. vizinhança?
  • 28.
    Recomendação baseada em item ● Explorandorecomendação baseada em item ● As métricas de similaridade também funcionam para item, pois implementam a interface ItemSimilarity public Recommender buildRecommender(DataModel model) throws TasteException { ItemSimilarity similarity = new PearsonCorrelationSimilarity(model); return new GenericItemBasedRecommender(model, similarity); }
  • 29.
    Recomendador slope-one Ideia: A maioriadas pessoas que gostam do filme A também gostam do filme B. Mas as pessoas tendem a gostar um pouco mais do filme B. Agora vamos imaginar que a maioria das pessoas que avaliaram o filme A com 4, avaliaram o filme B com 5 e a maioria das que avaliaram o filme A com 3, avaliaram o filme B com 4. Podemos concluir que em média, o filme B é avaliado com um ponto a mais em relação a A.
  • 30.
    Recomendador slope-one ● Exemplo: Vamos imaginarque as pessoas avaliaram, em média, o filme Scarface com um ponto a mais que Carlito's Way. Vamos imaginar também que todos avaliaram, em média, com a mesma nota os filmes Scarface e The Godfather. Supomos agora que há um usuário que avaliou Carlito's Way com 2 e The Godfather com 4. Qual a estimativa de nota desde usuário para o filme Scarface?
  • 31.
    Recomendador slope-one ● Algoritmo: para cadaitem i para cada outro item j para cada usuario u que avaliou i e j adicionar a diferenca nas preferencias de u para i e j em média para cada item i que o usuario u nao avaliou para cada item j que o usuario u avaliou encontrar a diferenca média na preferencia entre j e i add esta diferenca nas preferencia de u para j add tal diferença para a media em execucao retornar os itens ranqueados por essas medias
  • 32.
    Recomendador slope-one ● ● ● ● ● SlopeOneRecommender É umaótima escolha em contextos onde as preferências mudam rapidamente Esté método funciona muito bem em muitos casos O algoritmo não faz uso de métricas de similaridade O DiffStorage consome muita memória. Para resolver tal problema, os dados são pré-processados e armazenados em uma base de dados ● Tal pré-processamento demanda muito processador. É aconselhável que este préprocessamento seja realizado de forma distribuída.
  • 33.
    Recomendador slope-one ● Sistemas derecomendação que usam essa métrica ● Hitflip: sistema de recomendação de dvds ● InDiscover: sistema de recomendação de mp3 ● Value Investing News ● AllTheBests ● AllFamo ● Qué libro me recomiendas
  • 34.
    Pensando mais umpouco... ● ● ● ● Como será a métrica de recomendação do(a): ● Last.fm ● Stumbleupon ● Amazon ● Limbíseti ● Curiosidades: vinhança(2, dist. euclidiana) e filtro ● Outros? Recomendação baseada em contexto Recomendação baseada em rede de confiança. ● E a desconfiança? Sugestões?
  • 35.
    Análise de dados ● Análisede dados - limbiseti