Data Analysis

중심 극한 정리 (Central Limit Theorem, CLT)

Balang 2025. 5. 27. 09:31
728x90

모든 데이터 분석은 통계에서 출발합니다.

통계는 기본적으로 추론(Inference)을 통해 샘플 데이터를 발생 시킨 실제 세계(Poplation)를 설명하는 과정으로

이것은 통계의 본지인 바로 데이터로부터 의미를 찾는 것입니다.

 

실제 데이터를 보면 분포가 들쭉날쭉합니다.

예를 들어, 연봉 데이터는 오른쪽으로 긴 꼬리를 가진 분포(비대칭), 

학생 성적은 중앙값 근처에 몰려있는 분포일 수 있습니다.

 

그런데도 우리는 평균을 구하고, 신뢰구간을 설정하고, 통계적 검정을 합니다.

평균이 정규분포를 따른다는 전제를 대체 왜 믿을 수 있는 걸까요?

 

중심 극한 정리(CLT)가 무엇인가?

중심 극한 정리(Central Limit Theorem)란?

  • 표본의 크기가 충분히 크다면, 그 표본들의 평균은 원래 분포와 관계없이 정규분포에 가까워진다.

즉, 원래 데이터 분포가 정규분포가 아니더라도,

여러 번 샘픔을 뽑아 그 평균을 구하면,

그 평균들의 분포는 정규분포를 따른다는 것이 핵심입니다.

 

이론적 정의 

  • 모집단이 어떤 분포를 따르든 상관 없음
  • 크기 n인 표본을 여러 번 뽑아 그 표본 평균을 구함
  • 이 평균들의 분포는 정규분포에 수렴
  • 조건: 표본 크기 n >= 30 이면 일반적으로 충분

균일분포(uniform distribution)로 설명한 CLT

이게 왜 중요하냐면 통계추론의 전체 즉, 평균에 대한 신뢰구간, t-검정 등은 정규분포 가장을 기반

또한 실제 분포가 정규가 아니어도 사용이 가능합니다.

데이터가 왜곡돼도 평균 분포만 정규화되면 추론이 가능합니다.

마지막은 소표본 분석을 가능하게 합니다.

전체 데이터를 몰라도 반복 샘플로 분석이 가능합니다.

 

 

CLT가 중요한 이유

이유 설명
통계 추론의 전제 평균에 대한 신뢰구간, t-검정 등은 정규분포 가정 기반
실제 분포가 정규가 아니어도 사용 가능 데이터가 왜곡돼도 평균 분포만 정규화되면 추론 가능
소표본 분석을 가능하게 함 전체 데이터를 몰라도 반복 샘플로 분석 가능

 

그럼 실제로 python을 활용해서 CLT를 직접 확인해보겠습니다.

예시는 비대칭 분포(지수분포)를 사용해 CLT를 시각화하는 것입니다.

 

import numpy as np
import matplotlib.pyplot as plt

# 1. 비정규분포: 지수분포에서 모집단 생성
population = np.random.exponential(scale=2.0, size=100000)

# 2. 다양한 크기의 표본 평균 분포를 시뮬레이션
sample_means_5 = [np.mean(np.random.choice(population, 5)) for _ in range(1000)]
sample_means_30 = [np.mean(np.random.choice(population, 30)) for _ in range(1000)]
sample_means_100 = [np.mean(np.random.choice(population, 100)) for _ in range(1000)]

# 3. 시각화
plt.figure(figsize=(12, 6))

plt.subplot(1, 3, 1)
plt.hist(sample_means_5, bins=30, color='skyblue', edgecolor='black')
plt.title("표본 크기 = 5")

plt.subplot(1, 3, 2)
plt.hist(sample_means_30, bins=30, color='salmon', edgecolor='black')
plt.title("표본 크기 = 30")

plt.subplot(1, 3, 3)
plt.hist(sample_means_100, bins=30, color='lightgreen', edgecolor='black')
plt.title("표본 크기 = 100")

plt.suptitle("중심 극한 정리 시뮬레이션 (CLT)")
plt.tight_layout()
plt.show()

 

 

시뮬레이션 결과를 보게 되면 표본 크기가 5인 것은 평균 분포 형태가 약간 왼쪽으로 치우친걸 확인할 수 있습니다.

이는 분산이 크고 표본 수가 작아 왜도(비대칭)이 유지된것입니다.

30의 경우에는 점점 정규분포와 유사해지고 중심 극한 정리 즉, CLT 성립이 시작됩니다.

100의 경우에는 정규분포에 가깝고 안정적인 평균 분포를 생성하고 있습니다.

 

그럼 좀 더 실무적인 예시를 통해 중심 극한 정리 (CLT)를 확인해보겠습니다.

CLT를 활용한 평균 클릭률 차이의 통계적 검정 입니다.

 

문제를 정의하면 두 광고 배너 중 어떤 것이 더 효과적인가?

광고 실험을 위해 다음과 같은 A/B 테스트를 진행했다고 가정을 하겠습니다.

그룹 노출 수 (n) 클릭 수 (k) 클릭률 (CTR)

그룹 노출 수 (n) 클릭 수 (k) 클릭률(CTR)
A 1000 80 0.08
B 1000 95 0.095

문제: B 그룹의 클릭률이 더 높아 보이지만,
이게 우연의 결과인지, 아니면 실제로 효과가 있는지를 판단하려면
통계적 추론이 필요합니다. 바로 여기서 중심 극한 정리가 핵심 역할을 합니다.

 

CLT로 클릭률 차이를 검정하는 원리는 다음과 같습니다.

  • 클릭률(CTR)은 이항 분로를 따릅니다.
  • 이항 분포는 정규분포가 아니지만, 표본이 충분히 크다면 평균은 정규분포에 가까워집니다. (CLT)
  • 따라서 두 그룹의 평균 클릭률 차이를 정규분포 기반 검정(Z-test)으로 비교할 수 있습니다.

클릭률 차이에 대해 Z-test수행을 한 코드입니다.

import numpy as np
from scipy.stats import norm

# 그룹 A
n_a = 1000
clicks_a = 80
p_a = clicks_a / n_a

# 그룹 B
n_b = 1000
clicks_b = 95
p_b = clicks_b / n_b

# 1. 두 비율의 차이
diff = p_b - p_a

# 2. 표준 오차 (Standard Error) 계산
se = np.sqrt((p_a * (1 - p_a)) / n_a + (p_b * (1 - p_b)) / n_b)

# 3. Z 값 계산
z = diff / se

# 4. p-value 계산 (단측 또는 양측 검정)
p_value = 2 * (1 - norm.cdf(abs(z)))

print(f"그룹 A 클릭률: {p_a:.4f}, 그룹 B 클릭률: {p_b:.4f}")
print(f"차이: {diff:.4f}, 표준오차: {se:.4f}, Z-score: {z:.2f}")
print(f"p-value: {p_value:.4f}")


"""
그룹 A 클릭률: 0.0800, 그룹 B 클릭률: 0.0950
차이: 0.0150, 표준오차: 0.0126, Z-score: 1.19
p-value: 0.2351
"""

 

위 결과를 해석해보면

p-value가 0.05보다 크므로 두 그룹의 차이는 통계적으로 유의하지 않습니다.

즉, B 그룹 클릭률이 조금 높아 보이지만 단순한 우연일 가능성이 있습니다.

 

그럼 이제는 정규분포 기반 차이 검정 시각화를 해보겠습니다.

import matplotlib.pyplot as plt

x = np.linspace(-4, 4, 1000)
y = norm.pdf(x, 0, 1)

plt.plot(x, y, label="Standard Normal Curve")
plt.axvline(z, color='red', linestyle='--', label=f'Z = {z:.2f}')
plt.fill_between(x, y, where=(x > z), color='red', alpha=0.3, label="p-value 영역")
plt.fill_between(x, y, where=(x < -z), color='red', alpha=0.3)

plt.title("Z-Test: 두 그룹의 클릭률 차이 검정")
plt.legend()
plt.xlabel("Z-Score")
plt.ylabel("Probability Density")
plt.grid(True)
plt.show()

 

여기서 CLT가 어떻게 쓰였는지 정리해보면

요소 설명
각 그룹의 클릭 수는 이항 분포 개별 사용자의 클릭은 0 또는 1
CLT에 의해 평균 클릭률은 정규분포로 근사 가능 n이 충분히 크기 때문에
Z-검정은 정규분포 가정을 기반으로 동작 중심 극한 정리가 있어야 가능

 

정리해보면 CLT 덕분에 정규분포 기반의 평균 비교기 가능해졌고,

이를 통해 A/B 테스트 결과의 통계적 유의성을 평가할 수 있습니다.

 

표본 크기가 충분히 클 것, 독립적인 샘플일 것 이라는 CLT 전제는 항상 확인해야 합니다.

 

중심 극한 정리(CLT)의 오해

 

  • 모집단 분포가 정규라는 뜻 아님 → 정규는 “표본평균의 분포”에만 적용
  • 표본이 너무 작으면 CLT 적용 불가 → 일반적으로 n ≥ 30 이상 권장
  • 표본이 독립적이어야 함 → 편향된 샘플링 금지
  • 분산이 너무 크면 수렴 속도 느림 → 데이터 스케일 주의

 

중심 극한 정리(CLT)는 "데이터 분포가 정규가 아니어도 평균은 정규에 가까워진다" 는 매우 강력한 원리입니다.

이를 통해 대부분의 통계 추론 기법이 적용 가능해지고 실제 데이터에서도 평균값 분석 시 CLT가 통계적 근거를 제공합니다.

 

참고자료

 

 

728x90
반응형