k-means實戰-RFM客戶價值分群


數據挖掘的十大算法

基本概念

 

 

 

 

 

 

 

1、數據預處理:處理成 用戶ID,R ,F,M四個字段

2、調用KMeans算法 進行聚類 ,設定為8類

3、對數據進行擬合,訓練模型  ,每個ID對應一個類別(0-7)

4、如何將分類好的數字標簽,和RFM 模型中的客戶類別匹配起來?

查看每個類別的中心點,用其構造Dataframe來代表整個數據集
查看每個類別的中心點:clf.cluster_centers_
"""分別計算每個屬性值的中位數,代表整個屬性的中位水平"""
rmd = r['R'].median()
fmd = r['F'].median()
mmd = r['M'].median()

然后對8行3列數據進行判斷,對8類數據進行客戶類別標簽

5、對整個數據集貼上標簽

標簽0-7和客戶類型一一對應




 數據集:

 導入數據集到mysql數據庫中

總共有940個獨立消費數據

 

無監督算法:

K-Means 算法

K-Means 算法是一個聚類算法。你可以這么理解,最終我想把物體划分成 K 類。假設每
個類別里面,都有個“中心點”,即意見領袖,它是這個類別的核心。現在我有一個新點
要歸類,這時候就只要計算這個新點與 K 個中心點的距離,距離哪個中心點近,就變成了
哪個類別。

引入模塊

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans
import pymysql

連接數據庫:

conn = pymysql.connect(host='localhost',user='root',password='123',db='db2',port=3306)
rfm = pd.read_sql('select * from consumption_data',con=conn)
conn.close()

查看詳情:

rfm.info()
rfm.head()

 

"""選取RFM 三列"""
new_rfm = rfm.loc[:,['R','F','M']]
"""調用KMeans算法 進行聚類 ,設定為8類"""
clf = KMeans(n_clusters=8,random_state=0)
"""對數據進行擬合,訓練模型"""
clf.fit(new_rfm)

 

"""查看一下分類的結果,返回的數組中每個數字對應了rfm中每一行"""
print(len(clf.labels_))
se = pd.Series(clf.labels_)
se.value_counts()

 

new_rfm['label']=clf.labels_
new_rfm.head()

 

"""如何將分類好的數字標簽,和RFM 模型中的客戶類別匹配起來?"""
"""查看每個類別的中心點,用其構造Dataframe來代表整個數據集"""
查看每個類別的中心點:clf.cluster_centers_

8行3列

r = pd.DataFrame(clf.cluster_centers_,columns=['R','F','M'])
print(r)

每個類別的中心點0-7共8類

 

"""分別計算每個屬性值的中位數,代表整個屬性的中位水平"""
rmd = r['R'].median()
fmd = r['F'].median()
mmd = r['M'].median()
cluster=[]
for i in range(len(r)):
    if r.iloc[i,0] > rmd and r.iloc[i,1] >fmd and r.iloc[i,2] >mmd:
        cluster.append('高價值客戶')
    elif r.iloc[i,0] < rmd and r.iloc[i,1] > fmd and r.iloc[i,2] >mmd:
        cluster.append('重點保持客戶')
    elif r.iloc[i,0] > rmd and r.iloc[i,1] < fmd and r.iloc[i,2] >mmd:
        cluster.append('重點發展客戶')
    elif r.iloc[i,0] < rmd and r.iloc[i,1] < fmd and r.iloc[i,2] > mmd:
        cluster.append('重點挽留客戶')
    elif r.iloc[i,0] > rmd and r.iloc[i,1] > fmd and r.iloc[i,2] < mmd:
        cluster.append('一般價值客戶')
    elif r.iloc[i,0] < rmd and r.iloc[i,1] > fmd and r.iloc[i,2] < mmd:
        cluster.append('一般保持客戶')
    elif r.iloc[i,0] > rmd and r.iloc[i,1] < fmd and r.iloc[i,2] < mmd:
        cluster.append('一般發展客戶')
    else:
        cluster.append('潛在客戶')

cluster

 

 

"""將貼好的標簽,匹配到每一行數據"""
r['客戶分類']=cluster

 

s = r.reset_index()
print(s)

 

new_rfm.head()

 

標簽0-7和客戶類型一一對應

對整個數據集貼上標簽

#
result = pd.merge(new_rfm,r['客戶分類'],how='inner',left_on='label',right_index=True)# 用右表的索引做連接鍵
result = pd.merge(new_rfm,s[['index','客戶分類']],how='inner',left_on='label',right_on='index') result.sort_index()


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM