신뢰구간과 표본 크기: Z·t 분포로 구간추정 설계하기

신뢰구간의 Z·t 분포 선택, 신뢰수준과 오차한계, 평균·비율의 표본 크기 산정 및 유한모집단 보정을 정리한다.

2026-08-14 · 최초 발행 2024-04-29

점추정은 하나의 값을 제시하지만, 그 값이 얼마나 불확실한지는 말해주지 않는다. 구간추정(Interval Estimation)은 평균이나 비율 같은 모집단 모수가 있을 법한 범위를 신뢰구간으로 나타내어, 추정의 정밀도와 신뢰도를 함께 다룬다.

추정값 주변의 불확실성을 구간으로 표현하는 법

신뢰구간(CI)은 일반적으로 추정치에 허용오차, 즉 오차한계(Margin of Error)를 더하고 빼는 형태다. 동일한 절차를 무한히 반복했을 때 생성된 구간 가운데 실제 모수를 포함하는 비율이 신뢰수준(1-α)이다. 90%, 95%, 99%가 흔히 쓰이며, 양측 구간에서는 α를 양쪽에 α/2씩 나눈다.

임계값은 Z*{α/2} 또는 t*{α/2, df}로 두고, 표준오차(SE)는 추정량의 표준편차로 계산한다. 평균에서는 σ/√n 또는 s/√n, 비율에서는 √(p(1-p)/n)을 사용한다.

대표적인 구간은 다음과 같다.

  • 평균(σ 알려짐): CI = x̄ ± Z*{α/2} · (σ/√n)
  • 평균(σ 미지, 정규/근사정규): CI = x̄ ± t*{α/2, n-1} · (s/√n)
  • 비율: CI = p̂ ± Z_{α/2} · √(p̂(1-p̂)/n)

모분산 정보가 Z와 t의 선택을 가른다

모분산 σ를 알고 있거나 표본 크기 n이 매우 크고 분포가 근사정규라면 Z-분포를 적용하기 적합하다. 임계값이 안정적이고 계산이 단순하다는 장점이 있다.

반대로 σ를 모르는 상태에서 n이 작거나 정규성 가정이 중요한 경우에는 t-분포를 사용한다. 자유도 df=n-1을 반영하므로 꼬리가 더 두꺼워지고, 결과적으로 보수적인 구간이 만들어진다.

구분 적용 조건 성능(정확성) 확장성(샘플 크기 민감도) 일관성(가정 위반 민감도) 운영 편의
Z-분포 σ 알려짐 또는 n 큼, 근사정규 성립 큰 표본에서 구간 폭 최소화 n 증가 시 빠르게 수렴 비정규·이탈값에 민감 임계값 고정, 계산 용이
t-분포 σ 미지, n 작음, 정규성 중요 소표본에서 보수적 구간 제공 df 증가 시 Z에 수렴 정규성 위반 시 신뢰수준 왜곡 가능 임계값 df 의존, 약간 복잡

소표본의 비정규 데이터에는 부트스트랩 CI 같은 대안을 함께 검토할 수 있다.

신뢰수준과 오차한계가 만드는 설계 제약

신뢰수준을 높이면 임계값도 커지고 구간 폭도 넓어진다. 95%에서 Z=1.96, 99%에서 Z=2.576이며, 구간 폭 증가율은 약 (2.576/1.96)^2 ≈ 1.73배다. 신뢰수준은 90~99% 범위에서 규제와 리스크 허용도, 의사결정의 임계손실을 고려해 정한다.

표본 크기 n이 커질수록 표준오차는 작아져 구간이 좁아진다. 오차한계 E는 대략 Z·SE에 비례하고, 표본 수는 n ∝ 1/E^2 관계를 따른다. 따라서 표본을 늘리는 비용뿐 아니라 공정 안정화, 군집·층화 설계로 분산을 줄이는 방법도 함께 비교해야 한다.

평균에서 σ를 알고 있을 때 필요한 표본 크기는 다음과 같다.

n = (Z\_{α/2}·σ/E)^2

σ를 모르면 파일럿의 s로 대체하거나 보수적인 σ 가정을 사용한다. 비율의 표본 크기는 다음 식으로 계산한다.

n = Z\_{α/2}^2 · p(1-p) / E^2

p를 모를 때는 보수적으로 p=0.5를 적용해 최대 n을 산출한다.

계산부터 가정 점검까지 이어지는 흐름

평균비율σ 알려짐σ 미지아니오만족위반입력: 신뢰수준(1-α), 허용오차E, 데이터유형(평균/비율), σ또는 s 추정, 표본 한도/예산,모집단 크기 N(옵션)데이터 유형σ 정보Z 임계값 선택 n 계산: n =Z^2·p(1-p)/E^2Z 임계값 선택 n 계산: n =(Z·σ/E)^2t 임계값 근사(Z 초기)로 n 산정 파일럿 s 반영 재계산표본 한도 초과?트레이드오프: E 완화 또는신뢰수준 하향, 층화/군집설계로 분산 절감분포 가정 확인(정규성/독립성)CI 계산: 평균은 Z/t, 비율은 Z기반대안: 변환/부트스트랩/비모수CI출력: 신뢰구간, 필요 n, 가정체크리스트

소표본이거나 데이터가 비정규적이면 정규성 진단(Q-Q plot, Shapiro-Wilk)을 수행한다. 가정이 맞지 않을 때는 변환, 부트스트랩, 비모수 CI를 고려한다. 이탈값의 영향을 낮추려면 절사평균, Huber 같은 로버스트 추정과 품질관리 루프를 적용할 수 있다.

평균 두께를 추정하는 경우

제조 공정의 평균 두께를 추정한다고 하자. n=25, x̄=10.2mm, s=0.8mm, 95% CI, t\_{0.975,24}≈2.064라는 조건에서는 표준오차가 SE = s/√n = 0.8/5 = 0.16이다.

오차한계는 E = 2.064·0.16 ≈ 0.330이고, 신뢰구간은 10.2 ± 0.330 → (9.870, 10.530)이 된다.

목표 오차한계를 E=0.20mm로 두고 σ≈0.8을 가정해 표본 크기를 설계하면 다음과 같다.

n = (1.96·0.8/0.20)^2 = (1.568/0.20)^2 = 7.84^2 ≈ 61.47 → 62 표본 필요

전환율의 신뢰구간과 표본 수

이항 비율에서 95% 신뢰수준, E=0.03, p≈0.30을 목표로 하면 필요한 표본 수는 다음과 같다.

n = 1.96^2·0.3·0.7/0.03^2
= 3.8416·0.21/0.0009 ≈ 0.806736/0.0009 ≈ 896.37 → 897

n=1000, p̂=0.32의 관측치를 기반으로 하면 표준오차는 SE = √(0.32·0.68/1000) ≈ √0.0002176 ≈ 0.01475다. 오차한계는 E = 1.96·0.01475 ≈ 0.0289이며, 신뢰구간은 0.32 ± 0.0289 → (0.291, 0.349)이다.

모집단이 유한할 때의 보정

유한모집단에서는 기본 표본 수 n0을 구한 뒤 FPC를 적용할 수 있다.

n_adj = (N·n0)/(N-1+n0)

N이 작을수록 비용 절감 효과가 있다. 예를 들어 N=5000, n0=897이면 n_adj ≈ 5000·897/(4999+897)=4,485,000/5,896≈760.6 → 761이다.

표본 크기를 2배로 늘리면 오차한계는 약 1/√2 배로 감소한다. 95%에서 99%로 신뢰수준을 높이면 n은 약 1.73배 증가한다. 신뢰구간 설계는 이 비용 변화와 품질·리스크 기준을 함께 판단하는 일이다.

파일럿 스터디로 s 또는 p의 추정 정밀도를 확보하면 과대·과소설계를 줄일 수 있다. 신뢰수준, 오차한계, 표본 비용의 균형점을 찾고 단계적 샘플링(Adaptive) 전략을 적용할 수 있다. 정규성·독립성 가정이 위반되면 부트스트랩, Wilson/Agresti–Coull 비율 CI를 검토한다. 계산이 단순하다는 이유로 Z를 택하기보다 t 적용 요건을 먼저 확인해야 한다.

Python과 SciPy로 계산하기

전제조건: Python 3.10+, numpy>=1.23, scipy>=1.10

# pip install numpy scipy
import math
from scipy import stats

def ci_mean_known_sigma(xbar, sigma, n, alpha=0.05):
    z = stats.norm.ppf(1 - alpha/2)
    se = sigma / math.sqrt(n)
    E = z * se
    return (xbar - E, xbar + E), E

def ci_mean_unknown_sigma(xbar, s, n, alpha=0.05):
    t = stats.t.ppf(1 - alpha/2, df=n-1)
    se = s / math.sqrt(n)
    E = t * se
    return (xbar - E, xbar + E), E

def ci_proportion(phat, n, alpha=0.05):
    z = stats.norm.ppf(1 - alpha/2)
    se = math.sqrt(phat * (1 - phat) / n)
    E = z * se
    return (phat - E, phat + E), E

def n_for_mean(E, sigma, alpha=0.05):
    z = stats.norm.ppf(1 - alpha/2)
    return math.ceil((z * sigma / E) ** 2)

def n_for_proportion(E, p=0.5, alpha=0.05):
    z = stats.norm.ppf(1 - alpha/2)
    return math.ceil((z**2 * p * (1 - p)) / (E**2))

# 사용 예
ci1, E1 = ci_mean_unknown_sigma(10.2, 0.8, 25, alpha=0.05)   # (9.87, 10.53) 근사
n_needed = n_for_mean(0.20, sigma=0.8, alpha=0.05)           # 62
ci2, E2 = ci_proportion(0.32, 1000, alpha=0.05)              # (0.291, 0.349) 근사
n_prop = n_for_proportion(0.03, p=0.3, alpha=0.05)           # 897
print(ci1, E1, n_needed, ci2, E2, n_prop)
구간추정신뢰구간표본 크기통계Z분포t분포