Python因爲豐富而強大的類庫,普遍應用與互聯網各技術領域,其中以數據挖掘和分析最爲常見,本文經過Python實現RFM用戶價值分析模型,帶你們一塊兒感覺數據挖掘與分析的樂趣~python
RFM:消費(Recency)、消費頻率(Frequency)、與消費金額(Monetary),咱們將商業活動核心三要素,用必定的權重計算,便可爲各用戶創建價值標籤。函數
經過用戶價值標籤,咱們就能夠採用不一樣營銷策略,作精準營銷,以及拉新、召回等營運行動spa
技術棧:Python的time、numpy、pandas類包3d
Pandas:excel
如今咱們有一份原始數據,包含用戶id、訂單時間、訂單id、訂單金額,指望經過RFM模型獲得各用戶價值:code
代碼以下,註釋已經很是清晰,這裏不作贅述:cdn
import time
import numpy as np
import pandas as pd
# 導入數據
df_raw = pd.DataFrame(pd.read_excel('test.xlsx',index_col='USERID'))
# 缺失值處理
sales_data = df_raw.dropna() # 丟失帶有缺失值NA的行記錄
sales_data = sales_data[sales_data['AMOUNTINFO'] > 1] # 丟棄訂單金額<=1的記錄
# 數據轉換 (按用戶id去重歸總)
recency_value = sales_data['ORDERDATE'].groupby(sales_data.index).max() #計算最近一次訂單時間
frequency_value = sales_data['ORDERDATE'].groupby(sales_data.index).count() #計算訂單頻率
monetary_value = sales_data['AMOUNTINFO'].groupby(sales_data.index).sum() #計算訂單總金額
# 分別計算R,F,M得分
deadline_date = pd.datetime(2020, 5,1) #指定一個時間節點,用來計算其餘時間和改時間的距離
r_interval = (deadline_date - recency_value).dt.days #計算r間隔
r_score = pd.cut(r_interval, 5, labels=[5,4,3,2,1]) # 計算r得分 五分位倒序
f_score = pd.cut(frequency_value, 5, labels=[1,2,3,4,5]) # 計算f得分
m_score = pd.cut(monetary_value, 5, labels=[1,2,3,4,5]) # 計算m得分
# R,F,M數據合併
rfm_list = [r_score, f_score, m_score] # 將R,F,M三個維度組成列表
rfm_cols = ['r_score', 'f_score', 'm_score'] # 設置R,F,M三個維度的列名
rfm_pd = pd.DataFrame(np.array(rfm_list).transpose(), dtype=np.int32,
columns=rfm_cols, index=frequency_value.index) #創建R,F,M數據框
#策略1:加權得分 定義用戶價值
rfm_pd['rfm_wscore'] = rfm_pd['r_score']*0.2 + rfm_pd['f_score']*0.2 + rfm_pd['m_score']*0.6
#策略2:RFM組合 直接輸出三維度值
rfm_pd_tmp = rfm_pd.copy()
rfm_pd_tmp['r_score'] = rfm_pd_tmp['r_score'].astype('str')
rfm_pd_tmp['f_score'] = rfm_pd_tmp['f_score'].astype('str')
rfm_pd_tmp['m_score'] = rfm_pd_tmp['m_score'].astype('str')
rfm_pd['rfm_comb'] = rfm_pd_tmp['r_score'].str.cat(rfm_pd_tmp['f_score']).str.cat(rfm_pd_tmp['m_score'])
# 導出數據
rfm_pd.to_csv('simple.csv')
複製代碼
運行腳本後,獲得一份新的文件,內容以下:blog
可見,基於Python,RFM模型仍是挺好實現的,建模的難點其實在於闋值及權重值的選取,他們會直接影響最後的結果。文檔
我我的的經驗是基於2-8原則,選擇R、F、M三者2-8原則的分界值做爲闋值。再根據業務實際設定權重值。get
技術自己是枯燥的,可是咱們能夠運用技術,讓生活變得更加美好。後續也會爲你們帶來更多,Python有意思的實戰分享!