Regressão Logística
Apesar do nome, a regressão logística (Cox, 1958; com raízes na curva logística de Verhulst, 1838) é o algoritmo de classificação canônico — o primeiro modelo padrão para qualquer problema de classificação, presença constante em escoragem de crédito e medicina — e a porta de entrada conceitual para as redes neurais: um único neurônio é uma regressão logística.
Da reta à probabilidade
A regressão linear produz qualquer número real — inútil como probabilidade. A regressão logística mantém o escore linear
e o comprime pela função sigmoide (logística):
Preveja a classe 1 quando \(\hat{p} \geq\) limiar (0,5 por padrão → \(z \geq 0\)). O conjunto \(w^\top x + b = 0\) é um hiperplano: a regressão logística é um classificador linear — sua fronteira de decisão é uma reta/plano no espaço de atributos (fronteiras curvas exigem atributos construídos, por exemplo polinomiais, ou outros modelos).
Chances (odds) e interpretabilidade
Inverter a sigmoide mostra que o escore linear é o log das chances (log-odds):
Então cada aumento unitário em \(x_j\) multiplica as chances (odds) \(\frac{p}{1-p}\) por \(e^{w_j}\). Um coeficiente de 0,7 em "número de pagamentos atrasados" significa que cada um multiplica as chances de inadimplência por \(e^{0.7} \approx 2\) — o tipo de afirmação que reguladores e médicos exigem — e a razão de a regressão logística persistir em domínios de alto risco (Explicabilidade).
A perda: entropia cruzada
O erro quadrático sobre probabilidades cria uma paisagem não convexa. Em vez disso, maximize a verossimilhança dos rótulos observados — equivalentemente, minimize a log loss / entropia cruzada binária:
Cada termo se lê: o log da probabilidade que o modelo atribuiu ao que de fato aconteceu. Como mostra o painel direito acima, estar confiantemente errado (\(\hat{p} \to 0\) quando \(y = 1\)) custa ilimitadamente caro — o modelo é empurrado para uma honestidade calibrada, não apenas para rótulos corretos.
Treino por gradiente descendente
Não existe forma fechada, mas \(J\) é convexa — um único mínimo global. O gradiente é surpreendentemente limpo:
— idêntico em forma ao gradiente da regressão linear, com \(\hat{p} = \sigma(Xw)\) substituindo \(Xw\). O mesmo laço de gradiente descendente se aplica sem mudanças:
import numpy as np
def sigmoid(z):
return 1 / (1 + np.exp(-z))
w = np.zeros(X.shape[1])
for _ in range(n_epochs):
p = sigmoid(X @ w)
w -= eta * X.T @ (p - y) / len(y)
Regularização
Tudo de Ridge e Lasso se transfere: adicione \(\alpha \lVert w \rVert_2^2\) (L2) ou \(\alpha \lVert w \rVert_1\) (L1) à perda. É tão essencial — especialmente com muitos atributos, onde pesos não regularizados podem crescer sem limite em dados separáveis — que o scikit-learn regulariza por padrão, parametrizado por \(C = 1/\alpha\):
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(C=1.0, # C MENOR = regularização MAIS FORTE
penalty='l2',
class_weight='balanced', # para desbalanceamento
max_iter=1000)
model.fit(X_train_scaled, y_train)
model.predict_proba(X_test_scaled)[:, 1] # probabilidades para análise ROC/PR
Ajuste \(C\) em uma grade logarítmica por validação cruzada; escalone os atributos primeiro (regularizado + baseado em gradiente ⇒ duplamente necessário).
Multiclasse: softmax
Para \(k\) classes, aprenda um vetor de pesos por classe e normalize os escores com o softmax:
A entropia cruzada se generaliza literalmente. O LogisticRegression lida com isso automaticamente (multi_class='multinomial' é o padrão moderno). Essa construção exata — escores lineares + softmax + entropia cruzada — é a camada de saída de essencialmente todo classificador neural, incluindo os LLMs escolhendo seu próximo token.
Perfil prático
| Pontos fortes | rápido; convexo (treino confiável); probabilidades bem calibradas; interpretável via razões de chances; baseline forte; escala para milhões de amostras |
| Fraquezas | fronteira linear (precisa de engenharia de atributos para curvas); tem dificuldade quando interações dominam; sensível a atributos não escalonados sob regularização |
| Recorra a ela quando | você precisa de uma baseline sólida e explicável; as probabilidades importam (risco, triagem); os atributos são informativos individualmente |
Lendo o coeficiente: chances, não probabilidade
O logito é linear, a probabilidade não — e é por isso que \(w\) tem leitura em chances e não em pontos percentuais. Com \(w = 0{,}8\) e \(b = -4\):
| \(x\) | \(z = wx+b\) | \(p\) | chance \(p/(1-p)\) |
|---|---|---|---|
| 4 | −0,8 | 0,310 | 0,449 |
| 5 | 0,0 | 0,500 | 1,000 |
| 6 | +0,8 | 0,690 | 2,226 |
A probabilidade salta 19 pontos de \(x=4\) para \(x=5\) e outros 19 de 5 para 6 — mas olhe a coluna das chances: 0,449 → 1,000 → 2,226, cada uma 2,226× a anterior. E \(e^{0{,}8} = 2{,}226\).
Essa é a frase honesta sobre um coeficiente logístico: uma unidade a mais de \(x\) multiplica a chance por \(e^w\), em qualquer ponto da curva. A variação em probabilidade depende de onde você está — máxima perto de \(p = 0{,}5\), desprezível nas caudas.
Material de aula
Notebook da aula (em português)
Notebook prático usado em sala — Aula 16 — Regressão Logística com Gradiente Descendente e Regularização: abrir no Colab
Referências
- Verhulst, P.-F. "Notice sur la loi que la population suit dans son accroissement." Correspondance Mathématique et Physique 10 (1838), 113–121. texto completo
- Cox, D. R. "The Regression Analysis of Binary Sequences." JRSS B 20 (1958). DOI
Bibliografia completa do curso na página de referências.