(Acest articol a fost publicat pentru prima dată pe R – blogul lui Davidși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)
Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.
Când rulați un clasificator binar pe o populație, obțineți o estimare a proporției de pozitive adevărate în acea populație. Acesta este cunoscut sub numele de prevalență.
Dar acea estimare este părtinitoaredeoarece niciun clasificator nu este perfect. De exemplu, dacă clasificatorul dvs. vă spune că aveți 20% din cazurile pozitive, dar se știe că precizia sa este de numai 50%, v-ați aștepta ca prevalența reală să fie de 0,2 $ times 0,5 = 0,1 $, adică 10%. Dar asta presupune o reamintire perfectă (toate elementele pozitive adevărate sunt semnalate de clasificator). Dacă reamintirea este mai mică de 1, atunci știți că clasificatorul a omis unele aspecte pozitive adevărate, deci dvs asemenea trebuie să normalizeze estimarea prevalenței prin rechemare.
Aceasta duce la formula comună pentru obținerea adevăratei prevalențe $Pr(y=1)$ din rata de predicție pozitivă $Pr(hat{y}=1)$:
$$
Pr(y=1) = Pr(hat{y}=1) times frac{Precision}{Recall}
$$
Dar să presupunem că doriți să rulați clasificatorul de mai multe ori. De exemplu, este posibil să doriți să faceți acest lucru la intervale regulate pentru a detecta tendințele în prevalență. Nu mai poți folosi această formulă, pentru că precizia depinde de prevalență. Pentru a utiliza formula de mai sus, ar trebui să reestimezi în mod regulat precizia (să zicem, cu eval uman), dar apoi ai putea la fel de bine să reestimezi și prevalența în sine.
Cum ieșim din raționamentul circular? Se pare că clasificatorii binari au alte metrici de performanță (pe lângă precizie) care nu depind de prevalență. Acestea includ nu numai retragerea $R$, ci și specificul $S$, iar aceste valori pot fi utilizate pentru a ajusta $Pr(hat{y}=1)$ pentru a obține o estimare imparțială a prevalenței reale folosind această formulă. (uneori numit ajustarea prevalenței):
$$Pr(y=1) = frac{Pr(hat{y}=1) – (1 – S)}{R – (1 – S)}$$
unde:
- $Pr(y=1)$ este adevărata prevalență
- $S$ este specificul
- $R$ este sensibilitatea sau rechemarea
- $Pr(hat{y}=1)$ este proporția de pozitive
Dovada este simplă:
$$
begin{aliniat}
Pr(hat{y}=1) &= Pr(hat{y}=1, y = 1) + Pr(hat{y}=1, y = 0) \
&= Pr(hat{y}=1 | y = 1) times Pr(y = 1) + Pr(hat{y}=1 | y = 0) times Pr(y = 0) ) \
&= R times Pr(y = 1) + (1 – S) times (1 – Pr(y = 1))
end{aliniat}
$$
Rezolvând $Pr(y = 1)$ rezultă formula de mai sus.
Observați că această formulă se descompune atunci când numitorul $R – (1 – S)$ devine 0 sau când retragerea devine egală cu rata fals pozitivă $1-S$. Dar amintiți-vă cum arată o curbă tipică ROC:
O curbă ROC ca aceasta grafică reamintește $R$ (alias de rata pozitivă adevărată) față de rata fals pozitivă $1-S$, deci un clasificator pentru care $R = (1-S)$ este un clasificator care se încadrează pe diagonala Diagrama ROC. Acesta este un clasificator care, în esență, ghicește aleatoriu. Cazurile adevărate și cazurile false sunt la fel de probabil să fie clasificate pozitiv de către acest clasificator, astfel încât clasificatorul este complet neinformativ și nu puteți învăța nimic din el – și cu siguranță nu prevalența adevărată.
Destul de teorie, să vedem dacă funcționează în practică:
# randomly draw some covariate x <- runif(10000, -1, 1) # take the logit and draw the outcome logit <- plogis(x) y <- runif(10000) < logit # fit a logistic regression model m <- glm(y ~ x, family = binomial) # make some predictions, using an absurdly low threshold y_hat <- predict(m, type = "response") < 0.3 # get the recall (aka sensitivity) and specificity c <- caret::confusionMatrix(factor(y_hat), factor(y), positive = "TRUE") recall <- unname(c$byClass('Sensitivity')) specificity <- unname(c$byClass('Specificity')) # get the adjusted prevalence (mean(y_hat) - (1 - specificity)) / (recall - (1 - specificity)) # compare with actual prevalence mean(y)
În această simulare primesc recall = 0.049
şi specificity = 0.875
. Prevalența prezisă este ridicol de părtinitoare 0.087
dar prevalența ajustată este în esență egală cu prevalența reală (0.498
).
Pentru a rezuma: aceasta arată cum, folosind reamintirea și specificitatea unui clasificator, puteți ajusta prevalența prezisă pentru a o urmări în timp, presupunând că amintirea și specificitatea sunt stabile în timp. Nu puteți face acest lucru folosind precizie și reamintire deoarece precizia depinde de prevalență, în timp ce amintirea și specificitatea nu.
Postarea Clasificatorul tău este spart, dar este încă util a apărut prima dată pe blogul lui David.