傅一平:建模的世界没有银弹!

傅一平:建模的世界没有银弹!

何谓银弹?
在所有恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物,而银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器,人们只有用银弹(银质子弹)才能消灭人狼。
《没有银弹:软件工程的本质性与附属性工作》是IBM大型机之父佛瑞德·布鲁克斯所发表一篇关于软件工程的经典论文,提到在软件工程中“没有银弹”,没有一种能够遏制软件向“怪物”变异、同时还可大幅提升开发效率和产品质量的武器。
后来“银弹”这个词就被用来形容那些特别有效果、一用就很灵的方法。
今天就来谈谈建模的世界有没有银弹这个问题。
A是一名建模师,数学专业,毕业于985大学,精通统计学,微积分、概率论、线性代数等等,对各种算法了如指掌,还是个技术控,掌握机器学习、深度学习、增强学习、迁移学习……,A参加各种建模比赛总得第一,大家送他一个外号:调参侠!
当年A进公司的时候,老板B问他要从事哪个岗位,A毫不犹豫的说去做模型,因为相信只有技术才能改变世界,但老板B却告诉A,建模的世界里没有银弹。
A一直不太相信。
最近老板B布置给了A一个建模课题,这里把A的建模过程和老板B的复盘写出来,为了生动一点,建模师A和老板B的故事都用第一人称来表述,希望于你或你的团队有启示。
1、建模师A的银弹
公司有个智慧精选产品,能够基于标签帮助商家删选精准的目标用户群,然后通过短信链接引流,即通过短信发送给用户,然后用户点击短信中的链接后就可以跳转到商品的页面。
教育行业的的智慧精选短信链接点击率在7%左右,客户一直不太满意,老板就让我先从教育培训类开始做起,希望点击率能进一步提升。
接到课题后我很兴奋,认为只要把目标用户定位的更为精准就可以提升点击率,这样点击率提升问题就转化成了一个建模问题:即如何有效的获取对教育感兴趣的用户,比如职业教育等等。
基于自己的经验,我设计了多达200个特征变量。
什么用户信息(地域、年龄、性别等等)、消费行为(ARPU等等)、业务使用(主叫、被叫、漫游等等)、终端使用(在用终端等等)、渠道偏好(线上偏好等等)、信用评分统统拿下,变量嘛,宁可错杀一千,也不可放过一个。
当然我也找到了很多针对性很强的变量,什么上网搜索教育关键词、拨打过教育培训机构电话、到访过相关培训机构地址、使用过教育类APP……等等用户,虽然很难取,但还好有行业知识图谱……。
准备这200个变量足足用了我一个多礼拜的时间,但除了写脚本时间,我却还要花很多时间去优化脚本,因为运维告诉我写的脚本太烂,把整个租户的资源都占光了,要求我优化程序。
我想做建模师还是有点苦逼的,除了要会算法,还要花那么多时间去优化程序?到底是建模工程师还是开发工程师?
但不管怎样,数据还是跑出来了。
然后我用一个礼拜的时间去做特征工程,一方面做特征转化,什么标准化、离散化、哑元化及降维啥的,另一方面做特征选择,诸如方差选择法、相关系数法、卡方检验法、IV值法、随机森林选择等等,这些对我来说都不是事,除了要耗一点点时间,因为变量实在有点多。
最后我终于得到了梦寐以求的只剩下40个变量的训练集和测试集,见下图,但似乎有些不对劲,你能看出来吗?
但我相信数据不会说谎,也许里面暗含天机吧。

图片

还好,艰难的数据挖掘的前期准备工作终于做完了,用Python训练和部署耗的时间并不长,我马上得到了训练结果,以下是模型的准确率召回率情况,调参这块没有人能比我做得更好。
模型评估指标
指标数值
训练集准确率
76.65%
测试集准确率
75.98%
训练集召回率
43.61%
测试集召回率
41.57%
虽然不完美,但好歹可以用用看,然后我用历史的短信投放工单去做了验证,发现结果非常不理想,短信点击率仅仅从7%提升到了7.2%。
我花了近3个礼拜的代价,换来的难道就是这个结果吗?
然后我不停的换算法,从逻辑回归到随机森林,再从GBDT到SVM,发现结果都差不多,我有点懵圈。
我最后跟老板汇报:已经做到极致,没法提升了。
2、老板B的复盘
我是一只数据团队的负责人,随着大数据运营的深入,急缺合适的数据建模人员,A君是应届毕业生里建模技术特别突出的,我对其给予厚望。
随着工作的深入,我觉得A似乎缺了点什么,下面是我对其上述工作的复盘,也许你会得到很多启示。
我得到的经营压力主要是来自外部的客户,客户认为短信点击率偏低,因此我布置给A的课题的目标是提升短信链接点击率。
A君不能说表现的很差,起码他能独立的端到端完成一次数据挖掘过程,但作为他的老板,我有更高的要求。
首先,A君一厢情愿的把短信点击率问题转化成了目标客户选取的问题,这是有点武断的,即使这两个目标有相关性,但如果点击率上不去,A君的教育偏好模型做得再好也是没有用的。
在布置课题的时候,自己也没想清楚如何提升点击率,也许是靠建模,也许要靠调整渠道、产品、政策等等。
也许我过于相信A君的能力了吧,但这种事情其实很多,员工能不能视野宽一点,跨越专业和职务的限制去思考和推动一些事情,这是我迫切希望的,这个世界上又有哪个事情的边界能分得那么清楚呢?
最理想的情况也许应该是A君先分析下业务目标,拆解出相关要素,哪些在他的控制范围之内,哪些不是他所能控制的,然后跟我说清楚,他可以继续建他的模型,我则安排其他人来做渠道、产品或政策的分析。
这种拆解问题的能力,又岂是光会建模的人能想到或解决的,“拿着锤子的人,看啥都像钉子”,这是技术人的大坑吧。
其次,A君一直认为开发变量耗用了太多的时间,抱怨建模师为什么要被逼着去优化取数脚本,甚至要去理解系统。
我不这么认为。
考虑到大多数企业数据专业的分工没那么细,考虑到变量的设计和验证需要反复测试,建模数据的准备大多还是要由建模师自己承担,建模师面对的问题其实跟数据仓库开发人员一样:即需通过编写脚本高效率的从平台提取出自己所需要的数据。
A君要思考如何与数据仓库协同尽快的跑出数据,甚至建立自己的小数据仓库,计算资源总是有限的,你搞个笛卡尔积,上帝也拯救不了你。
A君曾经写了一个连续跑30天历史数据的脚本,休息日回来发现程序跑挂了,就开始埋怨系统不给力。
我没看到过一个靠人家喂数据的人能做出多好的模型,我也没看到过总写出垃圾取数脚本的人能有多高的建模水平,我不认为建模仅仅是算法和调参,不要总是期望别人给你擦屁股,为你取数,为你部署代码,为你做监控,围绕算法和调参的周边的所有配套都是建模师需要去掌握的,建模师不要变得那么娇贵。
只有认真的做过,才知道每一个环节都充满着玄机。
再次,A君拉起来就开始变量设计,甚至连前辈的变量设计都没看,他好歹要看看7%的点击率用户口径是怎样的,站在巨人的肩膀上做事总是要遵循的原则,否则我们的生活和工作会退化到什么程度,如下表所示。别人做的也是有道理的,即使有点粗糙。

图片

大家都愿意去做创新,却不愿意去优化,特别是不愿意去理解别人的工作,认为看别人的代码比自己写还要麻烦,但重复造轮子不仅浪费时间,而且可能越造越差,你确定自己比前辈更有天赋吗?
再次,A君拉起来就将200个变量不加选择的纳入候选范围,虽然有点暴力,但还能理解,而A君最后分析得到的40个变量里没有一个跟教育有明显的关系,这个就不能忍受,违背基本的常识,特别是连教育类的APP变量都被剔除了。
“出现在培训机构的天数”等变量看起来似乎是那么回事,实际上我知道这个变量的产生的误差肯定远大于实际价值,但如果你对自己企业的数据能力缺乏足够了解的话,就会出现这种低级失误。
建模有强烈的行业特性,建模人员越往上走,领域知识就越来越重要了,不要相信什么空降。
最后,我还是要道个歉,因为后来我们发现,就连那个7%的点击率也是有问题的,为什么看不出来,因为我们都缺乏关于点击率的常识,7%的点击率是大多数短信链接点击难以企及的高度。
怎么发现这个问题的呢?
因为一次偶然的机会,这个世界就是这么不确定,大家看一下我们按终端类型分析点击率的结果就一目了然了,见下图。
图片
人工智能已经偷偷摸摸的在你的终端上帮助你隐性点击了,至于原因嘛,也许是终端厂商为了防病毒吧,后果就是所有终端的点击率都被B给平均了。
当样本数据这座大厦倒塌了后,建模的任何结果也就失去了意义,我们折腾了1个月的结果,换回来的就是一场空。
这个建模案例是基于事实改编的,A和B体现了数据团队的两类角色,笔者写出来不是为了说明建模是如何失败的,而是说明建模的复杂性。
考虑到影响建模成功的要素实在是太多了,你基本无法靠个大招就能走遍天下,纯粹的建模技术不但不是银弹,也许连铁弹都不是。
知道了这个道理,以后如果再有人来跟你讲某某平台、某某工具、某某算法、某某和尚能帮你药到病除,可以立刻怼回去:建模的世界里没有银弹。
你需要用谦卑的心态,花时间去理解企业的基本数据和业务、掌握基本的取数技巧、熟悉数据系统的架构、用常识去认识这个世界,最为重要的是,靠反复的实践去养成一种心智模式,就好比下棋一样,不会犯低级失误。
7%的问题可能无法避免,很大的原因也许是我们在这个领域的经验不够多的缘故,那就多做一些。很多企业不喜欢培训加工厂出来的人,也许是认为too young,too simple吧。
作为技术管理者,有时候很想跟下属说清楚这些道理,但说得再多可能也不如举一个身边的故事来得有效吧,请转给有需要的人。
作者:傅一平 (微信号:frank61822702)

本文为专栏文章,来自:傅一平,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/91653.html 。

(0)
上一篇 2020-03-06 17:14
下一篇 2020-06-03 07:50

相关文章

关注我们
关注我们
分享本页
返回顶部