////////
Search
Duplicate
🍯

추천/검색 유입 관련 분석

Tags
Archive
ETA
2025/06/18
Main Task
Sub Task
담당자
메모
상태
Done
생성 일시
2025/06/13 02:50
우선 순위
진행률 %
Task : 추천/검색 유입 관련 분석 데이터 시각화하기
1.
미리보기 사용 비율 막대그래프
전체 사용자 중에서 미리보기를 사용한 유저의 비율 시각화
2.
미리보기 사용 여부에 따른 추천 실패 비율 막대그래프
미리보기를 사용했는지 하지 않았는지를 기준으로 나누어 추천 실패 비율을 시각화
3.
추천 클릭 후 자발적 이탈 사유 비율 막대그래프
추천 클릭으로 책을 읽게 된 사용자들의 구체적 사유가 차지하는 비율을 시각화
4.
완독하지 못한 사용자 중 추천 실패 장르 비율 막대그래프
추천을 받고 완독하지 못한 사용자들을 주로 어떤 장르를 추천 받았는지 시각화
5.
완독자 중 추천 장르 비율 막대그래프
완독자들에게는 주로 어떤 장르가 추천되었는지 시각화
6.
완독률 히스토그램과 정규분포 히스토그램 비교
현재 데이터셋의 완독률 히스토그램과 정규분포 히스토그램의 분포 양상 비교 시각화
7.
개선 필요 부분
추천 클릭이 아닌 사람들의 추천 실패도 있는지 ?
경제 시사가 왜 완독 실패 비율도 적고 완독될 비율도 적은가?
정규분포 기반 완독률 그래프 실제 출처 찾아서 그리기!
실행 및 진행 사항 정리
# 1. 미리보기 값 정리 df['quick_preview_used'] = df['quick_preview_used'].astype(str).str.strip().str.lower() df['preview_label'] = df['quick_preview_used'].replace({ 'yes': '사용', 'true': '사용', '1': '사용', 'no': '미사용', 'false': '미사용', '0': '미사용' }) # 2. 비율 계산 preview_ratio = df['preview_label'].value_counts(normalize=True).reset_index() preview_ratio.columns = ['사용여부', '비율'] # 3. 그래프 import matplotlib.pyplot as plt import seaborn as sns plt.figure(figsize=(5, 4)) sns.barplot(data=preview_ratio, x='사용여부', y='비율', order=['미사용', '사용']) plt.title('미리보기 사용 비율') plt.ylabel('비율') plt.ylim(0, 1) plt.grid(axis='y') plt.tight_layout() plt.show()
Python
복사
# 1. 값 정리 df['quick_preview_used'] = df['quick_preview_used'].astype(str).str.strip().str.lower() # 2. 매핑 처리 import numpy as np df['quick_preview_used'] = df['quick_preview_used'].apply( lambda x: 1 if x in ['yes', 'true', '1'] else (0 if x in ['no', 'false', '0'] else np.nan) ) # 3. 추천 실패 여부 컬럼 생성 df['is_reco_fail'] = df['dropout_reason_detail'] == '추천 실패' # 4. 비율 계산 preview_group = df.groupby('quick_preview_used')['is_reco_fail'].mean().reset_index() preview_group['quick_preview_used'] = preview_group['quick_preview_used'].map({1: '미리보기 사용', 0: '미사용'}) # 5. 시각화 import seaborn as sns import matplotlib.pyplot as plt plt.figure(figsize=(6, 4)) sns.barplot(data=preview_group, x='quick_preview_used', y='is_reco_fail') plt.title('미리보기 사용 여부에 따른 추천 실패 비율') plt.ylabel('추천 실패 비율') plt.ylim(0, 1) plt.grid(axis='y') plt.tight_layout() plt.show()
Python
복사
# 추천 클릭 + 자발적 이탈 + 세부 이탈 사유 필터링 filtered = df[ (df['recommendation_clicked'] == 1) & (df['dropout_reason_category'] == '자발적') # & (df['dropout_reason_detail'].isin(['지루함', '너무 김'])) ] reason_ratio = filtered['dropout_reason_detail'].value_counts(normalize=True) plt.figure(figsize=(6,4)) sns.barplot(x=reason_ratio.index, y=reason_ratio.values) plt.title('추천 클릭 후 자발적 이탈 사유 비율') plt.ylabel('비율') plt.ylim(0,1) plt.grid(axis='y') plt.tight_layout() plt.show()
Python
복사
import matplotlib.pyplot as plt import seaborn as sns # 1. 완독 못한 사람 필터링 (독서 중단 위치 75 미만) incomplete_df = df[df['exit_position_numeric'] < 75] # 2. 그 중 추천 실패한 사람만 필터링 reco_fail_df = incomplete_df[incomplete_df['dropout_reason_detail'] == '추천 실패'] # 3. 장르별 추천 실패 비율 계산 (전체 추천 실패 중에서 장르 비중) genre_ratio = reco_fail_df['genre'].value_counts(normalize=True) # 4. 시각화 plt.figure(figsize=(8, 5)) colors = ['red', 'orange', 'yellow', 'green'] # 장르 수만큼 색 자동 설정 sns.barplot(x=genre_ratio.index, y=genre_ratio.values, hue=genre_ratio.index, palette=colors, dodge=False, legend=False) plt.title('완독하지 못한 사용자 중 추천 실패 장르 비율', fontsize=14) plt.xlabel('장르') plt.ylabel('비율') plt.ylim(0, 1) plt.grid(axis='y') plt.tight_layout() plt.show()
Python
복사
import seaborn as sns import matplotlib.pyplot as plt # 1. 완독자 중 추천 클릭 유저에게 추천된 장르 비율 completed = df[df['exit_position_numeric'] >= 75] completed_recommended = completed[completed['recommendation_clicked'] == 1] genre_ratio = completed_recommended['genre'].value_counts(normalize=True) # 2. 시각화 plt.figure(figsize=(8, 5)) colors = ['orange', 'red', 'yellow', 'green'] # 장르 수에 맞게 sns.barplot(x=genre_ratio.index, y=genre_ratio.values, hue=genre_ratio.index, palette=colors, dodge=False, legend=False) plt.title("완독자 중 추천 클릭 유저에게 추천된 장르 비율", fontsize=14) plt.xlabel("장르") plt.ylabel("비율") plt.ylim(0, 1) plt.grid(axis='y') plt.tight_layout() plt.show()
Python
복사
결과