K-means는 비지도학습(unsupervised learning) 알고리즘으로서, 데이터셋을 K개의 군집(cluster) 로 나누는 데에 사용됩니다. 각 군집은 데이터가 서로 유사성을 많이 공유하는 그룹으로 이해할 수 있습니다.
위 그림(예시 이미지를 가정)을 보면, (a)에서 초기 군집 중심을 설정한 뒤 (b)에서 각 데이터가 가장 가까운 중심으로 할당되는 과정을 거쳐, 군집이 점차 안정적으로 형성되는 모습을 볼 수 있습니다.
일반적으로 CLTV(Customer Lifetime Value, 고객생애가치) 는 고객이 기업과의 거래를 통해 만들어낼 것으로 기대되는 총 가치를 의미합니다. 이를 활용하면 다음과 같은 이점을 얻을 수 있습니다:
때문에 CLTV 값을 여러 변수(구매 횟수, 구매 금액, 기간 등)와 함께 분석하여 K-means로 클러스터링을 수행하면, 데이터 중심적이고 효과적인 고객 세분화를 얻을 수 있습니다.
아래는 sklearn의 KMeans와 StandardScaler를 사용해, 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_
KMeans: K-means 알고리즘을 사용하기 위한 클래스StandardScaler: 모든 컬럼을 표준화(평균 0, 표준편차 1)하는데 사용flo_cluster에는 CLTV, 구매 빈도, 마지막 구매 일자 등 여러 특징(feature)들이 들어 있을 것입니다.KMeans(n_clusters=5, random_state=42): K를 5로 설정해 5개 군집을 찾고자 하는 예시입니다.random_state=42: 재현성을 위해 난수 시드를 고정합니다.kmeans.fit(flo_cluster_scaled): 스케일링된 데이터를 가지고 학습(클러스터링)을 수행합니다.kmeans.labels_: 각 데이터가 어떤 군집(cluster)에 속했는지 라벨을 반환합니다.'Cluster'에 할당하면, 각 행(고객 단위)마다 어떤 군집에 속했는지 쉽게 확인할 수 있습니다.클러스터링이 완료되면, 각 군집별로 주요 통계치(평균 CLTV, 평균 구매 횟수 등)를 계산해보는 것이 좋습니다. 예를 들어, flo_cluster.groupby('Cluster').mean() 등을 통해 각 군집이 어떤 특성을 갖는지 살펴볼 수 있습니다.
이렇게 데이터 기반으로 고객을 나누고, 세분화된 마케팅 전략과 개인화를 시도할 수 있습니다.