<aside> 📌 가설 설정 및 검증
</aside>
<aside> ❓
승인님<aside> ❗
## e리더기 사용
df_merged['device_type'].value_counts(normalize = True)

##구독플랜의 종류와 함께 확인해봄
df_merged.groupby(['subscription_plan','device_type']).count() / df_merged.count() *100

<aside>
⭕
이탈한 대상 1000명 중에 e리더기 비율이 가장 낮다.
(e리더기 사용자 자체가 적을 가능성이 있다 )
e리더기를 구매한 사용자는 완독할 가능성이 크다
e리더기 사용자들의 행동 패턴 분석하여 다른 기기에 적용해볼 수 있다.
</aside>
</aside>
</aside>
<aside> ❓
승인님<aside> ❗
df_merged['genre'].value_counts(normalize=True)

df_merged['exit_po_group'] = pd.cut(df_merged['exit_position_numeric'], ##이탈한 위치를 나눔
bins=[0,25,50,75,100],
labels=['25% 이하', '25~49%', '50~74%', '75% 이상'],
right = True)
df_merged[df_merged['genre'] =='경제/시사'].value_counts('exit_po_group',normalize=True) ##비율
## 전체 장르 확인
df_merged.groupby(['genre','exit_po_group']).count() ##인원수
#읽고 나간 곳은 거의 비슷. 4구간을 같은 비율로 해서 그런 것 같음.
#나누는 구간의 차이를 두어야 할 것 같아보임.

❌
이탈한 대상 1000명 중에 경제/시사 비율이 가장 낮다.
(경제/시사를 읽는 사람들의 비율이 낮을 수 있다)
경제/시사는 높은 충성도를 가졌을 수 있다.
경제/시사 장르 강화하여 충성도 확립할 수 있다.
경제/시사를 읽는 고객들은 광고 타겟으로 적합할 수 있다.
</aside>
*25% 이하인 사람들이 미리보기 보고왔는지
</aside>
<aside> ❓
승인님<aside> ❗
df_merged['age'] = 2023 - df_merged['birthday_filled'].dt.year+1
df_merged['age_group'] = pd.cut(df_merged['age'],
bins=[0,9,19,29,39,49,59,130],
labels=['0대','10대', '20대', '30대', '40대', '50대', '60대 이상'],
right = True)
## 연령대 높음의 기준을 50대 이상으로 설정
#50대 이상 유입채널 비율
df_merged[df_merged['age']>= 50].groupby('entry_channel').count()
###같
df_merged[(df_merged['age_group']=='50대') | (df_merged['age_group']=='60대 이상')].groupby('entry_channel').count()

❌
연령대가 높은 사람들은 추천으로 유입된 인원의 이탈이 가장 많다.
연령대가 높은 사람들은 외부링크로 유입된 인원의 이탈이 가장 적다.
</aside>
*기준을 잡는 것 : 90% 이상은 완독했다고
</aside>
<aside> ❓
수민님<aside> ❗
가설 오류
# 성별 별 / 구독 유형 별로 이탈률 구하기
gender_sub = pd.crosstab(
df['subscription_plan'], # 행 인덱스로 사용할 열 지정
df['user_demographics_gender'], # 열 인덱스로 사용할 열 지정
normalize=True, # 정규화 (전체 기준으로 비율 계산)
margins=True, # 총계 포함 여부
margins_name='Total' # 총계 이름 지정
)
print(gender_sub)
>>>
user_demographics_gender female male Total
subscription_plan
free_trial **0.173 0.204** 0.377
monthly **0.167 0.138** 0.305
pay_per_book 0.168 0.150 0.318
Total 0.508 0.492 1.000
</aside>
</aside>
<aside> ❓
수민님<aside> ❗
# mz 세대 구분하기
birth_year = df['birthday_filled'].dt.year # 출생 년도 구하기
def mz_gen(year): # mz 세대를 구분하는 함수 정의
if 1980 <= year <=2012: # 조건 : 1980년대 ~ 2012년대
return True
else:
return False
df['is_mz'] = birth_year.apply(mz_gen) # 새로운 컬럼 is_mz를 만들어 mz 여부 확인하기
# eReader 사용자 중 여성 mz 세대 비율 구하기
ereader_df = df[df['device_type'] == 'eReader']
total_users = len(ereader_df)
female_ratio = (ereader_df['user_demographics_gender'] == 'female').mean()
mz_ratio = ereader_df['is_mz'].mean()
female_mz_ratio = ereader_df[(ereader_df['user_demographics_gender'] == 'female') & (ereader_df['is mz'])].shape[0] / total_users
female_df = ereader_df[ereader_df['user_demographics_gender'] == 'female']
female_mz_only_ratio = female_df['is_mz'].mean()
result = pd.DataFrame({
'비율(%)': [female_ratio * 100, mz_ratio * 100, female_mz_ratio * 100, female_mz_only_ratio * 100]
}, index=[
'eReader 사용자 중 여성 비율',
'eReader 사용자 중 MZ 세대 비율',
'eReader 전체 사용자 중 여성 MZ 세대 비율',
'eReader 여성 사용자 중 MZ 세대 비율'
])
print(result)
print(result)
>>>
비율(%)
eReader 사용자 중 여성 비율 52.054795
eReader 사용자 중 MZ 세대 비율 54.794521
eReader 전체 사용자 중 여성 MZ 세대 비율 25.570776
eReader 여성 사용자 중 MZ 세대 비율 49.122807
</aside>
<aside> ❓
수민님<aside> ❗
가설 오류
df['entry_channel'].value_counts(normalize=True)
>>>
entry_channel
추천 **0.534**
홈메인배너 0.210
검색 0.195
외부링크 **0.061**
df['dropout_reason_detail_filled'].value_counts(normalize=True)
>>>
dropout_reason_detail_filled
**추천 실패 0.325
UX 불편** **0.300**
지루함 0.130
너무 김 0.130
급한일 0.065
기술 이슈 0.050
female = df[df['user_demographics_gender'] == 'female']
print(female['dropout_reason_detail_filled'].value_counts(normalize=True))
>>>
dropout_reason_detail_filled
**추천 실패** **0.318898**
UX 불편 0.291339
너무 김 0.139764
지루함 0.137795
급한일 0.066929
기술 이슈 0.045276
male = df[df['user_demographics_gender'] == 'male']
print(male['dropout_reason_detail_filled'].value_counts(normalize=True))
>>>
dropout_reason_detail_filled
**추천 실패** **0.331301**
UX 불편 0.308943
지루함 0.121951
너무 김 0.119919
급한일 0.063008
기술 이슈 0.054878
</aside>
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> ❓
</aside>
<aside> 🎯
</aside>
<aside> 📌
</aside>