前言:大数据时代早已经来临,很多年轻人急着闹着想要跻身于大数据行业,不免也有一些不得志的中年人。自然而然的会报各种培训班,理所当然认为付出总有一天会赚回来的。但却走了不少弯路,花了不少钱。倘若在我写的文章中,能有所启发和收获,希望诸位能够以恰当的姿势进入DataMining吧(培训费,换我一碗小面吧)!
画外音:看过身边花1w+大洋报培训班,周末夜里坚持学习的同学;面过硕士、博士甚至留学交换生,但结果总不尽如人意;现如今堪比前端一样浑浊的算法领域,让人担忧。
承认一点,每个人都在进步,每个人都走过弯路,曾几某时,自己也一腔热血的写过一篇文章,后来分享了出来《神爱众人,于是带来Python》。目前来看,那篇文章写得并不好,感兴趣的可以去看看。
- 前不久,给公司同事做算法培训时候,说了自己在算法领域的四点信仰,可以和看官一起分享:
信仰1:不以具体业务场景出发,不考虑大数据并发实现的数据挖掘,都在耍流氓;
信仰2:知其然,晓其所以然,万变不离其宗,必定变化莫测,这正是算法魅力;
信仰3:在DataMining领域,不做两种人。一种是工具人,一种是研究者;
信仰4:拥有健康、丰满的数据,业务场景建模已经成功90%以上了;
- 余下的内容,也将对上面四点分别做阐述,附带案例说明:
学会考虑业务场景建模,多思考大数据并发下的实现:
案例1:一些网络授课,每当提起分类算法,最常用的典型二分类是男性和女性判别?
a.普遍的讲解流程,介绍各种分类算法,DT、LR、NB和SVM等等;
b.接下来,考虑用户一些基础的网站行为数据,平均访问时长、nick、浏览page、每日pv等等;
c.最后,带入数据,套用模型,个别还会考虑清洗数据,一切就Over;
一堂简单网络授课,也许不能面面俱到,但也绝对不能错误的引导DM(数据挖掘)的核心要领。比如:让学习者认为算法是整个数据挖掘的核心?数据挖掘就是随便找到数据套用模型,甚至工具包就OK了?
很多很多不恰当的思想灌输,正是让现如今算法行业鱼龙混杂,我也不是批判者,也不是熬鸡汤人。我会这样简单去介绍,二分类场景下的男性和女性判别:
Step1:Where 在哪个行业下的用户性别判断的场景需求?(比如:电商行业)
Step2:Why 需要去分析用户性别?(现如今,在资金有限的情况下[广告费,站外流量和短信等等],精准化营销的需求越来越强烈,同时用户体验也会是至关重要,如何做到千人千面?如何提高整个平台,或者商家店铺的成交转化率、用户回购率和用户粘度?甚至如何给每个用户展示他所想看到的宝贝详情页?这些的这些,都是需要对用户,乃至店铺、商品和品牌进行画像,构建标签体系,其中就包括用户性别!)
Step3:What 如何去分析用户性别?(在数据挖掘中,特征选取不当,模型构建不当,都会容易引起[欠拟合]和[过拟合],因此在电商行业的用户性别分析,首先明确一个概念区别(用户网站性别和用户线下性别),顾名思义,一个是用户真实性别,一个是用户在网站的行为性别,而真正对我们有意义的,当然是后者。因此,在考虑用户性别分析特征时,核心要素是考虑用户在平台购买过的类目行为(每款商品在设计之初,都会明确目标群体)。
但是,毕竟会存在很多用户是新用户,这也正是模型的冷启动问题。如果你认为算法是最厉害的,到这里,你会无能为力;但如果你够了解业务,了解数据,你会观察到用户的收获姓名(但,注意,经验表明,每一个电商购物用户,都可能会存在多个收货姓名 ? 甚至存在非姓名的收货姓名?剩下深入的细节,需要建模之处进行合理把控的)
Step4:When 什么时候去分析用户?(通过上面的分析,想必已经够清楚了,模型构建一定要场景化,也必然场景细分,也有就用户细分!这里主要分三类,a.新用户,b.购买行为数在一定范围内?c.高频购买行为用户?
Step5:How 去分析用户性别?(整个二分类场景,模型被我放在最后,希望学习数据挖掘的同学,对于业务和算法的分量,要在心目中有分寸。这里会考虑冷启动模型、分类算法(比如朴素贝叶斯)和符号模型的组合。这里灌输一个思想:模型 != 单算法,而是由多算法+一系列规则逻辑组合而成)
[总结]:一堂课程,还是花了很多培训费,即使不能阐述太多,但我想,如果通过上述方式,会不会更恰当呢?
案例2:很多学者不考虑大数据并发的实现,玩习惯性的单机版时间久了,很难走出这道坎。比如很多人用协同过滤,考虑过大数据量下大矩阵相乘的实现?(PS:这里不扩展了,否则又是一篇文章,如果感兴趣,可以反馈,后期会继续补上《一种新思想去解决大矩阵相乘》)
知其然,晓其所以然,万变不离其宗,必定变化莫测:
案例3:很多使用算法,甚至数据清洗方式的同学,更多是将知道的方法组合在一起,认为这就是数据挖掘?
我想,这也许还是网络课程给学习者带来的诟病吧!
因为课程上已经千篇一律的讲述了数据挖掘的流程体系,所以学习者都会这样做:
a.业务场景需求出现:不假思索就采取能想到的特征变量;
b.不考虑数据清洗,不考虑归一化,无量纲化处理,甚至异常和缺失值,就直接进入模型;
c.不了解具体某一个算法的原理性,一味的用各种工具包,甚至扯上了Spark,R,Mahout 和python等等,输入数据就OK了;
......很多很多,毕竟我不是批判者,我只是希望大家能够做一件正确的事,再正确做好这件事!
如果换做我,我会这样思考!
Step1:业务需求出现时,多向专业运营人员了解业务背景,结合自己理解,确定初步的特征变量,观察数据分布;
Step2:考虑异常值和缺失值处理(这些都是观察数据找到的思路),甚至结合数据分布,采取合适的无量纲化处理方式, 甚至一定程度上降维;
Step3:结合业务场景建模,用户群体细分,确定模型选择,以及所选算法,比如NB(朴素贝叶斯)。
Step4:需要深入了解朴素贝叶斯的原理,知道优势和不足,甚至优化方向(比如:取Log、加平滑曲线等)
[总结]这里只是一个大概的思路,如果课堂时间允许情况下,用具体二分类(性别判别)的案例分析流程,这样学生能够领悟到更透彻。而不是一味的就那几步数据挖掘步骤!
在DataMining领域,不做两种人。一种是工具人,一种是研究者:
做数据挖掘,如果真正热爱这个行业,并希望落实想法,不推荐大家做以上两类人,工具人和研究者。
[工具人]:面试过很多人,(这里谈离线批处理)基本都是Python(很多面试者被豆瓣电影评分的案例害得不浅啊!),很多一味追潮流,也整一个Spark来调包,认为就是懂数据挖掘了,甚至Mahout和R等等;
PS:我曾经反问一位面试者,如果让你招人,你会愿意选择,只会用包,缺乏思考怎么去用?为什么这样用?甚至如何改进和组合的人? 显而易见,面试者的答案是不会招这样的人!
我这里不是批判工具如何不好,曾经大学,我也只是会用Matlab、Spss,甚至Lingo。毕业初期,也只是会用Python和R等。我主要说的是,优秀的模型,不单单是某一个算法能够解决的,其中还包括很多组合算法和逻辑规则。单独的使用工具,结合业务的个性化需求会得不到很好满足,甚至如果让你调优算法,一方面你缺乏算法原理的理解,另一方面,你修改源码的也会很费脑、费神啊!
[总结]:技术没什么吸引人的,它的魅力在于服务业务,通过业务发展来驱动技术提高。这里推荐MapReduce!
[研究者]这类人,不过多讨论,毕竟这个社会是需要这样一类人存在的,我也很佩服他们。 我前面说的前提是,如果真正热爱大数据下的数据挖掘,并落实想法,还是直接作为一个实践者吧!
拥有健康、丰满的数据,业务场景建模已经成功90%以上了:
越到最后,阐述的理由会更少。因为,该说的都已经说了!只想劝各位数据挖掘爱好者、实践者或工作者.好的模型,不是用了如此NB的算法模型,而是优秀的泛化能力,而具备泛化能力的模型,缺乏良好的数据源,会是一棵长不大的树苗的;
Google的阿法狗如此厉害,和它完备、真实和健康的数据源密不可分的!
- [结尾] 茶余饭后,本应携女友漫步于街坊之间。纵观现在,算法之水如此浑浊,于心不忍。轻描淡写,还望各位看官包涵。若对小生后续文章感兴趣,一碗小面钱会是我坚持下去的动力。