오늘은 마케팅 용어인 CPC와 ROAS라는 간단한 지표를 파이썬 코드로 구하는 부분을 정리한다.
이미지를 클릭하면 강의 사이트로 이동한다.
가입 시 5천원 주는 추천인 코드: EQQW-36EH-JY4P 추가해주시면 감사합니다.
🔥 강의 목차
오리엔테이션
파이썬 기초 문법
데이터 전처리
데이터 시각화
마케팅 데이터 분석 및 지표 정의하기
🔥 마케팅 데이터 전처리 &자동화 프로젝트(2) 전처리
지난 글에서 광고(ad), 고객 행동 로그(log), 주문(od) 테이블을 살펴보았다.
데이터 전처리는 데이터를 필요한 형태로 변경하거나, 컬럼을 추가하거나, 결측치/이상치를 처리하거나, 기존 값을 집계하는 등 분석 전 필요한 모든 것을 말한다.
전처리 최종 목표는 마케팅 지표인 CPC(Cost Per Click)와 ROAS(Return On Advertising Spend)를 주단위로 집계하는 것이다.
- CPC는 클릭 당 비용으로 단순히 총 비용을 클릭 수로 나누어 구한다.
- ROAS는 광고로 인한 수익을 광고 지출로 나누어 구하고, 광고의 효과성을 보여주는 지표이다.
🔥 1. 주 단위로 CPC 구하기
일단, 광고(ad) 테이블에 총 지출(spend)과 클릭 수(clicks) 데이터가 있으니, CPC는 쉽게 구할 수 있을 것 같다.
1) 주 단위로 집계
먼저 ad.info()를 통해 date의 데이터타입을 확인한다.
date가 날짜/시간 형태의 데이터가 아니면 datetime 안에 있는 기능들을 사용할 수 없다.
주단위로 집계하기 위해 date 컬럼을 datetime 형태로 바꿔준다.
판다스 라이브러리를 사용하여, pd.to_datetime(컬럼)을 입력하면 된다.
변경한 후에는 다시 ad.info()로 확인
ad['date']= pd.to_datetime(ad['date'])
형 변환이 되었다면, 해당 날짜가 어떤 주(week)에 속하는지 알 수 있도록 week 컬럼을 생성한다.
datetime에서 week를 표시하는 컬럼은 dt.to_period('W')이다.
ad['week']= ad['date'].dt.to_period('W')
주 단위가 표시는 되었는데, 우리는 굳이 주의 첫날 - 마지막날을 모두 알 필요가 없다.
한 주의 첫째날만 표시하도록 dt.to_timestamp() 를 활용해보자.
ad['week']= ad.date.dt.to_period('W').dt.to_timestamp()
이렇게 만든 week 컬럼과 campaign 컬럼을 기준으로 spend와 clicks를 집계해보자. (아래 코드가 안되면 [['spend', 'clicks']] 부분에 대괄호를 두겹으로 해보자)
ad_agg = ad.groupby( by = ['campaign', 'week'])['spend', 'clicks'].sum().reset_index()
2) CPC 계산
주별, 캠페인별 spend와 clicks 가 나와 있으므로, 둘을 나누어 CPC를 계산하고, 새 컬럼으로 추가한다.
ad_agg['cpc'] = ad_agg.spend/ad_agg.clicks
ad_agg.head()
🔥 2. 주 단위로 ROAS 구하기
ROAS도 주문(od)테이블의 order_amount를 광고(ad)테이블의 spend로 나누면 된다.
다만 아래에서 볼 수 있듯이, 공통되는 컬럼이 하나도 없기 때문에 고객행동로그(log)데이터까지 3개의 테이블을 합쳐야 한다.
od1['campaign']= od1.campaign.fillna('organic')
od1.groupby(by='campaign').order_amount.sum()
1) 고객행동로그(log) 테이블과 주문(order) 테이블 합치기
먼저, 고객행동로그(log)와 주문(order) 테이블에서도 날짜/시간 데이터를 datetime 형태로 변경한다.
log['timestamp']= pd.to_datetime( log['timestamp'] )
od['order_date']= pd.to_datetime(od['order_date'])
order_id는 식별자로 중복값이 없음을 확인하고, 두 테이블 모두 가지고 있는 'order_id' 컬럼을 기준으로 LEFT JOIN한다.
log.groupby('order_id').size().sort_values()
od.groupby('order_id').size().sort_values() # 중복 x
od1= pd.merge(od, log, how = 'left', left_on = 'order_id', right_on = 'order_id')
위 테이블을 보면, 캠페인 1, 2, 3 외에 다른 경로로 유입된 방문자가 NaN으로 표시되어 있다. 일반적으로 유료 광고나 마케팅을 통하지 않고 직접 유입되는 방문자를 오가닉(organic)이라고 하므로, campaign이 NaN인 경우를 오가닉으로 대체한다.
od1['campaign']= od1['campaign'].fillna('organic')
2) 주 단위로 집계
주단위로 ROAS를 구해야 하기 때문에, 새로 만든 od1 테이블을 주단위로 집계한다. (CPC 구할 때 ad 테이블에 week
컬럼을 만든 것과 동일한 과정임)
od1['week'] = od1['order_date'].dt.to_period('W').dt.to_timestamp()
od_agg = od1.groupby( by = ['campaign', 'week'])['order_amount'].sum().reset_index()
3) 주단위로 집계된 광고(ad) 테이블과 주문+로그(od1) 테이블을 JOIN
앞서 CPC를 만든 ad 테이블과 금방 만든 od1 테이블을 JOIN해준다. JOIN 기준은 campaign, week로 한다.
df= pd.merge( od_agg, ad_agg, how = 'left', left_on = ['campaign', 'week'], right_on = ['campaign', 'week'] )
4) 주별, 캠페인별 ROAS 계산: 수익(order_amount) / 지출(spend)
주별, 캠페인별로 집계된 테이블을 JOIN 했으니, 바로 order_amount와 spend를 나누어 ROAS를 구한다.
df['roas'] = df['order_amount']/df['spend']
5) 테이블 Pivotting
위에서 만든 테이블은 분석, 시각화 등을 할 때는 유용하지만 테이블을 보면서 값을 비교하기 용이하지 않다.
예를 들어, 2022-12-26로 시작하는 주에, 어떤 캠페인이 더 효과적이었는지 ROAS를 비교하려면 행들이 떨어져 있어서 한 눈에 보기 힘들다. 이럴 때 pivotting을 통해 테이블 모양을 변경할 수 있다.
df.pivot_table(
index = 'campaign'
, columns = 'week'
, values = 'roas'
)
이제 한 눈에 캠페인을 비교해서 볼 수 있게 되었다. ROAS를 구한 결과, 캠페인 1은 12월 말에는 좋았다가 ROAS가 점점 안좋아지고 있다. 캠페인 2는 안좋았다가, 좋았다가, 다시 안좋아지는 것을 반복 중.. 캠페인 3은 계속 ROAS가 낮다.
물론 시각화를 해야 하겠지만, 이 정도 데이터만 전달해도 의사결정자에게 충분히 도움을 줄 수 있다.
엑셀로 더 간단히 구할 수 있지만, 매번 다시 분석해야 하는 엑셀과 달리, 파이썬은 코드를 한 번 써 놓으면 데이터만 변경하면서 자동화하기 유리하다. 다음 글에서는 시각화를 다룰 예정!🔥🔥
* 본 게시글은 '메타코드'의 동의를 받아 작성된 글로, 강의 내용에 대한 모든 저작권은 Ringo 선생님에게 있습니다. 개인용도의 학습 외에 무단사용은 엄격히 금지됩니다. 위반 시 법적 조취가 취해질 수 있습니다.
'빅데이터분석' 카테고리의 다른 글
[메타코드] 파이썬 입문 데이터분석 - 제품 포트폴리오 분석 (1) 데이터 파악 (0) | 2024.07.21 |
---|---|
[헷갈리는 파이썬] Null, Na, NaN 결측치 이름 차이, isnull()과 isna()의 차이? (판다스 공식 문서 참고) (0) | 2024.07.12 |
[메타코드 강의 후기 포함] 빅데이터분석기사 8회차 실기(파이썬) 시험 후기 (0) | 2024.06.24 |
[메타코드] 파이썬 입문 데이터분석 프로젝트 만들기 - 마케팅 데이터 전처리 & 자동화 프로젝트 (1) 데이터 파악하기 (0) | 2024.06.16 |
[파이썬] 파이썬 입문 데이터분석 프로젝트 만들기 - (16) 결측치(NA, NaN, None) 처리하기 (0) | 2024.05.29 |