0. 缺乏数据(Lack Data)
对于分类问题或预估问题来说,常常缺乏准确标注的案例。
例如:
-欺诈侦测(Fraud Detection):在上百万的交易中,可能只有屈指可数的欺诈交易,还有很多的欺诈交易没有被正确标注出来,这就需要在建模前花费大量人力来修正。
-信用评分(Credit Scoring):需要对潜在的高风险客户进行长期跟踪(比如两年),从而积累足够的评分样本。
1. 太关注训练(Focus on Training)
IDMer:就象体育训练中越来越注重实战训练,因为单纯的封闭式训练常常会训练时状态神勇,比赛时一塌糊涂。
实际上,只有样本外数据上的模型评分结果才真正有用!(否则的话,直接用参照表好了!)
例如:
-癌症检测(Cancer detection):MD Anderson的医生和研究人员(1993)使用神经网络来进行癌症检测,惊奇地发现,训练时间越长(从几天延长至数周),对训练集的性能改善非常轻微,但在测试集上的性能却明显下降。
-机器学习或计算机科学研究者常常试图让模型在已知数据上表现最优,这样做的结果通常会导致过度拟合(overfit)。
解决方法:
解决这个问题的典型方法是重抽样(Re-Sampling)。重抽样技术包括:bootstrap、cross-validation、jackknife、leave-one-out...等等。
2. 只依赖一项技术(Rely on One Technique)
IDMer:这个错误和第10种错误有相通之处,请同时参照其解决方法。没有对比也就没有所谓的好坏,辩证法的思想在此体现无遗。
“当小孩子手拿一把锤子时,整个世界看起来就是一枚钉子。”要想让工作尽善尽美,就需要一套完整的工具箱。
不要简单地信赖你用单个方法分析的结果,至少要和传统方法(比如线性回归或线性判别分析)做个比较。
研究结果:按照《神经网络》期刊的统计,在过去3年来,只有1/6的文章中做到了上述两点。也就是说,在独立于训练样本之外的测试集上进行了开集测试,并与其它广泛采用的方法进行了对比。
解决方法:
使用一系列好的工具和方法。(每种工具或方法可能最多带来5%~10%的改进)。
3. 提错了问题(Ask the Wrong Question)
IDMer:一般在分类算法中都会给出分类精度作为衡量模型好坏的标准,但在实际项目中我们却几乎不看这个指标。为什么?因为那不是我们关注的目标。
a)项目的目标:一定要锁定正确的目标
例如:
欺诈侦测(关注的是正例!)(Shannon实验室在国际长途电话上的分析):不要试图在一般的通话中把欺诈和非欺诈行为分类出来,重点应放在如何描述正常通话的特征,然后据此发现异常通话行为。
b)模型的目标:让计算机去做你希望它做的事
大多数研究人员会沉迷于模型的收敛性来尽量降低误差,这样让他们可以获得数学上的美感。但更应该让计算机做的事情应该是如何改善业务,而不是仅仅侧重模型计算上的精度。
4. 只靠数据来说话(Listen (only) to the Data)
IDMer:“让数据说话”没有错,关键是还要记得另一句话:兼听则明,偏听则暗!如果数据+工具就可以解决问题的话,还要人做什么呢?
4a.投机取巧的数据:数据本身只能帮助分析人员找到什么是显著的结果,但它并不能告诉你结果是对还是错。
4b.经过设计的实验:某些实验设计中掺杂了人为的成分,这样的实验结果也常常不可信。
5. 使用了未来的信息(Accept Leaks from the Future)
IDMer:看似不可能,却是实际中很容易犯的错误,特别是你面对成千上万个变量的时候。认真、仔细、有条理是数据挖掘人员的基本要求。
预报(Forecast)示例:预报芝加哥银行在某天的利率,使用神经网络建模,模型的准确率达到95%。但在模型中却使用了该天的利率作为输入变量。
金融业中的预报示例:使用3日的移动平均来预报,但却把移动平均的中点设在今天。
解决方法:
要仔细查看那些让结果表现得异常好的变量,这些变量有可能是不应该使用,或者不应该直接使用的。
给数据加上时间戳,避免被误用。
6. 抛弃了不该忽略的案例(Discount Pesky Cases)
IDMer:到底是“宁为鸡头,不为凤尾”,还是“大隐隐于市,小隐隐于野”?不同的人生态度可以有同样精彩的人生,不同的数据也可能蕴含同样重要的价值。
异常值可能会导致错误的结果(比如价格中的小数点标错了),但也可能是问题的答案(比如臭氧洞)。所以需要仔细检查这些异常。
研究中最让激动的话语不是“啊哈!”,而是“这就有点奇怪了……”
数据中的不一致性有可能会是解决问题的线索,深挖下去也许可以解决一个大的业务问题。
例如:
在直邮营销中,在对家庭地址的合并和清洗过程中发现的数据不一致,反而可能是新的营销机会。
解决方法:
可视化可以帮助你分析大量的假设是否成立。
7. 轻信预测(Extrapolate)
IDMer:依然是辩证法中的观点,事物都是不断发展变化的。
人们常常在经验不多的时候轻易得出一些结论。
即便发现了一些反例,人们也不太愿意放弃原先的想法。
维度咒语:在低维度上的直觉,放在高维度空间中,常常是毫无意义的。
解决方法:
进化论。没有正确的结论,只有越来越准确的结论。
8. 试图回答所有问题(Answer Every Inquiry)
IDMer:有点像我爬山时鼓励自己的一句话“我不知道什么时候能登上山峰,但我知道爬一步就离终点近一步。”
“不知道”是一种有意义的模型结果。
模型也许无法100%准确回答问题,但至少可以帮我们估计出现某种结果的可能性。
9. 随便地进行抽样(Sample Casually)
9a 降低抽样水平。例如,MD直邮公司进行响应预测分析,但发现数据集中的不响应客户占比太高(总共一百万直邮客户,其中超过99%的人未对营销做出响应)。于是建模人员做了如下抽样:把所有响应者放入样本集,然后在所有不响应者中进行系统抽样,即每隔10人抽一个放入样本集,直到样本集达到10万人。但模型居然得出如下规则:凡是居住在Ketchikan、Wrangell和Ward Cove Alaska的人都会响应营销。这显然是有问题的结论。(问题就出在这种抽样方法上,因为原始数据集已经按照邮政编码排序,上面这三个地区中不响应者未能被抽取到样本集中,故此得出了这种结论)。
解决方法:“喝前摇一摇!”先打乱原始数据集中的顺序,从而保证抽样的随机性。
9b 提高抽样水平。例如,在信用评分中,因为违约客户的占比一般都非常低,所以在建模时常常会人为调高违约客户的占比(比如把这些违约客户的权重提高5倍)。建模中发现,随着模型越来越复杂,判别违约客户的准确率也越来越高,但对正常客户的误判率也随之升高。(问题出在数据集的划分上。在把原始数据集划分为训练集和测试集时,原始数据集中违约客户的权重已经被提高过了)
解决方法:先进行数据集划分,然后再提高训练集中违约客户的权重。
10. 太相信最佳模型(Believe the Best Model)
IDMer:还是那句老话-“没有最好,只有更好!”
可解释性并不一定总是必要的。看起来并不完全正确或者可以解释的模型,有时也会有用。
“最佳”模型中使用的一些变量,会分散人们太多的注意力。(不可解释性有时也是一个优点)
一般来说,很多变量看起来彼此都很相似,而最佳模型的结构看上去也千差万别,无迹可循。但需注意的是,结构上相似并不意味着功能上也相似。
解决方法:把多个模型集装起来可能会带来更好更稳定的结果。
数据挖掘最重要的要素是分析人员的相关业务知识和思维模式。丰富的业务知识是设计有效的相关变量的必要条件,而分析人员的思维模式从另外一个方面也保障了设计变量的结构化和完整性。所以我们在掌握丰富的业务知识同时,如果能够按照正确的思维模式去思考问题,将会发现解决问题并不是很困难的。
1、分类问题
- 给你一个客户的相关信息,预测一下他未来一段时间是否会离网?
- 信用度是好/一般/差?是否会使用你的某个产品?
- 将来会成为你的高/中/低价值的客户?
- 是否会响应你的某个促销活动?
- ……
2、聚类问题
- 首先确定选择哪些指标对用户进行聚类;
- 然后在选择的指标上计算用户彼此间的距离,距离的计算公式很多,最常用的就是直线距离(把选择的指标当作维度、用户在每个指标下都有相应的取值,可以看作多维空间中的一个点,用户彼此间的距离就可理解为两者之间的直线距离);
- 最后聚类方法把彼此距离比较短的用户聚为一类,类与类之间的距离相对比较长。
3、关联问题
- 一群用户购买了很多产品之后,哪些产品同时购买的几率比较高?
- 买了A产品的同时买哪个产品的几率比较高?
- 支持度:指的是关联的产品(假定A产品和B产品关联)同时购买的人数占总人数的比例,即800/10000=8%,有8%的用户同时购买了A和B两个产品;
- 可信度:指的是在购买了一个产品之后购买另外一个产品的可能性,例如购买了A产品之后购买B产品的可信度=800/1000=80%,即80%的用户在购买了A产品之后会购买B产品;
- 提升度:就是在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比,没有任何条件下购买B产品可能性=2000/10000=20%,那么提升度=80%/20%=4。
4、预测问题
数据分析也好,统计分析也好,数据挖掘也好、商业智能也好都需要在学习的时候掌握各种分析手段和技能,特别是要掌握分析软件工具!我曾经说过,沈老师的学习方法,一般是先学软件开始,再去应用,再学会理论和原理,因为是老师,再去教给别人!没有软件的方法就不去学了,因为学了也不能做,除非你自己会编程序。
第一维度:数据存储层——>数据报表层——>数据分析层——>数据展现层
第二维度:用户级——>部门级——>企业级——>BI级
首先,存储层:
- Access2003、Access07等:这是最基本的个人数据库,经常用于个人或部分基本的数据存储;
- MySQL数据库,这个对于部门级或者互联网的数据库应用是必要的,这个时候关键掌握数据库的库结构和SQL语言的数据查询能力;
- SQL Server 2005或更高版本,对中小企业,一些大型企业也可以采用SQL Server数据库,其实这个时候本身除了数据存储,也包括了数据报表和数据分析了,甚至数据挖掘工具都在其中了;
- DB2,Oracle数据库都是大型数据库了,主要是企业级,特别是大型企业或者对数据海量存储需求的就是必须的了,一般大型数据库公司都提供非常好的数据整合应用平台;
- BI级,实际上这个不是数据库,而是建立在前面数据库基础上的,这个主要是数据库的企业应用级了,一般这个时候的数据库都叫数据仓库了,Data Warehouse,建立在DW级上的数据存储基本上都是商业智能平台,或许整合了各种数据分析,报表、分析和展现!
第二:报表层
- Crystal Report水晶报表,Bill报表,这都是全球最流行的报表工具,非常规范的报表设计思想,早期商业智能其实大部分人的理解就是报表系统,不借助IT技术人员就可以获取企业各种信息——报表。而且很多数据库内置的报表也是采用CR报表的开发版嵌入的!
- Tableau软件,这个软件是近年来非常棒的一个软件,当然它已经不是单纯的数据报表软件了,而是更为可视化的数据分析软件,因为我经常用它来从数据库中进行报表和可视化分析,先暂列在报表层;
第三:数据分析层
- Excel软件,首先版本越高越好用这是肯定的;当然对Excel来讲很多人只是掌握了5%Excel功能,Excel功能非常强大,甚至可以完成所有的统计分析工作!但是我也常说,有能力把Excel玩成统计工具不如专门学会统计软件;
- SPSS软件:当前版本是18,名字也改成了PASW Statistics;我从3.0开始Dos环境下编程分析,到现在版本的变迁也可以看出SPSS社会科学统计软件包的变化,从重视医学、化学等开始越来越重视商业分析,现在已经成为了预测分析软件。
- Clementine软件:当前版本13.0,数据挖掘工具,我从6.0开始用,到了13版,已经越来越多的提高了更多有好的建模工具,现在改名叫PASW Modeler 13建模器了。而且与SPSS统计功能有了更多的整合,数据处理也更加灵活和好用。
- SAS软件:SAS相对SPSS其实功能更强大,SAS是平台化的,EM挖掘模块平台整合,相对来讲,SAS比较难学些,但如果掌握了SAS会更有价值,比如离散选择模型,抽样问题,正交实验设计等还是SAS比较好用,另外,SAS的学习材料比较多,也公开,会有收获的!
当然,我主要是采用SPSS和Clementine,有时候就是习惯,当然会了一种软件在学其他的也不是很困难!
- JMP分析:SAS的一个分析分支
- XLstat:Excel的插件,可以完成大部分SPSS统计分析功能
- Ucinet社会网分析软件:SNA社会网络分析是非常流行和有价值的分析工具和方法,特别是从关系角度进行分析社会网络,关系分析非常重要,过去我们都是属性数据分析
第四:表现层
- PowerPoint软件:这个没得说了,大部分人都是用PPT写报告;
- Visio、SmartDraw软件:这些都是非常好用的流程图、营销图表、地图等,而且从这里可以得到很多零件;
- Swiff Chart软件:制作图表的软件,生成的是Flash;
- Color Wheel软件:配色软件
- Yed软件:网络关系图、流程图和图形分析软件,类似SNA分析,我经常用来设计流程图,还有就是分析优化关系图;
- Netdraw软件:这是社会网络分析展现软件,主要是可视化网络关系图的,读取Ucinet软件;
- Mindmanager软件:思维导图,非常好的软件,可以把非线性思维很快构建起来,并且项目组织管理、报告设计构想都可以应用,直接生成PPT等,当然这个软件功能非常强大,我的学生都用它来做笔记和会议记录;
- Xcelsius软件:Dashboard制作和数据可视化报表工具,可以直接读取数据库,在Excel里建模,互联网展现,最大特色还是可以在PPT中实现动态报表;这个是我最希望应用的一个软件工具,非常有价值!
- AMOS软件:结构方程式模型SEM,实证研究和理论模型的重要分析工具,从事学术研究的人,特别是社会科学工作者应该掌握;
- Lisrel软件:结构方程式模型SEM,同上!
- HLM软件:分层线性模型;
很多朋友问沈老师,我是学统计分析的,为什么我还是不知道如何应用呢?
问题:沈浩老师,我有些问题想跟您请教一下,我现在从事的工作是互联网行业数据分析工作,我以前学的专业是统计学,但是工作中有很多多元统计方法并没有应用,虽然学了很多方法,但是在实际中还是有点不知道如何运用?我应该从哪些方面着手?请指教!谢谢!
沈浩老师:
沈浩的回答:
- 数量统计知识方面:我认为统计思想是数学在实践中最重要的体现,但对于实际工作者最重要的是掌握统计思想,其实统计理论非常复杂,但实际应用往往是比较简单的!比如,很多人都在大学学了假设检验,但实际应用中假设就是看P值是否小于0.05,但是H0是什么?拒绝还是接受的是什么现实问题;要理解!
- 掌握软件问题:从软件角度学,是非常好的思路,我基本上就是这样学的。我常说编软件的人最懂理论,否则编不出来,编软件的人最知道应用,否则软件买不出去;现在软件越来越友好,把软件自带案例做一遍,你会自觉不自觉的掌握软件解决问题的思路和能解决的问题类型;
- 数据仓库问题:OLAP和数据挖掘是数据仓库建立基础上的两个增值应用,从企业整体角度,数据挖掘应该建立在企业数据仓库完备的基础上。所以说数据仓库是针对企业级数据挖掘应用提出的,但我们应该记住,企业从来不是为了数据挖掘建立数据仓库,而是因为有了数据仓库后必然会提出数据挖掘的需求!现在随着数据挖掘软件的工具智能化,以及数据仓库和ETL工具的接口友好,对数据库层面的要求越来越少;
- 数学不好可能反应了一个人思考问题的方式或深入理解问题的能力,但数学不是工具是脑具,不断解决问题的过程可以让我们思考问题更数学化!
- 不急,一步一步来!先把本职工作中的数据分析问题理解了,干好了!
- 熟练玩好Excel软件工具,这个可以看《Excel高级应用与数据分析》我写的书,当然有很多Excel论坛和网站,从我的博客就可以连接到。
- 学习好统计分析方法,我不是单指统计原理,而是统计分析方法,比如回归分析,因子分析等,不断进入统计分析解决问题的思考方式;这个可以看看SPSS软件方面的书和数据案例,通过软件学习解决数据分析的统计问题,这方面的书很多,当然你也可以关注我的博客,不断增加统计分析方法解决数据分析问题的思路,自己对照着完成!
- 在上述问题有了比较好的理解后,也就是你应该算是一个数据分析能手的时候,开始进入数据挖掘领域,你会发现用数据挖掘思想解决问题具有智能化、自动化的优势,接下来,你需要考虑数据建模的过程,通过学习Clementine软件或SAS的挖掘工具,不断理解数据挖掘与原来的数据分析工具有什么不同或优势!
- 当前面都是了解并且能够得心应手后,你就要有针对性的掌握你工作所在行业的问题,例如:电信行业的解决方案问题:客户流失、客户价值、客户离网、客户保持、客户响应、客户交叉销售等商业模型,同时与数据分析和数据挖掘统一在一起的解决方案!
- 接下来,你应该掌握数据库的一些原理和操作,特别是SQL语言的方式
- 你到了这个阶段,就应该有全面解决问题的能力,比如挖掘出来的知识或商业规则如何推送到营销平台上等等
- 梳理自己的知识结构,不仅会操作,现在你应该成为专家了,要能够宣扬你的知识能力和领导力,当然也要表明你在数据挖掘领域的专业特长
- 要经常帮助同事和行业朋友,比如帮助解决数据分析问题,帮助咨询,甚至给大家讲课,这对你的知识梳理和能力的提高非常重要,你的自信心会更强!
- 有兴趣,可以建立一个博客或什么,不断写点东西,经常思考和总结
- 结交广泛的朋友!
- 互联网,其实不用买什么书网络基本都有;要有好的搜索能力,当然包括搜各种软件!
- SPSS和Clementine软件的说明和案例,都做一遍;
- 《数据挖掘——客户关系管理的艺术》不错,当当网上查一下
- 《调查研究中的统计分析法》——我和柯老师写的,当当网也有
- 《Excel高级应用与数据分析》——我写的
- 《数据展现的艺术》——我和博易智讯合作
数据挖掘最重要的要素是分析人员的相关业务知识和思维模式。丰富的业务知识是设计有效的相关变量的必要条件,而分析人员的思维模式从另外一个方面也保障了设计变量的结构化和完整性。所以我们在掌握丰富的业务知识同时,如果能够按照正确的思维模式去思考问题,将会发现解决问题并不是很困难的。
1、分类问题
- 给你一个客户的相关信息,预测一下他未来一段时间是否会离网?
- 信用度是好/一般/差?是否会使用你的某个产品?
- 将来会成为你的高/中/低价值的客户?
- 是否会响应你的某个促销活动?
- ……
2、聚类问题
- 首先确定选择哪些指标对用户进行聚类;
- 然后在选择的指标上计算用户彼此间的距离,距离的计算公式很多,最常用的就是直线距离(把选择的指标当作维度、用户在每个指标下都有相应的取值,可以看作多维空间中的一个点,用户彼此间的距离就可理解为两者之间的直线距离);
- 最后聚类方法把彼此距离比较短的用户聚为一类,类与类之间的距离相对比较长。
3、关联问题
- 一群用户购买了很多产品之后,哪些产品同时购买的几率比较高?
- 买了A产品的同时买哪个产品的几率比较高?
- 支持度:指的是关联的产品(假定A产品和B产品关联)同时购买的人数占总人数的比例,即800/10000=8%,有8%的用户同时购买了A和B两个产品;
- 可信度:指的是在购买了一个产品之后购买另外一个产品的可能性,例如购买了A产品之后购买B产品的可信度=800/1000=80%,即80%的用户在购买了A产品之后会购买B产品;
- 提升度:就是在购买A产品这个条件下购买B产品的可能性与没有这个条件下购买B产品的可能性之比,没有任何条件下购买B产品可能性=2000/10000=20%,那么提升度=80%/20%=4。
4、预测问题