고객행동을 분석하기 위해 섹션, 이벤트와 고객이 산 제품을 알 수 있는 데이터를 활용해 보았다
https://www.kaggle.com/datasets/mkechinov/ecommerce-behavior-data-from-multi-category-store
데이터 특징
컬럼명 | 예시 |
event_time | 2020-04-01 00:00:00 UTC |
event_type | view |
product_id | 1201465 |
category_id | 2232732101407408685 |
category_code | apparel.shoes.slipons |
brand | samsung |
price | 230.38 |
user_id | 568984877 |
user_session | e2456cef-2d4f-42b9-a53a-8893cb0c6851 |
데이터의 수가 66589267개로 코딩이 오래 걸린다 -> 클릭 하나하나 신중해야 함
널값이 8992487개가 있음 -> brand 컬럼
category_code 컬럼이 apparel.shoes.slipons또는 apparel.shoes으로 카테고리.서브카테고리.아이템 및 카테고리.서브카테고리으로 구분되어 있어 전처리 필요
이벤트 타입이 구분되어도 모두 구매를 한 고객이기 때문에 이벤트에 따라 어떠한 차이가 있는지 알기 어려움
-> 같은 user_id에 따른 이벤트, 섹션, product_id를 비교해봐야 함
-> 같은 구매건으로 섹션에 따른 시간에 따라 이벤트 내용이 순차적으로 나와있을 수 있기 때문
전처리
1. 분석을 원활하게 하기 위해서 널값제거(category_id, brand로 인해 1/8 제거)
2. category_id의 데이터를 category, sub-category, item으로 분류하고 item이 없는 경우 null값 처리
store_df[['category','sub-category','item']] = store_df['category_code'].str.split('.',n=2,expand = True)
문제 : category_code의 .의 개수가 다르다 -> category - subcategory - (item)
- str.split() 함수: 문자열을 특정 구분자(delimiter)로 분할하는 함수
- n=2 옵션: 최대 분할 횟수 -> 지정하지 않으면 길이가 달라서 오류 발생
- expand=True 옵션: 분할된 문자열을 데이터프레임의 새로운 열로 확장 (False의 경우 리스트로 출력)
* 해당코드 50분 소요...
전저리 전 | 전처리 후 |
|
EDA
1. 고객별 EVENT
유저의 행동 로그에 따라 상품을 VIEW하고 CHART, PURCHASE하기까지 과정을 할 수 있다
해당 데이터의 가장 큰 특징으로 구매고객과 비구매고객을 퍼널 분석 가능
2. 구매분석
print('총 고객수 : ',store_df2['user_id'].nunique())
print('총 구매 고객수 : ',store_df2[store_df2['event_type']=='purchase']['user_id'].nunique())
print('전환율: ', store_df2[store_df2['event_type']=='purchase']['user_id'].nunique()/store_df2['user_id'].nunique()*100)
print('총 카테고리 수 : ',store_df2['category'].nunique())
print('총 서브 카테고리 수 : ',store_df2['sub-category'].nunique())
print('총 아이템 수 : ',store_df2['item'].nunique())
print('브랜드 수 : ',store_df2['brand'].nunique())
총 고객수 : 3934973
총 구매 고객수 : 425603
전환율: 10.81590648779547
총 카테고리 수 : 13
총 서브 카테고리 수 : 62
총 아이템 수 : 91 브랜드 수 : 4309
문제
1. 섹션관련
- 날짜가 바뀌어도 섹션아이디는 바뀌지 않음?
- 섹션이 바뀌는 시점에 대한 기준 필요
3. 실제 브랜드와 제품에 대한 괴리
-예 삼성
방법 : 흐린눈…(브랜드수가 4000개라서 바꾸는게 쉽지는 않을 것 같은데..)
3. 조금만 복잡해도 20분 ~ 최대 50분 시간 소요…(groupby도 못할것 같음..)
-> 치명적... 해당데이터는 4월 한달로 4.5G가 되며, 이를 4~7개월 결합하여 시계열분석을 시도할 경우..불가
예상 분석방법
1. event_time과 category_code를 활용한 시간에 따른 구입추세 : 00시에 ~를 사는 경향이 있음
-> 월별로 구분된 파일이므로, 4개의 파일을 결합하여 월별로도 비교할 수 있음
-> 컬럼의 수가 너무 많아서 시간의 문제
2. event_time과 user_id를 활용한 리텐션 구하기
3. event_time과 user_id와 price를 활용한 RFM구하기
-> 실제 가입일을 알 수 없으므로 4개월중 첫번째 방문날짜를 구해서 가입날짜로 추청
(논의)4. Aha moment 구하기
핵심가치 찾기 : (먼저 기준을 세워, 예 - 1회 구매) 이탈한 고객과 핵심고객(예- 5회 이상 방문)과의 구매제품에 대한 차이 비교
-> 가정: 이커머스의 핵심 가치는 해당상품이므로, 이탈한 고객은 상품에 대해 불만족하고, 핵심고객은 구매한 제품에 대하 만족한 것
--> 즉, 이커머스의 액션 XX는 무엇을 구매했냐의 차이
---> 액션도출: 이탈한 고객의 제품군의 상품과 브랜드를 분석하여 개선하기
---> 추가논의 : 부활고객은 무엇을 샀을까?
결론
장점 | 단점 |
고유 고객ID에 대한 행동(event)분석이 가능하다 상품별로 구체적이 브랜드와 품목이 있어서 시계열과 함께 트렌드 분석이 가능하다 (공개데이터에는 상품명 또는 브랜드를 알기 어려움 ㅠ.ㅠ) 특히 분, 초 의 로그까지 확인이 가능하여 시간대별 구매패턴 분석 가능 |
데이터 양이 너무 많이 시간이 오래걸린다(노트불으로는 불가능 ㅜ.ㅜ) 브랜드 명이 구체적이나 실제 브랜드와 상품 품목이 다르다 리텐션 및 RFM을 위한 가입날짜를 현재 데이터의 최조 접속을로 가정해야 한다 고개의 특징을 알기 어렵다(성별, 지역 등) |
고객에 대한 퍼널분석과 상품분석에 대한 장점이 있으나 분석시간이 너무 오래걸리고, 고객에 대한 데이터가 부족하여 고객 특징별 군집을 시도하기가 어려울 것 같다
'프로젝트' 카테고리의 다른 글
[분석프로젝트] 제과점영업 과연 인기가 있을까? (0) | 2024.08.09 |
---|---|
[코드리뷰] 고객생애가치(CLV) 계산하기 (0) | 2024.08.07 |
[분석프로젝트] 장난감 자동차 회사의 RFM 고객세그먼트 (0) | 2024.03.28 |
프로젝트 주제 사례 (0) | 2024.03.18 |
[주식 프로젝트3] 시계열 데이터 예측하기 (0) | 2024.03.13 |