프로젝트/GA4 분석

[GA4 퍼널 분석] Day3-3 (view_item → add_to_cart | Source / Medium 분석)

조성호 2026. 5. 8. 18:41

상품 조회는 했는데 왜 장바구니에는 담지 않았는가?

가설 : Source / Medium (유입 채널 품질 분석)

- 어떤 유입 채널이 상품 조회는 많지만 장바구니 전환율이 낮은가?

 

Organic Search

  • 검색 의도 있음
  • 구매 가능성 상대적으로 높음

Paid Ads

  • 광고 클릭
  • 호기심/저품질 유입 가능성

Direct

  • 브랜드 인지도
  • 재방문 가능성

Referral

  • 외부 링크
  • 맥락 다양

Paid 낮으면 광고 타겟팅 문제, 랜딩페이지 문제, 메시지 불일치 문제가 있을 수 있음

Organic 높으면 구매 의도 높은 유입이 있을 수 있음

 

1. 유입 경로 확인

유입 채널 정보 추출

- source / medium / session 기준으로 원본 로그에서 유입 경로 정보 추출

SELECT
  user_pseudo_id,

  event_name,

  traffic_source.source AS source,

  traffic_source.medium AS medium,

  (
    SELECT value.int_value
    FROM UNNEST(event_params)
    WHERE key = 'ga_session_id'
  ) AS ga_session_id

FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

WHERE event_name IN ('view_item', 'add_to_cart')

LIMIT 100;
user_pseudo_id event_name source medium ga_session_id
1 1023282.464 view_item <Other> <Other> 7473279052
2 1023282.464 view_item <Other> <Other> 7473279052
3 1023282.464 view_item <Other> <Other> 7473279052
4 1023282.464 view_item <Other> <Other> 7473279052
5 1112823.848 view_item (direct) (none) 4251926878
6 1160488.238 view_item (direct) (none) 2309154775
7 1160488.238 view_item (direct) (none) 2309154775
8 1160488.238 view_item (direct) (none) 2309154775
9 1160488.238 view_item (direct) (none) 2309154775
10 1160488.238 view_item (direct) (none) 2309154775

 

 

2. 세션 퍼널화

세션 기준 퍼널 구조화

- 세션별로 view_item / add_to_cart 여부를 생성하여 source·medium별 퍼널 테이블 구성

WITH funnel AS (

  SELECT
    -- 사용자 고유 식별자
    user_pseudo_id,

    -- 유입 출처
    -- 예: google, youtube, direct
    traffic_source.source AS source,

    -- 유입 방식
    -- 예: organic, referral, cpc
    traffic_source.medium AS medium,

    -- 세션 고유 ID 생성
    -- user_pseudo_id + ga_session_id
    CONCAT(
      user_pseudo_id,
      '-',
      CAST((
        -- event_params에서 ga_session_id 추출
        SELECT value.int_value
        FROM UNNEST(event_params)
        WHERE key = 'ga_session_id'
      ) AS STRING)
    ) AS session_id,

    -- 해당 세션에서 상품 조회(view_item) 여부
    -- 있으면 1 / 없으면 0
    MAX(CASE WHEN event_name = 'view_item' THEN 1 ELSE 0 END) AS viewed,

    -- 해당 세션에서 장바구니(add_to_cart) 여부
    -- 있으면 1 / 없으면 0
    MAX(CASE WHEN event_name = 'add_to_cart' THEN 1 ELSE 0 END) AS added_to_cart

  -- GA4 원본 이벤트 로그
  FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

  -- 이번 분석에서는 상품 조회 / 장바구니 이벤트만 필요
  WHERE event_name IN ('view_item', 'add_to_cart')

  -- 세션 단위 + source / medium 기준 요약
  GROUP BY
    user_pseudo_id,
    source,
    medium,
    session_id
)

-- 중간 결과 확인
SELECT *

FROM funnel

LIMIT 100;
user_pseudo_id source medium session_id viewed added_to_cart
1 4138636.434 google organic 4138636.4341461287-8267670643 1 1
2 4857199.687 google organic 4857199.6869358514-7311778196 1 0
3 5255924.991 <Other> referral 5255924.9909295051-5237789286 1 1
4 5602269.681 (direct) (none) 5602269.6807855534-7692358858 1 1
5 6818420.339 shop.googlemerchandisestore.com referral 6818420.3391475389-5377213827 1 0
6 7318445.051 google cpc 7318445.0506478359-5140084861 1 0
7 8502784.219 shop.googlemerchandisestore.com referral 8502784.2188423785-7691815836 1 0
8 9923051.351 <Other> <Other> 9923051.3507267991-4934100383 1 1
9 13136982.77 google organic 13136982.7705392135-8321137349 1 0
10 25815856.01 google cpc 25815856.0100278498-4316134505 1 0

 

3. 최종 전환율 계산

유입 채널별 전환 성과 비교

- source / medium별 상품 조회 세션, 장바구니 세션, 장바구니 전환율 계산

-- Source / Medium별
-- view_item → add_to_cart 전환율 분석
-- 목표:
-- "어떤 유입 채널의 트래픽 품질이 낮은가?"

WITH funnel AS (

  SELECT
    -- 사용자 ID
    user_pseudo_id,

    -- 유입 채널
    traffic_source.source AS source,

    -- 유입 매체
    traffic_source.medium AS medium,

    -- 세션 ID
    CONCAT(
      user_pseudo_id,
      '-',
      CAST((
        SELECT value.int_value
        FROM UNNEST(event_params)
        WHERE key = 'ga_session_id'
      ) AS STRING)
    ) AS session_id,

    -- 상품 조회 여부
    MAX(CASE WHEN event_name = 'view_item' THEN 1 ELSE 0 END) AS viewed,

    -- 장바구니 여부
    MAX(CASE WHEN event_name = 'add_to_cart' THEN 1 ELSE 0 END) AS added_to_cart

  FROM `bigquery-public-data.ga4_obfuscated_sample_ecommerce.events_*`

  WHERE event_name IN ('view_item', 'add_to_cart')

  GROUP BY
    user_pseudo_id,
    source,
    medium,
    session_id
)

SELECT

  -- source / medium 조합
  source,
  medium,

  -- 상품 조회 세션 수
  COUNTIF(viewed = 1) AS view_sessions,

  -- 장바구니 세션 수
  COUNTIF(added_to_cart = 1) AS cart_sessions,

  -- 장바구니 전환율
  ROUND(
    SAFE_DIVIDE(
      COUNTIF(added_to_cart = 1),
      COUNTIF(viewed = 1)
    ) * 100,
    2
  ) AS add_to_cart_rate

FROM funnel

WHERE viewed = 1

GROUP BY
  source,
  medium

-- 너무 적은 표본 제외
HAVING view_sessions >= 100

ORDER BY add_to_cart_rate ASC;
source medium view_sessions cart_sessions add_to_cart_rate
1 google cpc 3167 564 17.81  
2 google organic 23663 4339 18.34  
3 <Other> <Other> 10589 1981 18.71  
4 <Other> organic 2077 394 18.97  
5 <Other> referral 7455 1457 19.54  
6 (direct) (none) 17678 3507 19.84  
7 shop.googlemerchandisestore.com referral 6634 1459 21.99  
8 (data deleted) (data deleted) 5656 1450 25.64  

 

가설

어떤 유입 채널이 상품 조회는 많지만 장바구니 전환율이 낮은가?

 

결과 1

google / cpc (유료 광고)가 가장 낮음

 

해석

Paid Traffic 품질이 상대적으로 낮을 가능성

광고 클릭은 유입은 되지만, 상품 조회 → 장바구니 전환 효율이 낮음

 

가능한 가설

1. 광고 타겟팅 문제

  • 관심 낮은 사용자 유입
  • broad targeting 가능성

2. 랜딩페이지 문제

  • 광고 메시지와 상품 상세 불일치

3. 가격 경쟁력 문제

  • 광고 보고 들어왔지만 가격 비교 후 이탈

결과 2

google / organic도 낮은 편

 

해석

검색 유입 자체는 많지만 기대보다 장바구니 전환이 높지 않음

 

가능성

  • 정보 탐색 목적 검색
  • 가격 비교
  • 브랜드 검색 후 탐색

결과 3

Direct는 상대적으로 높음

 

해석

브랜드 인지도 / 재방문 / 구매 의도 가능성 있음

직접 방문자는 광고 유입보다 질이 좋음

 

결과 4

shop.googlemerchandisestore.com referral 높음

 

해석

내부 추천 / 브랜드 관련 경로 / 연관성 높은 유입 가능성 있음

즉, 브랜드 관련 referral은 전환 효율 우수

 

전체 구조 핵심

광고 → 조회는 많음 → 장바구니 효율 낮음

 

액션

A. 광고 키워드 정교화

B. 광고 문구와 랜딩페이지 상품 일치도 개선

C. 첫 화면 가격/혜택 정보 강화

 

 

Source/Medium별 퍼널 분석 결과 google/cpc 유입의 상품 조회 대비 장바구니 전환율이 가장 낮게 나타나 광고 유입 품질 또는 랜딩페이지 메시지 일치도 개선 필요성을 확인했음

광고는 트래픽은 잘 만들지만, 장바구니 전환 효율이 낮음