본문 바로가기
C.W.K.
Stream
Lesson 04 of 06 · published

CLT가 조용히 실패할 때

~12 min · clt, failure-modes, dependence, fat-tails, preview-track-07

Level 0통계 초심자
0 XP0/55 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete
"CLT는 주문이 아니야. 어떤 합을 어떤 척도로 표준화했는지, 그리고 그 합에 맞는 정리가 실제로 있는지 확인해야 해."

교과서 CLT와 현실의 CLT

가장 먼저 배우는 고전적 중심극한정리는 독립이고 같은 분포를 따르는 확률변수, 그리고 유한한 분산을 가정해. 이 조건 아래에서는 표본 수가 커질수록 표준화한 합이나 평균의 분포가 정규분포에 가까워져.

하지만 독립이 아니면 곧바로 CLT가 실패한다고 말하면 틀려. 약한 의존이나 시간적 상관을 허용하는 중심극한정리도 많아. 더 극단적으로, 변수들이 서로 상관되어 있어도 결합분포가 다변량 정규분포라면 그 합은 표본 수와 상관없이 정확히 정규분포야. 핵심 질문은 단순히 "상관이 있나?"가 아니라 그 의존구조를 반영한 정리와 분산 계산을 썼나?야.

실패 모드 1: 공분산을 지운 표준화

독립일 때는 합의 분산이 각 분산의 합이지만, 의존성이 있으면 공분산 항까지 더해야 해. 양의 상관을 무시하면 실제 변동폭보다 작은 분모로 표준화하게 되고, 꼬리 위험을 과소평가할 수 있어. 이건 "상관 때문에 종이 사라졌다"는 말과 달라. 분포 모양이 정규에 가까워도 잘못된 분산으로 계산한 z값과 꼬리확률은 틀릴 수 있어.

금융시장에서는 평상시 상관관계를 위기 때도 그대로 적용하는 일이 특히 위험해. 공통 충격, 유동성 고갈, 동시 매도가 자산 사이의 의존성을 키우면 평상시 공분산으로 만든 위험척도가 손실 가능성을 작게 보일 수 있지. 여기서 실패한 건 CLT 한 문장이 아니라, 상태에 따라 바뀌는 의존구조를 고정값으로 다룬 모델이야.

실패 모드 2: 무한분산과 다른 극한

분산이 유한하지 않은 분포에는 고전적 CLT를 그대로 적용할 수 없어. 예를 들어 꼬리지수 α가 2이하인 이상적인 멱법칙 분포에서는 합을 다른 방식으로 표준화해야 하고, 극한이 정규분포가 아니라 안정분포가 될 수 있어. 다만 실제 데이터가 유한하다는 이유만으로 곧바로 "무한분산"이라고 단정하면 안 돼. 먼저 꼬리모형이 자료를 잘 설명하는지, 절단점은 없는지 확인해야 해.

실패 모드 3: 느린 수렴

분산이 유한하고 독립성도 그럴듯해도 원래 분포가 심하게 비대칭이거나 꼬리가 두꺼우면 정규근사가 아주 천천히 좋아질 수 있어. 흔히 외우는 "표본 30개면 충분하다"는 보편 법칙이 아니야. 중심부는 그럴듯해 보여도 우리가 실제로 궁금해하는 극단 꼬리에서는 오차가 오래 남을 수 있어.

시민의 점검표

정규근사를 믿기 전에 네 가지를 물어봐. 합쳐지는 값의 분산은 유한해 보여? 의존구조를 모델이 반영했어? 사용한 표준오차가 공분산까지 담아? 표본 수가 중심부뿐 아니라 관심 있는 꼬리까지 근사하기에 충분해? 하나라도 모르면 종 모양은 결론이 아니라 검증할 가설이야. 트랙 07에서는 이 점검을 생략했을 때 실제 위험모형이 어떻게 무너지는지 살펴볼 거야.

Code

숨겨진 상관 아래의 CLT·python
import numpy as np
rng = np.random.default_rng(60)

# 상관 아래에서 CLT 가 실패하는 걸 보임.
# N=100 의 고도로 상관된 변수 합 vs N=100 의 독립된 변수 합.
N = 100
M = 10_000

# 독립 draw.
independent = rng.normal(size=(M, N))
sum_indep = independent.sum(axis=1)

# 상관된 draw — 모두 공통 요인을 공유.
common = rng.normal(size=(M, 1))
idiosync = rng.normal(size=(M, N))
correlated = 0.7 * common + 0.3 * idiosync
sum_corr = correlated.sum(axis=1)

# 둘 다 표준화.
def stats(x, label):
    z = (x - x.mean()) / x.std()
    p4 = (np.abs(z) > 4).mean()
    print(f"{label:>25s}: std={x.std():>7.2f}  P(|z|>4)={p4:.4f}")

stats(sum_indep, "독립 (CLT 성립)")
stats(sum_corr, "상관 (CLT 깨짐)")

# 독립 합은 종 같은 P(|z|>4) ~ 0.0001.
# 상관 합의 표준편차는 훨씬 커, 분산이 독립 가정 경계 너머로 누적
# 됐기 때문 — 근데 표준화하면 z 의 종은 여전히 괜찮아 보임.
# 문제는 원시 값: 극단 결과가 독립이 예측한 것보다 훨씬 자주 일어남.

External links

Exercise

독립이라고 가정하기 쉬운 관측 하나를 골라봐. 예를 들면 같은 날 들어온 사이트 요청, 한 뉴스 아래의 댓글, 여러 자산의 일간 수익률이 있어. 공통 원인이 무엇인지 적고, 그 의존성을 무시하면 표준오차를 작게 볼지 크게 볼지 설명해봐.
Hint
같은 뉴스, 장애, 알고리즘 노출, 시장 충격처럼 여러 관측에 동시에 영향을 주는 원인을 찾아봐. 양의 공분산을 빼먹으면 보통 합과 평균의 불확실성을 작게 보게 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.