가설검정은 통계학에서 중요한 개념으로, 데이터를 분석하여 특정 가설이 맞는지 여부를 결정하는 과정입니다. 가설검정은 아래와 같은 핵심 요소들로 구성됩니다.
귀무가설과 대립가설
- 귀무가설
- 대립가설
유의수준과 p-값
- 유의수준
- p-값
t-검정과 z-검정
- t-검정
- z-검정
일원분산분석, 카이제곱검정, 이원분산분석
- 일원분산분석
import pandas as pd
import numpy as np
from scipy import stats
# 생산 방법 3가지에 대하여 품질점수 1~5에 해당하는 샘플을
# 각 10회씩, 총 30개 샘플을 포함하는 모의데이터
# np.random.seed(1)
data = {
'A': np.random.randint(1, 5+1,10),
'B': np.random.randint(1, 5+1,10),
'C': np.random.randint(1, 5+1,10)
}
df = pd.DataFrame(data)
print(df)
>>>
A B C
0 3 3 4
1 2 5 1
2 1 5 3
3 3 2 2
4 5 1 5
5 5 3 3
6 3 5 5
7 4 3 1
8 4 2 2
9 1 3 3
anova_stat, p_val = stats.f_oneway(df['A'], df['B'], df['C'])
print(f"일원 분산 분석 통계치 : {anova_stat}")
print(f"P-Value : {p_val}")
alpha = 0.05
if p_val < alpha:
print("귀무가설 기각")
else:
print("귀무가설 채택")
>>>
일원 분산 분석 통계치 : 0.11371841155234658
P-Value : 0.8929344313337509
귀무가설 채택
- 카이제곱검정
- 이원분산분석

import pandas as pd
import seaborn as sns
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import matplotlib.pyplot as plt
titanic_df = pd.read_csv("./data/Titanic_data.csv")
# 이원 분산 분석 모델 생성
# model = ols('Survived ~ C(Sex) + C(Pclass) + C(Sex)*C(Pclass)', data=titanic_df)
model = ols('Survived ~ C(Sex) + C(Pclass) + C(Sex):C(Pclass)', data=titanic_df)
model = model.fit()
print(model.summary())
>>>
OLS Regression Results
==============================================================================
Dep. Variable: Survived R-squared: 0.394
Model: OLS Adj. R-squared: 0.390
Method: Least Squares F-statistic: 114.9
Date: Fri, 11 Aug 2023 Prob (F-statistic): 1.32e-93
Time: 17:10:43 Log-Likelihood: -399.13
No. Observations: 891 AIC: 810.3
Df Residuals: 885 BIC: 839.0
Df Model: 5
Covariance Type: nonrobust
=================================================================================================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------------------------
Intercept 0.9681 0.039 24.700 0.000 0.891 1.045
C(Sex)[T.male] -0.5992 0.052 -11.490 0.000 -0.702 -0.497
C(Pclass)[T.2] -0.0470 0.059 -0.802 0.423 -0.162 0.068
C(Pclass)[T.3] -0.4681 0.050 -9.290 0.000 -0.567 -0.369
C(Sex)[T.male]:C(Pclass)[T.2] -0.1644 0.077 -2.130 0.033 -0.316 -0.013
C(Sex)[T.male]:C(Pclass)[T.3] 0.2347 0.064 3.648 0.000 0.108 0.361
==============================================================================
Omnibus: 80.766 Durbin-Watson: 1.945
Prob(Omnibus): 0.000 Jarque-Bera (JB): 101.275
Skew: 0.817 Prob(JB): 1.02e-22
Kurtosis: 3.247 Cond. No. 13.5
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
# 이원분산분석 진행
anova_results = anova_lm(model, typ=2)
sns.catplot(data=titanic_df, x='Sex', y='Survived', hue='Pclass', kind='bar')
plt.show()
>>>

가설검정과 다양한 분석 방법은 데이터 분석의 핵심이며, 이를 통해 데이터로부터 의미 있는 정보와 결론을 도출할 수 있습니다. 올바른 가설 설정과 적절한 분석 방법 선택은 데이터 분석의 결과를 신뢰할 수 있는 수준으로 끌어올릴 수 있는 열쇠입니다.
'IT > AI' 카테고리의 다른 글
[통계] Day 3-2 분포 모형에 대한 이해 0 | 2023.08.16 |
---|---|
[통계] Day 3-1 상관 분석 0 | 2023.08.16 |
[통계] Day 2-2 데이터 분석 방법 0 | 2023.08.11 |
[통계] Day 2-1 데이터 형태: 순서형, 이진, 시계열, 공간 0 | 2023.08.11 |