🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

고객 세그먼테이션 분석 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 6. · 10 Views

고객 세그먼테이션 분석 완벽 가이드

K-Means 클러스터링과 RFM 분석을 활용하여 고객을 세분화하고 맞춤형 마케팅 전략을 수립하는 방법을 배웁니다. 데이터 전처리부터 클러스터 해석, 실무 적용까지 단계별로 살펴봅니다.


목차

  1. RFM_분석_개념
  2. 고객_구매_데이터_전처리
  3. 최적_K값_결정
  4. K-Means_클러스터링_수행
  5. 클러스터_특성_해석
  6. 마케팅_전략_제안

1. RFM 분석 개념

마케팅팀에서 갑자기 요청이 들어왔습니다. "우리 고객들을 좀 분류해줄 수 있어요?

VIP 고객과 이탈 위험 고객을 구분하고 싶거든요." 김개발 씨는 고객 데이터베이스에 수만 명의 고객 정보가 있다는 걸 알고 있었지만, 어디서부터 시작해야 할지 막막했습니다.

RFM 분석은 고객을 세 가지 핵심 지표로 평가하는 기법입니다. Recency(최근성)는 마지막 구매가 얼마나 최근인지, Frequency(빈도)는 얼마나 자주 구매하는지, Monetary(금액)는 얼마나 많이 지출하는지를 측정합니다.

이 세 가지 숫자만으로도 고객의 가치를 직관적으로 파악할 수 있습니다.

다음 코드를 살펴봅시다.

import pandas as pd
from datetime import datetime

# 고객별 RFM 지표 계산
def calculate_rfm(df, snapshot_date):
    # 고객별 집계: 최근 구매일, 구매 횟수, 총 구매액
    rfm = df.groupby('customer_id').agg({
        'order_date': lambda x: (snapshot_date - x.max()).days,  # Recency
        'order_id': 'count',  # Frequency
        'amount': 'sum'  # Monetary
    })
    rfm.columns = ['recency', 'frequency', 'monetary']
    return rfm

# 분석 기준일 설정 및 RFM 계산
snapshot = datetime(2024, 1, 1)
rfm_df = calculate_rfm(orders_df, snapshot)

김개발 씨는 데이터 분석팀에서 일하는 2년 차 개발자입니다. 어느 날 마케팅팀 이과장이 찾아와 이렇게 말했습니다.

"개발자님, 우리 고객이 10만 명이 넘는데, 누가 VIP이고 누가 곧 떠날 것 같은 고객인지 알 수가 없어요. 도와주실 수 있나요?" 김개발 씨는 잠시 고민했습니다.

10만 명의 고객을 일일이 분석할 수는 없는 노릇입니다. 이때 선배 박시니어 씨가 다가왔습니다.

"RFM 분석 들어봤어? 마케팅에서 수십 년간 써온 검증된 방법이야." 그렇다면 RFM 분석이란 정확히 무엇일까요?

쉽게 비유하자면, RFM은 마치 단골 손님을 알아보는 동네 가게 사장님의 직감을 숫자로 표현한 것과 같습니다. "이 손님은 어제도 왔고, 매주 오시고, 항상 많이 사 가시네." 사장님은 직감적으로 이 손님이 중요하다는 걸 압니다.

RFM은 바로 이 직감을 데이터로 정량화합니다. Recency(최근성)는 고객이 마지막으로 구매한 지 며칠이 지났는지를 의미합니다.

어제 구매한 고객과 1년 전에 구매한 고객 중 누가 더 활성 고객일까요? 당연히 어제 구매한 고객입니다.

최근에 구매한 고객일수록 다시 구매할 가능성이 높습니다. Frequency(빈도)는 고객이 얼마나 자주 구매하는지를 나타냅니다.

1년에 한 번 오는 고객과 매주 오는 고객은 분명히 다릅니다. 자주 방문하는 고객은 우리 서비스에 만족하고 있다는 신호입니다.

Monetary(금액)는 고객이 총 얼마를 지출했는지 보여줍니다. 같은 10번 구매라도 1만 원씩 구매한 고객과 100만 원씩 구매한 고객의 가치는 다릅니다.

위의 코드를 살펴보겠습니다. 먼저 groupby('customer_id')로 고객별로 데이터를 묶습니다.

그런 다음 agg 함수를 사용해 세 가지 지표를 한 번에 계산합니다. Recency는 기준일에서 마지막 주문일을 빼서 일수로 계산하고, Frequency는 주문 건수를 세고, Monetary는 금액을 합산합니다.

실제 현업에서는 이 RFM 점수를 바탕으로 고객을 등급화합니다. 예를 들어 각 지표를 1점에서 5점으로 점수화하면, 555점 고객은 최근에 자주 많이 구매한 최고의 VIP 고객이 됩니다.

반면 111점 고객은 오래전에 한 번 적은 금액을 구매한 이탈 위험 고객입니다. 주의할 점도 있습니다.

RFM 분석은 과거 데이터만 반영한다는 한계가 있습니다. 새로 가입한 고객은 아직 구매 이력이 없어 낮은 점수를 받을 수밖에 없습니다.

따라서 신규 고객은 별도로 관리하는 것이 좋습니다. 김개발 씨는 박시니어 씨의 설명을 듣고 고개를 끄덕였습니다.

"아, 생각보다 간단하면서도 강력하네요!" 이제 10만 명의 고객도 RFM이라는 세 개의 숫자로 명확하게 분류할 수 있게 되었습니다.

실전 팁

💡 - 기준일(snapshot_date)은 분석 목적에 맞게 설정하세요. 보통 가장 최근 주문일 다음 날을 사용합니다.

  • Monetary는 순수익이 아닌 매출 기준으로 계산하는 것이 일반적입니다.

2. 고객 구매 데이터 전처리

김개발 씨가 고객 데이터를 열어보니 문제가 한두 가지가 아니었습니다. 취소된 주문, 마이너스 금액, 중복된 데이터가 뒤섞여 있었습니다.

RFM 분석을 하려면 먼저 이 지저분한 데이터를 깨끗하게 정리해야 합니다.

데이터 전처리는 분석의 성패를 좌우하는 핵심 단계입니다. 아무리 뛰어난 머신러닝 알고리즘도 잘못된 데이터로는 의미 있는 결과를 낼 수 없습니다.

특히 고객 구매 데이터에는 취소 주문, 환불, 테스트 데이터 등 분석을 왜곡할 수 있는 요소가 많습니다.

다음 코드를 살펴봅시다.

import pandas as pd
import numpy as np

def preprocess_customer_data(df):
    # 1. 결측치 제거
    df = df.dropna(subset=['customer_id', 'order_date', 'amount'])

    # 2. 날짜 형식 변환
    df['order_date'] = pd.to_datetime(df['order_date'])

    # 3. 취소/환불 주문 제거 (음수 금액)
    df = df[df['amount'] > 0]

    # 4. 이상치 제거 (상위 1% 극단값)
    upper_limit = df['amount'].quantile(0.99)
    df = df[df['amount'] <= upper_limit]

    # 5. 중복 제거
    df = df.drop_duplicates(subset=['order_id'])

    return df

clean_df = preprocess_customer_data(raw_orders)

김개발 씨는 주문 데이터를 처음 열어본 순간 한숨이 나왔습니다. 50만 건의 주문 데이터 중 상당수가 문제가 있어 보였습니다.

customer_id가 비어 있는 행, 금액이 -50,000원인 행, 같은 order_id가 여러 번 나타나는 행까지. 이대로 분석하면 결과를 신뢰할 수 없습니다.

박시니어 씨가 조언했습니다. "데이터 분석에서 80%의 시간은 전처리에 쓴다는 말이 있어.

지금 보고 있는 게 바로 그 이유야." 전처리란 마치 요리 전에 재료를 손질하는 것과 같습니다. 아무리 훌륭한 요리사라도 상한 재료로는 맛있는 음식을 만들 수 없습니다.

상한 잎은 버리고, 흙은 씻어내고, 먹을 수 없는 부분은 잘라내야 합니다. 데이터도 마찬가지입니다.

먼저 결측치를 처리해야 합니다. customer_id가 없는 주문은 누구의 구매인지 알 수 없으니 RFM 분석에 사용할 수 없습니다.

dropna 함수로 핵심 컬럼에 값이 없는 행을 제거합니다. 다음으로 날짜 형식을 통일합니다.

데이터베이스에서 추출한 날짜는 문자열로 되어 있을 수 있습니다. pd.to_datetime으로 변환해야 날짜 간 계산이 가능해집니다.

음수 금액은 보통 취소나 환불을 의미합니다. 고객이 상품을 반품하면 마이너스 금액으로 기록됩니다.

이런 데이터를 포함하면 특정 고객의 총 구매액이 음수가 될 수도 있습니다. 따라서 양수 금액만 남깁니다.

이상치 처리도 중요합니다. 상위 1% 극단값을 제거하는 이유가 있습니다.

예를 들어 법인 고객이 1억 원어치를 한 번에 구매했다면, 이 데이터 하나가 전체 분석을 왜곡할 수 있습니다. quantile(0.99)로 99번째 백분위수를 구하고, 이를 초과하는 값을 제외합니다.

마지막으로 중복 데이터를 제거합니다. 시스템 오류로 같은 주문이 여러 번 기록되는 경우가 있습니다.

drop_duplicates로 주문 ID 기준 중복을 제거합니다. 실무에서는 추가로 고려할 사항이 있습니다.

B2B 고객과 B2C 고객을 분리해야 할 수도 있고, 직원 할인 구매를 제외해야 할 수도 있습니다. 비즈니스 맥락에 따라 전처리 기준이 달라집니다.

김개발 씨는 전처리를 마치고 데이터를 다시 확인했습니다. 50만 건에서 42만 건으로 줄었지만, 이제 모든 데이터가 분석에 적합한 상태가 되었습니다.

"드디어 분석할 준비가 됐네요!"

실전 팁

💡 - 전처리 전후 데이터 건수를 기록해두면 나중에 리포트 작성 시 유용합니다.

  • 이상치 기준(99%)은 비즈니스 특성에 따라 조정하세요. 고가 상품을 다루는 경우 95%가 적절할 수 있습니다.

3. 최적 K값 결정

데이터 전처리를 마친 김개발 씨에게 새로운 고민이 생겼습니다. K-Means 클러스터링을 하려면 미리 클러스터 개수 K를 정해야 합니다.

고객을 3개 그룹으로 나눌까요, 5개로 나눌까요, 아니면 10개로? 이 숫자를 어떻게 결정해야 할까요?

최적 K값 결정은 클러스터링의 핵심 과정입니다. K가 너무 작으면 서로 다른 특성의 고객이 한 그룹에 섞이고, 너무 크면 의미 없는 세분화가 됩니다.

Elbow MethodSilhouette Score라는 두 가지 검증된 방법으로 적정 K값을 찾을 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt

def find_optimal_k(data, k_range=range(2, 11)):
    inertias = []  # Elbow Method용
    silhouettes = []  # Silhouette Score용

    for k in k_range:
        kmeans = KMeans(n_clusters=k, random_state=42, n_init=10)
        kmeans.fit(data)
        inertias.append(kmeans.inertia_)
        silhouettes.append(silhouette_score(data, kmeans.labels_))

    # 최적 K는 Silhouette Score가 가장 높은 값
    optimal_k = list(k_range)[silhouettes.index(max(silhouettes))]
    return optimal_k, inertias, silhouettes

optimal_k, inertias, silhouettes = find_optimal_k(rfm_scaled)

김개발 씨는 K-Means 알고리즘에 대해 공부했습니다. 알고리즘 자체는 이해했는데, 한 가지 문제가 남았습니다.

"K를 몇으로 설정해야 하지?" 마케팅팀에 물어보니 "글쎄요, 3개면 너무 단순하고 10개면 너무 복잡한 것 같은데..."라는 애매한 답변만 돌아왔습니다. 박시니어 씨가 화이트보드에 그림을 그리며 설명했습니다.

"K값을 결정하는 객관적인 방법이 있어. Elbow Method와 Silhouette Score라는 거야." Elbow Method는 마치 팔꿈치 모양을 찾는 것과 같습니다.

K를 2부터 10까지 바꿔가며 각각 클러스터링을 수행합니다. 그러면 각 K에 대해 관성(inertia) 값이 계산됩니다.

관성은 각 데이터 포인트가 자기 클러스터 중심에서 얼마나 떨어져 있는지의 총합입니다. K가 커질수록 관성은 당연히 줄어듭니다.

극단적으로 K가 데이터 개수와 같다면 관성은 0이 됩니다. 그런데 관성이 줄어드는 속도를 보면 재미있는 패턴이 나타납니다.

처음에는 K가 늘어날 때마다 관성이 급격히 줄다가, 어느 지점부터는 줄어드는 폭이 확 작아집니다. 그래프로 그리면 마치 팔을 구부린 모양, 즉 팔꿈치(elbow) 형태가 됩니다.

이 꺾이는 지점이 바로 최적 K의 후보입니다. 하지만 Elbow Method만으로는 부족할 때가 있습니다.

꺾이는 지점이 명확하지 않은 경우도 많기 때문입니다. 이때 Silhouette Score가 도움됩니다.

Silhouette Score는 각 데이터 포인트가 자기 클러스터에 얼마나 잘 속해 있는지를 측정합니다. -1에서 1 사이의 값을 가지며, 1에 가까울수록 클러스터링이 잘 된 것입니다.

0에 가까우면 클러스터 경계에 걸쳐 있다는 의미이고, 음수면 잘못된 클러스터에 배정되었다는 의미입니다. 위 코드에서는 K를 2부터 10까지 변경하면서 두 지표를 모두 계산합니다.

kmeans.inertia_로 관성을, silhouette_score로 실루엣 점수를 구합니다. 최종적으로 실루엣 점수가 가장 높은 K를 최적값으로 선택합니다.

실무에서는 두 방법의 결과가 다를 수 있습니다. Elbow는 K=4를 가리키는데 Silhouette는 K=5가 더 높을 수 있습니다.

이럴 때는 비즈니스 관점도 고려해야 합니다. 마케팅팀이 5개 세그먼트를 관리할 역량이 있는지, 각 세그먼트별로 차별화된 전략을 수립할 수 있는지를 함께 판단합니다.

김개발 씨는 두 방법을 모두 적용해보았습니다. 결과는 K=4와 K=5가 비슷하게 좋았고, 마케팅팀과 논의 끝에 K=5로 결정했습니다.

"5개 정도면 관리도 가능하고 충분히 세분화된 것 같아요!"

실전 팁

💡 - random_state를 고정해야 매번 같은 결과가 나옵니다. 재현 가능성을 위해 꼭 설정하세요.

  • n_init 값은 초기 중심점 선택을 여러 번 시도한다는 의미입니다. 기본값 10이 적당합니다.
  • 클러스터 수가 너무 많으면 마케팅팀이 각 세그먼트별 전략을 수립하기 어려워집니다.

4. K-Means 클러스터링 수행

최적 K값을 5로 결정한 김개발 씨는 이제 본격적인 클러스터링에 들어갑니다. 하지만 바로 K-Means를 적용했다가는 큰 문제가 생깁니다.

Recency는 0365 범위인데 Monetary는 010,000,000 범위라면, 금액이 모든 것을 지배해버립니다.

K-Means 클러스터링을 제대로 수행하려면 반드시 스케일링을 먼저 해야 합니다. 각 변수의 단위와 범위가 다르면 특정 변수가 거리 계산을 지배하기 때문입니다.

StandardScaler로 정규화한 후 K-Means를 적용하면 모든 변수가 공정하게 반영됩니다.

다음 코드를 살펴봅시다.

from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import pandas as pd

# 1. 스케일링: 모든 변수를 같은 척도로 변환
scaler = StandardScaler()
rfm_scaled = scaler.fit_transform(rfm_df[['recency', 'frequency', 'monetary']])

# 2. K-Means 클러스터링 수행
kmeans = KMeans(n_clusters=5, random_state=42, n_init=10)
rfm_df['cluster'] = kmeans.fit_predict(rfm_scaled)

# 3. 각 클러스터의 중심점 확인 (원래 척도로 복원)
centroids = scaler.inverse_transform(kmeans.cluster_centers_)
centroid_df = pd.DataFrame(centroids, columns=['recency', 'frequency', 'monetary'])

김개발 씨는 자신 있게 K-Means를 바로 적용했습니다. 그런데 결과가 이상했습니다.

클러스터가 거의 금액(Monetary)으로만 나뉘는 것처럼 보였습니다. Recency나 Frequency는 무시된 느낌이었습니다.

박시니어 씨가 문제를 짚어주었습니다. "스케일링 안 했지?

K-Means는 유클리드 거리를 사용하는데, 변수 단위가 다르면 큰 숫자를 가진 변수가 독식해버려." 이해를 돕기 위해 비유를 들어보겠습니다. 학생들을 키와 몸무게로 그룹화한다고 가정합시다.

키는 150190cm, 몸무게는 40100kg입니다. 얼핏 비슷해 보이지만, 만약 키를 밀리미터로 측정한다면?

1500~1900mm가 됩니다. 이렇게 되면 거리 계산에서 키가 압도적으로 영향을 미칩니다.

RFM 데이터도 마찬가지입니다. Recency는 보통 0365일, Frequency는 150회, Monetary는 10,000~10,000,000원 범위입니다.

스케일링 없이 클러스터링하면 Monetary가 거리 계산의 99%를 차지합니다. StandardScaler는 각 변수를 평균 0, 표준편차 1로 변환합니다.

이렇게 하면 모든 변수가 동일한 척도를 갖게 됩니다. 위 코드에서 fit_transform은 데이터의 평균과 표준편차를 학습(fit)한 후 변환(transform)합니다.

스케일링된 데이터에 K-Means를 적용합니다. fit_predict는 클러스터링을 수행하고 각 데이터 포인트의 클러스터 레이블을 반환합니다.

결과는 0, 1, 2, 3, 4 중 하나의 숫자입니다. 마지막으로 cluster_centers_는 각 클러스터의 중심점을 알려줍니다.

하지만 이 값은 스케일링된 척도입니다. 실제 의미를 파악하려면 inverse_transform으로 원래 척도로 되돌려야 합니다.

실무에서 흔히 하는 실수가 있습니다. 학습 데이터로 fit한 scaler를 저장해두지 않는 것입니다.

나중에 새로운 고객 데이터가 들어오면 같은 scaler로 변환해야 일관된 클러스터링이 가능합니다. joblib.dump로 scaler와 kmeans 모델을 저장해두세요.

김개발 씨는 스케일링을 적용한 후 다시 클러스터링을 수행했습니다. 이번에는 결과가 훨씬 균형 잡혀 보였습니다.

각 클러스터가 Recency, Frequency, Monetary 모두를 고려한 그룹으로 나뉘었습니다.

실전 팁

💡 - StandardScaler 대신 MinMaxScaler를 사용할 수도 있지만, 이상치에 민감하므로 StandardScaler를 권장합니다.

  • 학습된 scaler와 kmeans 모델은 반드시 저장해두세요. 운영 환경에서 새 데이터를 분류할 때 필요합니다.

5. 클러스터 특성 해석

클러스터링은 완료되었지만, 숫자 0~4라는 레이블만으로는 의미가 없습니다. 마케팅팀이 "클러스터 2 고객에게 쿠폰을 보내세요"라고 하면 아무도 이해하지 못합니다.

각 클러스터가 어떤 특성을 가진 고객 집단인지 해석하고 이름을 붙여야 합니다.

클러스터 특성 해석은 데이터 분석 결과를 비즈니스 인사이트로 전환하는 핵심 단계입니다. 각 클러스터의 평균 RFM 값을 분석하고, 비즈니스 관점에서 의미 있는 이름을 부여합니다.

예를 들어 "최근 자주 많이 구매"하는 집단은 VIP 고객입니다.

다음 코드를 살펴봅시다.

import pandas as pd

# 클러스터별 RFM 평균 및 고객 수 집계
cluster_summary = rfm_df.groupby('cluster').agg({
    'recency': 'mean',
    'frequency': 'mean',
    'monetary': 'mean',
    'customer_id': 'count'
}).round(1)
cluster_summary.columns = ['avg_recency', 'avg_frequency', 'avg_monetary', 'customer_count']

# 클러스터 이름 부여 (특성 기반)
cluster_names = {
    0: 'VIP_Champions',      # 최근, 자주, 많이
    1: 'Loyal_Customers',    # 자주 구매하는 충성 고객
    2: 'At_Risk',            # 오래전 구매, 이탈 위험
    3: 'New_Customers',      # 최근 가입, 낮은 빈도
    4: 'Hibernating'         # 휴면 고객
}
rfm_df['segment'] = rfm_df['cluster'].map(cluster_names)

김개발 씨는 클러스터링 결과를 마케팅팀에 보여주었습니다. "고객을 5개 그룹으로 나눴습니다.

클러스터 0, 1, 2, 3, 4입니다." 마케팅팀 반응은 시큰둥했습니다. "그래서 클러스터 2가 뭔데요?

좋은 고객이에요, 나쁜 고객이에요?" 박시니어 씨가 조언했습니다. "분석 결과를 비즈니스 언어로 번역해야 해.

마케팅팀은 숫자가 아니라 '어떤 고객인지'를 알고 싶어하거든." 클러스터 해석은 마치 프로파일러가 범인의 특성을 분석하는 것과 같습니다. 단서들을 종합해서 "30대 남성, 회사원, 강남 거주"처럼 구체적인 프로필을 만들어내야 합니다.

먼저 각 클러스터의 평균 RFM 값을 계산합니다. 위 코드에서 groupby('cluster').agg는 클러스터별로 각 지표의 평균을 구합니다.

고객 수도 함께 계산하면 각 세그먼트의 규모도 파악할 수 있습니다. 예를 들어 분석 결과가 다음과 같다고 가정해봅시다.

클러스터 0의 평균값이 Recency=15일, Frequency=12회, Monetary=500만원이라면? 최근에 자주 많이 구매하는 최고의 고객입니다.

이 그룹에 VIP_Champions라는 이름을 붙입니다. 클러스터 2의 평균값이 Recency=200일, Frequency=8회, Monetary=300만원이라면?

과거에는 꽤 구매했지만 최근 200일 동안 구매가 없습니다. 이탈 위험이 높은 At_Risk 고객입니다.

클러스터 4의 평균값이 Recency=350일, Frequency=2회, Monetary=50만원이라면? 거의 1년 전에 두 번 구매하고 사라진 고객입니다.

Hibernating 휴면 고객으로 분류합니다. 이름을 붙일 때는 누가 봐도 직관적으로 이해할 수 있어야 합니다.

마케팅팀, 경영진, 고객센터 모두가 같은 언어로 소통할 수 있어야 합니다. "클러스터 2 고객"보다 "이탈 위험 고객"이 훨씬 명확합니다.

실무에서는 시각화도 함께 제공하면 좋습니다. 각 세그먼트의 비율을 파이 차트로, RFM 특성을 레이더 차트로 보여주면 직관적인 이해가 가능합니다.

주의할 점은 클러스터 번호(0, 1, 2...)가 실행할 때마다 바뀔 수 있다는 것입니다. 오늘 클러스터 0이 VIP였는데, 내일 다시 실행하면 클러스터 3이 VIP가 될 수 있습니다.

따라서 매번 특성을 확인하고 이름을 다시 매핑해야 합니다. 김개발 씨는 각 클러스터에 이름을 붙여 다시 마케팅팀에 보여주었습니다.

"VIP가 8%, 이탈 위험이 15%, 휴면이 25%입니다." 이번에는 마케팅팀이 눈을 빛냈습니다. "이탈 위험 고객 15%면 꽤 많네요.

이 분들 리텐션 캠페인 해야겠어요!"

실전 팁

💡 - 세그먼트 이름은 조직 내 모든 부서가 이해할 수 있는 용어로 정하세요.

  • 클러스터 번호는 고정되지 않으므로, 운영 시에는 특성 기반으로 자동 매핑하는 로직을 추가하세요.

6. 마케팅 전략 제안

고객을 5개 세그먼트로 나누었습니다. 이제 마케팅팀이 가장 궁금해하는 질문에 답할 차례입니다.

"그래서 각 그룹에 어떤 마케팅을 해야 하나요?" 분석은 끝이 아니라 시작입니다. 인사이트를 실제 행동으로 연결해야 합니다.

마케팅 전략 제안은 데이터 분석의 최종 목표입니다. 각 세그먼트의 특성에 맞는 차별화된 전략을 수립해야 합니다.

VIP에게는 감사와 특별 혜택을, 이탈 위험 고객에게는 재활성화 캠페인을, 휴면 고객에게는 윈백 프로모션을 제안합니다.

다음 코드를 살펴봅시다.

import pandas as pd

# 세그먼트별 마케팅 전략 정의
marketing_strategies = {
    'VIP_Champions': {
        'priority': 1,
        'strategy': '로열티 프로그램, VIP 전용 혜택, 신제품 우선 접근권',
        'channel': 'Personal call, 프리미엄 이메일',
        'budget_ratio': 0.3  # 예산의 30%
    },
    'Loyal_Customers': {
        'priority': 2,
        'strategy': '업셀링/크로스셀링, 멤버십 등급 상향 유도',
        'channel': '앱 푸시, 이메일',
        'budget_ratio': 0.25
    },
    'At_Risk': {
        'priority': 1,  # VIP와 동일한 최우선
        'strategy': '긴급 리텐션 캠페인, 특별 할인 쿠폰, 설문조사',
        'channel': 'SMS, 이메일, 리타겟팅 광고',
        'budget_ratio': 0.25
    },
    'New_Customers': {
        'priority': 3,
        'strategy': '온보딩 프로그램, 첫 재구매 유도 쿠폰',
        'channel': '웰컴 이메일 시리즈, 앱 푸시',
        'budget_ratio': 0.15
    },
    'Hibernating': {
        'priority': 4,
        'strategy': '윈백 캠페인, 대폭 할인, 브랜드 리마인드',
        'channel': '이메일, 리타겟팅 광고',
        'budget_ratio': 0.05
    }
}

김개발 씨는 분석 결과를 들고 마케팅팀 회의에 참석했습니다. 화면에 5개 세그먼트가 표시되었고, 각 세그먼트의 특성이 정리되어 있었습니다.

마케팅팀장이 물었습니다. "좋아요, 분석은 잘 됐네요.

그런데 우리가 뭘 해야 하죠?" 박시니어 씨가 일어나 설명했습니다. "세그먼트별로 다른 전략을 써야 합니다.

모든 고객에게 같은 메시지를 보내는 건 비효율적이에요." 마케팅 전략 수립은 마치 의사가 환자별로 다른 처방을 내리는 것과 같습니다. 감기 환자에게 골절 치료를 할 수 없고, 당뇨 환자에게 고혈압 약을 줄 수 없습니다.

고객 세그먼트도 마찬가지입니다. VIP_Champions 고객에게는 감사의 표현이 중요합니다.

이미 충성도가 높으니 할인보다는 특별한 경험을 제공해야 합니다. 신제품 우선 체험권, VIP 전용 라운지, 담당 매니저 배정 같은 것들입니다.

이 고객들은 회사 매출의 큰 부분을 차지하므로 예산의 30%를 투자할 가치가 있습니다. At_Risk 이탈 위험 고객은 VIP만큼 중요합니다.

어쩌면 더 중요할 수 있습니다. 과거에는 좋은 고객이었는데 최근 구매가 없다는 것은 불만이 생겼거나 경쟁사로 이동했을 가능성을 의미합니다.

긴급하게 연락하여 이유를 파악하고, 특별 할인으로 돌아올 기회를 제공해야 합니다. "고객님, 오랜만이에요.

저희가 뭔가 부족했나요?"라는 메시지가 필요합니다. Loyal_Customers 충성 고객에게는 업셀링과 크로스셀링 기회를 제공합니다.

이미 자주 구매하고 있으니, 더 좋은 제품이나 연관 제품을 추천합니다. "이 제품을 구매한 고객들이 함께 구매한 상품"이 효과적입니다.

New_Customers 신규 고객은 아직 우리 서비스를 잘 모릅니다. 온보딩 이메일 시리즈로 서비스 사용법을 알려주고, 첫 재구매를 유도하는 쿠폰을 제공합니다.

첫 경험이 좋아야 장기 고객이 됩니다. Hibernating 휴면 고객에게는 최소한의 리소스를 투자합니다.

대폭 할인 쿠폰을 보내보고, 반응이 없으면 더 이상 마케팅 비용을 쓰지 않는 것이 효율적입니다. 돌아올 가능성이 낮기 때문입니다.

실무에서는 A/B 테스트로 전략을 검증합니다. 같은 세그먼트 내에서도 30% 할인과 무료 배송 중 무엇이 더 효과적인지 테스트하고, 데이터 기반으로 전략을 개선합니다.

회의가 끝난 후 마케팅팀장이 김개발 씨에게 다가왔습니다. "이번 분석 덕분에 드디어 고객이 보이기 시작했어요.

다음 분기에는 세그먼트별 캠페인 결과도 분석해주실 수 있죠?" 김개발 씨는 자신 있게 대답했습니다. "물론이죠!"

실전 팁

💡 - 이탈 위험 고객 리텐션은 신규 고객 획득보다 5배 저렴합니다. 우선순위를 높게 두세요.

  • 캠페인 후 세그먼트 이동을 추적하세요. At_Risk에서 Loyal로 얼마나 이동했는지가 성과 지표입니다.
  • 모든 전략에는 측정 가능한 KPI를 설정하세요. 감으로 하는 마케팅 시대는 끝났습니다.

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Python#K-Means#RFM분석#클러스터링#마케팅분석#Machine Learning,Python

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.