반응형
세션이란?
- 만약 제가 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
💡 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 살펴보기
- 현재 정의된 세션 살펴보기
- 572개가 나온 'nFlhu5QzOd'값, 474개가 나온 '9HqvxzKlPb' 값을 살펴보겠습니다.
- 2020-12-08 06:13:31 에 발생한 event와
2021-02-18 07:59:47 에 발생한 event가 같은 세션으로 묶여 있습니다. - ‘뒤의 row - 앞의 row’ 를 통해 시간차이를 계산하고 , 시간차이가 30분 이상인 부분을 조회한 결과
user_session 이 nFlhu5QzOd인 데이터에서는 95 rows 의 데이터가 나왔습니다.- 이는 95개의 데이터로부터 새로운 세션으로 정의되어야 함을 알려줍니다.
- 474개가 나온 '9HqvxzKlPb' 값을 조회해도 똑같이 세션의 정의가 잘못 되었음을 알 수 있었습니다.
- 2020-12-08 06:13:31 에 발생한 event와
- 572개가 나온 'nFlhu5QzOd'값, 474개가 나온 '9HqvxzKlPb' 값을 살펴보겠습니다.
📌 현재의 세션 칼럼은 적합하지 않습니다.
Cohort의 개념과 가깝고 Session의 개념으로 보기에는 무리가 있습니다.
Session 재정의
-
- 세션 재정의 순서 및 재정의
- [user_id , date] 별로 정렬해줍니다.
- event_time 의 데이터 타입을 변경해주고 event_time 컬럼을 활용해 **‘뒤의 행 - 앞의 행’**의 차이를 구해줍니다. (= diff 로 정의합니다.)
- diff 값이 30분 이상이면 New 값을 할당합니다. (그렇지 않으면 ‘False’)
- 또한 user_id 값이 int 형식으로 되어 있는것을 활용해 **‘뒤의 행 - 앞의 행’**의 차이가 0이 아니라면 user_id 가 새롭게 변경된 것이므로 New 값을 할당해줍니다. (그렇지 않으면 ‘False’) (• user_id 컬럼별로 내림차순으로 정렬했기 때문에 user_id 컬럼이 바뀌면 무조건 새로운 세션입니다.)
- • user_id값은 같으면서 이벤트 발생 시간이 30분이 넘는 부분을 체크합니다.
- • id값은 같으면서 이벤트 발생 시간이 30분이 넘는 부분은 새로운 세션으로 간주합니다 !
- c. 에서 할당한 값이 New이거나 d. 에서 할당한 값이 New인 부분을 파악합니다.
- 두 조건을 섞어줍니다.
- 세션 재정의 순서 및 재정의
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’의 갯수
- 새로운 세션이 시작되는 곳입니다.
- 날짜별 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
- 158 rows × 3 columnsNew_sessoion exist new Session
- 테이블
-
GA에서 세션을 비록 30분으로 잡지만 비즈니스 성격에 따라 다르게 정의해볼수도 있을것 같습니다 !
반응형
'Data Analysis > Growth Hacking' 카테고리의 다른 글
A/B TEST SRM 오류를 해결하는 방법 : The essential guide to Sample Ratio Mismatch for your A/B tests (0) | 2022.12.08 |
---|---|
A/B test 관련 학습자료 (0) | 2022.12.08 |
3. 데이터 분석가가 지표를 설정하는 법 (0) | 2022.12.04 |
2. Retention Chart를 SQL으로 그려보자 ! (0) | 2022.11.19 |
1. Retention Chart를 Python으로 그려보자 ! (0) | 2022.11.19 |
댓글