Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

동일 가중 전략이 최적화보다 우월한 경우

표본 기간이 짧을 때 동일 가중 전략은 최적화된 포지션 산정 방식보다 우수한 성과를 냅니다. 파이썬 시뮬레이션을 통해 표본이 커질수록 두 전략의 성과 차이가 좁혀지는 과정을 확인합니다. 추정치 오류에 취약한 최적화 모델의 한계를 분석하고 1/N 포트폴리오의 견고함을 설명합니다.

동일 가중 전략의 우위

표본 기간이 기대 수익률을 확정하기에 너무 짧을 경우, 동일 가중(equal weight) 전략은 최적화된 포지션 규모 산정 방식보다 우수한 성과를 낸다. 짧은 표본 기간은 예외적인 상황이 아니라 일반적인 시장 환경이다. 최적화 도구(optimizer)는 아무도 정확히 측정할 수 없는 입력값을 바탕으로 산술적 논리를 적용하는 것에 불과하다. 1/N 포트폴리오, 즉 동일 가중 방식은 어떠한 추정치도 사용하지 않는다. 이것이 바로 추정치가 부정확할 때 해당 전략이 견고한 성과를 유지하는 이유이다.

동일 가중 방식이 정말로 최적화보다 우월한가?

특정한 조건 하에서는 그렇다. 각 용어를 하나씩 살펴보자. 1/N으로 표기되는 동일 가중(equal weight) 방식은 N개의 포지션에 자본을 균등하게 배분하며, 어떠한 예측도 필요로 하지 않는다. 평균 분산 최적화(mean variance optimization)는 추정된 분산 단위당 기대 수익률이 가장 높은 가중치를 산출한다. 켈리 공식(Kelly criterion)은 장기 복리 수익을 극대화하는 가중치를 산출하는데, 상관관계가 없는 자산들 사이에서는 각 자산의 기대 초과 수익률을 분산으로 나눈 값에 비례하는 가중치로 귀결된다. 당사의 켈리 공식 포지션 사이징 가이드는 해당 공식을 상세히 설명하고 있다.

두 최적화 기법 모두 자산별 기대 수익률이라는 동일한 입력값을 필요로 한다. 이는 표본이 가장 부정확하게 추정하는 수치이다. 변동성은 짧은 기간의 데이터를 통해서도 어느 정도 유의미한 정밀도로 도출할 수 있다. 반면 평균 수익률은 그렇지 않으며, 두 지표 간의 추정치 격차는 어떠한 가격 이력에서도 확인할 수 있을 만큼 크다. 아래 패널은 널리 보유된 6개 종목을 대상으로 2015년부터 2024년까지 각 역년(calendar year)을 개별 측정하여, 연간 추정치의 최고값과 최저값 사이의 차이를 보고한다. 각 종목에 대해 연율화된 일일 평균 수익률과 연율화된 변동성이라는 두 가지 지표로 나누어 측정하였다.

조회10년간의 연간 추정치: 변동성보다 훨씬 크게 변하는 평균값
모든 수치 뒤에 숨겨진 정확한 SQL
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

NVDA의 경우, 지난 10년간 연간 평균 수익률 추정치의 범위는 184.7 퍼센트포인트에 달하며, 동일 기간 동일 종목의 변동성 추정치 범위는 28.6 포인트이다. 패널에서 가장 안정적인 종목인 KO조차 연간 평균 수익률 추정치가 23.9 포인트만큼 변동했다. 작년의 평균 수익률을 올해의 기대 수익률로 간주하여 최적화 모델에 입력하는 모든 전략은 이만큼의 오차 가능성을 내포한 수치를 사용하는 셈이다.

기대수익률을 추정하려면 어느 정도의 표본 기간이 필요한가?

추정 평균 수익률의 표준오차는 자산의 변동성을 표본 기간(연 단위)의 제곱근으로 나눈 값이다. 이때 표본 기간은 관측 횟수가 아닌 연 단위로 계산해야 한다. 동일한 12개월을 일별이 아닌 시간별로 샘플링한다고 해서 정보의 가치가 늘어나지는 않는다. 변동성이 20퍼센트인 자산에 이 공식을 적용하면, 1년 치 데이터의 표준오차는 연간 20퍼센트포인트가 된다. 4년 치 데이터를 사용하면 표준오차는 절반인 10퍼센트포인트로 줄어든다. 실제 평균 수익률 차이가 2퍼센트포인트인 두 자산을 비교할 때 필요한 수준인 1퍼센트포인트의 정밀도를 확보하려면 400년 치 데이터가 필요하다.

변동성은 상황이 다르다. 변동성의 추정 정밀도는 달력상의 기간보다 관측 횟수에 비례하여 개선되므로, 몇 달간의 일별 데이터만으로도 이미 수 퍼센트포인트 이내의 오차 범위에 도달한다. 아래 패널은 한 인덱스 펀드의 20년 치 일별 수익률을 일정한 길이의 겹치지 않는 블록으로 나누어, 각 블록 내에서 두 추정치를 모두 계산한 뒤 블록 간 추정치 분산 정도를 보여준다.

조회표본 길이에 따른 평균 및 변동성 추정치의 분산 정도
모든 수치 뒤에 숨겨진 정확한 SQL
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

21 sessions 길이의 블록에서 평균 수익률 추정치는 53.7퍼센트포인트의 분산을 보이며, 동일한 블록에서 측정된 변동성 추정치는 10.9퍼센트포인트를 기록한다. 블록 길이를 504 sessions로 늘리면 평균 수익률의 분산은 10.6퍼센트포인트로 좁혀진다. 이 분산은 제곱근에 비례하여 줄어드는데, 오차를 절반으로 줄이려면 데이터 양을 네 배로 늘려야 한다.

직접 실행 가능한 시드 기반 시뮬레이션

추정 오차가 1/N 전략에 승리를 안겨줄 만큼 크다는 사실을 증명하는 방법은 다음과 같습니다. 이 방법은 파이썬(Python) 설치 외에 데이터 파일, 다운로드, 외부 패키지 등 추가적인 요소가 전혀 필요하지 않습니다. 사용자가 선택한 매개변수를 바탕으로 수익률을 직접 생성하므로 정답을 미리 알 수 있으며, 두 자산 배분 전략의 성과를 모두 평가할 수 있습니다.

  1. import randomimport statistics, 그리고 from math import log 모듈을 불러옵니다. 다음 줄에서 random.seed(20260816)을 사용하여 시드(seed)를 설정합니다.
  2. 연간 기대수익률이 각각 5, 6, 7, 8, 9퍼센트이고 연간 변동성이 20퍼센트이며 서로 상관관계가 없는 5개 자산을 정의합니다. mu_d = mu_a / 252sd_d = sd_a / (252 ** 0.5)를 사용하여 일간 단위로 변환합니다.
  3. [60, 125, 250, 500, 1000, 2500, 5000] 범위에서 표본 길이 T를 선택합니다.
  4. random.gauss(mu_d, sd_d)를 사용하여 각 자산에 대한 T일간의 수익률을 추출합니다. 이 데이터가 운용자가 확인할 수 있는 전체 이력입니다.
  5. statistics.mean로 각 자산의 평균을, statistics.stdev으로 변동성을 추정합니다. 최적화 도구는 이 두 가지 추정치만을 알고 있습니다.
  6. 5개 자산에 각각 0.2의 비중을 할당하여 동일가중(equal weight) 포트폴리오를 구성합니다. 이 과정에서 추정치는 사용되지 않습니다.
  7. 각 자산의 원시 가중치를 mu_hat / (sd_hat ** 2)로 설정한 뒤, 전체 원시 가중치의 절댓값 합으로 나누어 최적화 포트폴리오를 구성합니다. 이를 통해 두 포트폴리오의 총 익스포저(gross exposure)를 동일하게 맞춥니다.
  8. 실제 매개변수를 바탕으로 표본 외(out of sample) 경로인 2520일간의 일간 수익률을 새로 추출합니다. 두 배분 전략 모두 이 데이터를 사전에 보지 못했습니다.
  9. log(1 + r)의 평균을 사용하여 해당 경로에서 두 포트폴리오의 성과를 측정합니다. 여기서 r은 해당 일자 5개 자산 수익률의 가중 합입니다.
  10. 각 T마다 2000회의 독립적인 시행을 거쳐 4단계부터 9단계까지 반복하고, 동일가중 전략이 최적화 가중치 전략보다 우수한 성과를 낸 시행의 비율을 기록합니다.

T가 짧은 구간부터 긴 구간까지 결과를 확인하십시오. T가 짧은 구간에서는 동일가중 전략이 대다수의 시행에서 승리합니다. T가 길어질수록 이 비율은 꾸준히 감소하며, T가 충분히 길어지면 최적화 가중치 전략이 대부분의 시행에서 승리합니다. 그 중간 어딘가에서 두 전략의 성과가 교차합니다. 교차점은 시드 값과 실제 평균 간의 스프레드(spread)에 따라 이동합니다. 하지만 방향은 변하지 않습니다. 데이터가 많을수록 최적화 도구에 유리하고, 데이터가 적을수록 1/N 전략에 유리합니다. 결과를 재현하려면 random.seed(20260816) 내부의 정수를 변경하고 다시 실행하십시오.

최적화 도구가 잘못된 평균 추정치를 증폭시키는 이유

추정치가 가중치에 어떻게 반영되는지 살펴본다. 추정 평균은 분자에, 추정 분산은 분모에 위치한다. 평균 추정치를 두 배로 늘리면 가중치도 두 배가 된다. 분산 추정치를 4분의 1만큼 줄이면 가중치는 3분의 1만큼 증가한다. 운이 좋은 표본에서는 두 오류가 같은 방향으로 작용한다. 좋은 결과가 연속되면 측정된 평균은 상승하고, 같은 기간 동안 측정된 분산은 종종 낮아진다. 최적화 도구는 해당 자산을 그룹 내에서 가장 뛰어난 자산으로 인식하여 그에 맞춰 비중을 배분한다. 표본 외(out of sample) 데이터에서는 다시 평범한 그룹의 일원으로 돌아간다. 동일 가중(equal weight) 전략은 이러한 운 좋은 표본의 영향을 받지 않는다.

시뮬레이션은 이 문제의 완만한 형태에 불과하다. 상관관계가 없는 5개의 자산은 대각 공분산 행렬(diagonal covariance matrix)을 형성하며, 역행렬을 구할 필요가 없다. 실제 포트폴리오는 상관관계를 가지며, 자산 수보다 조금 더 많은 관측치로 구성된 표본 공분산 행렬은 특이 행렬(singular matrix)에 가깝다. 이를 역행렬로 변환하면 작은 입력 오류가 매우 큰 가중치로 증폭된다. 이것이 바로 최적화 도구가 특정 종목에 자본의 몇 배에 달하는 포지션을 설정하고, 그와 밀접한 대체 자산에 상쇄 매도(short) 포지션을 취하게 되는 이유다. 포트폴리오 내 집중 리스크에 관한 당사의 노트는 이러한 가중치가 드로다운(drawdown)에 어떤 영향을 미치는지 다룬다.

입력값 또한 고정되어 있지 않다. 아래 패널은 광범위한 인덱스 펀드와 대형 필수소비재 종목에 대해 연율화하고 월별로 샘플링한 1년 이동 평균 일일 수익률을 추적한다.

조회1년 이동 평균 수익률: 최적화 모델에 입력되는 수치
모든 수치 뒤에 숨겨진 정확한 SQL
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

해당 두 선의 모든 지점은 특정 시점에 최적화 도구가 기대 수익률로 받아들였을 숫자들이다. SPY의 첫 번째 월간 수치는 17.7%이고 마지막 수치는 25.8%이며, 그 사이에 96개의 수치가 존재한다. KO는 같은 기간을 -0.4%으로 시작한다. 이 시계열을 매달 반영하는 가중치 산정 방식은 데이터에 포함된 모든 변동성을 그대로 이어받는다.

하프 켈리(Half Kelly)와 축소(shrinkage) 기법이 문제를 해결하는가?

이 기법들은 문제를 완화할 뿐이다. 실무에서는 네 가지 보완책이 등장하며, 각 기법은 이론적 최적값의 일부를 포기하는 대신 추정치에 대한 민감도를 낮추는 역할을 한다.

  • 하프 켈리는 모든 비중을 절반으로 줄인다. 켈리 성장 곡선은 정점 부근에서는 완만하지만 그 아래에서는 가파르다. 따라서 투자 규모를 절반으로 줄이면 이론적 성장률은 소폭 감소하는 반면, 추정된 우위(edge)가 과대평가되었을 때 발생하는 손실은 훨씬 크게 줄일 수 있다. 변동성 타겟팅(Volatility targeting)은 동일한 원리를 분모에 적용하여, 짧은 표본으로도 얻을 수 있는 단 하나의 입력값으로 포지션 규모를 결정한다.
  • 축소 기법은 모든 추정 평균값을 추정치들의 횡단면 평균(cross sectional average) 방향으로 끌어당기며, 표본이 작을수록 그 조정 폭은 커진다. 이를 극단까지 밀어붙이면 모든 자산의 기대수익률이 동일해지며, 변동성까지 같다면 최적화 도구는 스스로 동일 비중을 산출한다. 동일 비중(Equal weight) 포트폴리오는 완전히 축소된 형태이다.
  • 공매도 금지 및 종목별 비중 상한 설정과 같은 제약 조건은 운 좋은 추정치 하나가 특정 비중을 과도하게 밀어 올리는 것을 방지한다. 이는 추정치 자체의 개선이라기보다 피해를 방지하는 통제 수단에 가깝다.
  • 기대수익률을 완전히 배제하면 최소 분산(minimum variance) 및 위험 균형(risk parity) 전략이 되며, 이는 공분산(covariance)만을 사용한다. 공분산이야말로 표본을 통해 실제로 신뢰할 수 있는 입력값이다.

이 네 가지 기법 중 어느 것도 표본에 포함되지 않은 정보를 새로 만들어내지는 않는다. 이들이 변화시키는 것은 투자자가 보유하지 않았을 수도 있는 정보에 포트폴리오의 성과를 얼마나 의존하게 할 것인가 하는 점이다.

최적화가 제값을 하는 경우

교차 현상은 양방향으로 나타납니다. T가 실제 평균 간의 스프레드(spread) 대비 충분히 커지면, 최적화된 배분 방식이 우위를 점하고 이를 유지합니다. 이 스프레드가 넓을수록 교차 시점은 더 빨라집니다. 또한 데이터가 제공하는 입력값, 즉 공분산(covariance)과 헤지 비율(hedge ratio)이 기대 수익률보다 훨씬 더 정확하게 추정되므로, 이러한 입력값을 사용할 때 최적화는 유효한 도구가 됩니다.

동일 가중(equal weight) 방식에는 그에 따른 비용이 따릅니다. 이 방식은 투자자가 실제로 보유한 정보를 무시하며, 종목 수가 적은 유니버스에서는 최적화 모델만큼이나 가중치를 집중시킵니다. 동일 가중 방식을 가중치 결정 후보가 반드시 넘어서야 할 기준선으로 간주하십시오. 단, 이 평가는 가중치가 학습하지 않은 데이터를 대상으로 이루어져야 합니다. 가중치를 산출한 동일한 표본으로 성과를 측정하는 것은 백테스팅에서의 미래 정보 편향(look-ahead bias in backtesting)을 다른 방식으로 수행하는 것에 불과하며, 이는 매번 최적화 모델의 성과를 과대평가하게 만듭니다. 단일 지점 추정치가 아닌 측정된 우위의 신뢰 구간을 정직하게 산출하기 위해서는 부트스트랩 신뢰 구간(bootstrapped confidence intervals)을 사용하는 것이 표준입니다.

자주 묻는 질문(FAQ)

동일 가중(equal weight) 방식이 평균 분산 최적화(mean variance optimization)보다 정말 우수한가?

표본이 짧은 경우 흔히 그렇습니다. 최적화 도구는 각 자산의 기대 수익률 추정치가 필요한데, 이 추정치에는 자산 변동성을 연 단위 표본 길이의 제곱근으로 나눈 값과 거의 비슷한 수준의 표준 오차가 수반됩니다. 해당 오차가 자산 간 실제 수익률 차이보다 큰 상태에서는 최적화 도구가 노이즈를 정렬하는 꼴이 됩니다. 동일 가중 방식은 잘못될 만한 추정치 자체가 없습니다.

기대 수익률을 추정하려면 관측치가 얼마나 필요한가?

거의 모든 사람이 보유한 것보다 더 많은 데이터가 필요합니다. 변동성이 20퍼센트인 자산의 경우, 1년 치 일간 데이터를 사용해도 연간 표준 오차가 20퍼센트 포인트에 육박하며, 이 오차를 절반으로 줄이려면 4배의 기간이 소요됩니다. 같은 해 안에서 장중 관측치를 추가하는 것은 도움이 되지 않습니다. 반면 변동성은 몇 달 치 데이터만으로도 유의미한 추정이 가능합니다.

하프 켈리(half Kelly)는 단순히 베팅 규모를 줄이는 것인가?

유리한 조건에서 베팅 규모를 줄이는 것입니다. 켈리 성장 곡선은 정점 부근에서 완만하므로, 투자 비중을 절반으로 줄이면 이론적 성장률은 소폭 감소하는 대신 경로의 변동성은 대략 절반으로 줄어들며, 우위(edge)를 과대평가했을 때 발생하는 비용도 축소됩니다.

1/N 포트폴리오란 무엇인가?

N개의 포지션 각각에 자본을 동일한 비율로 배분하고 정해진 일정에 따라 리밸런싱하는 포트폴리오를 의미합니다. 수익률 예측이나 공분산 추정치가 필요 없으며, 바로 이 점 때문에 수익률 예측이 필요한 모든 가중치 부여 방식의 표준 벤치마크가 됩니다.

패널 구성 방식

세 패널 모두 일간 종가를 읽어 들여 단순 종가 대비 수익률을 계산하며, 중복된 행은 날짜별, 티커(ticker)별로 하나의 종가로 합산합니다. 평균 수익률은 일간 평균 수익률에 252 거래일을 곱하여 연율화하고, 변동성은 일간 표준편차에 252의 제곱근을 곱하여 연율화합니다. 연간 패널은 최소 200 거래일 이상 존재하는 달력상의 연도만 유지합니다. 블록 패널은 겹치지 않는 블록을 사용하며 각 길이에서 마지막 잔여 블록은 제외하고, 윈도우 카운트(window count) 열에는 각 길이별로 생성된 블록의 개수를 표시합니다. 배당금은 일절 포함되지 않으므로 이는 가격 수익률(price returns)이며, 배당을 지급하는 종목의 경우 평균 수익률 수준이 실제보다 낮게 산정됩니다. 패널의 목적은 추정치의 수준이 아니라 추정치의 분포(spread)를 보여주는 데 있습니다.


이곳의 모든 패널은 차트 하단에 정확한 SQL을 포함하고 있으며, 시뮬레이션은 시드(seed) 값을 유지합니다. 귀하의 종목 리스트에 대해 동일한 추정치 안정성 검사를 수행하려면 Strasmore 터미널에서 평이한 영어로 요청하십시오.

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