tak's data blog

RFM 분석 본문

이것저것

RFM 분석

hyuntaek 2023. 7. 3. 00:41
반응형
SMALL

 

이번에는 RFM 분석에대해서 글을 써보려고 합니다. 

 

일전에 회사에서 유저들의 행동을 분석해간적이 있는데, 이것을 좀 더 단위를 넓혀 군집에 따라 행동을 특정지을 수 있지 않을까?란 물음이 기반이 되어 찾게 된 분석 방법입니다.

 

군집화에는 흔히 말하는 kmeans, dbscan, 인구통계학적 정보 기반, RFM 방법 등등이 있을 것입니다. 저는 군집의 고도화를 요구하기보다는 빠르게 나눠볼 수 있는 방법이 필요했습니다. 여러가지 방법론을 찾다가 RFM에 대해 알게되어 이를 직접 적용하기로 하였고, 리마인드 차원에서 글을 남기게 되었습니다.

 

RFM이란?

이제 RFM 분석에 대해 설명드리도록 하겠습니다.

  • Recency : 얼마나 최근에 구매했는지?
  • Frequency: 구매 빈도는 어떠했는지?
  • Monetary: 얼마나 많은 금액을 사용했는지?

를 뜻하는 군집화 방법입니다. 구매 가능성이 높은 고객을 선정에 용이한 방법이라고 알려져 있고, 사용자의 구매 패턴을 기준으로 분류하므로 특성에 따라 차별화된 메시지를 전달할 수 있습니다.

 

 한가지 예를 들어보면

user_id recency frequency monetary
user_1 7일 전 10번 1,000,000
user_2 30일 전 2번 100,000

얼핏봐도 user_1이 구매력이 높다라고 볼 수 있을 것입니다. 이런 3가지 정보를 기반으로 유저군을 형성하여 군집별 서비스 개선안을 적용할 수 있는 개념입니다.

 

이 정보만으로는 어떻게 군집을 이뤄내는지 알 수 없을텐데요,  군집을 이뤄내기 위해서는 recency, frequency, monetary별로 각각 차등 점수를 주어서 마지막에 합산한 점수를 기반으로 나눈다고 할 수 있습니다.

 

 

점수 산정 방법

차등 점수를 주는 방법에는 다음과 같은 방법들이 있습니다.

 

1) 분위수 기반

첫번째 분위수 기반입니다.

분위수 기반은 예를 들어 1~100까지의 값들이 있을 때, 사분위수 기반으로 나눈다면 1~25, 26~50, 51~75, 76~100 이런식으로 25%단위로 끊어서 나눌 수 있습니다. 그리고 각각 1, 2, 3, 4이런식으로 더 높은 값일수록 점수를 많이주는 방향을 선택할 수 있을 것입니다.

 

frequency, monetary는 위와 같은 방법으로 나눌 수 있지만, recency의 경우는 시간으로 이루어져있으므로 보통 기준일을 정해두고 기준일에서 며칠이 지났는지를 기반으로 값을 산정합니다.

 

 

2) 직접 구간을 선정

두번째는 직접 구간을 선정하는 방법입니다.

이와 같은 경우는 최대값과 최소값의 차이가 너무 크게 나고 데이터가 skew일 때, 사용하는 방법입니다.

예를 들어, 분위수로 나누었을 때 상위 25%안에 있는 값들 중 최소값이 1,000이고 최대값이 10,000,000이라면 그 값이 너무 크게 차이가 나므로 단순히 분위수로 나누기엔 무리가 있을 것입니다. 그렇기 때문에 이 구간을 직접 사용자가 정의해 위와 같이 점수를 산정하는 방법입니다. 

 

 

3) 최대, 최소값을 선정하고 그 구간을 동일하게 나누기

세번째는 분위수와 비슷한 방법입니다.

일정 값으로 범위를 설정하고 그 안에 구간을 동일하게 나누는 방법으로 예를 들어 1~1000까지의 값이 있을 때,

100의 단위로 나누고 싶다면 1~100, 101~200 ... 901~1000 이런식으로 동등하게 나누는 방법입니다.

 

 

만약 다음과 같이 RFM 등급을 산정한 예를 들어보겠습니다.

user_id recency frequency monetary
user_1 4 4 4
user_2 1 3 4
user_3 4 4 3
user_4 1 1 1
user_5 1 1 1
user_6 1 1 2
user_7 1 3 3

위의 데이터프레임에서 비슷한 고객끼리 묶어본다면

 

1. user_1 (4,4,4) , user_3 (4,4,3)

2. user_2 (1,3,4) , user_7 (1,3,3)

3. user_4 (1,1,1) , user_5 (1,1,1), user_6 (1,1,2)

이런식으로 군집을 형성해볼 수 있을 것입니다.

 

간단하게 보면 recency, frequency, monetary 스코어의 값들을 합산해서 합산한 값에따라 군집을 나눌 수 있을 것입니다. 하지만 (2,2,4), (3,3,2)의 경우를 들어봅시다. (2,2,4)의 경우는 합산 값이 8이고 (3,3,2)의 경우도 합산이 8인데 monetary값이 4와 2로 큰 차이가 남을 알 수 있습니다. 이런 합산의 방법은 위와 같은 경우를 골라낼 수 없는데요, 이런 경우에는

 

1) 로지스틱 회귀분석

회귀계수를 가중치로 산정해 (w1,w2,w3와 같이)

최종 점수 값을 w1*recency +  w2*frequency + w3 * monetary 로 산정하는 방법도 있습니다.

 

2) 파레토 법칙 80/20

전체 결과의 80%가 전체 원인의 20%에서 발생한다는 현상을 의미합니다.

즉, 전체 자료의 r,f,m의 상위 20%의 고객들의 평균값과 각각 가중치를 랜덤으로 업데이트 했을 때, r,f,m점수에서 상위 20%고객들의 평균값을 비교해 가장 유사한 값이 나오는 구간의 경우의 수를 최적의 가중치로 결정하는 방법입니다.

 

이외에도 각각의 도메인에 맞춰 r,f,m 중 중요한 것에 점수를 더 부여하는 방법이 있다고 합니다.

또한 그룹을 나눌 때 꼭 4가지 그룹이 아닌, 이것도 도메인이나 그때그때의 데이터 분포에 따라 분석가가 설정하는 영역이라고 합니다.

 

 이러한 군집형성을 기반으로 다양한 서비스 개선방법을 제안 해볼 수 있을 것입니다.

 

 

 

 

 

참고 자료

 

https://ploiitubsamon.medium.com/rfm-analysis-for-customer-segmentation-with-power-bi-5d2f5bd62038

https://towardsdatascience.com/recency-frequency-monetary-model-with-python-and-how-sephora-uses-it-to-optimize-their-google-d6a0707c5f17

https://medium.com/data-analytics-centre/data-visualization-and-rfm-recency-frequency-and-monetary-analysis-using-python-customer-54fc48688681

https://medium.com/@ilaydakursun/customer-segmentation-with-rfm-analysis-learn-more-about-your-customers-f12b348acbd

https://github.com/klaudia-nazarko/rfm-analysis-python/blob/master/rfm_analysis_python.ipynb

https://zephyrus1111.tistory.com/16

반응형
LIST