학습/데이터 분석

[퍼널 분석] PYTHON 활용하여 캐글 데이터로 퍼널분석 실습해보기 2

용이03 2025. 2. 26. 13:12

https://data-yong2.tistory.com/entry/%ED%8D%BC%EB%84%90-%EB%B6%84%EC%84%9D-PYTHON-%ED%99%9C%EC%9A%A9%ED%95%98%EC%97%AC-%EC%BA%90%EA%B8%80-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A1%9C-%ED%8D%BC%EB%84%90%EB%B6%84%EC%84%9D-%EC%8B%A4%EC%8A%B5%ED%95%B4%EB%B3%B4%EA%B8%B0-1

 

[퍼널 분석] PYTHON 활용하여 캐글 데이터로 퍼널분석 실습해보기 1

파이썬을 활용한 이커머스 퍼널 분석: 사용자 행동 패턴 심층 탐구  캐글에 퍼널분석 하기 좋은 데이터가 있어서 캐글데이터활용하여 퍼널분석을 진행 해 보았다.https://www.kaggle.com/datasets/mkechino

data-yong2.tistory.com

앞 포스팅에서 살펴본 데이터 및 데이터 분포를 기반으로 이번에는 본격적인 퍼널 분석을 진행해 보려 한다.

 

이벤트 유형에 따라 데이터를 분석하기 위해 먼저 각 이벤트를 단계별로 정의한다.

📌단계 정의 

# 이벤트 유형에 따라 단계 정의
event_step = {'view': 1, 'cart': 2,'remove_from_cart':3, 'purchase': 4}
df2['step'] = df2['event_type'].map(event_step)

# 각 user_id와 product_id별로 가장 높은 단계(step) 추출 (어느 시점에서 마지막 이벤트 발생했는지 파악)
max_step = df2.groupby(['user_id', 'product_id'])['step'].max().reset_index()

view → cart → remove_from_cart → purchase 순으로 행동이 이루어진다고 파악하고 1, 2, 3, 4 숫자로 표현했다.

  • event_type에 따라 각 이벤트를 숫자로 변환해서 단계(step)를 설정
  • 숫자 변환 이유: 후속 분석에서 max() 함수를 이용해 각 사용자가 가장 높은 단계까지 도달했는지 쉽게 계산하기 위함

잠재적 문제점

  • remove_from_cart를 cart → purchase 단계 사이에 두면, 전환율 해석이 혼란스러울 수 있음
  • 일반적인 퍼널 분석에서는 cart에서 purchase로 넘어가는 비율을 보는 것이 표준이므로, remove_from_cart를 포함하면 "장바구니에서 제거한 사용자도 전환율에 포함"되는 문제 발생

해결 방법

  • remove_from_cart를 제외하고 기본 전환율을 계산하고, 별도 분석 대상으로 분리하는 것이 효과적
  • remove_from_cart는 사용자의 행동 패턴 분석(이탈 원인 분석)에서 별도로 분석하는 것이 바람직함

📌단계별 사용자 수 계산

# 각 단계별 고유 사용자 수 계산
view_users = max_step_user[max_step_user['step'] >= 1]['user_id'].nunique()
cart_users = max_step_user[max_step_user['step'] >= 2]['user_id'].nunique()
purchase_users = max_step_user[max_step_user['step'] >= 4]['user_id'].nunique()

# remove_from_cart는 별도 분석
remove_users = max_step_user[max_step_user['step'] >= 3]['user_id'].nunique()

 

step >= 1 조건을 사용하는 이유

  • 각 유저가 특정 상품에 대해 가장 마지막으로 도달한 단계를 기준으로 분석
  • 예: 한 유저가 view → cart → view → purchase 순서로 행동했다면, 최종 단계(max)는 purchase(4)가 됨
  • 최적화 이점: groupby().max()를 사용하면 한 번의 연산으로 최종 단계만 남기므로 계산 효율성 증가

단계별 사용자 포함 

퍼널 분석은 최소 해당 단계까지 도달한 사용자 수를 측정하는 것이 핵심이다.

즉, 특정 단계의 사용자 수를 계산할 때 그 단계를 거쳤거나 더 높은 단계를 거친 사용자도 포함해야 한다.

  • step >= 1이면 view, cart, purchase 등 모든 사용자를 포함
  • View(1)만 한 사용자, Cart(2)까지 진행한 사용자, Purchase(4)까지 완료한 사용자 모두 → "한 번이라도 본 사람"으로 집계
  • step == 1로 필터링하면 Cart나 Purchase까지 간 유저는 View 단계에서 제외되어 잘못된 결과가 도출됨

📍예제 데이터로 이해하기

(1) 원본 데이터 (df2)

user_id product_id event_type step
1 A view 1
1 A cart 2
2 B view 1
2 B purchase 4
3 C view 1

(2) max_step_user (최종 단계별 데이터)

user_id step
1 2
2 4
3 1

(3) 단계별 유저 수 계산

view_users = max_step_user[max_step_user['step'] >= 1]['user_id'].nunique() # 3명 (1, 2, 3) 
cart_users = max_step_user[max_step_user['step'] >= 2]['user_id'].nunique() # 1명 (1)
purchase_users = max_step_user[max_step_user['step'] >= 4]['user_id'].nunique() # 1명 (2)
  • View Users = 3명 → step=1,2,4인 모든 유저 포함
  • Cart Users = 1명 → step=2,4인 유저 중 step=2 이상
  • Purchase Users = 1명 → step=4 이상

📌전환율 분석

funnel = pd.DataFrame({
    'Stage': ['View', 'Cart',  'Purchase'],
    'Users': [view_users, cart_users, purchase_users]
})

funnel['Conversion Rate'] = funnel['Users'] / funnel['Users'].shift(1)
funnel['Conversion Rate'].iloc[0] = 1  # 첫 단계(View)는 전환율 100%
funnel['Conversion Rate'] = funnel['Conversion Rate'] * 100

print(funnel)

 

전환율 계산 

  • shift(1)을 이용해 이전 단계 대비 전환율 계산
    • 예: cart_users / view_users
    • 예: purchase_users / cart_users
  • 첫 번째 단계(View)는 기준점이므로 전환율 100%로 설정
  • 백분율(%)로 변환하여 가독성 향상

 

📊 최종적으로 얻을 결과

Stage Users Conversion Rate
View 391005 100.0000
Cart 91696 23.451363
Purchase 25759 28.091738

 

📌분석 인사이트

  1. View-to-Cart 전환율: 약 23.45%로, 사이트를 방문한 사용자 중 약 1/4만이 장바구니에 상품을 담음
  2. Cart-to-Purchase 전환율: 약 28.09%로, 장바구니에 상품을 담은 사용자 중 약 1/4만이 실제 구매로 이어짐
  3. 전체 전환율(View-to-Purchase): 약 6.59%(25,759/391,005)로, 사이트 방문자 중 실제 구매로 이어지는 비율은 상당히 낮음

 

 

여기까지 퍼널분석의 기본 전환율에 대해 살펴보았다.

실제 비즈니스 환경에서는 장바구니 이탈원인 분석과  이탈이 빈번히 발생하는 단계에서의 효율적인 대처 방법 제시 등을 통해 이탈 방지 조건을 제시 할 수 있을 것 같다.

 

향후에 제품별/카테고리별 전환율, 가격대별 전환율 등을 파악해 보면 좋을 것 같다.