chapter 3
航空公司客户价值分析
信息时代的来临使得企业营销焦点从产品转向了客户,客户关系管理(customer relationship management,CRM)成为企业核心问题,关键点就在于客户分群,千人千面,精准打击,使得资源分配更加合理。本章结合RFM模型,用K-means聚类算法将客户分群,比较分析客户价值,从而为营销策略的制定提供数据支撑。
数据清洗+特征选取+标准化等预处理>>RFM模型(得到相应指标)+K-Means算法分群>>得到具有不同价值的客户群
3.2.4 任务实现
分析热销商品>>分析商品结构
数据预处理
# 设置工作目录并读取数据
setwd()
dataFile <- read.csv('./data/air_data.csv', header = TRUE) # 数据读取
# 丢弃票价为空的记录
delet.na <- dataFile[-which(is.na(dataFile$SUM_YR_1) |
is.na(dataFile$SUM_YR_2)), ]
# 丢弃票价为0、平均折扣系数不为0、总飞行千米数大于0的记录
index1 <- delet.na$SUM_YR_1 != 0
index2 <- delet.na$SUM_YR_2 != 0
index3 <- delet.na$avg_discount != 0 & delet.na$SEG_KM_SUM > 0
cleanData <- delet.na[which((index1 | index2) & index3), ]
建立LRFMC特征
# 构建LRFMC的5个特征
L <- as.Date(cleanData$LOAD_TIME) - as.Date(cleanData$FFP_DATE)
L <- round(as.numeric(L) / 30, 2)
R <- round(cleanData$LAST_TO_END / 30, 2)
F <- cleanData$FLIGHT_COUNT
M <- cleanData$SEG_KM_SUM
C <- cleanData$avg_discount
zscoreData <- data.frame(L, R, F, M, C)
# 标准化LRFMC的5个特征
zscoredFile <- scale(zscoreData)
write.csv(zscoredFile, './tmp/zscoredFile.csv', row.names = FALSE) # 写出数据
K-means聚类算法对客户分群
# 设置工作目录并读取数据
setwd("F:/第3章/01-任务程序")
zscoredFile <- read.csv('./tmp/zscoredFile.csv')
set.seed(123) # 设置随机种子
result <- kmeans(zscoredFile, 5) # 建立模型,聚类中心为5
round(result$centers, 3) # 查看聚类中心
table(result$cluster) # 统计不同类别样本的数目
# 画出客户群特征分析雷达图
library(fmsb)
max <- apply(result$centers, 2, max)
min <- apply(result$centers, 2, min)
df <- data.frame(rbind(max, min, result$centers))
radarchart(df = df, seg = 5, plty = c(1:5), vlcex = 1, plwd = 2)
# 给雷达图加图例
L <- 1
for(i in 1:5){
legend(1.3, L, legend = paste("客户群", i), lty = i, lwd = 3, col = i, bty = "n")
L <- L - 0.2
}
RFM模型
R(Recency):最近一次消费时间与截止时间的间隔。越近的权重越大,活跃度
F(Frequency):在某段时间内所消费的次数。越多越忠诚,复购率
M(Monetary):在某段时间内所消费的金额。客单价的分析(较前两条较弱)
一般会将R\F\M分别划分为五个等级,是否需要等分,主要在于该维度用户群体的分布类型。是否需要添加其他维度的指标需要由企业具体需求来定,比如本章航空公司的例子,还增加了L(客户入会长度)和C(折扣系数平均值),记为LRFMC模型(可用雷达图表现),指标的选择就依赖于模型的确立。
K-means是基于质心的无监督聚类算法,给定聚类数后输出满足MSE最小的聚类,聚类中心常选为均值,这也是其缺点,过度依赖初始聚类中心,如果数据具有离群点,那么可能会使质心偏移。