ML Pipeline¶
O coração do sistema. Implementa práticas modernas de finanças quantitativas baseadas em Lopez de Prado (Advances in Financial Machine Learning, 2018).
Visão de alto nível¶
flowchart LR
Candles[Candles<br/>OHLCV] --> FE[Feature Engineering]
FE --> Labels[Triple-Barrier<br/>Labeling]
Labels --> CV[CPCV<br/>Cross-Validation]
CV --> Ensemble[LGBM + XGB + CAT]
Ensemble --> Conformal[Conformal<br/>Prediction]
Conformal --> Meta[Meta-Label<br/>Filter]
Meta --> Pred[Predição<br/>+ Confidence]
Pred --> Gates[Quality Gates<br/>AUC/PF/ECE]
Gates -->|promoted| Production[Champion<br/>em produção]
Componentes¶
1. Feature Engineering (app/features/)¶
Features estacionárias (incluídas):
atr_14,atr_50— Average True Rangeslope_ema_*,dist_from_ema_*— derivadas de EMA (não a própria EMA)above_ema_20/50/200,ema_aligned— booleanosvol_expansion,volatility_regimesession_london,session_ny,session_tokyospread_high,alignment_scorefda_close,fda_volume— Fractional Differentiation (Lopez de Prado cap.5)
Features excluídas explicitamente (drift adversarial severo):
- ❌
ema_20,ema_50,ema_200— variam com nível de preço - ❌
close,open,high,low— não-estacionárias
2. Triple-Barrier Labeling (app/labels/)¶
Em vez de "preço sobe em 1 hora?" (label binário fixo), usamos barreiras adaptativas por ATR:
# configs/model.yaml
labels:
atr_take: 1.5 # take-profit = entry + 1.5×ATR
atr_stop: 1.0 # stop-loss = entry - 1.0×ATR
adaptive_horizon: true
horizons:
M5: 12 # 1h em M5
M15: 8 # 2h em M15
H1: 8 # 8h em H1
H4: 4 # 16h em H4
3 classes: 0=stop, 1=take, 2=timeout (NO_TRADE).
Adaptive horizon: quando ATR está alto, horizon é reduzido proporcionalmente — evita rotular trades em mercados super-voláteis.
3. CPCV — Combinatorial Purged Cross-Validation (app/models/cv.py)¶
Walk-Forward simples sub-amostra mal os dados em séries temporais. CPCV é a solução de Lopez de Prado (cap.12):
walk_forward:
use_cpcv: true
cpcv_n_splits: 6 # C(6,2) = 15 combinações de paths
cpcv_n_test: 2 # folds de teste por combinação
Benefícios:
- 15 paths por modelo (não 1) → distribuição de métricas, não ponto
cpcv_p5(5º percentil) é o "worst case" usado em quality gate- Embargo + Purge evita lookahead entre train/test
4. Ensemble¶
Três modelos votam por blend ponderado:
| Modelo | Peso |
|---|---|
| LightGBM | 0.50 |
| XGBoost | 0.30 |
| CatBoost | 0.20 |
Razões (mais detalhes em ADR-003):
- LGBM = velocidade + low overfit
- XGB = bom em features categóricas (regime)
- CAT = robusto a NaN, ordinal nativo
5. Conformal Prediction (app/models/conformal.py)¶
ICP (Inductive Conformal Prediction) com α = 0.15 → cobertura mínima 85%.
# Em vez de "P(buy) = 0.62 → BUY"
# Geramos um conjunto de classes possíveis:
prediction_set = conformal_predict(probs, alpha=0.15)
# {0: 0.32, 1: 0.62, 2: 0.06} → set = {1} ✅ singleton: BUY confiável
# {0: 0.38, 1: 0.41, 2: 0.21} → set = {0,1} ❌ ambíguo: NO_TRADE
Sinais com set não-singleton viram NO_TRADE — confiabilidade calibrada.
6. Meta-Labeling¶
Segundo modelo decide se opera, não o quê:
flowchart LR
Primario[Modelo primário<br/>direção: BUY/SELL] --> MetaIn[Features +<br/>predição primária]
MetaIn --> Meta[Modelo meta<br/>binário: opera ou não]
Meta -->|sim| Sinal[Sinal emitido]
Meta -->|não| Skip[NO_TRADE]
Reduz falsos positivos sem perder direção (cap.3 do Lopez de Prado).
7. Quality Gates (promoção) — v2.27¶
promotion:
min_auc: 0.58
min_auc_p5: 0.55 # CPCV 5º percentil
max_ece: 0.25 # Expected Calibration Error
min_profit_factor: 0.95 # backtest forward
Modelo só é promovido se passar todos os 4 gates.
Após v2.27: 71/72 modelos aprovados (98.6%). Os reprovados ficam em models-history/ (sticky no B2) para auto-rollback se champion atual degradar.
8. Auto-Rollback CUSUM (app/monitoring/)¶
Loop diário:
- Recalcula métricas de cada champion nos últimos 7d
- Se PSI > 2.0 OU PF < 0.85 → CUSUM dispara
- Busca anterior em
models-history/que ainda passa gates - Promove anterior, marca atual como
degraded - Notifica Telegram
Onde cada coisa mora¶
| Tópico | Arquivo |
|---|---|
| Treino | scripts/run_training.py + app/models/train_lightgbm.py |
| CPCV | app/models/cv.py |
| Conformal | app/models/conformal.py |
| Meta-label | app/models/meta_label.py |
| Predict | app/models/predict.py |
| Drift | app/monitoring/drift_detector.py |
| Re-screen | scripts/rescreen_champions.py |
| Auto-retrain | scripts/auto_retrain.py |