Machine Learning Avançado com Scikit-Learn: Pipelines Complexos em Python
1. Conceitos Fundamentais
1.1 Pipelines
Pipeline: sequência de transformações e modelo final.
Permite encapsular pré-processamento e modelagem, garantindo que novos dados sejam tratados da mesma forma que o dataset de treino.
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipeline = Pipeline([
("scaler", StandardScaler()),
("classifier", LogisticRegression())
])
fit()
treina todo o pipeline,predict()
aplica transformações e prediz.
1.2 ColumnTransformer
Permite aplicar transformações diferentes em colunas diferentes.
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
preprocessor = ColumnTransformer([
("num", StandardScaler(), ["idade", "salario"]),
("cat", OneHotEncoder(), ["sexo", "cidade"])
])
Essencial para datasets heterogêneos (numéricos e categóricos).
2. Pipelines Complexos
2.1 Pipeline com Pré-Processamento e Modelo
from sklearn.ensemble import RandomForestClassifier
pipeline = Pipeline([
("preprocessor", preprocessor),
("classifier", RandomForestClassifier(n_estimators=100, random_state=42))
])
Combina transformações de dados e modelo final em um único objeto.
2.2 Pipelines Aninhados
Permite pré-processamento separado para diferentes modelos:
from sklearn.model_selection import GridSearchCV
pipeline_rf = Pipeline([
("preprocessor", preprocessor),
("classifier", RandomForestClassifier())
])
param_grid = {
"classifier__n_estimators": [100, 200],
"classifier__max_depth": [5, 10]
}
grid_search = GridSearchCV(pipeline_rf, param_grid, cv=5, scoring="accuracy")
Permite otimização de hiperparâmetros e validação cruzada integrada.
2.3 FeatureUnion e Pré-Processamento Paralelo
Combina múltiplos transformadores em features finais.
from sklearn.pipeline import FeatureUnion
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
combined_features = FeatureUnion([
("pca", PCA(n_components=2)),
("scaler", StandardScaler())
])
Útil para extrair múltiplas representações de dados em paralelo.
3. Validação e Otimização
3.1 Cross-Validation
from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipeline, X, y, cv=5, scoring="accuracy")
print("Média acurácia:", scores.mean())
Evita overfitting e garante estimativa confiável de performance.
3.2 Grid Search e Random Search
Permite testar múltiplos hiperparâmetros automaticamente:
param_grid = {
"classifier__n_estimators": [100, 200, 300],
"classifier__max_depth": [5, 10, None]
}
grid_search = GridSearchCV(pipeline, param_grid, cv=5)
grid_search.fit(X_train, y_train)
print(grid_search.best_params_)
Essencial para modelos otimizados profissionalmente.
3.3 Pipeline com Pré-Processamento de Dados Desbalanceados
Integra técnicas como SMOTE, undersampling ou oversampling:
from imblearn.pipeline import Pipeline as ImbPipeline
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier
pipeline = ImbPipeline([
("preprocessor", preprocessor),
("smote", SMOTE(random_state=42)),
("classifier", RandomForestClassifier())
])
Mantém fluxo de dados consistente, mesmo com balanceamento.
4. Boas Práticas Profissionais
Use pipelines para encapsular pré-processamento e modelo.
Integre pré-processamento heterogêneo com ColumnTransformer.
Utilize FeatureUnion ou Transformers customizados para múltiplas representações.
Sempre combine Cross-Validation com GridSearchCV ou RandomizedSearchCV.
Trate datasets desbalanceados dentro da pipeline (SMOTE, undersampling).
Salve pipelines completas com joblib ou pickle:
import joblib
joblib.dump(pipeline, "modelo_pipeline.pkl")
Garante reprodutibilidade e deploy seguro.
Documente fluxo de dados e transformações para equipes e manutenção futura.
5. Aplicações Profissionais
Previsão de churn e análise de clientes
Classificação de imagens e textos (pré-processamento + modelo)
Modelos financeiros com features complexas e validação rigorosa
Pipelines de dados automatizados para produção
Integração com FastAPI para APIs de Machine Learning
6. Conclusão
Pipelines complexos em Scikit-Learn são fundamentais para produção, garantindo:
Reprodutibilidade
Consistência no pré-processamento
Validação robusta
Otimização automatizada de hiperparâmetros
Combinando ColumnTransformer, FeatureUnion, GridSearchCV e técnicas de balanceamento, é possível construir modelos avançados e confiáveis, prontos para uso profissional.
Comentários
Postar um comentário