내일배움 본캠프

[내일배움 본캠프] 가설검증(통계)

hyeon-ji 2026. 6. 19. 21:10

☆ To Do List ☆

  • AI에이타니
  • 통계학 기초 챕터 3, 4 수강
  • 머신러닝 기초 1-13까지 수강하기
  • 라이브세션(11:00, 19:30)
  • 공고 찾아보기
  • TIL 작성 및 제출

🤖 에이타니

 

Q. Python에서 시계열 분해(Time Series Decomposition)를 수행하는 코드, 가법 모델을 사용하여 시계열을 Trend + Seasonality + Residual로 분해하고자 할 때, 빈칸에 들어갈 값은?

from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd

# 시계열 데이터 생성
data = pd.Series([100, 120, 130, 110, 105, 125, 135, 115], 
                 index=pd.date_range('2023-01', periods=8, freq='M'))

# 시계열 분해
result = seasonal_decompose(data, model='________', period=4)

 

시계열 분해 모델에는 가법 모델(additive)과 승법 모델(multiplicative) 두 가지가 있습니다. 가법 모델은 시계열을 Trend + Seasonality + Residual로 분해하며, 계절 변동의 크기가 일정할 때 사용한다. 승법 모델은 Trend × Seasonality × Residual로 분해하며, 계절 변동의 크기가 Trend에 비례할 때 사용한다. 따라서 가법 모델을 사용하려면 'additive'를 입력해야 한다.


📊기초통계

● 6Sigma란?

→ 전사적(품질, 생산 뿐만 아니라 구매, 물류, 마케팅 등) 경영혁신활동

→ 정규분포를 따른다는 가정하에 이루어짐

σ수준 불량률(ppm) 품질비용(매출액 대비) 비고
3.4 1% 세계최고 수준
233 5 ~ 10% 우량 수준
6,210 10 ~ 15% 우량 수준
66,807 20 ~ 30% 일반 수준
308,537 30 ~ 40% 일반 수준

 

○ 6Sigma 추진방법

  • D(Define) : 과제 선정, 과제 정의, 과제 승인
  • M(Measure) : 프로젝트 정의, 현수준 파악, 목표 설정, 잠재 X 도출
  • A(Analyze) : 분석 계획, 분석 실시, 핵심 X 도출
  • I(Improve) : 사건계획, 아이디어 도출, 개선 최적화, 개선안 실행
  • C(Control) : 관리계획 수립, 관리 실행, 승인/확산

 

● 공정능력이란?

  • 공정 혹은 프로세스가 얼마나 균일한 품질의 제품 혹은 서비스를 산출할 수 있는지의 능력
  • 공정이 정상적인 관리 상태에 있을 때 그 공정에서 생산되는 제품의 품질 변동이 어느 정도인가를 나타내는 양으로 평가
  • σ수준 = % = ppm = Cp

 

○ 공정능력지수(Cp)

→ 규격의 폭과 공정의 산포를 비교하는 척도

 

해석

  • Cp가 1.0 미만이면 공정이 지나치게 흔들리며 사양에 맞지 않음
  • Cp는 높지만 Cpk가 낮다면? → 공정은 정밀하지만 평균이 한쪽으로 치우침
  • Cp ≈ Cpk → 공정 중심이 사양 중앙에 잘 위치함
  • Cp 또는 Cpk < 1.0: 불량률 높음
  • Cp = 1.33 이상: 적정 수준
  • Cp = 2.0 이상: 식스시그마 수준

 공정 성능 지수(Cpk)

→ 규격중심과 공정평균이 일치하지 않을 경우 사용

 

 해석

  • Cpk > 1.33 → 안정적이고 중심 정렬된 공정
  • Cp > 1.33, Cpk < 1 → 정밀하나 중심이 어긋난 공정

● 측정시스템 분석(MSA;Measurement System Analysis)

 

→ 데이터의 신뢰성을 확보하기 위해 측정시스템을 평가, 검증하는 과정이 필요하다.

→ 개선 대상 프로세스의 현재 능력을 파악하기 위한 데이터 수집에 앞서, 먼저 데이터가 믿을 수 있는지 확인해야 한다.

  • 정확성 : 실제 평균과 측정값의 평균간의 차이를 의미하며, 그 차(bias)가 작을수록 좋다.
  • 안정성 : 시간의 변화에 따은 계측결과의 변이
  • 선형성 : 측정 범위 전체에 있어 측정 시스템의 일관성
  • 반복성 : 한 사람의 측정자가 동일한 측정기로 동일한 대상을 동일한 측정 과정을 사용하여 반복해서 측정할 때 발생하는 산포
  • 재현성 : 두 명 이상의 측정자가 동일한 측정기로 동일 대상을 반복해서 측정할 때 발생하는 평균의 차이

○ Gage R&R : 실세 프로세스의 변동을 파악하기 위해 측정 시스템 변동을 먼저 파악하여 공정 중 발생되는 다른 변동과 분리 하고자 하는, 측정시스템 분석 / 재현성과 반복성을 확인하기 위해 사용되는 분석이다.

 

● 정규화와 표준화의 차이

  • 정규화 : 값을 특정 범위로 변환(0 ~ 1)

  • 표준화 : 평균과 표준편차를 이용하여 변환(평균 0, 표준편차 1)

 

 가설검정 절차

  • 귀무가설(H0) : 일반적으로 과거 이론이나 경험적으로 '참'이라고 믿어지는 가설
  • 대립가설(H1) : 귀무가설과 다른(혹은 상반된) 입장

 

  • 검정통계량 : 귀무가설을 검정하기(채택 or 기각) 위해 사용되는 통계량 
  • 유의수준 : 귀무가설이 참일 때 귀무가설을 기각할 확률(α)
  • 임곗값 or 기각치 : 귀무가설을 기각할지 기각하지 않을지 기준이 되는 값
  • 기각역 : 귀무가설이 기각되는 영역(넓이 α)

 

● 가설검정 종류

  • z-검정 : 모집단의 표준편차를 알고 있고, 표본 수가 충분히 많을 때(n ≥ 30) 사용하는 평균 차이 검정 방법
# 단일표본 z-test
import numpy as np
from scipy.stats import norm

# 샘플 데이터
sample = [50.1, 50.3, 50.2, 50.4, 50.0, 50.5, 50.3, 50.2, 50.1, 50.4,
          50.3, 50.2, 50.5, 50.6, 50.2, 50.1, 50.4, 50.3, 50.2, 50.3,
          50.2, 50.1, 50.0, 50.4, 50.2, 50.1, 50.3, 50.5, 50.1, 50.3,
          50.2, 50.3, 50.4, 50.2, 50.1, 50.0, 50.2, 50.3, 50.4, 50.2]

# 기본 통계
sample_mean = np.mean(sample)
population_mean = 50        # 기준값
population_std = 0.5        # 모집단 표준편차 (알고 있어야 z-test 가능)
n = len(sample)

# Z 검정 통계량 계산
z_stat = (sample_mean - population_mean) / (population_std / np.sqrt(n))
p_value = 2 * (1 - norm.cdf(abs(z_stat)))  # 양측 검정

print(f"Z-statistic: {z_stat:.3f}")
print(f"Two-tailed p-value: {p_value:.4f}")

# p-value < 0.05: 차이가 통계적으로 유의미 → 평균이 기준값과 다르다.
# p-value ≥ 0.05: 차이가 우연일 수 있음 → 평균 차이가 유의하지 않다.
  • t-검정 : 두 집단 간의 평균 차이가 통계적으로 유의미한지 확인하는 검정 방법
# 학생 점수 데이터
scores_method1 = np.random.normal(70, 10, 30)
scores_method2 = np.random.normal(75, 10, 30)

# 독립표본 t검정
t_stat, p_val = stats.ttest_ind(scores_method1, scores_method2)
print(f"T-Statistic: {t_stat}, P-value: {p_val}")
  • 카이제곱 검정 : 범주형 데이터의 표본 분포가 모집단 분포와 일치하는지 검정(적합도 검정)하거나 두 범주형 변수 간의 독립성을 검정(독립성 검정)
# 적합도 검정
observed = [20, 30, 25, 25]
expected = [25, 25, 25, 25]
chi2_stat, p_value = stats.chisquare(observed, f_exp=expected)
print(f"적합도 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")

# 독립성 검정
observed = np.array([[10, 10, 20], [20, 20, 40]])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")

# 성별과 흡연 여부 독립성 검정
observed = np.array([[30, 10], [20, 40]])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat}, p-값: {p_value}")

 

 

해당 가설검정의 오류는 머신러닝의 성능평가 Confusion Matrix부분과 동일하다고 볼 수 있다.

 

  • 제 1종 오류(α) = FN : 실제로는 귀무가설이 옳은데 검정 결과 귀무가설을 기각하는 오류
  • 제 2종 오류(β) = FP : 실제로는 귀무가설이 틀렸는데 검정 결과 귀무가설이 옳은 것으로 판단하는 오류

1-α, 1-β를 크게 할수록 옳은 결정을 할 가능성이 높아진다. But α와 β의 크기는 서로 반대 방향으로 변하고 있으므로, 1-α와 1-β를 동시에 크게 하기에는 현실적으로 불가능하다.

→ 가설의 채택여부가 실제로 미치는 영향을 감안해서 더 중요하다고 판단되는 가설채택에 따른 오류의 확률을 미리 지정된 값 이하로 하여 주는 검정방법을 찾는게 현실적이다.

→ 제 2종 오류의 가능성을 최소화하는 것이 가장 현실적이면서 좋은 통계적 검정법이다.

연구자의 입장에서 보면 귀무가설이 거부되어야할 때 1-β가 커지도록 하는 것이 바람직하며, 1-β를 검정력 이라고 부른다.

 

▶ 가설검증 파이썬 코드

# 기존 약물(A)와 새로운 약물(B) 효과 데이터 생성
A = np.random.normal(50, 10, 100)
B = np.random.normal(55, 10, 100)

# 평균 효과 계산
mean_A = np.mean(A)
mean_B = np.mean(B)

# t-검정 수행
t_stat, p_value = stats.ttest_ind(A, B)

print(f"A 평균 효과: {mean_A}")
print(f"B 평균 효과: {mean_B}")
print(f"t-검정 통계량: {t_stat}")
print(f"p-값: {p_value}")

# t-검정의 p-값 확인 (위 예시에서 계산된 p-값 사용)
print(f"p-값: {p_value}")
if p_value < 0.05:
    print("귀무가설을 기각합니다. 통계적으로 유의미한 차이가 있습니다.")
else:
    print("귀무가설을 기각하지 않습니다. 통계적으로 유의미한 차이가 없습니다.")