Voltar para López de Prado

Revisão de pesquisa · ensembles & feature importance · estudo 09

Ensembles & Feature Importance

Em 40 instrumentos de cripto, ações e câmbio, o bagging generaliza ~4,8× melhor que o boosting, e ainda assim não produz edge operável

López de Prado faz três afirmações nítidas e testáveis sobre machine learning em dados financeiros: o bagging generaliza melhor que o boosting em rótulos ruidosos e sobrepostos; a importância MDI medida in-sample tem viés de substituição, enquanto a MDA out-of-sample não tem; e um classificador deve ser ajustado por uma perda probabilística, não pela acurácia. Este estudo submete as três a um teste multimercado, integralmente custeado e com controle de vazamento em 40 instrumentos, 27 perpétuos de cripto, 5 ETFs de ações dos EUA e 8 majors de câmbio, com purged cross-validation e um filtro de Deflated Sharpe. As três se replicam de forma limpa. Nenhuma delas compra um edge operável.

fonte

Advances in Financial ML, Cap. 6 & 8

López de Prado (2018) · ensembles & feature importance

Código & dados

lopez-de-prado-work-review / projects / 09

the claim

O que diz López de Prado

  • O bagging generaliza melhor que o boosting em dados financeiros: os rótulos são ruidosos e serialmente sobrepostos, então o boosting persegue esse ruído reponderando casos difíceis (muitas vezes mal rotulados) e sofre overfit, ao passo que o bagging faz a média de árvores descorrelacionadas e é mais robusto.
  • A importância de feature MDI tem viés, é in-sample e mecanicamente inflada para features correlacionadas (o efeito de substituição); use a MDA out-of-sample baseada em permutação e agrupe (cluster) features correlacionadas, permutando clusters inteiros para remover o artefato. Ajuste classificadores por uma perda probabilística (log-loss), não pela acurácia.

our result

O que encontramos

  • As três afirmações se replicam de forma limpa em 40 instrumentos de três mercados: o gap de generalização IS→OOS do bagging é ~5× menor que o do boosting (100% dos instrumentos, p=1,8e-12, o boosting literalmente leva o log-loss OOS para além do cara-ou-coroa); a MDA é essencialmente livre de viés (ρ 0,07 vs MDI 0,49); e ajustar por log-loss supera ajustar por acurácia (p=8,3e-6).
  • Dois refinamentos honestos: neste conjunto de 10 features, a clustered-MDA compra estabilidade de seleção, não des-enviesamento (a MDA sozinha é a ferramenta de des-enviesamento), e o conjunto de features selecionado é apenas marginalmente mais estável que o aleatório.
  • O veredito honesto: 0 de 40 instrumentos superam o DSR > 0,95. Generalizar melhor é necessário, mas não suficiente, para haver edge, esta é uma vitória metodológica limpa, com zero alfa operável.

O resultado em três linhas

40 instrumentos · 3 mercados

O bagging generaliza ~4,8× melhor que o boosting

Construído da forma canônica, um RandomForest mantém seu gap de log-loss do in-sample ao out-of-sample ~4,8× mais apertado que o HistGradientBoosting, e faz isso em 100% dos 40 instrumentos (Wilcoxon p = 1,8e-12). O boosting leva o log-loss in-sample a ~0,25 ao memorizar os rótulos ruidosos e sobrepostos, e paga por isso com um log-loss out-of-sample além do cara-ou-coroa (ln2 ≈ 0,693). A primeira prescrição se confirma sem ambiguidade.

MDI ρ 0,49 · MDA ρ 0,07

A MDI tem viés de substituição; a MDA não

A importância da Mean-Decrease-Impurity é correlacionada (em rank) com o quanto uma feature é correlacionada com as demais (ρ ≈ 0,49), o artefato de substituição. A medida de permutação out-of-sample, a MDA pontuada por log-loss, não mostra praticamente nada disso (ρ ≈ 0,07; menor que a MDI em 88% dos instrumentos, p = 1,2e-6). Várias features favorecidas pela MDI recebem MDA negativa, permutá-las melhora o log-loss out-of-sample. A reviravolta: a clustered-MDA compra estabilidade de seleção, não des-enviesamento, neste conjunto de 10 features.

0 / 40 superam DSR > 0,95

Generalizar melhor não é edge

O veredito honesto. Nenhum dos ensembles produz um Deflated Sharpe Ratio perto da barra publicável de 0,95 em qualquer dos 40 instrumentos, o Sharpe mediano por aposta é negativo para ambos, e o bagging vence o duelo de generalização de forma decisiva, mas não vence em nada o duelo de DSR (p pareado = 0,74). Uma replicação metodológica limpa com resultado de edge nulo; essa separação é justamente o ponto.

Afirmação 1, bagging vs boosting, em 40 instrumentos

O boosting memoriza o conjunto de treino e depois paga por isso out-of-sample

Fig. 1:O bagging supera o boosting em todos os instrumentos. À esquerda: cada ponto é o gap de log-loss IS→OOS do boosting (HGB) de um instrumento contra o gap do bagging (RF); todos os 40 ficam acima da diagonal, o boosting sofre mais overfit, em toda parte (Wilcoxon p = 1,8e-12). À direita: log-loss in-sample vs out-of-sample por mercado. O boosting leva o log-loss in-sample a ~0,25 (bem abaixo do teto do cara-ou-coroa ln2 ≈ 0,693), mas seu log-loss out-of-sample o ultrapassa (~0,81 em cripto e câmbio). O bagging mantém ambos próximos (~0,57 → ~0,68).

A primeira prescrição se confirma sem ambiguidade. Um RandomForest construído da forma canônica mantém seu gap de log-loss do in-sample ao out-of-sample cerca de 4,8× mais apertado que o HistGradientBoosting, e faz isso em 100% dos 40 instrumentos nos três mercados (Wilcoxon pareado p = 1,8e-12).

O mecanismo é exatamente o do livro-texto. Nos dois mercados genuinamente ruidosos, cripto e câmbio, a capacidade extra do boosting é gasta ajustando os rótulos ruidosos e serialmente sobrepostos: seu log-loss in-sample desaba para ~0,25, muito abaixo do teto do cara-ou-coroa, mas seu log-loss out-of-sample é pior que um cara-ou-coroa (~0,81 > ln2 ≈ 0,693). A floresta com bagging nunca memoriza, mantém o in-sample em ~0,57 e o out-of-sample em ~0,68, ficando no nível ou abaixo do cara-ou-coroa fora da amostra. As ações ficam baixas para ambos os modelos por outra razão: um rótulo com classes desbalanceadas (taxa-base ~0,17) que a floresta consegue prever trivialmente in-sample.

gap IS→OOS do bagging

0.114

RandomForest, ajustado por NLL

gap IS→OOS do boosting

0.539

HistGradientBoosting

razão dos gaps

4.8×

boosting sofre mais overfit

RF < HGB

100%

dos 40 instrumentos

Wilcoxon pareado

1.8e-12

valor-p

DSR > 0,95

0 / 40

qualquer dos ensembles

mercadoRF ISRF OOSHGB ISHGB OOS
Cripto27 perpétuos0.5690.6800.2550.809
Ações5 ETFs0.1340.5570.1530.659
Câmbio8 majors0.5690.6770.2770.808

Log-loss mediano por mercado, ajustado por NLL. O log-loss out-of-sample do boosting ultrapassa o cara-ou-coroa (ln2 ≈ 0,693) em cripto e câmbio, pior que um cara-ou-coroa. O do bagging permanece no nível ou abaixo dele em toda parte.

Explore o overfit

O mesmo efeito, um instrumento ou um mercado por vez. Cada número é o resultado real do painel por instrumento, ajustado por NLL, purged-CV, custeado.

Escolha um mercado para ver a mediana do seu painel, ou aprofunde em um único instrumento. O gráfico à esquerda contrasta o log-loss in-sample e out-of-sample da floresta com bagging e das árvores com boosting, contra a linha do cara-ou-coroa; o gráfico à direita mostra o viés de substituição das três medidas de importância. A barra in-sample do boosting fica muito abaixo do cara-ou-coroa, ele memorizou os rótulos, enquanto sua barra out-of-sample tipicamente o ultrapassa.

Demo, explorador de overfit bagging vs boosting

O boosting leva o log-loss in-sample para muito abaixo do cara-ou-coroa (ele memoriza o conjunto de treino), mas seu log-loss out-of-sample o ultrapassa. A floresta com bagging mantém in-sample e out-of-sample próximos. Painel à direita: só a importância da MDA é livre de viés de substituição.

ajustado por NLL · purged-CV · custeado
Mercado (mediana do painel)
… ou um instrumento
gap IS→OOS do RF (bagging)
0.113
gap IS→OOS do HGB (boosting)
0.550
razão dos gaps boosting / bagging
4.9×
HGB out-of-sample vs cara-ou-coroa
0.808 > ln2, pior que um cara-ou-coroa
log-loss, in-sample vs out-of-sample0.000.250.500.751.00cara-ou-coroa ln2 ≈ 0,6930.57RFIS0.68RFOOS0.26HGBIS0.81HGBOOSbagging (RF), verde · boosting (HGB), vermelho
viés de substituição, ρ(importância, |corr|)-0.50.00.51.0MDI0.49MDA0.12clust-MDA0.55perto de 0 = sem viés (verde) · perto de +0,5 = com viés de substituição (vermelho)

Cripto: mediana sobre 27 instrumentos. O log-loss in-sample do boosting é 0.255 (bem abaixo do cara-ou-coroa ln2 ≈ 0,693, ele memorizou os rótulos), mas seu log-loss out-of-sample é 0.808, além do cara-ou-coroa. A floresta com bagging mantém o in-sample em 0.569 e o out-of-sample em 0.680, um gap 4.9× menor. Viés de substituição ρ(importância, |corr|): MDI 0.491, MDA 0.115, clustered-MDA 0.552, só a MDA fica perto de zero.

O painel se reproduziu de forma bit-idêntica entre execuções (random_state = 0 em tudo, BLAS/OMP fixados em uma thread por processo). Os hot loops fora do sklearn, o sorteio do sequential-bootstrap e a contagem de coeventos / unicidade média dos rótulos, são compilados por JIT e verificados como bit-idênticos contra referências em Python puro.

Fig. 2:MDI (in-sample, com viés) versus MDA (permutação out-of-sample) por feature, um instrumento por mercado. Onde a MDA fica negativa, p. ex. mom6/mom12/vol em ações e câmbio, permutar a feature melhora o log-loss out-of-sample: o modelo estava se apoiando demais nela. A MDI classifica essas mesmas features como importantes.

Afirmação 2, a MDI tem viés, a MDA não

A Mean-Decrease-Impurity é calculada in-sample e é mecanicamente inflada para features correlacionadas: a importância de um método acaba correlacionada (em rank) com o quanto cada feature é correlacionada com as demais (ρ ≈ 0,49, máxima no câmbio em 0,67). O bloco de momentum e o bloco de volatilidade dividem o crédito de impureza e inflam um ao outro. A medida de permutação out-of-sample, a MDA pontuada por log-loss, praticamente não mostra nada disso (ρ ≈ 0,07; menor que a MDI em 88% dos instrumentos, p = 1,2e-6). De modo marcante, várias features que a MDI classifica como importantes ganham MDA negativa: permutá-las melhora o log-loss out-of-sample, ou seja, o modelo estava se apoiando demais no ruído. A MDI as mantém; a MDA as sinaliza como prejudiciais.

A reviravolta honesta é que a clustered-MDA não remove o viés neste conjunto de features. Com apenas 10 features colapsando em ~5 clusters, as features correlacionadas caem no mesmo cluster, então a permutação de cluster inteiro ainda atribui grande importância a esse cluster correlacionado, e reexpandi-lo de volta às features reintroduz a associação com |corr| (ρ ≈ 0,52, estatisticamente indistinguível da MDI, p = 0,22). O que o clustering de fato compra é estabilidade de seleção: colapsar substitutos eleva o Jaccard do top-3 entre os caminhos CPCV de 0,26 (da MDA) para 0,46 (p = 1,8e-12). A própria seleção da MDA está genuinamente acima da baseline aleatória (0,20) em 98% dos instrumentos, mas só marginalmente estável, não se deve superinterpretar “as features do topo” nesta tarefa.

Fig. 3:À esquerda: viés de substituição ρ(importância, |corr|) entre instrumentos, MDI e clustered-MDA se centram perto de +0,5, só a MDA cruza o zero. À direita: estabilidade de seleção do top-3 (Jaccard médio entre os 15 caminhos CPCV). O 0,58 da MDI é inflado pelo mesmo viés que a torna não confiável; o clustering eleva a MDA de 0,26 para 0,46; a própria MDA fica só um pouco acima da baseline aleatória de 0,20.
métodoviés ρestabilidadenota
MDI0.4850.582baseline in-sample, com viés
MDA0.0730.263permutação out-of-sample, sem viés
clustered-MDA0.5170.463estabilidade, não des-enviesamento
random baseline, 0.2013 de 10 features ao acaso

Mediana sobre o painel de 40 instrumentos. O viés ρ é a correlação de Spearman entre a importância de um método e a |correlação| média de cada feature; a estabilidade é o Jaccard médio do top-3 entre os 15 caminhos CPCV. A lição: com um conjunto de features pequeno e moderadamente correlacionado, a MDA, e não a clustered-MDA, é a ferramenta de des-enviesamento; o clustering importa mais quando há muitas features fortemente correlacionadas a absorver.

A correção, medida do jeito certo

Pontue a importância por cluster, não por feature

Fig. 5:Clustered feature importance no BTCUSDT. À esquerda: dendrograma de Ward sobre 1−|corr|, o bloco side/mom6/mom12/rsi e o bloco vol/range_atr se fundem de forma compacta. No meio: MDI clusterizado (soma dentro do cluster) e MDA clusterizado (permuta do bloco inteiro); o ponto marca o MDI flat do melhor membro isolado, o C1 salta de 0,148 (melhor membro) para 0,385 (cluster). À direita: estabilidade de ranking entre os folds purgados, o clustering eleva a MDI de 0,89 para 0,97 e a MDA de 0,12 para 0,30.

O painel anterior media a clustered-MDA do jeito que ela costuma ser mal usada, agrupar features correlacionadas em clusters e depois expandir os escores de volta para cada feature. Feito assim, ela ainda acompanha a |corr|. Mas não é para isso que serve a clustered feature importance de López de Prado. A correção é ler o escore no nível do cluster: agrupar features correlacionadas, permutar ou somar o bloco inteiro e nunca reatribuir aos membros. Na mesma tarefa de triple-barrier do BTCUSDT, 351 eventos, 10 features colapsando em 6 clusters por linkage Ward sobre 1−|ρ|, é exatamente isso que cura o efeito de substituição.

O bloco correlacionado de momentum/side (C1: side, mom6, mom12, rsi) parece apenas moderado por feature, seu melhor membro isolado ganha MDI flat de 0,148. Pontuado como um único cluster, ele é o driver dominante isolado, em 0,385, cerca de 2,6× o seu melhor membro: o crédito de impureza que o efeito de substituição vinha dividindo em quatro é reunido. A des-diluição é concreta, o Gini do vetor de importância sobe de 0,205 (flat) para 0,337 (clusterizado). E o ranking no nível do cluster é bem mais estável entre os folds purgados: a estabilidade da clustered-MDA é de ~0,30 contra ~0,12 flat, cerca de 2,5×, então o clustering funciona no eixo para o qual foi feito.

clusterMDI clusterizadoMDI do melhor membroMDA clusterizado
C10.3850.1480.074
C50.2130.1130.032
C20.1530.1530.024
C30.0940.0940.004
C40.0860.0860.009
C60.0690.069-0.000

Importância no nível do cluster, BTCUSDT (RF ajustada por neg-log-loss, CV purgada). O MDI clusterizado soma a impureza dentro do cluster; o MDA clusterizado permuta o bloco inteiro. Para clusters unitários (C2–C4, C6) o escore do cluster é igual ao seu único membro. O efeito de substituição só aparece onde um cluster reúne várias features correlacionadas (C1, C5): aí o escore do cluster supera o de seu melhor membro, reunindo o crédito dividido. O C1 é o driver dominante isolado, em 0,385, cerca de 2,6× sua melhor feature individual.

Fig. 4:Gap de overfit ao ajustar por log-loss (y) versus por acurácia (x), por instrumento. A maioria dos pontos fica abaixo da diagonal, ajustar por log-loss sofre menos overfit (AFML 9.4). O efeito é mais forte onde os dois objetivos discordam sobre a configuração escolhida.

Afirmação 3, ajuste por log-loss, não por acurácia

O controle metodológico atravessa todo o estudo: cada modelo é ajustado tanto por log-loss negativa quanto por acurácia. Ajustar por log-loss produz um gap de overfit significativamente menor (média agrupada 0,331 vs 0,421, Wilcoxon p = 8,3e-6), e o efeito se mantém por modelo para ambas as famílias (RF p = 4,4e-4, HGB p = 1,3e-4). Os dois objetivos escolhem a mesma configuração apenas ~60% das vezes para o RF e ~52% para o HGB, ou seja, em cerca de metade dos instrumentos a escolha da métrica troca o modelo selecionado, e quando troca, a escolha por log-loss generaliza melhor.

…e ainda assim, sem edge (a parte honesta)

Esta é a nuance que as prescrições não cobrem: generalizar melhor é necessário, mas não suficiente, para haver edge. Nesta tarefa de meta-rotulação por cruzamento de EMA, nenhum dos ensembles produz um Deflated Sharpe Ratio perto da barra de 0,95, o Sharpe mediano por aposta é negativo para ambos, e uma vez que o Sharpe é deflacionado contra a busca em grade agrupada, o DSR colapsa para ~0. O bagging vence o duelo de generalização de forma decisiva e o de DSR em nada (p pareado = 0,74). Em todos os 40 instrumentos, 0 superam claramente o DSR > 0,95; o único quase-acerto é o USDJPY (DSR HGB 0,92), seguido do EURUSD (DSR RF 0,56), ambos câmbio, onde a tarefa custeada é menos adversarial. Uma replicação metodológica limpa com resultado de edge nulo, e essa separação é exatamente a contribuição.

Método

  • Uma tarefa estrutural fixa, um cruzamento primário de EMA(20/60) define o lado; uma tripla barreira (take-profit 1,5σ, stop 1,0σ, max-hold 50 barras, σ = volatilidade EWMA causal) varrida no OHLC intrabar completo dá o desfecho; o meta-rótulo é y = 1[P&L líquido > 0] após custo realista de ida e volta. Dez features causais (side, vol, ma_gap, mom3/6/12, rsi, vol_ratio, ofi, range_atr). Este é um estudo de modelo/importância, não uma varredura de rótulos.
  • Dois ensembles, construídos fielmente: o bagging é um RandomForest à maneira do AFML, max_features baixo para descorrelacionar as árvores, folhas regularizadas sob ponderação, sample-weights por unicidade de rótulo e max_samples igual à unicidade média de rótulo (o análogo do sequential-bootstrap). O boosting é o HistGradientBoosting sobre uma pequena grade de iterações, taxa de aprendizado, nós-folha e L2.
  • Toda a validação cruzada é purged k-fold com embargo, com o span de cada rótulo mapeado do espaço de barras para o espaço de eventos, de modo que linhas de treino que se sobrepõem a um fold de teste são descartadas. A estabilidade da importância é medida entre os caminhos CPCV (C(6,2) = 15 caminhos).
  • Cada modelo é hiperajustado duas vezes, por log-loss negativa (a manchete, AFML 9.4) e por acurácia (controle), para comparar os gaps de overfit resultantes. A P(lucro) purged out-of-fold dimensiona cada aposta; o P&L custeado alimenta uma série de retornos por barra cujo Sharpe é deflacionado contra a dispersão da grade agrupada RF+HGB.
  • Importância de três formas: MDI a partir de um único ajuste em toda a amostra (a baseline in-sample com viés), MDA como permutação purged out-of-fold pontuada por log-loss e clustered-MDA permutando clusters de correlação inteiros. O viés de substituição é o ρ de Spearman entre a importância de um método e a |correlação| média de cada feature; a estabilidade de seleção é o Jaccard médio pareado do top-3 entre os caminhos CPCV contra uma baseline de seleção aleatória.
  • Barras orientadas por informação em todo o estudo, dollar bars para cripto e ações, count bars para câmbio, com custos não nulos em toda aposta (cripto: flat 7 bp/lado; ações e câmbio: meio-spread causal por horário do dia mais comissão/swap, ≈1–2 bp/lado). Dois ETFs (XLF, XLV) foram descartados por um piso mínimo de classe orientado por dados, não à mão.

Notas & limitações

O estudo separa deliberadamente “generaliza melhor / menos enviesado” (que se replicam) de “edge” (que não aparece), e o veredito honesto, 0/40 acima da barra de 0,95, é a integridade do trabalho. As ações são a perna mais fraca: suas apostas por cruzamento de EMA superam o limiar de custo-e-barreira apenas ~17–23% das vezes, então seu baixo log-loss in-sample é em parte um artefato de desbalanceamento de classes, e dois ETFs reprovaram de imediato num piso mínimo de classe. O max_samples do RandomForest é igualado à unicidade média de rótulo como um análogo de primeira ordem do verdadeiro sequential bootstrap (fiel à intenção, não ao procedimento exato). A contagem de tentativas do Deflated Sharpe é modesta, 14 configurações, então a deflação é, no máximo, generosa , e o DSR ainda é ~0.

Reprodutibilidade

Toda feature e todo rótulo usam apenas dados até a barra atual; toda aposta é líquida de um custo realista por lado; todo fold é purged e com embargo. O harness, seus autotestes e o painel multimercado completo estão reunidos no projeto 09 de lopez-de-prado-work-review. O explorador desta página é autocontido: os números do painel por instrumento estão codificados no componente, de modo que o mecanismo que ele ilustra se reproduz exatamente a cada carregamento.

Como citar

Referências

As fontes primárias das prescrições aqui revisadas:

Ver também

O aparato de testes múltiplos do qual depende o filtro de Deflated Sharpe deste estudo é revisado em Backtest Overfitting & the Deflated Sharpe Ratio; o tema da disciplina de seleção é desenvolvido em O edge está no processo; e o conjunto mais amplo de trabalhos está em Pesquisa.