其实数据挖掘、机器学习一直在接触,只是没有像今年这样面对这么大的数据量和业务种类。应该来说数据分析也是做了很久,一直对机器学习这块怀揣着敬畏的心情,就像面对“大自然”的力量一样。相信很多包括产品、运营、技术开发的同学都算法这块都是一种觉得很高深的态度,而事实上的确机器学习、算法也很难,从各大招聘渠道信息也可以看得出来,什么硕士、博士,XX名校等。
一方面本身算法理论的基础知识涉及到大量的数学理论,另一方面本身的实际业务问题也并非简单的分类、预测或者关联的问题。而我们做算法的会更多的不是去思考本身的业务怎么玩,而且把它拿模型去套。当然也可以折腾出很多玩法。这也是算法有趣的地方。接触到机器学习、算法平台、数据挖掘这块,他们之间的对比差异以及概念区别是什么,我就不多言了。这些都留给那些专家、教授来说清楚吧。重点来总结下这段时间应用到和机器学习相关的哪些应用来解决实际中得问题。
推荐系统
应该来说,人们第一次对机器学习看到最多的应用就是大到各大电商网站的“猜你喜欢”商品,小到你最近看到过什么样的新闻。推荐系统让每个用户能够在纷繁旁多的信息量中找到那些质优、更可能喜欢的产品或信息,极大的降低了搜索的成本。这几年看过关于推荐系统的文章也大大小小有几千篇了。大部分主要是讲的怎么搭建机器学习推荐平台,来解决什么实际中问题,从而达到销售额或业绩的飞速提升。
要解决的实际问题,或者考量一个优秀的推荐平台的指标,应该是可以给企业创造很多价值。这里面包括大量减少人为的事务性操作行为,优化用户与物品之间的关联关系,发现用户、产品之间的特征关系。从而实实在在的把销售业绩做上去。从Amazon、Facebook、netflix到taobao,这样的例子不在少数。而也看到有人在讨论吧质疑机器学习真的有那么大的价值,答案是肯定的。之前服务过的企业已经不止一次的通过推荐平台把业绩提升15%,坏账率降低到7%以内这些现实的案例。当然我们也没有必要过分的迷恋神话推荐算法带来的价值,这样的偏激行为还是不要有的好,对于准备潜心研究算法,通过推荐平台来解决实际问题的算法工程师们更不应如此。这是一条人迹更少的路,选择超神还是被人谩骂都不是我们在乎的,作为算法工程师更应该理解推荐算法本身的瓶颈,能够实际过程中通过创造出解决实际问题的算法,不断优化,从而能够给企业带来巨大价值。至于这什么时候是终点,这永远是一个人生的话题。
废话不多说,大家都明白了机器学习推荐系统带来的价值后,来简单介绍下一般我们在搭建一个推荐系统的团队配置以及有哪些技术架构模块需要准备的。涉及到的引擎主要包括知识库、协同过滤引擎、context引擎、实时数据引擎、业务规则引擎、核心引擎。
涉及到的技术方面的包括数据存储:hbase、postgresql、BDB等,实时数据处理:storm;计算平台:Hadoop、hive、pig;机器学习平台:pig、mahout、weka、r、Python、libsvm、liblinear等。常用的算法有LR/GBDT/RF/AP/CF/DT等。
而数据展示的方面的R、Python、SAS、JS等。工作流管理:Azkaban。
评测指标包括REC/LOC/CER/CTR/TPR/TIR/IAT/IR等。
应用开发java、php、Python等。
团队配置方面:
如果人少的话,可以3个人(1个负责算法、数据分析,1个负责数据存储、处理和工作流,1个负责应用开发和前端);
标准配置是大概6~7个人左右(2个人做算法和数据、1个人做数据的探查分析和评测、2个人负责数据存储、处理和工作流,2个人负责前端和应用的开发);
相应的如果团队比较大的话,相应的在算法、开发和数据处理方面加人。
平台架构方面:
说到算法本身,到底是用LR还是GBDT,是CB还是CF,这些都是一个综合性的问题。可以复杂,也可以很简单。常见的可以用基础的CB,复杂的可以用CF,如果再深入的可以基于SVD/LDA等降维算法,基于SVD++等评分预测算法,基于learning to rank的排序算法,甚至你再转换问题,把推荐问题变成分类问题,或者采取以上算法前先做各种聚类算法的数据预处理,你可以玩得很high。所以说做一个推荐系统的算法工程师一定要能“折腾”。能不停的折腾知识库、特征库、数据预处理、不同的算法、样本召回和测试数据集。
等你做完这些一整套的之后,比那些整天瞎BB这个机器学习概念是神马,那个算法平台是神马的砖家,内心会笃定很多,此刻你的内心也不会那么觉得空虚。正常的情况是白天想策略和模型,晚上整理好数据丢给平台慢慢跑,早上起来看下效果怎么样,或者哪些任务挂了。
说完这些系统工程方面的问题后,最重要的工作还是回头去理解业务,理解业务的变化,理解业务的真正本质。哪些用户是你需要预测的潜在用户,哪些用户是不会用这个业务的用户,什么情况会存在误判的情况,比如用户刷单、洗钱、作弊等异常情况,可能业务或运营的同学不明白你所做得这些算法、平台是什么,而你作为算法工程师要尽可能的用通俗的语言去和运营、产品等同学沟通,比如有车的人才可能会去查交通违章查询、比如每个月初一般用户会选择去充值手机话费,比如到了节假日大家会出国旅行,比如到了月中一般都是信用卡还款日,比如我在停车缴费的时候需要扫一扫这样的功能,比如我在转账成功后希望有短信通知确认的情况。这些都不会是数据直接告诉你的。
特别是在广告领域,推荐系统应用的场景更为广泛。像taobao之前以主打爆款商品带动整体流量,这样的方式是需要有不停的推荐爆款商品来吸引流量,而一款好坏得爆款活动做得好坏也会带来不同长尾效果的流量。
Deep learning
Deep learning可谓是最近两年非常火的词,现在如果你还在数据领域,还不知道什么deep learning,都会把你当成异类。然后deep learning到底是什么?我们到底在有多少和deep learning有关的事情?这个需要理性看待的一个问题。Deep learning是机器学习中非常接近AI的领域,概念源于人工神经网络的研究,其动机也是建立、模拟人脑进行分析学习的神经网络,和机器学习一样,deep learning也有监督学习和无监督学习之分。比如CNNs就是一种深度的监督学习下的机器学习模型,而DBNs就是一种无监督的机器学习模型。
从整体上来讲,deep learning就是以前所说的多层神经网络,整体的思想是认为每个层次都可以被当做一个独立的特征抽象存在,所以最广泛的被应用到特征工程中,而GPU得存在更是接近了ANN的训练效率的问题。简单的来说,deep learning可以对抽取出得特征进行非线性组合形成更有效的特征表示。所以本质上,deep learning解决了机器学习领域很头疼的特征工程的问题。而在实际的情况中,特征工程有多么的重要?之前微软有个小team专门从各个图片中找各种各样的特征,因为算法已经确定用RF上,往往特征的微调就能带来明显的算法效果提升。deep learning的出现,很好的解决了这个问题,总之,deep learning的牛逼之处就是从海量的特征中通过特征过程抽取出有效的特征组合。
理论上的deep learning的核心思想:
把learning hierarchy 看做一个network,则
①无监督学习用于每一层网络的pre-train;
②每次用无监督学习只训练一层,将其训练结果作为其higher一层的输入;
③用监督学习去调整所有层
实际的成功应用案例在文字、图像、语音中应用的比较多,微软之前和hintion合作,将RBM和DBN引入到语音识别声学模型中,使得语音识别的错误率相对减少30%。但是DNN还没有有效的并行快速算法,很多研究机构还是利用大数据预料通过GPU平台提高DNN声学模型的训练效率。
而回到我们日常的工作中,无论是推荐系统还是数据挖掘,我们正常做模型的特征都是怎么出来的?比如我在做taobao电影、做境外游模型、做转账业务、做用户手机充值等业务的时候,算死了也就几百个特征,当然这还是建立在数据比较健全的情况下,而很多实际的情况都是很多数据不完整。所以满打满算也就那么多特征,这时候deep learning就变成了纸上谈兵。而在实际情况中遇到像大部分特征数据缺失值填充,如果你希望通过deep learning来对该矩阵做特征重组,首要的事情就是解决缺失值的问题,而这个比特征工程还困难。
所以说,目前deep learning是大有可为,不过应该不会在目前机器学习领域在企业起到举足轻重的地位。如果是研究院,那是可以去研究研究。
算法工程师的发展
说了不少技术,来聊聊大家比较关心的算法工程师的发展问题。特别是在职场,算法工程师到底能做什么?或者说能在将来发展到什么地步?到底给企业能创造多大的价值?在企业中有叫算法工程师、数据挖掘工程师、数据工程师、数据产品工程师等等,大体工作职责都是差不多。
挑了一份公司的JD介绍,描述的工作内容也和推荐算法、个性化排序有关,而这正是和当下机器学习的应用场景有关,而对岗位技能的要求更偏重工程性技术方面,通常Python、R熟练掌握就可以了。而从BAT的岗位信息来看,算法专家、高级算法专家的区别其实也不是很大,集中在对算法背景的了解、项目case的操作以及算法团队的管理上,其实作为本身的算法从业者,特别是最近几年算法门槛的降低,算法已经不再是以前那种高深&高薪&高学历的岗位。
而如果作为已经入门的算法工程师而言,我们自己也要理解到做一个模型不光只是看样本回测的效果好坏,而是对业务来说有什么实际意义的帮助价值。算法工程师不仅仅是处理数据,而是更要去理解数据,所以如果本身已经做过数据分析的背景对于转型做算法是极好的。通常企业内部的算法工程师或者数据工程师分为两块:一类是专门负责开发标签、特征工程、数据开发和处理的数据工程师、Hadoop工程师等,还要一类是负责模型开发、模型调优、深钻模型的建模工程师。这两类工程师都有自己的长处和短处,但是我更觉得大部分企业需要一个能理解数据而非处理数据,能够打通数据而非埋怨数据,能够挖掘数据而非存积数据的工程师,核心价值更应该去深入理解产品业务,数据处理,数据建模,数据分析和挖掘,数据化运营。并知道何时应该继续模型进行优化,何时应该适可而止。
一个优秀的算法数据工程师,应该能够有growth hacker和data scientist的特质。一方面能够帮助企业发现机会,帮助产品成长;另一方面能够发现现有数据的问题,帮助产品去做优化提升,推荐系统正常就属于这块。
而作为一个算法团队的leader,更多关心的应该是一个团队的成长,避免将算法团队成为公司的成本部门。对于任何一个部门来说,最痛苦的莫过于自己成为了公司的成本部门,那就要多加当心了。比如小公司为什么会觉得实验室这种东西搞不下去,为什么我们数据部门都希望能够为公司做一款很牛逼的数据产品,为什么技术部门也不希望自己只是一个业务支持的部门。其实在公司都是这样,特别是一些以绩效考核为目标的公司,不管是技术部门还是数据部门,还是团队的leader,还是发展一个业务,都希望能够给企业创造出一定的价值,而且这个价值是不是公司目前最紧缺的。比如公司现在正在考虑大力发展新业务,而你还在做用户的留存。比如公司最希望能够产品百花齐放、百家争鸣,而你还在搞公司的底层性能优化。虽然这些都很现实,不过解决公司的痛点的确是每个部门应该要做的事情。
目前作为大部分的公司而言,数据部门都是一个独立的业务支撑部门存在,今天我让你帮忙跑个数据,明天让你帮忙上个模型,这些都是目前很多数据部门的现状。而在数据部门之上的部门正常都是产品总监或者CTO,而这恰恰又是一个产品或者架构师的定位。所以说作为算法工程师以后该何去何从,的确也会遇到一些窘境。我们都是这个数据领域的先行者,没有人会告诉你应该怎么走,这些都是需要我们自己去摸索和闯荡的。
机器学习面临的挑战
最后说到机器学习面临的挑战,主要有几个key words:数据、算法、人才、价值。
数据
大数据是当前非常热点的一个话题,而本质上大数据涉及到的很多方面,包括数据的获取、传输、存储、分析等,这里主要讨论机器学习面临的挑战。首先数据量大带来的计算上的困难,数据可能从不同的服务器上获取,而这些分布在不同服务器上的数据存在某些相似的关系,这时候我们是该去整理数据以适应目前的机器学习还是修改算法从这些数据中学习。另外数据的噪音和不准确性,这直接会影响到我们的算法评估效果,但这也是实际存在的问题,能解决的我们也只能通过实际来测试。另外我们做得算法在寻求最优解的困难、可解释性差都是别人会质疑的问题。
算法
我希望能够业务有30%的提升,我希望每天能有算法模型的推送结果,我希望能够用户在打开手机app时就能看到我们算法计算的推荐结果。这些都是实际情况中会面临的头疼问题。
人才
简单点来说,虽然目前做算法的人不少,不过能通过算法给类似taobao双十一活动提升3%个点的人,还是屈指可数。
价值
什么时候机器学习能够成为一个公司的主营业务,能够离开了机器学习公司就没办法运转。什么时候机器学习能够走入寻常百姓家,能够被每个人所理解。
让时间来见证一切吧。
本文为专栏文章,来自:数据分析侠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/4853.html 。