CPCV: A Validação Cruzada Que Não Vaza (Purgada e Combinatória)

A validação cruzada k-fold vaza informação em finanças e infla o Sharpe. Veja como a CPCV de López de Prado usa purge, embargo e caminhos combinatórios para gerar uma distribuição honesta de desempenho.

O número: A validação cruzada k-fold padrão vaza informação em finanças porque os dados violam a premissa de independência: rótulos que olham para frente fazem treino e teste compartilharem informação, inflando o Sharpe. A solução de Marcos López de Prado (2018, “Advances in Financial Machine Learning”) é a CPCV — Combinatorial Purged Cross-Validation — que aplica purge (remove amostras de treino que se sobrepõem ao teste) e embargo (descarta amostras logo após), e em vez de UM número de desempenho gera uma distribuição de Sharpe ao longo de φ[N,k] = (k/N)·C(N,k) caminhos de backtest distintos.

A pergunta central de qualquer validação não é “quanto rendeu?”, mas “esse resultado vai sobreviver no futuro?”. A maioria dos métodos populares responde mal a isso porque vaza informação do futuro para o passado. Este artigo mostra por que o k-fold quebra em séries financeiras e como a CPCV conserta o vazamento. Ele conversa diretamente com a análise walk-forward, com a divisão entre in-sample e out-of-sample, com a probabilidade de overfitting (PBO), com o teste de robustez no algotrading e com o Sharpe deflacionado por múltiplos testes.

Por que o k-fold padrão vaza em finanças

A validação cruzada k-fold é inválida para séries financeiras porque os dados não são independentes e identicamente distribuídos. O método clássico divide os dados em k partes iguais, treina em k−1 e testa na restante, repetindo k vezes e fazendo a média. Isso funciona quando cada observação é independente das demais — mas, segundo López de Prado (2018), mercados financeiros violam essa premissa de forma espetacular por duas propriedades.

A primeira é a autocorrelação: o valor da série em t não é independente do valor em t−1. Essa dependência serial é justamente o fenômeno que a maioria das estratégias tenta explorar. Embaralhar os dados antes do k-fold — prática comum para garantir folds aleatórios — destrói a estrutura temporal que dá sentido aos dados, tornando a validação inútil.

A segunda é o vazamento de dados / lookahead bias, mais sutil e igualmente fatal. Mesmo sem embaralhar, a estrutura sequencial do k-fold deixa informação do futuro contaminar o treino. Um split de 5 folds sobre 10 anos pode usar os anos 1-2, 3-4, 7-8 e 9-10 para treinar e testar em 5-6 — ou seja, o modelo avaliado em 2015-2016 foi treinado com dados de 2017-2020. Ele viu o futuro. O resultado é um Sharpe inflado e irreal.

Há ainda um agravante específico de trading: o rótulo é construído olhando para frente. Diferente de uma foto de gato, cujo rótulo é estático, o rótulo de um trade (“esta entrada deu lucro?”) só existe depois que o trade fecha, dias ou semanas depois da barra de entrada. Quando dois rótulos vizinhos no tempo se sobrepõem — porque ambos dependem de uma janela futura comum — uma observação no treino e outra no teste passam a compartilhar a mesma informação. É o que López de Prado chama de concorrência de rótulos (overlapping labels): mesmo cronologicamente separadas, as amostras não são independentes. É por isso que a correção precisa ser feita no nível do rótulo, e não apenas reordenando os folds.

Três caminhos de backtest da CPCV em faixa temporal, com blocos verdes de treino e cinza de teste separados por uma zona vermelha de purge antes e embargo depois do teste.

Walk-forward melhora, mas continua frágil

O walk-forward respeita a flecha do tempo, mas é fortemente dependente do caminho. Nele os dados são divididos em blocos sequenciais: treina no bloco 1, testa no 2; treina em 1-2, testa em 3, e assim por diante (janela expansível). Isso elimina o lookahead grosseiro do k-fold sequencial — sempre treina no passado, testa no futuro.

O problema, conforme descreve a literatura de López de Prado, é que o parâmetro “ótimo” do walk-forward fica calibrado para a sequência específica de regimes que aconteceu naquela história. Se os últimos folds foram um bull market forte, o processo vai favorecer parâmetros adaptados a esse ambiente, que podem não ser robustos em geral. Além disso, o walk-forward entrega um número pequeno de conjuntos de teste, tornando a média final instável. É um único caminho histórico — e a história poderia ter sido outra.

Purge: o “air gap” entre treino e teste

O purge remove do treino qualquer amostra cujo período de formação do rótulo se sobreponha ao período de teste. Quando o rótulo de um trade olha para frente (ex.: “o preço subiu nos próximos 3 dias?”), uma observação perto do limite do treino depende de barras que pertencem ao teste. Avaliar essa observação no treino contamina a seleção com informação do futuro — é vazamento, ainda que indireto.

A solução é criar um vão informacional: descartam-se as observações do final do treino que tocam o período de teste. Imagine um split com treino nos índices 100 a 800 e teste em 820 a 1000. Se uma regra olha 3 dias à frente, avaliar o parâmetro no índice 798 já depende de dados em 799, 800 e 801 — perigosamente perto do teste. O purge elimina essa franja (ex.: índices 790-800) para que o desempenho de cada parâmetro seja julgado sobre dados limpos e completamente separados do teste que vem a seguir.

Embargo: o período de “cooldown” depois do teste

O embargo descarta uma faixa de observações logo após cada conjunto de teste para quebrar a dependência entre trials. Mercados têm memória: a dinâmica de um período de teste (digamos, um crash de alta volatilidade entre os índices 820 e 1000) tende a persistir por algum tempo depois (índices 1001 a 1010). Se um novo split começasse a treinar imediatamente em 1001, a seleção de parâmetros nesse split seria fortemente influenciada pelo rescaldo direto do teste anterior — criando correlação entre os trials e enviesando o resultado agregado.

Na formulação de López de Prado, o embargo costuma ser percentual: um embargo de 5% sobre 1000 observações exclui as 50 amostras imediatamente após o teste, para absorver o atraso de reação do mercado. O efeito é que cada uma das centenas de medições de desempenho vira uma amostra mais independente — e a distribuição final de scores fica estatisticamente mais confiável.

O salto combinatório: de UM número para uma DISTRIBUIÇÃO

A CPCV gera muitos caminhos de treino/teste que respeitam a cronologia, e não um único. Na descrição de López de Prado (2018), a série é dividida em N grupos sequenciais e, sistematicamente, escolhem-se todas as combinações de k grupos como conjunto de teste. O número de combinações treino/teste segue o coeficiente binomial C(N,k), e cada observação aparece em k conjuntos de teste, gerando φ[N,k] = (k/N)·C(N,k) caminhos de backtest distintos — todos com purge e embargo aplicados.

O efeito é profundo: para cada parâmetro testado, você não recebe mais um único score, mas uma distribuição de scores de desempenho — um para cada caminho. Um caminho pode treinar num bull market e testar num crash; outro treina num mercado lateral volátil e testa numa recuperação. Agregando centenas desses cenários, obtém-se uma leitura muito mais honesta da capacidade “todo-tempo” do parâmetro do que qualquer caminho único de walk-forward conseguiria. A CPCV troca a estimativa pontual frágil por uma distribuição robusta de desempenho.

O número de caminhos cresce rápido com a granularidade. Com N=6 grupos testando k=2 por vez, há C(6,2)=15 combinações treino/teste e φ = (2/6)·15 = 5 caminhos completos; subir para N=10 e k=2 já dá C(10,2)=45 combinações e φ=9 caminhos. Cada parte da série passa a ser testada várias vezes, sob vizinhanças diferentes, em vez de uma só. Esse é o ponto que separa a CPCV do walk-forward: o walk-forward testa cada trecho da história exatamente uma vez, numa ordem fixa; a CPCV testa o mesmo trecho em múltiplos contextos, o que é justamente o que constrói a distribuição. O custo é computacional — é “embaraçosamente paralelo”, então roda bem em vários núcleos — mas esse custo é o preço do rigor estatístico.

Selecionar pelo piso, não pelo pico

Com uma distribuição em mãos, a escolha deixa de ser “o maior número” e passa a ser “o piso mais alto”. A síntese de Quant Beckman (2025), construída sobre o arcabouço de López de Prado, propõe ranquear cada parâmetro pelo 10º percentil da distribuição — ou seja, “qual desempenho posso esperar mesmo nos 10% piores cenários históricos?”. Buscamos platôs, não picos: regiões de parâmetros que continuam boas sob muitos contrafactuais, em vez de parâmetros ótimos numa história específica e quebradiços em qualquer outra.

Visualmente, isso vira um box plot por parâmetro: a escolha é a caixa cujo bigode inferior é o mais alto, mesmo que sua mediana não seja a maior. E em vez de pegar o vencedor isolado — que pode ter ganhado por sorte nos caminhos sorteados — toma-se um pequeno grupo dos melhores candidatos (ex.: top 5) por mediana ponderada. Se os melhores N são vizinhos (28, 30, 31, 27, 33), há um platô estável; se estão espalhados (15, 48, 7, 82), a premissa da estratégia é suspeita. É o mesmo raciocínio do teste de robustez: estabilidade na vizinhança vale mais que um pico isolado.

A ligação com PBO e o overfitting de backtest

A CPCV é a infraestrutura que torna mensurável a probabilidade de overfitting. Quando você testa muitos parâmetros ou ideias na mesma história e escolhe o melhor, está sistematicamente selecionando erro de estimação positivo — o máximo de um conjunto de variáveis aleatórias quase sempre parece impressionante. Bailey, Borwein, López de Prado e Zhu (2014/2017), em “The Probability of Backtest Overfitting” (PBO), formalizaram exatamente isso: a probabilidade de que a configuração escolhida como melhor in-sample tenha desempenho out-of-sample abaixo da mediana. Os múltiplos caminhos da CPCV alimentam diretamente esse cálculo.

No mesmo espírito está o Deflated Sharpe Ratio, também de López de Prado: ele corrige o Sharpe observado descontando a inflação causada pela quantidade de tentativas e pela variância dos Sharpes testados. Quanto mais configurações você experimentou, mais alto o Sharpe precisa ser para significar algo. Em regra prática, o valor esperado do máximo Sharpe sob hipótese nula cresce com o número de testes — algo como E[máx SR] ≈ √(2·ln N / T). A CPCV não substitui essas correções; ela fornece a distribuição honesta sobre a qual o Sharpe deflacionado e a PBO operam.

Vale também distinguir o desempenho dos rótulos: a CPCV pode usar uma métrica mais honesta que o Sharpe padrão. A síntese de Quant Beckman (2025) aplica a Probabilistic Sharpe Ratio (PSR), que devolve a probabilidade de o Sharpe verdadeiro superar um benchmark levando em conta a assimetria e a curtose reais dos retornos — porque retornos de trading raramente são normais (têm cauda esquerda longa e fat tails). Um Sharpe alto com forte assimetria negativa é mais frágil do que parece, e a PSR pune isso. Combinada com a CPCV, você ranqueia parâmetros pelo 10º percentil da PSR — o piso de confiança estatística nos piores cenários — em vez do PnL bruto. É o oposto da otimização ingênua que produz o pico bonito e enganoso in-sample.

Onde a CPCV NÃO te salva

A CPCV é poderosa, mas tem limites honestos que López de Prado e a literatura derivada deixam claros. Ela protege contra o overfit de um parâmetro a um único caminho histórico — não contra o meta-overfitting: se você testar dezenas de ideias diferentes no mesmo dataset, todas com CPCV rigorosa, eventualmente uma vai parecer robusta por puro acaso. A única defesa é disciplina de pesquisa, racional econômico para cada estratégia e um hold-out final intocado.

Há outros limites: a CPCV assume que o futuro será uma recombinação do passado — não antecipa uma quebra estrutural genuína (um regime inédito). Ela exige série longa o bastante; em ativos com pouca história (uma cripto recente, um ETF novo) as janelas ficam curtas e os resultados, instáveis. E sua própria complexidade abre espaço para bugs silenciosos: um erro de um índice no purge pode reintroduzir vazamento sem o código nunca quebrar. A regra final continua sendo: validação rigorosa reduz o autoengano, não o elimina.

O que é purge na validação cruzada?

Purge é a remoção das amostras de treino cujo rótulo se sobrepõe no tempo ao período de teste. Como muitos rótulos em trading olham para frente (ex.: retorno dos próximos N dias), uma observação perto do limite do treino pode “enxergar” dados do teste. O purge corta essa franja para garantir que treino e teste não compartilhem informação — eliminando o lookahead bias na seleção de parâmetros.

Qual a diferença entre purge e embargo?

Purge remove amostras de treino que se sobrepõem ao teste; embargo descarta amostras logo APÓS o teste. O purge ataca o vazamento direto (rótulos que tocam o período de teste); o embargo ataca a dependência residual (a memória do mercado persiste após o teste e contaminaria o próximo split). Os dois juntos garantem que cada caminho de backtest seja uma amostra estatisticamente mais independente.

Quantos caminhos de backtest a CPCV gera?

A CPCV com N grupos e k grupos de teste gera φ[N,k] = (k/N)·C(N,k) caminhos de backtest distintos. Por exemplo, dividir os dados em N grupos e variar a combinação dos k testados produz dezenas a centenas de caminhos cronologicamente consistentes — cada um com purge e embargo — em vez do único caminho que o walk-forward entrega. Daí surge a distribuição de Sharpe, e não um número solitário.

CPCV substitui o walk-forward?

Não exatamente: a CPCV generaliza o walk-forward para múltiplos caminhos. O walk-forward é um único caminho temporal, sensível à sequência específica de regimes que ocorreu. A CPCV testa o parâmetro contra muitas recombinações dos regimes históricos, expondo fragilidade que um caminho só esconderia. O walk-forward continua útil pela simplicidade e por imitar a operação real; a CPCV entra quando você precisa de uma distribuição honesta de desempenho.

CPCV elimina o overfitting?

Não. A CPCV elimina o vazamento dentro de um caminho e dá uma distribuição honesta, mas não protege contra o meta-overfitting — testar muitas ideias até uma parecer boa por acaso. Por isso ela é usada junto com a probabilidade de overfitting (PBO) e o Sharpe deflacionado, mais um hold-out final intocado e um racional econômico para a estratégia.

Referências

Presente para Leitores: Robô de Gradiente Linear Gratuito

Estou liberando o acesso ao meu setup pessoal de Gradiente Linear sem custo nenhum. É só clicar e me pedir o arquivo.

Quero meu Robô Gratuito
🔒 Acesso Direto no WhatsApp
⚠️ Aviso de risco: O conteúdo do Invista Já é educacional e informativo sobre algotrading e estratégias quantitativas e não constitui recomendação ou consultoria de investimento, nem oferta ou solicitação de compra ou venda de qualquer ativo. Operações no mercado financeiro envolvem risco de perda, inclusive do capital investido, e resultados passados não garantem resultados futuros. Avalie seu perfil de risco e, se necessário, consulte um profissional certificado antes de investir.
Flavio Araújo
Flavio Araújo

Engenheiro com MBA em Mercado de Capitais e Derivativos. Atua há mais de 10 anos no Mercado Financeiro, com 6 anos dedicados ao Algotrading e estratégias quantitativas. Especialista em validação de robustez e automação de investimentos.

Artigos: 158