Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Quando a ponderação igualitária supera a otimização

A ponderação igualitária supera o dimensionamento otimizado em amostras curtas. Uma simulação em Python mostra o cruzamento e seu fechamento com o crescimento da amostra.

A ponderação igualitária supera o dimensionamento otimizado das posições quando a amostra é curta demais para estimar com precisão os retornos esperados. E amostras curtas são a regra, não a exceção. Um otimizador aplica uma aritmética correta a um dado de entrada que ninguém consegue medir bem. A carteira 1/N, com ponderação igualitária, não estima absolutamente nada. É por isso que ela se mantém robusta quando as estimativas são ruins.

A ponderação igualitária realmente supera a otimização?

Sob uma condição específica, sim. Vamos analisar os termos um a um. A ponderação igualitária, escrita como 1/N, divide o capital igualmente entre N posições e não exige nenhuma previsão. A otimização média-variância calcula os pesos com o melhor retorno esperado por unidade de variância estimada. O critério de Kelly calcula os pesos que maximizam o crescimento composto no longo prazo. Entre ativos não correlacionados, o resultado se reduz a um peso proporcional ao retorno excedente esperado de cada ativo dividido pela sua variância. O nosso guia de dimensionamento de posições pelo critério de Kelly detalha essa fórmula.

Os dois otimizadores precisam do mesmo dado de entrada: um retorno esperado para cada ativo. Essa é a variável que uma amostra estima pior. A volatilidade pode ser obtida de uma janela curta com precisão razoável. A média, não. A diferença entre as duas é grande o suficiente para ser observada em qualquer histórico de preços. O painel abaixo reúne seis ativos amplamente detidos, mede cada ano-calendário de 2015 a 2024 individualmente e mostra a distância entre a estimativa anual mais alta e a mais baixa. O cálculo é feito duas vezes por ativo: uma para o retorno diário médio anualizado e outra para a volatilidade anualizada.

QueryDez anos de estimativas anuais: a média varia muito mais que a volatilidade
O SQL exato por trás de cada número
WITH prices AS
(
    SELECT
        ticker,
        date,
        toFloat64(max(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
      AND date >= '2015-01-01'
      AND date <  '2025-01-01'
    GROUP BY ticker, date
),
rets AS
(
    SELECT
        ticker,
        date,
        c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
    FROM prices
),
yearly AS
(
    SELECT
        ticker,
        toYear(date)                     AS yr,
        avg(ret) * 252 * 100             AS mean_pct,
        stddevPop(ret) * sqrt(252) * 100 AS vol_pct
    FROM rets
    WHERE isFinite(ret)
    GROUP BY ticker, yr
    HAVING count() >= 200
)
SELECT
    ticker,
    round(max(mean_pct) - min(mean_pct), 1) AS mean_estimate_range_pct,
    round(max(vol_pct) - min(vol_pct), 1)   AS vol_estimate_range_pct
FROM yearly
GROUP BY ticker
ORDER BY mean_estimate_range_pct DESC
Run this yourself

Para NVDA, a estimativa da média anual varia em 184.7 pontos percentuais ao longo desses dez anos, contra uma amplitude de 28.6 pontos na estimativa de volatilidade do mesmo ativo no mesmo período. O ativo mais estável do painel, KO, ainda assim apresentou uma variação de 23.9 pontos na estimativa da média anual. Qualquer estratégia que entregue ao otimizador o retorno médio do ano passado como retorno esperado deste ano está fornecendo um número com esse grau de instabilidade.

De quanto tempo de amostra você precisa para estimar um retorno esperado?

O erro-padrão de um retorno médio estimado é a volatilidade do ativo dividida pela raiz quadrada do tamanho da amostra em anos. Em anos, não em observações: coletar dados dos mesmos doze meses por hora, em vez de diariamente, não traz ganho algum. Aplicando essa fórmula a um ativo com volatilidade de 20%, um ano de histórico produz um erro-padrão de 20 pontos percentuais ao ano. Quatro anos reduzem esse valor pela metade, para 10. Para chegar a um ponto, que seria a precisão desejável antes de classificar dois ativos cujas médias verdadeiras diferem em dois pontos, seriam necessários quatro séculos de dados.

A volatilidade é diferente. Sua precisão melhora com a quantidade de observações, e não com o período do calendário. Assim, alguns meses de dados diários já permitem estimá-la com uma margem de poucos pontos. O painel abaixo divide vinte anos de retornos diários de um fundo de índice em blocos não sobrepostos de duração fixa, calcula as duas estimativas dentro de cada bloco e mostra o quanto elas variam de um bloco para outro.

QueryDispersão das estimativas de média e volatilidade por tamanho da amostra
O SQL exato por trás de cada número
WITH prices AS
(
    SELECT
        date,
        toFloat64(max(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2005-01-01'
      AND date <  '2025-01-01'
    GROUP BY date
),
rets AS
(
    SELECT
        date,
        c / lagInFrame(c, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
    FROM prices
),
numbered AS
(
    SELECT
        ret,
        row_number() OVER (ORDER BY date ASC) AS i
    FROM rets
    WHERE isFinite(ret)
),
sweep AS
(
    SELECT
        arrayJoin([21, 63, 126, 252, 504]) AS n,
        i,
        ret
    FROM numbered
),
blocks AS
(
    SELECT
        n,
        intDiv(i - 1, n)                 AS blk,
        avg(ret) * 252 * 100             AS mean_pct,
        stddevPop(ret) * sqrt(252) * 100 AS vol_pct
    FROM sweep
    GROUP BY n, blk
    HAVING count() = n
)
SELECT
    concat(toString(n), ' sessions') AS sample_length,
    round(stddevPop(mean_pct), 1)    AS mean_estimate_spread_pct,
    round(stddevPop(vol_pct), 1)     AS vol_estimate_spread_pct,
    count()                          AS window_count
FROM blocks
GROUP BY n
ORDER BY n ASC
Run this yourself

Em blocos de 21 sessions, a estimativa da média varia em 53.7 pontos percentuais, contra 10.9 pontos para a estimativa de volatilidade calculada nos mesmos blocos. Ao ampliar o bloco para 504 sessions, a dispersão da média diminui para 10.6 pontos. A redução segue uma raiz quadrada: cada corte pela metade no erro exige quatro vezes mais dados.

Uma simulação com dados gerados que você pode executar

Nada disso prova que o erro de estimação seja grande o suficiente para dar a vitória ao 1/N. A simulação a seguir prova. Ela exige apenas uma instalação do Python: não requer arquivos de dados, downloads nem pacotes de terceiros. O código gera os próprios retornos a partir dos parâmetros escolhidos. Assim, o resultado verdadeiro é conhecido e é possível avaliar as duas alocações em relação a ele.

  1. Importe dois módulos, import random e import statistics, além de from math import log. Defina a seed na linha seguinte com random.seed(20260816).
  2. Defina cinco ativos com retornos anuais esperados verdadeiros de 5, 6, 7, 8 e 9 por cento. Todos devem ter volatilidade anual verdadeira de 20 por cento e não ter correlação entre si. Converta o passo para a frequência diária com mu_d = mu_a / 252 e sd_d = sd_a / (252 ** 0.5).
  3. Escolha um tamanho de amostra T a partir da varredura [60, 125, 250, 500, 1000, 2500, 5000].
  4. Gere T retornos diários para cada ativo com random.gauss(mu_d, sd_d). Essa geração representa todo o histórico que o gestor poderá observar.
  5. Estime a média de cada ativo com statistics.mean e a volatilidade com statistics.stdev. O otimizador conhece apenas essas duas estimativas.
  6. Monte a carteira de pesos iguais atribuindo 0,2 a cada um dos cinco ativos. Essa carteira não utiliza nenhuma das estimativas.
  7. Monte a carteira otimizada definindo cada peso bruto como mu_hat / (sd_hat ** 2). Depois, divida cada peso pela soma dos valores absolutos dos pesos brutos. Isso coloca as duas carteiras no mesmo nível de exposição bruta.
  8. Gere uma nova trajetória fora da amostra, com 2520 retornos diários por ativo, usando os parâmetros verdadeiros. Nenhuma das duas alocações observou essa trajetória.
  9. Avalie as duas carteiras nessa trajetória usando a média de log(1 + r), em que r é a soma ponderada dos retornos dos cinco ativos no dia.
  10. Repita as etapas 4 a 9 em 2000 simulações independentes para cada T. Registre a proporção de simulações nas quais a carteira de pesos iguais supera os pesos otimizados.

Leia a varredura de T menor para T maior. No extremo curto, a carteira de pesos iguais vence a maioria clara das simulações. Essa proporção cai de forma constante à medida que T aumenta. No extremo longo, os pesos otimizados vencem a maioria das simulações. Em algum ponto intermediário, as duas carteiras se cruzam. O ponto de cruzamento muda com a seed e com o spread entre as médias verdadeiras. A direção não muda: mais dados favorecem o otimizador; menos dados favorecem o 1/N. Para replicar o teste, altere o número inteiro dentro de random.seed(20260816) e execute a varredura novamente.

Por que o otimizador amplifica uma estimativa ruim da média

Observe onde as estimativas entram no peso. A média estimada fica no numerador, e a variância estimada, no denominador. Se a estimativa da média dobra, o peso dobra. Se a estimativa da variância cai um quarto, o peso aumenta um terço. Em uma amostra favorável, os dois erros costumam apontar na mesma direção: uma sequência de retornos positivos eleva a média medida e frequentemente reduz a variância medida no mesmo período. O otimizador interpreta esse ativo como o destaque do grupo e dimensiona a posição de acordo. Fora da amostra, ele volta a ser um ativo comum do grupo. A ponderação igual nunca observou a amostra favorável.

A simulação é a versão mais branda desse problema. Cinco ativos não correlacionados produzem uma matriz de covariância diagonal, sem nada para inverter. As carteiras reais são correlacionadas, e uma matriz de covariância amostral construída com pouco mais observações do que ativos fica próxima de ser singular. Invertê-la transforma pequenos erros nos dados de entrada em posições muito grandes. É assim que um otimizador chega a uma posição equivalente a várias vezes o capital em um único ativo, compensada por uma posição vendida no substituto mais próximo. Nossa nota sobre risco de concentração em uma carteira explica o efeito desse tipo de peso sobre um drawdown.

Os dados de entrada também não permanecem estáveis. O painel abaixo acompanha o retorno médio diário móvel de um ano, anualizado e amostrado mensalmente, de um fundo de índice amplo e de uma grande empresa do segmento de bens de consumo básico.

QueryRetorno médio móvel de um ano, o número usado pelo otimizador
O SQL exato por trás de cada número
WITH prices AS
(
    SELECT
        ticker,
        date,
        toFloat64(max(close)) AS c
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'KO')
      AND date >= '2015-10-01'
      AND date <  '2025-01-01'
    GROUP BY ticker, date
),
rets AS
(
    SELECT
        ticker,
        date,
        c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
    FROM prices
),
trailing AS
(
    SELECT
        ticker,
        date,
        avg(ret) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) * 252 * 100 AS trailing_mean_pct,
        row_number() OVER (PARTITION BY ticker ORDER BY date ASC) AS i
    FROM rets
    WHERE isFinite(ret)
)
SELECT
    toString(toStartOfMonth(date))                     AS month,
    round(avgIf(trailing_mean_pct, ticker = 'SPY'), 1) AS spy_trailing_mean_pct,
    round(avgIf(trailing_mean_pct, ticker = 'KO'), 1)  AS ko_trailing_mean_pct
FROM trailing
WHERE i >= 252
  AND date >= '2017-01-01'
GROUP BY month
ORDER BY month ASC
Run this yourself

Cada ponto dessas duas linhas é um número que algum otimizador teria aceitado como retorno esperado naquela data. A primeira leitura mensal do SPY é 17.7% e a última é 25.8%, com 96 leituras entre elas. A KO começa no mesmo período em -0.4%. Um método de ponderação que utiliza essa série mês a mês incorpora todas as suas oscilações.

O half Kelly e o shrinkage resolvem o problema?

Eles apenas o atenuam. Na prática, há quatro ajustes. Cada um abre mão de parte do ótimo teórico para reduzir a sensibilidade ao erro da estimativa.

  • O half Kelly reduz cada peso pela metade. A curva de crescimento de Kelly é plana perto do pico e acentuada abaixo dele. Por isso, investir metade da posição abre mão de uma pequena parcela da taxa de crescimento teórica, mas reduz muito mais o dano causado por uma vantagem superestimada. Target de volatilidade aplica a mesma lógica ao denominador. O dimensionamento parte da única variável que uma amostra curta consegue fornecer.
  • O shrinkage puxa cada média estimada em direção à média cross-sectional das estimativas. A intensidade desse ajuste aumenta à medida que a amostra diminui. Levado ao extremo, o método atribui o mesmo retorno esperado a todos os ativos. Com volatilidades iguais, o otimizador então retorna, por conta própria, pesos iguais. O equal weight é a carteira totalmente submetida a shrinkage.
  • As restrições, como não permitir posições vendidas e estabelecer um limite por posição, restringem o quanto uma única estimativa favorável pode aumentar um peso. Elas funcionam como controle de danos, não como uma melhoria da estimativa.
  • Eliminar totalmente os retornos esperados deixa as abordagens de variância mínima e paridade de risco, que usam apenas a covariância. Essa é a informação que a amostra de fato consegue fornecer.

Nenhum dos quatro métodos cria informação que não esteja contida na amostra. O que eles mudam é quanto da carteira fica dependente de informações que talvez você não tenha.

Quando a otimização se paga

A mudança ocorre nos dois sentidos. Quando T cresce em relação à diferença entre as médias verdadeiras, a alocação otimizada ganha vantagem e permanece à frente. Quanto maior essa diferença, mais cedo isso acontece. A otimização também é a ferramenta adequada quando o dado de entrada é fornecido pelos próprios dados: covariâncias e razões de hedge são estimadas com muito mais precisão do que retornos esperados.

A ponderação igualitária também tem um custo. Ela ignora informações que você de fato possui e, em um universo pequeno, concentra a carteira tanto quanto qualquer otimizador. Trate-a como a referência que qualquer método de ponderação precisa superar com dados que não foram usados para definir os pesos. Ajustar os pesos e avaliá-los na mesma amostra é viés de look-ahead no backtesting disfarçado, e sempre favorece o otimizador. Para obter um intervalo honesto em torno de uma vantagem medida, em vez de uma estimativa pontual, intervalos de confiança obtidos por bootstrap são a ferramenta padrão.

Perguntas frequentes

A ponderação igualitária realmente supera a otimização de média-variância?

Em amostras curtas, muitas vezes sim. Um otimizador precisa estimar o retorno esperado de cada ativo, e essa estimativa tem um erro-padrão de aproximadamente a volatilidade do ativo dividida pela raiz quadrada do número de anos da amostra. Enquanto esse erro for maior que as diferenças reais entre os ativos, o otimizador estará ordenando ruído. A ponderação igualitária não depende de uma estimativa que possa estar errada.

Quantas observações são necessárias para estimar um retorno esperado?

Mais do que quase qualquer pessoa tem. Para um ativo com volatilidade de 20%, um ano de dados diários deixa um erro-padrão próximo de 20 pontos percentuais ao ano. Reduzir esse erro pela metade exige quadruplicar o período do calendário. Acrescentar observações intradiárias dentro do mesmo ano não ajuda. A volatilidade, por outro lado, pode ser estimada com alguns meses de dados.

Metade de Kelly é simplesmente uma aposta menor?

É uma aposta menor em condições favoráveis. A curva de crescimento de Kelly é plana perto do pico. Assim, reduzir a posição pela metade sacrifica uma pequena parcela da taxa de crescimento teórica, ao mesmo tempo que reduz aproximadamente pela metade a volatilidade do percurso e diminui o custo de superestimar a vantagem.

O que é o portfólio 1/N?

É o portfólio que aloca uma fração igual do capital em cada uma das N posições e faz o rebalanceamento conforme um cronograma. Ele não precisa de uma previsão de retorno nem de uma estimativa de covariância. Por isso, é o benchmark padrão para qualquer estratégia de ponderação que dependa dessas estimativas.

Como os painéis são construídos

Os três painéis usam fechamentos diários e calculam retornos simples de fechamento a fechamento. Linhas duplicadas são consolidadas em um único fechamento por ticker e por data. As médias são anualizadas multiplicando o retorno diário médio por 252 sessões. As volatilidades são anualizadas multiplicando o desvio-padrão diário pela raiz quadrada de 252. O painel anual mantém um ano-calendário somente quando há pelo menos 200 sessões. O painel por blocos usa blocos não sobrepostos e descarta o bloco parcial final de cada extensão. A coluna de contagem de janelas mostra quantos blocos foram produzidos em cada extensão. Nenhum dividendo é incluído. Portanto, estes são retornos de preço, e o nível de qualquer média fica subestimado para ativos pagadores de dividendos. O objetivo dos painéis é mostrar a dispersão das estimativas, não o seu nível.


Todos os painéis desta página trazem o SQL exato abaixo do gráfico, e a simulação traz sua seed. Para executar a mesma verificação de estabilidade das estimativas na sua própria lista de ativos, solicite-a em português claro no terminal Strasmore.

#quant#position sizing#portfolio construction#estimation error#kelly