z-test는 표본 통계량(평균, 비율 등)이 정규분포를 따른다는 가정 하에, 모집단의 모수와의 차이를 검정하거나 두 집단 간의 차이를 검정하는 가설 검정 기법이다.
표본 수 | 기대 전환률 | 기대 성공 수 | |
---|---|---|---|
1 | 1000 | 0.05 | 50 |
2 | 100 | 0.01 | 1 |
하나의 표본 평균이 어떤 기준 모평균 과 유의하게 다른지를 검정한다.
검정 종류 | 설명 | ||
---|---|---|---|
양측 검정 | 평균 차이 여부 일반 검정 | ||
단측 (우측) | 실험군이 더 높다고 주장 | ||
단측 (좌측) | 실험군이 더 낮다고 주장 |
# 예시: 한 공장에서 생산한 제품의 평균 길이가 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}")
두 독립 집단의 평균이 서로 얼마나 다른지를 검정한다.
검정 종류 | 설명 | ||
---|---|---|---|
양측 검정 | 평균 차이 여부 일반 검정 | ||
단측 (우측) | 실험군이 더 높다고 주장 | ||
단측 (좌측) | 실험군이 더 낮다고 주장 |
# 예시: 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}")
두 집단의 이진비율()을 비교한다.
검정 종류 | 설명 | ||
---|---|---|---|
양측 검정 | 평균 차이 여부 일반 검정 | ||
단측 (우측) | 실험군이 더 높다고 주장 | ||
단측 (좌측) | 실험군이 더 낮다고 주장 |
# 예시: 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
# 귀무가설을 기각하지 못함
해당 - 계산 결과 0.05보다 작을 경우, 전환률이 유의미 하다고 본다. 반대로 0.05보다 클 경우 효과가 없다고 해석한다.