교차표를 만들어야 한다.
if 타이타닉호에서 성별 생존 여부를 계산할떄 남자중에 사망수 / 생존수 여자 중에 사망수 / 생존수 를 계산해 교차표를 만들어야 한다.
이러한 교차표를 Confusion Matrix 라고 한다.
교차표를 시각화 해야 한다 (Mosaic Plot) 으로 시각화 한다.
아무런 관련이 없을때 교차표의 차이 비교 (Chi - Squared test)
pd.crosstab(행 , 열 , normalize = True)
# 행 : df['column']
# 열 : df['column']
pd.crosstab(df['Survived'] , df['Sex'] )
pd.crosstab(df['Survived'] , df['Sex'] , normalize = 'columns')
from statsmodels.graphics.mosaicplot import mosaic
mosaic(titanic, [ 'Pclass','Survived'])
plt.axhline(1-titanic['Survived'] , color = 'r') # 전체 평균은 1-mean
plt.show()
생존율을 넣으면 그래프 아래쪽에 선이 생기기 때문에 1-생존률 로 사망률 로 계산해야 한다.
전체 평균선을 수평으로 그린다
x축의 비율을 봐야 한다
temp = pd.crosstab(titanic['Pclass'], titanic['Survived'], normalize = 'index')
print(temp)
temp.plot.bar(stacked=True)
plt.axhline(1-titanic['Survived'].mean(), color = 'r')
plt.show()
오차에 크기를 계산하는 방법은 편차의 제곱 , 편차의 절대값
실제 관측 빈도에서 기대 빈도의 편차의 제곱의 평균 을 구한 통계
차이가 클수록 x->y 영향을 주는것이라고 판단할수 있다 (대립가설이 맞다)
자유도 보다 2배이상 통계량이 나오면 차이가 있다고 본다
Crosstab 을 만든다 (normalize 금지 , 비율이 아니기 때문에)
spst.chi2_contingency(Crosstab)
결과로 카이제곱 통계량 , P-value , 자유도 , 기대 빈도
# 1) 먼저 교차표 집계
table = pd.crosstab(titanic['Survived'], titanic['Pclass'])
print(table)
print('-' * 50)
# 2) 카이제곱검정
spst.chi2_contingency(table)