관리 메뉴

TEAM EDA

[Kaggle] Google Analytics Customer Revenue Prediction 본문

EDA Project/해외 공모전

[Kaggle] Google Analytics Customer Revenue Prediction

김현우 2018. 12. 19. 09:32

Google Analytics Customer Revenue Prediction

Predict how much GStore customers will spend


대회 목적


80/20 규칙은 많은 비즈니스에서 입증되었습니다. 적은 수의 고객 만이 대부분의 수익을 창출합니다. 따라서 마케팅 팀은 홍보 전략에 대한 적절한 투자를 유도해야합니다. RStudio는 팀을 위해 작업을 확장하고 공유 할 수있는 R 및 기업용 제품을위한 무료 및 개방형 도구 개발자로, Google Cloud 및 Kaggle과 파트너 관계를 맺어 철저한 데이터 분석에서 얻을 수있는 비즈니스 영향을 보여줍니다. 이 경쟁에서 고객 당 수익을 예측하기 위해 Google Merchandise Store (Google 판매원이 판매되는 GStore라고도 함) 고객 데이터 세트를 분석해야합니다. GA 데이터를 기반으로 데이터 분석을 사용하려는 기업의 경우 더 효과적인 운영 변경마케팅 예산 사용의 향상이 기대됩니다.


평가



대회 모델이 유용한가?

논의 : https://www.kaggle.com/c/ga-customer-revenue-prediction/discussion/66440




변수 설명.


channelGrouping 


구글 애널리틱스는 특정 마케팅 채널이나 트래픽 소스 혹은 이들 그룹의 성과를 빠르고 쉽게 파악할 수 있도록, 트래픽의 소스와 매체에 기반한 내부 규칙에 따라 채널을 분류합니다. 이를 기본 채널 그룹(Default Channel Grouping)이라 하며 직접(Direct), 추천(Referral), 자연검색(Organic Search), 유료검색(Paid Search), 디스플레이(Display), 소셜(Social), 이메일(Email), 제휴(Affiliates), 기타 광고(Other Advertising) 총 9개로 구성됩니다. 채널 그룹 설정을 통해 채널의 분류 방식을 변경함으로써 좀 더 맞춤화 된 분석을 할 수도 있습니다.

  • Display : ‘display’ 매체 또는 ‘cpm’ 매체와의 상호작용입니다. 광고 게재 네트워크가 ‘content’로 설정된 애드워즈 상호작용도 포함됩니다.

  • Paid Search : 애드워즈 검색 네트워크 및 기타 검색 엔진으로부터 ‘cpc’ 또는 ‘ppc’ 매체를 통해 유입된 트래픽입니다.

  • Other Advertising : ‘cpc’, ‘ppc’, ‘cpm’, ‘cpv’, ‘cpa’, ‘cpp’, ‘affiliate’ 매체 태그가 추가된 세션(유료 검색 제외)입니다.

  • Organic Search : 모든 검색 엔진의 무료 검색을 통해 유입된 트래픽(매체=’organic’)입니다.

  • Social Network : 약 400개의 소셜 네트워크를 통해 유입된 트래픽입니다(광고로 태그가 추가되지 않음).

  • Referral : 소셜 네트워크 이외의 웹사이트를 통한 트래픽입니다.

  • Email : ’email’ 매체 태그가 추가된 세션입니다.

  • Direct : 사용자가 북마크를 이용하거나 직접 URL을 입력하여 방문한 세션입니다.


date

  • 방문 날짜(일). 이를 활용하여 다양한 활용 가능. 


visitStartTime 

  • date를 초단위로 설정한 방문날짜(초). 정확한 방문 시각까지 알 수 있어서 시간 별 인사이트를 얻는 데 도움이 됨. 


fullVisitorId 

  • cookie 혹은 개인 ID를 통해서 생성 되는 값. 

visitId 

  • 세션의 ID입니다. 일반적으로 _utmb 쿠키로 저장된 값의 일부이며, 사용자마다 고유한 값을 가집니다. 완전히 고유한 ID의 경우 fullVisitorId와 visitId의 조합을 사용해야 합니다.


세션(session) : Web/App에 접속 후 세션이 시작될 때 부여된 고유 ID

※ 하나의 클라이언트ID에 여러 개의 세션ID가 발급될 수 있음


출처 : L'point 자료_데이터설명 


구글 애널리틱스에서는 웹사이트에서의 사용자 참여 수준을 파악하기 위해 히트의 생성 시간에 기초해 사용자 히트를 분류하며, 이러한 시간을 측정할 때 '세션수'라는 측정항목을 사용합니다.


출처 : http://analyticsmarketing.co.kr/

<세션 분류하기 - 새로운 세션>


출처 : http://analyticsmarketing.co.kr/

<세션 분류하기 - 기존 세션 유지>


웹사이트에서 사용자가 GA 추적코드가 있는 페이지로 이동할 때 세션이 시작되고 '페이지뷰' 히트가 생성됩니다. 이 히트는 다른 히트가 기록되지 않으면 30분 후에 종료됩니다. 세션이 종료한 후에 사용자가 페이지를 새로 조회하게 되면 새 세션이 시작됩니다. 




출처 : http://analyticsmarketing.co.kr/


visitNumer 

  • 세션 Id의 방문 횟수. 이 사용자의 세션 번호입니다. 첫 번째 세션이면 1로 설정됩니다. 동일한 Session ID를 가지고 몇번 째 방문을 한 지.

device 

출처 : http://analyticsmarketing.co.kr/digital-analytics/google-analytics-basics/2313/



출처 : https://www.hallaminternet.com/google-analytics-desktop-vs-mobile-vs-tablet-metrics/


  • device.browser : 브라우저
  • device.deviceCategory : 모바일/데스크탑
  • device.isMobile : 모바일인지 여부(True/False)
  • device.operatingSystem : OS
보통 위의 정보들은 마케팅 영역에서 사용 되는 정보들임. 브라우저별로 device별로 os별로 어떠한 인사이트를 얻을 수 있는지, 어떠한 마케팅 전략을 취하는게 옳은지와 같은 다양한 접근을 할 수 있음.

geoNetwork
  • geoNetwork.city : city. (demo는 데이터가 없음)
  • geoNetwork.continent : continent (Asia, America, Europe etc)
  • geoNetwork.country : 국가
  • geoNetwork.metro : 세션이 발생한 지정 시장 지역(DMA)입니다. [무슨의미인지는 모르겠음...]
  • geoNetwork.network.Domain : ISP의 IP 주소에 명시된 도메인 이름에서 가져온 사용자 ISP의 도메인 이름입니다.
  • geoNetworkDomain : 
  • geoNetwork.region : 세션이 발생한 지역입니다(IP 주소 기준). 미국에서는 주로 표시됩니다(예: 뉴욕주).
  • geoNetwork.subContinent : 세션이 발생한 하위 대륙입니다(방문자의 IP 주소 기준).


total

  • totals.bounces : 편의상 제공되는 총 이탈수입니다. 이탈한 세션의 경우 값이 1이고 그렇지 않으면 값이 null입니다.
이탈수(률) : 이탈은 단일 페이지에서 발생한 세션의 종료. 구글애널리틱스에서 이탈(bounce)의 가장 쉬운 정의는 '누군가 웹사이트를 방문했다가 아무 일도 하지 않고 떠났다'는 뜻입니다. 이 "이탈"은 사이트에서 발생한 단일 페이지 세션을 말하는데, 예를 들어 첫번째 페이지 뷰 이후 다른 페이지를 조회하지 않았거나 아무런 상호 작용이 없었다는 것 입니다. 이탈률은 단일 페이지 세션 수를 총 세션수로 나눈 비율로, 단일 페이지뷰 이후 상호작용을 하지 않고 이탈한 세션의 비율을 뜻합니다.

출처 : https://www.d-mention.net/blog/insight/634/


위의 3가지 세션 중 1,2 세션은 첫번째 페이지 뷰 이후 다른 페이지 뷰 또는 이벤트를 통해 상호작용을 완료했고, 3번째 세션은 아무런 히트없이 종료되었습니다. 그렇다면 1,2 번째 세션은 이탈 없음. 3번째 세션은 이탈로 체크되는 것입니다.


이탈률(Bounce rate)과 종료율(Percent exit)은 어떻게 다른가요?

이탈은 단일 히트 세션에만 일어나지만, 종료는 세션마다 일어난다는 차이가 있습니다. 이탈은 단일 세션으로 도착페이지와 종료한 페이지가 같을 수 밖에 없습니다. 하지만 종료는 한 세션에서 마지막으로 접근했던 페이지나 화면을 말합니다. 따라서 종료(세션 만료) 전에 마지막으로 조회했던 페이지를 기준으로 종료율을 계산합니다. 



출처 : https://www.d-mention.net/blog/insight/634/


위와 같은 흐름의 다섯개의 세션이 있으며 마지막 페이지 이동 후 세션이 종료되었다고 가정합니다. 이 때 각각의 페이지에 따른 이탈률과 종료율은 다음과 같습니다.


  • 페이지 A

    • 종료율 : 33%

      • 페이지 A가 포함된 세션은 3개이며, 그 중 1개 세션(3번째)에서 페이지 A를 마지막으로 세션이 종료되었기 때문에 3분의 1, 33% 입니다.

    • 이탈률 : 0%
      • 페이지 A로 시작한 세션이 단일 페이지 세션 (2,4번과 같은)이 아니므로 이탈률이 0% 입니다.
  • 페이지 B
    • 종료율 : 50%
      • 페이지 B가 포함된 세션은 4개이며, 그 중 2개 세션(2,5번)에서 페이지 B를 마지막으로 세션이 종료되었으므로 50% 입니다.
    • 이탈률 : 33%
      • 페이지 B로 시작된 세션은 3개이며, 그 중 한개 세션(2번)이 단일페이지 이탈이기 때문에 33% 입니다.
  • 페이지 C
    • 종료율 : 50%
      • 페이지 C가 포함된 세션은 4개이며, 그 중 2개 세션(1,4번)에서 페이지 C를 마지막으로 세션이 종료되었으므로 50% 입니다.
    • 이탈률 : 100%
      • 페이지 C로 시작된 세션은 1개이며, 그 세션(4번)이 바로 이탈로 이어졌기 때문에 이탈률이 100% 입니다.

이러한 이탈률을 낮추기 위해 고민해 봐야 할 것들

잠재고객 개요 보고서에서는 사이트의 전반적인 이탈률을 제공하고 채널 보고서는 각 채널 그룹의 이탈률을, 모든 페이지 보고서는 개별 페이지의 이탈률을 제공합니다. 따라서 이탈률이 전반적으로 높다면 정확히 어떤 채널, 소스/매체에서 높은지, 혹은 어떤 페이지가 유독 높은 것인지 자세히 알아봐야 합니다.

예를 들어 특정 페이지에서 이탈률이 높은 경우, 사용자를 페이지로 유도한  클릭 유도문안이 랜딩 페이지와 상호 관련성이 있는지 확인 해봐야 합니다. 관련성이 없는 도착 페이지였다면 이탈률이 높아질 수 있기 때문입니다. 광고에서는 청바지 쇼핑을 유도했는데 도착 페이지는 청바지가 아닌 가방 카테고리 페이지라면 이탈률이 높아질 수 밖에 없겠죠. 그럴 때엔 광고의 도착 페이지가 제대로 설정되어있는지 점검해봐야 합니다.

또한 사용자가 해당 페이지에서  다음 단계(다음 페이지 경로)로 쉽게 넘어갈 수 있는 링크 혹은 메뉴 가 있는지 살펴봐야합니다. 추가적으로 탐색할 수 있는 링크 경로가 없거나 클릭할 만한 눈에 띄는 콘텐츠가 없다면 사용자는 유입 후 아무런 행동도 하지 않고 이탈할 가능성이 높습니다.

특정 채널이 이탈률이 높을때에도 그 채널의 마케팅 활동과 사이트 콘텐츠의 관련성을 고민해보아야합니다. 디스플레이 광고를 통해 유입한 세션이 유독 이탈률이 높다면  디스플레이 광고의 주요 메시지가 가 사이트와 연관성이 낮은지 확인 해보아야 합니다.


  • totals.hits : 세션 내의 총 조회수입니다.
  • totals.newVisits : 편의상 제공되는 세션 내 전체 신규 사용자의 수입니다. 첫 번째 방문이면 값이 1이고 그렇지 않으면 값이 null입니다.
  • totals.pageviews : 세션 내의 총 페이지뷰 수입니다. (페이지 조회수의 총합)
  • totals.transactionRevenue : 이 섹션에서는 유형이 '거래'인 각 조회에 대해 값이 들어갑니다.


trafficSource

  • trafficSource.adContent : 트래픽 소스의 광고 콘텐츠입니다. utm_content URL 매개변수로 설정할 수 있습니다.
  • trafficSource.campaign : 캠페인의 가치입니다. 보통 utm_campaign URL 매개변수로 설정됩니다.
  • trafficSource.isTrueDirect : 세션 소스가 직접인 경우(사용자가 웹사이트 URL의 이름을 브라우저에 입력했거나 북마크를 통해 사이트를 방문했음을 의미) True입니다. 2회의 서로 다른 연속 세션에서 캠페인 세부정보가 일치하는 경우에도 True입니다. 이들 경우가 아니면 NULL입니다.
  • trafficSource.keyword : 트래픽 소스의 키워드이며, 일반적으로 trafficSource.medium이 '자연' 또는 'cpc'인 경우 설정됩니다. utm_term URL 매개변수에 의해 설정될 수 있습니다.
  • trafficSource.medium : 트래픽 소스의 매체입니다. '자연', 'cpc, '추천' 또는 utm_medium URL 매개변수의 값일 수 있습니다.
  • trafficSource.referralPath : trafficSource.medium이 '추천'이면 이 값이 리퍼러의 경로로 설정됩니다. 리퍼러의 호스트 이름은 trafficSource.source에 나와 있습니다.
  • trafficSource.source : 트래픽 소스의 소스입니다. 검색엔진의 이름, 추천 호스트 이름 또는 utm_source URL 매개변수의 값일 수 있습니다.


데이터 탐색.



모델링.


코드 : 

  1. 전처리 코드 : https://www.kaggle.com/chocozzz/google-analytics-data-preprocessing
  2. 모델링 코드 : https://www.kaggle.com/chocozzz/google-analytics-modeling


XGB + LGB + CATBOOST


  1. 다양한 encoding 방법.
  2. 구매한지 안한지를 분류하는 방법.
  3. 시계열 특성을 이용하는 방법.
  4. 앙생블 적용하는 방법.
  5. Stratified Sampling을 이용한 적절한 분류. 
  6. 다양한 Fold 전략.

Which encoding is good for time validation 1.4417 


문제 상황 : high cardinarity ~ High-cardinality refers to columns with values that are very uncommon or unique. High-cardinality column values are typically identification numbers, email addresses, or user names. An example of a data table column with high-cardinality would be a USERS table with a column named USER_ID. ( 요약 : 값이 많이 다르다. ) 


현상 : One-hot encoding을 사용할 경우 high cardinarity 한 변수는 수많은 변수를 만들어 내고, 메모리 측면에서 비효율적임. 


해결 : 

  1. Label Encoding
  2. Mean Encoding
  3. Frequency Encoding
  4. Ensemble Encoding


Using classification for predictions


문제 상황 :  문제의 목적은 Regression 이지만 아래의 그림 처럼 대다수의 값이 0이고 소수( 약 1%)의 값만 15~23 근방의 값을 가지는 상황. 


현상 : 0을 20 근방으로 예측하거나, 20을 0 근방으로 예측을 피하는것이 20 근방에서 값을 제대로 예측하는것보다 중요한 상황임. (이유: 0을 20으로 예측하거나 20을 0근방으로 예측하면 RMSE 는 20임. 20을 20.5로 잘못 예측한것은 RMSE가 0.5임.)


해결 : 

  1. Classification -> Regression  
  2. Stratified Sampling (https://www.kaggle.com/youhanlee/stratified-sampling-for-regression-lb-1-4627)


I have seen the future


문제 상황 : 데이터는 고객들이 소비를 얼마나 했을지를 예측하는 문제임. 


해결 : 이를 예측하기 위해서 고객들의 현 행위를 보고 예측하는 방법(행위 변수)+ 고객들의 과거 행위를 가지고 예측하는 방법(Time series) 두가지를 통해 점수를 올림. 추가적으로 I have seen the future이라고 한 이유는 변수의 현 행위에 대한 특성을 올리기 위해서 shift(-1)이라는 작업을 하는데 이게 성능 상승에 영향이 컸음. 



future is here


I have seen the future의 점수를 올리기 위해서 xgb + lgb라는 앙생블 기법을 도입했음. 


참고자료

  • https://support.google.com/analytics/answer/1009409?hl=ko
  • http://analyticsmarketing.co.kr/digital-analytics/google-analytics/337/
  • https://www.d-mention.net/blog/insight/634/
  • https://www.opentracker.net/article/hits-or-pageviews
  • https://www.d-mention.net/blog/insight/634/

  • http://analyticsmarketing.co.kr/digital-analytics/google-analytics-basics/2313/
  • https://www.kaggle.com/c/ga-customer-revenue-prediction/discussion/67767
  • https://www.kaggle.com/ogrellier/i-have-seen-the-future
  • https://www.kaggle.com/ogrellier/using-classification-for-predictions
  • https://www.kaggle.com/youhanlee/which-encoding-is-good-for-time-validation-1-4417
  • https://www.kaggle.com/ashishpatel26/future-is-here
  • https://www.kaggle.com/youhanlee/stratified-sampling-for-regression-lb-1-4627