Eu gostaria de comparar algoritmos de detecção outlier. Não tenho certeza se a área sob roc ou sob a curva de recuperação de precisão é a medida a ser usada.
Um teste rápido no Matlab me dá resultados estranhos. Eu tento obter os valores ROC e PR para uma classificação perfeita:
% true labels
outlier = 1;
normal = 0;
% 99% normal data 1% outlier
label = normal*ones(1000,1);
label(1:10) = outlier;
% scores of the algorithm
% assume the prediction is perfect
score = label;
[~,~,~,AUC] = perfcurve(label,score,outlier) % AUC = 1
[~,~,~,PR] = perfcurve(label,score,outlier, 'xCrit', 'reca', 'yCrit', 'prec') % PR = 0
Por que a área abaixo de PR = 0? Não deveria ser 1?
O ROC da AUC também fornece o resultado esperado se avaliado com um classificador constante que é 0,5:
label = real( rand(1000,1) > 0.99 ); % 99% normal data 1% outlier
score = zeros(1000,1); % always predicting zero
[~,~,~,AUC] = perfcurve(label,score,1) % AUC = 0.5
Então, por que a área sob a curva PR é considerada melhor para comparar algoritmos de detecção extremos?
Edit: Eu não viso uma resposta específica do matlab para minha pergunta. Este é apenas um MWE para você.
Eu só me pergunto por que tantas publicações recomendam que o AUC PR seja mais adequado que o ROC para conjuntos de dados desequilibrados, pois eles são típicos para detecção de valores extremos. Minha rápida prova de conceito acima parece indicar o contrário.
fonte
Respostas:
O problema está no seu exemplo: é possível ter zero e zero ; portanto, a precisão fica indefinida porque dividimos por zero. Por esse motivo, a curva PR contém apenas pontos para um valor e, portanto, a área sob a curva PR se torna zero no seu exemplo.tp fp prec=tp/(tp+fp) x
Você pode ver isso plotando a curva PR:
Portanto, traçar uma curva de relações públicas não funciona realmente bem quando todas as suas pontuações são iguais.
Para obter mais insights entre a diferença da curva PR e a curva ROC, compare essas duas listas de previsão. Consideramos o caso em que prevemos todos os zeros e prevemos um 1, mas deve ser zero (escore1). Este não funciona muito bem, prevê 0 em todos os lugares, exceto por um objeto em que prevê 1 onde deve ser zero. Consideramos outro caso, onde prevemos um 1 corretamente, e o restante classificamos como 0. Aqui, prevemos 1 um corretamente, e o restante classificamos como 0. Comparamos a área sob a curva PR e a área sob o ROC .
Observe que a AUC varia pouco entre a pontuação1 e a pontuação2. No entanto, a área sob a curva PR é significativamente diferente. Recompensa score2 muito mais que score1. Isso indica que é mais adequado para a detecção de valores extremos: recompensa a detecção de valores extremos muito mais do que a AUC. No caso de detecção de valores extremos, você prefere a pontuação2 muito mais, pois ela prediz o 1 que você deseja detectar corretamente, enquanto a pontuação1 prediz um 1 para um zero e nunca captura nenhum valor externo.
Em geral, a CUA é mais informativa para dar uma idéia de como suas previsões funcionam para vários antecedentes anteriores. Assim, a AUC caracteriza como o classificador funciona para um número variável de unidades e zeros.
As curvas de RP indicam mais bem o desempenho do desequilíbrio da classe atual considerado. Portanto, a curva PR é mais interessante para você: leva em consideração que existem poucos 1s no seu conjunto de dados que 0s. Como você só está interessado nesse caso quando está interessado em detectar valores extremos, a curva PR é mais informativa.
Embora a AUC caracterize como suas previsões seriam se também houvesse muito mais 1s.
Para mais informações, consulte também:
https://www.quora.com/What-is-Precision-Recall-PR-curve
ROC vs curvas de precisão e recuperação
Finalmente, você pode estar interessado em como calcular uma curva ROC / PR, uma explicação detalhada é dada aqui para curvas ROC:
http://blogs.sas.com/content/iml/2011/07/29/computing-an-roc-curve-from-basic-principles.html
fonte