Este documento discute os principais conceitos e técnicas por trás dos sistemas de recomendação, incluindo ciência de dados preditiva e prescritiva, machine learning, filtros colaborativos e híbridos, e métricas para avaliar modelos de recomendação.
3. Preditiva
● Vai chover ou vai fazer sol?
● Quais ações vão valorizar?
● Quanto tempo vou levar pra chegar em casa?
4. Preditiva
● Vai chover ou vai fazer
sol?
● Quais ações vão
valorizar?
● Quanto tempo vou levar
pra chegar em casa?
Prescritiva
● Você deveria usar esta
roupa
● Você deveria comprar
estas ações
● Você deveria seguir este
trajeto
26. Split correto
● Selecionar usuários com preferência
de no mínimo N+1 itens
● Selecionar aleatoriamente X desses
usuários
● Selecionar no máximo K itens
aleatórios desses usuários desde que
na base de treino o usuário continue
com N itens
28. Não dá pra comparar
Se compararmos
dois algoritmos ou
input de dados
diferentes
Colaborative Filtering
por rating explícito
Colaborative Filtering
por rating implícito
binário
Colaborative Filtering
por rating implícito de
tempo de video visto
RMSE=0.7
RMSE=0.1
RMSE=30000
29. Treino de modelo de recomendação
Métrica de cada algoritmo
(Exemplo: ALS: RMSE)
Métrica de
ranking ou de
classificação
30. Sempre alta precisão e recall
item preference predicted
item1 0.8 0.7
item2 0.7 0.6
Precision@5x5 = 1.0
Recall@5x5 = 1.0
Precision@1x5 = 1.0
Recall@1x5 = 0.5
31. Inserir itens sem preferência
conhecida no split de teste
item preference predicted
item1 0.8 0.7
item2 0.7 0.6
item3 -- 0.8
item4 0.9
item5 0.95
item6 0.9
Precision@5x5 = 0.2
Recall@5x5 = 0.5
Precision@1x5 = 0.0
Recall@1x5 = 0.0
32. Resumão pra prova
● No fim das contas é bem parecido
● Split por usuário e itens
● Métrica diferente no treino e na validação
● Complemento de itens desconhecidos pra validação
33. Evitem essa armadilha
val Array(training, test) = ratings.randomSplit(Array(0.8, 0.2))
val als = new ALS()
val model = als.fit(training)
val predictions = model.transform(test)
val evaluator = new RegressionEvaluator().setMetricName("rmse")
val rmse = evaluator.evaluate(predictions)
println(s"Root-mean-square error = $rmse")
É o sistema que ajuda pessoas a encontrarem o que necessitam com o mínimo esforço possivel.
Enorme matriz
SVD redução de dimensionalidade
É o sistema que ajuda pessoas a encontrarem o que necessitam com o mínimo esforço possivel.
P. Cremonesi, Y. Koren, and R. Turrin. Performance of recommender algorithms on top-n recommendation tasks. RecSys ’10, pages 39–46. ACM, 2010.
Y. Koren. Factorization meets the neighborhood: a multifaceted collaborative filtering model. KDD ’08, pages 426–434. ACM, 2008.