- 在线时间
- 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>
4 c1 w( v9 O& O) p5 c0 j% r, C </p><p style="LINE-HEIGHT: 150%;"><font color="#000080"><b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">客户分群</span></b></font>
7 t+ D6 m& F, ^* r. k </p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span>2 F) H/ s' t* y7 k$ h- a. Z0 P
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">客户分群是一个重要的商业问题,企业对不同的客户群要提供个性化的客户服务和产品,因此,在产品和服务的设计上,必须要对客户群有一个了解,所以,我们往往借助客户的个人资料,行为属性和消费信息等方面的属性,对客户进行分群,以加深对客户的理解,制定相应的营销策略。</span>2 a8 n% k' F/ a5 V) {7 ?
</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>/ N* i$ T, W' z2 @
</p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span># p, }% E5 B, B+ b# z5 p( Y* V
</p><p style="LINE-HEIGHT: 150%;"><b><font color="#000080"><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">KXEN操作界面</span></font></b>
2 g0 B0 Y- U0 L c4 v1 M </p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>9 z- [4 X' b/ `) \: S+ 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">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>
4 T6 M9 d. z# y5 s) @( K* c </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>
& G# u. f( a$ [ </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US"></span>
5 w V* p) c8 \2 z$ V- h </p><p style="LINE-HEIGHT: 150%;"><font color="#000080"><b><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体;">KXEN建模流程</span></b></font>4 h- m. D5 E( |! [4 l
</p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>
/ m3 y' u/ e2 ~ q4 `$ H% @4 r! J </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>
* h$ ~8 A, Q! k q* R </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>
' y" Z$ }3 ~' h, J; I, ?# \/ w </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>" C D, n$ Y6 Y8 V6 I
</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>
3 D! S2 p& z) z+ E4 v9 ]2 R7 V3 H% n </p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">对结果的解析上,把结果尽可能的转化为对商业用户有意义的解释,这是非常重要的,没有这一点,算法仅仅是算法,数据挖掘也不是商业智能(在某种程度上商业智能就是商业傻瓜,更普遍意义上,白痴和天才也是二位一体)。</span>
4 y' w/ e3 I" s3 R) n* @ </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>* n7 o/ D* |9 h( w8 X7 ?, U, h
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span style="FONT-FAMILY: 宋体;">模型建好之后,可以进行“偏差分析”、“模型应用”和“模拟分析”,这些是很容易理解的,值得注意的是,“模拟分析”是一个不错的工具,可以加深对模型的理解。</span>
. U' C1 I5 {' U% U4 m1 D2 B </p><p style="LINE-HEIGHT: 150%;"><span lang="EN-US"></span>) i$ o1 K6 w/ \! l: l. K; v
</p><p style="TEXT-INDENT: 21.75pt; LINE-HEIGHT: 150%;"><span lang="EN-US"></span>
! _( o$ [$ g' ~5 B </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>
; ]2 Q) N& E: V+ Z- y- F </p><p style="LINE-HEIGHT: 150%;"><b><span lang="EN-US" style="FONT-SIZE: 12pt;"></span></b>
# M: G& i$ P Y' e! ]( U1 ~! q9 X </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>, z* A V) P# j
</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>
8 v& V H7 m) {. A8 w) K) O) B/ J </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>2 u8 B9 P: ^) ^$ `- X0 l2 n" F
</p></div> |
zan
|