Suponha que eu criei um sistema de recomendação que (dado o ranking de filmes ou qualquer outro usuário) produzirá uma lista de 10 filmes recomendados para cada usuário assistir. Imagine que eu também tenho um grande conjunto de itens de filme, juntamente com um registro de classificações de usuários e filmes que eles realmente decidiram assistir. Então, eu quero usar esse conjunto de dados para avaliar meu sistema.
Eu já vi na literatura que essas tarefas "sugerem alguns bons itens" geralmente são avaliadas usando precisão, recordação e pontuação na F1 (por exemplo, veja [1] ). Eu acho que deveria me interessar, em particular, "precisão em 10". No entanto, não tenho muita certeza de como se deve calcular essas medidas (ou se fazem algum sentido) no cenário que descrevi acima.
Aparentemente, a coisa preferida a fazer é dividir aleatoriamente a amostra em uma parte de "treinamento" e "de teste". E, em seguida, alimente os dados de treinamento ao meu algoritmo para que ele possa apresentar uma lista de 10 previsões.
Agora a precisão meio que faz sentido, posso verificar pelas 10 previsões quantas delas são realmente encontradas nos filmes assistidos pelo usuário nos dados de teste.
No entanto, para lembrar, se o usuário assistiu a muitos filmes nos dados de teste, digamos 50 ou mais; não há como obter uma pontuação "boa" de recall, simplesmente porque meu sistema estava restrito a produzir apenas 10 filmes e eu teria no máximo 1/5 = 0,2 de recall.
Como alternativa, se eu restringir o teste apenas para adivinhar os "próximos 10 filmes assistidos" do usuário (para que haja uma chance de obter um "recall perfeito"), a precisão e o recall serão sempre exatamente o mesmo número (se o número recomendado e o número relevante para o usuário é o mesmo, precisão e recall também são sempre os mesmos).
Estou fazendo algo errado? Ou essas métricas simplesmente não fazem muito sentido no cenário considerado?