用R进行市场调查和消费者感知分析
问题到数据
理解问题
理解客户的问题:谁是客户(某航空公司)?交流,交流,交流!
问题要具体
某航空公司: 乘客体验如何?哪方面需要提高?
类别:比较、描述、聚类,判别还是回归
需要什么样的数据:现有数据,数据质量,需要收集的数据,自变量,因变量
哪些方面的满意度?哪些主要竞争对手?
内部数据?外部数据?
领导不关心的问题都是没有未来的!
设计问卷
礼貌(Courtesy)
友善(Friendliness)
能够提供需要的帮助(Helpfulness)
食物饮料服务(Service)
购票容易度(Easy_Reservation)
座椅选择(Preferred_Seats)
航班选择(Flight_Options)
票价(Ticket_Prices)
座椅舒适度(Seat_Comfort)
位置前后空间(Seat_Roominess)
随机行李存放(Overhead_Storage)
机舱清洁(Clean_Aircraft)
总体满意度(Satisfaction)
再次选择次航空公司(Fly_Again)
向朋友推荐此航空公司(Recommend)
数据到信息
流程图:数据准备,数据清理,建模和模型评估
数据预处理:清理、变换、缺失值填补等 (非常重要且耗时)
建模和评估:
分析用户感知:特征提取
PCA,EFA
评估标准:此处不是预测类的评估,是市场类人员等是否能够信服
数据
# 载入了相关包,但是此处不对后面相关
library(readr)
library(dplyr)
library(corrplot)
# gplots是可视化包
library(gplots)
# RColorBrewer包用于设计图形的调色盘
# 相关信息见:http://colorbrewer2.org
library(RColorBrewer)
# 可以从网站下载该数据
airline<-read.csv("AirlineRating.csv")
# install.packages('tibble')
library(tibble)
glimpse(airline)
## Observations: 3,000
## Variables: 17
## $ Easy_Reservation <int> 6, 5, 6, 5, 4, 5, 6, 4, 6, 4, 5, 5, 6, 5, 5, ...
## $ Preferred_Seats <int> 5, 7, 6, 6, 5, 6, 6, 6, 5, 4, 7, 5, 7, 6, 6, ...
## $ Flight_Options <int> 4, 7, 5, 5, 3, 4, 6, 3, 4, 5, 6, 6, 6, 5, 6, ...
## $ Ticket_Prices <int> 5, 6, 6, 5, 6, 5, 5, 5, 5, 6, 7, 7, 6, 7, 7, ...
## $ Seat_Comfort <int> 5, 6, 7, 7, 6, 6, 6, 4, 6, 9, 7, 7, 6, 6, 6, ...
## $ Seat_Roominess <int> 7, 8, 6, 8, 7, 8, 6, 5, 7, 8, 8, 9, 7, 8, 6, ...
## $ Overhead_Storage <int> 5, 5, 7, 6, 5, 4, 4, 4, 5, 7, 6, 6, 7, 5, 4, ...
## $ Clean_Aircraft <int> 7, 6, 7, 7, 7, 7, 6, 4, 6, 7, 7, 7, 7, 7, 6, ...
## $ Courtesy <int> 5, 6, 6, 4, 2, 5, 5, 4, 5, 6, 4, 6, 4, 5, 5, ...
## $ Friendliness <int> 4, 6, 6, 6, 3, 4, 5, 5, 4, 5, 6, 7, 5, 4, 4, ...
## $ Helpfulness <int> 6, 5, 6, 4, 4, 5, 5, 4, 3, 5, 5, 6, 5, 4, 5, ...
## $ Service <int> 6, 5, 6, 5, 3, 5, 5, 5, 3, 5, 6, 6, 5, 5, 4, ...
## $ Satisfaction <int> 6, 7, 7, 5, 4, 6, 5, 5, 4, 7, 6, 7, 6, 4, 4, ...
## $ Fly_Again <int> 6, 6, 6, 7, 4, 5, 3, 4, 7, 6, 8, 6, 5, 4, 6, ...
## $ Recommend <int> 3, 6, 5, 5, 4, 5, 6, 5, 8, 6, 8, 7, 6, 5, 6, ...
## $ ID <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14...
## $ Airline <fctr> AirlineCo.1, AirlineCo.1, AirlineCo.1, Airli...
检查相关性
# library(dplyr)
# install.packages('corrplot')
# library(corrplot)
# 我们用`corrplot()`函数检查问卷调查问题的相关性:
# 选取其中的问卷调查项
select(airline,Easy_Reservation:Recommend) %>%
# 得到相关矩阵
cor() %>%
# 用corrplot()绘制相关图
# 选项order="hclust"按照变量的相似度,基于系统聚类的结果对行列进行重新排列
corrplot(,order="hclust")
主成分分析
airline.pc<-select(airline,Easy_Reservation:Recommend) %>%
# prcomp:Principal Components Analysis主成分分析
prcomp()
summary(airline.pc)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 4.693 4.2836 1.68335 1.03625 0.88896 0.82333
## Proportion of Variance 0.435 0.3624 0.05596 0.02121 0.01561 0.01339
## Cumulative Proportion 0.435 0.7974 0.85338 0.87458 0.89019 0.90358
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 0.80349 0.78694 0.77536 0.77020 0.74612 0.71831
## Proportion of Variance 0.01275 0.01223 0.01187 0.01172 0.01099 0.01019
## Cumulative Proportion 0.91633 0.92856 0.94043 0.95215 0.96314 0.97333
## PC13 PC14 PC15
## Standard deviation 0.69417 0.66650 0.65131
## Proportion of Variance 0.00952 0.00877 0.00838
## Cumulative Proportion 0.98285 0.99162 1.00000
主成分分析陡坡图
# 主成分分析陡坡图
plot(airline.pc,type="l",main="PCA陡坡图")
主成分分析双标图
# PCA双标图
biplot(airline.pc,main="PCA双标图",cex=c(0.5,1),xlim=c(-0.06,0.04))
数据聚合
# 我们可以用之前介绍的`dplyr`包中的各种函数,以及使用之前讲到的管道操作`%>%`让代码更易读:
# 选取其中的问卷调查项和航空公司因子信息
# 即删除ID项
airline.mean<-select(airline,-ID)%>%
# 按Airline对数据进行分组总结
group_by(Airline)%>%
# 对每个数值
summarise_each(funs(mean))%>%
# 显示数据
glimpse()
## Observations: 3
## Variables: 16
## $ Airline <fctr> AirlineCo.1, AirlineCo.2, AirlineCo.3
## $ Easy_Reservation <dbl> 5.031, 2.939, 2.038
## $ Preferred_Seats <dbl> 6.025, 2.995, 2.019
## $ Flight_Options <dbl> 4.996, 2.033, 2.067
## $ Ticket_Prices <dbl> 5.997, 3.016, 2.058
## $ Seat_Comfort <dbl> 6.988, 5.009, 7.918
## $ Seat_Roominess <dbl> 7.895, 3.970, 7.908
## $ Overhead_Storage <dbl> 5.967, 4.974, 7.924
## $ Clean_Aircraft <dbl> 6.947, 6.050, 7.882
## $ Courtesy <dbl> 5.016, 7.937, 7.942
## $ Friendliness <dbl> 4.997, 7.946, 7.914
## $ Helpfulness <dbl> 5.017, 7.962, 7.954
## $ Service <dbl> 5.019, 7.956, 7.906
## $ Satisfaction <dbl> 5.944, 3.011, 7.903
## $ Fly_Again <dbl> 5.983, 3.008, 7.920
## $ Recommend <dbl> 6.008, 2.997, 7.929
聚合后PCA结果双标图
# 聚合后PCA结果双标图
airline.mean.pc<-select(airline.mean,Easy_Reservation:Recommend)%>%
prcomp()
biplot(airline.mean.pc,main="聚合后PCA结果双标图",
cex=0.7, expand=2,xlim=c(-0.8, 1),ylim=c(-0.7,0.8))
可视化
# 将航空公司设置成行名称然后将对应的字符列删除
row.names(airline.mean)<-airline.mean$Airline
airline.mean<-select(airline.mean,-Airline)
# 绘制热图
heatmap.2(as.matrix(airline.mean),
col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司问卷调查均值热图")
探索性因子分析(EFA)
获取抽样调查中问题之间的构造
结果是一个因子矩阵,其目标是使一小部分变量对应较高的因子载荷,其余的因子载荷都很低
为什么用因子分析:
使结果可实践,PCA很难实现
优化调查项,保留因子载荷高的项
探索调查项之间的联系是不是符合我们的期待
# 因子分析
library(GPArotation)
airline.fa<-airline%>%
subset(select=Easy_Reservation:Recommend)%>%
factanal(factors=3,rotation="oblimin")
因子载荷热图
Factor 1: 乘客的总体感觉
Factor 2: 机舱服务感知
Factor 3: 购票体验感知
# library(gplots)
# library(RColorBrewer)
# 绘制热图
heatmap.2(airline.fa$loadings,
col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司满意度因子载荷")
平均因子分值热图
Factor 1: 乘客的总体感觉
Factor 2: 机舱服务感知
Factor 3: 购票体验感知
# 因子得分
airline.fa<-airline%>%
subset(select=Easy_Reservation:Recommend)%>%
factanal(factors=3,rotation="oblimin",scores="Bartlett")
airline.fa
##
## Call:
## factanal(x = ., factors = 3, scores = "Bartlett", rotation = "oblimin")
##
## Uniquenesses:
## Easy_Reservation Preferred_Seats Flight_Options Ticket_Prices
## 0.233 0.157 0.222 0.173
## Seat_Comfort Seat_Roominess Overhead_Storage Clean_Aircraft
## 0.251 0.165 0.253 0.495
## Courtesy Friendliness Helpfulness Service
## 0.219 0.191 0.153 0.161
## Satisfaction Fly_Again Recommend
## 0.151 0.111 0.113
##
## Loadings:
## Factor1 Factor2 Factor3
## Easy_Reservation 0.941
## Preferred_Seats 0.880
## Flight_Options 0.167 0.803
## Ticket_Prices 0.887
## Seat_Comfort 0.865
## Seat_Roominess 0.844 -0.242
## Overhead_Storage 0.833 0.137 -0.142
## Clean_Aircraft 0.708
## Courtesy 0.818
## Friendliness 0.868
## Helpfulness 0.953
## Service 0.922
## Satisfaction 0.921
## Fly_Again 0.943
## Recommend 0.942
##
## Factor1 Factor2 Factor3
## SS loadings 5.316 3.285 3.135
## Proportion Var 0.354 0.219 0.209
## Cumulative Var 0.354 0.573 0.782
##
## Factor Correlations:
## Factor1 Factor2 Factor3
## Factor1 1.0000 -0.0494 0.0188
## Factor2 -0.0494 1.0000 -0.7535
## Factor3 0.0188 -0.7535 1.0000
##
## Test of the hypothesis that 3 factors are sufficient.
## The chi square statistic is 769.65 on 63 degrees of freedom.
## The p-value is 3.9e-122
fa.score<-airline.fa$scores%>%
data.frame()
fa.score$Airline<-airline$Airline
fa.score.mean<-fa.score%>%
group_by(Airline)%>%
summarise(Factor1=mean(Factor1),
Factor2=mean(Factor2),
Factor3=mean(Factor3))
row.names(fa.score.mean)<-as.character(fa.score.mean$Airline)
fa.score.mean<-select(fa.score.mean,-Airline)
heatmap.2(as.matrix(fa.score.mean),
col=brewer.pal(9,"YlGn"),trace="none",key=FALSE,dend="none",cexCol=0.6,cexRow =1)
title(main="航空公司满意度平均因子分值")
得到的信息
公司在很多方面具有竞争优势,客户满意度总体高于竞争对手
公司在购票体验上有明显劣势,这是需要努力改进的地方
我们为什么在购票体验上满意度高的乘客更不满空航服务?是因为乘客本身的特质,或是由于某种原因重视空航服务的公司容易忽视购票体验?
需要进一步研究购票体验差的原因,以及评估其可能带来的影响:如果购票体验差并不会影响当前总体满意度以及票的销售情况,那我们需要投入多少改进该问题?
信息到行动
行业知识:
解释购票体验和空航服务体验的关系
信息的接收者:哪些人员真正实践这些改进?交流、倾听和尊重
讲故事的能力
转自:
http://www.xueqing.tv/course/69
原文作者:
林荟,现任美国杜邦公司商业数据科学家,毕业于爱荷华州立大学,统计学博士,先后担任该校兽医学院统计咨询师及商学院统计咨询师,研究兴趣在预测模型,机器学习,数据可视化,市场营销调查分析,消费者行为分析,自然语义处理和文本挖据,健康与疾病统计分析等方面。
本文链接:
https://i.cnblogs.com/EditPosts.aspx?opt=1