Maxdiff系列(六)MaxDiff的数据分析(用Excel进行logit分析)

最近10年来,Maxdiff在估算多个对象的偏好上被应用到越来越多的领域,但是国内关于Maxdiff数据具体应该如何分析的介绍很少。尽管本系列曾经就Maxdiff的分析做了一些简单的介绍( 参见本公众号分享文章《Maxdiff系列(五)Maxdiff的数据分析》),但主要是从频数分析角度出发简单介绍其分析思想。

 

目前Maxdiff的主流分析模型是逻辑模型(Logit model)以及基于此模型的分层贝叶斯估算(Hierarchical Bayesian Estimation)方法。其中Logit model是核心模型。我们就先从Logitmodel的分析开始,看看它是如何用来估算Maxdiff中各个对象的偏好效用值。至于分层贝叶斯算法,我们会在以后的系列文章中进行介绍。

 

为什么要使用logit model,这是因为Maxdiff记录的是消费者在面对不同对象集合时的选择(Choice)。从模型的角度看,消费者的选择是因变量Y,他所面对的对象集合是自变量X。而消费者的选择(Y)是一个离散型变量(要么选中,要么不选中),而非连续型数据(偏好打分)。这时,我们的因变量实际上具有一种概率意义,只不过我们收集到的样本数据并不是如同概率那样可以在0-1的区间里任意取值,而是只能为0或1。

 

 更准确地说,对于Maxdiff,我们通常采用的是条件逻辑模型(conditional logit model)。之所以使用条件逻辑模型,是因为MaxDiff本身的特性:通过观察消费者在给定不同备选对象时的权衡取舍(trade-off),进而估算对象之间的相对偏好程度。

 

我们还是从一个简单的例子出发来看看具体应该怎样一步步的建模和分析。假设我们要评测8个对象,每个受访者要做6道MaxDiff的题目(任务),每个题目中出现4个对象,每个任务里出现的对象如下图所示。

如果我们把这个受访者在所有6个任务的回答都排列在一起,那么数据就是下面这种形式。

当然,上面这种数据还不能直接进行分析,必须进行进一步的编码。这里插一句,在数据分析中,编码(coding)是相当重要的环节。大家通常对各种酷炫的统计和数学模型感兴趣,但是却往往忽视了编码的重要性,以至于真实数据到手后不知道如何整理成软件或程序可以处理的样子。

 

 

条件逻辑模型的编码方式

 

针对Maxdiff数据,我们通常采用dummy coding的方式(详见本公众号分享文章《联合分析中不同的编码方式》),因为这种编码方式最接近模型的原始含义,也最便于读者理解。

首先,我们需要记录受访者的编号ID,例如我们取第1个受访者的数据(ID=1),然后分别是任务(Task)、概念(Concept)、对象(Item1-Item8)。

以这个受访者的任务1为例。其第1个概念(concept)中出现是8号对象,于是我们将其他7个对象编码为0,将8编码为1:

我们可以依次将任务1中的4个概念均按照这种方式进行编码。那么我们得到的任务1的完整的自变量数据就是下面的格式,可以看到,这种编码相当于把原始数据“竖”着摆放起来,并且把每个对象出现与否编码为若干个0-1变量:

通过这样的编码方式,我们看到在任务1中,最喜欢的对象3的回答被编码成了1,其余没被选中的都留作0,同样地最不喜欢的对象8,在“最不喜欢”编码中被编码成了1,其余没被选中的都留作0。我们每个任务都被编码了两次,用于分析的实际任务总数也就由6个变成了12个。

把所有任务按照以上编码方式编码,会得到下图的数据(这种编码也是大多数软件进行条件逻辑分析时可以直接调用的数据格式)

现在我们来看看应该如何设计条件对数模型(conditional logit model)来对每个对象的偏好效用进行估计。

根据随机效用理论(Random utility theory),一般认为人们对不同对象的实际偏好效用存在一定的随机性,且这种随机扰动往往服从Gumbel distribution。由此我们可以推算出在面对多个对象时,人们选择第i个对象为“最喜欢”的期望概率(也被称为似然度--Likelihood)为:

以上面的第1个任务为例,这里我们不妨猜测对象8,对象4,对象5和对象3的效用值u分别为0,2,4,8。那么,对象3被选为“最喜欢”的概率为:

到了这一步,我们很自然地会想,刚才随便猜测的4个对象的效用值到底是不是很准确呢?这就需要和受访者的实际选择做对比。

一个最简单的对比原则是,如果根据某一组效用值计算出的“最喜欢”和“最不喜欢”的概率越接近实际选择,那么这组效用值越准确,因为它越能还原消费者的实际选择行为。这种“完美预测/拟合”如果反映在数据上,就应该是当这组效用值被代入上面的公式后,被选中的对象的概率值(似然度)接近于1。即下图的效果:

我们发现这种猜测(对象8,4,5,3的效用值u分别为0,2,4,8)还不足够好,尽管“最喜欢”的概率拟合得比较接近理想水平(0.9793),但是“最不喜欢”的概率估计值为0.8666,仍然有改善的空间。

 

当然,仅仅使得一个任务拟合得完美还不够,我们需要每个任务都拟合地很好。这时我们需要计算每个任务里被选为“最喜欢”和“最不喜欢”的对象的似然度,并且将其求和(或取几何平均),并且通过计算机的计算找到能使其最大的一组效用值。这就是效用值估算的核心思想。再说得直白点,这个过程类似于一种优化,我们需要找到能使目标函数(似然度的总和或平均数)最大的一组效用值。

 

回到我们的例子中,由于采用了dummy coding,我们需要将对象的最后一列移除(事实上可以去除这8列中的任何一列),作为参照水平(原理在本公众号分享文章《联合分析中不同的编码方式》)。然后将前7个对象效用值的初始系数均设置为0(当然也可以随机设置成别的数值),如下图:

使用Excel进行估算

 

接下来我们用excel中的sumproduct函数,逐行将对象乘以系数,便可以得到一列每个概念的效用值(J列)。

随后我们用Excel中的exp函数将每个效用值转化为偏好分数(K列)。最后由偏好分数计算其被选择概率(L列),如下图:

需要注意的是,在运用公式计算每个任务中对象被选择概率的时候,其分母是相对应的每个任务的偏好分数之和。

 

由于已经将效用值的初始值都设置为0,此时每个任务中的对象被选择的概率都是1/4,这时可以视为受访者对任何对象都没有相对的偏好,一视同仁,于是每个产品被选中的概率就是均等的。

M列是受访者在每个任务中所选择“最喜欢”和“最不喜欢”的对象的概率拟合值(似然度),我们希望在估算后,这一列的每个数值都能接近于1。M3中的RLH是平均似然度(Root Likelihood),是M列所有数值的几何平均数,RLH估算的是给定效用值下这位受访者实际选择数据拟合的平均准确率。

在N列中我们将M列的数都取了自然对数,其总和就是N3中的自然对数似然度(Log Likelihood);该参数往往是模型优化的目标,也就是该似然度越高则模型估算的越准确。从数学角度上说,无论取RLH还是Log likelihood作为优化的目标函数都是可以的,但是从优化算法角度看,对数似然度会对迭代过程更加敏感,能够更快地找到效用值的最优解。

 

以下是J:N列所对应的Excel函数,有兴趣的读者不妨按照这个样子亲手试试。

接下来我们开始使用Solver(规划求解插件)进行求解。需要注意的是,这里我们对效用值系数的估算进行了某种约束,即限定估算出来的效用值系数最大不能超过100,全距(最大效用值减去最小效用值)也不能超过100。这一方面是为了避免Excel中Exp函数溢出导致的无法运算的情形,另一方面也是为了避免模型的过度拟合。因此,在Excel中做如下设置:在C3中计算最大系数,在F3中计算全距,并且在Solver中对这两个单元格都做出约束限定(小于等于100)

由于模型拟合的目标是让自然对数似然度最大化,所以N3是目标单元格,需要估算的是B2到H2中的系数。然后点击Solve(求解)。我们很快得到了以下结果:

可以看到这个受访者最喜欢3号对象,其次是2号和7号对象;最不喜欢的是6号对象。

 

我们还发现Excel solver估算出来的效用值已经能让模型在大多数任务上的预测准确了,平均来说,我们的预测准确率接近80%(RLH=0.79)。

 

如果我们有很多个受访者,比如有500个受访者。而且每个人所对应的试验设计都足够好,每个对象的出现次数均衡。那么我们可以按照此方法计算每个受访者在每个对象上的效用值。进一步的,我们还可以计算这500个人在每个对象上的效用值的平均值(当然,这涉及到一些尺度调整工作),从而得到样本层面上每个对象的偏好效用值。或者,还可以依据这些效用值对这500个受访者进行分类(segmentation)以及进行其他的一些多元统计分析。

 

我们也可以把这500个受访者的数据按照这种方式纵向“堆叠”在一起,然后施行同样的方法估算整体样本层面上各个对象的偏好效用值。

 

和mlogit作比较

 

我们之前提到过专业统计软件R中的mlogit拓展包,我们可以将同样的数据用R来估算一下并和Excel solver计算的结果进行比对。相应的R代码如下图所示,对R有经验的读者可以不妨动手试一下:

其中读取的原始数据choicedata.csv(部分)如下所示:

如果我们将mlogit计算得到的效用值粘贴回我们的Excel表格B2:H2,如下图:

可以看到,尽管Excel的solver插件与mlogit计算的效用值不尽相同,但是两种方法都能使得模型的拟合优度RLH达到0.79,自然对数似然度都等于-2.77,效果一样好。

很自然的,我们不妨直接计算下两种软件估算得到的效用值之间的相关系数,见下图

很明显,在这里Excel solver计算得到的效用值与mlogit计算得到的效用值差异不大,接近于一个线性变换。

当然,如果Maxdiff对应的对象更多,数据量更大时,我们还是建议使用专业的统计软件来建立模型并进行效用值的估算,其计算效率和准确性要优于Excel solver。

 

小结

本文通过一步步的Excel的操作,让大家清晰地看到针对Maxdiff数据的条件逻辑模型该如何建立,编码及求解。实际上通过本文的介绍,大家可以看到Maxdiff的逻辑模型并不复杂,通过一般的Excel都可以进行一定的运算求解。

 

另外,Maxdiff可以视为一种仅含一个因子(或属性)的联合分析,本文所介绍的编码(coding)和估算过程稍加推广,就可以运用到一般的离散选择模型(或基于选择的联合分析CBC)的条件逻辑模型求解。我们也会在今后的系列中继续介绍如何使用Excel对一般的离散选择模型进行分析。请大家继续关注。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
游戏数据分析 变量选择 通过⽹络数据获取,得到游戏数据指标如下所⽰: 游戏数据分析的整体思路 第⼀步;数据⽂件获取(1.导⼊数据 2.查询结构 3.更改结构 4.汇总变量信息); 第⼆步;数据预处理(1.剔除缺失值2.变量转换与衍⽣ 3.读出处理好的数据观察和可视化4.汇总变量类型); 第三步;数据挖掘(1.逻辑回归 2. 决策树 3.随机森林 4.三种模型⽐较验证); 第四步;展⽰与解读(1.描述统计分析 2.描述及模型解读) 提出问题 (1)问题:游戏app是否⾼频使⽤⽤户的影响因素是什么? (2)游戏产品的⾼频使⽤⽤户的定义:是否游戏⾼频⽤户的定义:对游戏使⽤量进⾏中位数划分,如果⼤于中位数是⾼频⽤户,低于中位 数是低频⽤户 上述数据源可⽤于分析的问题⾯有: (0): ⾼频游戏⽤户和低频游戏⽤户的影响因素是什么 (1)⾼频⽤户集中的游戏平台有哪些 (2)⾼频⽤户集中的游戏类型是什么,可针对市场⾼频⽤户的喜好开发热款游戏 (3)⾼频⽤户集中的销售额主要占⽐市场,可考虑游戏产品的设计主要⾯向哪个市场 解决商务问题和业务决策的应⽤点有: (1)游戏投资商可对⾼频⽤户的游戏类型进⾏投资 (2)游戏产品的市场⾯对群体的普及主要针对哪个市场 (3)游戏产品的市场⾯对哪类游戏受喜好的⼈多 分析⽬标:⾼频游戏⽤户的影响因素是什么? 数据选择:2010~2016年的游戏数据 变量指标选择:游戏名称、平台名称、发布年份、游戏类型、发布公司、北美销售额、欧洲销售额、⽇本销售额、其它地区销售额、全球销 售额、评价分数、游戏评价量、⽤户评分、游戏使⽤⼈数、游戏开发商。 变量相关性:选择分析变量相关性主要研究以下9个变量间的相关性情况: 北美销售额 欧洲销售额 ⽇本销售额 其它地区销售额 全球销售额 评价分数 评价量 ⽤户评分 ⽤户使⽤量 主要市场 通过分析得到,⽤户使⽤量和游戏评论量、评论分数,全球销售额存在相关。和其它地区的销售额⽆关,和⽤户的评分相关性较低。 得到相关系数图如下,其中除对⾓线以外,颜⾊越靠近深蓝⾊,表⽰相关性越强。其中⽤户使⽤量和⽤户得分与⽇本销售额相关性较低。其 余都存在⼀定程度的相关性。 ⽤户相关性计算,选择的是⽪尔逊相关系数,主要选择的是数值型数据进⾏相关性分析。 str(data) xgdata=sqldf("select NA_Sales,EU_Sales,JP_Sales,Other_Sales,Global_Sales,Critic_Score,Critic_Count,User_Score ,User_Count from data") str(xgdata) mf_cor=cor(xgdata)###求得相关系数 cor.plot <- corrplot(corr = mf_cor) 通过相关系数⾏最后⼀⾏的图形可以看出,⽤户是否⾼频使⽤情况和评论量有关,其次是评论⽤户数有⼀定的影响。 数据处理 1. 在Tableau和R中分析,哪些属性值可以不分析(删除) ⽆关变量: 游戏名称 /⽤户得分,这两个变量属性属于⽆关变量,可进⾏删除。 2. 哪些属性值需要派⽣ 研究对象为: (1)是否⾼频⽤户, 其中⾼频⽤户属于衍⽣变量,其定义为:对游戏⽤户使⽤量进⾏中位数划分,如果⼤于中位数是⾼频⽤户,低于中位 数是低频⽤户。 (2)游戏主要市场: 对北美、欧洲、⽇本,其它销售额进⾏⽐较判断,取最⼤的销售额作为主要市场,并以最⼤销售额的市场作为主要市 场。 3. 哪些属性值需要补充缺失值 其中缺失值不需要进⾏补充,由于数据的业务背景了解不够,仅只对数据中的缺失值进⾏删除。 4. 并将数据集分为"训练""测试""验证(如果必要的话)"三个⼦集。 数据训练集和测试集划分标准以0.8和0.2进⾏随机抽样,保证数据的⽆序抽取。划分代码如下: 其中处理数据的⽅法有随机森林,决策树、逻辑斯蒂回归, 模型精确度⽤AUC进⾏衡量,得到混淆矩阵,得出召回率,对⽐进⾏分析发现决策树模型效果较好。 使⽤测试集数据对综合预测模型,评估精确度、召回率。 模型的优化⽅法主要可在以下⼏个⽅⾯进⾏: 1. 获取更多的游戏指标数据 2. 对游戏数据的训练集样本增加,保证模型的训练精度 glm.full=glm(High_frequency_usage~.,family=binomial(link="logit"),data_train) glm.null=glm(High_frequency_usage~1,family=binomial(link="logit"),data_train) summary(glm.full) glm.aic=step(glm.full,trace=F,test="LRT") summary(glm.aic) glm.bic=

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值