카테고리 없음

[Tableau] 태블로 실습 개인과제 풀이과정

ANNASENA 2024. 4. 22. 01:19
728x90

 

 

데이터 (kaggle)

Google Analytics Customer Revenue Prediction 데이터 train.csv 데이터

https://www.kaggle.com/competitions/ga-customer-revenue-prediction/data?select=train.csv

 

Google Analytics Customer Revenue Prediction | Kaggle

 

www.kaggle.com

 

 

데이터 EDA

총 방문 수 (count) = 903653

총 방문 유저 수 (fullVisitorId .nunique) = 731421

<> 재방문 수 = 172232 

즉, 전체 유저 중에 몇 명이 몇 번씩 중복 방문했는지는 모르겠지만 172232번 다시 방문됨

바로 확인 ㄱㄱ

 

중복된 유저 수 (nunique) = 89346

한 번만 방문한 유저 수 = 642075명

df[df['fullVisitorId'].duplicated()].nunique()

즉, 총 재방문 수 172232 중에 89346명의 유저가 재방문 함

즉, 89346명의 유저가 각각 여러 번 방문했을 수도 있음

 

총 유저 731421명 중에 89346명은 적게는 두 번째 방문까지, 많게는 252번까지 방문함

total_duplicated = df['fullVisitorId'].value_counts().reset_index()
total_duplicated.columns = ['fullVisitorId', 'count']
total_duplicated = total_duplicated[total_duplicated['count'] != 1]
total_duplicated

 

 

(newVisits == 1)인 수 (count) = 703060 

df[df['newVisits'] == 1]['fullVisitorId'].count()

신규 방문이라고 명명한 총 방문 수

 

 

(newVisits == 1)인 유저 수 (nunique) = 701904

df[df['newVisits'] == 1]['fullVisitorId'].nunique()

신규 방문이라고 명명한 총 유저 수

 

+ 여기에서 알 수 있는 것

이 둘 사이에 1156이라는 차이가 발생하는데

즉, fullVisitorId가 첫 방문했을 때만 newVisits == 1이라고 하지 않고

1156번은 두 번째 방문에서도 newVisits == 1이라고 명명해줌

>> 이게 지금 오류인 것

 

 

정리 + 문제점 확인

총 유니크 유저 수는 731421명

총 유저 중에서 중복 집계되고 있는 유저의 수는 172232명

즉, 172232번의 재방문이 있었던 것

>> 이 재방문 수는 89346명의 유저들이 여러 번의 재방문을 했다는 말

>> 이 89346명의 유저들은 2번부터 많게는 200번이 넘게 재방문을 하고 있었음

 

1156번이 첫 번째 방문이 아닌데도 newVisits를 1이라고 잘못 명명해주고 있는 오류가 있음

>> 이런 오류가 89346명의 재방문 유저들 중 어떤 유저에게 일어나고 있는 오류인지는 잘 모르겠음

 


과제 풀이 시작

 

1. (Acquistion) 신규 유입 유저 수

 

신규 유입 유저 수

: New Visits가 1인 Full Visitor Id를 고유 카운트 해주기

 

신규 유입 유저 수 계산식 

IF [New Visits] == 1 THEN [Full Visitor Id] END

이렇게 해주고, 선반에 올려놓을 때 카운트(고유)로 해줌

 


2. DAU, WAU, MAU

내가 정한 Active의 기준은, 세션 방문자

세션에 방문한 사람들의 고유 카운트 

 

Unique_Visitors

COUNTD([Full Visitor Id])

 

▶ DAU

각 일(Day)마다의 Unique_Visitors 수

DAU의 변화는 제어할 수 없는 외부 요인이나  특정 이벤트의 영향에 의한 것일 수 있기 때문에

전체적인 추세를 보기 위해 이동평균 그래프를 라인그래프로 같이 그려봄.

평균, 이전6일, 다음0일로 그린 이동평균 그래프라서 결론적으로는 7일간의 평균을 나타내기 때문에

WAU와 비슷해졌음..ㅎㅎㅎ


3. 평균 활성 사용자 수_ 캘린더 차트

 

평균 활성 사용자 수

{FIXED DATEPART('weekday', [Utc Time]),DATEPART('hour', [Utc Time]): AVG([Full Visitor Id])}

사실 각 행과 열에 요일과 시간을 넣어줘서

AVG([Full Visitor Id])

그냥 위와 같은 계산된 필드를 넣어줘도 결과가 같긴 했음.


4. 채널 별 유입 유저 수, CAC

 

Unique_Visitors

COUNTD([Full Visitor Id])

 

Count_Visitors

: 유입 채널로 총 몇 명의 유저가 들어왔는지 확인

COUNT([Full Visitor Id])

 

▶ CAC (Customer Aquisition Cost)

한명의 고객을 유치하기 위해 들어가는 비용

CAC = 총 획득 비용 / 획득한 신규 고객 수

(총 획득 비용에는 영업 및 마케팅 관련 비용이 모두 포함됨.

: 광고, 판촉, 영업 및 마케팅 직원의 급여, 기타 관련 비용 등)

CAC를 계산할 때는 Direct로 들어온 유저나 Organic Search로 들어온 유저는 계산X

 

S&M 총 비용(단위: 백원)

CASE [Channel Grouping]
WHEN '(Other)' THEN 5000
WHEN 'Affiliates' THEN 100000
WHEN 'Direct' THEN 0
WHEN 'Display' THEN 50000
WHEN 'Organic Search' THEN 0
WHEN 'Paid Search' THEN 100000
WHEN 'Referral' THEN 200000
WHEN 'Social' THEN 250000 END

 

CAC

{FIXED [Channel Grouping] : MEDIAN([S&M 총 비용]) / COUNTD([신규 유입 유저 수])}

여기에서 S&M 총 비용은 특성 값으로 설정해줬는데 

해당 값을 신규 유입 유저의 고유 카운트 수로 나눠주기 위해서 MEDIAN()함수를 같이 사용해줌

>> S&M 총 비용의 특성값과 MEDIAN() 해준 결과값이 동일해서 중앙값 설정으로 일단 해줌 

 


5. (Activation) 전환율_퍼널

 

전환 순서는 

먼저 광고 페이지(페이지뷰)를 통해 홈페이지로 유입 > 홈페이지 방문 > 홈페이지 재방문

 

CVR_방문

[Count_Visitors]/SUM([Pageviews])

 

CVR_재방문

[재방문 유저 수]/SUM([Pageviews])

 

재방문 유저 수

[Count_Visitors]-[Unique_Visitors]

전체 방문자 수에서 유니크 방문자 수를 빼면 중복 유저수(즉, 재방문 유저 수)를 구할 수 있음


6. (Aquisition) 고착도 / PV /디바이스 별 유입 비중_도넛차트

 

▶ Stickiness(고착도) = DAU/WAU

 

DAU

{FIXED DATEPART('day', [Utc Time]): [Unique_Visitors]}

 

MAU

{FIXED DATEPART('month', [Utc Time]): [Unique_Visitors]}

 

고착도

[DAU]/[MAU]

 

PV : Pageviews 

SUM([Pageviews])

 


7. (Activation) 평균 전환율

 

CVR_평균전환율

내가 전에 구한 CVR_방문 CVR_재방문의  평균을 구하면 되는 걸까..?

([CVR_방문]+[CVR_재방문])/2

8. (Revenue) Total Revenue / PU / ARPU / ARPPU

국가별 매출 지도 / 유입 채널 별 Scatterplot

  • x축: 총 유저 수
  • y축: 총 구매자 유저 수

 

R_Total Revenue

한 유저마다 가져다주는 수익의 합계

{FIXED [Full Visitor Id] : SUM([Transaction Revenue])}

 

R_PU(Paid User)

PU(Paid User): 중복을 제외한 특정 기간 결재한 순수 사용자의 수

COUNTD([R_Total Revenue])

수익을 가져다주는 유저들의 카운트(고유)

 

R_ARPU 

ARPU = 매출 / PU + Non-PU

수익을 전체 이용자 또는 가입자로 나눈 단위당 매출

SUM([Transaction Revenue])/[Unique_Visitors]

 

R_ARPPU

ARPPU = 매출 / PU

수익을 결제 유저로 나눈 단위당 매출

SUM([Transaction Revenue])/[R_PU(Paid User)]

 

▶ 유입 채널 별 총 유저 수 scatterplot

x축 : 총 유저 수 >> Unique_Visitors

y축 : 총 구매자 유저 수 >> R_PU(Paid User)


9. (Retention) 리텐션 차트

▶ N-day Retention

: 첫 방문 후 특정 일자에 재방문한 유저 비율

▶ Rolling Retention (Unbounded Retention)

: 특정 날짜를 포함하여 그 이후에 한 번이라도 재방문한 유저의 비율

▶ Bracket Retention

: Bracket 리텐션은 N-Day 리텐션을 보다 유연하게 확장시킨 개념으로, 리텐션 분석을 특정 일/주/월 단위로 한정 짓는 것이 아닌, 지정된 구간으로 나누어 리텐션 분석을 수행할 수 있게 해줌

 

RT_일일 유입자 수

{FIXED DATETRUNC('day', [Utc Time]): [Unique_Visitors]}

 

RT_리텐션

([RT_일일 유입자 수]/714167) *100

여기에서 714167은 Unique_Visitors 숫자

날짜를 고정시켜 놓고, 해당 날짜의 유입 유저들(RT_일일 유입자 수)을 전체 유입 유저로 나눈 뒤 *100을 해줌


10. 코호트 차트(리텐션)

 

CO_유저 별 최초 방문일

{FIXED [Full Visitor Id]: MIN([Utc Time])}

최초 방문일 = 방문일 중 가장 작은(과거의) 날짜

 

CO_유저 별 최초 재방문일

{FIXED [Full Visitor Id]:
	MIN(
    	IIF([C_유저 별 최초 방문일] < [Utc Time], [Utc Time], NULL)
        )
}

재방문일 = 최초 방문일보다는 큰(미래인) 방문일자중 가장 작은 날짜  

NULL은 재방문이 없었던 유저

 

 

CO_유저 당 재방문 경과기간

DATEDIFF('month',[C_유저 별 최초 방문일], [C_유저 별 최초 재방문일])

경과기간 = 재방문일 - 최초 방문일 


11. (Referral) Referral 유입O,X 유저 간 매출 비교

 

RF_유입 유저 매출

IF [Channel Grouping] == 'Referral' THEN [Transaction Revenue] END

 

RF_그 외 유입 유저 매출

IF [Channel Grouping] != 'Referral' THEN [Transaction Revenue] END

 


대시보드 만들 때 참고한 사이트

 

대시보드 색상 조합

 

Color Palettes for Designers and Artists - Color Hunt

Discover the newest hand-picked color palettes of Color Hunt. Get color inspiration for your design and art projects.

colorhunt.co

 

728x90