CLTV 기반 고객 세그맨테이션 (KMeans)

Ryan·2025년 2월 5일

Python/Pandas

목록 보기
20/23

1. K-means 클러스터링이란?

K-means는 비지도학습(unsupervised learning) 알고리즘으로서, 데이터셋을 K개의 군집(cluster) 로 나누는 데에 사용됩니다. 각 군집은 데이터가 서로 유사성을 많이 공유하는 그룹으로 이해할 수 있습니다.

  • 초기 중심값(centroid) 설정: 먼저 K개의 군집으로 나누고 싶다고 정하면, 랜덤으로 K개의 중심점(centroid)이 초기화됩니다.
  • 군집 할당(assignment) 단계: 각 데이터 포인트를 가장 가까운 중심점으로 할당합니다.
  • 중심점 업데이트(update) 단계: 새롭게 할당된 각 군집의 평균 위치를 계산하여 군집의 중심점을 갱신합니다.
  • 수렴: 이 과정을 계속 반복하며, 각 단계에서 중심점의 이동(또는 군집의 변화)이 거의 없어질 때 알고리즘을 멈춥니다.

위 그림(예시 이미지를 가정)을 보면, (a)에서 초기 군집 중심을 설정한 뒤 (b)에서 각 데이터가 가장 가까운 중심으로 할당되는 과정을 거쳐, 군집이 점차 안정적으로 형성되는 모습을 볼 수 있습니다.


2. CLTV 기반 클러스터링의 필요성

일반적으로 CLTV(Customer Lifetime Value, 고객생애가치) 는 고객이 기업과의 거래를 통해 만들어낼 것으로 기대되는 총 가치를 의미합니다. 이를 활용하면 다음과 같은 이점을 얻을 수 있습니다:

  • 고객 세분화: 가치가 높은 고객층(우수 고객)과 그렇지 않은 고객층을 구분하여 차별화된 마케팅 전략을 수립할 수 있음
  • 자원 효율적 배분: 마케팅 비용 또는 리소스를 가장 중요한 고객에게 우선 투자
  • 고객 유지 전략: 이탈 확률이 높은 고객을 미리 파악하고 유지 방안 마련

때문에 CLTV 값을 여러 변수(구매 횟수, 구매 금액, 기간 등)와 함께 분석하여 K-means로 클러스터링을 수행하면, 데이터 중심적이고 효과적인 고객 세분화를 얻을 수 있습니다.


3. 예시 코드 살펴보기

아래는 sklearnKMeansStandardScaler를 사용해, CLTV를 포함한 여러 속성을 갖는 flo_cluster 데이터프레임을 군집화하는 예시입니다.

python
복사편집
# 1) 라이브러리 임포트
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler

# 2) 데이터 스케일링
scaler = StandardScaler()
flo_cluster_scaled = scaler.fit_transform(flo_cluster)

# 3) 모델 생성 및 학습
kmeans = KMeans(n_clusters=5, random_state=42)
kmeans.fit(flo_cluster_scaled)

# 4) 결과를 데이터프레임에 할당
flo_cluster['Cluster'] = kmeans.labels_

3.1 라이브러리 임포트

  • KMeans: K-means 알고리즘을 사용하기 위한 클래스
  • StandardScaler: 모든 컬럼을 표준화(평균 0, 표준편차 1)하는데 사용

3.2 데이터 스케일링

  • flo_cluster에는 CLTV, 구매 빈도, 마지막 구매 일자 등 여러 특징(feature)들이 들어 있을 것입니다.
  • 어떤 컬럼은 금액 단위, 어떤 컬럼은 일수 단위로 값의 범위가 다르므로, K-means를 적용하기 전에 스케일링 을 통해 각 변수의 값 범위를 맞춰주는 것이 중요합니다.

3.3 모델 생성 및 학습

  • KMeans(n_clusters=5, random_state=42): K를 5로 설정해 5개 군집을 찾고자 하는 예시입니다.
  • random_state=42: 재현성을 위해 난수 시드를 고정합니다.
  • kmeans.fit(flo_cluster_scaled): 스케일링된 데이터를 가지고 학습(클러스터링)을 수행합니다.

3.4 결과 확인

  • kmeans.labels_: 각 데이터가 어떤 군집(cluster)에 속했는지 라벨을 반환합니다.
  • 이를 새로운 컬럼 'Cluster'에 할당하면, 각 행(고객 단위)마다 어떤 군집에 속했는지 쉽게 확인할 수 있습니다.

4. 결과 분석 및 활용

클러스터링이 완료되면, 각 군집별로 주요 통계치(평균 CLTV, 평균 구매 횟수 등)를 계산해보는 것이 좋습니다. 예를 들어, flo_cluster.groupby('Cluster').mean() 등을 통해 각 군집이 어떤 특성을 갖는지 살펴볼 수 있습니다.

  1. 우수 고객 군집: CLTV가 높고 구매 횟수도 많은 군집
  2. 이탈 가능 고객 군집: 구매 주기가 길어지고 금액이 점차 감소하는 군집
  3. 잠재 성장 고객 군집: 구매 횟수는 적지만 1회 구매 금액이 높은 군집

이렇게 데이터 기반으로 고객을 나누고, 세분화된 마케팅 전략개인화를 시도할 수 있습니다.

0개의 댓글