Minicurso de 3 dias sobre um pouco da teoria em sistemas de recomendação e uso do framework mahout no desenvolvimento dos mesmos.
Esse minicurso faz parte de um dos trabalhos realizados no projeto de cooperação em sistemas inteligentes em nuvem entre o Instituto Nokia de Tecnologia(INdT) e o Instituto de Computação(IComp) da Universidade Federal do Amazonas(UFAM).
1. Sistemas de Recomendação usando Mahout
Alison Marczewski
Álvaro Reis Neto
Workshop de Mineração de Dados
Julho de 2012
2. 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
3. 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
5. 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!
6. 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.
7. 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.
8. 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
9. 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
11. Explorando recomendação
baseada em usuários
●
Explorando user neighborhoods
●
Neighborhoods de tamanho fixo
●
NearestNUserNeighborhood(100, similarity,
model);
12. Explorando recomendação
baseada em usuários
●
Explorando user neighborhoods
●
Neighborhoods por limite de similaridade
●
ThresholdUserNeighborhood(0.7, similarity,
model)
13. 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);
16. 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
17. 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?
19. 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)
21. 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
24. 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!
25. 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
26. 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?
27. 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?
28. 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);
}
29. 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.
30. 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?
31. 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
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 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
34. 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?