다양한 통계적 검정 방법과 Python 샘플코드 및 분석: 데이터 사이언스의 필수 요소 이해하기 

Posted by

다양한 통계적 검정 방법

데이터 사이언스의 세계에서는 다양한 통계적 방법들이 중요한 역할을 한다. 이러한 방법들은 데이터를 분석하고, 숨겨진 패턴을 발견하며, 의미 있는 결론을 도출하는 데 필수적이다.
또한 귀무 가설(Null Hypothesis)과 대립 가설(Alternative Hypothesis)의 검정을 위해서도 통계적인 방법을 활용하여 유의미한 차이가 있는지 없는지 검토해야 한다.

t-검정부터 카이제곱 검정, ANOVA, 그리고 회귀 분석에 이르기까지 여러 통계적 검정 방법들의 기본 개념을 알아 보고, Python을 사용한 실제 샘플 코드와 그 결과를 분석하는 것까지 살펴보도록 하자.

t-검정(t-test)

  • 목적: 두 집단 간 평균의 차이가 통계적으로 유의미한지를 평가한다.
  • 종류:
    • 독립 표본 t-검정: 두 독립적인 집단 간의 평균을 비교한다.
    • 대응 표본 t-검정: 같은 집단의 전후 차이를 비교한다.
  • 사용: t-검정은 표본 크기가 작고 데이터가 정규 분포를 따를 때 유용하다. t-통계량을 계산하여 이를 t-분포와 비교함으로써 귀무 가설을 기각할지 결정한다.

샘플 코드

from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 샘플 데이터 생성
group1 = np.random.normal(100, 10, 30)
group2 = np.random.normal(90, 10, 30)

# t-검정 수행
t_statistic, p_value = stats.ttest_ind(group1, group2)

# t-검정 결과 시각화
plt.figure(figsize=(8, 5))
sns.histplot(group1, color="blue", kde=True)
sns.histplot(group2, color="orange", kde=True)
plt.title("t-Test: Distribution of Two Groups")
plt.tight_layout()
plt.show()

실행 결과

t-검정의 결과는 t-통계량(t-statistic)과 p-값(p-value)으로 제공된다.

  • t-statistic: 3.89
    t-통계량은 두 집단 간의 평균 차이를 표준 오차로 나눈 값이다.
  • p-value: 0.000262

t-statistic 값이 양수이므로 두번째 그룹의 평균이 첫번째 보다 크며, 두 그룹간의 평균차이가 존재한다 볼 수 있다.
p-value는 0.05보다 작기 때문에 두 집단간의 유의미한 차이가 있다고 해석할 수 있다.


카이제곱 검정(Chi-square Test)

  • 목적: 범주형 변수 간의 독립성을 검정한다.
  • 사용: 관측된 빈도와 기대 빈도 간의 차이를 카이제곱 통계량으로 계산하고, 이를 카이제곱 분포와 비교한다. 통계량이 높을수록 귀무 가설(변수 간 독립)을 기각할 가능성이 높다.

샘플 코드

from scipy.stats import chi2_contingency
import matplotlib.pyplot as plt
import seaborn as sns

# 샘플 데이터 생성
table = [[10, 20, 30], [20, 15, 35]]

# 카이제곱 검정 수행
chi2, p, dof, expected = chi2_contingency(table)

# 카이제곱 검정 결과 시각화
plt.figure(figsize=(8, 5))
sns.barplot(x=["Category 1", "Category 2", "Category 3"], y=np.sum(table, axis=0))
plt.title("Chi-Square Test: Category Frequencies")
plt.tight_layout()
plt.show()

실행 결과

카이 제곱 검정의 결과는 카이제곱 통계량(chi2)과 p-값(p-value), 자유도(dof), 기대빈도(Expected) 값 으로 제공된다.

  • chi2: 3.684
    카이제곱 통계량은 관측된 빈도와 기대 빈도 간의 차이를 수치화 하며, 값이 클수록, 관측된 데이터가 기대 빈도와 더 많이 달라진다. 이는 두 변수 간의 독립성이 떨어질 가능성을 시사한다.
  • p-value: 0.158

chi2 값 3.684는 변수간 일정 수준의 차이가 있음을 나타내지만,
p-value는 0.05보다 크기 때문에 두 집단간의 유의미한 차이가 없다고 해석할 수 있다.


ANOVA(Analysis of Variance)

  • 목적: 세 개 이상의 집단 간 평균의 차이가 통계적으로 유의미한지 평가한다.
  • 사용: 집단 간 및 집단 내 분산을 비교하여 f-통계량을 계산한다. f-통계량이 높으면 집단 간 평균에 유의미한 차이가 있다고 볼 수 있어 귀무 가설을 기각할 수 있다.

샘플 코드

from scipy.stats import f_oneway
import matplotlib.pyplot as plt
import seaborn as sns

# 샘플 데이터 생성
group1 = np.random.normal(100, 10, 30)
group2 = np.random.normal(110, 10, 30)
group3 = np.random.normal(90, 10, 30)

# ANOVA 검정 수행
f_statistic, p_value = f_oneway(group1, group2, group3)

# ANOVA 결과 시각화
plt.figure(figsize=(8, 5))
sns.boxplot(data=[group1, group2, group3])
plt.title("ANOVA: Group Comparisons")
plt.tight_layout()
plt.show()

실행 결과

ANOVA 검정의 결과는 f-통계량(f-statistic)과 p-값(p-value)으로 제공된다.

  • f-statistic: 25.775
    f-통계량은 집단 간 분산과 집단 내 분산의 비율을 나타낸다.
  • p-value: 1.62e-9

f-통계량 값이 25.775라는 것은, 집단 간의 평균 차이가 통계적으로 상당히 크다는 것을 의미하며, 집단 간에 실질적인 평균 차이가 존재할 가능성을 나타낸다.
p-value는 0.05보다 매우 작기 때문에 집단간의 유의미한 차이가 있다고 해석할 수 있다.


회귀 분석(Regression Analysis)

  • 목적: 변수 간의 관계를 평가하고 예측 모델을 구축한다.
  • 사용: 회귀 계수의 유의성을 t-검정 또는 f-검정을 통해 평가한다. 유의미한 회귀 계수는 귀무 가설(계수가 0이라는 가설)을 기각하는 근거가 된다.

샘플 코드

import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns

# 샘플 데이터 생성
data = pd.DataFrame({
    'X1': np.random.rand(100),
    'X2': np.random.rand(100),
    'Y': np.random.rand(100)
})

# 회귀 분석 수행
X = data[['X1', 'X2']]
Y = data['Y']
X = sm.add_constant(X)
model = sm.OLS(Y, X).fit()

# 회귀 결과 시각화
sns.pairplot(data, x_vars=['X1', 'X2'], y_vars='Y', height=4, aspect=1, kind='reg')
plt.suptitle("Regression Analysis: Relationship Between X1, X2 and Y")
plt.tight_layout()
plt.show()

# 회귀 분석 결과 출력
model.summary()

실행 결과

회귀분석 결과는 다양한 값으로 제공된다.

  • R-squared(결정 계수): 0.017
    이는 모델이 종속 변수 Y의 변동성을 약 1.7%만 설명한다는 것을 의미한다.
  • Adj. R-squared(조정된 R-제곱): -0.003
    이 값은 독립 변수의 수를 고려하여 조정된 R-제곱 값이며, 이 값이 낮다는 것은 모델이 데이터를 잘 설명하지 못한다는 것을 나타낸다.
  • f-statistic(f-통계량): 0.8586
    모델의 전반적인 유의성을 평가하는 값으로, 일반적으로 F-통계량이 크면 모델이 유의미하다고 간주한다.
  • Prob(f-statistic)(f-통계량의 p-값): 0.427
    이 값이 0.05보다 크기 때문에 이 모델이 전체적으로 유의미하지 않다는 것을 나타낸다.
  • const(상수항): 60.4978
    p 값이 0.05보다 작으므로 통계적으로 유의미함을 나타낸다.
  • X1: -4.6993
    p 값이 0.05보다 크므로(p = 0.657) 통계적으로 유의미하지 않음을 나타낸다.
  • X2: -13.8479
    p 값이 0.05보다 크므로(p = 0.211) 통계적으로 유의미하지 않음을 나타낸다.
  • Omnibus/Prob(Omnibus): 45.151 / 0.000
    잔차의 정규성 검정 결과, 이 모델의 잔차가 정규 분포를 따르지 않을 가능성이 높음을 나타낸다.
    일반적으로 낮은 Omnibus 값과 높은 Prob(Omnibus) 값은 잔차가 정규 분포를 따른다는 것을 나타낸다.
  • Durbin-Watson: 1.915
    이 값은 잔차의 독립성을 나타내며, 일반적으로 1.5~2.5 사이면 독립으로 간주한다.
  • Jarque-Bera (JB)/Prob(JB): 6.445 / 0.0399
    잔차의 정규성에 대한 추가적인 검정 결과, 이 모델의 잔차가 정규 분포를 따르지 않을 수 있음을 나타낸다.
    Jarque-Bera 값이 크고 Prob(JB) 값이 낮으면(예: 0.05 미만), 잔차가 정규 분포를 따르지 않을 가능성이 높다는 것을 의미한다.
  • Condition Number: 5.62
    다중공선성(multicollinearity)의 존재를 나타내는 지표로 일반적으로 10~30 미만이면 다중공선성 문제가 없다고 간주한다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다