본문 바로가기

데이터 분석/프로젝트

[Python] 유통 데이터를 활용한 리텐션과 RFM 분석(1)

반응형

리텐션 분석과 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')

 

 

 

이것으로 전처리가 완료되었습니다.

 

 

내용이 길어지는 관계로 본격적인 분석은 다음 포스팅부터 진행하겠습니다.

지금까지 읽어주셔서 감사합니다 :)

반응형