STAGE 18 · Lv.91
세그먼트별 맞춤 캠페인
사용자 세그멘테이션 기준, 행동 기반 트리거, 개인화 콘텐츠, 동적 이메일 콘텐츠, A/B 테스트를 마스터합니다.
세그멘테이션이 이메일 마케팅의 핵심인 이유
왜 모든 구독자에게 같은 이메일을 보내면 안 되는가
전체 구독자에게 동일한 이메일을 보내는 일괄 발송(Batch and Blast) 방식은 가장 비효율적인 이메일 마케팅 방법입니다. DMA(Data & Marketing Association)의 연구에 따르면 세그먼트 기반 캠페인은 비세그먼트 캠페인 대비 760% 높은 매출을 기록합니다. Mailchimp의 데이터에서도 세그먼트 캠페인의 오픈율이 14% 높고, 클릭률이 100% 이상 높으며, 구독 취소율이 75% 낮은 것으로 확인되었습니다.
세그멘테이션(Segmentation)은 구독자를 특정 기준에 따라 의미 있는 그룹으로 분류하고, 각 그룹에 맞춤화된 콘텐츠를 전달하는 전략입니다. 30대 여성 고객에게 보내는 메시지와 50대 남성 고객에게 보내는 메시지가 같을 수 없으며, 첫 구매 고객에게 보내는 메시지와 10회 이상 구매한 VIP 고객에게 보내는 메시지도 달라야 합니다.
세그멘테이션의 핵심은 "적절한 사람에게, 적절한 시점에, 적절한 메시지를" 전달하는 것입니다. 이를 통해 오픈율, 클릭률, 전환율이 모두 크게 향상되며, 동시에 구독 취소율과 스팸 신고율은 감소합니다. 이 레슨에서는 WordPress와 WooCommerce 환경에서 사용자 세그멘테이션 시스템을 구축하고, 각 세그먼트에 맞는 자동화된 맞춤 캠페인을 설계하는 방법을 상세히 다룹니다.
세그멘테이션(Segmentation)은 구독자를 특정 기준에 따라 의미 있는 그룹으로 분류하고, 각 그룹에 맞춤화된 콘텐츠를 전달하는 전략입니다. 30대 여성 고객에게 보내는 메시지와 50대 남성 고객에게 보내는 메시지가 같을 수 없으며, 첫 구매 고객에게 보내는 메시지와 10회 이상 구매한 VIP 고객에게 보내는 메시지도 달라야 합니다.
세그멘테이션의 핵심은 "적절한 사람에게, 적절한 시점에, 적절한 메시지를" 전달하는 것입니다. 이를 통해 오픈율, 클릭률, 전환율이 모두 크게 향상되며, 동시에 구독 취소율과 스팸 신고율은 감소합니다. 이 레슨에서는 WordPress와 WooCommerce 환경에서 사용자 세그멘테이션 시스템을 구축하고, 각 세그먼트에 맞는 자동화된 맞춤 캠페인을 설계하는 방법을 상세히 다룹니다.
760%
세그먼트 캠페인의
매출 증가 효과
매출 증가 효과
+14%
세그먼트 기반
오픈율 향상
오픈율 향상
+100%
맞춤 콘텐츠의
클릭률 향상
클릭률 향상
-75%
구독 취소율
감소 효과
감소 효과
세그멘테이션 기준과 전략
4가지 핵심 세그멘테이션 유형
효과적인 세그멘테이션은 하나의 기준이 아닌 여러 기준을 조합하여 구성합니다. 각 유형의 특징과 활용 방법을 상세히 살펴봅시다.
1. 인구통계 기반 (Demographic): 나이, 성별, 지역, 직업, 소득 수준 등 기본적인 인구 통계 정보를 기반으로 분류합니다. 회원가입 시 직접 수집하거나, 프로그레시브 프로파일링(Progressive Profiling)으로 시간에 걸쳐 점진적으로 수집합니다. 예를 들어 첫 번째 구매 후에는 생년월일을 묻고, 두 번째 구매 후에는 관심사를 묻는 방식입니다.
2. 행동 기반 (Behavioral): 구매 이력, 방문 페이지, 이메일 참여도, 다운로드 이력, 장바구니 이탈 등 실제 행동 데이터를 기반으로 분류합니다. 가장 효과적인 세그멘테이션 방식이며, 데이터 수집과 분석 인프라가 필요합니다.
3. 심리 기반 (Psychographic): 관심사, 가치관, 라이프스타일, 성격 유형 등 심리적 특성을 기반으로 분류합니다. 설문조사, 콘텐츠 소비 패턴, 소셜 미디어 활동에서 추론합니다. 측정이 어렵지만 가장 깊은 수준의 개인화가 가능합니다.
4. 참여도 기반 (Engagement): 활성/비활성 구독자, VIP 고객, 이탈 위험 고객 등 참여 수준으로 분류합니다. RFM(Recency, Frequency, Monetary) 분석이 대표적인 방법으로, 최근 구매 시점, 구매 빈도, 구매 금액을 기반으로 고객 가치를 평가합니다.
1. 인구통계 기반 (Demographic): 나이, 성별, 지역, 직업, 소득 수준 등 기본적인 인구 통계 정보를 기반으로 분류합니다. 회원가입 시 직접 수집하거나, 프로그레시브 프로파일링(Progressive Profiling)으로 시간에 걸쳐 점진적으로 수집합니다. 예를 들어 첫 번째 구매 후에는 생년월일을 묻고, 두 번째 구매 후에는 관심사를 묻는 방식입니다.
2. 행동 기반 (Behavioral): 구매 이력, 방문 페이지, 이메일 참여도, 다운로드 이력, 장바구니 이탈 등 실제 행동 데이터를 기반으로 분류합니다. 가장 효과적인 세그멘테이션 방식이며, 데이터 수집과 분석 인프라가 필요합니다.
3. 심리 기반 (Psychographic): 관심사, 가치관, 라이프스타일, 성격 유형 등 심리적 특성을 기반으로 분류합니다. 설문조사, 콘텐츠 소비 패턴, 소셜 미디어 활동에서 추론합니다. 측정이 어렵지만 가장 깊은 수준의 개인화가 가능합니다.
4. 참여도 기반 (Engagement): 활성/비활성 구독자, VIP 고객, 이탈 위험 고객 등 참여 수준으로 분류합니다. RFM(Recency, Frequency, Monetary) 분석이 대표적인 방법으로, 최근 구매 시점, 구매 빈도, 구매 금액을 기반으로 고객 가치를 평가합니다.
| 세그멘테이션 유형 | 데이터 소스 | 수집 난이도 | 정확도 | 활용 예시 |
|---|---|---|---|---|
| 인구통계 | 가입 폼, 프로필 | 낮음 | 중 | 연령대별 상품 추천 |
| 행동 기반 | 구매/방문 로그 | 중 | 높음 | 장바구니 이탈 복구 |
| 심리 기반 | 설문, 콘텐츠 소비 | 높음 | 높음 | 라이프스타일 맞춤 콘텐츠 |
| 참여도(RFM) | 주문 데이터 | 중 | 매우 높음 | VIP 우대, 이탈 방지 |
데이터 수집
행동/프로필/구매
행동/프로필/구매
→
RFM 분석
점수 계산
점수 계산
→
세그먼트 분류
7개 그룹
7개 그룹
→
맞춤 캠페인
자동 발송
자동 발송
// ============================================
// RFM 분석 기반 고객 세그멘테이션 시스템
// ============================================
class MAP_Customer_Segmentation {
// RFM 점수 계산 (각 항목 1~5점)
public function calculate_rfm($user_id) {
$orders = wc_get_orders([
'customer_id' => $user_id,
'status' => ['completed', 'processing'],
'orderby' => 'date',
'order' => 'DESC',
'limit' => -1,
]);
if (empty($orders)) {
return ['R' => 1, 'F' => 1, 'M' => 1, 'segment' => 'new_prospect'];
}
// Recency: 최근 주문으로부터 경과 일수
$last_order_date = $orders[0]->get_date_created();
$days_since = (time() - $last_order_date->getTimestamp()) / DAY_IN_SECONDS;
if ($days_since $r_score = 5;
elseif ($days_since $r_score = 4;
elseif ($days_since $r_score = 3;
elseif ($days_since $r_score = 2;
else $r_score = 1;
// Frequency: 총 주문 횟수
$order_count = count($orders);
if ($order_count >= 20) $f_score = 5;
elseif ($order_count >= 10) $f_score = 4;
elseif ($order_count >= 5) $f_score = 3;
elseif ($order_count >= 2) $f_score = 2;
else $f_score = 1;
// Monetary: 총 구매 금액
$total_spent = array_sum(array_map(function($o) {
return $o->get_total();
}, $orders));
if ($total_spent >= 1000000) $m_score = 5;
elseif ($total_spent >= 500000) $m_score = 4;
elseif ($total_spent >= 200000) $m_score = 3;
elseif ($total_spent >= 50000) $m_score = 2;
else $m_score = 1;
// 세그먼트 결정
$total = $r_score + $f_score + $m_score;
$segment = $this->determine_segment($r_score, $f_score, $m_score, $total);
// 사용자 메타에 저장
update_user_meta($user_id, '_rfm_r', $r_score);
update_user_meta($user_id, '_rfm_f', $f_score);
update_user_meta($user_id, '_rfm_m', $m_score);
update_user_meta($user_id, '_rfm_segment', $segment);
update_user_meta($user_id, '_rfm_updated', current_time('mysql'));
return [
'R' => $r_score, 'F' => $f_score, 'M' => $m_score,
'total' => $total, 'segment' => $segment,
'total_spent' => $total_spent, 'order_count' => $order_count,
];
}
private function determine_segment($r, $f, $m, $total) {
if ($total >= 13) return 'champion'; // 최우수 고객
if ($total >= 10 && $r >= 4) return 'loyal'; // 충성 고객
if ($r >= 4 && $f return 'new_customer'; // 신규 고객
if ($total >= 7 && $r >= 3) return 'potential'; // 잠재 충성 고객
if ($r $f >= 3) return 'at_risk'; // 이탈 위험
if ($r $f >= 4 && $m >= 4) return 'cant_lose'; // 놓치면 안 되는 고객
if ($r return 'lost'; // 이탈 고객
return 'regular'; // 일반 고객
}
// 특정 세그먼트의 모든 고객 조회
public function get_segment_users($segment) {
return get_users([
'meta_key' => '_rfm_segment',
'meta_value' => $segment,
'fields' => ['ID', 'user_email', 'display_name'],
]);
}
// 전체 고객 RFM 일괄 업데이트 (주간 크론)
public function batch_update_all() {
$customers = get_users([
'role' => 'customer',
'fields' => 'ID',
]);
$stats = [];
foreach ($customers as $user_id) {
$result = $this->calculate_rfm($user_id);
$stats[$result['segment']] = ($stats[$result['segment']] ?? 0) + 1;
}
update_option('_rfm_segment_stats', $stats);
update_option('_rfm_last_batch', current_time('mysql'));
return $stats;
}
}
// 행동 기반 세그멘테이션 (이메일 참여도, 구매 패턴)
class MAP_Behavioral_Segmentation {
// 이메일 참여도 기반 태깅
public function tag_by_engagement($user_id) {
$tags = [];
$opens_30d = $this->count_email_opens($user_id, 30);
$clicks_30d = $this->count_email_clicks($user_id, 30);
if ($opens_30d >= 10 && $clicks_30d >= 5) {
$tags[] = 'highly_engaged';
} elseif ($opens_30d >= 3) {
$tags[] = 'engaged';
} elseif ($opens_30d === 0) {
$tags[] = 'disengaged';
} else {
$tags[] = 'low_engaged';
}
// 구매 패턴 태깅
$order_count = wc_get_customer_order_count($user_id);
if ($order_count >= 5) $tags[] = 'repeat_buyer';
if ($order_count === 0) $tags[] = 'never_purchased';
// 평균 주문 금액 태깅
$avg_order = $this->get_avg_order_value($user_id);
if ($avg_order >= 100000) $tags[] = 'high_value';
elseif ($avg_order >= 50000) $tags[] = 'mid_value';
else $tags[] = 'low_value';
// 관심 카테고리 태깅
$top_categories = $this->get_top_categories($user_id, 3);
foreach ($top_categories as $cat) {
$tags[] = 'interest_' . sanitize_title($cat);
}
// 태그 저장
update_user_meta($user_id, '_segment_tags', $tags);
return $tags;
}
// 동적 세그먼트 쿼리 (복합 조건)
public function query_segment($conditions) {
global $wpdb;
$query = "SELECT DISTINCT u.ID, u.user_email, u.display_name
FROM {$wpdb->users} u
INNER JOIN {$wpdb->usermeta} um ON u.ID = um.user_id";
$where = ["1=1"];
foreach ($conditions as $cond) {
switch ($cond['type']) {
case 'rfm_segment':
$where[] = $wpdb->prepare(
"u.ID IN (SELECT user_id FROM {$wpdb->usermeta}
WHERE meta_key = '_rfm_segment' AND meta_value = %s)",
$cond['value']
);
break;
case 'has_tag':
$where[] = $wpdb->prepare(
"u.ID IN (SELECT user_id FROM {$wpdb->usermeta}
WHERE meta_key = '_segment_tags' AND meta_value LIKE %s)",
'%' . $cond['value'] . '%'
);
break;
case 'min_orders':
$where[] = $wpdb->prepare(
"u.ID IN (SELECT pm.meta_value FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE pm.meta_key = '_customer_user'
AND p.post_type = 'shop_order'
AND p.post_status IN ('wc-completed','wc-processing')
GROUP BY pm.meta_value HAVING COUNT(*) >= %d)",
$cond['value']
);
break;
case 'last_order_within':
$where[] = $wpdb->prepare(
"u.ID IN (SELECT pm.meta_value FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE pm.meta_key = '_customer_user'
AND p.post_type = 'shop_order'
GROUP BY pm.meta_value
HAVING MAX(p.post_date) >= DATE_SUB(NOW(), INTERVAL %d DAY))",
$cond['value']
);
break;
}
}
return $wpdb->get_results(
$query . " WHERE " . implode(" AND ", $where)
);
}
}
💡 RFM 세그먼트별 최적 전략
Champion (최우수): VIP 전용 이벤트 초대, 신상품 사전 공개, 로열티 보상. 이들은 브랜드 홍보대사 역할을 할 수 있습니다.
Loyal (충성): 업셀링/크로스셀링 추천, 리뷰 작성 요청, 친구 추천 프로그램.
At Risk (이탈 위험): 긴급 할인 쿠폰, "보고 싶어요" 감성 이메일, 재구매 인센티브.
Lost (이탈): 강력한 복귀 혜택(최대 할인), Win-back 캠페인. 3회 이상 반응 없으면 리스트에서 제외를 고려하세요.
Loyal (충성): 업셀링/크로스셀링 추천, 리뷰 작성 요청, 친구 추천 프로그램.
At Risk (이탈 위험): 긴급 할인 쿠폰, "보고 싶어요" 감성 이메일, 재구매 인센티브.
Lost (이탈): 강력한 복귀 혜택(최대 할인), Win-back 캠페인. 3회 이상 반응 없으면 리스트에서 제외를 고려하세요.
🔒
여기까지는 미리보기입니다
세그먼트별 맞춤 캠페인
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.