Capstone: pipeline ML end-to-end
- ⬜🎯 Recommender systems básicos(Machine Learning Clássico)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Projeto proposto
| Entregável | O que prova |
|---|---|
| Conjunto real com dezenas de milhares de linhas | Você tratou ausente, desbalanceado e sujo — não um conjunto didático |
| Pré-processamento dentro do pipeline | Você entende vazamento: a transformação é ajustada só na parte de treino |
| Validação que espelha a produção | A nota do relatório é comparável ao que vai acontecer de verdade |
| Intervalo de confiança na comparação | Você distingue ganho de ruído |
| Treino por linha de comando | É reproduzível: mesmo comando, mesmo artefato |
| API com validação de entrada | O modelo virou serviço — que é onde a maioria dos projetos para |
Escolha um dataset tabular real (Kaggle, UCI, dados públicos do governo) com pelo menos 50k linhas e problema de negócio claro. Construa pipeline end-to-end: EDA → feature engineering → modelagem → avaliação honesta → deploy em API → documentação.
Sugestões: Home Credit Default Risk (crédito), Instacart Market Basket (reco), Walmart Sales (forecasting), Telco Churn (classificação). Evite Titanic e Iris — são didáticos, não portfolio.
Estrutura de repositório
ml-capstone/
├── README.md # writeup completo (< 2000 palavras)
├── pyproject.toml # deps reproduzíveis (uv ou poetry)
├── Dockerfile # imagem pronta para deploy
├── data/
│ ├── raw/.gitkeep # não commitar dados
│ └── processed/.gitkeep
├── notebooks/
│ ├── 01_eda.ipynb # análise exploratória
│ └── 02_modeling.ipynb
├── src/
│ ├── features.py # transformações puras, testáveis
│ ├── train.py # CLI: python -m src.train --config configs/xgb.yaml
│ ├── evaluate.py # métricas + CI bootstrap
│ └── api.py # FastAPI app
├── tests/
│ ├── test_features.py
│ └── test_api.py
├── configs/
│ └── xgb.yaml # hiperparâmetros versionados
└── .github/workflows/ci.yml # lint + tests + buildPipeline de treino
# src/train.py — reprodutível via CLI
import joblib
import pandas as pd
import xgboost as xgb
from sklearn.pipeline import Pipeline
from sklearn.model_selection import StratifiedKFold, cross_val_score
from src.features import build_preprocessor
def train(config_path: str) -> None:
cfg = load_yaml(config_path)
df = pd.read_parquet(cfg['data_path'])
X, y = df.drop(columns=[cfg['target']]), df[cfg['target']]
pipe = Pipeline([
('prep', build_preprocessor(cfg)),
('model', xgb.XGBClassifier(**cfg['model_params'])),
])
cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(pipe, X, y, cv=cv, scoring='roc_auc', n_jobs=-1)
print(f'CV AUC: {scores.mean():.4f} +/- {scores.std():.4f}')
pipe.fit(X, y)
joblib.dump(pipe, cfg['model_out'])O capstone pede um conjunto de dados real com dezenas de milhares de linhas e desaconselha os clássicos de tutorial. Qual é a razão técnica?
API de serving
# src/api.py — FastAPI com Pydantic e health check
from fastapi import FastAPI
from pydantic import BaseModel, Field
import joblib
import pandas as pd
app = FastAPI(title='ML Capstone API', version='1.0.0')
model = joblib.load('artifacts/model.pkl')
class PredictRequest(BaseModel):
features: dict[str, float | str | None] = Field(..., description='Feature map')
class PredictResponse(BaseModel):
probability: float
model_version: str
@app.get('/health')
def health() -> dict[str, str]:
return {'status': 'ok'}
@app.post('/predict', response_model=PredictResponse)
def predict(req: PredictRequest) -> PredictResponse:
X = pd.DataFrame([req.features])
proba = float(model.predict_proba(X)[0, 1])
return PredictResponse(probability=proba, model_version='1.0.0')Entregáveis
# Capstone ML — Checklist de entrega
## 1. Dataset e EDA
- Fonte documentada, licença clara
- Análise de distribuição, missing values, target balance
- Hipóteses de negócio levantadas
## 2. Feature engineering
- Código em src/features.py, com testes unitários
- Sem leakage (target encoding OOF, temporal shift)
- Importância das features documentada (SHAP)
## 3. Modelagem
- Pelo menos 3 baselines (LogReg + RF + XGBoost)
- Hyperparameter tuning com Optuna ou grid
- Cross-validation estratificada
## 4. Avaliação honesta
- ROC-AUC, PR-AUC, Precision/Recall@K
- Intervalo de confiança via bootstrap
- Análise de erros por slice (idade, região, etc.)
## 5. Deploy
- FastAPI ou BentoML bundle
- Dockerfile buildable
- Latência p50/p95/p99 medida
## 6. Documentação
- README com hypothesis → results → limitations
- Model card (viés, limitações, use cases)
- Link para demo deployed (Fly.io, Railway, HF Spaces)Capstone desse nível vale mais que 5 cursos certificados. Recrutador abre o repo, lê README, testa /predict, olha CI verde — e decide te chamar. É o único artefato que prova que você entrega ML em produção, não só em notebook.
Perguntas frequentes
❓ Qual a ordem certa num projeto de ML?
❓ Quanto tempo dedicar a dado e quanto a modelo?
❓ Quando o projeto está pronto para produção?
Fixando
Por que o treino é um script executável pela linha de comando, e não o caderno de exploração?
A entrega inclui uma API de predição com verificação de saúde e validação de entrada. O que isso demonstra que a métrica sozinha não demonstra?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…