Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Cuándo la ponderación equitativa supera a la optimización

Una simulación en Python con semilla muestra cuándo la ponderación equitativa supera al tamaño de posición optimizado en muestras cortas y cuándo la ventaja desaparece.

La ponderación equitativa supera a la asignación de posiciones optimizada cuando la muestra es demasiado corta para estimar con precisión los retornos esperados. Las muestras cortas son la norma, no la excepción. Un optimizador aplica una aritmética correcta a un dato que nadie mide bien. La cartera 1/N, con ponderación equitativa, no estima nada. Por eso resiste cuando las estimaciones son deficientes.

¿La ponderación equiponderada realmente supera a la optimización?

Bajo una condición específica, sí. Veamos los conceptos por separado. La ponderación equiponderada, expresada como 1/N, distribuye el capital por igual entre N posiciones y no requiere ningún tipo de pronóstico. La optimización de media-varianza calcula las ponderaciones con el mejor rendimiento esperado por unidad de varianza estimada. El criterio de Kelly calcula las ponderaciones que maximizan el crecimiento compuesto a largo plazo; en activos no correlacionados, su resultado se reduce a una ponderación proporcional al exceso de rendimiento esperado de cada activo dividido por su varianza. Nuestra guía sobre dimensionamiento de posiciones con el criterio de Kelly explica esa fórmula en detalle.

Ambos optimizadores necesitan el mismo dato de entrada: un rendimiento esperado para cada activo. Esa es la variable que una muestra estima peor. La volatilidad puede estimarse con una precisión razonable a partir de una ventana corta. La media no, y la diferencia entre ambas es suficientemente grande para observarse en cualquier historial de precios. El panel siguiente toma seis nombres ampliamente negociados, mide cada año calendario entre 2015 y 2024 de forma independiente y muestra la distancia entre la estimación anual más alta y la más baja. Lo hace dos veces por nombre: una para el rendimiento diario promedio anualizado y otra para la volatilidad anualizada.

ConsultaDiez años de estimaciones anuales: la media se mueve mucho más que la volatilidad
El SQL exacto detrás de cada cifra
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, la estimación de la media anual abarca 184.7 puntos porcentuales durante esos diez años, frente a un rango de 28.6 puntos en la estimación de volatilidad del mismo nombre a lo largo de esos años. El nombre más estable del panel, KO, aun así mostró una variación de 23.9 puntos en su estimación de la media anual. Cualquier método que entregue el rendimiento promedio del año pasado a un optimizador como rendimiento esperado de este año le está proporcionando una cifra con ese margen de variación.

¿Cuánto tiempo debe abarcar una muestra para estimar una rentabilidad esperada?

El error estándar de una rentabilidad media estimada es la volatilidad del activo dividida entre la raíz cuadrada de la longitud de la muestra en años. En años, no en observaciones: muestrear los mismos doce meses cada hora en lugar de hacerlo a diario no aporta nada. Si aplicamos esa fórmula a un activo con una volatilidad del 20 %, un año de historial produce un error estándar de 20 puntos porcentuales anuales. Cuatro años lo reducen a 10. Para bajarlo a un punto —la precisión que se necesitaría antes de ordenar dos activos cuyas medias verdaderas difieren en dos puntos— harían falta cuatro siglos de datos.

La volatilidad es diferente. Su precisión mejora con el número de observaciones, no con el período calendario. Por eso, unos pocos meses de datos diarios ya permiten estimarla con un margen de pocos puntos. El panel siguiente divide veinte años de rentabilidades diarias de un fondo indexado en bloques no superpuestos de una longitud fija. Después calcula ambas estimaciones dentro de cada bloque y muestra cuánto varían de un bloque a otro.

ConsultaDispersión de las estimaciones de media y volatilidad según la longitud de la muestra
El SQL exacto detrás de cada cifra
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

En bloques de 21 sessions, la estimación de la media varía en 53.7 puntos porcentuales, frente a 10.9 puntos para la estimación de volatilidad calculada sobre los mismos bloques. Si se amplía el bloque a 504 sessions, la dispersión de la media se reduce a 10.6 puntos. La reducción sigue una relación de raíz cuadrada: cada vez que se reduce el error a la mitad, se necesita multiplicar los datos por cuatro.

Una simulación con semilla que puede ejecutar usted mismo

Nada de eso demuestra que el error de estimación sea suficientemente grande como para dar la ventaja a 1/N. Esto sí lo demuestra. La receta requiere una instalación de Python y nada más: no necesita archivos de datos, descargas ni paquetes de terceros. Genera sus propios rendimientos a partir de los parámetros que usted elija. Por eso, la respuesta verdadera es conocida y ambas asignaciones pueden compararse con ella.

  1. Importe dos módulos, import random y import statistics, además de from math import log. Establezca la semilla en la línea siguiente con random.seed(20260816).
  2. Defina cinco activos con rendimientos anuales esperados verdaderos de 5, 6, 7, 8 y 9 por ciento, respectivamente. Asigne a cada uno una volatilidad anual verdadera de 20 por ciento y suponga que no están correlacionados. Convierta estos parámetros a una frecuencia diaria mediante mu_d = mu_a / 252 y sd_d = sd_a / (252 ** 0.5).
  3. Elija una longitud de muestra T a partir del barrido [60, 125, 250, 500, 1000, 2500, 5000].
  4. Genere T rendimientos diarios para cada activo con random.gauss(mu_d, sd_d). Esa simulación es todo el historial que el gestor puede observar.
  5. Estime la media de cada activo con statistics.mean y su volatilidad con statistics.stdev. Esas dos estimaciones son todo lo que conoce el optimizador.
  6. Construya la cartera equiponderada asignando 0.2 a cada uno de los cinco activos. Esta cartera no utiliza ninguna de las estimaciones.
  7. Construya la cartera optimizada fijando cada peso bruto en mu_hat / (sd_hat ** 2). Después, divida cada peso entre la suma de los valores absolutos de los pesos brutos. Así, ambas carteras quedan con la misma exposición bruta.
  8. Genere una trayectoria fuera de muestra nueva de 2520 rendimientos diarios por activo a partir de los parámetros verdaderos. Ninguna de las dos asignaciones ha observado esa trayectoria.
  9. Evalúe ambas carteras en esa trayectoria usando el promedio de log(1 + r), donde r es la suma ponderada de los rendimientos de los cinco activos en el día.
  10. Repita los pasos 4 a 9 en 2000 pruebas independientes para cada T y registre la proporción de pruebas en las que la cartera equiponderada supera a los pesos optimizados.

Lea el barrido de T corto a T largo. En el extremo corto, la cartera equiponderada gana en una mayoría clara de las pruebas. La proporción cae de forma constante a medida que T aumenta. En el extremo largo, los pesos optimizados ganan la mayoría de las pruebas. En algún punto intermedio, ambas proporciones se cruzan. El punto de cruce cambia con la semilla y con la diferencia entre las medias verdaderas. La dirección no cambia: más datos favorecen al optimizador y menos datos favorecen a 1/N. Para replicar el resultado, cambie el entero dentro de random.seed(20260816) y vuelva a ejecutar el barrido.

Por qué el optimizador amplifica una mala estimación de la media

Observe dónde entran las estimaciones en el peso. La media estimada está en el numerador y la varianza estimada, en el denominador. Si se duplica la estimación de la media, el peso se duplica. Si se reduce una cuarta parte de la estimación de la varianza, el peso aumenta un tercio. En una muestra afortunada, ambos errores apuntan en la misma dirección: una racha de rendimientos positivos eleva la media medida y, a menudo, reduce la varianza medida durante el mismo periodo. El optimizador interpreta que ese activo es el destacado del grupo y le asigna un peso acorde. Fuera de muestra, vuelve a ser un integrante ordinario del grupo. La ponderación equitativa nunca vio esa muestra afortunada.

La simulación es la versión moderada de este problema. Cinco activos no correlacionados dejan una matriz de covarianzas diagonal que no requiere inversión. Los portafolios reales están correlacionados, y una matriz de covarianzas muestral construida con apenas más observaciones que activos se acerca a una matriz singular. Invertirla multiplica pequeños errores de los datos de entrada y los convierte en pesos muy grandes. Así es como un optimizador puede llegar a asignar a un solo nombre una posición por un valor de varias veces el capital, compensada por una posición short en su sustituto más cercano. Nuestra nota sobre el riesgo de concentración en un portafolio explica el efecto de ese tipo de peso sobre una caída.

Además, el dato de entrada tampoco permanece constante. El panel siguiente sigue el rendimiento diario promedio móvil de un año, anualizado y muestreado mensualmente, de un fondo indexado amplio junto con una empresa grande de productos básicos de consumo.

ConsultaMedia móvil de retornos a un año, el dato que recibiría un optimizador
El SQL exacto detrás de cada cifra
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 punto de esas dos líneas es una cifra que algún optimizador habría aceptado como rendimiento esperado en esa fecha. La primera lectura mensual de SPY es 17.7% y la última es 25.8%, con 96 lecturas intermedias. KO inicia el mismo periodo en -0.4%. Un esquema de ponderación que incorpora esta serie mes a mes hereda cada una de sus oscilaciones.

¿La mitad de Kelly y la contracción lo corrigen?

Lo suavizan. En la práctica aparecen cuatro ajustes, y cada uno renuncia a parte del óptimo teórico para reducir la sensibilidad al estimado.

  • La mitad de Kelly reduce a la mitad cada ponderación. La curva de crecimiento de Kelly es plana cerca de su máximo y cae con rapidez por debajo de él. Por eso, invertir la mitad de la posición cede una pequeña parte de la tasa de crecimiento teórica, pero reduce mucho más el daño de sobreestimar la ventaja. Objetivo de volatilidad aplica la misma lógica al denominador y determina el tamaño de la posición a partir del único dato que una muestra corta puede proporcionar.
  • La contracción acerca cada media estimada al promedio transversal de las estimaciones. El ajuste aumenta a medida que se reduce la muestra. Si se lleva al extremo, todos los activos tienen la misma rentabilidad esperada. Con volatilidades iguales, el optimizador devuelve entonces una ponderación igual por sí solo. La ponderación igual es la cartera completamente contraída.
  • Las restricciones —es decir, no permitir posiciones cortas y establecer un límite por posición— acotan cuánto puede impulsar una sola estimación afortunada a una ponderación individual. Son una medida de control de daños, no una mejora de la estimación.
  • Eliminar por completo las rentabilidades esperadas deja la varianza mínima y la paridad de riesgo, que utilizan únicamente la covarianza. Ese es el dato que la muestra realmente puede proporcionar.

Ninguno de los cuatro ajustes genera información que no esté contenida en la muestra. Lo que cambia es cuánto de la cartera depende de información que quizá no se tenga.

Cuando la optimización empieza a justificar su costo

El cruce ocurre en ambas direcciones. Cuando T aumenta lo suficiente frente a la diferencia entre las medias verdaderas, la asignación optimizada toma la delantera y se mantiene allí. Cuanto mayor es esa diferencia, antes ocurre. La optimización también es la herramienta adecuada cuando el dato de entrada lo proporciona el mercado: la covarianza y los hedge ratios se estiman con mucha más precisión que los retornos esperados.

La ponderación igualitaria también tiene un costo. Ignora información que realmente está disponible y, en un universo pequeño, puede concentrarse tanto como cualquier optimizador. Debe tratarse como la referencia que cualquier esquema de ponderación candidato tiene que superar usando datos que no se emplearon para calcular los pesos. Ajustar los pesos y evaluarlos con la misma muestra es sesgo de anticipación en el backtesting con otro nombre, y siempre favorece al optimizador. Para obtener un intervalo realista alrededor de una ventaja medida, en lugar de una única estimación puntual, la herramienta estándar son los intervalos de confianza mediante bootstrap.

Preguntas frecuentes

¿La ponderación equitativa realmente supera a la optimización de media-varianza?

En muestras cortas, a menudo sí. Un optimizador necesita estimar el rendimiento esperado de cada activo, y ese estimado tiene un error estándar de aproximadamente la volatilidad del activo dividida entre la raíz cuadrada de la longitud de la muestra en años. Mientras ese error siga siendo mayor que las diferencias reales entre los activos, el optimizador está ordenando ruido. La ponderación equitativa no necesita ningún estimado que pueda estar equivocado.

¿Cuántas observaciones se necesitan para estimar un rendimiento esperado?

Más de las que casi cualquiera tiene. Para un activo con una volatilidad de 20 por ciento, un año de datos diarios deja un error estándar cercano a 20 puntos porcentuales anuales, y reducir ese error a la mitad requiere cuadruplicar el periodo calendario. Agregar observaciones intradía dentro del mismo año no ayuda. En cambio, la volatilidad puede estimarse de forma útil con unos pocos meses de datos.

¿Kelly a la mitad es simplemente una apuesta menor?

Es una apuesta menor en condiciones favorables. La curva de crecimiento de Kelly es plana cerca de su máximo. Por eso, reducir la posición a la mitad cede una pequeña parte de la tasa de crecimiento teórica, al tiempo que reduce aproximadamente a la mitad la volatilidad de la trayectoria y disminuye el costo de sobreestimar la ventaja.

¿Qué es el portafolio 1/N?

Es el portafolio que asigna una fracción igual del capital a cada una de N posiciones y rebalancea según un calendario. No necesita un pronóstico de rendimiento ni una estimación de covarianzas. Por eso es el benchmark estándar para cualquier esquema de ponderación que sí necesite esos datos.

Cómo se construyen los paneles

Los tres paneles leen cierres diarios y calculan rendimientos simples de cierre a cierre. Las filas duplicadas se consolidan en un único cierre por ticker y fecha. Los promedios se anualizan multiplicando el rendimiento diario promedio por 252 sesiones. Las volatilidades se anualizan multiplicando la desviación estándar diaria por la raíz cuadrada de 252. El panel anual conserva un año calendario solo cuando contiene al menos 200 sesiones. El panel por bloques utiliza bloques no superpuestos y descarta el bloque parcial final en cada longitud. Su columna de número de ventanas muestra cuántos bloques produjo cada longitud. No se incluyen dividendos en ningún caso. Por lo tanto, estos son rendimientos de precio y el nivel de cualquier media está subestimado para los activos que pagan dividendos. El objetivo de los paneles es mostrar la dispersión de los estimados, no su nivel.


Cada panel incluye aquí el SQL exacto debajo del gráfico, y la simulación incluye su semilla. Para ejecutar la misma comprobación de estabilidad de los estimados con su propia lista de nombres, solicítela en inglés sencillo en la terminal de Strasmore.

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