contents
summary
# 라이브러리 호출
import pandas as pd
import numpy as np
# 과학 계산용 파이썬 라이브러리
import scipy.stats as stats
from PIL import Image
# 데이터 로드
df = pd.read_csv('./statistics.csv')
df
# 실제 데이터 비교
df.groupby(['Gender'])['Review Rating'].mean().reset_index()
;실제 데이터를 뜯어본 결과 성별에 따라 평균 리뷰 점수의 차이가 거의 없는 것을 확인할 수 있다. 하지만 이를 확인하기 위해 t-test를 수행한다.
# 데이터 분리
# mask method
mask=(df['Gender']=='Male')
mask1 = (df['Gender']=='Female')
m_df = df[mask]
f_df = df[mask1]
# 리뷰점수 컬럼만 가져오기
m_df=m_df[['Review Rating']]
f_df=f_df[['Review Rating']]
# scipy 라이브러리를 이용해 t-score 와 pvalue 를 확인할 수 있습니다.
# t-test 는 표본의 평균(차이 분석)을 알고자 할 때 사용되며, 모집단의 분산을 알 수 없는 경우 주로 사용됩니다.
t, pvalue=stats.ttest_ind(f_df, m_df)
t, pvalue
(array([-0.50971475]), array([0.61028017]))
# 실제 데이터 비교
df.groupby(['Gender','Shipping Type'])['Customer ID'].count().reset_index()
:성별에 따른 Shipping Type 사이에는 차이가 있어보이지만, 보다 정확한 검정을 위해 카이제곱 검정을 시행한다.
#pandas 라이브러리의 crosstab 함수를 통해, 두 범주형 자료의 빈도표를 만들어 주겠습니다.
result = pd.crosstab(df['Gender'], df['Shipping Type'])
result
# 카이제곱 검정을 stat 함수를 통해 구현
# chi2_contingency를 통해, 카이제곱통계량, p-value를 출력할 수 있습니다.
stats.chi2_contingency(observed=result)
Chi2ContingencyResult(statistic=12.242857409177802, pvalue=0.03160742064222473, dof=5, expected_freq=array([[200.64, 206.72, 216. , 207.36, 209.28, 208. ],
[426.36, 439.28, 459. , 440.64, 444.72, 442. ]]))
# 각 값들을 별도로 보기
# 카이제곱 검정 통계량, pvalue, 자유도를 확인할 수 있습니다.
stats.chi2_contingency(observed=result)[0]
12.242857409177802
stats.chi2_contingency(observed=result)[1]
0.03160742064222473
->여기서 p-value 값은 0.05 보다 작으므로, 연관성이 있다고 추정할 수 있습니다.
대립가설 채택, 귀무가설 기각 즉, 성별과 Shipping Type에는 관련성이 있을 것이다. 유의미한 관계가 있을 것으로 보입니다.
#자유도와 유의수준을 통해 귀무가설 기각 여부를 판단하기도 합니다.
#자유도란, 굉장히 복잡한 개념이므로,,, (변수1 그룹의 수-1)*(변수2 그룹의 수-1) 가 되겠습니다.
#(성별 2개 - 1 ) * (Shipping Type 6개 -1 )
# 1*5 = 5 이 도출되었습니다.
stats.chi2_contingency(observed=result)[2]
5
해설
x 축은 유의수준, y 축은 자유도 입니다.
자유도5, 유의수준을 0.05 로 본다면, 11.07 검정통계량이 나오게 됩니다.
우리가 구한 카이제곱 검정통계량은 12.24 이므로 11.07 보다 큽니다.¶
표에 명시된 기준보다 값이 클 경우 대립가설을 채택합니다.
대립가설 채택.
이렇게까지는 잘 하지 않습니다..p-value 로 판단합니다.
카이제곱분포표
key points
분석을 진행하기에 앞서 EDA를 통해 먼저 직접 데이터가 어떤지 확인해봐야한다. 그리고 검정을 수행하고 결과를 해석한다.
하지만 통계적 분석의 결과를 100%신뢰할 수 는 없다. 직접적인 결과과 통계검정에서 같은 결과를 보일지라도 완전한 확신의 결과라고는 단언할 수 없다. 위에서 성별과 리뷰점숭 평균에는 큰차이가 없는 것을 확인했지만, 정말 관계가 없을까? 하는 생각을 반드시 해보는것이 중요하다!