본문 바로가기
Data Analysis/Growth Hacking

4. Google Analytics 에서 말하는 Session 세션이란 무엇인가 ? 세션을 만드는 방법은 ?

by Hagrid 2022. 12. 6.
반응형

세션이란?

  • 만약 제가 Coupang 페이지에 들어가본다고 가정합니다. 들어가서 어떤 페이지에도 들어가고, 클릭도 해보고 이런저런 활동을 했습니다. 그리고 1 시간 정도 점심 먹고 나서 또 coupang 페이지에 들어가서 어떠한 행동을 했다고 하면, 그 두개의 행동 덩어리를 각각 묶으면 분석에 활용할 수 있습니다.
    • 사람들이 한 번 들어왔을 때 어떤 행동들을 연속적으로 하는지, 어떤 계기로 앱을 종료했는지 같은 개념이 세션입니다.
  • GA에서는 30분 단위로 세션을 판단합니다.
    • GA에서는 30분간 사이트와 아무런 상호작용이 없다면 ⇒ 세션이 끊어진걸로 봅니다.
    • 만약 30분 이내 무슨 상호작용이 있다면 ⇒ 세션이 연속되는걸로 정의합니다.</aside>
    • <aside> 📌 즉 , 30분 이내의 같은 user_id 에서 event가 발생한다면 ⇒ 같은 세션입니다.
  • Session은 Cohort랑 다른 개념입니다.

데이터를 가지고 분석해봅니다. 

 

https://www.kaggle.com/datasets/mkechinov/ecommerce-events-history-in-electronics-store

 

eCommerce events history in electronics store

This dataset contains 900K detailed users' events from eCommerce website

www.kaggle.com

💡 Kaggle 에서 E- Commerce events history in electronics store 데이터를 다운로드 하여 사용했습니다.

electronics store의 e commerce 데이터 입니다.

  • 'event_time', - Event 가 발생한 시간입니다.
  • 'event_type', - 사용자의 행동인 view, cart, remove_from_cart, purchase 가 담겨있는 컬럼입니다. (remove_from_cart 는 0개 입니다.)
  • 'product_id', - 제품 ID 입니다.
  • 'category_id', - 각 제품의 범주 id 입니다.
  • 'category_code', - 각 제품이 해당하는 범주 이름입니다.
  • 'brand', - 각 제품의 브랜드 입니다.
  • 'price', - 제품 가격입니다. (같은 제품이라도 계속 변화합니다.)
  • 'user_id', - User들의 고유한 id 입니다.
  • 'user_session' - 유저들의 세션을 나타냅니다. 
  • 컬럼명 설명
event_time Event 가 발생한 시간입니다.
event_type 사용자의 행동인 view, cart, remove_from_cart, purchase 가 담겨있는 컬럼입니다.
product_id 제품 ID 입니다.
category_id 각 제품의 범주 id 입니다.
category_code 각 제품이 해당하는 범주 이름입니다.
brand 각 제품의 브랜드 입니다.
price 제품 가격입니다. (같은 제품이라도 계속 변화합니다.)
user_id User들의 고유한 id 입니다.
user_session 유저들의 세션을 나타냅니다.

  • 원본 데이터는 (885129 rows X 9 columns)의 shape 으로 구성되어 있습니다.
  • **event_time 이 object 입니다.**

현재 정의된 Session 살펴보기

  1. 현재 정의된 세션 살펴보기
    1. 572개가 나온 'nFlhu5QzOd'값, 474개가 나온 '9HqvxzKlPb' 값을 살펴보겠습니다.
      1. 2020-12-08 06:13:31 에 발생한 event와
        2021-02-18 07:59:47 에 발생한 event가 같은 세션으로 묶여 있습니다.
      2. 뒤의 row - 앞의 row’ 를 통해 시간차이를 계산하고 , 시간차이가 30분 이상인 부분을 조회한 결과
        user_session 이 nFlhu5QzOd인 데이터에서는 95 rows 의 데이터가 나왔습니다.
        • 이는 95개의 데이터로부터 새로운 세션으로 정의되어야 함을 알려줍니다.
      3. 474개가 나온 '9HqvxzKlPb' 값을 조회해도 똑같이 세션의 정의가 잘못 되었음을 알 수 있었습니다.

📌 현재의 세션 칼럼은 적합하지 않습니다.
Cohort의 개념과 가깝고 Session의 개념으로 보기에는 무리가 있습니다.

 


Session 재정의

    1. 세션 재정의 순서 및 재정의
      1. [user_id , date] 별로 정렬해줍니다.
      2. event_time 의 데이터 타입을 변경해주고 event_time 컬럼을 활용해 **‘뒤의 행 - 앞의 행’**의 차이를 구해줍니다. (= diff 로 정의합니다.)
      3. diff 값이 30분 이상이면 New 값을 할당합니다. (그렇지 않으면 ‘False’)
      4. 또한 user_id 값이 int 형식으로 되어 있는것을 활용해 **‘뒤의 행 - 앞의 행’**의 차이가 0이 아니라면 user_id 가 새롭게 변경된 것이므로 New 값을 할당해줍니다. (그렇지 않으면 ‘False’) (• user_id 컬럼별로 내림차순으로 정렬했기 때문에 user_id 컬럼이 바뀌면 무조건 새로운 세션입니다.)
      5. • user_id값은 같으면서 이벤트 발생 시간이 30분이 넘는 부분을 체크합니다.
        1. • id값은 같으면서 이벤트 발생 시간이 30분이 넘는 부분은 새로운 세션으로 간주합니다 !
        2. c. 에서 할당한 값이 New이거나 d. 에서 할당한 값이 New인 부분을 파악합니다.
        3. 두 조건을 섞어줍니다.
new = df_['new_session'] == 'New'
new_check = df_['check_'] == 'New'
fal_new = df_['new_session'] == 'False'
condition = new + (new_check & fal_new)
df_['New_sessoion'] = np.where(condition , 'new','exist')
df_

새롭게 시작하는 세션을 만들 수 있습니다.

  • 이후 New와 False 값을 True 와 False 를 가지는 Boolean 형식으로 바꿔줍니다.
  • True면 +1씩 추가되는 누적합을 계산합니다.
  • 숫자가 할당되면 ⇒ 데이터 타입을 string(문자열) 형식으로 바꾸어 줍니다.
  • 세션별로 다른 숫자(dtype = str)가 할당 되었습니다.
new     0.5538
exist   0.4462
- 55.38 % and 44.62 %
📌 전체 세션을 카운트하면 490210개 입니다.
 

일별 고유 세션 수

 

  • 새로운 세션이 시작되는 곳을 기반으로 일별 고유 세션수를 측정
    • 날짜별 New_session 컬럼의 = ‘New’의 갯수
      • 새로운 세션이 시작되는 곳입니다.
date_new = df.groupby(['date','New_sessoion'],as_index=False).size() date_new = date_new.pivot(index='date',columns='New_sessoion',values='size').fillna(0) date_new
      • 테이블
        • 158 rows × 3 columnsNew_sessoion exist new Session
          date      
          2020-09-24 718 1547 2265
          2020-09-25 1415 2826 4241
          2020-09-26 1218 2247 3465
          2020-09-27 1414 2437 3851
          2020-09-28 1685 3029 4714
          ... ... ...  
          2021-02-24 2919 2884 5803
          2021-02-25 2952 2695 5647
          2021-02-26 3014 2850 5864
          2021-02-27 2438 2495 4933
          2021-02-28 2700 2568 5268

 


GA에서 세션을 비록 30분으로 잡지만 비즈니스 성격에 따라 다르게 정의해볼수도 있을것 같습니다 ! 

반응형

댓글