用python客戶價值分析案例一則

kuqlan發表於2019-09-08

一個完整的資料分析專案由如下幾個步驟組成:

1)資料獲取:分為本地文字檔案、資料庫連結、爬蟲技術等方式獲取資料;

2 ) 資料儲存 : 存到本文字檔案、資料庫、分散式檔案系統等;

3)資料預處理:據經驗,佔80%的工作量。可以使用Numpy和Pandas這兩個工具庫;

4)建模與分析:這一階段首先要清楚資料的結構,結合專案需求來選取模型,常見的資料探勘模型有如下圖所示:

 

 

    該階段常用工具庫分為如下兩個:

    (1)scikit-learn-適用Python實現的機器學習演算法庫。scikit-learn可以實現資料預處理、分類、迴歸、降維、模型選擇等常用的機器學習演算法。

    (2)Tensorflow-適用於深度學習且資料處理需求不高的專案。

 

5)視覺化分析:Python目前主流的視覺化工具有Matplotlib、Seaborn、Pyecharts等。

 

        在整個資料分析流程,無論是資料提取、資料預處理、資料建模和分析,還是資料視覺化,Python目前已經可以很好地支援我們的資料分析工作。有了python入門基礎後,我們接下來我們以“航空公司客戶價值分析為例”,體驗簡要實際分析過程。

 

假設資料是之前已將採集或記錄好的,那我們從將資料匯入和預處裡開始。

1 、缺失及異常數值的處理,程式碼如下 :

import numpy as np

import pandas as pd

airline_data = pd.read_csv(' .. /data/air_data.csv', encoding='gb18030') #匯入航空資料

print('原始資料的形狀為:',airline_data.shape)

## 去除票價為空的記錄

exp1 = airline_data["SUM_YR_1"].notnull()

exp2 = airline_data["SUM_YR_2"].notnull()

exp = exp1 & exp2

airline_notnull = airline_data.loc[exp,:]

print('刪除缺失記錄後資料的形狀為:',airline_notnull.shape)

 

 

#只保留票價非零的,或者平均折扣率不為0且總飛行公里數大於0的記錄。

index1 = airline_notnull['SUM_YR_1'] != 0

index2 = airline_notnull['SUM_YR_2'] != 0

index3 = (airline_notnull['SEG_KM_SUM']> 0) & \

    (airline_notnull['avg_discount'] != 0) 

airline = airline_notnull[(index1 | index2) & index3]

print('刪除異常記錄後資料的形狀為:',airline.shape)

 

 

 

2、 選取並構建LRFMC模型的特徵

## 選取需求特徵

airline_selection = airline[["FFP_DATE","LOAD_TIME",

    "FLIGHT_COUNT","LAST_TO_END",

    "avg_discount","SEG_KM_SUM"]]

## 構建L特徵

L = pd.to_datetime(airline_selection["LOAD_TIME"]) - \

pd.to_datetime(airline_selection["FFP_DATE"])

L = L.astype("str").str.split().str[0]

L = L.astype("int")/30

## 合併特徵

airline_features = pd.concat([L, airline_selection.iloc[:,2:]],axis = 1)

print('構建的LRFMC特徵前5行為:\n',airline_features.head())

 

 

 

3、標準化LRFMC模型的特徵

from sklearn.preprocessing import StandardScaler

data = StandardScaler().fit_transform(airline_features)

np.savez(' ../data /airline_scale.npz',data)

print('標準化後LRFMC五個特徵為:\n',data[:5,:])

 

以上三段程式碼我們歸結為資料預處理,從這個階段可以看出,其中最重要環節是“選取需求特徵“,因此分析前提是要明確需求,需求調研和選取特徵是我們所有工作的根本。所以我們還需懂得領域知識或由這個方面的人員或領域專家協助分析工作。標準化後,另存一份,一遍後續進行各類測試時,避免所有資料從頭再來。

 

用某種演算法,對客戶資料進行客戶分群,如下航空客戶價值分析K-Means聚類分析程式碼:

 

4、客戶價值分析K-Means聚類分析程式碼

import numpy as np

import pandas as pd

from sklearn.cluster import KMeans #匯入kmeans演算法

airline_scale = np.load(' ../data /airline_scale.npz')['arr_0']

k = 5 ## 確定聚類中心數

#構建模型

kmeans_model = KMeans(n_clusters = k,n_jobs=4,random_state=123)

fit_kmeans = kmeans_model.fit(airline_scale)   #模型訓練

kk=kmeans_model.cluster_centers_ #檢視聚類中心

kmeans_model.labels_ #檢視樣本的類別標籤

 

kk=kmeans_model.cluster_centers_ #檢視聚類中

cc_exp = np.savetxt(' ../data /renwu/cc.txt',kk,fmt="%.18e")

 

cc.txt 檔案內容如下:

 [[ 0.05184321 -0.22680493 -0.00266815  2.19136467 -0.23125594]

 [-0.31368082 -0.57402062  1.68627205 -0.1733275  -0.53682451]

 [ 0.48333235  2.48322162 -0.7993897   0.30863251  2.42474345]

 [-0.7002121  -0.16114387 -0.41489162 -0.25513359 -0.16095881]

 [ 1.16067608 -0.08691922 -0.37722423 -0.15590586 -0.09484481]]

 

 

 

#統計不同類別樣本的數目

r1 = pd.Series(kmeans_model.labels_).value_counts()

print('最終每個類別的數目為:\n',r1)

3        24659

4        15740

1        12125

2        5336

0        4184

 

將以上資料結合特徵屬性、領域知識進行分析後聚類結果如下。其中L代表入會時間,R代表最近乘機距進的時間長度,F代表飛行次數,M代表總飛行歷程,C代表平均折扣係數。

 

 

       從以上案例可以看出,一個資料分析案例中,資料採集和預處理按70%-80%左右工作量或時間。資料準備好了後的重點是模型和訓練階段,該階段程式碼量不多但需要懂得什麼演算法適合什麼場景,選擇統計學演算法還是機器學習類演算法,也是考研一個資料分析是內功的階段。選擇對了合適的演算法挖掘其中價值有很大的幫助。最後階段領域知識綜合應用和分析,當然領域知識的掌握或領域專家的參與貫穿到整個分析過程,回過頭來還是明確分析需求是重中之重。

       在學習資料探勘的過程中,我們也體會到演算法很多,專門學習也需要較長的時間。根據個人的體會,如果不再是學生是階段,正確學習方法也許是先明確需求,根據演算法用途再確定合適的演算法,接下來就只針對該演算法深入學習研究並應用。

 

參考資料:

Python資料分析與應用  黃紅梅、張良均  主編    中國工信出版集團和人民郵電出版社

https://mp.weixin.qq.com/s/krKpGus-2uB5TqfrLZRh0A


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18841027/viewspace-2656395/,如需轉載,請註明出處,否則將追究法律責任。

相關文章