<aside> 📌 가설 설정 및 검증

</aside>

<aside> ❓

e-Reader기를 사용하는 사람이 이탈률이 적을 것이다. 승인님

<aside> ❗

## e리더기 사용
df_merged['device_type'].value_counts(normalize = True)

image.png

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

image.png

<aside>

이탈한 대상 1000명 중에 e리더기 비율이 가장 낮다.

(e리더기 사용자 자체가 적을 가능성이 있다 )

e리더기를 구매한 사용자는 완독할 가능성이 크다

e리더기 사용자들의 행동 패턴 분석하여 다른 기기에 적용해볼 수 있다.

</aside>

</aside>

</aside>

<aside> ❓

경제/시사 장르를 읽는 사람들의 이탈률이 높을 것이다. 승인님

<aside> ❗

df_merged['genre'].value_counts(normalize=True)

image.png

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구간을 같은 비율로 해서 그런 것 같음.
#나누는 구간의 차이를 두어야 할 것 같아보임.

image.png

이탈한 대상 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()

image.png

연령대가 높은 사람들은 추천으로 유입된 인원의 이탈이 가장 많다.

연령대가 높은 사람들은 외부링크로 유입된 인원의 이탈이 가장 적다.

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

eReader를 이용하는 여성중에는 mz 세대가 많을 것이다. 수민님

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