機器學習入門 05 RFM模型聚類分析客戶價值
阿新 • • 發佈:2022-04-11
資料在這裡RFM聚類分析_demo.xlsx
程式碼如下
''' RFM模型聚類分析客戶價值 業務週期:1個月 s R = dt - 最近一次投資時間【時差】 F = 投資總次數 / 使用者投資時長(月) 【每個月頻率】 M = 投資總金額 / 使用者投資時長(月) ''' from math import ceil import pandas as pd if __name__ == '__main__': df = pd.read_excel(r"D:\ \python-sk\0411study\RFM聚類分析_demo.xlsx",index_col="使用者編碼") pd.set_option("display.max_columns",None) # print(df) # 1.計算 R 【時差】 from datetime import datetime dt = datetime(2021,7,20) df['R'] = df['最近一次投資時間'].map(lambda x:(dt-x).days) print(df.head()) # 2.計算 F【月均投資次數】ceil上取整 df['evert_mounth'] = df['R'].map(lambda x:ceil(x/30)) print(df.head()) # dataframe.apply(function,axis)對一行或一列做出一些操作(axis=1遍歷行,axis=0遍歷列) df['F'] = df.apply(lambda x:x['總計投標總次數']/x['evert_mounth'],axis=1) print(df.head()) # 3.計算 M 【月均投資金額】 df['M'] = df.apply(lambda x:x['總計投資總金額']/x['evert_mounth'],axis=1) print(df.head()) # 拿到想要的欄位 df_filiter = df.filter(items=['使用者編碼','R','F','M']) print(df_filiter.head()) #4.k-means 聚類分析 =》 類別 #資料標準化 : (數值 - 數值的平均值) / 資料的標準差 data = (df_filiter - df_filiter.mean()) / df_filiter.std() print(data.head()) # 呼叫api from sklearn.cluster import KMeans # n_clusters 是 KMeans 中的 k,表示著我們告訴模型我們要分幾類 # n_jobs設定工作的core數量 等於-1的時候,表示cpu裡的所有core進行工作 # 用幾個核並行的意思,設定成 2 就是兩個核並行訓練,你可以看一下你的 CPU 佔用率 # max_iter 最大迭代次數,預設值=300 如果資料集不是凸集,可能很難收斂 # 此時可以通過指定最大的迭代次數讓演算法可以及時退出迴圈 # random_state:整型或 numpy.RandomState 型別,可選 kmodel = KMeans(n_clusters=4, n_jobs=4, max_iter=100, random_state=0) # fit 計算KMeans聚類 kmodel.fit(data) # 獲取分類結果 print(kmodel.labels_) data_res = pd.concat([df_filiter,pd.Series(kmodel.labels_,index=df_filiter.index)],axis=1) print(data_res.head()) #修改 拼接後的列名 data_res.columns = list(df_filiter.columns)+["類別"] print(data_res.head()) #按照類別進行結果統計 agg_res = data_res.groupby(by="類別").agg("mean") print(agg_res.head())