추가 분석 이유
이전 분석에서는 Device, User Type, Source, Price Band, Category 등 다양한 가설을 통해 장바구니 전환율 저하 원인을 탐색했다. 그러나 단순 EDA 결과만으로는 어떤 요인이 실제 핵심 변수인지 확정하기 어려웠다. 따라서 Day 5에서는 통계적 검증을 통해 실제 영향력 있는 요인을 선별하고, 우선순위를 재정렬하고자 했다.
이전 분석에서 어떤 가설을 세웠는가?
| 가설 | 왜 봤는가 | 초기 결과 |
| Device | 모바일 UX 문제 여부 | 차이 작음 |
| User Type | 신규 유저 장벽 여부 | 차이 작음 |
| Source | 유입 채널 품질 | 일부 차이 |
| Price Band | 가격 민감도 | 차이 큼 |
| Category | 상품 경쟁력 | 차이 큼 |
초기 EDA 결과 Price Band와 Category가 가장 영향력 높은 후보로 판단되어 우선 검증 대상으로 선정했다
왜 통계 검증이 필요했는가?
보이는 차이와 실제 차이는 다르다
예시)
- Low: 25%
- High: 20%
차이가 있어 보이지만, 표본 수 / 우연 / 분산 영향일 수도 있어서 통계 검증이 필요
사용한 방법
1. Chi-Square
여러 그룹 전체 차이 검정
(Price 전체 / Category 전체)
2. Two-Proportion Z-Test
두 그룹 직접 비교
(Low vs High / Bags vs Home)
먼저 전체 구조 차이가 있는지 확인하고 이후 실제 어떤 그룹 차이가 큰지 직접 비교했다.
Price Band 검증 – 가격은 실제 중요한가?
Price Band는 EDA 기준 가장 직관적임
[Price Band 그래프 삽입]
[Low > Mid > High]
전처리
장바구니 전환 여부를 통계적으로 검정하기 위해 각 그룹별 view_sessions 대비 cart_sessions뿐 아니라, 장바구니에 담지 않은 세션(not_cart_sessions)을 함께 계산해 contingency table 형태로 구성했다.
Price Band Chi-Square
from scipy.stats import chi2_contingency
price_table = price_df[
["cart_sessions", "not_cart_sessions"]
].values
chi2, p, dof, expected = chi2_contingency(price_table)
print("=== Price Band Chi-Square Test ===")
print("Chi-Square:", chi2)
print("p-value:", p)
print("Degrees of Freedom:", dof)
low_rate = 25.43
high_rate = 20.15
lift = (low_rate - high_rate) / high_rate * 100
print("lift",lift)

Low vs High Two-Proportion Z-Test
from statsmodels.stats.proportion import proportions_ztest
low = price_df[price_df["price_band"] == "Low"].iloc[0]
high = price_df[price_df["price_band"] == "High"].iloc[0]
count = [low["cart_sessions"], high["cart_sessions"]]
nobs = [low["view_sessions"], high["view_sessions"]]
stat, pval = proportions_ztest(count, nobs)
print("=== Low vs High Z-Test ===")
print("Z-stat:", stat)
print("p-value:", pval)

해석
- p-value < 0.001
- Low vs High +26% Lift
저가 상품은 단순히 “조금 더 높은 수준”이 아니라, 실제로 장바구니 진입률이 구조적으로 높았습니다.
실무적 생각
- 저가 진입 상품
- 할인
- 엔트리 전략
- 같은 가격 정책이 중요할 가능성이 높음
“가격은 실제 핵심 변수였다.”
Category 검증 – 상품군 자체가 중요한가?
가격만으로 설명 안 될 수 있기 때문
같은 가격이어도 어떤 상품군은 잘 담기고 어떤 상품군은 안 담길 수 있음
Category Chi-Square
category_table = category_df[
["cart_sessions", "not_cart_sessions"]
].values
chi2_cat, p_cat, dof_cat, expected_cat = chi2_contingency(category_table)
print("=== Category Chi-Square Test ===")
print("Chi-Square:", chi2_cat)
print("p-value:", p_cat)
print("Degrees of Freedom:", dof_cat)

Top 10 Category
| item_category | view_sessions | cart_sessions | add_to_cart_rate | not_cart_sessions |
|
| 48 | Home/Stationery/Writing/ | 976 | 399 | 40.88 | 577 |
| 47 | Home/Apparel/Hats/ | 6226 | 2529 | 40.62 | 3697 |
| 46 | Writing | 413 | 149 | 36.08 | 264 |
| 45 | Home/Stationery/Stickers/ | 1583 | 514 | 32.47 | 1069 |
| 44 | Home/Shop by Brand/#IamRemarkable/ | 102 | 32 | 31.37 | 70 |
| 43 | Drinkware | 3361 | 1037 | 30.85 | 2324 |
| 42 | Campus Collection | 1529 | 467 | 30.54 | 1062 |
| 41 | Home/Stationery/Notebooks/ | 2010 | 612 | 30.45 | 1398 |
| 40 | Home/Apparel/Socks/ | 1018 | 310 | 30.45 | 708 |
| 39 | Home/Campus Collection/ | 3142 | 916 | 29.15 | 2226 |
Bottom 10 Category
| item_category | view_sessions | cart_sessions | add_to_cart_rate | not_cart_sessions | |
| 0 | Accessories/ | 106 | 2 | 1.89 | 104 |
| 1 | Backpacks/ | 468 | 19 | 4.06 | 449 |
| 2 | Water Bottles/ | 161 | 15 | 9.32 | 146 |
| 3 | Men's T-Shirts | 372 | 47 | 12.63 | 325 |
| 4 | Home/Shop by Brand/Google Cloud/ | 221 | 28 | 12.67 | 193 |
| 5 | Mugs & Tumblers/ | 242 | 31 | 12.81 | 211 |
| 6 | Bags | 2688 | 356 | 13.24 | 2332 |
| 7 | Home/Shop by Brand/YouTube/ | 4754 | 744 | 15.65 | 4010 |
| 8 | Men's T-Shirts/ | 1810 | 291 | 16.08 | 1519 |
| 9 | Lifestyle/Bags/ | 4796 | 843 | 17.58 | 3953 |
카테고리별 편차가 매우 컸고 단순 가격 외에 상품 구조 / 구매 의도 / 상품력의 영향 가능성이 커 보였습니다.
소표본 제거 (500+)
Accessories 106회, Hats 32회와 같이 극단값 가능성 있음
따라서 view_sessions 500 이상 필터함
카테고리 분석 초기에는 일부 카테고리의 전환율이 매우 높거나 낮게 나타났지만, 표본 수가 지나치게 적은 경우 우연에 의한 왜곡 가능성이 있었다. 따라서 보다 신뢰도 높은 비교를 위해 view_sessions 500 이상 카테고리만 선별해 안정 표본 기준으로 재분석했다.
Stable Top 10 Category
| item_category | view_sessions | cart_sessions | add_to_cart_rate | not_cart_sessions |
|
| 48 | Home/Stationery/Writing/ | 976 | 399 | 40.88 | 577 |
| 47 | Home/Apparel/Hats/ | 6226 | 2529 | 40.62 | 3697 |
| 45 | Home/Stationery/Stickers/ | 1583 | 514 | 32.47 | 1069 |
| 43 | Drinkware | 3361 | 1037 | 30.85 | 2324 |
| 42 | Campus Collection | 1529 | 467 | 30.54 | 1062 |
| 41 | Home/Stationery/Notebooks/ | 2010 | 612 | 30.45 | 1398 |
| 40 | Home/Apparel/Socks/ | 1018 | 310 | 30.45 | 708 |
| 39 | Home/Campus Collection/ | 3142 | 916 | 29.15 | 2226 |
| 38 | Home/Sale/ | 9763 | 2839 | 29.08 | 6924 |
| 37 | Sale | 7887 | 2283 | 28.95 | 5604 |
Stable Bottom 10 Category
| item_category | view_sessions | cart_sessions | add_to_cart_rate | not_cart_sessions | |
| 6 | Bags | 2688 | 356 | 13.24 | 2332 |
| 7 | Home/Shop by Brand/YouTube/ | 4754 | 744 | 15.65 | 4010 |
| 8 | Men's T-Shirts/ | 1810 | 291 | 16.08 | 1519 |
| 9 | Lifestyle/Bags/ | 4796 | 843 | 17.58 | 3953 |
| 10 | NaN | 4986 | 909 | 18.23 | 4077 |
| 11 | Eco-Friendly | 2189 | 404 | 18.46 | 1785 |
| 12 | Kids | 1212 | 227 | 18.73 | 985 |
| 13 | Home/Apparel/ | 6548 | 1252 | 19.12 | 5296 |
| 14 | Home/New/ | 5335 | 1030 | 19.31 | 4305 |
| 15 | New | 1499 | 296 | 19.75 | 1203 |
Main Category Grouping
카테고리가 너무 세분화되어 있으면 실무 액션 어려움
예시)
- Home/Drinkware/Mugs
- Home/Drinkware/Bottles
- Lifestyle/Bags
- 상위 카테고리(main_category) 기준 통합
세부 카테고리는 지나치게 분산되어 있어 구조적 패턴을 파악하기 어려웠다. 따라서 item_category의 상위 분류(main_category) 기준으로 그룹핑해 보다 실무적인 수준에서 어떤 상품군 구조가 전환율에 영향을 주는지 재정리했다.
| main_category | view_sessions | cart_sessions | add_to_cart_rate | |
| 3 | Drinkware | 3361 | 1037 | 30.853913 |
| 2 | Campus Collection | 1529 | 467 | 30.542838 |
| 13 | Sale | 7887 | 2283 | 28.946367 |
| 15 | Stationery | 1110 | 307 | 27.657658 |
| 6 | Home | 73639 | 18925 | 25.699697 |
| 17 | Women's | 3470 | 867 | 24.985591 |
| 5 | 2578 | 606 | 23.506594 | |
| 9 | Men's | 7700 | 1779 | 23.103896 |
| 12 | Notebooks | 746 | 172 | 23.0563 |
| 8 | Lifestyle | 18889 | 4298 | 22.753984 |
| 14 | Small Goods | 3068 | 666 | 21.707953 |
| 0 | Apparel | 3191 | 673 | 21.090567 |
| 11 | New | 1499 | 296 | 19.746498 |
| 7 | Kids | 1212 | 227 | 18.729373 |
| 4 | Eco-Friendly | 2189 | 404 | 18.455916 |
| 16 | Unknown | 4986 | 909 | 18.231047 |
| 10 | Men's T-Shirts | 1810 | 291 | 16.077348 |
| 1 | Bags | 2688 | 356 | 13.244048 |
Bags Deep Dive (Bags 심층 분석)
Category가 중요하다고 끝나면 무엇을 개선해야 하는지 모릅니다.
그래서 Category 내부에서 가장 문제 가능성 높은 세부군을 탐색했습니다.
Bags 선택 이유
- 충분한 트래픽
- 낮은 전환율
- 실무 개선 가치 큼
Bags vs Home
Bags vs DrinkWare
Bags vs Non-Bags
from statsmodels.stats.proportion import proportions_ztest
comparison_targets = ["Drinkware", "Sale", "Home"]
bags = stable_grouped_category[
stable_grouped_category["main_category"] == "Bags"
].iloc[0]
for target in comparison_targets:
target_row = stable_grouped_category[
stable_grouped_category["main_category"] == target
].iloc[0]
count = [
bags["cart_sessions"],
target_row["cart_sessions"]
]
nobs = [
bags["view_sessions"],
target_row["view_sessions"]
]
stat, pval = proportions_ztest(count, nobs)
print(f"=== Bags vs {target} ===")
print("Bags Rate:", round(bags["add_to_cart_rate"], 2))
print(f"{target} Rate:", round(target_row["add_to_cart_rate"], 2))
print("Z-stat:", round(stat, 4))
print("p-value:", pval)
print("-" * 40)

- 고성과군 대비 낮음
- 평균 대비 낮음
- 가격보다도 낮음
단순히 비싸서가 아니라 Bags 자체 구조 문제 가능성 있음
- 상세페이지
- 리뷰
- 프로모션
- 무료배송
나머지 가설은 어땠는가?
Device: 유의미하지 않음
User Type: 유의미하지 않음
Source: 일부 유의
누가 들어왔는가? 보다 무슨 상품을 봤는가? 가 더 중요함
최종 우선순위 재정렬
Tier 1
Price Band
Category (특히 Bags)
Tier 2
Source
Tier 3
Device / User Type
처음엔 다양한 가능성을 봤지만 검증 결과 실제 핵심은 Price + Category였습니다.
그래서 무엇을 해야 하는가?
Price : 전사 가격 전략
Category : 상품 구조 전략
Bags : 즉시 실행 대상
- 할인
- 엔트리 상품
- 리뷰 강화
- 무료배송
오늘 분석을 통해 장바구니 전환율의 핵심 병목이 가격과 카테고리 구조에 있음을 확인했다.
다음 단계에서는 장바구니 이후 결제 단계에서 어떤 추가 이탈이 발생하는지 분석할 예정이다.
'프로젝트 > GA4 분석' 카테고리의 다른 글
| [GA4 퍼널 분석] Day6-1 심층 분석 구조 설계 (User Type 핵심 가설 분해하기) (0) | 2026.05.12 |
|---|---|
| [GA4 퍼널 분석] Day5-2 결제 전환율 가설 검증 (Day4 결과 통합) (0) | 2026.05.12 |
| [GA4 퍼널 분석] Day4-4 (begin_checkout → purchase | Price Barrier 분석) (0) | 2026.05.09 |
| [GA4 퍼널 분석] Day4-3 (begin_checkout → purchase | Source Quality 분석) (0) | 2026.05.09 |
| [GA4 퍼널 분석] Day4-2 (begin_checkout → purchase | New vs Returning 분석) (0) | 2026.05.09 |