<aside> 📌 Colab url https://colab.research.google.com/drive/1JV6y1pBTomKrcvk5w0arU6i5ztOCyruL?usp=sharing
</aside>
<aside> 📌 Task : 데이터를 연령 기반으로 그룹화 하기
</aside>
50대 이상 고령층의 이탈률이 높은 것은 가독성이나 인터페이스 불편 등 연령 특화 UX 부족 때문일 가능성이 있다.
연령층(경제적 상황)(성인/미성년자)에 따라 구독 유형이 비싸질수록 이탈률이 낮아질 것이다.
<aside> 📌 실행 및 진행 사항 정리
</aside>
# birthday 컬럼 중 NaN 값 제거
merged_df = merged_df.dropna(subset=['birthday'])
# birth_year 파생 변수 생성
merged_df['birth_year'] =
pd.to_datetime(merged_df['birthday'], errors='coerce').dt.year
# current_year 를 pandas의 Timestamp 를 이용해 age 파생 변수 생성
current_year = pd.Timestamp.now().year
merged_df['age'] = current_year - merged_df['birth_year']
# age_group 파생 변수 생성
bins = [0, 19, 29, 39, 49, 59, 200]
labels = ['10대 이하', '20대', '30대', '40대', '50대', '60대 이상']
merged_df['age_group'] = pd.cut(merged_df['age'], bins=bins, labels=labels, right=True)
# 성인/미성년자 구분을 위해 is adult 파생 변수 생성
merged_df["is_adult"] = merged_df["age"] >= 20
# is adult 와 subscription_plan 의 이탈률 분석
merged_df["is_dropout"] = merged_df["exit_position_numeric"] < 75
dropout_summary = merged_df.groupby(["is_adult", "subscription_plan"])["is_dropout"].mean().unstack()
### 코멘트
1. **birthday 파싱 방식**
`birthday` 컬럼은 `str[:4]`로 자르기보다는 `pd.to_datetime()`으로 날짜형으로 변환한 후 `.dt.year`를 사용하는 것이 더 안정적입니다.
2. **age_group 범위 조정**
현재는 50대 이상을 하나로 묶었지만, 60대 이상 사용자가 일정 수 이상 존재한다면 별도로 분리하는 것도 고려해볼 수 있습니다.
3. **is_dropout 기준 보완**
`exit_position_numeric < 90` 기준은 적절하지만, 50% 기준 보조 지표나 연령대별 이탈 분포(Box Plot 등)도 함께 보면 분석 폭이 넓어질 수 있습니다.
4. **plan_price_map 인코딩**
순서형 인코딩은 좋은 시도지만, 현재는 EDA 목적이므로 문자형 유지가 해석과 시각화 측면에서 더 적합할 수 있습니다.
<aside> 📌 결과
</aside>