<aside> 📌 Task
전자책 서비스 - 유저가 더 오래 컨텐츠를 읽게 하려면?
</aside>
<aside> 📌 실행 및 진행 사항 정리
분석 흐름 요약 데이터 통합
user_demographics.csv, user_activity.csv, book_reading_status.csv를 user_id 기준으로 병합하여 하나의 마스터 테이블 생성
➜ pd.merge() 2번 사용
데이터 타입 정제 및 이상치 처리
birthday, last_access_timestamp 등 object 타입 → int 또는 datetime으로 변환
주요 컬럼에 있는 '98s' 같은 문자열에서 숫자만 추출 → int 형 변환 후 결측치는 평균 또는 중앙값으로 대체
describe() 및 boxplot()으로 수치형 컬럼 이상치 탐지 → 상위 1% 이상치는 IQR 기준 제거 또는 변환
결측치 처리
각 컬럼의 결측치 비율 확인
exit_position_numeric, dropout_reason_detail 등 주요 컬럼의 NaN 값은 유형별 평균/중앙값으로 대체하거나 ‘미응답’ 카테고리 추가
파생변수 생성
birthday → 나이로 변환
last_access_timestamp → 요일, 시간대, 주말 여부 생성
➜ df['weekday'] = df['last_access_timestamp'].dt.dayofweek
➜ 시간대 범주는 pd.cut()으로 새벽/오전/오후/저녁 등 분류
exit_position_numeric → 완독 여부 플래그 생성: 완독(True) if >=90, 이탈(False) if <90
유저 페르소나 정의
연령대 + 구독 플랜 + 기기 유형 + 장르 기반으로 세분화
예: 20대/여성/모바일/소설/월정액 구독 유저 그룹
시각화 및 탐색적 분석
장르별 이탈률, 구독 유형별 완독률, 시간대별 CTR, 추천 클릭 여부 vs 완독률 등
시각화 도구: matplotlib, seaborn, barplot, lineplot, pie chart, boxplot
상관관계/패턴 분석
exit_position_numeric과, recommendation_clicked, quick_preview_used의 상관관계 확인
완독 여부를 타깃으로 이진 분류 시나리오 준비 가능
</aside>
<aside> 📌 결과 목표 :
전자책 플랫폼 ‘리디의 서재’에서 유저의 콘텐츠 이탈 원인 분석 및
몰입률 향상 방안 도출
</aside>