sistemas de recomendação usando mahout - dia 2
Post on 27-Jun-2015
236 Views
Preview:
DESCRIPTION
TRANSCRIPT
Sistemas de Recomendação usando Mahout
Alison MarczewskiÁlvaro Reis Neto
Workshop de Mineração de DadosJulho 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● Correlação de Pearson● Distância Euclidiana● Correlação de Spearman● Coeficiente de Tanimoto
● Recomendação baseada em item● 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 aindapara cada outro usuario v que tem avaliado i
calcular a similaridade s entre u e vincorporar 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 wcalcular a similaridade s entre u e wguardar 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 icalcular a similaridade s entre u e vincorporar as preferencias de v para i, levando em
consideração a similaridade sretornar 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 neighborhoodsDataModel model = new GroupLensDataModel (new File("ratings.dat"));RecommenderEvaluator evaluator = new AverageAbsoluteDifferenceRecommenderEvaluator ();RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {@Overridepublic 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 aindapara cada item j que u avaliou
calcular a similaridade s entre i e jguardar 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 ipara cada outro item j
para cada usuario u que avaliou i e jadicionar a diferenca nas preferencias de u para i e j em média
para cada item i que o usuario u nao avalioupara cada item j que o usuario u avaliou
encontrar a diferenca média na preferencia entre j e iadd esta diferenca nas preferencia de u para jadd 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
top related