<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>