Task : 데이터를 연령 기반으로 그룹화 하기
50대 이상 고령층의 이탈률이 높은 것은 가독성이나 인터페이스 불편 등 연령 특화 UX 부족 때문일 가능성이 있다.
•
birthday 컬럼을 활용해 age / age_group 파생 변수를 만들어서 연령별 비교 분석을 한다.
연령층(경제적 상황)(성인/미성년자)에 따라 구독 유형이 비싸질수록 이탈률이 낮아질 것이다.
•
age 컬럼과 subscription_plan 컬럼을 활용해서 상관관계를 비교 분석한다.
실행 및 진행 사항 정리
# 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 목적이므로 문자형 유지가 해석과 시각화 측면에서 더 적합할 수 있습니다.
Python
복사
결과
user_id | entry_channel | quick_preview_used | recommendation_clicked | last_access_timestamp | gender | birthday | device_type | subscription_plan | theme_mode | book_id | genre | exit_position_numeric | dropout_reason_category | dropout_reason_detail | birth_year | age | age_group |
0 | user_0001 | 추천 | No | True | 2023-05-08 14:13:00 | male | 1998-06-17 | mobile | monthly | dark | E01 | 경제/시사 | 68 | 자발적 | 지루함 | 1998 | 27 |
1 | user_0002 | 추천 | No | True | 2023-01-13 00:54:00 | male | 2010-04-15 | mobile | monthly | dark | E01 | 경제/시사 | 44 | 자발적 | 추천 실패 | 2010 | 15 |
2 | user_0003 | 추천 | No | True | 2023-07-12 09:13:03 | male | 1985-02-13 | mobile | monthly | dark | E01 | 경제/시사 | 59 | 자발적 | 너무 김 | 1985 | 40 |
# 연령층(경제적 상황)(성인/미성년자)에 따라 구독 유형이 비싸질수록 이탈율이 낮아질 것이다.
free_trial monthly pay_per_book
is_adult
False 0.875000 0.923077 0.843137
True 0.902516 0.888000 0.882129
데이터를 확인해 보았을 때 구독이 비싸질수록 이탈률이 낮아지지도 않고
성인 쪽에서 더 뚜렷한 경향이 나타나지도 않았기 때문에 가설의 뒷받침이 되긴 어렵다고 판단
Python
복사