2025년 2학기 계량분석 강의자료

2주차: 확률분포, 표본분포 및 추정

정규확률분포와 표준정규분포

1. 연속확률분포의 이해

  • 연속확률변수: 값이 특정 구간 안에서 무한히 많을 수 있는 변수
    → 예: 키(170.2cm, 170.25cm…), 몸무게, 시간
  • 확률밀도함수 (PDF):
    • 곡선 형태의 그래프
    • 특정 구간의 확률 = 곡선 아래 면적
    • 곡선 전체 면적 = 1 (100%)
👉 즉, "특정 키를 가진 사람의 확률"이 아니라, "키가 **170~175cm 사이일 확률**"처럼 구간으로 해석해야 합니다.

2. 정규확률분포 (Normal Distribution)

  • 그래프 모양: 종(bell) 모양, 좌우 대칭
  • 특징:
    • 평균 = 중앙값 = 최빈값
    • 평균($\mu$): 그래프의 중심 위치
    • 표준편차($\sigma$): 퍼짐의 정도 ($\sigma$가 크면 납작, $\sigma$가 작으면 뾰족)

📌 예시:

우리 반 키 평균: 170cm, 표준편차: 5cm. 대부분 학생들의 키는 170 ± 5cm 근처에 몰려 있습니다.

📈 시각화 예제 (Python)

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm

mu, sigma = 170, 5  # 평균 170, 표준편차 5
x = np.linspace(150, 190, 100)
y = norm.pdf(x, mu, sigma)

plt.plot(x, y)
plt.title("정규분포 (평균=170, 표준편차=5)")
plt.xlabel("키(cm)")
plt.ylabel("확률밀도")
plt.show()

👉 그래프 해석: 평균 170에서 가장 높고, 양쪽으로 갈수록 확률이 낮아집니다.

3. 표준정규분포 (Standard Normal Distribution)

  • 정의: 평균 0, 표준편차 1인 특별한 정규분포
  • 표준화 (Standardization):
    $$ Z = \frac{X - \mu}{\sigma} $$
    • X: 실제 값
    • $\mu$: 평균
    • $\sigma$: 표준편차
    • Z: “평균에서 몇 $\sigma$만큼 떨어져 있는가?”

📌 예시:

시험 평균: 70점, 표준편차: 10점, 한 학생이 85점을 맞으면 $Z = \frac{85 - 70}{10} = 1.5$ → 평균보다 1.5$\sigma$ 위에 있습니다.

📊 시각화 (Python)

mu, sigma = 0, 1  # 표준정규분포
x = np.linspace(-4, 4, 100)
y = norm.pdf(x, mu, sigma)

plt.plot(x, y)
plt.title("표준정규분포 (μ=0, σ=1)")
plt.xlabel("Z 점수")
plt.ylabel("확률밀도")
plt.show()

4. Z-점수 확률 계산 (심화)

  • 개념: Z-점수를 구한 뒤, 표준정규분포표(혹은 함수)를 이용해 확률을 계산합니다.
  • 예제 ①: Z = 1.5 이상일 확률은?
  • 예제 ②: 60점~80점 사이 확률은?

Python 실습 코드

from scipy.stats import norm

# Z=1.5 이상 확률
p1 = 1 - norm.cdf(1.5)  
print("Z=1.5 이상 확률:", round(p1, 4))  # 0.0668

# Z=-1 ~ Z=1 사이 확률
p2 = norm.cdf(1) - norm.cdf(-1)
print("Z=-1 ~ 1 사이 확률:", round(p2, 4))  # 0.6826

표본분포와 중심극한정리

1. 표본의 이용

통계적 추론: 모집단 전체를 다 조사하기 어렵기 때문에, 일부(표본)를 조사하고 이를 근거로 모집단을 추론하는 과정입니다.

  • 모수 (Parameter): 모집단의 특성 (예: 전체 학생의 평균 키 $\mu$, 전체의 표준편차 $\sigma$)
  • 통계량 (Statistic): 표본의 특성 (예: 뽑은 30명의 평균 키 $\bar{x}$, 표본 표준편차 s)
👉 즉, **표본 → 통계량 → 모집단 → 모수 추론**

2. 표본평균의 분포

  • 개념: 같은 크기의 표본을 여러 번 뽑아 각 표본의 평균을 계산하면, 이 값들이 다시 하나의 “분포”를 만듭니다. 이를 **표본평균의 분포**라고 부릅니다.

3. 표본평균의 분포의 특성

  • 표본평균들의 평균 = 모집단 평균($\mu$)
  • 표본평균들의 흩어짐 = 표준오차(SE)
    $$ \sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}} $$

👉 표본 크기 $n$이 클수록 표준오차($\sigma_{\bar{x}}$)가 작아져서 모집단 평균 주위로 더 많이 모이게 됩니다.

4. 중심극한정리 (Central Limit Theorem)

핵심 내용: 모집단이 어떤 모양이든 **표본의 크기 $n \ge 30$ 이면, 표본평균의 분포는 정규분포에 가까워집니다.**

👉 통계학에서 정규분포를 많이 쓰는 이유가 바로 이것입니다. 복잡한 모집단도 표본평균만 보면 “정규분포처럼” 다룰 수 있습니다.

5. Python 실습 예시

import numpy as np
import matplotlib.pyplot as plt

# 모집단: 오른쪽으로 치우친 분포 (지수분포)
population = np.random.exponential(scale=2, size=100000)

# 표본평균 분포 시뮬레이션
sample_means = []
n = 30  # 표본 크기
for _ in range(1000):
    sample = np.random.choice(population, n)
    sample_means.append(np.mean(sample))

# 그래프
plt.figure(figsize=(12,5))

plt.subplot(1,2,1)
plt.hist(population, bins=50, color='lightblue', edgecolor='black')
plt.title("모집단 분포 (치우침)")

plt.subplot(1,2,2)
plt.hist(sample_means, bins=30, color='salmon', edgecolor='black')
plt.title("표본평균의 분포 (n=30, 정규분포 형태)")

plt.show()

👉 결과: 모집단은 한쪽으로 치우쳐 있어도, 표본평균의 분포는 종 모양이 됩니다.

🎲 실습: 주사위 평균과 중심극한정리

1. 활동 목표

주사위를 여러 번 던져 나온 값들의 **평균**을 구하고, 이를 여러 번 반복했을 때 평균들이 어떤 분포를 만드는지 직접 확인하여 “표본평균의 분포가 정규분포에 가까워진다”는 사실을 체험해 보는 실습입니다.

2. 손으로 하는 활동

  • 학생들에게 **주사위 3개씩** 나눠줍니다.
  • **3번 던져 나온 눈의 평균**을 기록합니다. (예: 4, 2, 5 → 평균 = 3.67)
  • 이 과정을 **10명 이상이 반복**해 평균값을 칠판에 적습니다.
  • 결과를 모아 보면, 값들이 **가운데 근처(약 3.5)**에 몰려 있음을 확인할 수 있습니다.

3. Python 시뮬레이션 예제

import numpy as np
import matplotlib.pyplot as plt

# 모집단: 주사위 (1~6 균등 분포)
population = [1, 2, 3, 4, 5, 6]

# 표본 크기 (던진 횟수)
n = 5  

# 표본평균 여러 번 구하기
sample_means = []
for _ in range(1000):  # 1000번 반복
    sample = np.random.choice(population, n)
    sample_means.append(np.mean(sample))

# 히스토그램 시각화
plt.hist(sample_means, bins=20, color='orange', edgecolor='black')
plt.title(f"주사위 평균 분포 (표본 크기 n={n})")
plt.xlabel("평균값")
plt.ylabel("빈도")
plt.show()

4. 실습 결과 해석

  • **n=1 (한 번 던짐):** 균등 분포 (1~6이 고르게 나옴)
  • **n=5 (다섯 번 평균):** 가운데(3.5) 근처에 몰린 종 모양
  • **n=30 (서른 번 평균):** 거의 완벽한 정규분포
👉 주사위 눈 자체는 균등분포지만, 평균을 반복하면 **정규분포**에 가까워집니다. 이것이 바로 **중심극한정리**입니다.

추정 (Estimation)

1. 추정의 개념

  • 정의: 표본을 이용해 **모집단의 특성(모수)**을 알아내는 과정
👉 현실에서는 “전체”를 다 알기 힘들기 때문에, **추정**이 필요합니다.

2. 점추정 (Point Estimation)

정의: 모집단의 값을 **하나의 수치**로 추정하는 방법

  • 좋은 추정량의 기준: 불편성, 효율성, 일치성, 충족성

3. 구간추정 (Interval Estimation)

정의: 모수가 들어 있을 만한 **범위(구간)**를 제시하는 방법

  • 신뢰구간 (Confidence Interval, CI): 점추정값 ± 오차한계
  • 공식:
    $$ \bar{x} \pm Z_{\alpha/2} \cdot \frac{\sigma}{\sqrt{n}} $$

4. Python 실습 예제

📌 시나리오:

한 공장에서 전구 100개를 뽑아 평균 수명을 조사했더니 **2000시간, 표준편차 100시간**이 나왔습니다. 전체 전구 평균 수명($\mu$)은 몇일까요?

import scipy.stats as st
import numpy as np

# 데이터
sample_mean = 2000    # 표본 평균
sample_std = 100      # 모집단 표준편차 (알고 있다고 가정)
sample_size = 100     # 표본 크기
confidence_level = 0.95

# 표준오차 계산
standard_error = sample_std / np.sqrt(sample_size)

# 95% 신뢰수준 Z값
z_score = st.norm.ppf(1 - (1 - confidence_level) / 2)

# 신뢰구간 계산
margin_of_error = z_score * standard_error
confidence_interval = (sample_mean - margin_of_error, sample_mean + margin_of_error)

print(f"95% 신뢰구간: {confidence_interval}")

5. 결과 해석

출력: (1980.4, 2019.6)

👉 의미: 공장의 전구 평균 수명은 **95% 확률로 1980.4시간 ~ 2019.6시간 사이**에 있을 것입니다.

6. 실제 사례: 여론조사와 오차범위

신문이나 뉴스에서 자주 나오는 문장 👇

“이번 여론조사는 전국 성인 1,000명을 대상으로 실시했으며, 표본오차는 95% 신뢰수준에서 ±3.1%p입니다.”

(1) 이 말의 의미는?

오차범위 ±3.1%p: 조사 결과 A후보 지지율이 45%라고 하면, 모집단(전체 국민)의 실제 지지율은 **약 41.9% ~ 48.1%** 범위에 있을 가능성이 큽니다.

(2) Python으로 오차범위 계산하기

import numpy as np
import scipy.stats as st

# 여론조사 설정
p = 0.45          # 지지율 45%
n = 1000          # 표본 크기 1000명
confidence = 0.95 # 신뢰수준 95%

# 표준오차
se = np.sqrt(p*(1-p)/n)

# Z값
z = st.norm.ppf(1 - (1-confidence)/2)

# 오차범위
margin = z * se
ci = (p - margin, p + margin)

print(f"95% 신뢰구간: {ci[0]*100:.1f}% ~ {ci[1]*100:.1f}%")
print(f"오차범위: ±{margin*100:.1f}%p")