Regressão em Machine Learning¶
Nesta aula, vamos estudar regressão com foco em prática profissional: formulação correta do problema, escolha de modelos, interpretação de métricas e cuidado com generalização.
Atividades Práticas¶
As seguintes atividades foram preparadas para reforçar os conceitos abordados:
Notebooks-Regressão (Download)
- Lab 1: Regressão Simples
Introdução aos conceitos básicos de regressão, com aplicação prática na predição de preços de casas na Califórnia. - Lab 2: Técnicas Avançadas
Exploração de métodos como regressão polinomial e XGBoost para modelagem mais robusta. - Lab 3: Predição de Preços de Notebooks
Treinamento de um modelo para prever o valor de notebooks com base em suas características.
Datasets¶
Os laboratórios utilizam os seguintes conjuntos de dados: - Housing: Informações sobre casas na Califórnia, usado no Lab 1. - Laptop Data: Dados de notebooks, usado no Lab 3.
O que é regressão?¶
Regressão é uma tarefa de aprendizado supervisionado em que o alvo é um valor numérico contínuo. Em vez de prever classes, estimamos quantidades, como preço de imóvel, consumo de energia ou temperatura.
Classificação vs Regressão¶
| Aspecto | Classificação | Regressão |
|---|---|---|
| Saída | Categórica / Discreta | Numérica / Contínua |
| Exemplos | Spam / Sentimento / Tipo de flor | Preço / Temperatura / Altura |
| Métricas | Acurácia, Precisão, Recall | MAE, MSE, RMSE, R² |
| Exemplos de algoritmos | KNN, SVM, Random Forest (class.) | Regressão Linear, Ridge, Lasso, SVR, Árvores/Boosting |
Qual é a principal diferença entre regressão e classificação?
Ideia matemática¶
Procuramos uma função f que aproxime a relação entre entradas X e alvo y:
ε representa o ruído — sempre haverá alguma incerteza.
Em regressão linear, uma forma comum é:
Onde β são parâmetros estimados a partir dos dados.
O que representa ε na equação y = f(X) + ε ?
Principais famílias de modelos¶
-
Regressão Linear Simples
- Uma variável explicativa; relação aproximadamente linear:
y = β₀ + β₁x + ε.
- Uma variável explicativa; relação aproximadamente linear:
-
Regressão Linear Múltipla
- Várias features:
y = β₀ + β₁x₁ + β₂x₂ + ... + βₙxₙ + ε.
- Várias features:
-
Regressão Polinomial
- Quando a relação é não linear, aumentamos a base com potências de x:
y = β₀ + β₁x + β₂x² + ....
- Quando a relação é não linear, aumentamos a base com potências de x:
-
Regressão Regularizada
- Ridge (L2): penaliza coeficientes grandes — útil quando há multicolinearidade.
- Lasso (L1): pode zerar coeficientes — ajuda a selecionar features.
- Elastic Net: combinação L1 + L2.
-
SVR (Support Vector Regression)
- Ideal para datasets pequenos/médios com relações não lineares, usando kernels (como RBF) para capturar padrões complexos sem necessidade de features polinomiais.
- Árvores, Florestas e Boosting
- Modelos como Random Forest e XGBoost são poderosos para capturar não linearidades e interações entre features. São menos sensíveis a outliers e requerem menos pré-processamento, mas podem ser mais difíceis de interpretar.
Quando usar cada família (regra prática)¶
- Comece por Regressão Linear/Ridge/Lasso quando interpretabilidade for importante.
- Use árvores/boosting para relações não lineares e interação forte entre variáveis.
- Teste SVR em bases menores com boa engenharia de atributos e escala adequada.
Qual método tende a zerar coeficientes, ajudando na seleção de features?
Intuição de Regressão Linear¶
A regressão linear procura a reta (ou hiperplano) que melhor explica a relação entre X e y, minimizando discrepâncias entre valores reais e previstos.
Método dos Mínimos Quadrados (OLS)¶
No OLS, minimizamos a soma dos quadrados dos resíduos:
Para regressão linear simples, os coeficientes têm fórmulas fechadas úteis para entendimento:
Intuição de Pressupostos Importantes¶
- Linearidade: A relação entre X e y deve parecer uma reta (ou um plano em múltiplas dimensões). Se os dados formam uma curva, regressão linear pode não funcionar bem.
- Independência: Cada observação (por exemplo, preço de uma casa) não deve ser influenciada por outra.
- Homocedasticidade: Os erros do modelo (diferença entre valores reais e previstos) devem ter variação constante. Imagine que os pontos estão igualmente espalhados ao redor da reta de regressão.
- Normalidade dos resíduos: Os erros devem seguir uma distribuição normal (isso é mais importante para testes estatísticos).
- Baixa multicolinearidade: As features não devem ser muito correlacionadas entre si (e.g., se "área da casa" e "número de quartos" são quase idênticas, isso pode confundir o modelo).
Observação importante: esses pressupostos são especialmente relevantes para inferência estatística e interpretação de coeficientes. Para previsão pura, modelos mais flexíveis podem performar melhor mesmo com violações.
Qual pressuposto implica que os resíduos tenham variância constante?
Exemplo em Python (com baseline técnico)¶
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
import numpy as np
# Dados sintéticos
np.random.seed(42)
X = np.random.randn(100, 1)
y = 2 + 3 * X.ravel() + np.random.randn(100)
# Treino / teste
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# Treina
model = Pipeline([
("scaler", StandardScaler()),
("reg", LinearRegression()),
])
model.fit(X_train, y_train)
# Prediz
y_pred = model.predict(X_test)
# Avalia
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)
print(f"MAE: {mae:.3f}")
print(f"RMSE: {rmse:.3f}")
print(f"R²: {r2:.3f}")
Para visualizar o resultado:
import matplotlib.pyplot as plt
# Plot dos dados e da reta de regressão
plt.scatter(X_test, y_test, color='blue', label='Dados reais')
# Ordena no eixo x para desenhar a reta corretamente
idx = np.argsort(X_test[:, 0])
plt.plot(X_test[idx], y_pred[idx], color='red', label='Reta de regressão')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Regressão Linear Simples')
plt.legend()
plt.show()

Métricas de avaliação¶
As métricas ajudam a comparar modelos e interpretar a magnitude dos erros. Em regressão, é recomendável olhar mais de uma métrica ao mesmo tempo.
MSE (Erro Quadrático Médio)¶
Penaliza erros grandes (unidade: quadrado da unidade do target).
RMSE (Raiz do MSE)¶
Tem a mesma unidade do target e é mais intuitiva que o MSE.
MAE (Erro Absoluto Médio)¶
Menos sensível a outliers que o MSE/RMSE.
R² (Coeficiente de Determinação)¶
Onde: - SSres = Σ(yᵢ - ŷᵢ)² - SStot = Σ(yᵢ - ȳ)²
R² indica a proporção da variância explicada pelo modelo. Valores mais altos são melhores, mas atenção: R² pode ser negativo se o modelo for pior que prever a média.
Métricas complementares úteis¶
- MedAE (mediana do erro absoluto): robusta a outliers severos.
- MAPE: útil em negócios, mas problemático quando
ypode ser zero ou muito próximo de zero.
Exemplo em Python¶
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import numpy as np
# supondo, modelo já treinado e y_true e y_pred
mse = mean_squared_error(y_true, y_pred)
rmse = np.sqrt(mse)
mae = mean_absolute_error(y_true, y_pred)
r2 = r2_score(y_true, y_pred)
print(f"MSE: {mse:.4f}")
print(f"RMSE: {rmse:.4f}")
print(f"MAE: {mae:.4f}")
print(f"R²: {r2:.4f}")
Erros comuns em regressão (e como evitar)¶
- Vazamento de dados: ajustar scaler/encoder com base em treino + teste.
- Avaliar só no treino: sempre medir desempenho em dados não vistos.
- Escolher modelo só por R²: combine com MAE/RMSE e análise de resíduos.
- Ignorar baseline: compare com preditor simples (média/mediana) antes de celebrar desempenho.
Qual métrica é menos sensível a outliers?
Ajuste w (peso) e b (viés) para minimizar o MSE
y = w·x + bComo funciona
Dados fixos (x,y). A reta y = w·x + b é desenhada. O erro é
MSE = (1/n) Σ (y − (w·x+b))². Ajuste os sliders para reduzir o MSE ou use Auto-ajustar (OLS).