Quatro falhas que invalidavam um sistema preditivo — e como encontrei todas antes de arriscar capital

Estudo de caso — auditoria de modelo quantitativo
Por José Pirani

Resumo

Construí um sistema preditivo diário para PETR4 e o submeti a uma auditoria estatística formal antes de operar com dinheiro real. A auditoria encontrou quatro falhas estruturais, cada uma suficiente para invalidar os resultados. Ao final, 45 candidatos foram avaliados e nenhum foi aprovado. A linha de pesquisa foi encerrada com resultado negativo documentado.

O sistema nunca operou. Esse é o resultado.

O ponto de partida

O sistema tinha a aparência de algo pronto. Pipeline de dados da B3, dólar, Brent e CVM. Treinamento walk-forward com janela expansiva. Quinze modelos candidatos. Portões de segurança que bloqueavam a operação se o desempenho histórico não atingisse critérios mínimos. Painel visual com decisão, risco, curvas e qualidade dos dados.

A estratégia campeã apresentava Sharpe de 0,232, retorno líquido histórico de 8,31% e drawdown máximo de −13,06% sobre 1.093 observações fora da amostra.

Números modestos, mas positivos. A tentação natural é procurar um modelo melhor.

Fiz o contrário: perguntei se aquele número significava alguma coisa.

Falha 1 — A barra estatística estava abaixo do ruído

Com 1.093 observações fora da amostra, ou 4,34 anos, o erro-padrão do Sharpe anualizado é de aproximadamente 0,48.

Quando se testam N estratégias, o máximo esperado sob a hipótese nula é aproximadamente:

E[max SR] ≈ σ_SR · √(2 · ln N)

Com 42 tentativas registradas, isso dá 1,56. Ou seja: se as 42 estratégias fossem puro ruído, a melhor delas apresentaria Sharpe em torno de 1,56 apenas por sorte.

A campeã tinha 0,232. Não apenas abaixo do limiar — mais de um desvio-padrão abaixo do que a sorte produziria.

Aplicando o Deflated Sharpe Ratio, que corrige explicitamente por seleção múltipla, assimetria e curtose:

MétricaValor
Sharpe0,232
IC 95% (block bootstrap)[−0,544; 1,022]
DSR z−2,771
p(sorte)0,9972

Havia 99,72% de probabilidade de aquele desempenho ser sorte. Os 42 candidatos ficaram todos acima de 0,994.

O PBO, medido por validação cruzada combinatória, ficou em 0,971: a seleção do melhor modelo era anti-informativa.

Lição. Um backtest positivo não é evidência. Sem correção por número de tentativas, você está medindo o quanto procurou, não o quanto encontrou.

Falha 2 — O custo era cobrado numa convenção que contradizia o alvo

O alvo previsto era o retorno entre a abertura e o fechamento do pregão seguinte. Isso implica entrar na abertura e sair no fechamento, todo dia, com a carteira zerada em todo período noturno.

O custo, porém, era calculado assim:

turnover = abs(posicao_t - posicao_anterior)
custo = turnover * 5bps

Essa fórmula só é válida se a posição for carregada de um dia para o outro. Se a carteira zera todo fechamento, entrada e saída são pagas integralmente, independentemente de quanto a posição variou entre dias. A convenção correta é 2 × |posição| × 5bps.

O backtest calculava retorno como se a posição fosse zerada e cobrava custo como se fosse carregada. Inconsistência interna, não erro de calibração.

Sob a convenção correta, todos os resultados históricos pioravam.

Lição. Modelo de custo não é detalhe de implementação. É parte da definição da estratégia, e precisa ser coerente com o mandato de execução.

Falha 3 — O limiar de operação estava abaixo do ponto de equilíbrio

Corrigida a convenção, a aritmética fica direta.

Com posição p e custo de 5 bps por lado, o custo diário é 2p × 5 = 10p bps. O ganho esperado é p × E[r]. Igualando:

E[r] no equilíbrio = 10 bps, independentemente do tamanho da posição

O sistema só abria posição quando a previsão superava 4 bps. A última previsão registrada foi de 5,33 bps.

Ambos abaixo do ponto de equilíbrio.

O sistema estava configurado para negociar precisamente os sinais incapazes de pagar a própria execução. Isso independe de modelo, de features e de qualidade de previsão.

Com exposição média observada de 30,49%, o custo anualizado chegava a 7,68% — contra uma volatilidade-alvo de 15%. Metade do orçamento de risco ia para fricção.

Lição. Antes de perguntar se o modelo prevê, pergunte quanto ele precisa prever para valer a pena. Esse número é aritmética, não estatística, e frequentemente encerra a discussão.

Falha 4 — Um modelo rodava com zero coeficientes

Oito das configurações do laboratório apresentavam Sharpe idêntico até a terceira casa decimal, em quatro conjuntos de variáveis diferentes e dois estados de regime.

Séries distintas não produzem valores idênticos por acaso.

A forense apontou a causa: regularização excessiva zerava todos os coeficientes. Foram 1.864 ajustes com zero coeficientes não nulos. A previsão era constante, a posição era exposição fixa, e as oito séries tinham correlação 1 entre si.

O laboratório não testava 24 configurações. Testava 17, com uma delas replicada oito vezes sem que ninguém notasse.

Um detector desse problema já existia no pipeline: contagem de coeficientes não nulos. Mas ele não funcionava para os modelos de produção, que usam regularização L2 e nunca zeram coeficientes. O detector correto é a variância das previsões.

Lição. Modelos degenerados não falham ruidosamente. Rodam, produzem gráficos e entram em relatórios. Todo pipeline precisa de detecção automática de previsão constante.

O que a auditoria construiu

Encontrar as falhas exigiu instrumentação que o sistema original não tinha:

Protocolo congelado. Critérios de aprovação definidos e com hash gravado antes de qualquer execução. Elimina a renegociação de barra após ver o resultado.

Ledger encadeado. Registro imutável de cada tentativa, hipótese e retratação. Impede reescrita retroativa do histórico de decisões.

Catraca de tentativas. Cada hipótese testada eleva a barra de aprovação da próxima. Torna impossível testar cem coisas e reportar a melhor.

Teste de placebo. Pipeline completo com rótulos embaralhados. Se produz sinal a partir de ruído, há vazamento estrutural.

Deflated Sharpe Ratio e PBO. Validados contra dados sintéticos antes de serem usados como critério.

Gate de degeneração. Exclusão automática de candidatos com variância de previsão abaixo de limiar declarado, aplicada antes do ranking.

Execução isolada. Contêiner sem rede, com limite de memória e checksums de todos os artefatos.

O resultado

Com a instrumentação validada, estendi a amostra de 4,34 para 20,04 anos usando arquivos COTAHIST oficiais da B3. A extensão derrubou a barra de aprovação de 1,64 para 0,68 sem que nenhum modelo tivesse melhorado. O ganho veio de amostra, não de método.

Três hipóteses estruturalmente distintas foram então pré-registradas e testadas uma única vez.

HipóteseSharpe líquidoDSRIC
Controle (sempre comprado)−1,266
Ridge, conversão binária−0,5410,0000450,0459
Ridge, conversão proporcional−0,5290,0000390,0459
Três variáveis, parcimonioso−0,2840,0028520,0481

Todas reprovadas.

O achado mais preciso veio do cálculo de equilíbrio: o melhor candidato apresentava correlação positiva entre previsão e retorno (IC de 0,048, valor não desprezível), mas o retorno bruto ponderado pela posição era negativo. O custo máximo para atingir o ponto de equilíbrio era de −5,76 bps por dia ativo.

Ou seja: nem com custo zero a estratégia seria viável. A barreira não era fricção. Era a conversão do sinal em posição.

Veredito registrado: sem sinal explorável no escopo testado. Linha encerrada.

Oito hipóteses minhas, todas descartadas

Durante a auditoria, propus oito explicações para os fenômenos observados. As oito foram registradas antes do teste e as oito foram refutadas pelos dados:

O custo estava subestimado (estava correto). A convenção de giro não era o problema (era). A degradação era monotônica com dimensionalidade (correlação de −0,169, indistinguível de zero em n=8). O encolhimento atenuava o viés de permutação (a direção causal era oposta). Uma variável isolada superava o modelo (comparação inválida). Suavizar posição reduziria custo (não reduz sob mandato de zerar diariamente). A barreira era fricção (não era). E outras.

Todas constam do ledger com autoria e data.

Registrar hipóteses antes de testá-las, e manter o registro quando elas caem, é o que separa auditoria de racionalização. A taxa de acerto de quem propõe é um dado, e esconder esse dado é o primeiro passo para se convencer de qualquer coisa.

Limitações declaradas

Auditoria honesta declara o que não verificou:

Não há validação cruzada de fornecedor. A reconciliação comparou arquivos da mesma origem, o que valida a leitura dos dados, não a fonte.

Não há fonte independente de eventos corporativos com data de disponibilidade auditável. Isso bloqueia preços ajustados e, por consequência, qualquer estudo com posição carregada entre dias.

O preço do Brent ficou inconclusivo por limitação de fonte: a série disponível é estatística, publicada com atraso, não de mercado.

Não existe mais holdout histórico selado. As fases diagnósticas percorreram toda a amostra. Qualquer resultado futuro exige validação prospectiva.

O que este caso demonstra

Sistemas preditivos falham de forma silenciosa. Não quebram, não emitem erro, não param o pipeline. Produzem números plausíveis, gráficos convincentes e relatórios bem formatados. A falha só aparece quando há capital em risco.

As quatro que encontrei aqui não seriam detectadas por nenhum teste unitário, nenhuma revisão de código e nenhuma métrica de acurácia. Exigiram estatística específica: correção por múltiplos testes, teste de placebo, verificação de coerência entre modelo de custo e mandato de execução, e detecção de degeneração.

O resultado desta auditoria foi negativo, e é por isso que ela funcionou. Um processo de validação que nunca reprova nada não está validando nada.

Forma Concreto presta consultoria em auditoria de modelos preditivos, validação estatística e pipelines de dados com rastreabilidade. Se você tem um modelo em produção cujos resultados nunca foram testados contra a hipótese de que são sorte, é exatamente esse o problema que resolvo.

jp@formaconcreto.com