Hoje em dia a criação de perfis de usuário em sites é muito comum. Antes mesmo de você usar um serviço você já contou metade da sua vida para o Banco de Dados do outro lado. Na maioria das vezes estes dados ficam parados, enquanto podiam ser usados para melhorar a experiência do usuário. Para aproveitar melhor o que você diz na hora do cadastro, vou mostrar aqui um método muito simples de desenvolver um Sistema de Recomendação que pode servir para várias finalidades.
[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:
Como funciona uma Máquina de Busca?
5 dicas simples para aumentar a sua produtividade
|
|
16 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;
Postar um comentário