資源簡介
航空公司客戶價值分析完整代碼
項目背景:為某航空公司需要以客戶為中心,按照客戶的需求,在對客戶的特點了解上使用不同的營銷手段,目的是爭取更多新客戶,降低客戶流失率,降低服務成本,提高業務收入,增加ARPU值(average revenue per user每個用戶的平均收益,一般以月為單位),精準的市場營銷策略制定。
詳見博客:https://blog.csdn.net/u010963246/article/details/90484644
代碼片段和文件信息
#-*-?coding:?utf-8?-*-?
import?pandas?as?pd
import?numpy?as?np
from?sklearn.cluster?import?KMeans
import?matplotlib.pyplot?as?plt
data?=?pd.read_csv(r‘.\\data\\air_data.csv‘?encoding=“utf-8“)
print(data.shape)
print(data.info())
data?=?data[data[“SUM_YR_1“].notnull()?&?data[“SUM_YR_2“].notnull()]
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]
print(data.shape)
filter_data?=?data[[?“FFP_DATE“?“LOAD_TIME“?“FLIGHT_COUNT“?“SUM_YR_1“?“SUM_YR_2“?“SEG_KM_SUM“?“AVG_INTERVAL“??“MAX_INTERVAL“?“avg_discount“]]
filter_data[0:5]
data[“LOAD_TIME“]?=?pd.to_datetime(data[“LOAD_TIME“])
data[“FFP_DATE“]?=?pd.to_datetime(data[“FFP_DATE“])
data[“入會時間“]?=?data[“LOAD_TIME“]?-?data[“FFP_DATE“]
data[“平均每公里票價“]?=?(data[“SUM_YR_1“]?+?data[“SUM_YR_2“])?/?data[“SEG_KM_SUM“]
data[“時間間隔差值“]?=?data[“MAX_INTERVAL“]?-?data[“AVG_INTERVAL“]
deal_data?=?data.rename(
????columns?=?{“FLIGHT_COUNT“?:?“飛行次數“?“SEG_KM_SUM“?:?“總里程“?“avg_discount“?:?“平均折扣率“}
????inplace?=?False
)
filter_data?=?deal_data[[“入會時間“?“飛行次數“?“平均每公里票價“?“總里程“?“時間間隔差值“?“平均折扣率“]]
print(filter_data[0:5])
filter_data[‘入會時間‘]?=?filter_data[‘入會時間‘].astype(np.int64)/(60*60*24*10**9)
print(filter_data[0:5])
print(filter_data.info())
filter_zscore_data?=?(filter_data?-?filter_data.mean(axis=0))/(filter_data.std(axis=0))
filter_zscore_data[0:5]
def?distEclud(vecA?vecB):
????“““
????計算兩個向量的歐式距離的平方,并返回
????“““
????return?np.sum(np.power(vecA?-?vecB?2))
def?test_Kmeans_nclusters(data_train):
????“““
????計算不同的k值時,SSE的大小變化
????“““
????data_train?=?data_train.values
????nums?=?range(2?10)
????SSE?=?[]
????for?num?in?nums:
????????sse?=?0
????????kmodel?=?KMeans(n_clusters=num?n_jobs=4)
????????kmodel.fit(data_train)
????????#?簇中心
????????cluster_ceter_list?=?kmodel.cluster_centers_
????????#?個樣本屬于的簇序號列表
????????cluster_list?=?kmodel.labels_.tolist()
????????for?index?in?range(len(data)):
????????????cluster_num?=?cluster_list[index]
????????????sse?+=?distEclud(data_train[index?:]?cluster_ceter_list[cluster_num])
????????print(“簇數是“?num?“時;?SSE是“?sse)
????????SSE.append(sse)
????return?nums?SSE
nums?SSE?=?test_Kmeans_nclusters(filter_zscore_data)
#畫圖,通過觀察SSE與k的取值嘗試找出合適的k值
#?中文和負號的正常顯示
plt.rcParams[‘font.sans-serif‘]?=?‘SimHei‘
plt.rcParams[‘font.size‘]?=?12.0
plt.rcParams[‘axes.unicode_minus‘]?=?False
#?使用ggplot的繪圖風格
plt.style.use(‘ggplot‘)
##?繪圖觀測SSE與簇個數的關系
fig=plt.figure(figsize=(10?8))
ax=fig.add_subplot(111)
ax.plot(numsSSEmarker=“+“)
ax.set_xlabel(“n_clusters“?fontsize=18)
ax.set_ylabel(“SSE“?fontsize=18)
fig.suptitle(“KMeans“?fontsize=20)
plt.show()
kmodel?=?KMeans(n_clusters=5?n_jobs=4)
kmodel.fit(filter_zscore_data)
#?簡單打印結果
r1?=?pd.Series(kmodel.labels_).value_counts()??#?統計各個類別的數目
r2?=?pd.Dataframe(kmodel.cluster_centers_)??#?找出聚類中心
#?所有簇中心坐標值中最大值和最小值
max?=?r2.value
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-07-05?16:10??aircustmer\
?????文件????????5428??2019-05-23?16:17??aircustmer\AirTest2.py
?????目錄???????????0??2019-07-05?16:09??aircustmer\data\
?????文件????14478308??2015-12-05?21:05??aircustmer\data\air_data.csv
?????文件????31963648??2019-05-29?14:54??aircustmer\data\result2.xls
- 上一篇:海關聯調服務
- 下一篇:網絡模型與多目標遺傳算法
評論
共有 條評論