z-test

Seohyeon Park·2025년 5월 7일
0

Intro.

z-test는 표본 통계량(평균, 비율 등)이 정규분포를 따른다는 가정 하에, 모집단의 모수와의 차이를 검정하거나 두 집단 간의 차이를 검정하는 가설 검정 기법이다.

z-test 가정.

  • 정규성 (Normality) : 모집단이 정규 분포를 따른다고 가정한다. 또는 표본 수가 충분히 크다면 (n30n \ge 30), “중심극한정리”에 의해 정규 분포에 근사한다.
  • 독립성 (Independence) : 각 관측치는 서로 독립적이어야 한다.
  • 모집단의 표준편차 σ\sigma를 알고 있음 : 모집단의 표준편차가 필요하다. 하지만 실제로 모집단의 표준편차를 정확히 아는 경우는 드물다. 대부분에 실무에서는 nn이 충분히 크다면, 표본 표준편차 sσs \approx \sigma로 근사하여 사용한다.
  • 이항 비율이 정규분포에 근사해야 함 - 비율검정 시 :
    np5,n(1p)5np \ge 5, n(1-p) \ge 5
    위 식을 만족 시킬수 있어야 한다. 예를 들어 아래 표와 같을 때, 1의 경우 위 식을 만족하지만, 아래의 경우 부족한 것을 볼 수 있다.
    표본 수 nn기대 전환률 pp기대 성공 수 npnp
    110000.0550
    21000.011

z-test 종류.

1. 단일표본 z-test

하나의 표본 평균이 어떤 기준 모평균 μ0\mu_0과 유의하게 다른지를 검정한다.

검정 종류H0H_0H1H_1설명
양측 검정μ=μ0\mu=\mu_0μμ0\mu \ne \mu_0평균 차이 여부 일반 검정
단측 (우측)μμ0\mu \le \mu_0μ>μ0\mu > \mu_0실험군이 더 높다고 주장
단측 (좌측)μμ0\mu \ge \mu_0μ<μ0\mu < \mu_0실험군이 더 낮다고 주장
Z=xˉμ0σ/nZ=\frac{\bar{x}-\mu_0}{\sigma/\sqrt{n}}
  • xˉ\bar{x} : 표본 평균
  • μ0\mu_0 : 기준 모평균
  • σ\sigma : 모집단의 표준편차
  • nn : 표본 크기
# 예시: 한 공장에서 생산한 제품의 평균 길이가 100mm 이상인지 검정
# 모집단의 표준편차 = 5라 가정

import scipy.stats as stats
import numpy as np

# 입력값
mu_0 = 100
sigma = 5
sample = np.array([101.3, 100.8, 101.5, 101.0, 101.2])
n = len(sample)
x_bar = np.mean(sample)

# z-test 수동 계산
z = (x_bar - mu_0) / (sigma / np.sqrt(n))
p = 2 * (1 - stats.norm.cdf(abs(z)))  # 양측 검정

print(f"Z = {z:.3f}, p-value = {p:.4f}")

2. 두 평균 z-test

두 독립 집단의 평균이 서로 얼마나 다른지를 검정한다.

검정 종류H0H_0H1H_1설명
양측 검정μ1=μ2\mu_1=\mu_2μ1μ2\mu_1 \ne \mu_2평균 차이 여부 일반 검정
단측 (우측)μ1μ2\mu_1 \le \mu_2μ1>μ2\mu_1 > \mu_2실험군이 더 높다고 주장
단측 (좌측)μ1μ2\mu_1 \ge \mu_2μ1<μ2\mu_1 < \mu_2실험군이 더 낮다고 주장
Z=x1ˉx2ˉσ12n1+σ22n2Z=\frac{\bar{x_1}-\bar{x_2}}{\sqrt{\frac{\sigma_1^2}{n_1}+\frac{\sigma_2^2}{n_2}}}
  • x1ˉ,x2ˉ\bar{x_1}, \bar{x_2} : 각 집단의 표본 평균
  • σ1,σ2\sigma_1, \sigma_2 : 각 모집단의 표준편차
  • n1,n2n_1,n_2 : 각 집단의 표본 크기
# 예시: A,B 두 공장 라인의 차이를 검정
# A라인의 모집단 표준편차 = 4, B라인의 모집단 표준편차 = 3.5라 가정

import scipy.stats as stats
import numpy as np

mu1, sigma1, n1 = 100.0, 4.0, 40
mu2, sigma2, n2 = 98.7, 3.5, 35

z = (mu1 - mu2) / np.sqrt(sigma1**2 / n1 + sigma2**2 / n2)
p = 2 * (1 - stats.norm.cdf(abs(z)))

print(f"Z = {z:.3f}, p-value = {p:.4f}")

3. 두 비율 z-test

두 집단의 이진비율(pp)을 비교한다.

검정 종류H0H_0H1H_1설명
양측 검정p1=p2p_1=p_2p1p2p_1 \ne p_2평균 차이 여부 일반 검정
단측 (우측)p1p2p_1 \le p_2p1>p2p_1 > p_2실험군이 더 높다고 주장
단측 (좌측)p1p2p_1 \ge p_2p1<p2p_1 < p_2실험군이 더 낮다고 주장
Z=p1p2p(1p)(1n1+1n2),p1=x1n1,p2=x1n1,p=x1+x2n1+n2Z=\frac{p_1-p_2}{\sqrt{p(1-p)(\frac{1}{n_1}+\frac{1}{n_2})}},\\ p_1=\frac{x_1}{n_1},\quad p_2=\frac{x_1}{n_1},\quad p=\frac{x_1+x_2}{n_1+n_2}
# 예시: A,B 그룹의 전환율 차이 (A/B Test)

from statsmodels.stats.proportion import proportions_ztest

success = [50, 65]
nobs = [1000, 1000]

z_stat, p_val = proportions_ztest(success, nobs)

print(f"Z = {z_stat:.3f}, p-value = {p_val:.4f}")

# 결과: Z = -1.441, p-value = 0.1496
# 귀무가설을 기각하지 못함

해당 pp - valuevalue 계산 결과 0.05보다 작을 경우, 전환률이 유의미 하다고 본다. 반대로 0.05보다 클 경우 효과가 없다고 해석한다.

profile
카페에서 한줄 한줄

0개의 댓글