聚类实战之前

  作者:姜玲
2007/5/28 15:49:10
本文关键字: ttnn 2007年02期

作者:hunter 20070201

真的开挖了,向各位请教。 情况是这样的:

有若干条交易记录,某客户于某日购买某产品n件,比如说10,000条记录,涉及30个客户,50种产品。想先做一些描述性分析,以便发现特征,进一步启发需求,首先想得到的就是聚类。

可能需要增加一些变量,比如把产品分成低值,高值

是否要把这些纪录聚合,做成30行(客户数),50列(产品数)的大表,值是其购买某的总量,做个散点图看看,用cluster来聚一聚30个客户?

呵呵,问题愚昧,请指点一下
 
作者:Qing 20070201

谈谈我的看法。

窃以为,首先想到聚类方法来启发需求,这种做法不妥。中国有句古话,"分析方法千万种,聚类分群最无聊"。聚类是依赖输入变量的,变量的选择也是启发性的。因此,在做聚类之前,先做好变量的选择,选择什么变量,还是要尽量搞清楚目标是什么。

这听起来有些循环论证了。需求决定变量,变量影响聚类结果,聚类启发需求。但其实根本还是在需求,也许你会说,搞不清楚到底要为什么做这个聚类,客户没有需求,我们也没有思路。但此时,不妨作个头脑风暴,发挥大家的创意,也比莫名其妙的聚类强。

比如此处看来聚类的目标是要将客户分成几类。这个目标是比较自然的,就像余山老师曾经说过的,"分类是人们最基本的认识事物的手段"。是否可以先通过大脑对现有客户进行分类呢?哪怕就是一些假设也好。

在hunter的题目里面。只能从客户购买产品的行为角度对客户进行分类。那么是否存在有些客户喜欢集中采购,有些是零买而已?有的不在乎价钱,只选贵的不买对的?有的只买便宜货?有的看重牌子,有的看重实用。有的大多买家庭用品,有的买办公用品,有的买体育用品......

看,如果将购买了50种产品当作50个变量输入,去聚类,肯定得不到上面的分类。如果要验证上面的假设,就得现对产品进行归类,而不是客户。将产品的单价分成高中低,产品的质量,是不是品牌货,是什么类型的产品...

然后,还不用去聚类。因为此时确定了几项主要维度,比如同时购买的产品量,产品的价格水平,品牌喜好程度,产品门类,大概也就十个维度样子吧。我这里改称为"维度",其实跟变量的意思差不多。从每个维度都能够对客户进行一些分类的。当然,有时候某个客户不太明显,例如即买了高价货,也买便宜货,没关系,暂且将它归入"不详"当中,还可以通过后面综合分类进行判断。

从一两个维度来观察事物根本就不需要什么聚类方法,通过简单的统计,比如频次分析就能划定类别。如果超出三个维度,人们就很难将事物归类了,此时用聚类的方法是有些用的。但是否购买每种产品当作变量,我认为不必要。那样太细,最后的聚类结果根本无法解读。

上面谈到是如何对客户进行分类的。想说的是先明确目的,大胆作出一些假设,通过这些假设构建主要的变量,并且多做单维度的数据探索,最后只有维度太多了,才进行聚类分群。

然而,我还有个问题存在。

将业务目标定义成"对客户的分类",所以构建以客户为中心一个宽表理所当然,比如hunter提到的30条记录的表。是否还需要从产品的角度来分析,特别是如果这个题目的背景是根本没有客户资料的情况,此时,你能够将客户归入某个类别不能进行后续的个性化营销,通过分析客户还是希望知道自己的市场在哪儿。因此,另一个思路是围绕产品来分析,可以设想有这样一个表,50个产品,50条记录,每个产品的销量,类别、价格、品牌等等,另外还有跟其他同类,或不同类产品同时销售的情况,更细一点,可以作一些"购物篮"分析,看看某个产品跟另外某个产品是不是大多都是同时卖出的,这还能够跟具体营销结合起来。

一点想法,仅供参考。

作者:hunter 20070201

嗬嗬,庆的意思大致明白了,多谢真知灼见。能否再给点背景资料,介绍什么的。还是做描述性分析。

目的和利润有关,明确的需求就是描述,预测销售增长,描述的话岂不是RFM就能做到的事情。。所以才想到,也要聚类一下看看其他特征。。

作者:Qing 20070201

背景资料是什么意思?RFM是什么东东?

我总觉得没有业务目标的描述型模型意义不大,还不如多做些数据探索来的效果好,多看看每个变量的分布情况更有用。

大多数情况下数字是被操纵的,现有观点,也就是假设。比如客户希望想多买一些家电,可能就需要你用数据图表来证明确实值得一卖。OK,如果你得到一组数据,显示家电类产品呈上升趋势,你就可以加上一句解决,销售势头良好,要重点宣传。即使得到了一组数据是下降趋势的,总归能够找到另外一组数据,比如找到其中某个品牌的销售趋势在其他品牌下走的趋势下,他还能保持平稳,因此,你可加上一句结论,"加大宣传,稳中求胜"。

当然,搞数据分析、科学研究的是不齿这种行为的。但真实的情况是,数据分析是为市场、决策服务的,如果数据分析出来一种常规的、大家都知道的统计结果,对决策一点作用没有。得是有趣的,大家不知道的分析结果,当然,这种结果还是被决策者操纵,如果这个结论迎合了他的观点,那么他就采用,哪怕这个结论是没有严格验证的。如果跟他的观点相反,就会让你继续深入分析,直至找到一个跟他的观点相符的。

唉,其实没有客观的数据分析,都是主观导向的,悲哀,真实悲哀。

作者:hunter 20070201

抱歉,表达不准,想说的就是数据探索。

数据探索就只看单变量,2个变量的关系吗?有没有详细一些的流程介绍。

Recency, Frequency, Monetary,就是前计算机时代所用的客户模型,原则是,顾客的最近一次交易时间,交易的频繁程度,交易金额,是判断最好顾客/客户价值的指标。 最近刚买东西的,更常来买,买的更多的,就是更好的顾客

作者:Qing 20070202

RFM是零售行业的客户模型吗?有点意思。

关于数据探索,我不知道有没有成型的方法。但在那些挖掘工具里面,大多都有一些功能支撑数据探索吧。这个领域可能对统计知识要求的多些。在去年11月份,曾经对这个问题有过思考,参见
"数据探索器":http://groups.google.com/group/ttnn/browse_thread/thread/714cf1e6df88a0b9/fc6c004b6aeb65e6

我想主要做的工作包括观察单变量的分布,对这些变量作一些统计描述,两个变量之间的关联,最主要的变量是哪些等等。但这只是最基本的探索,没有目的,如果牵扯到业务目标,就很麻烦,因此这是需要人的业务经验,对哪些探索的结果是敏感的才行。因此,设想的"数据探索器"恐怕只是纯粹的一种数据统计描述、图形化展示的工具。

作者:hunter 20070204

问题之一:
对于时间变量怎么处理呢?类似: 2005-10-1 某客户的购买纪录, 想察看/分析 哪些客户的交易量,交易频率在增长,不能一个一个地用单线条
图看吧,奇怪得很Clementine的 multiplot就不支持日期变量,单线条图就支持。

等我试试excel,发现他的旋转报表很不错,但是pivoTable 和pivoChat report(pivoTable report)区别是什么呢?

问题之二:
通过 select count(产品类别),产品类别,客户名 from table group by 产品类别,客户名,已经得到了每客户各类产品的购买次数纪录,是800行3列的一个表,如何能把这个表变为30行(一共30个客户)6列(产品类别数)的一个表呢?

作者:Qing 20070205

关于问题二,如果是30个客户,6种产品,最多也就180条记录啊,怎么来的800条?

如果要将纵表变成横表,恐怕得用case when语句,或者类似oracle里面decode那种玩意儿了。或者,如果数据量不大的化,可以用excel打开这个表,然后做一个旋转透视表就可以了。

至于第一个问题,如何对时间变量进行处理,没太明白问题,况且什么叫做"时间变量"。

按照文中提到的意思,是观察交易频率的增长,如此是否衍生出来若干变量,诸如"交易频率趋势","交易频率变化幅度","频率增长率"等等。

pivotTable和pivotChat是很明显的区别啊,顾名思义一个是旋转透视表,是表格形式的,一个旋转透视图,是诸如柱图、饼图形式的。透视图是从旋转透视表来。

作者:hunter 20070206

问了dba,搞定

如庆所说,用decode,自己查了,最好的是Access里面的pivot功能,用transform和pivo函数,可以直接旋转结果(没错!就是excel的旋转表功能!)
SQL Server对不起没有,自己用case写去~~

hehe,说错了,问题2的数字有误。

时间变量就是每条交易记录都有时间纪录2006-10-12这样的,就是想看各客户交易频率/每次金额的变动和对比各客户,用excel选不好合适的坐标,目前用得多线条图,把表按客户/时间排好序,每个客户画一条线,但是太多了就看不清楚了。。Clementine好像连这个都画不出来

作者:shiming 20070207

sql server 2005 加入了 pivot 关键词,但仍需要预知列名,一次性的任务建议在前台工具中完成,如reportingservices的matrix,或者excel的功能。

理想的方案是用一列类来做分类,分类的code可以分离出来,再用col1, col2, colN来做select,同时用一个user function (table)来映射colN的真实身份,这样business logic就封装在一个sp 和一个udf 中了~

作者:hunter 20070213

大家聚类时一般都用什么方法呢?

考虑到很多数据库同时含有数值+类型型的数据,最近看书3个不错的算法。

算法1,2007年由台湾人提出:给类型数据用distance hierarchy来衡量其距离(保留了语义semantic,比k-mode/k-prototype只管类型是否相同,要好)。

Mining of mixed data with application to catalog marketing

To express the similarity between categorical values, distance hierarchy has been proposed. Accordingly, the similarity of the categorical part is measured based on entropy weighted by the distances in the hierarchies. A new validity index for evaluating the clustering results has also been proposed.

算法2,由大陆人提出,步骤如下:

1。强行把一个库分为数值属性和类型2个部分;
2。分别用简单高效的算法对数值,类型聚类,这样自然避免了其他折衷(改进)带来的问题
3。再把2头生成的簇合并,考虑到聚类就是一个打标签(类型)的过程,用类型数据聚类的办法来解决之

这种分而治之的思路很强悍!(divide and conquer)
Mining of mixed data with application to catalog marketing  · ARTICLE Expert Systems with Applications, Volume 32, Issue 1, January 2007, Pages 12-23

Clustering Categorical Data:A Cluster Ensemble Approach
<<高技术通讯(英文版) >>2003年04期
Deng Shengchun , Xu Xiaofei , He Zengyou(何增友)Clustering categorical data, an integral part of data mining,has attracted much attention recently. In this paper, the authors formally define the categorical data clustering problem as an optimization problem from the viewpoint of cluster ensemble, and apply cluster ensemble approach for clustering categorical data. Experimental results on real datasets show that better clustering accuracy can be obtained by comparing with existing categorical data clustering algorithms

算法3,希腊人提出,在文献2得引文19,采用同一算法,运行多次,对逐次结果进行合并,并统计对各簇的归属度,再用某种criteria来优化确定簇数(root square之类),效果比起普通的greedy EM算法来,确定的簇数和分簇形状十分准确。

::ttnn::

说话的加速度   @blog

作者:Qing 20070124

人一旦急了,说话的速度就不一样。很多场合都能看到这样的人。嘴巴像放机关枪一样,噼里啪啦说个不停,并且是不给别人插嘴的机会。这个时候,大致可以判定,他急了,恐怕连他自己都不知道自己在说什么。

作演讲的时候,有一条比较重要原则的就是语速要缓慢。作为旁听者明白这点是很容易的。若干次,我陪着同事一起去客户那边,由同事主讲,其实他已经是身经百战了。但经常,还是能够觉得他的语速在不断加快,似乎就要让人喘不过气来。那时,我真想掐他一把,或者是个眼色,可惜当时他也顾不上朝我看。这是没有准备好的征兆,即便很有经验,可一旦思维没有组织好,很可能产生这样的加速度。此后,经常还听到一些位置比较高的人,说话也是有个加速度在里面,那些大多是缺乏锻炼的原因。

当然,我这是说别人,自己去讲的时候,连当时语速是快还是慢早就忘了。也许这就是当局者迷吧。除非有些特别的时候,能够清楚地知道有个加速度,却控制不了。理屈词穷的时候就是如此。可是,按照这个成语,理屈了应该没什么词才是,但相反,一旦人理屈了,反倒是话越来越多,而且越说越快。

有一次,身在外地的同事打电话问我工作上的某件事情的进度,按照计划,我需要提交什么东西,但是没有提交。于是,在电话里,两人打起快板起来。确实,我是理亏,但为了维护自己的立场,不由自主地提出一连串的疑问句,当然,根本也不需要对方回答。每个问句还像冯巩相声里面的那一声"嗯??"加重语气。就在这个过程,其实已经发现了这个加速度。终于喘了口气,停了下来。对方可能有些懵了,嘟嘟哝哝了片刻,估计也是组织起来一些词语,开始反击,同样也是不让我插嘴的。这事儿虽然不是他理亏,但由于我的一连串问题提出后,似乎就变成他理亏了,于是开始用加速度来维护自己的立场。

等双方消停了,恐怕都明白刚才那是一番无益的争论,已经离题十万八千里。放下电话,我还是得按计划办事。

所以现在,我如果看到一个人在茫然地说个不停的时候,基本上就判断他一点思路都没有。因此,如果别人问你一个问题,你没有思路,倒不如干脆一点,说不知道。要是担心不能在别人面前说"不知道"的话,那就多做功课。要是担心多做功课影响生活质量的话,还是选择前者吧。

不过有人能够刻意地避免这种加速度,即便自己不知道,或者理亏的时候,都能够用一种颇为从容地态度和语速对付。如此,你就难以判断了真伪了。

那是高手,是忽悠人的一种境界。不过不要忘了,人掩饰自己的本性也不容易,虽然在客户面前,在陌生人面前能够用一种经过训练的状态呈现自己,但接触了以后自然能够发现,哦,原来他也有急的时候。

在发生说话加速度的场合认识一个人,是能够看的更清楚的。

责编:姜玲
vsharing微信扫一扫实时了解行业动态
portalart微信扫一扫分享本文给好友

著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
畅享
首页
返回
顶部
×
    信息化规划
    IT总包
    供应商选型
    IT监理
    开发维护外包
    评估维权
客服电话
400-698-9918