
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.graphics.mosaicplot import mosaic
import scipy.stats as spst
- 사용데이터 : 이직 여부 판단
- enrollee_id: 지원자 고유 ID
- city: 도시 코드
- city_development_index: 도시 개발 지수 (척도)
- gender: 지원자의 성별
- relevent_experience: 지원자의 관련 경험
- enrolled_university: 대학 등록 상태
- education_level: 지원자의 학력 수준
- major_discipline: 지원자의 전공 분야
- experience: 지원자의 총 경력(년)
- company_size: 현재 고용주의 회사 규모 (직원 수)
- company_type: 현재 고용주의 회사 유형
- last_new_job: 이전 직장과 현재 직장 간의 공백 기간(년)
- training_hours: 완료된 교육 시간
- target: 0 – 이직을 고려하지 않음, 1 – 이직을 고려함
1. 교차표
- 범주 feature 별 범주 target 수 확인 가능
pd.crosstab(df['target'], df['gender'])
print('1.')
display(pd.crosstab(df['target'], df['gender'], normalize = 'columns'))
print('2.')
display(pd.crosstab(df['target'], df['gender'], normalize = 'index'))
print('3.')
display(pd.crosstab(df['target'], df['gender'], normalize = 'all'))
2. mosaic plot
- 교차표의 시각화
- 범주별 양과 비율을 표시
- 성별에 따른 이직 고려율 확인
mosaic(df, ['gender','target'])
plt.axhline(df['target'].mean(), color = 'r')
plt.show()

- x축의 길이는 성별의 비율을 표시
- y축은 이직 고려율을 표시
- 그래프를 봤을 때 성별에 따른 이직 고려율이 유의미해보이지 않음
3. 카이제곱검정
- 교차표의 수치화
- 기대빈도와 실제 데이터의 차이를 이용
- 카이제곱 통계량은 클수록 실제 값에 차이가 크다는 의미
- 범주의 수가 늘어날 수록 값이 커지고, 자유도의 약 2배 보다 크면 차이가 있다고 봄
- 자유도 : 범주의 수-1
table = pd.crosstab(df['target'], df['gender'])
spst.chi2_contingency(table)
'''
Chi2ContingencyResult(statistic=7.839477991576306, pvalue=0.005111736568166407,
dof=1,
expected_freq=array([[ 952.19572585, 10168.80427415],
[ 285.80427415, 3052.19572585]]))
'''
- p-value도 0.05보다 작고, 카이제곱 통계량을 볼 경우 성별과 이직 고려율은 유의미하다고 볼 수 있음
- 시각화와 수치가 다른데, 데이터의 남녀 수가 10배가 차이나므로 시각적 차이를 왜곡한 것으로 보임