이번 포스팅에서는 SII(Score Indicator Index)를 성별 및 나이대와 관련하여 분석한 과정을 정리합니다.
데이터 전처리 및 탐색적 데이터 분석(EDA)에 사용한 방법과 코드를 함께 다룹니다.
pd.cut 함수를 사용해 나이를 특정 구간으로 나누고, 그룹 라벨을 지정합니다.train['Age Group'] = pd.cut(
train['Basic_Demos-Age'],
bins=[4, 12, 18, 22],
labels=['Children(5-12)', 'Adolescents(13-18)', 'Adults(19-22)']
)
pd.cut: 나이를 특정 구간으로 나누어 범주형 변수로 변환합니다.bins: 나이 구간의 경계값을 설정합니다:(4, 12]: 4세 초과 ~ 12세 이하 → Children(12, 18]: 12세 초과 ~ 18세 이하 → Adolescents(18, 22]: 18세 초과 ~ 22세 이하 → Adultslabels: 각 구간에 대한 이름을 지정합니다.Age Group이 생성되며, 나이에 따라 Children(5-12), Adolescents(13-18), Adults(19-22)로 분류됩니다.stats = train.groupby(['Age Group', 'Basic_Demos-Sex', 'sii']).size().unstack(fill_value=0)
groupby(['Age Group', 'Basic_Demos-Sex', 'sii']):Age Group, 성별(Basic_Demos-Sex), 그리고 SII를 기준으로 데이터를 그룹화합니다..size():.unstack(fill_value=0):sii를 열로 이동하여 2차원 테이블로 변환.sii 0 1 2
Age Group Sex
Children(5-12) Male 5 3 1
Female 4 2 0
Adolescents(13-18) Male 6 2 1
Female 3 1 0SII의 비율을 계산하여 비교.stats_prop = stats.div(stats.sum(axis=1), axis=0) * 100
stats.sum(axis=1):.div(..., axis=0):* 100:sii 0 1 2
Age Group Sex
Children(5-12) Male 55.6 33.3 11.1
Female 66.7 33.3 0.0
Adolescents(13-18) Male 66.7 22.2 11.1
Female 75.0 25.0 0.0SII, 성별, 나이 등의 열에 결측값이 없는지 검증합니다.assert train['Basic_Demos-Age'].isna().sum() == 0, "Age 열에 결측값이 있습니다!"
assert train['Basic_Demos-Sex'].isna().sum() == 0, "Sex 열에 결측값이 있습니다!"
assert train['sii'].isna().sum() == 0, "SII 열에 결측값이 있습니다!"
isna().sum():NaN)의 개수를 계산합니다.assert:AssertionError를 발생시켜 실행 중단.Children(5-12) 그룹:SII=0이 가장 많고, SII=2는 상대적으로 적음.SII=0의 비율이 더 높음.Adolescents(13-18) 그룹:SII=0과 SII=1이 주로 나타남.SII=0이 대부분을 차지.SII=0의 비율이 높고, 나이가 많아질수록 SII=1 또는 SII=2로 이동하는 경향이 있음.SII를 가지는 경우가 많음.EDA를 통해 SII, 성별, 나이대 간의 관계를 시각화하고 통계적으로 분석할 수 있었습니다.
분석 결과를 바탕으로 다음 단계에서는:
1. SII의 주요 요인을 더 깊이 이해.
2. 모델 학습 시 나이대 및 성별에 따른 특화된 학습 전략을 적용.
데이터 분석은 이해를 높이고, 더 나은 모델 학습을 위한 기반을 마련하는 과정입니다. 😊
다음 포스팅에서는 시각화를 통해 데이터를 더 직관적으로 표현해보겠습니다. 🚀
피드백은 언제나 환영입니다!!