Acurácia, Sensibilidade, e Especificidade
Published: 2021-02-04 12:30:51

Existem diversas métricas para se avaliar a qualidade de um
modelo de machine learning. 3 delas são a Acurácia, a
Sensibilidade, e o Especificidade.

A *Acurácia* é a mais geral delas. Ela simplesmente diz a
percentagem dos dados (do conjunto de validação ou de teste) que foram classificados corretamente pelo modelo. Por exemplo, se o conjunto de validação possui 10 elementos, e 8 deles foram classificados corretamente, então a acurácia do modelo é 80% (8/10).

Sensibilidade e Especificidade são métricas usadas quando estamos trabalhando com duas classes, e tomamos uma delas como referência. Vamos chamar essas duas classes de A e B, e vamos usar A como referência. Vamos também chamar de Falsos Positivos (FPs) os elementos da classe B que o modelo classificou como da classe A, e Falsos Negativos (FNs) o inverso (elementos da  classe A classificados pelo modelo como de classe B).

Neste caso, a Sensibilidade é a percentagem dos elementos
da classe A que foram classificados corretamente. Vamos supor que dos 10 elementos do exemplo acima, 5 eram da classe A, e 5 eram da classe B. E que dos 8 elementos classificados corretamente, 3 eram da classe A. Como a classe A possui 5 elementos, e destes, 3 foram classificados corretamente, então a Sensibilidade do modelo será de 60% (3/5), e a taxa de FPs (Falsos Postiviso), de 40% (100%-60%).

Ainda neste caso específico, a Especificidade é a percentagem dos elementos da classe A que foram classificados corretamente. Se dos 8 elementos que foram classificados corretamente, 3 eram da classe A, então 5 eram da classe B. Como temos 5 elementos da classe B, então a Especificidade, neste caso, é de 100% (5/5), e a taxa de FNs (Falsos Negativos), de 0% (100%-100%).

Apesar de querermos inerentemente buscar modelos com acurácia
de 100% (ou seja, capazes de acertar tudo sempre), a essência
dos próprios dados, na prática, pode fazer com que isso seja
impossível de acontecer. Ainda assim, (novamente) na prática,
o importante mesmo vai ser que o modelo consiga zerar ou 
a taxa de Falsos Positivos ou a taxa de Falsos Negativos,
e isto vai depender do contexto de aplicação.

Em testes clínicos, por exemplo, é essencial que toda pessoa que seja portadora de determinada patologia seja detectada.
Considerando, assim, "Pessoa Saudável" como classe A, e "Pessoa Doente" como classe B, será necessário que o modelo de machine learning possua uma taxa de Falsos Negativos (pessoas doentes classificadas como saudáveis) de 0%.

Em predição de função de proteínas, por outro lado, o cenaŕio
se inverte. Tomando como classe A "A proteína possui função X" e como classe B "A proteína NÃO possui função X", será necessário que o modelo de machine learning possua uma taxa de Falsos Positivos (proteínas sem a função X classificadas como tendo a função X) de 0%.

Em 2011, eu assisti a uma palestra do Estevam Hruschka [1] sobre "Never-Ending Language Learning" [2], e ele começou fazendo a seguinte reflexão: se nas escolas a gente permite que alunas e alunos sejam aprovadas/aprovados com nota 7 (numa escala de 0 a 10), porque a gente exige que nossos modelos de machine learning "tirem 10"? Isso me deixou pensativo por alguns dias, e escrevendo este texto, quase uma década depois, me fez entender de fato a essência da coisa. Agora fica para você refletir sobre isto também.

Referências
[1] https://megagon.ai/team/estevam-hruschka/
[2] http://rtw.ml.cmu.edu/rtw/