- 在线时间
- 0 小时
- 最后登录
- 2007-6-21
- 注册时间
- 2006-6-22
- 听众数
- 3
- 收听数
- 0
- 能力
- 0 分
- 体力
- 78 点
- 威望
- 0 点
- 阅读权限
- 20
- 积分
- 26
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 6
- 主题
- 5
- 精华
- 0
- 分享
- 0
- 好友
- 0
升级   22.11% 该用户从未签到
 |
<h4 class="TextColor1" id="subjcns!A20FD7ACCE991E94!378" style="MARGIN-BOTTOM: 0px;"></h4><div class="bvMsg" id="msgcns!A20FD7ACCE991E94!378"><p align="center" style="LINE-HEIGHT: 150%; TEXT-ALIGN: center;"><span lang="EN-US" style="FONT-SIZE: 14pt;"></span>; H6 b% `( n1 N% R; i a
</p><p style="LINE-HEIGHT: 150%;"><font color="#000080"><b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">客户分群</span></b></font>6 M; f3 ~9 u$ x
</p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span>1 |) H2 e1 y+ r ]- E
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">客户分群是一个重要的商业问题,企业对不同的客户群要提供个性化的客户服务和产品,因此,在产品和服务的设计上,必须要对客户群有一个了解,所以,我们往往借助客户的个人资料,行为属性和消费信息等方面的属性,对客户进行分群,以加深对客户的理解,制定相应的营销策略。</span>
7 t- ?: y K8 ?* Q% _ </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">本文借助</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">来阐述客户分群中存在的一些问题。</span>$ V: _8 A8 p- Z X( t
</p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span>
4 L! s. ~1 l& J1 Y </p><p style="LINE-HEIGHT: 150%;"><b><font color="#000080"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">KXEN操作界面</span></font></b>
* C; g: x u: C. |& \ </p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>: o6 g' |5 O/ A9 F; v! A
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">是一个引擎,所以,它有很好的</span><span lang="EN-US">API</span><span style="FONT-FAMILY: 宋体;">来供集成商使用,除此之外,它也提供两种最终用户的界面:</span><span lang="EN-US">KXEN </span><span style="FONT-FAMILY: 宋体;">建模向导(</span><span lang="EN-US">JNI</span><span style="FONT-FAMILY: 宋体;">),一个用</span><span lang="EN-US">JAVA</span><span style="FONT-FAMILY: 宋体;">做的图形界面,最常用的,本文的工作也是借助这个图形界面;</span><span lang="EN-US">Kxshell</span><span style="FONT-FAMILY: 宋体;">,是运行</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">脚本的命令行界面,这个界面可以作为建模向导的一个补充,因为</span><span lang="EN-US">JNI</span><span style="FONT-FAMILY: 宋体;">的界面并没有提供模型的所有参数设置(譬如,在编码阶段对于连续值的</span><span lang="EN-US">BIN</span><span style="FONT-FAMILY: 宋体;">数目),所以,可以在脚本中来改变这些缺省值,进行模型的进一步优化。</span>/ d7 Y) E! H0 J! k6 i f
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">建模向导是一种“傻瓜式”的操作,只需简单选择参数,然后点击“下一步”即可,这与</span><span lang="EN-US">CLEMENTINE</span><span style="FONT-FAMILY: 宋体;">和</span><span lang="EN-US">SAS/EM</span><span style="FONT-FAMILY: 宋体;">的“拖拉式”方式不同,相比而言,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的操作方式更为简单。</span>* B" b& O! }% d4 ~
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US"></span>' o ^9 O) ~. `4 B+ V1 e4 {
</p><p style="LINE-HEIGHT: 150%;"><font color="#000080"><b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">KXEN建模流程</span></b></font>
/ W4 I \+ m6 X* w( H- _% o; H: ~+ G </p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>
1 Y/ z/ J7 F. z5 R </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">如图</span><span lang="EN-US">1</span><span style="FONT-FAMILY: 宋体;">,选中</span><span lang="EN-US">cluster</span><span style="FONT-FAMILY: 宋体;">后,点击下一步,出现图</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体;">界面,在这里,完成两步工作,一是进行数据集的选择,二是完成数据集的分割方式的选择。</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">支持多种数据格式,如文本,</span><span lang="EN-US">CSV</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">XLS</span><span style="FONT-FAMILY: 宋体;">,也通过</span><span lang="EN-US">ODBC</span><span style="FONT-FAMILY: 宋体;">支持来自不同数据库的数据,同时,对</span><span lang="EN-US">SAS</span><span style="FONT-FAMILY: 宋体;">的数据格式有很好的支持。在建模方式上,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">通过图</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体;">的方式,把初始的数据集按一定的比例分为</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体;">个子集,主要的目的是进行模型的选优以及最后的模型性能汇报。另外值得提及的一点是,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">在建模的时候不用额外的磁盘空间来存储数据,我认为这是一种很好的处理方式。点击下一步后,就是数据的导入界面(图</span><span lang="EN-US">4</span><span style="FONT-FAMILY: 宋体;">),可以进行数据的类型识别,自动识别的过程是有一定的误差的,当进行了正确的定义之后,可以把正确的定义保存为新的数据文件,下次把这数据描述文件(相当于元数据文件)也载入就可以了。在这个界面,还可以打开新的窗口来进行简单的数据探索(略)。</span>
, M, v8 R" x! Y, i- Z </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">下一步是变量的选择界面,这里要说明的是,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">支持两种分群的方法:有监督分群和无监督分群,分群一般来说都是无监督的学习方法,那么,有监督分群是什么意思呢?举个例子,假设要对一些人进行分群,有如下属性:年龄,婚姻,工作状况,当把这些属性放在一起时,压根就没有办法来处理它们之间的关系,机器学习不能识别年龄差别</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体;">岁与婚否的差别哪一个更大一些,也就是说,我们根本没有办法定义一个距离的标准(从这个意义上,把这些属性放在一起而直接丢给计算机去做压根就是错误的,尽管我们经常这样来做),我们必须来定义一个距离的标准,譬如,我们知道这些人有变态和不变态两类,那么,我们就可以把变态与否定义为目标变量(分群的监督变量),这样,依据此变量,对于解释变量就可以做一些预处理,也就是有了一个定义距离的指标,这样才能够做一个正确的分群(可能的结果是年龄差别对于分群没有太大影响,而婚否影响是比较大滴)。这相当于告诉</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">:我要把我的客户群分成几类,请尽量不要把变态的和不变态的混在一起。</span>
+ v2 Y, F$ S5 N) C) p/ Z </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">点击下一步(图</span><span lang="EN-US">6</span><span style="FONT-FAMILY: 宋体;">),就进入了分群参数的设置,只有一个参数,就是群的数目,对于算法的参数设置,我认为最好把参数的名称尽量的用商业语言表述,不要搞出一些数学化的术语,如果实在不能通俗化,就干脆放到“高级”里面,不要放在外面唬人,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的设计做得很好。请注意这里有个选项:“计算</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体;">表达式”,这再次显示了</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的过人之处,其实,最基本的</span><span lang="EN-US">Kmeans</span><span style="FONT-FAMILY: 宋体;">聚类的结果是不能用</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体;">表达式来表述的,但是,</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体;">表达式却增强了结果的解释性,十分符合人们的思维习惯,尽管用</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体;">表达式的表述对于模型的性能打了折扣,但是却十分可取。</span>
4 u/ l3 M' L5 ], I3 P% B! \ </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的运算速度是非常快的,这也是</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">极力宣传的一点(一般得到一个分群模型,加上复杂的预处理,需要几天的时间,而</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">只需几个小时),分群完毕后,就是模型的结果显示,对于模型的结果解析,再次显示了</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的过人之处(图</span><span lang="EN-US">7</span><span style="FONT-FAMILY: 宋体;">)。一般的工具只是把模型应用到新的数据集,得到预测结果,而没有花费精力去进行结果的解析。</span>5 X: ?3 K- ~" }+ q
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">对结果的解析上,把结果尽可能的转化为对商业用户有意义的解释,这是非常重要的,没有这一点,算法仅仅是算法,数据挖掘也不是商业智能(在某种程度上商业智能就是商业傻瓜,更普遍意义上,白痴和天才也是二位一体)。</span>! Y0 V8 ~4 l9 V. V* k
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">对于一个聚类的模型,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的结果中,会有聚类簇谱(</span><span lang="EN-US">cluster profile</span><span style="FONT-FAMILY: 宋体;">)的显示(图</span><span lang="EN-US">8</span><span style="FONT-FAMILY: 宋体;">),我们可以针对每个变量来观察变量在簇内分布与总体分布的差异(还有统计量</span><span lang="EN-US">KL</span><span style="FONT-FAMILY: 宋体;">与</span><span lang="EN-US">Chi square</span><span style="FONT-FAMILY: 宋体;">值),进而了解簇的特征;可以显示簇的</span><span lang="EN-US">SQL</span><span style="FONT-FAMILY: 宋体;">语言描述;训练集,验证集,测试集的偏差等。对于有监督分群,可以有针对目标变量的性能曲线显示(</span><span lang="EN-US">ROC</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">LIFT</span><span style="FONT-FAMILY: 宋体;">等七种曲线),变量的条带重要性显示等,这一块内容是相当细的,也十分有用。</span>& q9 I. v$ O1 V# @, [7 _! k
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">模型建好之后,可以进行“偏差分析”、“模型应用”和“模拟分析”,这些是很容易理解的,值得注意的是,“模拟分析”是一个不错的工具,可以加深对模型的理解。</span>
$ X& a: p. s9 L9 _0 M! u6 c </p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span>( M3 s8 n! r; r( a$ f6 K( P
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US"></span>
! w: G0 V& T$ \" b5 ~; K </p><p style="LINE-HEIGHT: 150%;"><font color="#000080"><b><span lang="EN-US" style="FONT-SIZE: 12pt;">KXEN</span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">的分群算法</span></b></font>/ p. _9 x" U7 r Q7 \
</p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>% l" U: j. R/ A5 n
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的算法没有什么高明的地方,它仍然是沿用最常用的</span><span lang="EN-US">Kmeans</span><span style="FONT-FAMILY: 宋体;">算法;它的高明之处有两点,一是在算法应用之前的编码工作,它帮助用户处理缺失值(</span><span lang="EN-US">Missing</span><span style="FONT-FAMILY: 宋体;">),奇异值</span><span lang="EN-US">(Outliers)</span><span style="FONT-FAMILY: 宋体;">,做</span><span lang="EN-US">BIN</span><span style="FONT-FAMILY: 宋体;">,标准化等,既然</span><span lang="EN-US">Kmeans</span><span style="FONT-FAMILY: 宋体;">算法之前都得进行这样的预处理,那么一个好的工具就应该自动化这些处理过程,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">就做到了这一点,能够做到这些也说明</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的设计者对于算法的深层次的理解。一般来说,预处理的工作占一个模型创建过程的</span><span lang="EN-US">60%</span><span style="FONT-FAMILY: 宋体;">的时间,那么,</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">这样的做法是非常有意义的,省时,并且把这些需要专业统计学知识才能够做的工作用工具来替代了,也减少了人为处理所带来的错误。当然,自动化不是万能的,我们可以做一个模拟来说明</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的缺陷。</span>6 z% V( C) s3 L
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">如图</span><span lang="EN-US">9</span><span style="FONT-FAMILY: 宋体;">的两簇点,在二维空间中很明显的分作两簇,我用</span><span lang="EN-US">R</span><span style="FONT-FAMILY: 宋体;">中的</span><span lang="EN-US">Kmeans</span><span style="FONT-FAMILY: 宋体;">函数,轻易地得到正确的聚类结果,但是,用</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">分群时,却得到了图</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体;">的错误结果,这应该是</span><span lang="EN-US">KXEN</span><span style="FONT-FAMILY: 宋体;">的自动编码(</span><span lang="EN-US">K2C</span><span style="FONT-FAMILY: 宋体;">)惹的祸。</span>. v) Y k: ]. u& W
</p><p style="TEXT-INDENT: 21pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">这再次证明,数据挖掘不是魔术,仅仅是算法而已,借用</span><span lang="EN-US">George E.P. Box</span><span style="FONT-FAMILY: 宋体;">(时间序列方面的权威)的一句话:所有的模型都是错误的,但是有些是有用的(</span><i><span lang="EN-US">All Models Are Wrong But Some Are Useful</span></i><span style="FONT-FAMILY: 宋体;">),所以,万不可过多相信模型。一个好的工具不意味着一定会得到好的结果。“垃圾进,垃圾出”(</span><span lang="EN-US">trash in</span><span style="FONT-FAMILY: 宋体;">,</span><span lang="EN-US">trash out</span><span style="FONT-FAMILY: 宋体;">)永远是对的。要想得到一个好的结果,必须对问题和工具都有好的理解。工具某种程度的自动化,同时也必定会限制它在另外一方面的机能(上帝给你打开一扇窗,同时会关闭一扇门,是这个道理吧)。</span><span lang="EN-US"> </span>
5 l& Z7 E3 K- c% A" X7 @0 h5 a3 g </p></div> |
zan
|