We use cookies and other tracking technologies to improve your browsing experience on our website, to show you personalized content and targeted ads, to analyze our website traffic, and to understand where our visitors are coming from.
thank u, Nest (고객평생가치 기반 고객세분화 분석)
import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns# Colab에서 한글 폰트 설정!apt-get update -qq!apt-get install fonts-nanum -qq -y # -y 플래그를 추가하여 자동 yes 응답# 설치된 나눔스퀘어 ac 폰트 경로 찾기font_files =!fc-list :lang=ko | grep "NanumGothicCoding"# 찾은 폰트 경로를 사용if font_files:# 첫 번째 찾은 경로를 사용 font_path = font_files[0].split(':')[0]print(f"Found font path: {font_path}")import matplotlib.font_manager as fm fm.fontManager.addfont(font_path) plt.rc('font', family='NanumGothicCoding') sns.set_theme(font="NanumGothicCoding")# 마이너스 기호 깨짐 방지 plt.rcParams['axes.unicode_minus'] =Falseelse:print("NanumGothicCoding font not found after installation. Please check installation.")
W: Skipping acquire of configured file 'main/source/Sources' as repository 'https://r2u.stat.illinois.edu/ubuntu jammy InRelease' does not seem to provide it (sources.list entry misspelt?)
Selecting previously unselected package fonts-nanum.
(Reading database ... 126284 files and directories currently installed.)
Preparing to unpack .../fonts-nanum_20200506-1_all.deb ...
Unpacking fonts-nanum (20200506-1) ...
Setting up fonts-nanum (20200506-1) ...
Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ...
Found font path: /usr/share/fonts/truetype/nanum/NanumGothicCodingBold.ttf
고객평생가치 기반 세분화 분석
배경
모든 고객은 동일한 가치를 지니지 않습니다. Fader의 저서에서 언급된 ’모든 손님은 왕이다’라는 전통적인 접근 방식은 모든 고객을 동등하게 대우하려는 경향을 보입니다. 하지만 고객 평생 가치(Customer Lifetime Value, CLV) 관점에서 보면, 모든 고객이 비즈니스에 동일한 기여를 하는 것은 아닙니다. 성공적인 비즈니스를 위해서는 한정된 자원을 보다 잠재 가치가 높은 고객에게 집중하고, 이들을 중심으로 비즈니스 전략을 전개하는 고객 중심(Customer Centricity) 경영이 필수적입니다. 고객 중심 경영은 마케팅 활동을 측정 가능한 지표로 전환하며, 고객 관계 관리(Customer Relationship Management, CRM) 시스템을 통해 확보된 고객 데이터를 기반으로 고객을 깊이 이해하고, 이를 통해 궁극적으로 기업 이익을 극대화하는 것을 목표로 합니다.
단순히 고객 정보를 기록하는 것만으로는 충분하지 않습니다. CRM의 진정한 가치는 기록된 정보를 적극적으로 활용하여 고객 개개인에 대한 이해를 높이고, 이를 바탕으로 맞춤형 전략을 수립하는 데 있습니다.
이러한 고객 평생 가치 접근법은 고객을 정량적으로 이해하고, 그 결과를 실제 마케팅 전략에 적용하려는 시도입니다. 마침 이러한 분석을 실제 데이터를 활용해 실습해 볼 기회를 찾던 중, 본 공모전을 알게 되어 참여하게 되었습니다.
데이터 설명
분석에 사용된 데이터는 다음과 같습니다.
온라인 거래 관련 데이터 (Sales Data)
고객 정보 데이터 (Customer Data)
할인 정보 데이터 (Discount Data)
마케팅 비용 정보 데이터 (Marketing Cost Data)
세금 관련 정보 데이터 (Tax Data)
데이터 전처리
데이터 불러오기
from google.colab import drivedrive.mount('/content/drive')# 데이터를 저장한 Google Drive 경로로 수정data_path ='/content/drive/MyDrive/700. 프로젝트/740. 데이터분석/02. thank-u-nest/01. data/'customer = pd.read_csv(data_path +'Customer_info.csv')discount = pd.read_csv(data_path +'Discount_info.csv')marketing = pd.read_csv(data_path +'Marketing_info.csv')onlinesales = pd.read_csv(data_path +'Onlinesales_info.csv')tax = pd.read_csv(data_path +'Tax_info.csv')
/tmp/ipython-input-4-3398978212.py:1: FutureWarning: Downcasting behavior in `replace` is deprecated and will be removed in a future version. To retain the old behavior, explicitly call `result.infer_objects(copy=False)`. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`
discount['월'] = discount.월.replace(month_dict)
판매 금액 비중에서는 Nest 계열(Nest-USA, Nest, Nest-Canada) 제품이 과반수를 차지하는 것으로 나타났습니다. 반면, 판매 수량 비중에서는 Office, Apparel, Drinkware 등의 카테고리가 높은 비중을 차지했습니다. 이는 Nest 계열 제품이 상대적으로 고가이며 구매 주기가 긴 반면, Office, Apparel, Drinkware 등의 카테고리는 비교적 저렴하고 구매 빈도가 높은 품목이기 때문으로 해석됩니다. 이러한 상품 특성의 차이는 고객 분석 시 반드시 고려되어야 할 중요한 요소입니다.
데이터 분석
분석은 두 Phase로 나뉘어 진행됩니다. 첫번째 페이즈에서는 RFM/P 분석을 수행합니다. 두번째 페이즈에서는 RFM/P 수치를 기반으로 고객평생가치를 구합니다.
RFM 분석은 최근구매 (Recency), 구매주기(Frequency)와 금전가치(Monetary Value)를 산출하여 고객을 세분화하는 방법입니다. RFP 분석은 카테고리의 차이를 고려하지 않고 최근구매 (Recency), 구매주기(Frequency)와 금전가치(Monetary Value)를 산출하여 RFM 분석을 수행하면 오류를 일으킬 수 있습니다.
이에 따라 카테고리를 고려한 RFM 분석, 즉 RFM/P (Recency, Frequency, Monetary Value per Product category) 분석을 수행하였습니다.
RFM 분석과 같은 고객 세분화를 시도하는 것은 가치 있는 고객을 알아보기 위함입니다. 고객의 가치를 파악하기 위해 RFM 지표로부터 시점까지 고객 의 카테고리 에 대한 예상구매금액과 예상구매횟수를 구했으며, 이는 각각 Gamma-Gamma 모델과 BG/NBD 모델로부터 추정되었습니다.
이 글에서는 미래 52주(t=52)에 대한 모든 유저의 ‘More Bags’, ’Android’를 제외한 카테고리에 대한 예상구매금액과 예상구매횟수를 구했습니다. 고객가치예상구매금액예상구매횟수 추정된 예상구매금액과 예상구매횟수의 곱이 고객/카테고리별 고객가치이며, 이로부터 아래와 같은 고객/제품 평생가치 포트폴리오를 구축할 수 있습니다. 포트폴리오 내 고객/카테고리별 가치를 고객별로 합산한 값이 고객평생가치입니다.
고객별 RFM/P(Recency, Frequency, Monetary value per Product category) 계산
Accessories
----------------------
r = 0.13912008073722326
alpha = 8.176630570812936
a = 1052808.6234128857
b = 501402.9633816013
p = 1.8348050677519895e+133
q = 3.5580081632721924e+127
gamma = 4.6042778608761196e-05
Apparel
----------------------
/tmp/ipykernel_226/806044944.py:23: FutureWarning: The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.
df = pd.concat([df, grouped], ignore_index=True)
r = 0.17923159086008145
alpha = 1.1903404140925717
a = 12.696467541252009
b = 27.601082880439954
p = 2.5129593127494996
q = 2.6069465924123243
gamma = 208.15006556477317
Backpacks
----------------------
r = 0.26646419623447243
alpha = 116.52392596923818
a = 9.394653723311084e-10
b = 2.2672142445478647
p = 3.727981318000165e+89
q = 2.5337574645747155e+84
gamma = 0.0005354572432201953
Bags
----------------------
r = 0.1268609869185903
alpha = 2.966232640652436
a = 7.316117332170791
b = 12.390568106079222
p = 3.4224680850941467
q = 2.77620821431516
gamma = 93.17829522329001
Bottles
----------------------
r = 0.32202021881812226
alpha = 58.88183726710254
a = 7.542067151205418e-08
b = 1.7094503770590088
p = 2.743222204193875e+64
q = 1.4604030300902113e+58
gamma = 7.526130258503049e-06
Drinkware
----------------------
r = 0.15220915102007612
alpha = 2.6623905053523713
a = 5.545536572500552
b = 9.173539222442841
p = 2.090490964871371
q = 2.4401314642392835
gamma = 139.90068112083412
Fun
----------------------
r = 0.256238525933553
alpha = 52.03785741362919
a = 6.258359013875896e-09
b = 0.9690240429752579
p = 0.3453777559426032
q = 1.9822687938570231
gamma = 157.9458801540525
Gift Cards
----------------------
r = 0.11283238487152375
alpha = 196.12245982545687
a = 0.048698349755692844
b = 0.001057245129677128
p = 538.310948990716
q = 165287096.21183765
gamma = 89546243.91024789
Google
----------------------
r = 0.08137060036161638
alpha = 36.15580120680644
a = 9.126081296868924e-08
b = 3.379306880534778
p = 0.22662065091385475
q = 23287769.554064788
gamma = 2726064192.3886366
Headgear
----------------------
r = 0.17314371224052738
alpha = 11.045263790422947
a = 669783.4179023418
b = 1467404.1515586074
p = 1.1190108558062278e+125
q = 4.911505698163156e+119
gamma = 0.0001564922415696879
Housewares
----------------------
r = 0.2515645253488443
alpha = 141.9793563383636
a = 9.664784317770056e-09
b = 1.7146547447538287
p = 5.769397633173366e+125
q = 3.3454380972575686e+119
gamma = 3.639041388553725e-05
Lifestyle
----------------------
r = 0.15404201163538178
alpha = 3.596814333049493
a = 7.008205975534631
b = 11.765664876059486
p = 2.4228375137721496
q = 2.7792198716482064
gamma = 83.226443006274
Nest
----------------------
r = 0.13043786848149166
alpha = 1.5168593891537494
a = 6.24180287665729
b = 8.384595811936713
p = 5.437162210655444
q = 3.183747466632423
gamma = 307.3106321927787
Nest-Canada
----------------------
r = 0.9320315618078716
alpha = 187.6748601926152
a = 4.9689145957934585e-17
b = 1.4542098190160407e-11
p = 1.7100905405430378e+77
q = 1.2494512650212776e+72
gamma = 0.002038622217972977
Nest-USA
----------------------
r = 0.15766051260003858
alpha = 0.8551128738058902
a = 16.997925357991125
b = 37.87458821391318
p = 2.2391550285363344
q = 7.373606061330563
gamma = 3291.3309614290924
Notebooks & Journals
----------------------
r = 0.5664972766923593
alpha = 66.01347305708448
a = 4.619180319274446e-09
b = 3.3508438812566643
p = 12.261404666185609
q = 0.8622063891044838
gamma = 4.729693892027056
Office
----------------------
r = 0.16503592303757686
alpha = 2.0132095927399236
a = 8.77528359846142
b = 15.484533903163326
p = 1.531891564455388
q = 2.373456005944883
gamma = 198.5441038187032
Waze
----------------------
r = 0.12111468757819649
alpha = 6.677725335151996
a = 3.9257610096632476
b = 4.171950945336615
p = 4.7373814059561745
q = 3.847741307619433
gamma = 25.86433099442864
groups = pd.qcut(table.sum(axis=1), q=10, labels=np.arange(10)+1).rename('Group')
분석결과
import seaborn as sns# 카테고리별 박스플롯sns.boxplot(x='Monetary', y='제품카테고리', orient='h', data=RFM)plt.xlabel('Monetary Value')plt.ylabel('')plt.suptitle('카테고리별 Monetary Value의 박스 그림')plt.title('Nest 계열의 Monetary value \$200 을 상회하고 다른 카테고리는 \$200을 넘지 않음',fontsize=9, color='gray')plt.show()
import seaborn as sns# 카테고리별 박스플롯sns.boxplot(x='Frequency', y='제품카테고리', orient='h', data=RFM)plt.suptitle('카테고리별 Frequency의 박스 그림')plt.title('Nest 계열과 다른 카테고리 간에 거의 차이 없으며 반복구매는 대부분 0~1회 발생함',fontsize=9, color='gray')plt.ylabel('')plt.show()
Monetary Value는 Nest 계열의 값이 평균적으로 컸습니다. 이는 Nest 계열 제품의 상품가격이 비싸기 때문에 나타나는 현상으로 보입니다. 하지만, Frequency에 있어서는 Nest와 다른 카테고리 사이의 차이가 거의 없었습니다. 분석 초기에 예상한 것처럼 Nest 계열의 Monetary Value는 다른 카테고리보다 컸지만, 예상과 달리 다른 카테고리의 Frequency가 크지 않았고, 오히려 Nest 계열의 상품에서도 반복구매(Frequency가 0보다 큼)가 타 카테고리만큼 작았습니다.
(t7.sum(axis=1) / groups.value_counts()).plot.bar()plt.suptitle('분위별 고객당 평균 Customer Lifetime Value')plt.title('10분위 \$2,926 1분위는 \$92 로 크게 차이남',fontsize=9, color='gray')
Text(0.5, 1.0, '10분위 \\$2,926 1분위는 \\$92 로 크게 차이남')
분위별 고객 평균 고객평생가치는 위와 같이 비선형적으로 증가합니다. 가장 고객평생가치가 큰 그룹인 10 그룹은 $2,926/1년, 가장 낮은 1 그룹은 $92/1년 정도의 추정가치를 보입니다.
t8.plot.bar(stacked=True)plt.legend(title="제품카테고리", bbox_to_anchor = (1,1))plt.yticks([])plt.suptitle('분위별 카테고리들의 CLV 차지 비중')plt.title('분위가 높아질수록 Nest, Nest-USA가 차지하는 비중이 커짐',fontsize=9, color='gray')
Text(0.5, 1.0, '분위가 높아질수록 Nest, Nest-USA가 차지하는 비중이 커짐')
분위 내 카테고리의 고객평생가치 차지 비중을 확인하면, 추정 고객평생가치가 큰 10 그룹으로 갈수록 Nest 계열 제품의 비중이 평생가치 합산에서 차지하는 비중이 커지는 것을 확인할 수 있습니다. 이는 Nest 카테고리가 아닌 카테고리의 구매를 Nest 카테고리의 구매로 연결시키는 것이 더 많은 이익을 창출하기 위한 방법임을 알려줍니다.
인사이트 및 솔루션 제안
Nest 카테고리 강화 및 다른 카테고리로 고객 중심성 재편
① 마케팅 프로모션 비용의 60% 이상을 Nest에 활동
Nest 계열(Nest, Nest-Canada, Nest-USA)이 고객평생가치에 차지하는 비중이 60% 이상입니다. 이에 추후 예상 마케팅 투자는 Nest 계열에 60% 이상 투자하는 것이 옳습니다. 위에서 확인했듯이 높은 고객평생가치를 지닌 그룹에서의 Nest 구매 비중은 더욱 커지므로 마케팅 비용의 70~80%를 Nest 제품에 할애하는 것이 바람직합니다.
② Nest 케이스 및 액세서리 제품 도입
Nest는 Google의 센서 기반 제품 라인업으로, 전자기기의 경우 외부 충격 방지나 개인화를 위해 케이스 제품이 선호됩니다. Nest 소유 고객은 스토어에 가장 큰 고객이라고 할 수 있으므로 그로부터 추가 이익을 획득할 수 있는 보호 케이스 및 액세서리 제품의 도입을 제안합니다.
③ Nest 선물 포장 및 각인 서비스 신규 제공
위에서 살펴 본 것처럼 Nest 계열의 Monetary value가 다른 카테고리에 비해서 큽니다. 따라서, Nest 제품의 추가 구매를 유도하는 것은 스토어의 이익을 늘리는데 다른 카테고리보다 더 큰 역할을 할 수 있습니다. 다만, 중요한 Nest 제품을 여러 개 구매하여 실사용하지 않으므로 선물 유도를 통한 추가 구매가 더욱 현실적입니다. 이를 위해 선물을 연관하여 고객을 지원할 수 있는 부분의 강화가 필요합니다.
④ 타 카테고리 제품도 Nest와 연계할 수 있는 방안 모색
스마트 홈 제품의 Nest 고객들이 구매할 수 있는 타 카테고리 제품 라인업을 제안합니다. IoT 기술이 원성 제품과 연계하여 추가적인 이득을 제공하기를 원합니다. 예를 들어 IoT 기술이 적용된 가방은 보안/분실방지 기능의 가치를 제공하여 고객의 새로운 구매를 유도합니다. Nest 고객의 이러한 기능적 제품에 관심을 가질 수 있으므로, 타 카테고리에도 Nest와 연동될 수 있는 제품의 개발이 요구됩니다.
참고문헌
Fader, P. S., Hardie, B. G., & Lee, K. L. (2005). “Counting your customers” the easy way: An alternative to the Pareto/NBD model. Marketing science, 24(2), 275-284.
Fader, P. S., & Hardie, B. G. (2013). The Gamma-Gamma model of monetary value. February, 2, 1-9.
Heldt, R., Silveira, C. S., & Luce, F. B. (2021). Predicting customer value per product: From RFM to RFM/P. Journal of Business Research, 127, 444-453.
Ben Alex Keen. (2018). BG-NBD Model for Customer Base Analysis in Python. Ben Alex Keen Blog. https://benalexkeen.com/bg-nbd-model-for-customer-base-analysis-in-python/