2022. 3. 17. 23:09ㆍ분석 Python/구현 및 자료
도입부
알아야 할 개념
- 총 마진 = (총매출 - 매출 원가) / (총수익)
고객 생애 가치(CLV)
고객 생애 가치는 고객이 인수부터 비즈니스와의 관계가 종료될 때까지 지출할 총금액입니다.
고객 생애 가치는 측정항목은 다양한 마케팅 및 분석 목적으로 사용됩니다.
그래서 측정하기 위해서는 다양하고 복잡한 공식들이 나올 수 있습니다.
단순한 고객 생애 가치 계산
계산하는 방식은 다양하지만 여기선 하나의 예시를 보여드립니다
$고객 생애 가치(CLV) = (평균 구매 금액 X 총 마진 X 구매 빈도 X 고객 수명) - 고객 획득 비용$
예시
평균 구매 금액 | 월간 구독료 $10 |
총 마진 | 70% |
고객 수명 | 60개월(5년) |
고객 획득 비용 | $20 |
$CLV = 10 x 0.7 x 60 - 20 = 400$
Implementation
아래 데이터는 다음과 같습니다.
전자 상거래 회사는 고객을 세분화하고 이러한 세그먼트에 따라 마케팅 전략을 결정하려고 합니다.
DataSet
https://archive.ics.uci.edu/ml/datasets/Online+Retail+II
Attribute Information:
InvoiceNo: Invoice number. Nominal. A 6-digit integral number uniquely assigned to each transaction. If this code starts with the letter ‘c’, it indicates a cancellation.
StockCode: Product (item) code. Nominal. A 5-digit integral number uniquely assigned to each distinct product.
Description: Product (item) name. Nominal.
Quantity: The quantities of each product (item) per transaction. Numeric.
InvoiceDate: Invoice date and time. Numeric. The day and time when a transaction was generated.
UnitPrice: Unit price. Numeric. Product price per unit in sterling (£).
CustomerID: Customer number. Nominal. A 5-digit integral number uniquely assigned to each customer.
Country: Country name. Nominal. The name of the country where a customer resides.
1. 데이터 준비
여기서는 간단한 고객 생애 가치를 계산해보고자 한다.
import pandas as pd
from sklearn.preprocessing import MinMaxScalerpd.set_option('display.max_columns', 20)
pd.set_option('display.max_rows', 20)
pd.set_option('display.float_format', lambda x: '%.5f' % x)
df_ = pd.read_excel("online_retail_II.xlsx", sheet_name="Year 2009-2010")
df = df_.copy()
df = df[~df["Invoice"].str.contains("C", na=False)]
#Issuing return invoices
df = df[(df['Quantity'] > 0)]
df.dropna(inplace=True) #Missing values
df["TotalPrice"] = df["Quantity"] * df["Price"]
cltv_c = df.groupby('Customer ID').agg({'Invoice': lambda x: x.nunique(),
'Quantity': lambda x: x.sum(),
'TotalPrice': lambda x: x.sum()})
cltv_c.columns = ['total_transaction', 'total_unit', 'total_price']
cltv_c.head()
2. Average Order Value
$\text {average_order_value}=\frac {\text {total_price}}{\text {total_transaction}}$
cltv_c['avg_order_value'] = cltv_c['total_price']/cltv_c['total_transaction']
3. Purchage Frequency
$\frac {\text {total_transaction}}{\text {total_number_of_costumers}}$
cltv_c["purchase_frequency"] = cltv_c['total_transaction']/cltv_c.shape[0]
4. Repeat Rate & Churn Rate
repeat_rate = cltv_c[cltv_c.total_transaction > 1].shape[0] / cltv_c.shape[0]
cltv_c[cltv_c.total_transaction > 1].shape
#If there is more than 'one' transaction choose it.
OUT = (2893, 5)
churn_rate = 1 - repeat_rate
5. Profit Margin
$\text {profit_margin} = \text {total_price} * 0.10$
cltv_c['profit_margin'] = cltv_c['total_price'] * 0.10
6. Customer Value
$\text {customer_value} = \text {average_order_value} * \text {purchase_frequency}$
cltv_c['customer_value'] = (cltv_c['avg_order_value'] * cltv_c["purchase_frequency"]) / churn_rate
7. Customer Lifetime Value
$CLTV = \frac {\text {customer_value}}{\text {churn_rate}} * \text {profit_margin}$
cltv_c['cltv'] = cltv_c['customer_value'] * cltv_c['profit_margin']
cltv_c
scaler = MinMaxScaler(feature_range=(0, 1))
scaler.fit(cltv_c[["cltv"]])
cltv_c["scaled_cltv"] = scaler.transform(cltv_c[["cltv"]])
cltv_c.sort_values(by="scaled_cltv", ascending=False).head()
8. Creating Segments
cltv_c["segment"] = pd.qcut(cltv_c["scaled_cltv"], 4, labels=["D", "C", "B", "A"])
cltv_c.head()
cltv_c[["total_transaction", "total_unit", "total_price", "cltv", "scaled_cltv"]].sort_values(by="scaled_cltv",ascending=False).head()
cltv_c.groupby('segment')[['total_transaction','total_unit','total_price','cltv','scaled_cltv']].agg({'count','mean','sum'})
Reference
https://python.plainenglish.io/customer-lifetime-value-calculation-clv-296827dc949e
'분석 Python > 구현 및 자료' 카테고리의 다른 글
Python) 직선 기준 점 대칭 이동 구현 (0) | 2022.04.29 |
---|---|
Python) 고객 생애 가치(CLV) 예측하기 (0) | 2022.03.17 |
Python) pydantic 알아보기 (1) | 2022.03.14 |
Python) Google Calendar API 사용 방법 (0) | 2022.02.12 |
Python) 기념일 관리하기 및 구글 캘린더에 등록할 템플릿 만드는 코드 (0) | 2022.02.12 |