아래 링크는 포르투칼의 한 도매업자가 자신의 고객사들의 제품별 연간 지출을 정리한 데이터베이스입니다.
https://archive.ics.uci.edu/ml/datasets/wholesale+customers
이 데이터베이스는 다음과 같은 컬럼들로 구성되어 있습니다. 총 440개의 행이 있습니다. 각 행이 하나의 고객사를 뜻합니다.
1) Channel: 고객 채널(호텔, 레스토랑, 카페 또는 소매점)
2) Region: 고객 지역(Lisbon, Oporto 또는 다른 지역)
3) Fresh: 신선 제품에 대한 연간 지출
4) Milk: 유제품에 대한 연간 지출
5) Grocery: 식료품에 대한 연간 지출
6) Frozen: 냉동 식품에 대한 연간 지출
7) Detergents_Paper: 세제 및 종이 제품에 대한 연간 지출
8) Delicassen: 총알(?) 제품에 대한 연간 지출
k-means 알고리즘으로 도매업 고객사 분류하기
이 440개의 고객사를 판매 물건에 따라 분류를 해보겠습니다. k-means 알고리즘으로 5개의 군집으로 분류해보겠습니다. 군집 알고리즘은 비지도학습이기 때문에 클래스 정보가 필요없습니다. 1,2번 컬럼을 제외한 3번째 컬럼부터 8번째 컬럼을 특성으로 사용하겠습니다. NaN 값이 포함되어 있지 않은 예쁜 상태의 데이터셋이기 때문에 전처리 과정은 매우 간단합니다.
import pandas as pd
from sklearn import preprocessing
from sklearn import cluster
uci_path = 'https://archive.ics.uci.edu/ml/machine-learning-databases/00292/Wholesale%20customers%20data.csv'
df = pd.read_csv(uci_path, header=0)
print(df)
print(df.info())
X = df.iloc[:, 2:]
print(X)
X = preprocessing.StandardScaler().fit(X).transform(X)
model = cluster.KMeans(init='k-means++', n_clusters=5, n_init=10)
model.fit(X)
cluster_label = model.labels_
df['Cluster'] = cluster_label
print(df)
print(df.groupby(['Cluster']).agg(['mean', 'count']))
각 군집의 데이터 평균 및 개수를 확인하여 군집별로 나름의 이름을 붙여주겠습니다.
0번 군집: 신선식품만 비교적 잘 팔림.
=> 신선 군집(63개 고객사)
1번 군집: 다른 군집에 비해 전반적으로 판매량이 많음. 사실상 가장 매출을 많이 올리는 군집이라고 볼 수 있음. 단 하나의 고객사만 여기에 속함.
=> VIP 군집(1개 고객사)
2번 군집: 다른 군집에 비해 별다른 특징이 없음.
=> 애매모호 군집(96개 고객사)
3번 군집: 전반적으로 매출이 가장 적음. 소상공인들.
=> 소상공인 군집(270개 고객사)
4번 군집: 식료품과 세제 및 종이 제품을 다른 군집에 비해 압도적으로 많이 팜.
=> 식료품/세제/종이 군집(10개 고객사)
대략 위와 같이 분석을 한다면 다음과 같은 마케팅/고객 관리 전략을 세울 수 있습니다.
1) VIP 고객사와의 관계를 최우선적으로 잘 이어가야 한다. VIP 고객을 위한 혜택을 주자.
2) VIP 고객사에서 비교적 적게 파는 것들을 4번 군집(식료품/세제/종이 군집)에 속한 10개 고객사에서 소화를 해주기 때문에, VIP 고객사만큼 관심을 기울여야 한다. VIP 고객에 버금가는 혜택을 주자.
3) 0번 군집(신선 군집) 내 고객사에는 신선식품 관련된 신제품을 정기적으로 소개해준다.
4) 애매모호, 소상공인 군집에는 가장 많은 고객사가 포함되어 있기 때문에 이들에게 악덕 도매업자라는 인식을 주면 안 된다. 브랜드 이미지를 잘 만들어가야 한다. 어느 정도 매출이 올라올 때까지는 조금 더 저렴한 가격에 물건을 제공하는 것은 어떨까?
이러한 마케팅 전략을 수립했다면, 실제로 적용한 다음에 어떠한 효과가 있었는지를 잘 추적해봐야 합니다. 도매업자 입장에서 매출 및 이미지 진작에 도움이 되었는지, 아니면 별 효과가 없었는지, 아니면 역효과가 났는지를 확인해볼 필요가 있습니다.
관련 글
'Dev > python' 카테고리의 다른 글
[python] 패키지 관리자 poetry의 pyproject.toml과 poetry.lock (2) | 2023.01.03 |
---|---|
[python + sqlalchemy] sqlalchemy로 SQL 없이 관계형 데이터베이스 CRUD 하기 (0) | 2022.12.30 |
[python] pip install 중에 Warning: Retrying ... NewConnectionError와 같은 메시지가 뜨는 이유 (0) | 2022.11.17 |
[python] sklearn.metrics.f1_score로 F1 점수 구할 때 라벨이 1이 아닐 때 생기는 오류 해결법 (0) | 2022.11.15 |
[python] 의사결정 나무(decision tree)로 유방암 진단하기 (0) | 2022.11.13 |
[python] 가상 환경에 설치되어 있는 패키지 목록을 전달해주는 방법(pip freeze) (0) | 2022.11.09 |
[matplotlib] 박스플롯(boxplot) 해석하기 (0) | 2022.11.04 |
[python] yaml 파일 파이썬에서 읽기 (0) | 2022.10.28 |