신뢰 구간(Confidence Intervals)

신뢰 구간이 뭐지?

통계학에서 신뢰 구간(信賴區間, 영어: confidence interval)은 모수가 어느 범위 안에 있는지를 확률적으로 보여주는 방법이다.
신뢰 구간은 보통 표본에서 산출된 통계와 함께 제공된다. 예를 들어, "신뢰수준 95%에서 투표자의 35% ~ 45%가 A후보를 지지하고 있다."라고 할 때 95%는 신뢰수준이고 35% ~ 45%는 신뢰구간이며 θ는 A후보의 지지율이다.
- 위키백과

신뢰 구간을 쉽게 표현하자면 무언가에 대해서 말할 때 그 무언가의 일부를 보고서 "이 정도면 어지간해선 들어맞겠지" 할 만한 범위이다.

위 예에서는 A 후보의 지지율 신뢰 구간이 35% ~ 45%라고 하는데, 이는 투표 마친 사람들한테 설문조사한 결과를 토대로 실제 A 후보의 지지율 결과가 35% ~ 45% 사이에 있을 거라고 보는 것이다.
그리고 신뢰수준 95%의 의미는 이 말이 진짜로 맞을 확률이 95% 라는 것이다.


신뢰 구간은 어떻게 구하는거지?

아래는 표본 평균을 이용하여 모평균이 들어와 있을 만한 구간, 즉 '신뢰 구간'을 구하는 과정과 이를 Python으로 표현한 것이다.

신뢰 구간은 표본 평균을 기준으로 좌우로 2 × 표준 오차(Standard Error of Mean, SEM)$^1$ 만큼 더하고 뺀 범위이다(신뢰 수준 95% 기준$^2$).

import numpy as np
from scipy import stats  

def  confidence_interval(data, confidence = 0.95):
    """
    주어진 데이터의 표본 평균에 대한 신뢰구간을 계산.
    기본 값으로 t-분포와 양방향 (two-tailed), 95%의 신뢰도를 사용합니다.

    입력 값 :
    data - 여러 개로 이루어진 (list 혹은 numpy 배열) 표본 관측치
    confidence - 신뢰구간을 위한 신뢰도

    반환 되는 값:
    (평균, 하한, 상한구간)으로 이루어진 tuple
    """

    data = np.array(data)
    mean = np.mean(data)
    n = len(data)

    # Standard Error of Mean (https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.sem.html)
    stderr = stats.sem(data)

    # length_of_one_interval
    interval = stderr * stats.t.ppf( (1 + confidence) / 2 , n-1) # ppf : inverse of cdf

    return (mean, mean - interval, mean + interval)

    # cdf -> t 를 넣으면 %
    # ppf -> % 를 넣으면 t

    # 1 + 0.95 / 2 -> 0.975
    # (1 - 0.95) / 2 -> 0.025
np.random.seed(123)  

data = np.random.normal(50, 10, 1000)  
sample = np.random.choice(data, 10)  

confidence_interval(sample)

(44.28501220284126, 37.93312500671013, 50.63689939897239)

# 다른 방법
from scipy.stats import t

# 표본의 크기
n = len(sample)
# 자유도
dof = n-1
# 평균의 평균
mean = np.mean(sample)
# 표본의 표준편차
sample_std = np.std(sample, ddof = 1)
# 표준 오차
std_err = sample_std / n ** 0.5 # sample_std / sqrt(n)

CI = t.interval(.95, dof, loc = mean, scale = std_err) # https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.t.html
print("95% 신뢰구간: ", CI)

95% 신뢰구간: (37.93312500671013, 50.63689939897239)


*1 : 표준 오차란 표본 평균의 표준 편차이며, 구하는 방법은 아래와 같다. $$SEM=\frac{σ}{√n}$$ 여기서 $σ$는 모집단의 표준편차이고 $n$은 표본의 크기이다.
*2 신뢰 수준에 따라 표준 오차에 몇을 곱해주는지가 달라진다. 참고 : Z-Score in Statistics

 

<참고 자료>
신뢰 구간 - 위키백과
신뢰 구간의 의미 - 공돌이의 수학정리노트
신뢰구간 (Confidence Interval) - BioinformaticsAndMe
표준 점수 - 위키백과
scipy.stats.sem - Standard Error of Mean, SEM
scipy.stats.t
Compute a confidence interval from sample data - Stack Overflow

+ Recent posts