Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- dl
- 에이다부스트
- 논문리뷰
- skld
- 선형회귀
- AAAI
- confusion_matrix
- 로짓
- DT
- 로지스틱
- 머신러닝
- Machine Learning
- OLS
- 의사결정트리
- 규제
- distillm
- AutoML
- 부스팅
- 빅데이터분석학회
- 지니계수
- 가지치기
- 엔트로피
- 평가지표
- ML
- BDA
- 한국산업경영시스템학회
- adaboost
- 데이터사이언스
- BDA학회
- 랜덤포레스트
Archives
- Today
- Total
데이터 사이언스 공부할래
[BDA 데이터 분석 모델링반 (ML 1) 7회차] RFM 분석 본문
Online Retail 데이터를 활용하여 RFM 분석을 실습해본다.
RFM 분석
고객 분석을 위한 피처인 R, F, M 피처를 가지고 고객을 이해하고, 분석하는 방법론이다.
R(Recency) : 고객 중 가장 최근 구매한 상품 구입일과 현재까지의 기간
F(Frequency) : 상품 구매 횟수, 주문 횟수
M(Monetary) : 고객의 총 주문 금액
분류 기준, 도메인에 따라 분석 결과가 변할 수 있다.
RFM 피처 외에 쿠폰에 대한 사용, 고객의 불만율, 고객의 다양한 제품 구매, 고객의 지속기간, 손익 등을 피철로 추가하여 분석하는 것도 가능하다.
retail_df=pd.read_excel(io='online_retail_II.xlsx')
retail_sp=retail_df[0:10000]
RFM 피처를 만드는 방법
데이터셋의 크기가 크기에 분석하려는 집단을 선정하여 데이터 전처리를 진행한다.
주문 수량이 음수인 사람(주문 취소 반품 고객) 제외, 구매 국가가 영국인 회원 고객만을 집단으로 선정했다. (다른 집단으로 선정해도 괜찮다.)
# 취소반품 고객 제외
retail_sp=retail_sp[retail_sp['Price']>0]
retail_sp=retail_sp[retail_sp['Quantity']>0]
# 회원인 고객만 분석 가정
retail_sp=retail_sp[retail_sp['Customer ID'].notnull()]
# 구매 국가도 영국으로만 지정
retail_sp=retail_sp[retail_sp['Country']=='United Kingdom']
Quantity와 Price의 곱을 통해 M 피처를 만든다.
retail_sp['sales_amount']= retail_sp['Quantity']*retail_sp['Price']
retail_sp['Customer ID'] = retail_sp['Customer ID'].astype(int) #error 방지를 위해 int로 변경
고객마다 하나의 지표로 수립해야 하므로, Customer ID 별로 groupby를 진행한다.
#RFM 지표 만들기
agg_rfm = {
'InvoiceDate' :'max', #주문일자, 가장 최근이니 max
'Invoice' : 'count', #카운트 -> 주문 제품 수량
'sales_amount' : 'sum' # 전체 주문 금액 sum
}
cust_df =retail_sp.groupby('Customer ID').agg(agg_rfm)
R 피처를 만들기 위해 timestamp를 활용한다.
max(retail_sp.InvoiceDate)
# Timestamp('2009-12-04 09:31:00')
import datetime as dt
cust_df['Recency']= cust_df['InvoiceDate'] - dt.datetime(2009,12,31)
# timedelta 계산된 값을 x.days+1로 나눠서 수치형으로 변환
cust_df['Recency']=cust_df['Recency'].apply(lambda x: x.days+1)
cust_rfm=cust_df[['Invoice','sales_amount','Recency']]
cust_rfm

활용 데이터셋 : https://www.kaggle.com/datasets/vijayuv/onlineretail
Online Retail Data Set
www.kaggle.com
'B.D.A' 카테고리의 다른 글
[BDA 데이터 분석 모델링반 (ML 1) 9회차] 선형회귀 응용 (4) | 2024.06.29 |
---|---|
[BDA 데이터 분석 모델링반 (ML 1) 8회차] 선형회귀 (5) | 2024.06.28 |
[BDA 데이터 분석 모델링반 (ML 1) 6회차] K-means 클러스터링 (3) | 2024.06.04 |
[BDA 데이터 분석 모델링반 (ML 1) 5회차] KNN 알고리즘 (4) | 2024.06.03 |
[BDA 데이터 분석 모델링반 (ML 1) 4회차] 임계점 평가지표 (5) | 2024.05.28 |