📌 목차
1. 프로젝트의 목적 : 주문율 개선
2. 현황 파악 : 주문 수, 퍼널 분석, 리텐션 분석
3. 분석 결과
4. 가설 설정
핵심 내용
- 프로젝트 목적 설정
- 프로젝트 목적에 따른 현황 파악 : 개선점 찾기
- 사용자 세그먼트별 주문 전환율 및 재방문율 분석
- 문제 정의를 위한 가설 설정
이번 글에서는 프로젝트의 목적 설정 후, 현황을 파악하고 문제를 정의하기 위해 여러 가설을 설정하는 과정을 다루었다.
1. 프로젝트의 목적 : 주문율 개선
결국 배달 서비스에서 가장 중요한 것은, 사용자가 얼마나 주문했는가? 이다 > 주문율
사용자가 서비스를 방문하더라도 실제로 주문을 하지 않는다면, 서비스 개선이 필요하다고 볼 수 있다.
따라서 프로젝트의 목적은 '사용자의 주문율 향상' 이며,
이를 위해 '주문하지 않는 요인을 파악하고 개선점을 발견하기'를 주요 과제로 선정했다.
2. 현황 파악 : 주문 수, 퍼널 분석, 리텐션 분석
프로젝트 목적에 따라 개선점을 발견하기 위해 '주문 수'와 주문까지 이어지는 단계별 퍼널을 분석하였다.
2.1 주문 수 및 주문율
주문 수 별 사용자 수 count
주문 수 | 사용자 수 | 전체 사용자 수 대비 비율(%) |
0 | 38,211 | 76.92 |
1 | 9,958 | 20.05 |
2 | 1,341 | 2.70 |
3 | 153 | 0.31 |
4 | 15 | 0.03 |
단순 주문율
주문율 (%) = (결제 클릭 수 / 홈 화면 노출 수) × 100
- groupby(['user_id', 'session_id']) 를 사용하여 유저와 세션 조합별로 그룹화
- .ngroups 속성을 활용해 그룹 개수(유저-세션 조합 수) 추출
지표 | 정의 | 계산 방식 | 값 |
홈 화면 노출 수 | 사용자가 홈 화면을 방문한 세션 수 | screen_view 이벤트 중 string_value == 'home' 인 세션 개수 | 106,233 |
주문 수 | 사용자가 결제 버튼을 클릭한 세션 수 | click_payment 이벤트 발생한 세션 개수 | 43,531 |
주문율 | 결제 버튼을 클릭한 세션 비율 | (주문 수 / 홈 화면 노출 수) * 100 | 40.98% |
- 전체 106,233개의 홈 화면 노출 중 43,531개의 세션에서 결제 클릭이 발생
- 단순 계산에 의한 주문율은 40.98%
2.2 퍼널 분석
퍼널 분석
- 지표의 의미 - 퍼널, 깔때기
- 제품에서 설계한 의도대로 유저들이 퍼널을 지나는지 확인하는 분석
- 제품에서 특정 결과에 도달하는데 필요한 단계를 정의하고 활용
출처 : PM을 위한 데이터 리터러시
퍼널 분석 진행 목적 : 중요성
- 사용자가 (설계한 의도대로) 단계를 진행하고 있는지 확인하기 위함
- 서비스 사용 여정 내에서 어느 단계에서 많이 이탈하는지 파악하고 개선점을 찾기 위함
- 이탈 지점 개선 : 사용자 경험 개선 → 전환율 높이기
퍼널 설계 : 퍼널 순서, 퍼널 기준 정의
퍼널 순서
1. 방문 단계 > 2. 탐색 단계 > 3. 장바구니 단계 > 4. 결제 시도 단계
퍼널 기준 정의
퍼널 분석을 위해 각 단계별 퍼널을 다음과 같이 정의했다.
퍼널 (단계) | 이벤트 | 설명 |
1. 방문 단계 | screen_view | 홈 화면 조회 |
2. 탐색 단계 | click_search, request_search, click_food_category, click_restaurant, click_restaurant_nearby, click_recommend_food, click_banner |
검색 클릭, 검색 요청, 음식 카테고리 클릭, 식당 클릭, 근처 식당 클릭, 추천 음식 클릭, 배너 클릭 |
3. 장바구니 단계 | click_cart | 카트에 담기 클릭 |
4. 결제 시도 단계 | click_payment | 결제하기 클릭 |
1. 방문 단계
- 방문 기준 : 첫 화면 home 에서 screen_view 이벤트가 발생한 시점
- 화면 : home
- 이벤트 : screen_view
# 방문 단계 : visit_stage
visit_stage = df[
(df['event_name'] == 'screen_view') &
(df['string_value'] == 'home')
]
2. 탐색 단계
- 탐색 기준 : 방문 단계 이후, 탐색 단계로 간주한 이벤트를 발생시킨 시점
- 방문 단계에 해당되는 user_id와 session_id의 조합 (tuple)로 필터링
- 이벤트 : click_search, request_search, click_food_category, click_restaurant,
click_restaurant_nearby, click_recommend_food, click_banner
# 탐색 단계 : explore_stage
explore_stage = df[
(df[['user_id', 'session_id']].apply(tuple, axis=1).isin(visit_sessions.apply(tuple, axis=1))) & # 방문 단계 유저 아이디 + 세션 포함
(df['event_name'].isin(['click_search', 'request_search', 'click_food_category',
'click_restaurant', 'click_restaurant_nearby',
'click_recommend_food', 'click_banner']))
3. 장바구니 단계
- 장바구니 기준 : 탐색 단계 이후, 카트에 담기 버튼을 클릭한 시점
- 탐색 단계에 해당되는 user_id와 session_id의 조합 (tuple)로 필터링
- 이벤트 : click_cart
# 장바구니 단계 : cart_stage
cart_stage = df[
(df[['user_id', 'session_id']].apply(tuple, axis=1).isin(explore_sessions.apply(tuple, axis=1))) & # 탐색 단계 유저 아이디 + 세션 포함
(df['event_name'] == 'click_cart')
4. 결제 시도 단계
- 결제 시도 기준 : 장바구니 단계 이후, 결제하기 버튼을 클릭한 시점
- 장바구니 단계에 해당되는 user_id와 session_id의 조합 (tuple)로 필터링
- 이벤트 : click_payment
payment_stage = cohort_df[
(cohort_df[['user_id', 'session_id']].apply(tuple, axis=1).isin(cart_sessions.apply(tuple, axis=1))) & # 장바구니 단계 유저 아이디 + 세션 포함
(cohort_df['event_name'] == 'click_payment')
*세션 아이디 중복 확인
이때, 각 단계별 퍼널에서 user_id와 session_id를 조합하여 필터링하는 조건을 추가했다
중복 세션 아이디 확인 과정
각 케이스 정리
- Case 1 : 다른 user_id 이면서 같은 날짜, 세션 아이디가 같은 경우
- Case 2 : 같은 user_id, 다른 날짜, 세션 아이디가 같은 경우 (없음)
- Case 3 : 다른 user_id, 다른 날짜, 세션 아이디가 같은 경우
# 중복된 session_id 확인
duplicate_sessions = (
filtered_df.groupby('session_id')
.nunique()
.query('user_id > 1 or event_date > 1')
.index
)
# 중복된 session_id를 가진 데이터 필터링
duplicated_data = filtered_df[filtered_df['session_id'].isin(duplicate_sessions)]
# 중복된 세션에 대한 경우 분석
case_1 = filtered_df.groupby('session_id').filter(
lambda x: len(x['user_id'].unique()) > 1 and len(x['event_date'].unique()) == 1
) # 같은 세션, 같은 날짜, 다른 user_id
case_2 = filtered_df.groupby('session_id').filter(
lambda x: len(x['user_id'].unique()) == 1 and len(x['event_date'].unique()) > 1
) # 같은 세션, 같은 user_id, 다른 날짜
case_3 = filtered_df.groupby('session_id').filter(
lambda x: len(x['user_id'].unique()) > 1 and len(x['event_date'].unique()) > 1
) # 같은 세션, 다른 user_id, 다른 날짜
확인 결과
Case 1: 같은 세션, 같은 날짜, 다른 user_id
중복 세션 수: 1221652
고유 세션 수: 91362
Case 2: 같은 세션, 같은 user_id, 다른 날짜
중복 세션 수: 0
고유 세션 수: 0
Case 3: 같은 세션, 다른 user_id, 다른 날짜
중복 세션 수: 10754
고유 세션 수: 503
user_id 혹은 session_id 로만 필터링했을 경우 예상되는 문제점
- 필터링 조건을 user_id만 설정하면, 동일한 사용자가 서로 다른 세션에서 수행한 이벤트가 연속된 행동인 것처럼 잘못 인식될 수 있고,
- 반대로, session_id만 조건으로 설정하면 서로 다른 사용자의 동일한 세션 ID를 공유하는 경우 문제가 발생할 수 있다고 생각했다.
→ 따라서 이를 방지하기 위해, user_id와 session_id의 조합을 기준으로 필터링하여 동일한 사용자, 동일한 세션 내에서의 행동만을 추적할 수 있도록 코드를 추가했다.
순서 : 필터링 과정
- 필터링을 위한 기준 데이터 추출
- 특정 퍼널 단계에서 user_id와 session_id 조합을 포함한 고유 리스트를 생성
- visit_sessions = df[['user_id', 'session_id']].drop_duplicates()
- user_id와 session_id를 하나의 단위(튜플)로 변환
- 데이터 프레임의 각 행(row)에 대해 (user_id, session_id)를 하나의 튜플로 처리
- df[['user_id', 'session_id']].apply(tuple, axis=1)
- 이전 단계에서 추출한 (user_id, session_id) 조합을 기준으로 필터링
- .isin()을 사용하여 현재 단계의 (user_id, session_id)가 이전 단계에 존재하는지 확인
- explore_stage = df[ (df[['user_id', 'session_id']].apply(tuple, axis=1) .isin(visit_sessions.apply(tuple, axis=1)))
- 반복!
→ 이전 단계에 있었던 동일한 user_id와 session_id 조합을 가진 데이터만 유지하여 다음 단계의 행동을 추적함
2.3 세그먼트 분석
세그먼트
사용자를 비슷한 특징에 따라 분류한 그룹
세그먼트 분석 진행 목적 : 중요성
- 사용자 그룹별 행동 차이를 분석
- 주문율 향상을 위한 개선점 도출
- 주문 횟수가 낮은 그룹의 주요 이탈 요인 파악
세그먼트 분류 기준 : 주문 횟수(click_payment Count)
(1) 분류 기준 선정 이유
- 분석 목표 : 분석 목표가 주문율 향상이므로, 이를 직접적으로 측정할 수 있는 주문 횟수를 기준으로 설정
- 사용자 참여도 : 주문 횟수는 서비스 이용의 핵심 액션(결제 시도)을 가장 잘 나타내는 지표, 서비스 참여도를 직접 반영하는 핵심 지표
(2) 세그먼트 분류
- 각 주문 수로 분류한 세그먼트 별로 퍼널 시각화를 진행, 단계별 전환율을 파악했다.
주문 횟수 | 세그먼트 | 설명 |
0회 | 잠재 고객 | 방문했지만 주문하지 않은 사용자 |
1회 | 저관여 고객 | 한 번만 주문한 사용자 |
2~3회 | 고관여 고객 | 반복 주문을 시작한 사용자 |
4회 | 충성 고객 | 지속적으로 서비스를 이용하는 사용자 |
세그먼트 별 사용자 수
주문 횟수 | 사용자 수(user_count) |
0회 | 38,211 |
1회 | 9,958 |
2회 | 1,341 |
3회 | 153 |
4회 | 15 |
세그먼트 별 단순 주문율
세그먼트 별 주문율 (%) = (세그먼트 별 결제 클릭 수 / 세그먼트 별 홈 화면 노출 수) × 100
- 홈 화면(screen_view + home)을 경험한 유저-세션(user_id, session_id) 조합만 필터링
- click_payment 이벤트도 위에서 필터링한 유저-세션 한정으로 계산
- 각 세그먼트별 홈 화면 방문 및 주문 이벤트를 계산하여 주문율 계산
주문 횟수 | 방문 수 | 주문 수 | 주문율(%) |
1회 | 3,871 | 1,417 | 36.61 |
2~3회 | 1,225 | 474 | 38.69 |
4회 | 32 | 12 | 37.50 |
잠재 고객 : 주문 횟수 0회
- 회원 유저 → user_id : not null
- click_payment 이벤트를 발생시키지 않은 로그 데이터
# 결제 이벤트가 발생한 (user_id, session_id) 페어 추출
payment_pairs = filtered_df[filtered_df['event_name'] == 'click_payment'][['user_id', 'session_id']]
# 결제 이벤트가 없는 데이터 필터링
# user_id와 session_id 조합이 payment_pairs에 없는 데이터를 유지
lead_df = filtered_df.merge(payment_pairs, on=['user_id', 'session_id'], how='left', indicator=True)
lead_df = lead_df[lead_df['_merge'] == 'left_only'].drop(columns=['_merge'])
방문 세션별 결제 여부로 분석하는 이유
일반적으로 유저를 "결제 유저 vs. 비결제 유저"로 구분하지만, 같은 유저라도 모든 방문 세션에서 결제를 하는 것은 아님 → 분석 한계가 존재할 수 있다고 보았다.
따라서, 같은 유저라도 방문한 세션마다 행동이 다를 수 있기 때문에 "방문했지만 결제로 이어지지 않은 세션"을 분석하는 것이 필요했고, "주문 의향이 있었으나 결제하지 않은 사용자"로 정의하여 "결제 시도 전환 과정에서 발생하는 이탈 원인"을 더 명확하게 파악하고자 했다,
데이터 추출 목적
- 결제하지 않은 세션의 행동 패턴 분석
- 이탈한 세션에서 사용자가 어떤 행동을 했는지 파악 → 전환율 개선 포인트 도출
- 세션 단위 분석의 필요성
- "결제한 유저"로만 분석하면, 결제하지 않은 세션의 문제를 놓칠 수 있음
- A 유저가 하루 동안 3번 방문했는데, 그중 2번은 결제를 하지 않고 이탈했다면?
- 세션 단위로 분석하면, 어떤 방문에서 결제가 발생하고, 어떤 방문에서 이탈하는지 비교 가능
데이터 추출 방식
- 결제 이벤트(click_payment)가 발생한 (user_id, session_id) 페어를 추출
- 결제한 세션을 제외하여, "결제가 이루어지지 않은 세션"을 필터링
- 결제한 세션 vs. 결제하지 않은 세션을 비교 분석하여 인사이트 도출
데이터셋 | 설명 |
잠재 고객(lead_df) | 특정 세션에서만 결제하지 않은 데이터 (유저가 결제한 적 있을 수도 있음) |
저관여 고객 : 주문 횟수 1회
- 회원 유저 → user_id : not null
- click_payment 이벤트를 발생시킨 로그 데이터 + 주문 횟수 1회
- df[(df['event_name'] == 'click_payment') & (df['key'] == 'session_id')]
- order_count == 1
고관여 고객 : 주문 횟수 2~3회
- 회원 유저 → user_id : not null
- click_payment 이벤트를 발생시킨 로그 데이터 + 주문 횟수 2~3회
- df[(df['event_name'] == 'click_payment') & (df['key'] == 'session_id')]
- 2 <= order_count <= 3
충성 고객 : 주문 횟수 4회
- 회원 유저 → user_id : not null
- click_payment 이벤트를 발생시킨 로그 데이터 + 주문 횟수 4회
- df[(df['event_name'] == 'click_payment') & (df['key'] == 'session_id')]
- order_count >= 4
퍼널 분석에 활용되는 데이터셋
주문 횟수 별 세그먼트 필터링
# 주문 이벤트 필터링
filtered_orders = filtered_df[(filtered_df['event_name'] == 'click_payment') & (filtered_df['key'] == 'session_id')]
# 사용자별 주문 횟수 집계
user_order_counts = (
filtered_orders.groupby('user_id')
.size()
.reset_index(name='order_count')
)
# 주문 횟수별 사용자 수 집계
order_count_distribution = (
user_order_counts.groupby('order_count')
.size()
.reset_index(name='user_count')
)
세그먼트 분류
# 주문 횟수에 따라 세그먼트를 분류하는 함수 정의
def classify_segment(order_count):
if order_count == 1:
return 'Low Order Segment' # 주문 1회
elif 2 <= order_count <= 3:
return 'Medium Order Segment' # 주문 2~3회
else:
return 'High Order Segment' # 주문 4회 이상
# 세그먼트 컬럼 생성
user_orders['order_segment'] = user_orders['order_count'].apply(classify_segment)
# 세그먼트별 사용자 수 집계
order_segment_summary = (
user_orders.groupby('order_segment')
.size()
.reset_index(name='user_count')
)
데이터셋 | 설명 |
저관여 고객(low_order_df) | 주문을 1번만 한 유저들의 전체 세션 데이터 |
고관여 고객(medium_order_df) | 주문을 2~3번 한 유저들의 전체 세션 데이터 |
충성 고객(high_order_df) | 주문을 4번 한 유저들의 전체 세션 데이터 (최대 주문 횟수) |
2.4 리텐션 분석
리텐션 : Retention
- 단어의 의미
(어떤 것을 잃지 않는) 유지 상태 - 지표의 의미
서비스를 사용한 사람이 다시 사용하는 비율
출처 : PM을 위한 데이터 리터러시
리텐션 기준 정의 : 방문 기준
분모 : 특정 기간(YYYY-MM) 동안 처음 방문/결제한 사용자 수
분자 : 특정 기간(YYYY-MM) 동안 처음 방문 이후 다시 방문/결제한 사용자 수
(1) 방문 기준 리텐션
- 정의 : 사용자가 특정 기간(월) 동안 홈 화면을 조회한 후, 이후 기간에 다시 홈 화면을 조회한 비율을 측정
- 이벤트 기준 : screen_view 이벤트 발생 & firebase_screen 값이 'home'
- df[(df['string_value']== 'home') & (df['key']== 'firebase_screen') & (df['event_name']== 'screen_view')]
(2) 리텐션 분석 방법
- 첫 방문(First Visit) 월을 기준으로 사용자 그룹을 코호트로 나눔
- 이후 각 월별 동일한 사용자들의 재방문 여부를 분석
- FirstVisit과 VistPeriod를 기준으로 코호트별 리텐션 계산
- 월별 리텐션율(%)을 계산
2.5 코호트 분석
코호트 : Cohort
- 통계적으로 동일한 특색이나 행동 양식을 공유하는 집단
- 보통 가입일자 기준으로 많이 파악
- 가입한지 몇주가 될 때까지 남아있는가?
출처 : PM을 위한 데이터 리터러시
잠재 고객 : 주문 횟수 0회 재방문율
저관여 고객 : 주문 횟수 1회 재방문율
고관여 고객 : 주문 횟수 2-3회 재방문율
충성 고객 : 주문 횟수 4회 재방문율
- 2022-10 Cohort의 높은 재방문 유지율 → 1~3개월 차까지 재방문율이 100%로 유지
- 2022-08-31 코호트의 1개월 차(2022년 9월)의 재방문율 0% → 해당 기간에 첫 방문했던 유저들이 다음 달(9월)에 단 한 명도 재방문하지 않았음을 의미함
2.6 세그먼트 별 재방문 수
분석 결과
사용자 세그먼트를 기준으로 재방문 수를 분석한 결과, 주문 횟수가 많을수록 재방문 빈도도 증가하는 경향이 나타났다.
- 주문 경험이 없는 사용자(0회)도 일정 수준의 재방문(평균 3.17회)을 보였지만, 실제 주문으로 이어지지 않았음
- 주문 1회 사용자는 평균 3.14회 재방문하여, 주문 경험이 없는 그룹과 큰 차이가 없음
- 주문 2~3회 사용자의 재방문 평균값은 3.83회로 증가, 최빈값(4회)도 주문 1회 그룹보다 높음
- 주문 4회 이상 사용자는 평균 5.93회로 가장 높은 재방문율을 기록
(1) 방문 데이터 필터링
- firebase_screen 값이 'home'이고,
- event_name이 'screen_view'인 데이터만 추출
(2) 사용자별 총 방문 횟수 계산
- 각 user_id가 방문한 총 횟수
- 이때, 같은 날 여러 번 방문한 경우도 포함하여 집계
(3) 재방문 수 데이터 병합 및 처리
- 사용자별 총 방문 횟수를 원본 데이터에 추가
- 재방문 횟수가 없는 경우 0으로 채움
(4) 2회 이상 재방문한 사용자 필터링
- 2회 이상 방문한 사용자만 포함하여 세그먼트별로 데이터를 분류
주문 수(세그먼트) | 재방문자 수 | 재방문수 최빈값(회) | 재방문수 평균값(회) | 재방문수 중앙값(회) |
주문 수 0 | 31,520 | 2 | 3.17 | 3 |
주문 수 1 | 7,700 | 2 | 3.14 | 3 |
주문 수 2~3 | 1,494 | 4 | 3.83 | 4 |
주문 수 4 | 15 | 5 | 5.93 | 6 |
결론
- 주문 경험이 없는 사용자도 일정 횟수 이상 방문하지만, 구매로 이어지지 않는 패턴이 존재함
- 첫 주문 후에도 재방문 패턴에 큰 차이가 없어, 추가적인 전환 포인트가 필요함
- 주문 횟수가 늘어날수록 재방문이 증가하는 점을 고려하면, 재방문 수에 따른 주문 수 증가를 고려해볼 수 있음
3. 분석 결과
3.1 주문 수
- 전체 로그 데이터의 77%가 주문을 한 번도 하지 않음
- 1회 주문자 20%, 2~3회 주문자 0.31%로 나타남
- 4개의 세그먼트에서 주문 0회인 경우가 가장 많고, 그다음으로 1회, 2~3회, 4회 이상 순으로 분포
→ 주문율을 높이기 위해서는 결국 주문 0회 사용자를 1회 주문자로 전환하는 것이 가장 효과적
3.2 세그먼트 별 퍼널 전환율
- 주문 횟수가 많을수록 구매 퍼널(방문 → 탐색 → 장바구니 → 결제시도) 전환율이 증가
- 주문 횟수가 많아질수록 장바구니 전환율이 상승
- 특히 주문 0번 세그먼트의 경우, 탐색 → 장바구니 전환율을 높이기 위한 전략 필요
주문 수(세그먼트) | 방문 → 탐색 | 탐색 → 장바구니 | 장바구니 → 결제시도 |
주문 0번 | 28% | 4% | (0%) |
주문 1번 | 33% | 12% | 59% |
주문 2-3번 | 38% | 15% | 63% |
주문 4번 | 40% | 29% | 60% |
3.3 재방문과 주문 횟수의 관계
- 주문 횟수가 많을수록 평균 재방문율이 높음
주문 수(세그먼트) | 평균 재방문율 |
주문 수 0 | 27.50% |
주문 수 1 | 33.87% |
주문 수 2~3 | 48.86% |
주문 수 4 | 78.99% |
3.4 분석 결과 요약
- 주문율을 높이기 위해서는 우선적으로 주문 0회 세그먼트의 주문 전환을 유도하는 것이 핵심 과제
- 장바구니 전환율을 높이는 전략을 통해 주문 0회 세그먼트의 구매 퍼널 이탈을 최소화하는 것이 필요함
- 재방문율이 높을수록 주문율이 증가하는 경향 → 재방문을 유도하는 전략이 주문율 개선에 효과적일 수 있음
4. 문제 정의를 위한 가설 설정
4.1 가설 설정
가설 ❶ : 첫 주문을 하지 않은 사용자는 '담고 싶은 메뉴가 없다'는 이유로 이탈할 가능성이 크다.
- 탐색 단계에서 장바구니로의 전환율이 4%,
- 장바구니 단계에서 이탈하는 비율이 높은 이유는 원하는 메뉴를 찾지 못한 사용자가 많을 것이다.
가설 ❷ : 재방문 횟수가 많을수록 주문율이 높아질 것이다.
- 지속적으로 앱에 방문하는 사용자일수록 사용자는 서비스에 대한 관심도가 높거나,
- 특정 음식을 구매할 의향이 있어 주문 가능성이 커질 것이다.
가설 ❸ : 첫 주문을 하지 않은 사용자는 앱의 탐색 과정에서 불편함을 겪었을 것이다.
- UX/UI의 문제로 인해 탐색이 원활하지 않아서 중간에 이탈했을 것이다.
가설 ❹ : 사용자가 장바구니에 메뉴를 담았지만, 가격이나 배달비 부담으로 인해 최종 주문을 포기했을 것이다.
- 가격이 기대보다 높거나 배달비가 부담된다고 느끼는 경우
가설 ❺ : 리뷰나 식당 정보가 부족하면 사용자의 신뢰도가 낮아져 주문하지 않았을 것이다.
- 충분한 리뷰와 상세한 식당 정보가 제공되지 않으면, 주문 음식 만족도에 대한 확신이 부족하고,
- 사용자는 식당을 신뢰하게 어려웠고 결국 주문을 포기했을 가능성이 있다.
4.2 가설 검증 가능 여부 평가
가설을 검증하기 위해 필요한 핵심 지표를 확인한 후, 실제 데이터에서 검증이 가능한지를 평가
4.2.1 가설 검증 가능
가설 ❶ (담고 싶은 메뉴가 없어서 이탈)
- 확인할 지표:
- 탐색 후 장바구니 전환율 (탐색 → 장바구니 전환 비율)
- 탐색과 장바구니의 일치율 (클릭한 음식과 장바구니에 담은 음식 비교)
- 검증 가능 여부: 주요 지표를 통해 사용자가 원하는 메뉴를 찾았는지 분석할 수 있어 검증 가능
가설 ❷ (재방문 횟수가 많을수록 주문율 증가)
- 확인할 지표:
- 재방문 수 및 재방문율 (세그먼트별 재방문 횟수 및 비율)
- 주문율 (장바구니 → 결제 시도 전환율)
- 검증 가능 여부: 명확한 수치 데이터를 통해 재방문과 주문율의 관계를 분석할 수 있어 검증 가능
4.2.2 가설 검증 불가능 (데이터 부족)
가설 ❸ (탐색 과정에서 불편함을 겪어서 이탈)
- 검증을 위해 필요한 데이터:
- 특정 필터 기능(주문수별, 배달비별, 찜수별, 리뷰순 등)의 존재 여부
- 사용자의 스크롤 패턴 (스크롤을 길게 내렸다면 불편함을 겪었을 가능성)
- 문제점:
- 필터 기능이 없어서 불편했는지 직접 확인할 수 있는 데이터가 없음
- 사용자가 이벤트를 많이 발생시켰다고 해서 탐색이 활발했다고 보기 어려움
- 결론: 검증할 수 있는 핵심 지표가 없어 가설 검증 단계로 진행 불가
가설 ❹ (가격이나 배달비 부담으로 주문 포기)
- 검증을 위해 필요한 데이터 : 장바구니에 담긴 음식의 가격 및 배달비 정보
- 문제점 : 가격 및 배달비 데이터가 제공되지 않아 주문 여부에 영향을 주었는지 확인할 수 없음
- 결론 : 검증할 수 있는 데이터가 없어 가설 검증 단계로 진행 불가
가설 ❺ (리뷰나 식당 정보 부족으로 신뢰도 하락)
- 검증을 위해 필요한 데이터 : 식당 정보 및 주문 후기 데이터
- 문제점: 데이터셋에 리뷰 및 식당 정보가 포함되지 않아 실제 정보 부족 여부를 확인할 수 없음
- 결론: 필요한 데이터를 확보할 수 없어 가설 검증 단계로 진행 불가
4.3 최종 검증 진행 가설
가설 검증 가능 여부
가설 | 내용 | 가능 여부 |
가설 ❶ | 담고 싶은 메뉴가 없어서 이탈했을 가능성이 크다. | O : 검증 가능 |
가설 ❷ | 재방문 횟수가 많을수록 주문율이 높아질 것이다. | O : 검증 가능 |
가설 ❸ | 탐색 과정에서 불편함을 겪어 이탈했을 것이다. | X : 데이터 부족 |
가설 ❹ | 가격이나 배달비 부담으로 주문을 포기했을 것이다. | X : 데이터 부족 |
가설 ❺ | 리뷰·식당 정보 부족으로 신뢰도가 낮아져 주문을 포기했을 것이다. | X : 데이터 부족 |
가설 ❶과 가설 ❷는 검증을 진행할 수 있으며 나머지 가설들은 데이터 부족으로 인해 검증이 어려운 것으로 판단
5. (다음 단계) 가설 검증 및 핵심 지표 설정
가설 검증을 위해 핵심 지표를 선정하고, 이를 바탕으로 사용자 행동 데이터를 분석하여 가설을 검증할 예정이다.
5.1 핵심 지표 선정
가설을 검증하기 위한 핵심 지표 선정
가설 ❶
- 탐색 후 장바구니 전환율 : 탐색 → 장바구니 (메뉴를 발견한 후 장바구니에 추가하는 비율)
- 탐색 <> 장바구니 일치율 : 클릭한 음식 vs 장바구니에 담은 음식 비교
가설 ❷
- 재방문 수 및 재방문율: 세그먼트 별 재방문 횟수 및 재방문율 비교
- 주문율 (장바구니 → 결제 시도 전환율): 세그먼트 별 주문을 진행한 비율
5.2 가설 검증 → 검증 결과에 따른 가설 채택 및 가설 기각
- 주문 0회 사용자 그룹과 주문 1회 이상 사용자 그룹을 비교하여 탐색 및 장바구니 전환율의 차이를 분석
- 재방문에 따른 주문 전환율을 확인하여 재방문이 주문에 미치는 영향을 검증
- 분석 결과를 바탕으로 각 가설을 검증하고, 가설이 통계적으로 유의미한지 판단
- 가설이 채택될 경우, 주문율 개선을 위한 문제 정의 및 액션 플랜 도출
- 가설이 기각될 경우, 새로운 요인 탐색 및 추가 분석 진행
참고
'글또 > project' 카테고리의 다른 글
사이드 프로젝트 : 배달 데이터 분석(3) - 핵심 지표 선정, 가설 검증 및 가설 채택, 문제 정의 (0) | 2025.03.16 |
---|---|
월간 데이터 노트 2월 : 케이크 가심비 프로젝트 (7) | 2025.03.01 |
시간을 지배하는 법 : 데이터 기반 생활 패턴 개선 프로젝트 (1) | 2025.02.01 |
월간 데이터 노트 1월 : 행복 찾기 프로젝트 (5) | 2025.01.25 |
사이드 프로젝트 : 배달 데이터 분석(1) - 사이드 프로젝트 개요, 데이터 탐색 (1) | 2025.01.19 |