Feature Engineering com Python: Melhorando a Performance de Modelos
O processo de Feature Engineering é a arte (e ciência) de criar, transformar e selecionar variáveis que melhor representem os padrões escondidos nos dados. Muitas vezes, um modelo simples com boas features supera um modelo complexo com features ruins.
Neste artigo, vamos explorar técnicas de Feature Engineering em Python, mostrando como melhorar a performance de modelos por meio da construção inteligente de variáveis.
1. O que é Feature Engineering?
Features são os atributos (colunas) que descrevem o problema. Por exemplo:
Em um modelo de crédito: renda, idade, histórico de pagamento.
Em um modelo de recomendação: gênero de filmes, tempo médio de uso, histórico de compras.
Em séries temporais: vendas passadas, dia da semana, sazonalidade.
Feature Engineering envolve:
Criar novas variáveis a partir de dados existentes.
Transformar variáveis para deixá-las mais informativas.
Selecionar as features mais relevantes para reduzir ruído.
2. Carregando dados de exemplo
Vamos usar um dataset fictício de clientes:
import pandas as pd
data = pd.DataFrame({
"idade": [25, 45, 35, 50, 23],
"renda": [2500, 8000, 4500, 12000, 2000],
"cidade": ["SP", "RJ", "SP", "MG", "RJ"],
"compras_ult_mes": [2, 10, 4, 15, 1],
"score_credito": [650, 720, 690, 780, 600]
})
print(data)
3. Criação de novas variáveis (Feature Creation)
3.1 Variáveis derivadas
Podemos criar variáveis a partir de transformações matemáticas.
# Relação entre renda e idade
data["renda_por_idade"] = data["renda"] / data["idade"]
# Escala logarítmica (útil para distribuições assimétricas)
import numpy as np
data["log_renda"] = np.log1p(data["renda"])
3.2 Variáveis categóricas em múltiplos níveis
# Indicador binário
data["alta_renda"] = (data["renda"] > 5000).astype(int)
3.3 Interações entre variáveis
Criar features interativas pode capturar relações não-lineares.
data["idade_x_compras"] = data["idade"] * data["compras_ult_mes"]
4. Transformação de variáveis categóricas
Variáveis categóricas precisam ser transformadas em números.
4.1 One-Hot Encoding
data = pd.get_dummies(data, columns=["cidade"], drop_first=True)
4.2 Target Encoding
Substitui a categoria pela média da variável alvo.
data["cidade_encoded"] = data.groupby("cidade")["score_credito"].transform("mean")
5. Features temporais
Se os dados têm um componente temporal, extrair variáveis de datas pode ser crucial.
data["data_compra"] = pd.to_datetime(["2023-01-10", "2023-02-15", "2023-02-20", "2023-03-05", "2023-01-25"])
data["ano"] = data["data_compra"].dt.year
data["mes"] = data["data_compra"].dt.month
data["dia_semana"] = data["data_compra"].dt.dayofweek
Essas variáveis ajudam a capturar sazonalidade e padrões semanais/mensais.
6. Redução de dimensionalidade
Se o número de variáveis é muito grande, podemos reduzir dimensões para melhorar performance e evitar overfitting.
6.1 PCA (Principal Component Analysis)
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
X = data[["idade", "renda", "compras_ult_mes", "score_credito"]]
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
6.2 Seleção baseada em importância
from sklearn.ensemble import RandomForestClassifier
X = data.drop("alta_renda", axis=1)
y = data["alta_renda"]
model = RandomForestClassifier()
model.fit(X, y)
importances = pd.Series(model.feature_importances_, index=X.columns)
print(importances.sort_values(ascending=False))
7. Normalização e Padronização
Muitos algoritmos (SVM, KNN, Redes Neurais) exigem que os dados estejam na mesma escala.
from sklearn.preprocessing import StandardScaler, MinMaxScaler
scaler = StandardScaler()
data_scaled = scaler.fit_transform(data[["idade", "renda", "compras_ult_mes"]])
minmax = MinMaxScaler()
data_normalized = minmax.fit_transform(data[["idade", "renda", "compras_ult_mes"]])
8. Automação com Pipelines
Pipelines permitem aplicar todas as etapas de Feature Engineering de forma organizada e reaplicável.
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
pipeline = Pipeline([
("imputer", SimpleImputer(strategy="mean")),
("scaler", StandardScaler()),
("model", LogisticRegression())
])
pipeline.fit(X, y)
9. Boas práticas em Feature Engineering
Entenda o problema de negócio: crie variáveis que façam sentido no contexto.
Evite overfitting: não crie features específicas demais.
Use conhecimento do domínio: em finanças, criar índices de endividamento; em saúde, indicadores clínicos.
Valide cada feature criada: nem toda variável ajuda, algumas podem prejudicar.
Teste interações não óbvias: às vezes a relação entre duas variáveis revela padrões escondidos.
10. Conclusão
Feature Engineering é o coração de um projeto de Machine Learning bem-sucedido. Enquanto muitos concentram esforços apenas no ajuste de algoritmos, os melhores resultados vêm de quem investe tempo em entender e transformar os dados.
Com Python, utilizando bibliotecas como Pandas, NumPy, Scikit-learn e ferramentas de visualização, é possível criar, testar e automatizar features que realmente aumentam a performance dos modelos.

Comentários
Postar um comentário