KMeans機器學習對客戶價值分類
阿新 • • 發佈:2018-12-22
對原始資料進行資料清洗,生成LRFMC資料
L:成為會員時常
R:最後一次使用服務
F:使用服務總次數
M:使用服務總深度
C:平均獲得折扣值
最後使用KMeans機器學習分類演算法就LRFMC指標進行分類,估計客戶價值
#python3.6.5
#-*- coding: utf-8 -*-
import pandas as pd
from sklearn.cluster import KMeans
data_file= 'air_data.csv' #航空原始資料,第一行為屬性標籤
output_file = 'data_output.csv'
data = pd.read_csv( data_file,encoding='utf-8') #讀取原始資料,指定UTF-8編碼(需要用文字編輯器將資料裝換為UTF-8編碼)
print(data.info())
#data clear
data = data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()] #票價非空值才保留
#只保留票價非零的,或者平均折扣率與總飛行公里數同時為0的記錄。
index1 = data['SUM_YR_1'] != 0
index2 = data['SUM_YR_2'] != 0
index3 = (data['SEG_KM_SUM' ] == 0) & (data['avg_discount'] == 0) #該規則是“與”
data = data[index1 | index2 | index3] #該規則是“或”
data = data.reset_index()#資料清洗後,被清洗掉的空行仍然有索引,重新索引
#data select
member_no =data['MEMBER_NO']
member_length=pd.to_datetime(data['LOAD_TIME'])-pd.to_datetime(data['FFP_DATE'])#計算會員註冊時長
L = member_length.map( lambda x:x.days)#日期格式轉換為整數型格式
R = data['LAST_TO_END']
F = data['FLIGHT_COUNT']
M = data['SEG_KM_SUM']
C = data['avg_discount']
data_train = pd.concat([L,R,F,M,C],axis=1)
#data zscore
data_train=(data_train-data_train.mean(axis=0))/(data_train.std(axis=0))#資料歸一化
data_train.columns=['L','R','F','M','C']#本方法採取LRFMC特徵值
#K-means
kmodel = KMeans(n_clusters = 5)
kmodel.fit(data_train)
print(kmodel)#檢視聚類詳細資訊
print(kmodel.cluster_centers_) #檢視聚類中心
print(kmodel.labels_)#檢視各樣本對應的類別
labels=pd.Series(kmodel.labels_)#將聚類結果轉化為dataframe格式
output=pd.concat([member_no,data_train,labels],axis=1)#嫁接每個會員的聚類結果
output.rename(columns={output.columns[6]:"label"},inplace=True)#修改第七列列名
output.to_csv(output_file)