Regressão Logística

Escrito por Miguel Cyrineu Vale

Tópicos Abordados

  • Intuição Lógica e Aplicações Práticas
  • Métricas de Avaliação

Fundamentos

Vamos supor que você seja um médico, mas está tendo dificuldades em identificar se seus pacientes tem doença cardíaca.

Normalmente, para fazer isso, você analisaria diversos indicadores da saúde do paciente: Idade, colesterol, pressão, etc., e utiliza seus conhecimentos e experiência para dizer se é provavel que aquela pessoa tenha uma doença cardíaca. No entanto, nem sempre é fácil tomar essa decisão apenas com base na intuição ou na experiência: alguns pacientes apresentam sintomas sutis ou resultados inconclusivos nos exames, dificultando seu trabalho.

É aí que entra a regressão logística: uma ferramenta estatística que nos ajuda a transformar dados quaisquer em respostas de “sim” ou “não” (nesse caso, se o paciente tem ou não a doença).

A Regressão logística é bastante similar à regressão linear, mas com um passo a mais, que é a aplicação da função logística (ou sigmoid). Na regressão linear, usamos uma função linear para prever um valor contínuo (isto é, que pode ser qualquer número de -infinito até +infinito) – o que nos dá uma linha que prevê os valores. Já aqui, na regressão logística, passamos esse valor gerado pela regressão linear pela função logística, que “aperta” esse valor entre 0 (não) e 1 (sim). Isso nos dá uma curva em “S”, que prevê a chance de “sim” e de “não”.

Mas como assim uma curva em “S”? E como essa curva nos dá probabilidades? Vamos começar visualizando o problema:

Olhando esse gráfico, conseguimos perceber algumas tendências: que pacientes mais velhos têm mais chance de ter doença cardíaca, e que, a partir dos ~50 anos, começa a ser mais comum ter doença cardíaca do que não ter.

Com isso, nosso objetivo é achar uma função logística que melhor represente esses dados, assim como fizemos com a regressão linear – mas aqui, a função tem formato de “S”, não de uma linha. Mas como fazemos isso?

Primeiro, precisamos saber o que estamos buscando. Queremos minimizar o quanto esse algoritmo erra no total – ou seja, ela deve minimizar o número de erros, tal que a média entre as previsões e as verdades deve ser a menor possível. Com isso, utilizamos modelos matemáticos para definir os

Vamos ver como fica a função logística de melhor ajuste:

Como podemos ver, a linha preta aproxima a chance de uma pessoa ter doença cardíaca, dada sua idade.
Sua equação matemática é:

P = \sigma(0.177 I - 8.895)\ = \frac{1}{1+e^{-(0.177 I - 8.895)}}

Essa equação tem duas partes importantes.

A primeira parte é a uma equação linear: 0.177 I - 8.895 (sendo I a idade). Essa equação, de forma muito similar à regressão linear, modela como a idade afeta a probabilidade de doença cardíaca.
O número 0.177 (coeficiente angular) nos indica como a probabilidade muda com a idade. Neste caso, há uma correlação positiva, mas pequena, indicando que idades maiores contribuem para as chances de se ter doenças cardíacas, mesmo que lentamente.
Já o número -8.895 (viés ou intercepto) tende a enviesar as predições negativamente, tal que idades menores tenham chances muitos baixas de ter doenças cardíacas.

Já a segunda parte é a função logística (ou sigmoide). Essa função pega os valores retornados pela equação linear 0.177 I - 8.895, e os “comprime” entre 0 e 1 (sim ou não). Dessa forma, valores grandes de saída (de 5 pra cima) vão corresponder a chances altas (>0.9), enquanto valores pequenos (-5 pra baixo) vão corresponder a chances baixas (<0.1). Ela é representada por: \sigma(x)\ = \frac{1}{1-e^{-x}}.

Juntando as duas, temos uma função que pega valores contínuos, representando característica dos dados observados (como idade, colesterol, pressão arterial etc), e os transforma em um valor entre 0 e 1 – que representa a probabilidade de um dado evento:

P(I) = \sigma(0.177 I - 8.895)\ = \frac{1}{1 + e^{0.177 I - 8.895}}

Podemos até fazer previsões com essa função criada por nós:

P(38) = \sigma(0.177 \cdot 38 - 8.895)\ = \frac{1}{1 + e^{0.177 38 - 8.895}} \approx 0.101

Ou seja, a chance de um paciente de 38 anos ter doença cardíaca é de aproximadamente 10\%.

Para visualizar melhor como cada parâmetro nessa função afeta a curva de predição, aqui está um gráfico interativo:

Intuição matemática

Matematicamente, a regressão logística é muito similar à regressão linear, com apenas uma função logística (sigmoid) “acoplada” no final, para transformar a saída de um valor contínuo para um valor entre 0 e 1.
Para melhor entender isso, vamos supor que temos uma regressão linear P(X):

P(X) = P(x_1, x_2, \dots x_n) = b + X W = b + x_1 w_1 + x_2 w_2 + \dots + x_n w_n

O resultado de uma regressão logística similar será a mesma coisa, mas passado pela função logística (\sigma(x)\ = \frac{1}{1+e^{-x}}):

P(x_1, x_2, \dots x_n) = \sigma(x_1, x_2, \dots x_n)\ = \frac{1}{1+e^{-(b + x_1 w_1 + x_2 w_2 + \dots + x_n w_n)}}

(veja que o b + x_1 w_1 + x_2 w_2 + \dots + x_n w_n está elevando o e no divisor da fração, no lugar do x da função logística)

Métricas de avaliação da Regressão Logística

Na regressão linear, podemos usar o Coeficiente de Pearson para medir o quão forte é a relação linear entre duas variáveis, e métricas como o MAE para medir o erro do nosso modelo. No entanto, como aqui a nossa clasificação é binária, essas métricas não funcionam, e temos que usar algumas diferentes.

Coeficiente de correlação ponto-bisserial

A primeira delas, muito similar ao Coeficiente de Pearson, é o Coeficiente de correlação ponto-bisserial. Representado por r_pb ou apenas r, ele nos diz o quão bem nosso modelo representa os dados, de -1 (correlação inversa) a 1 (correlação direta), sendo que 0 significa que o modelo não representa os dados de nenhuma maneira.
O Coeficiente de pearson é calculado com a fórmula:

r_{pb} = \frac{M_1 - M_0}{S_n} \sqrt{\frac{n_1 n_0}{n^{2}}}

Sendo que S_n é o desvio padrão, calculado como:

S_n = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (X_i - \bar{X})^{2}}

lembrando que você não precisa decorar essa formula! Utilizamos ela no python, que já tem ferramentas com ela pronta.

Utilizando essa fórmula no nosso conjunto de dados, obtemos r \approx 0.78, ou seja, nosso algoritmo modelou os dados com uma forte correlação positiva, indicando que a idade é diretamente relacioada com a doença cardíaca, e que ele está funcionando com sucesso.

Acurácia

Outra métrica boa para medir a performance do nosso modelo é a acurácia. Diferentemente da Correlação ponto-bisserial, que mede a correlação, ela mede a performance efetiva do modelo. Ela é bem simples: mede a porcentagem de acertos que nosso modelo teve.

Por exemplo, vamos supor que temos 5 casos que vamos usar para testar nosso modelo, e eles são:

  • 32 anos, SEM doença cardíaca.
  • 80 anos, COM doença cardíaca.
  • 65 anos, SEM doença cardíaca.
  • 18 anos, SEM doença cardíaca.
  • 72 anos, COM doença cardíaca.

Para calcular a acurácia, rodamos cada caso em nosso modelo, e comparamos as previsões com os dados reais. Vamos supor que esse foi o resultado:

Idade (I)Dado real (y)Previsão (\hat{y})
32NÃONÃO
80SIMSIM
65NÃOSIM
18NÃONÃO
72SIMSIM

Nesse caso, temos quatro acertos para os pacientes de 32, 80, 18 e 72 anos, e um erro para o paciente de 65 anos. Isso significa que, para os 5 casos totais, acertamos 4, ou seja, nossa acurácia será de \frac{4}{5} = 0.8 ou 80\%.

Formalmente, a definição de acurácia é:

Accuracy = \frac{TP + TN}{TP+TN+FP+FN} = \frac{certo}{certo + errado}

onde TP significa True Positive, ou Verdadeiro positivo, TN significa True Negative, ou Verdadeiro Negativo, FP significa False Positive, ou falso positivo e FN significa False Negative, ou falso negativo.