[Matemática]
O método consiste basicamente em calcular a distância entre dois pontos. Isso mesmo, um pouco de geometria! Para isso iremos utilizar a fórmula da Distância Euclidiana. (Não se assustem com a fórmula)
Considerando dois pontos:
Temos a fórmula:
O algoritmo é bem simples, basta pegar uma coordenada de um ponto, subtrair com a mesma coordenada do outro ponto e elevar o resultado ao quadrado, soma-se esta operação para cada coordenada e por fim tira-se a raiz quadrada. 'n' é o número de coordenadas e no nosso caso vai ser o número de características do produto.
O resultado desta fórmula vai ser um número positivo. Quanto mais próximo de zero, mais perto estão os dois pontos. (zero significa pontos iguais)
[/Matemática]
Começando a recomendar produtos!
Tá! Muito legal esse monte de números. Mas como meu sistema de recomendação vai dizer que um cara que gosta de uma banda de Rock não vai querer saber do novo CD solo da Cláudia Leite do Babado Novo (já lançou?).
Para isso, usa-se a discretização, um nome tosco e feio para dizer que palavras viram números. Por exemplo, considerando gêneros de música podemos dizer que:
Axé = 1
Pagode = 2
Forró = 3
Sertanejo = 4
Pop = 5
Rock = 6
Metal = 7
Pode-se fazer para faixas de preço também:
R$1-5 = 1
R$6-15 = 2
R$16-30 = 3
R$31-50 = 4
Percebam que eu tentei colocar estilos parecidos com números próximos (Rock e Metal por exemplo). Isso melhora bastante as recomendações. (se não entenderem por que, me perguntem)
Então:
Dado um Perfil de usuário: (6,1). Ou seja, que gosta de rock e é um duro sem dinheiro.
Dado as características de um CD: (1,4). Ou seja, novo cd da Cláudia Leite e muito caro.
Fazendo a distância euclidiana entre estes dois pontos (6,1 e 1,4) consegue-se medir a "afinidade" entre o perfil do usuário e aquele produto. Ao fazer este mesmo cálculo entre o perfil de um usuário e todos os produtos de uma loja, por exemplo, é possível fazer um Rank dos produtos que ele tem maior afinidade e, quem sabe, vontade de comprar.
No final das contas, o perfil de um usuário e as características de um produto serão representadas por um vetor de números ([1,4,6,1,2,3]).
Melhorando as recomendações
É possível e recomendável dar mais importância para características mais importantes (claro né!) O gênero de um jogo provavelmente é mais influente que a presença ou não de multiplayer. Para representar isto, basta multiplicar o termo correspondente a característica por um número (quanto maior, mais importância), por exemplo: 5*[(p1+q1)^2].
Experiência própria
Nos meus testes eu usei uma base de Games. Coloquei as seguintes características para eles: Gênero, faixa etária, se tem multiplayer (0 ou 1), para qual console. Cada característica tinha a sua própria discretização no estilo da mostrada acima.
A minha base de Games tem 100 jogos cadastrados e também tenho um sistema em PHP para cadastrar e ver as recomendações que ainda vem com uma mini rede social (mini mesmo) que cadastra, pesquisa, adiciona amigos e faz recomendação de produtos para eles. Quem quiser, pode me mandar um e-mail ou comentário que eu envio. De qualquer modo, devo atualizar e colocar o link aqui.
PS: Eu gosto de rock, não tenho dinheiro mas eu não gosto de Axé!!
PS.2: Qualquer dúvida, pode perguntar!
Artigos que tem alguma coisa a ver com este post:
24 comentários:
Umm, muito interessante. Nunca tinha pensado pelo lado "matemático" da coisa.
Um sistema desse exibindo anúncios no Orkut seria impressionante!
Fala Érico!
O Facebook começou a usar anúncios com base no perfil do usuário mas parece que não ficou muito legal não. hehehe
Abraço!
Olá, como vai?
sou Reginaldo.
Bem interessante seu artigo.
Também venho trabalhando com sistemas de recomendações.
Gostaria de trocar umas idéias com você.
Pode me escrever?
reggotardo@gmail.com
abraço e obrigado
Meus parabéns pelo post!
Nunca tinha visto um tutorial desse tipo, você explicou um sistema de recomendação apenas com lógica de programação (e um pouco de matemática né =p ).
Abração!
Valeu Cayo!
A intenção for explicar da maneira mais simples possível, hehe!
Abraço!
Hummel, já te falei que tu é um gêniozinho do mal?
hahaha
Um sistema de recomendação inteligente baseado em comprar em um e-commerce é aumento nas vendas certamente. Muito legal o jeito que tu explicou como funciona!
Abracetas
Opa Guilherme!
Hehehe, espero que isso tenha sido um elogio! uheheuhe
Um Sistema de Recomendação é algo relativamente simples de se implementar, só tem que ser bem feito, e de fato pode mostrar anúncios mais interessantes para o usuários.
O Submarino faz algo legal, mas ele usa Mineração de Dados, mas é diferente.
Depois de fazer umas pesquisas vou ver se faço post mostrando outras maneiras mais "Sérias" de fazer sistemas de recomendação, esse que eu mostrei é mais light hehehe.
Abraço!
Bem legal o tutorial. Tudo mastigadinho... Se estivesse em inglês, estaria na capa do Digg!
Um abraço. :)
Gostei pra caramba desse tutorial. Eu nunca ia imaginar fazer um sistema de recomendação usando "Distância Euclidiana". Ficou tão simples que assusta. =D
Esse projeto que você falou, tinha como me mandar? tô dando uma estudada em php, ia me ajudar bastante.
Elomar França
elomar.f@gmail.com
vlw
Hi,
I have implemented a photo recommendation system ( http://www.photoree.com ) and I guarantee you it is way more complicated than just using euclidean distances ;)
Hi, Daniel. I didn't said that this is the only way to implement recommendation systems ;) It's probably the easiest way.
That are plenty other recommendations heuristics.
Using data mining, Information Retrieval e etc...
Thanks for the comment and I'll check your site.
Olá Hummel,
Estou criando um sistema de recomendação musical, baseado em tags e gêneros e estilos.
Mas sinceramente ainda não peguei a coisa... Você teria alguma coisa para indicar? Um caminho a seguir?
Opa Andreas!
Adiciona aih felipehummel@gmail.com, q a gente conversa melhor.
Sistemas de recomendação tem muita coisa que pode fazer.
Oq a maioria dos sistemas fazem é usar mineração de dados pra isso.
Abraço
Cara genial! manda pra mi o sistema se for possível, por favor!
kawz86@hotmail.com
interessante e muito útil, esta de parabéns.
voce teria algum demo para estudos?
basico mesmo.
favor enviar caso tenha para: geriofilho@gmail.com
agradeço;
Olá Hummel,
Preciso criar um sistema de recomendação para a faculdade, só que não faço idéia de como farei isso.
Será que você poderia me indicar alguma coisa?
Meu e-mail é: paulo.araujob100@gmail.com
Grato...
Oi Hummel,
Estou estudando sobre sistema de recomendação para aplicar em uma rede social, como proposta para meu estágio e tcc na facul, será que teria como eu trocar algumas idéias com vc?
Se puder me adicionar ou indicar alguma coisa.
Meu email é: infodeise@gmail.com
Oi,
To começando agora a estudar sistemas de recomendação, e achei sua postagem muito interessante e esclarecedora.
Gostaria que vc me enviasse o sistem a em PHP que vc comentou no posts, e qualquer coisa legal que vc tenha por aí, rs.. =) .. artigo, link, oq quiser.
Obrigada pela atenção.
Bjs;*
Jaq.
Cara, muito bom o seu Post! Parabéns!!
Queria pedir, que me mostrasse o seu sisteminha para eu poder estudá-lo e poder criar o meu próprio sistema de recomendação. No aguardo, obrigado.
Cara, poderia me mandar isso, se vc ainda tiver? Hehehe
willmetalangel@gmail.com
Grato
Olá, Hummel,
estou estudando SR para um possível tema de mestrado, você teria o link da sua aplicação ou indicaria algum local de repositório aberto que eu pudesse ter acesso a outras aplicações?
Abs.
Tenho interesse nesse sistema de recomendações. Peço que me envie o sistema. No aguardo, obrigado.
daivid_as@hotmail.com
Olá Hummel,
Sei que faz tempo essa postagem, mas se ainda tiver seu sistema de recomendação gostaria de estudá-lo para eu ter algumas ideias para o meu TCC que nele inclui uma feature de recomendação. Até se quiser, eu te aviso quando ele estiver pronto.
Obrigado,
gpsarraff@gmail.com
Postar um comentário