自动化时代的机械工,记KDD2009的获胜者报告

标签: Algorithm 模式识别 | 发表时间:2011-06-29 08:14 | 作者:wentrue zou guangxian
出处:http://www.wentrue.net/blog

正如我常说的,美丽而智能的产品或技术后面,通常隐藏着无数的脏活累活机械活。强如google那样智能直至个性化的技术产品,在那风光无限的PageRank后面,也有大量的人工标注、数据过滤、参数调节,以及与天斗与人斗的anti-spammer工作。

上周重读KDD2009竞赛的获奖者报告,发现其中也不乏这样的情感。

先大致介绍一下KDD2009竞赛的情况。KDD大会是每年数据挖掘与机器学习界的盛会,每次都牛人牛文云集。而每年伴随着大会的到来都会有一次算法竞赛,研究对象通常是某业界公司赞助的一批真实数据,研究问题也就是这些公司在实践中所关心的核心问题。

这里要说的KDD2009竞赛的数据是来自于法国Orange电信公司的客户特征描述数据。其中50000个带标签的训练数据,50000个无标签的测试数据。均有15000个特征变量。参赛者要根据这批数据训练三个分类模型,分别对客户的忠诚度、消费欲和增值服务倾向性作出二元判别。模型评判标准是ROC曲线的覆盖面积(AUC,参看上一篇文章)。竞赛的流程这里略去不讲,有兴趣的可以参看后面的参考文献,反正最后澳大利亚的墨尔本大学拿了两个奖项中的一个。其实现方法说不上多美,只是循规蹈矩地特征选择+有针对性的特征变换+现成的机器学习方法。这也说明在解决现实问题中不一定要刻意追求方法上的创新,对数据的分析理解后的预处理+成熟可用的机器学习模型即可解决大部分的工程问题。

1、特征选择
电信公司提供的特征变量有15000个,但大部分都与最终的分类任务没什么关系,无论出于计算效率还是降低数据噪声的目的,事前做一番特征筛选都是有必要的。

在剔除掉近20%的明显无用的特征后(缺失值过多或取值一样的特征),作者对剩下的特征集中的类别型变量与连续型变量都采用了同样的方法来计算特征的有效性。首先要把连续变量分桶,按每1%的间隔分成一百个离散的桶,这样就可以把连续变量与类别型变量一视同仁地处理了。接下来用单一的一个特征变量去预测目标变量(计算某特征取值或特征桶内正样本的比例,作为这个取值或这个桶对正样本的预测概率),并且可以计算出这个简单分类器的AUC值。根据每个特征的AUC值作一个排序,得到如图1所示的变量AUC值分布图。然后作者根据分布曲线的变化取了前2000个特征,作为后续处理的候选。

图1 忠诚度模型的特征AUC排序

图1 忠诚度模型的特征AUC排序

2、类别型特征的变换
类别特征有时会存在着取值过多的情况,比如5万个样本中某个特征就有超过1万个不同的取值,必然注定了某些特征取值只覆盖了极少数的样本,如果要模型勉强地去拟合这些特殊的情况,必定会导致过拟合的出现。所以有必要对这些取值过多的变量作合并。

作者最初想到的方法是对于那些覆盖样本过多的特征取值,根据它们决定的正样本的数量多还是负样本的数量多而合并为两类,以求达到跟目标输出的最大相关。但这种合并方法在应用到测试集中时非常糟糕,很显然这导致了过拟合的出现。

于是作者接下来用了一种很蛮不讲理的方法,规则为,如果特征的不同取值数超过25个:

  • 保留那些覆盖样本量超过1000的取值
  • 把那些覆盖样本量在500-999之间的那些取值合并为一个新值
  • 把那些覆盖样本量在250-499之间的那些取值合并为一个新值
  • 把那些覆盖样本量在1-249之间的那些取值合并为一个新值

好像作者的意思是说,我只要把取值的数量减少就好了,天知道这样的合并有没有什么特别的含义,反正这么做了之后效果确实好了。

3、分类模型的选择
数据预处理完毕之后,作者没有再造一个分类器的轮子,而是选择了时下流行的boosting+决策树的分类器融合方法,甚至连实现都没有做,直接用了R的gbm包。好吧,这就是我为什么会找到这篇文章的原因。gbm包根据Friedman对boosting思想在统计优化角度的解释(参考文献[2]),做了成熟的实现,在我的PackageRank里面的分值为1.69(排位259)。因为这不是参赛作者的工作,所以报告中没有详细介绍,只是说了一下最后训练的参数。

这个分类器的好处在于可以处理缺失值、连续值、类别数据;它不会受极端数据及非规则连续变量分布的影响;它可以把特征间的相互影响也model进去;还可以处理非线性依赖关系。

根据这个分类器,作者算出了竞赛所需的三个模型,如图2所示。可以看到的是,最后三个模型所使用的特征数量只是在200个左右。Class Weight是为了应对正负样本的不平衡,为了增加正样本在boostrap中被抽中的概率而人为地提高权重。剩下的依次是学习率、树的数量(迭代次数)、每颗树的深度。

图2 模型参数

图2 模型参数

最后,作者不无自豪地告诉我们,他们所有的计算都是在一台2G的windows笔记本上完成的,计算工具是R+SAS。似乎也在揶揄拿了另一个奖项的IBM Research:我们可不需要大集群的计算哦。

你刚才看到的是一个很接近于现实问题的求解过程,漂亮么,我觉得一点都不漂亮,甚至是很枯燥,它没有通常paper中所描述的那么理想与完美,你需要对自己的数据有很深入的了解,如果更比这里深一层,你了解这个样本及特征所代表的现实意义的话,你也许还会用上这个领域的先验知识来指导你的处理。所以,通常的实际问题解决路径是:机械化的又艺术化的工作加上优雅的模型=问题的解决。

参考文献

[1] Predicting customer behaviour: The University of Melbourne’s KDD Cup report

[2] Additive logistic regression: a statistical view of boosting

关于作者
阿稳, 豆瓣, 算法工程师
推荐系统;数据挖掘;算法架构及实现的可扩展性;R环境编程 如果你的问题已经能从我的博客中得到解答,就最好不过了:http://www.wentrue.net/blog/
您可能也喜欢:

分类器评价、混淆矩阵与ROC曲线

序列模式挖掘

[译记]语义网模式:语义技术概论(1)

[译记]语义网模式:语义技术概论(3)

来自无觅网络的相关文章:

KDD Cup2010:教育方面的数据挖掘竞赛 (@resyschina)

[翻译]Is the KDD Cup really music recommendation? (@resyschina)

The Wisdom of the Few (@guwendong)

KDD Cup 2011:Yahoo赞助的音乐推荐 (@resyschina)
无觅

相关 [自动化 时代 机械] 推荐:

自动化时代的机械工,记KDD2009的获胜者报告

- zou guangxian - 不周山
正如我常说的,美丽而智能的产品或技术后面,通常隐藏着无数的脏活累活机械活. 强如google那样智能直至个性化的技术产品,在那风光无限的PageRank后面,也有大量的人工标注、数据过滤、参数调节,以及与天斗与人斗的anti-spammer工作. 上周重读KDD2009竞赛的获奖者报告,发现其中也不乏这样的情感.

罗马尼亚机械工坊酒吧,工业时代一缕温情

- holic536 - 理想生活实验室
酒吧到底是为谁准备的,热爱居酒屋的小资姑娘多半会说是自己,而寻觅炮友的花花公子也觉得那必须是他的天下,不过酒吧,其实是为了给下班回家路上的工人们一点温暖的地方(当然也是掏出他们口袋里一点钞票的地方). 罗马尼亚首都布加勒斯特有这么一所酒吧,使用工业时代的各种元素进行设计打造,将上世纪 50-70 年代的旧机械配件产品混合再利用,最终融合成了一家温馨而愉快的聚会场所,名为 Atelier Mecanic(机械工坊)的这家酒吧,就算是个文科生,也不会觉得看起来头痛啦.

机械昆虫

- Kidwind - 玩意儿
当昆虫的身体里装上精细的手表零件后,是什么样子呢. Mike Libby 为我们诠释了这些,图中就是利用昆虫标本和手表零件结合后的作品,看起来很酷. 本文原始链接:http://www.cngadget.cn/steampunk-insects.html. 再见蒸汽朋克:Steampunk鼠标. 又见蒸汽朋克:Steampunk MP3.

iPhone App自动化测试

- BeerBubble - Taobao QA Team
         无线客户端的发展很快,特别针对是android和ios两款无线操作系统的客户端应用,相应的测试工具也应运而生,这里主要给大家介绍一些针对iPhone App的自动化测试工具.          首先,我们把这些测试框架分为三大类:接口测试工具、注入式UI测试工具、录放式UI测试工具.

Android Robotium自动化测试

- - CSDN博客移动开发推荐文章
1、官方网站下载测试工程demo. 从 http://code.google.com/p/robotium/downloads/detail?name=ExampleTestProject_v3.6.zip 下载官方的Android测试工程demo. 解压后的文件NotePad、NotePadTest、readme.txt.

Android UiAutomator 自动化测试

- - 操作系统 - ITeye博客
一、一个BUG引发的问题.     如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”. 我想,最好的方式应该是自动化测试.     那么,自动化测试可以完成哪些任务呢.     简单的说,那些重复性的测试工作,都可以交给自动化完成:.         1、设置手机的语言.         2、添加、删除、收藏联系人.

Robotium 自动化测试

- - CSDN博客推荐文章
Robotium 自动化测试. Android Studio环境下,在所要测试的Module的build.gradle文件下添加,. Robotium即是对Instrumentation框架方法的封装,所以使用之前需要继承测试类,重写构造器,setUp()和tearDown()方法. 其中继承的是ActivityInstrumentationTestCase2测试类.

机械动物王国

- 歪歪 - 设计|生活|发现新鲜
法国雕塑家Edouard Martinet将各种废旧电器,发动机,打火机,等等各种机上的零部件拆除后,加以想象及组合,打造出这一系列的动物王国. 怎么样,很范儿吧,很punk的味道. 更奇妙的是,为何每一个零部件看上去都是专门打造的一样,这动手动脑能力非同一般. 「设计,生活,发现新鲜」在新浪微博,更即时地获读更新,更直接地交流沟通.

机械微物小秤

- kirby - 专利之家-设计发明与创意商机
我们的生活大都已经被高科技产品环绕,市面上已经很难见到纯机械驱动的工具物事了,就连商店里的秤也大都为电子器械. 而这款可以帮您秤取轻质量物事的小秤,它的简约设计便显得十分可贵. 虽说它只能帮我们量取纸张、茶叶等细微物件的重量,但是精致的做工和巧妙的现代设计,也颇能吸引眼球. 将其收入囊中,即便仅当作饰品使用,效果应该不赖.

机械键盘之舞

- 鵬 - 白板报
作为一个经常需要输入文字的人,我一向认为,电脑最重要的部件就是键盘. 我之所以买了全套苹果设备,起因不过是买了一只配有数字小键盘的 Apple Keyboard,连到了Dell电脑上,从此对苹果的产品欲罢不能. 但是苹果键盘时间用久了,也觉得枯燥,因为这种键盘属于静电电容键盘,触感很轻,没有机械键盘实实在在的触觉和大珠小珠落玉盘的击键声.