리텐션 분석과 RFM 분석은 고객 데이터를 이해하고 마케팅 전략을 최적화하는 데 사용하는 방법 중 하나입니다.
오늘은 유통 데이터를 활용해서 이 두 가지 분석론을 진행해 보겠습니다.
1. 데이터 소개
분석에 사용한 데이터는 한 유통 회사에서 발생한 2010년 12월 1일부터 2011년 12월 9일까지 판매된 상품에 관한 데이터 입니다.
import pandas as pd
import plotly.express as px
data = pd.read_csv('ecommerce_data.csv')
data.head(10)
- InvoiceNo : 영수증 번호
- StockCode: 상품 번호
- Description: 상품명
- Quantity: 판매 수량
- InvoiceDate: 결제 날짜
- UnitPrice: 개당 가격
- CustomerID: 고객 번호
- Country: 나라
2. 분석 목적
한 문장으로 분석 목적을 정리하면, 해당 데이터를 통해 고객의 리텐션과 RFM을 통해 고객 특성을 분석하는 것입니다.
이를 위해 진행한 분석은 총 3가지 입니다.
✔️ 시간의 흐름에 따라 매출, 주문 고객수, 주문 단가의 추이는 어떻게 달라지는가?
✔️ 리텐션 분석: 시간의 흐름에 따라 고객이 얼마나 남고 이탈했는가?
✔️ RFM 분석 : 고객 행동에 따라 고객을 유형화하기
3. 데이터 전처리
본격적인 분석을 진행하기 전, 전처리를 진행하겠습니다.
data.info()
이번 분석은 고객에 대한 분석을 진행하는 것입니다. 그러므로 CustomerID에 대한 정보가 없는 행은 제거를 진행합니다.
# 결측치 제거
data.dropna(subset=['CustomerID'], inplace=True)
또한 시간의 흐름에 따른 분석을 다룰 것이므로 관련 변수들에 대한 타입을 변경해 줍니다.
# 데이터 타입 변경
data['InvoiceDate'] = pd.to_datetime(data['InvoiceDate'], format = '%m/%d/%Y %H:%M')
data['CustomerID'] = data['CustomerID'].astype(int).astype(str)
*결제 날짜에 해당하는 InvoiceDate의 경우 문자열 → 시간 타입
고객 아이디에 해당하는 CustomerID의 경우 숫자형 → 문자열
여기서 InvoiceDate에 대한 추가 작업을 진행하겠습니다.
InvoiceDate 컬럼은 시, 분, 초까지 나와있는 컬럼 입니다. 분석의 편의를 위해 연도와 날짜에 해당하는 컬럼을 추가해 줍니다.
# 날짜 컬럼 추가
data['date_ymd'] = data['InvoiceDate'].dt.date.astype('datetime64')
data['year'] = data['InvoiceDate'].dt.year
판매 수량과 개당 가격 컬럼을 이용해 매출 정보를 구합니다.
# 매출 컬럼 추가
data['amount'] = data['Quantity'] * data['UnitPrice'] # 매출 = 수량 * 개당가격
data.head(3)
전처리 마지막 단계로 판매 수량을 나타내는 Quantity에 대해 보겠습니다.
Quantity 컬럼이 0보다 작은 행의 수를 찾아보면 8905개가 나온 것을 알 수 있습니다.
len(data.query('Quantity < 0')) # 8905
이는 취소 주문이 발생한 내용으로, 분석의 편의를 위해 취소 주문이 발생한 경우 데이터를 제거하겠습니다.
#취소 주문건 제외
data = data.query('Quantity > 0')
이것으로 전처리가 완료되었습니다.
내용이 길어지는 관계로 본격적인 분석은 다음 포스팅부터 진행하겠습니다.
지금까지 읽어주셔서 감사합니다 :)
'데이터 분석 > 프로젝트' 카테고리의 다른 글
[Python] 유통 데이터를 활용한 리텐션과 RFM 분석(3) (0) | 2024.08.01 |
---|---|
[Python] 유통 데이터를 활용한 리텐션과 RFM 분석(2) (0) | 2024.07.21 |
[마케팅 데이터 분석] AARRR 실습(1) - Acquisition (2) | 2023.09.09 |
[논문] Encoder Decoder 알고리즘을 이용한 시계열 자료 예측 (0) | 2022.08.11 |
[생존분석] R을 이용한 백혈병 환자 데이터 분석 (0) | 2022.08.10 |