14.1. Segmentation14.1.1. Customer(고객) Segmentation14.1.2. Market(시장) Segmentation14.2. RFM 분석14.3. 코호트 분석
14.1. Segmentation
Segmentation은 고객이나 시장을 유사한 특성을 가진 그룹으로 분류하고, 각 Segment에 대한 맞춤형 마케팅 전략을 수립하는 과정입니다. 이를 통해 기업은 고객을 더 효과적으로 파악하여 맞춤형 제품 또는 서비스를 제공함으로써 고객 만족도를 높이고 경쟁 우위를 확보할 수 있습니다.
Segment를 나누는 기준은 데이터 분석의 목적과 요구 사항에 따라 다를 수 있습니다. 일반적으로 인구 통계학적 분할, 행동적 분할, 심리적 분할 등의 기준을 사용할 수 있으며, 아래에서는 마케팅 분야의 주요한 두 Segmentation에 대해 설명하고자 합니다.
14.1.1. Customer(고객) Segmentation
Customer Segmentation은 고객을 비슷한 특성을 가진 그룹으로 나누어, 특정 제품, 서비스 또는 마케팅 전략을 고객의 다양한 요구사항과 특성에 맞게 수립하는 과정을 의미합니다.
- 기준: 지리적 위치, 나이, 성별, 소득, 관심사, 구매 기록 등
- 목적: 특정 고객 그룹을 식별하여 그룹별로 다른 마케팅 전략, 광고, 가격 정책 등을 수행하여 고객들에게 더 큰 가치를 제공하고 이익을 극대화
- 예시: “미혼 남성, 25-34세, 수도권 거주자”와 같이 고객을 결혼 여부, 나이, 지리적 위치에 따라 분류하고, 해당 고객 그룹에게 혜택을 제공하거나 특정 광고를 전달합니다.
14.1.2. Market(시장) Segmentation
Market segmentation은 시장 전체를 다양한 segment 혹은 부분 시장으로 나누어, 시장에 대한 이해를 높이고 특정 고객 그룹을 식별하는 과정을 의미합니다.
- 기준: 고객의 특성, 시장의 특성 및 경쟁 상황(시장 크기, 경쟁사의 입지 등)
- 목적: 각 부분 시장에 대한 특성을 파악하고, 이에 따라 마케팅 전략을 조정하여 시장에서의 경쟁력 확보
- 예시: “커피 시장”, “탄산음료 시장”, “과일·채소류 음료 시장”과 같이 시장을 음료 종류에 따라 부분 시장으로 분류하고, 각 시장에 따른 마케팅 전략을 적용합니다.
14.2. RFM 분석
RFM 분석이란 고객의 가치를 분석하기 위한 고객가치 평가 모형입니다. 고객 데이터를 기준에 따라 세분화하며, 다음 세 가지 요소의 약자를 통해 이름이 지어졌습니다.
- Recency (거래의 최근성): 고객이 마지막으로 거래를 한 날짜를 나타냅니다. 고객의 활발성을 나타내며, 최근 구매한 고객은 더 활발한 고객으로 간주합니다.
- Frequency (거래의 빈도): 특정 기간 동안 고객이 거래를 얼마나 자주 하는지를 나타냅니다. 고객의 충성도를 나타내며, 자주 구매하는 고객은 브랜드나 제품에 높은 충성도를 가질 가능성이 높습니다.
- Monetary (거래의 규모): 고객이 얼마나 많은 금액을 지출했는지를 나타냅니다. 고객의 가치를 나타내며, 많은 금액을 지출하는 고객은 기업에 더 큰 가치를 제공할 가능성이 높습니다.
RFM 분석을 통해 분류된 고객 그룹에 따라 차별화된 마케팅 전략을 세울 수 있습니다.
- 고객 이탈 방지: 이탈 위험 고객을 식별하고, 이탈을 방지하기 위한 조치를 취합니다.
예) 자주 구매했지만, 최근에는 구매하지 않은 고객이 이탈할 위험이 있습니다.
- 최고 고객 식별: 많은 지출을 하는 고가치 고객을 식별하고, 효과적으로 타겟팅합니다.
예) 최고 고객에게 개별화된 혜택을 제공하여 충성도를 높이고 매출을 증가시킬 수 있습니다.
- 잠재 고객 식별: 새로운 고객을 확보하고, 이를 통해 새로운 시장을 개척합니다.
예) 지출은 많지만, 자주 구매하지 않는 고객에게 적절한 혜택을 제공하여 정기적인 구매를 유도할 수 있습니다.
Google Merchandise Store 데이터셋을 통해 예시를 살펴보겠습니다. 이 데이터셋은 웹사이트 사용자 방문 정보와 관련된 다양한 정보를 일별로 제공합니다. 모든 일자의 데이터를 불러오거나, 원하는 일자의 데이터를 불러오기 위해 와일드 카드 테이블을 사용합니다.
아래 예시는 "customer_id" 별로 Recency, Frequency, Monetary를 구하는 쿼리입니다.
- Recency: Recency는 고객의 최근 활동을 나타내는 지표로, 데이터셋의 date(세션 날짜) 컬럼의 값이 20170801까지 기록이 있으므로 해당 날짜를 기준으로 가장 최근 결제가 이루어진 날짜와의 차이 중에서 최솟값을 나타냅니다. 즉, 고객이 얼마나 최근에 결제한 것인지를 나타내며, 값이 작을수록 더 최근에 결제했다는 것을 나타냅니다.
- Frequency: Frequency는 고객이 구매한 빈도를 나타내는 지표로, 각 고객의 활동 날짜를 기록한 데이터에서 중복을 제외한 고유한 날짜의 수를 계산합니다. 이로써 각 고객의 세션 날짜 중에서 얼마나 다양한 날에 활동했는지를 나타냅니다.
- Monetary: Monetary는 고객이 총 구매한 금액을 나타내는 지표로, 각 고객의 총 구매 금액을 합산한 값을 나타냅니다.
WITH customer_data AS ( SELECT fullVisitorId AS customer_id , DATE_DIFF(DATE '2017-08-01', PARSE_DATE('%Y%m%d', date), DAY) AS recency , COUNT(DISTINCT PARSE_DATE('%Y%m%d', date)) AS frequency , SUM(totals.totalTransactionRevenue) AS monetary FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE totals.transactions IS NOT NULL GROUP BY customer_id, recency ) SELECT customer_id, MIN(recency) AS recency , SUM(frequency) AS frequency , SUM(monetary) AS monetary FROM customer_data GROUP BY customer_id ORDER BY frequency DESC;

쿼리의 일부 결과를 참고로 하여, RFM에 따라 임의의 기준을 세우겠습니다.
기준
- Recency
- 최근 결제 날짜가 ‘2017-08-01’을 기준으로 30일 이내인 사용자를 ‘recent’로 분류
- 그렇지 않은 사용자를 ‘past’로 분류
- Frequency
- 총 결제 횟수가 10회 이상인 사용자를 ‘frequent’로 분류
- 그렇지 않은 사용자를 ‘infrequent’로 분류
- Monetary
- 총 결제 금액이 5000000000 이상인 사용자를 ‘high-spending’으로 분류
- 그렇지 않은 사용자를 ‘low-spending’으로 분류
해당 기준에 따라 데이터를 분류한 결과는 다음과 같습니다. "customer_id"는 임의의 값으로 처리하였습니다.
행 | customer_id | Recency | Frequency | Monetary | 분류 |
1 | a | past | frequent | low-spending | LHL |
2 | b | recent | frequent | high-spending | HHH |
3 | c | past | frequent | low-spending | LHL |
4 | d | past | frequent | high-spending | LHH |
5 | e | past | frequent | high-spending | LHH |
6 | f | recent | frequent | low-spending | HHL |
7 | g | recent | frequent | high-spending | HHH |
8 | h | past | frequent | low-spending | LHL |
9 | i | recent | frequent | low-spending | HHL |
10 | j | past | frequent | high-spending | LHH |
11 | k | recent | infrequent | high-spending | HLH |
12 | l | past | infrequent | high-spending | LLH |
13 | m | past | infrequent | low-spending | LLL |
14 | n | past | infrequent | low-spending | LLL |
결과를 기반으로 "customer_id"를 분류하고, 주목할 만한 사용자 그룹에 대해 설명하겠습니다.
분류
Recency, Frequency, Monetary를 상호작용 빈도에 따라 H(High)와 L(Low)로 나누어 분류했습니다.
- H(high): R, F, M이 각각 recent, frequent, high-spending과 같이 높은 상호작용을 보이는 경우
- L(row): R, F, M이 각각 past, infrequent, low-spending과 같이 낮은 상호작용을 보이는 경우
사용자 그룹
- HHH(b, g): 최근에 자주 구매하고 큰 금액을 지불한 고객으로, 수익성이 높기 때문에 중요하고 가장 가치 있는 고객 그룹입니다. 이 그룹에는 프로모션 및 맞춤형 혜택을 제공하여 충성도를 높일 수 있습니다.
- HHL(f, i): 최근에 자주 구매하지만 상대적으로 적은 금액을 지불하는 고객으로, 회사와 지속적인 상호 작용을 유지하고 있는 중요한 충성 고객 그룹입니다. 추가적인 맞춤형 혜택 및 프로모션을 통해 계속해서 회사와의 관계를 유지하고 활성화하는 것이 중요합니다.
- LLL(m, n): 오랜 기간 동안 구매하지 않고 구매 빈도와 금액 모두 낮은 고객으로, 이탈한 고객을 다시 찾아오거나 재이용하도록 유도하는 것이 중요할 수 있습니다. 이탈 방지 전략을 적용하여 이탈률을 낮출 수 있습니다.
따라서, 고객 세분화와 RFM 분석은 기업의 비즈니스 전략에 중요한 역할을 할 것이며, 더 나은 고객 경험을 제공하는 데 도움을 줄 것입니다. 기업은 이를 토대로 고객을 여러 그룹으로 나누어 중요한 고객을 식별하고 그들에게 맞춤형 마케팅 전략을 개발할 수 있습니다. 고객 가치를 극대화하고 이익을 향상하기 위해 이러한 그룹화된 접근 방식을 통해 더 많은 고객을 유치하고 유지할 수 있을 것입니다.
14.3. 코호트 분석
코호트 분석은 특정 기간 동안 공통된 특징을 갖는 고객 그룹을 파악하고, 이러한 고객 그룹의 행동 및 특성을 파악하는 데 사용되는 방법입니다.

다음은 사용자가 앱을 최초로 실행한 후, 10일간의 앱 활성도에 대한 코호트 지표입니다.
- 사용자들의 앱 활성도는 시간이 지남에 따라 감소하는 추세를 보입니다.
- 사용자가 앱을 최초 실행한 날짜가 늦을수록 앱 활성도가 더 낮은 경향을 보입니다.
이러한 두 가지 사실을 통해, 지표에 가로로 표시된 사용자 수명 주기(user lifetime)와 지표에 세로로 표시된 제품 수명 주기(product lifetime)를 파악할 수 있습니다.
- 고객 이탈 방지: 시간이 지남에 따라 특정 구간에서 얼마나 많은 고객이 돌아오는지 파악할 수 있으므로, 기업은 고객의 이탈 패턴을 식별하여 유지율을 높이기 위한 대책을 마련할 수 있습니다.
- 제품/서비스 영향 측정: 제품 업데이트 후 유지율이 갑자기 떨어지거나 급증하면 기업에 중요한 피드백을 줄 수 있습니다.
- 마케팅 효과 측정: 특정 마케팅 캠페인에 노출된 고객 집단의 데이터를 분석하여 캠페인의 효과를 파악하고, 그 결과에 따라 마케팅 전략을 개선할 수 있습니다.
예시 1
아래 예시는 Google Merchandise Store 데이터셋을 활용하여 2016년 10월의 일자 별 방문자 수를 분석하는 쿼리입니다.
쿼리의 결과를 통해 코호트에 따른 활성 방문자 수의 동향을 파악할 수 있습니다. 예를 들어, 2016년 10월 1일에 방문한 사용자가 2016년 10월 2일, 2016년 10월 3일 등에도 방문했는지를 확인하여 사용자가 꾸준히 방문하는지, 언제 이탈률이 높아지는지 등을 파악할 수 있습니다.
WITH cohort_data AS ( SELECT fullVisitorId AS user_id , PARSE_DATE('%Y%m%d', date) AS visit_date FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20161001' AND '20161031' ), cohort_first_visit AS ( SELECT user_id , MIN(visit_date) AS cohort_date FROM cohort_data GROUP BY user_id ) SELECT cohort_first_visit.cohort_date , cohort_data.visit_date , COUNT(DISTINCT cohort_data.user_id) AS active_users FROM cohort_data JOIN cohort_first_visit ON cohort_data.user_id = cohort_first_visit.user_id GROUP BY cohort_first_visit.cohort_date, cohort_data.visit_date ORDER BY cohort_first_visit.cohort_date, cohort_data.visit_date;


- “cohort_data”에서는 특정 기간의 테이블을 선택하고, 사용자의 ID 및 방문일을 추출합니다.
- ”cohort_first_visit”에서는 사용자의 ID 및 코호트 날짜(최초 방문일)을 추출합니다.
- ”cohort_activity”에서는 사용자의 코호트 날짜(최초 방문일) 및 방문일 별 활성 사용자 수를 추출합니다.
쿼리의 일부 결과를 확인했을 때, 사용자의 코호트 날짜별 방문일의 활성 사용자 수를 살펴보면 시간이 흐를수록 활성 사용자 수는 감소하는 추세임을 파악할 수 있습니다. 특히, 사용자가 처음 방문한 날과 그다음 날의 활성 사용자 수의 차이가 가장 급격하다는 것을 파악할 수 있습니다.
예시 2
아래 예시는 예시 1과 동일한 쿼리의
WHERE
절에 코호트 날짜와 방문일이 같은 경우의 조건을 추가하여, 날짜별 최초 방문자 수를 비교 분석하는 쿼리입니다.쿼리의 결과를 통해 코호트별 활성 사용자의 수를 파악할 수 있습니다. 예를 들어, 2016년 10월 1일에 최초 방문한 사용자의 수와 2016년 10월 2일, 2016년 10월 3일 등에 최초 방문한 사용자의 수를 확인하여 언제 신규 사용자의 수가 증가 혹은 감소하는지를 파악할 수 있습니다.
WITH cohort_data AS ( SELECT fullVisitorId AS user_id , PARSE_DATE('%Y%m%d', date) AS visit_date FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN '20161001' AND '20161031' ), cohort_first_visit AS ( SELECT user_id , MIN(visit_date) AS cohort_date FROM cohort_data GROUP BY user_id ) SELECT cohort_first_visit.cohort_date , cohort_data.visit_date , COUNT(DISTINCT cohort_data.user_id) AS active_users FROM cohort_data JOIN cohort_first_visit ON cohort_data.user_id = cohort_first_visit.user_id WHERE cohort_first_visit.cohort_date = cohort_data.visit_date GROUP BY cohort_first_visit.cohort_date, cohort_data.visit_date ORDER BY cohort_first_visit.cohort_date;


쿼리의 일부 결과를 확인했을 때, 사용자의 코호트 날짜별 활성 사용자 수를 살펴보면 시간이 흐를수록 활성 사용자 수는 증가하는 추세임을 파악할 수 있습니다.
다음은 위 쿼리의 일부 결과를 표로 나타낸 것입니다. 이 표는 사용자가 서비스를 처음 이용한 시점을 기준으로 N일 후 재방문한 활성 사용자의 수를 측정하는 지표로, 이는 곧 Retention(유지율) 지표입니다. Retention에 대한 자세한 설명은 다음 장을 참고하십시오.
active_users /
cohort_date | day 1 | day 2 | day 3 | day 4 | day 5 | day 6 | day 7 |
2016-10-01 | 1513 | 49 | 23 | 15 | 15 | 10 | 13 |
2016-10-02 | 1573 | 41 | 27 | 23 | 10 | 13 | 13 |
2016-10-03 | 2253 | 99 | 56 | 33 | 34 | 19 | 18 |
2016-10-04 | 3909 | 122 | 55 | 40 | 15 | 16 | 43 |
2016-10-05 | 3298 | 95 | 56 | 28 | 23 | 36 | 18 |
2016-10-06 | 2613 | 66 | 20 | 16 | 35 | 27 | 17 |
2016-10-07 | 2462 | 36 | 21 | 33 | 24 | 22 | 14 |
이러한 결과를 통해 사용자의 코호트 날짜에 따른 활성 사용자 동향을 명확하게 확인할 수 있습니다.
분석 결과 1
사용자가 처음 방문한 날을 기준으로 바로 다음 날 활성 사용자 수가 급격하게 감소하는 현상을 확인할 수 있습니다. 이러한 데이터는 사용자가 초기 접근 후에 지속적으로 서비스를 이용하는 데 어려움을 겪을 수 있음을 나타내며, 이에 대한 개선 및 유지 전략을 검토할 필요성을 확인할 수 있습니다.
분석 결과 2
2016년 10월 04일에 방문한 사용자 수가 3,909명으로 급격하게 증가한 것을 확인할 수 있습니다. 그러나, 이후 05일, 06일, 07일로 갈수록 사용자 수가 감소하는 것을 볼 수 있습니다. 이러한 경향은 초기에 급증한 사용자가 이후에는 유지되지 않고, 사용자 수가 감소하는 추세를 보여주며, 이는 이탈률이 증가하거나 사용자의 관심이 점차 떨어지고 있음을 나타냅니다.
이를 개선하기 위해서는 2016년 10월 04일에 발생한 급증한 사용자 수에 대한 원인을 분석 및 분석 결과를 활용하여, 사용자 이탈을 줄이는 미래의 마케팅 전략을 개발하고 사용자의 장기적인 유지를 촉진하는 노력이 필요합니다.