t-test
t-test란?
- t-test는 2개 집단의 평균이 서로 같은지 여부를 판단할때 사용
- 3개 이상의 집단간 평균 비교시 ANOVA 사용
- t-test는 두 집단 내 변화량을 고려하여 두 집단 간
평균이 통계적으로 유의미한 차이를 가지는지 검증
- 귀무가설(H0): 두 집단 간 평균이 같다
- 대립가설(H1): 두 집단 간 평균이 다르다.
- 두 집단간 평균의 차이가 작을 수록, 두 집단은 유사하다
- t-test는 데이터가 독립성, 정규성 및 등분산성등 3가지 조건을 만족해야 한다.
- 정규성은 데이터의 모집단이 정규분포하고, 데이터 크기가 30을 넘으면 생략 할 수도 있다.
- stats.shapiro()를 통해 검정
- 귀무가설(H0): 데이터가 정규분포 한다.
그렇기 때문에 유의확률이 0.05보다 커야한다.
- 등분산 검정은 stats.levene()를 통해 검점
- 귀무가설(H0): 두 집단의 분산이 같다.
그렇기 때문에 유의확률이 0.05보다 커야한다. - 등분산 가정 만족 못할시 stats.ttest_ind()시 var_equal인자에 FALSE를 할당
- 귀무가설(H0): 두 집단의 분산이 같다.
- 독립성 조건은 데이터를 수집할시에 분석가가 판단 할 수 있다.
- 만족 못 할시 대응 2표본 t-검정 수행
df = pd.read_csv('../data/preprocessed.csv',index_col=0)
df_0 = df.loc[df['is_canceled']==0,['lead_time','adr','days_in_waiting_list','total_of_special_requests']].copy()
df_1 = df.loc[df['is_canceled']==1,['lead_time','adr','days_in_waiting_list','total_of_special_requests']].copy()
def t_test(x,y):
lresult=stats.levene(x,y)
print('LeveneResult(F):{:.3f}\np-value:{:.3f}'.format(lresult.statistic,lresult.pvalue))
if round(lresult.pvalue,2) < 0.05:
result = stats.ttest_ind(x,y,equal_var=False)
else:
result = stats.ttest_ind(x,y,equal_var=True)
print('t-testResult(F):{:.3f}\np-value:{:.3f}'.format(result.statistic,result.pvalue))
col_lst = ['lead_time','adr','days_in_waiting_list','total_of_special_requests']
for i in col_lst:
print(i)
t_test(df_0[i],df_1[i])
lead_time
LeveneResult(F):3601.800
p-value:0.000
t-testResult(F):-99.075
p-value:0.000
adr
LeveneResult(F):105.482
p-value:0.000
t-testResult(F):-16.171
p-value:0.000
days_in_waiting_list
LeveneResult(F):351.568
p-value:0.000
t-testResult(F):-17.087
p-value:0.000
total_of_special_requests
LeveneResult(F):10696.542
p-value:0.000
t-testResult(F):88.890
p-value:0.000
lead_time,adr,days_in_waiting_list,total_of_special requests를 is_canceled에 여부에 따라 나눴을때
p-value가 0.05보다 작기 때문에 두 집단간의 평균이 다르다는 것을 알 수 있다.