注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

周庭锐教授的私人空间

你的心,创造你周围真实的世界。

 
 
 

日志

 
 
关于我

周庭锐,汉族,台湾籍。中国人民大学商学院营销系教授、博导。英国Warwick大学商学博士。详细履历请移步:http://www.yes-china.org/chou/。email:tingjui.chou@gmail.com

网易考拉推荐

[笔记] 潜类别模型  

2011-02-07 16:23:25|  分类: 营销精义 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
文/周庭锐

今天复习潜类别模型的一些文献,在这里做点小笔记,顺便作为这个学期要开的那门“消费者离散选择模型”的补充材料。

潜类别模型(Latent Class Models)或称受限混合模型(Finite Mixture Models),是晚近在统计方法里最重要的发展方向之一。这些新方法与传统统计模型的最大区别在于它打破了一些在多元统计中惯常依赖的,但是在现实生活中很难获得满足的假定条件,例如线性关系、正态分布、同质样本等等,因此对于那些违背模型统计分布假定的数据,我们依然可以很方便地对其进行统计分析,而不用担心数据与模型发生冲突所导致的统计错误。此外,潜类别模型还可以在同一个分析中同时包容连续型与离散型两类变量,如此我们终于可以摒弃过去在统计上常用那种先聚类再分析的两段式统计方法,而可以将连续与离散变量熔冶一于炉,毕其功于一役,一次性地解决分析问题,从而避免了从连续型变量转换为离散型变量的过程中导致的信息流失。潜类别模型的用途主要有三个方向:(1)潜类别聚类模型,(2)潜类别因子模型,与(3)潜类别回归模型。

潜类别聚类模型(Latent Class Cluster Models)

这种聚类分析的最大特色是依照样本间相关联的概率(membership probabilities)来作为分群的依据,而不是传统上的通过计算样本距离(distance)来看看样本与样本之间究竟靠得多近。这样的好处是直接解决了分群变量的统计分布问题,可以同时将不同分布形态的变量放在一起对样本进行聚类,而不用担心变量分布形态不同所导致的距离差距。换句话说,这么做的最大优点是可以直接将消费者的行为变量放进模型里来进行聚类分析,而不必受限于消费者轮廓的描绘性资料,因此那些通过机器采集的POS端或RFID端数据就全可以派上用场了。这些变量的分布形态可以无所不包,例如各种不同分布的连续型变量、名目尺度、顺序尺度、频次、以及这些变量的任意各种组合。使用这个方法的分群结果就是潜类别(latent class),每个潜类别都代表了一个隐藏的聚类(hidden cluster),因此又有学者将这个方法称为潜判别分析(latent discriminant
analysis)。

在营销上,这个方法的用途极广。比如我们可以利用潜类别聚类分析来对我们的顾客进行分群,从而实现市场细分。有个研究针对银行客户的账户资料进行分析,在分析中研究者将所有的账户资料一起放进模型里面来,拟合了数个模型后,利用BIC(Bayesian Information Criterion)进行模型选择。分析结果得到四群客户群:(1)价值追寻者(Value Seekers),占总客户数的15%,他们年纪最轻、开始使用这个银行服务的时间最短;(2)保守的储蓄者(Conservative Savers),占总客户数的35%,他们年纪最老;(3)主流客户(Mainstreamers),占总客户数的40%;(4)投资者(Investors),仅占总客户数的10%,但是却占了整个银行30%的总存款,所以是最重要的客户群。分群的结果同时显示第(4)群客户对银行的满意度是最低的,于是我们很快就看见了银行的潜在危机,以及银行的救亡图存之道:针对这人数比例最小的客户进行满意度提升。后续的研究利用这里的分群结果对客户不满意的成因进行了进一步的数据搜集与分析,银行很快就找出了对客户满意的改善方法。

潜类别因子模型(Latent Class Factor Models)

因子分析就是去寻找变量背后的误差共性,然后将具有相同误差来源的变量集合起来,共同构造成因子,来概括简化这些变量的数量。与潜类别聚类分析一样,潜类别因子分析的最大优点就是可以同时将不同分布形态的变量放在一起进行分析,然后将具有误差共性的变量整合起来构成因子。此外,潜类别因子分析的计算过程并不需转轴,因此避免了因为选择转轴方法所隐含的主观性;同时潜类别因子分析还可以导入离散型的变量作为协方差(covariance),可以更精细地观察因子的特征。最后,这个方法还可以容许变量的残差之间存在相关,研究者不用担心模型中可能存在的“未观察到的共同因子(unobserved common factors)”问题。过去研究已经证实使用这个方法的分析结果远胜于传统的因子分析方法。

有个研究针对通过AIO(Activities, Interests, and Opinions)问卷所搜集的生活形态数据(life-style data)进行了因子分析,充分展现了潜类别因子分析的强大威力(如图)。图中的两个维度是尚未命名的因子,其中的坐标符号是样本的各种不同的兴趣嗜好,这些坐标符号的相对位置表达出了两个因子的意义。重点有二:首先是这些兴趣嗜好的衡量方式都是离散的形式;其次,注意到其中的年龄层,不仅是离散形式的衡量,而且还以协方差的形式进入模型之中,很清晰地呈现了不同年龄层对样本生活形态的干扰作用。

[笔记] 潜类别模型 - 周庭锐 - 周庭锐教授的私人空间
 

潜类别回归模型(Latent Class Regression Models)

与传统的回归模型类似,通过一个或一群自变量来估计一个因变量,但是多了一个 R类潜变量(R-category latent variable),这个潜变量中的每个类别分别都代表一群同质的母体(例如细分的市场)。这么做的优点是松弛了传统回归分析中同质性母体的假定(R = 1),允许研究者在一个研究中同时分析几群不同类型的母体(R > 1)。在 R > 1 的情形下,潜类别回归模型还能够提供有效的拟合检验指标,来协助判断 R 的大小,并通过导入协方差的方式,来提高正确分群的效力。与前述潜类别聚类与因子分析一样,潜类别回归中的自变量与因变量的分布形态都获得解放了,尤其是在因变量的部分。在传统的回归分析中,因变量的假定条件是;(1)连续型变量,且其估计残差的分布服从正态分布,(2)样本来自同一个母体。但是潜类别回归模型取消了这些限制,模型中的因变量可以是连续型、离散型(包括二项式分布、有顺序多项式分布、无顺序多项式分布等)、频次、甚至泊松分布等等。样本也可以来自不同母体,所以没有同质性母体的需求。这样的特性,大大的强化了回归分析的应用范围。不过这个方法也有个缺点,那就是不保证在ML(maximum likelihood)估计过程一定可以收敛得解。

具有这些特性的潜类别回归模型自然在营销研究上威力无穷。首先它可以作为样本分群工具,但是这分群是基于因变量的不同反应而分群,而不单单依照自变量的差异。换句话说,这是对样本行为之后动态结果的分群,而不是事前针对静态属性的分群,这样的分群效果,肯定比传统方法要更加贴近实践上的需求。其次,它可以很有效的处理联合分析(conjoint analysis)的问题。联合分析通常用在新产品导入前调试配方或设定产品属性的过程里,受试者必须针对不同的属性组合回答偏好,所以这种模型的因变量是重复反应的变量,而自变量一般是离散型变量(大中小、定价高低、不同颜色、味道、顾客性别、年龄层等等),应用潜类别回归模型正好合适。当然,最普遍的用途是一般的回归分析,但是自变量与因变量都不受分布形态的限制。

计算潜类别模型的工具

一般的统计分析软件并不提供计算潜类别模型的方法,学术圈里最广为接受的工具是由 Magidson 与 Vermunt 所开发的商业软件 Latent Gold。不过如果愿意花点时间学点简单的统计编程,事实上统计软件 R 里面已经提供了相当完善的工具,可以轻易解决潜类别模型的计算问题。这里以 Friedrich Leisch 所发展的 FlexMix 为例,说明潜类别回归模型的计算方法。

先安装 FlexMix。在联网环境,菜单 --> 程序包 --> 安装程序包 --> 选择 FlexMix,系统会连带安装相依模块:mvtnorm、modeltools、与multc。

载入 FlexMix:
R> library("flexmix")

在这里利用一下程序包里缺省植入的数据作为练习数据:
R> data("NPreg")
R> NPreg
             x         yn yp yb class id1 id2
1   4.17663259 22.3803787  4  0     1   1   1
2   1.20163055  5.1115746  3  0     1   1   1
3   2.29500635 13.2510576  9  0     1   2   1
4   5.96586786 30.2852404  3  1     1   2   1
5   2.35808338 14.7645078  4  0     1   3   2
.....

R> summary(NPreg)
       x                 yn               yp               yb            class          id1           id2     
 Min.   :0.06295   Min.   :-1.482   Min.   : 0.000   Min.   :0.000   Min.   :1.0   1      :  2   1      :  4  
 1st Qu.:2.67892   1st Qu.:20.489   1st Qu.: 2.000   1st Qu.:0.000   1st Qu.:1.0   2      :  2   2      :  4  
 Median :5.07820   Median :30.933   Median : 4.000   Median :0.000   Median :1.5   3      :  2   3      :  4  
 Mean   :5.03078   Mean   :28.607   Mean   : 3.955   Mean   :0.475   Mean   :1.5   4      :  2   4      :  4  
 3rd Qu.:7.37686   3rd Qu.:38.322   3rd Qu.: 5.000   3rd Qu.:1.000   3rd Qu.:2.0   5      :  2   5      :  4  
 Max.   :9.89474   Max.   :53.487   Max.   :12.000   Max.   :1.000   Max.   :2.0   6      :  2   6      :  4  
                                                                                   (Other):188   (Other):176 

其中x和yn都是连续型衡量;yp是介于0到12之间的离散型变量;yb只包含0与1;class只包含1与2,代表两群不同样本(也就是潜类别,R=2),样本数各100个;id1与id2都是具有重复值的离散数值(想象一下重复消费的顾客ID)。

其实这组数据是通过下列两个函数造出来的,而且各造了100个样本,所以其中的 y 代表的是对不同 x 组合的行为反应,我们要通过这个例子来表现前面所说,利用潜类别回归模型对样本行为之后的动态结果进行分群。

数据模型一(class=1): y = 5x + e
数据模型二(class=2): y = 15 + 10x ? x^2 + e

我们在这个已知事实的基础上,来看看 FlexMix 是不是能够清晰地将这两组样本数据辨别出来。我们在这里先只用到 x 与 yn 两个变量。

在 R 里面,对于类似 y = b0 + b1x1 + b2x^2 的函数处理形式是:
y ~ 1 + x + I(x^2)

由于我们事前知道构造数据模型的形式,所以在这里就直接选择了一元二次的数学函数形式。当然在实践中,我们可能根本不会知道数据的形式,所以只能尝试性的对多种函数形式都做看看,来找出拟合最好的函数形式。

R> m1 <- flexmix(yn ~ x + I(x^2), data = NPreg, k = 2)

结果如下:

R> m1
Call:
flexmix(formula = yn ~ x + I(x^2), data = NPreg, k = 2)
Cluster sizes:
1 2
100 100
convergence after 15 iterations

我们分别检查一下两个模型所估计出来的系数:

R> parameters(m1, component = 1)
Comp.1
coef.(Intercept) -0.20866478
coef.x 4.81612095
coef.I(x^2) 0.03632578
sigma 3.47494722


R> parameters(m1, component = 2)
Comp.2
coef.(Intercept) 14.7175699
coef.x 9.8455831
coef.I(x^2) -0.9682393
sigma 3.4808477

检查分群分得好不好:

R> table(NPreg$class, clusters(m1))
1 2
1 95 5
2 5 95

分得还挺好,一致性大约95%。

进一步检查模型的估计结果:

R> summary(m1)
Call:
flexmix(formula = yn ~ x + I(x^2), data = NPreg, k = 2)
prior size post>0 ratio
Comp.1 0.494 100 145 0.690
Comp.2 0.506 100 141 0.709
'log Lik.' -642.5451 (df=9)
AIC: 1303.090 BIC: 1332.775

Comp. 1
0.0 0.2

R> rm1 <- refit(m1)
R> summary(rm1)
$Comp.1
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.208520 1.009207 -0.2066 0.8363
x 4.814466 0.509610 9.4474 <2e-16 ***
I(x^2) 0.036540 0.049755 0.7344 0.4627
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
$Comp.2
Estimate Std. Error z value Pr(>|z|)
(Intercept) 14.71321 1.32378 11.115 < 2.2e-16 ***
x 9.84831 0.59158 16.647 < 2.2e-16 ***
I(x^2) -0.96852 0.05526 -17.526 < 2.2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

如果因变量是泊松分布也不难处理,数据中的 yp 就服从泊松分布,可以练习一下:

R> m2 <- flexmix(yp ~ x, data = NPreg, k = 2, model = FLXMRglm(family = "poisson"))
R> summary(m2)
Call:
flexmix(formula = yp ~ x, data = NPreg, k = 2, model = FLXMRglm(family = "poisson"))
prior size post>0 ratio
Comp.1 0.532 112 197 0.569
Comp.2 0.468 88 200 0.440
'log Lik.' -440.6424 (df=5)
AIC: 891.2848 BIC: 907.7764

那么,如果我们觉得两个模型都对,反正就是想通过 x 对样本进行“具有反应函数意义”的分群,一样可以轻松办到:

R> m3 = flexmix(~x, data=NPreg, k=2, model=list(FLXMRglm(yn~.+I(x^2)), FLXMRglm(yp~., family="poisson")))
R> summary(m3)
Call:
flexmix(formula = ~x, data = NPreg, k = 2, model = list(FLXMRglm(yn ~ . + I(x^2)), FLXMRglm(yp ~ ., family = "poisson")))
       prior size post>0 ratio
Comp.1 0.493   96    139 0.691
Comp.2 0.507  104    137 0.759
'log Lik.' -1044.768 (df=13)
AIC: 2115.535   BIC: 2158.414 

那么,如果是相同样本的重复行为呢?想象一下POS资料里面的门店消费者购买行为,相同ID的消费者,在不同的日子里进行了一些或同或异的消费行为,我们可以如何分析?

R> m4 <- flexmix(yn ~ x + I(x^2) | id2, data = NPreg, k = 2)
R> summary(m4)
Call:
flexmix(formula = yn ~ x + I(x^2) | id2, data = NPreg,
k = 2)
prior size post>0 ratio
Comp.1 0.5 100 100 1
Comp.2 0.5 100 100 1
'log Lik.' -561.565 (df=9)
AIC: 1141.13 BIC: 1170.815

呵呵,R 在处理潜类别模型上真是威力强大啊!
  评论这张
 
阅读(1507)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017