[SQL] RFM 분석: 고객 가치를 숫자로 보는 법

jul ee·2025년 4월 9일

데이터 성장기

목록 보기
26/139

우리 서비스의 고객 중 누구에게 집중해야 할까?

     신규 유저? 충성 고객? 아니면 이탈 직전의 위험 고객?

그 답을 숫자로 정확히 보여주는 분석 기법이 RFM 분석이다.

Recency, Frequency, Monetary라는 세 가지 기준으로
고객의 행동을 숫자로 요약하고, 그 숫자를 바탕으로 마케팅 우선순위를 정하는 데이터 분석 기법이다.

RFM 지표를 통해 데이터 기반으로 고객을 분류하고 그에 맞는 전략을 세울 수 있다.

이 글에서는 RFM 분석의 개념부터 BigQuery를 활용한 실습, 그리고 고객 등급별 해석과 마케팅 전략까지 정리해 보았다.



RFM 분석이란?

RFM 분석은 고객의 구매 행동 데이터를 기반으로

사용자가 얼마나 최근에, 얼마나 자주, 얼마나 많은 금액을 구매했는지라는 세 가지 지표(Recency, Frequency, Monetary)를 기준으로 고객을 그룹화하는 기법이다.

지표설명예시
Recency가장 마지막 구매가 언제였는가?최근 구매일 기준으로 얼마나 시간이 지났는지
Frequency    얼마나 자주 구매했는가?구매 빈도
Monetary얼마나 많이 지출했는가?총 구매 금액

💡 이 세 가지 기준을 조합하면 고객을 숫자로 세분화할 수 있고,

충성도 높은 고객, 잠재 이탈 고객, 고가치 유저 등을 분류해 낼 수 있다.


예시 상황을 통해 RFM 지표를 더 이해해 보자.

사용자최근 구매일(Recency)구매 횟수(Frequency)총 구매 금액(Monetary)
A3일 전10회1,200,000원
B90일 전1회5,000원
C7일 전3회60,000원

이 데이터를 기준으로 Recency는 적을수록 좋고, Frequency와 Monetary는 클수록 좋은 등급이다.

  • 마케팅 예산을 가치 있는 고객에게 집중할 수 있고,
  • 이탈 위험 고객을 사전에 파악하여 케어가 가능하고,
  • VIP 고객만 할인을 제공하는 등 고객별 맞춤 프로모션 설계가 가능하다.

위와 같은 이유들로 RFM 지표를 사용하는 것이 중요하는다는 것을 생각해 볼 수 있다.




RFM 분석하기

RFM 지표 계산

  • Recency: 최근 구매일로부터 며칠 지났는가?
  • Frequency: 해당 사용자의 주문 횟수
  • Monetary: 총 구매 금액
WITH RFM AS (
  SELECT user_id,
         DATE_DIFF(CURRENT_DATE(), DATE(MAX(order_date)), DAY) AS Recency,
         COUNT(*) AS Frequency,
         SUM(order_value) AS Monetary
  FROM project_name.dataset.rfm
  GROUP BY user_id
),


점수화 (NTILE 사용)

NTILE(5)을 사용하여 각각 1~5점으로 등분하였다.

  • Recency는 최근일수록 점수가 높아야 하므로 DESC 정렬
  • Frequency, Monetary는 많을수록 좋으므로 ASC 정렬
RFMScores AS (
  SELECT user_id,
         Recency,
         Frequency,
         Monetary,
         NTILE(5) OVER (ORDER BY Recency DESC) AS RecencyScore,
         NTILE(5) OVER (ORDER BY Frequency ASC) AS FrequencyScore,
         NTILE(5) OVER (ORDER BY Monetary ASC) AS MonetaryScore
  FROM RFM
)


최종 RFM Score 만들기

RFM_Segment

  • 예를 들어, "543"  →  R:5점,  F:4점,  M:3점

RFMScore

  • 총점 기준 → 상위 고객 판단용

SELECT *,
       CAST(RecencyScore AS STRING) ||
       CAST(FrequencyScore AS STRING) ||
       CAST(MonetaryScore AS STRING) AS RFM_Segment,
       (RecencyScore + FrequencyScore + MonetaryScore) AS RFMScore
FROM RFMScores;

출력 결과를 바탕으로

RFM_Segment에 따라 다음과 같은 해석을 해 볼 수 있다.

  • 555   ➡️  최근에 자주 많이 구매한 최고 가치 고객
  • 511    ➡️  최근 구매는 했지만, 적게/가끔 구매함  →  육성 대상
  • 155   ➡️  과거에 많이 썼지만 최근에 뜸함  →  재활성화 타겟
  • 111    ➡️  오래된 비활성 유저  →  휴면 고객

이제 이 점수들을 어떻게 활용하고, 어떤 전략으로 연결할 것인지를 고민해야 할 것이다 :)



지금까지 RFM 지표란 무엇인지 살펴보고
빅쿼리 상에서 RFM 지표 계산 및 점수화 과정을 통해 도출된 결과를 해석해 보았다.

RFM 분석은 단순히 고객을 점수화하는 것이 아니다.

누가 진짜로 우리 브랜드를 지탱하고 있는지, 어떤 고객이 이탈 위험에 놓여 있는지, 그리고 어디에 자원을 집중해야 할지를 알려주는 나침반 같은 도구이다.

특히 마케팅 예산이 한정되어 있는 스타트업이나, CRM 캠페인을 설계해야 한다면

💡  RFM 분석은 가장 실용적인 고객 분석 방법 중 하나가 될 수 있다.

profile
AI에 관심을 가지고, 데이터로 가치를 만들어 나가는 과정을 기록합니다.

0개의 댓글