일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 주가데이터
- 벅슨의역설
- 프롬프트
- 아하모먼트
- 전환분석
- aha-moment
- 트위먼의법칙
- 데이터분석
- 분석한스푼
- DataAnalyst
- productanalysis
- 데이터디스커버리플랫폼
- EDA
- gapminder
- 인과추론
- pandasai
- 데이터
- retentioneering
- 글또
- data
- 신기효과
- 시각화
- data-analysis
- 프롬프트엔지니어링
- PyGWalker
- DataAnalysis
- n8n
- 성장
- 데이터분석가
- 야구
데이터 생존 로그
🔄데이터 분석가가 써먹는 전환 분석의 다섯 가지 접근법(feat. 로그 데이터, SQL) 본문
0. 개요
🤔전환은 왜 중요한가?
'전환'이라는 지표는 단순히 마케팅 활동의 성과를 넘어, 비즈니스의 핵심 성과 지표(Key Performance Indicator)와 큰 연관성이 있다.
특히 데이터 분석가에게 전환율은 유저 행동 파악, 채널별 마케팅 효과를 분석, 구매로의 전환 등 다양한 관점에서 분석이 필요한 경우가 많다!
유저가 처음 서비스와 만나는 순간부터 구매를 결정하기까지 다양한 접점이 존재하는데, 이 과정을 이해하고 최적화하는 것이 지표 개선에 필수적이기 때문이다.
📊 전환을 다섯 가지 방식으로 구분해서 분석해야하는 이유
유저의 전환 여정은 다층적이고, 하나의 시각만으로는 충분히 설명할 수 없다.
유저가 전환을 위해 거치는 여러 접점을 파악하기 위해서는 다양한 분석 모델을 통해 전환에 대한 포괄적인 이해가 필요하다.
해당 게시글에서는 주요 전환 분석 모델(First Touch, Last Touch, Linear, Time Decay, Position-Based)의 장단점과 계산하는 방법을 알아보도록 하겠다!
1. 전환의 다섯가지 분류
우리가 목표로 하는 행동을 유저가 했다면, 그 유저는 왜 했을까?
이를 파악하기 위해 전환을 분석할 때는 유저의 여정 중 특정 접점에 귀속하여 기여도를 분석하는 방식을 사용한다.
각 모델은 유저 여정에서 특정한 접점을 강조하며, 사용자 행동을 이해하는 데 중요한 단서를 제공한다.
다음은 다섯 가지 주요 전환 분석 모델이다.
[First Touch Attribution(첫 접점 귀속)]
First Touch Attribution은 유저가 브랜드와 처음으로 상호작용한 접점에 전환의 기여도를 부여한다.
이 모델은 유저를 처음 유입시킨 채널이나 콘텐츠의 성과를 측정하는 데 유리하다.
예를 들어, 유저가 소셜 미디어 광고를 통해 처음으로 사이트를 방문했다면, 소셜 미디어 광고를 전환의 주요 기여자로 보는 관점이 되겠다!
- 장점: 첫 접점이 사용자 유입에 얼마나 효과적인지 파악할 수 있어 신규 유입 경로 분석에 유리
- 단점: 전환에 이르는 중간 과정이 반영되지 않아, 전체적인 유저 행동을 이해하기엔 한계가 있음
[Last Touch Attribution(마지막 접점 귀속)]
마지막 접점에 전환을 귀속하는 Last Touch Attribution은 유저가 전환을 이루기 직전의 접점을 분석한다.
최종 구매나 전환 행동에 직접 영향을 미친 요소를 확인하고자 할 때 유용하다.
예를 들어, 유저가 이메일을 통해 상품을 클릭하고 최종 구매했다면, 해당 이메일이 전환의 주요 기여 채널로 평가된다.
- 장점: 구매 직전의 결정적인 접점을 확인할 수 있어, 전환에 직접적인 영향을 미친 채널을 파악하기 용이
- 단점: 초기 접점의 중요성을 반영하지 못해, 전체 여정에 대한 시각이 제한될 수 있음
[Linear Attribution(선형 귀속)]
Linear Attribution은 모든 접점에 동일한 기여도를 부여하는 방식으로, 유저가 전환에 이르기까지 거친 모든 접점을 균형 있게 평가한다.
유저가 여러 접점에서 상호작용할 경우, 각 채널이 기여한 비중을 고르게 측정하는 데 유용하다.
- 장점: 모든 접점의 기여도를 평등하게 고려해, 유저 여정을 전체적으로 이해할 수 있음
- 단점: 특정 접점의 기여도가 더 높을 경우에도 이를 반영하지 못해, 각 접점의 상대적인 영향력을 확인하기 어려움
[Time Decay Attribution(시간 가중 귀속)]
Time Decay Attribution은 시간에 따라 가중치를 부여해, 전환에 가까운 시점의 접점에 더 큰 기여도를 부여한다.
유저가 최종 구매 결정에 가까운 접점일수록 중요한 요소로 간주하는 방식이다.
- 장점: 전환에 직접적인 영향을 미친 접점을 중시할 수 있어, 구매 결정에 가까운 접점을 강조하는 데 효과적
- 단점: 초기 접점의 기여도가 낮게 평가될 수 있어, 전체적인 유저 여정을 설명하는 데 한계가 있음
[Position-Based Attribution(위치 기반 귀속)]
Position-Based Attribution은 첫 접점과 마지막 접점에 높은 가중치를 부여하고, 중간 접점은 상대적으로 낮은 가중치를 부여하는 방식이다.
첫 접점과 마지막 접점의 균형을 강조하면서도, 중간 접점의 기여도를 일정 부분 반영한다.
- 장점: 첫 접점과 마지막 접점을 동시에 평가할 수 있어, 유저의 유입과 최종 결정을 모두 분석하는 데 유리
- 단점: 중간 접점이 많은 경우, 일부 접점이 저평가될 수 있어 유저 여정을 충분히 반영하지 못할 수 있음
2. 유저 행동 기반으로 전환 직접 구해보기
유저 행동이 DB에 있는 이커머스 기준으로 간단하게 데이터를 가정해보자.
아래 테이블은 유저(user_id)가 이커머스 플랫폼을 방문하면서 다양한 접점을 거친 정보를 담고 있으며, 접점(channel)과 방문 시간(timestamp)이 포함되어 있다.
action에서 view는 단순 방문, purchase는 구매를 의미한다.
(단, 해당 데이터에는 전환이 완료된 유저의 행동만 필터링 했다.)
| user_id | channel | timestamp | action |
|---------|---------------|---------------------|------------|
| 1 | Social Media | 2024-10-01 10:00:00 | view |
| 1 | Email | 2024-10-03 12:00:00 | view |
| 1 | Direct | 2024-10-05 09:00:00 | purchase |
| 2 | Paid Search | 2024-10-02 11:00:00 | view |
| 2 | Social Media | 2024-10-04 13:00:00 | view |
| 2 | Direct | 2024-10-06 14:00:00 | purchase |
| 3 | Email | 2024-10-01 10:00:00 | view |
| 3 | Direct | 2024-10-05 09:00:00 | view |
| 3 | Paid Search | 2024-10-07 15:00:00 | purchase |
| 4 | Social Media | 2024-10-03 12:00:00 | view |
| 4 | Social Media | 2024-10-06 16:00:00 | view |
| 4 | Email | 2024-10-08 18:00:00 | purchase |
데이터가 있으니, 쿼리로 유저/채널별 전환을 뽑아보자!
[First Touch Attribution(첫 접점 귀속)]
첫 접점 귀속은 각 유저별로 처음 방문한 채널을 찾으면 되겠다.
SELECT
user_id,
channel AS first_touch_channel
FROM (
SELECT
user_id,
channel,
timestamp,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestamp ASC) AS row_num
FROM
ecommerce_log_data
WHERE
action = 'view'
) AS first_touch
WHERE row_num = 1;
[Last Touch Attribution(마지막 접점 귀속)]
마지막 접점 귀속은 구매 마지막 방문 채널을 찾아서 매핑시키면 된다!
SELECT
user_id,
channel AS last_touch_channel
FROM (
SELECT
user_id,
channel,
timestamp,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestamp DESC) AS row_num
FROM
ecommerce_log_data
WHERE
action != 'purchase'
) AS last_touch
WHERE row_num = 1;
[Linear Attribution(선형 귀속)]
선형 귀속은 각 채널의 방문 수를 구하고, 그 채널들이 동등한 기여를 갖는다는 의미로 1로 나눠주면 완성된다!
SELECT
user_id,
channel,
COUNT(*) OVER (PARTITION BY user_id) AS total_touch_points,
1.0 / COUNT(*) OVER (PARTITION BY user_id) AS attribution_weight
FROM
ecommerce_log_data
WHERE
action = 'view';
[Time Decay Attribution(시간 가중 귀속)]
시간 가중 귀속은 시간 차이도 필요하다.
SELECT
user_id,
channel,
timestamp,
EXP((EXTRACT(EPOCH FROM purchase_time) - EXTRACT(EPOCH FROM timestamp)) / 86400) AS time_decay_weight
FROM (
SELECT
user_id,
channel,
timestamp,
MAX(timestamp) FILTER (WHERE action = 'purchase') OVER (PARTITION BY user_id) AS purchase_time
FROM
ecommerce_log_data
) AS decay_calc
WHERE action = 'view';
EXTRACT(EPOCH FROM timestamp)는 timestamp를 초 단위로 변환해 주기 때문에, 구매 시점과 접점 시점 사이의 시간 차이도 초 단위가 된다.
따라서 이를 일 단위로 변환하려면 1일에 해당하는 86400초(60초 × 60분 × 24시간)로 나눠줘야 한다!
[Position-Based Attribution(위치 기반 귀속)]
위치 기반 귀속을 위해서는 분석가가 따로 기준을 만들어서 반영해야 한다.
아래 쿼리는 처음과 마지막 채널에는 40%, 중간 과정 채널은 20%의 기여도를 나눠 갖는다는 기준을 토대로 짜봤다.
SELECT
user_id,
channel,
CASE
WHEN row_num = 1 THEN 0.4
WHEN row_num = total_touch_points THEN 0.4
ELSE 0.2 / (total_touch_points - 2)
END AS position_based_weight
FROM (
SELECT
user_id,
channel,
timestamp,
ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY timestamp ASC) AS row_num,
COUNT(*) OVER (PARTITION BY user_id) AS total_touch_points
FROM
ecommerce_log_data
WHERE action = 'view'
) AS position_based;
쿼리를 통해 유저/채널별 전환(기여도)를 구해보았다.
위에서 만든 테이블을 토대로 적절히 집계하여(group by) 전환율 등과 같은 지표를 만들어낼 수 있겠다!
3. 마무리
데이터 분석가로 일하며, 어려운 점 중 하나는 너무 많은 관점에서 데이터를 분석할 수 있다는 점이다.
전환이라는 것도 매번 분석할 때마다 다른 기준을 적용하곤 했는데,
이렇게 정리해 뒀으니 프레임워크화 하여 목적에 맞게 써먹을 수 있기를 기원한다!
'생존 도구🏹' 카테고리의 다른 글
n8n 자동화 프로젝트① - n8n에 대한 이해와 프로젝트 기획 (0) | 2025.02.02 |
---|---|
💬통계와 관련된 알쓸신썰 3가지! (4) | 2024.11.10 |
GPT한테 SQL 쿼리 짜달라고 하기 (0) | 2024.03.17 |
Python으로 이해하는 주가지표① - RSI(Relative Strength Index) (feat. 엔비디아) (0) | 2024.03.03 |
yfinance(야후 파이낸스)로 주가 데이터 손질하기 (1) | 2024.01.07 |