APACHE MAHOUT PARTE TRÊS

MAHOUT – APRENDIZADO DE MÁQUINA NA ERA DO BIG DATA

# Sistemas de Recomendação
# Filtragem colaborativa
# Recomendação no Mahout

Sistemas de recomendação

Pesquisa / Compras – Quantas vezes você comprou / verificou algum produto ou item guiado por uma recomendação de um site ou uma loja virtual?

Filmes / Vídeos – Quantos vídeos você já assistiu no Youtube ou um um filme no Netflix recomendados automaticamente baseado no seu perfil ou histórico anterior?

Vagas de emprego – Quantas vezes você foi avisado de vagas de emprego nas redes sociais que era realmente interessante?

Para que é preciso sistemas de recomendação?

A mais clara e pura verdade é vender mais! mas espere não só isso, a recomendação funcional pode ajudar os clientes a encontrar produtos  ou outra coisa qualquer, que sozinhos nunca encontrariam pois lhe é apresentado conteúdo/produto de interesse e relevância nada é ao acaso.

Recomendações e seus big números

#  Facebook – 1.49 bilhões de usuários
#  Youtube – 65 horas de upload de vídeos a cada minuto
#  Spotify – > 30 milhões de músicas
#  Netflix – > 14 mil filmes
Números atualizados em 30/09/2015

Benefícios obtidos com sistema de Recomendação.

#  Atrai a atenção do usuário
#  Melhora a aceitação de um novo serviço / produto
#  Melhora a percepção do que está sendo visualizado pelos usuários
#  Guia os usuários para serviços e produtos apropriados
#  Permite desenvolver um sistema de feedback

Pense e reflita!

“Mas espere um pouco…nem tudo é tão belo e funcional neste mundo de recomendações, pois nem sempre a recomendação está correta”

Quando os problemas infelizmente ou quem sabe felizmente surgem!

Dois problemas centrais de qualquer sistema de recomendação

#  A identificação do interesse do usuário – A recomendação é feita baseada na análise do histórico de consumo do usuário, quais produtos /  serviços foram comprados, utilizados ou avaliados

#  calculo da similaridade entre os itens a serem recomendados – para que se consiga recomendar algo dentro do conjunto de interesse do usuário.

Existem duas abordagens distintas de como se definir o interesse do indivíduo e como se calcular a similaridade entre os itens:

Recomendação baseada em conteúdo

#  Totalmente voltada para análise de informações sobre os usuários ou sobre os itens ou sobre os dois (usuários e itens)
#  Envolve a definição de perfis dos usuários e diversas características dos elementos a serem recomendados
#  Restrita a cada domínio específico, pois em muitos casos depende de atributos que fazem sentido em determinados cenários

Recomendação por filtragem colaborativa

#  Se caracteriza pela análise do histórico do usuário, considerando algum tipo            de avaliação de itens feito pelo usuário
#  Diferente da recomendação baseada em conteúdo, as características dos               produtos ou propriedades do usuário não são consideradas na filtragem                 colaborativa

Filtragem colaborativa

Na filtragem colaborativa, para cada item ou usuário uma vizinhança ( neighborhood ) é formada com itens ou usuários similares, uma vez que o usuário visualiza um item recomendações são formadas a partir dessa vizinhança.

Com filtragem colaborativa, existem ainda três variações principais da forma de se gerar a recomendação:

#  Baseada em usuário
#  Baseada em ítens
#  Híbrida

Filtragem colaborativa baseada em usuário

Consistem em descobrir a semelhança entre os diferentes usuários do sistema, para se recomendar os itens bem avaliados por pessoas semelhantes ao usuário ao qual a recomendação se destina

Filtragem colaborativa baseada em Itens

Consistem em filtrar os itens que o usuário avaliou melhor, para então identificar no sistema itens similares a esses, que estão serão recomendados.

Filtragem colaborativa Híbrida

Consiste na utilização das abordagens baseadas em conteúdo e em itens. Utilizada por Amazon e Spotify.

Spotify_logoAmazon_logo

Recomendação no mahout

Fornece algorítimos de recomendação baseados no framework Taste por Sean Owen

Benefícios:

#  Eficiência operacional
#  Escalabilidade no uso do MapReduce e Hadoop

O módulo de recomendação do Mahout implementa somente algorítimos baseados na Filtragem Colaborativa, pois não há muito sentido em tentar abstrair em um framework cenários predeterminados de geração de recomendação baseado em conteúdo.

Algorítimos de filtragem colaborativa:

#  Baseada no usuário: Recomenda itens encontrando usuários semelhantes. Muitas vezes é mais difícil de escalar, devido à natureza dinâmica dos usuários.

#  Baseada em itens: Calcula a similaridade entre os itens e faz recomendações. Itens normalmente não mudam muito, por isso muitas vezes isso pode ser calculado offline.

#  Slop-One: Abordagem de recomendação de filtragem colaborativa rápida e simples,  aplicável quando os usuários geraram classificações (e não apenas preferências booleanas)

Medidas de similaridade – Fornecem uma medida de similaridade entre os itens ou usuários.

#  Correlação de Person
#  Distância Euclidiana
#  Coeficiente de Tanimoto
#  Log-Likelihood

Correlação de Pearson

#  Indica a tendência das duas séries de números aumentarem ou diminuírem em conjunto. A intervalo de correlação de Pearson é de -1 a 1

#  Valores próximos de 1 indicam que as duas séries são alteradas na mesma
direção, aumentando ou diminuindo juntas

#  Valores próximos a -1 indicam correlação negativa. A mudança duas séries em direções opostas, por isso, se uma aumenta a outra diminui.

#  Valores próximos de 0 significa que as duas séries não têm padrões relacionados com suas respectivas alterações

#  Classe Mahout – PearsonCorrelationSimilarity

Distância Euclidiana

#  Baseada na distância entre usuários

#  Usuários são representados como pontos em um espaço. As coordenadas do espaço são referentes aos itens de uma base de dados. O valor de preferência ao item é o valor da coordenada.

#  O valor da distância Euclidiana é um valor positivo entre 0 e 1 Valores próximos a 1 indicam itens similares e valores próximos a 0 indicam que usuários não possuem preferências similares

#  Classe Mahout – EuclideanDistanceSimilarity

Coeficiente de Tanimoto

#  Tanimoto ou Jaccard são coeficientes de contagem da razão entre o número de elementos comuns entre dois usuários dividido pelo número de itens que ambos os utilizadores têm preferência.

#  Classe Mahout – TanimotoCoefficientSimilarity

Log-Likelihood

#  Medida de similaridade similar ao coeficiente de Tanimoto, mas, adicionalmente, calcula quão provável é a sobreposição entre os dois usuários.

#  Classe Mahout – LogLikelihoodSimilarity

Exemplo:

recomendaMahout

Fase Map 1- Faz do usuário a chave

recMahout1

Fase Reduce 1 – Cria o índice invertido

recMahout2

Fase Map 2 – Emite todas as classificações de coocorrências

recMahout3

Fase Reduce 2 –  Calcula as similaridades

recMahout4

Considerações finais

Mahout pode ser utilizado nos seguintes

#  Recomendação de amigos, produtos, serviços
#  Classificar grupos em conteúdo em grupos predefinidos
#  Encontrar conteúdos similares baseado em propriedades de objetos
#  Identificar tópicos-chave em grandes coleções de texto
#  Fazer análise de churn
#  Muito mais (quer dizer que ainda não tenho mais exemplos :-))

mahoutFluxo

Porque utilizar Mahout?

#  Desempenho
#  Processamento distribuído
#  Escalável
#  Simples
#  R-Like DSL Scala API
#  Operações de álgebra linear
#  Compatibilidade com bibliotecas como MLLib
#  Permite execução no Spark
#  H2O in progress (pelo menos era em 01/10/2015)

Mahout na Prática

Passo 1 – Estruturar o arquivo
Passo 2 – Criar um diretório no HDFS
Passo 3 – Enviar arquivos para o HDFS
Passo 4 – Executar algoritmo de filtragem colaborativa
Passo 5 – Visualizar o resultado
Passo 6 – Formatar o resultado

Base de dados: Registros de preferências

#  BX-Books.csv
#  BX-Book-Ratings.csv
#  BX-Users.csv

Objetivo: Recomendar livros aos usuários de acordo com o histórico de preferência

Passo 1 – Estruturar o arquivo

O algoritmo distribuído de recomendação baseado em item requer duas entradas:

1) Arquivo com as recomendações
2) Arquivo com ID ́s de usuários que receberão as recomendações

Comandos

cd ~/Documents

#executar script para remover aspas e converter ponto-e-vírgula para vírgula.
python clean_book_ratings.py BX-Book-Ratings.csv cleaned_book_ratings.txt

Foi criado o arquivo cleaned_book_ratings.txcom os dados higienizado (sem aspas e o ponto e virgula foi convertido para vírgula)

#executar script para gerar um arquivo somente com os id ́s dos usuários
./clean_book_users.sh

Passo 2 – Criar um diretório no HDFS

hadoop fs -mkdir books

Passo 3 – Enviar arquivos para o HDFS

hadoop fs -put cleaned_book_users.txt books
hadoop fs -cat books/cleaned_book_users.txt | head -n5

Observação no comando acima podemos remover o | head -n5 para a exibição de todos os dados

Passo 4 – Executar algoritmo de filtragem colaborativa

mahout recommenditembased
–input books/cleaned_book_ratings.txt
–output books/recommended
–usersFile books/cleaned_book_users.txt
-s SIMILARITY_LOGLIKELIHOOD

hadoop fs -ls temp

Passo 5 – Visualizar resultado

#  Após terminado a execução do job, o resultado será armazenado no diretório books/recommended/part-r-00000.

#  O formato de saída será o ID do usuário, seguido de uma lista separada por vírgulas do ID do item e um score dado a ele.

Passo 5 – Visualizar resultado

hadoop fs -cat books/recommended/part-r-00000 | head -n5

Passo 6 – Formatar o resultado

hadoop fs -cat books/recommended/part-r-00000 | python print_user_summaries.py BX-Books.csv BX-Users.csv BX-Book-Ratings.csv 10

Fim


Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s