detecção de outlier: área sob curva de recall de precisão

7

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.

Manuel Schmidt
fonte
Você poderia especificar em qual idioma seu código está? É MATLAB?
Alex R.
Sim, é MATLAB
Manuel Schmidt

Respostas:

4

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.tpfpprec=tp/(tp+fp)x

Você pode ver isso plotando a curva PR:

[X,Y,T,PR] = perfcurve(label,score,1, 'xCrit', 'reca', 'yCrit', 'prec') % PR = 0
figure
scatter(X,Y)
xlabel('recall')
ylabel('precision')

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 .

outlier = 1;
normal  = 0;
% 99% normal data 1% outlier
label = normal*ones(1000,1); 
label(1:10) = outlier;  

%label = real( rand(1000,1) > 0.99 );     % 99% normal data 1% outlier
score1 = [zeros(999,1);1]; % predict everything as zero, and one mistake 
score2 = [1;zeros(999,1)]; % predict everything as zero, and one 1 correct 

[X,Y,T,AUC1] = perfcurve(label,score1,1)
% AUC1 = 0.5
[X,Y,T,AUC2] = perfcurve(label,score2,1)
% AUC2 = 0.55

[X,Y,T,PR1] = perfcurve(label,score1,1, 'xCrit', 'reca', 'yCrit', 'prec') 
% PR1 = 0.005 
[X,Y,T,PR2] = perfcurve(label,score2,1, 'xCrit', 'reca', 'yCrit', 'prec') 
% PR2 = 0.4545

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

Tom
fonte