Maxdiff系列(六)MaxDiff的数据分析(用Excel进行logit分析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Maxdiff系列(六)MaxDiff的数据分析(用Excel进行logit分析)
最近10年来,Maxdiff在解决多个对象的偏好测量上被应用到越来越多的领域里,但是国内关于Maxdiff数据具体应该如何分析的介绍很少。
尽管本系列曾经就Maxdiff的分析做了一些简单的介绍(参见《Maxdiff系列(五) Maxdiff 的数据分析》),但主要是从频数分析角度出发简单介绍其分析思想。
目前Maxdiff的主流分析模型是逻辑模型(Logit model)的以及基于此模型的分层贝叶斯估算(Hierarchical Bayesian Estimation)方法。
其中Logit model是核心模型。
我们就先从Logit model的分析开始,看看它是如何用来估算Maxdiff 中各个对象的偏好效用值。
至于分层贝叶斯算法,我们会在以后的系列文章中进行介绍。
为什么要使用logit model,这是因为Maxdiff记录的是消费者在面对不同对象集合时的选择(Choice)。
从模型的角度看,消费者的选择是因变量Y,他所面对的对象集合是自变量X。
而消费者的选择(Y)是一个离散型变量(要么选中,要么不选中),而非连续型数据(偏好打分)。
这时,我们的因变量实际上具有一种概率意义,只不过我们收集到的样本数据并不是如同概率那样可以在0-1的区间里任意取值,而是只能为0或1。
更准确地说,对于Maxdiff,我们通常采用的是条件逻辑模型(conditional logit model)。
之所以使用条件逻辑模型,是因为MaxDiff本身的特性:通过观察消费者在给定不同备选对象时的权衡取舍(trade-off),进而估算对象之间的相对偏好程度。
我们还是从一个简单的例子出发来看看具体应该怎样一步步的建模和分析。
假设我们要评测8个对象,每个受访者要做6道MaxDiff的题目(任务),每个题目中出现4个对象,每个任务里出现的对象如下图所示。
现在假设这个受访者在任务1的4个对象中最喜欢3号对象,最不喜欢8号对象。
那么我们收集到的回答数据就是这样。
如果我们把这个受访者在所有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变量:
接下来,我们需要把因变量数据(response)也加上。
考虑到这个受访者在第一个任务中最喜欢3号对象(Item3),因此,我们在上面的数据中增加一列,如果受访者最喜欢第几个概念,那么在相对应行上就是1,否则就是0。
需要注意的是,MaxDiff不仅仅要受访者选择“最喜欢”的对象,还要选择“最不喜欢”的对象。
这时的数据格式如下,可以看到,这里只是简单地把自变量编码中的1变为-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被选为“最喜欢”的概率为:
同理,我们可以依次计算这个任务中所有对象被选为“最喜欢”的概率,如下:
除此之外,我们还需要计算每个对象被选为“最不喜欢”的概率,此时的概率公式就相应变为
因此,对象8被选为“最不喜欢”的概率就是:
同样的,我们把每个对象被选为“最不喜欢”的概率也依次计算出来。
那么,任务1中每个对象被选为“最喜欢”和“最不喜欢”的概率就是:
1
任务2
第3个对象被选为最喜欢
第7个对象被选为最喜欢
第8个对象被选为最不喜欢
第8个对象被选为最不喜欢
到了这一步,我们很自然地会想,刚才随便猜测的4个对象的效用值到底是不是很准确呢?这就需要和受访者的实际选择做对比。
一个最简单的对比原则是,如果根据某一组效用值计算出的“最喜欢”和“最不喜欢”的概率越接近实际选择,那么这组效用值越准确,因为它越能还原消费者的实际选择行为。
这种“完美预测/拟合”如果反映在数据上,就应该是当这组效用值被代入上面的公式后,被选中的对象的概率值(似然度)接近于1。
即下图的效果:
现在回过头来看看我们刚才的猜测结果
我们发现这种猜测(对象8,4,5,3的效用值u分别为0,2,4,8)还不足够好,尽管“最喜欢”的概率拟合得比较接近理想水平(0.9793),但是“最不喜欢”的概率估计值为0.8666,仍然有改善的空间。
当然,仅仅使得一个任务拟合得完美还不够,我们需要每个任务都拟合地很好。
这时我们需要计算每个任务里被选为“最喜欢”和“最不喜欢”的对象的似然度,并且将其求和(或取几何平均),并且通过计算机的计算找到能使其最大的一组效用值。
这就是效用值估算的核心思想。
再说得直白点,这个过程类似于一种优化,我们需要找到能使目标函数(似然度的总和或平均数)最大的一组效用值。
回到我们的例子中,由于采用了dummy coding,我们需要将对象的最后一列移除(事实上可以去除这8列中的任何一列),作为参照水平(原理在《联合分析中不同的编码方式》中有解释)。
然后将前7个对象效用值的初始系数均设置为0(当然也可以随机设置成别的数值),如下图:
使用Excel 进行估算
接下来我们用excel 中的sumproduct 函数,逐行将对象乘以系数,便可以得到一列每个概念的效用值(J 列)。
Sumproduct
函数是将两个数列中对应位置上的数字先依次相乘,然后再求总和的函数。
这是因为我们的自变量已经转化为0-1格式的变量,如果把所有对象的效应值视为一个向量,那么自变量向量和效应值向量相乘就可以得到相对应的对象的效用值。
由于Maxdiff 实际上是仅包含一个因子(属性)的离散选择模型,因此,每个对象的效用值(utility )等价于其自身的效应值(effect )。
所以我们在谈到Maxdiff 时,往往不加区分效用值(u )和效应值(β),因为这二者实际上是一回事。
所以在很多参考书里,我们也通常看到这样描述每个对象被选中的概率
随后我们用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最大化
选择“最大化”
限定最大效用值不超过100
限定全距不超过100
不勾选(系数可以是负数)
由于模型拟合的目标是让自然对数似然度最大化,所以N3是目标单元格,需要估算的是B2到H2中的系数。
然后点击Solve(求解)。
我们很快得到了以下结果:
估算结果
如果我们补上被视为参照水平的第8个对象的效用值0,那么ID=1的受访者在对象1-对象8的效用值就是
可以看到这个受访者最喜欢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对一般的离散选择模型进行分析。
请大家继续关注。