데이터 생존 로그

pandas dataframe으로 퍼널 확인해보기 본문

카테고리 없음

pandas dataframe으로 퍼널 확인해보기

분석가 베어그릴스 2024. 2. 4. 17:47

pandas dataframe으로 퍼널을 만들어서 확인해봅시다.

예시 데이터는 kaggle에서 가져오도록 하겠습니다.

https://www.kaggle.com/datasets/aerodinamicc/ecommerce-website-funnel-analysis?resource=download

 

E-commerce website

Funnel analysis

www.kaggle.com


데이터셋 불러오기

필요한 라이브러리를 import하고, 데이터셋을 불러옵니다.

import pandas as pd
import plotly
import plotly.express as px

home = pd.read_csv('./home_page_table.csv')
payment_conf = pd.read_csv('./payment_confirmation_table.csv')
payment_page = pd.read_csv('./payment_page_table.csv')
search = pd.read_csv('./search_page_table.csv')
user = pd.read_csv('./user_table.csv')

 

총 5개의 csv로 이루어져있네요.

각 파일은 액션을 한 유저의 list가 들어있습니다.

실제 이커머스 행동 데이터는 하나의 record가 하나의 action을 담고 있는 경우가 많은데, 정제된 데이터 인 것 같네요.

 

각 파일명에서 알 수 있듯이, 각 액션은 다음을 의미하는 것으로 추론할 수 있습니다.

  • user: 유저 목록
  • home: 홈 화면에 방문
  • search: 상품 검색
  • payment_page: 결제 화면
  • payment_conf: 결제 완료

즉, 퍼널을 만든다면 user > home > search > payment_page > payment_conf 순서로 설계하면 되겠네요.


전처리

이제 위 다섯 개 테이블을 합쳐보겠습니다.

각 퍼널이 하나의 행(column)을 갖도록 만들면 될 것 같아요.

df = pd.merge(user, home, how='left', left_on='user_id', right_on='user_id')
df = pd.merge(df, search, how='left', left_on='user_id', right_on='user_id')
df = pd.merge(df, payment_page, how='left', left_on='user_id', right_on='user_id')
df = pd.merge(df, payment_conf, how='left', left_on='user_id', right_on='user_id')
df.columns = ['user_id', 'date', 'device', 'sex', 'home', 'search', 'payment_page', 'payment_conf']
df

 

이제 df는 유저별 퍼널 통과 여부를 나타내는 테이블이 되었습니다.

 

df의 device라는 컬럼은 유저의 디바이스를 의미하고, 디바이스별 ux는 다를테니 퍼널에도 차이가 있을 것 같아요.

device별 퍼널을 확인해보면 다음과 같습니다.

pages = ['home','search','payment_page','payment_conf']
device = df.groupby('device')[pages].agg('count').reset_index()
device

 

 

가설이 어느 정도 맞는 것으로 보입니다.

홈화면에 도달한 유저는 Desktop이 Mobile보다 많지만, 실제 결제완료까지 도달한 유저는 Mobile이 더 많네요.

특히, search > payment_page 퍼널에서 Desktop은 10%의 전환율을 보여주지만, Mobile은 20%의 전환율을 보여주고 있습니다.

 

이제 퍼널을 간단히 시각화 해 볼까요?

시각화 하기 전에 간단히 전처리 작업을 해줘야 합니다.

 

df_melted = device.melt(id_vars=['device'], var_name='action', value_name='value')
df_melted

 

이제 전처리 된 데이터로 시각화 해 봅시다.


시각화

디바이스별 퍼널을 비교하기 위해 하나의 퍼널 차트에 모두 담도록 할게요.

다만, 비교의 편의성을 위해 색깔을 구분지어 줍시다.

fig = px.funnel(df_melted, y='action', x='value', color='device', width=800, height=400)
fig.show()

우리가 확인한 가설을 퍼널 차트로 그려놓으니 더 잘 보이네요!

search > payment_page 경로에서 Desktop의 이탈이 더 많아졌고,

이로 인해 최종 결제 완료까지 Mobile에서 더 많은 유저가 도달한 것을 볼 수 있습니다.


마무리

이번 게시글에서는 간단한 캐글 데이터셋을 통해 퍼널을 확인해보고 시각화까지 해보았습니다.

정제된 데이터를 활용했지만, 더 복잡하고 많은 실제 데이터를 확인한다면 고려해야할 사항이 많을 것 같습니다.

의미있는 피처(위 예시에서는 디바이스가 되겠네요)를 선정해서 피처별 퍼널 분석을 통해 서비스 개선 아이디어를 얻어내면 좋겠습니다 !

 

 

반응형
Comments