[Kaggle] Day-3. Child Mind Institute : EDA

DD[Dev_Diary]·2024년 11월 25일

🖥️ SII와 성별 및 나이대에 대한 데이터 분석: EDA 과정

이번 포스팅에서는 SII(Score Indicator Index)를 성별 및 나이대와 관련하여 분석한 과정을 정리합니다.
데이터 전처리 및 탐색적 데이터 분석(EDA)에 사용한 방법과 코드를 함께 다룹니다.


1️⃣ 데이터 전처리: 나이대를 범주형 변수로 변환

💡 작업 개요

  • 나이 데이터를 나이대(Age Group)로 변환하여 분석의 편의성을 높입니다.
  • 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)']
)

🛠️ 코드 설명

  1. pd.cut: 나이를 특정 구간으로 나누어 범주형 변수로 변환합니다.
  2. bins: 나이 구간의 경계값을 설정합니다:
    • (4, 12]: 4세 초과 ~ 12세 이하 → Children
    • (12, 18]: 12세 초과 ~ 18세 이하 → Adolescents
    • (18, 22]: 18세 초과 ~ 22세 이하 → Adults
  3. labels: 각 구간에 대한 이름을 지정합니다.
  4. 결과:
    • 새로운 열 Age Group이 생성되며, 나이에 따라 Children(5-12), Adolescents(13-18), Adults(19-22)로 분류됩니다.

2️⃣ 그룹화와 빈도 분석

💡 작업 개요

  • SII, 성별, 나이대의 관계를 분석하기 위해 데이터를 그룹화하여 빈도를 계산합니다.
  • 이를 통해 각 그룹 간의 분포를 파악합니다.

📄 코드 예제

stats = train.groupby(['Age Group', 'Basic_Demos-Sex', 'sii']).size().unstack(fill_value=0)

🛠️ 코드 설명

  1. groupby(['Age Group', 'Basic_Demos-Sex', 'sii']):
    • Age Group, 성별(Basic_Demos-Sex), 그리고 SII를 기준으로 데이터를 그룹화합니다.
  2. .size():
    • 각 그룹의 행 개수(빈도)를 계산합니다.
  3. .unstack(fill_value=0):
    • sii를 열로 이동하여 2차원 테이블로 변환.
    • 결측값(NaN)은 0으로 채웁니다.
  4. 결과 예시:
    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    0

3️⃣ 각 그룹의 비율 계산

💡 작업 개요

  • 각 나이대와 성별에서 SII의 비율을 계산하여 비교.
  • 그룹별 데이터를 퍼센트(%)로 변환해 가독성을 높입니다.

📄 코드 예제

stats_prop = stats.div(stats.sum(axis=1), axis=0) * 100

🛠️ 코드 설명

  1. stats.sum(axis=1):
    • 각 행(나이대 및 성별 그룹)의 총합(빈도)을 계산.
  2. .div(..., axis=0):
    • 각 그룹의 빈도를 총합으로 나눠 비율을 계산.
  3. * 100:
    • 비율을 퍼센트(%)로 변환.
  4. 결과 예시:
    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.0

4️⃣ 데이터 검증

💡 작업 개요

  • 데이터 분석 전에 SII, 성별, 나이 등의 열에 결측값이 없는지 검증합니다.
  • 결측값이 있으면 분석 과정에서 오류가 발생할 수 있으므로 사전에 검증이 필요합니다.

📄 코드 예제

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 열에 결측값이 있습니다!"

🛠️ 코드 설명

  1. isna().sum():
    • 각 열에서 결측값(NaN)의 개수를 계산합니다.
  2. assert:
    • 특정 조건(결측값 개수 == 0)이 참인지 확인.
    • 조건이 거짓이면 AssertionError를 발생시켜 실행 중단.

5️⃣ EDA 결과 요약

1. SII와 나이대, 성별의 분포

  • Children(5-12) 그룹:
    • 남성에서 SII=0이 가장 많고, SII=2는 상대적으로 적음.
    • 여성SII=0의 비율이 더 높음.
  • Adolescents(13-18) 그룹:
    • 남성에서 SII=0SII=1이 주로 나타남.
    • 여성SII=0이 대부분을 차지.

2. 비율(%) 차이

  • 전체적으로 나이가 어릴수록 SII=0의 비율이 높고, 나이가 많아질수록 SII=1 또는 SII=2로 이동하는 경향이 있음.
  • 성별 간 차이:
    • 남성이 여성보다 높은 SII를 가지는 경우가 많음.

🔍 결론

EDA를 통해 SII, 성별, 나이대 간의 관계를 시각화하고 통계적으로 분석할 수 있었습니다.
분석 결과를 바탕으로 다음 단계에서는:
1. SII의 주요 요인을 더 깊이 이해.
2. 모델 학습 시 나이대 및 성별에 따른 특화된 학습 전략을 적용.

데이터 분석은 이해를 높이고, 더 나은 모델 학습을 위한 기반을 마련하는 과정입니다. 😊
다음 포스팅에서는 시각화를 통해 데이터를 더 직관적으로 표현해보겠습니다. 🚀
피드백은 언제나 환영입니다!!


profile
AI로 유용한 서비스 개발을 꿈꾸는 A린이

0개의 댓글