최근 고객의 페이지 클릭수, 이탈률, 종료율을 데이터를 바탕으로 UX를 개선하려고 합니다
Page 관련 데이터 EDA 이후 이탈률, 종료율 높은 사용자 여정 탐색하고 개선이 필요한 단일 페이지 및 사용자 개선 포인트 탐색하겠습니다
Page 관련 데이터 EDA
- 이탈률:해당 페이지에서 아무런 행동도 하지않고 이탈한 비율
- 종료율:해당 페이지가 탐색에 마지막 페이지가 된 비율
페이지에 관련된 변수들에 대한 데이터 프레임을 생성하겠습니다
df_cus = df[['Administrative', 'Informational', 'ProductRelated', 'BounceRates', 'ExitRates', 'PageValues']]
df_cus.head(5)
df_cus = df_cus.groupby(['Administrative', 'Informational', 'ProductRelated'], as_index=False).mean()
df_cus
사용자 여정 총 3,131이며 Index를 사용하고 싶지 않을 때는 as_index=False를 설정해 줍니다
페이지뷰가 가장 낮은 사용자 여정을 탐색해 보겠습니다
df_cus.sort_values(by=['PageValues'], ascending=True)
PageValues를 기준으로 오름차순으로 데이터 프레임을 정렬하겠습니다
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(['dark_background'])
sns.distplot(df_cus['PageValues']);
사용자 여정의 페이지 클릭수는 최대 250클릭수 까지 존재하며 페이지 클릭수는 평균적으로 0~50클리수 범위에 존재 하고 있습니다
이탈률이 가장 높은 사용자 여정
df_cus.sort_values(by=['BounceRates'], ascending=False)
## 이탈률을 기준으로 내림차순으로 정렬한 데이터 프레임을 확인
df_cus['BounceRates'].mean()
## 0.00746099327081189 이탈률의 평균
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
plt.style.use(['dark_background'])
sns.displot(df_cus, x="BounceRates");
plt.gcf().set_size_inches(16.5, 5)

사용자 여정의 이탈률의 최대는 20%이며 대부분 0~2.5% 것으로 확인됩니다
저는 기준을 75% 분위수로 하고 기준 이상은 이탈률이 높다고 가정하겠습니다
df_cus['BounceRates'].describe()
##코드를 통해 75% 분위수의 값을 확인하겠습니다
##75%--0.009804
len(df_cus[df_cus['BounceRates']>0.009804])
기준보다 높은 이탈률을 가진 사용자 여정은 780존재 합니다
df_admin = pd.DataFrame(df_cus[df_cus['BounceRates']>0.009804].groupby('Administrative')['Administrative'].count().sort_values(ascending=False))
기준 이탈률을 넘은 관리자 페이지를 탐색
plt.bar(df_admin.index, df_admin['Administrative'])

X축:관리자 페이지 넘버
Y축:개수
정보페이지, 제품페이지 또한 같은 방법으로 시각화 해보겠습니다
블로그에서는 종료율에 관해서는 시각화해보지 않겠지만 이탈률과 같은 방식으로 시각화하면 됩니다
이탈률과 종료율이 기준을 넘어가는 cnt가 가장 많은 페이지를 우선순위로 개선하겠습니다
관리페이지 개선
df_admin_B = df_cus[df_cus['BounceRates']>0.009804].groupby('Administrative', as_index=False)['Administrative'].count()
df_admin_B = df_admin_B.reset_index()
df_admin_B.columns = ['ID', 'BounceRates_cnt']
cnt는 개수를 의미하며 이탈률이 기준보다 높은 페이지의 개수에 대한 데이터 프레임을 만들겠습니다
df_admin_E = df_cus[df_cus['ExitRates']>0.027327].groupby('Administrative', as_index=False)['Administrative'].count()
df_admin_E = df_admin_E.reset_index()
df_admin_E.columns = ['ID', 'ExitRates_cnt']
종료율이 기준보다 높은 페이지의 개수에 대한 데이터 프레임
df_admin_merge = pd.merge(df_admin_B, df_admin_E, how='left', on='ID')
df_admin_merge['total'] = df_admin_merge['BounceRates_cnt'] + df_admin_merge['ExitRates_cnt']
df_admin_merge.sort_values(by=['total'], ascending=False).head(5)
ID를 기준으로 이탈률과 종료율이 기준보다 높은 데이터 프레임을 병합하며 이탈률+종료율을 새로운 total 변수로 만들겠습니다 그 후 내림차순으로 데이터 프레임을 정렬하겠습니다
정보 페이지, 제품 페이지 위와 같은 방법으로 개선 페이지를 확인하면 됩니다
사용자 여정 개선 포인트
# ▶ 각 사용자 여정별 count(*고객이 얼마나 해당 경로를 이용했는지), mean(*해당 경로에 이탈률과 종료율의 평균)
df_jny = df.groupby(['Administrative', 'Informational', 'ProductRelated'], as_index=False)[['BounceRates', 'ExitRates']].agg(['count', 'mean']).reset_index()
df_jny
데이터 프레임을 내림차순으로 정렬한 후 데이터를 확인하면 사용자 여정 개선 포인트 확인할 수 있습니다
분석 결론
# ▶ (1) 개선이 필요한 단일 페이지
# 관리 : ID (0, 1, 2, 3, 4)
# 정보 : ID (0, 1, 2, 3, 5)
# 제품 : ID (8, 27, 17, 11, 36)
# ▶ (2) 개선이 필요한 사용자 여정 조합
# (0,0,1)
# (0,0,2)
# (0,0,3)
# (0,0,4)
# (0,0,5)
분석을 바탕으로 페이지 개선 순위를 선정하였습니다
출처:Fast_Campus
'분석 보고서 > 그로스 해킹 분석' 카테고리의 다른 글
타겟 마케팅 (1) | 2022.10.21 |
---|---|
A/B Test (0) | 2022.10.19 |
광고 매출 분석 (0) | 2022.10.19 |
이커머스 데이터 활용 지표 개발 (0) | 2022.10.18 |
리그오브레전드 승리 요인 분석 (2) | 2022.10.14 |