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

这是傅一平的第327篇原创

作者:傅一平

个人微信:fuyipingmnb

“与数据同行”开通了微信群,已经汇聚了4000位小伙伴了,加我为微信好友(微信号:frank61822702)申请即可,我会拉你入群。

何谓银弹?

在所有恐怖民间传说的妖怪中,最可怕的是人狼,因为它们可以完全出乎意料地从熟悉的面孔变成可怕的怪物,而银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器,人们只有用银弹(银质子弹)才能消灭人狼。

《没有银弹:软件工程的本质性与附属性工作》是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)

猜你想看更多????

数据挖掘失败的根源

数据挖掘的军规

五级数据挖掘工程师,你处在哪一级?

联邦学习,带我们走出“数据孤岛”的困境?

从SQLFLOW开源说起,谈谈如何全面提升数据挖掘的效率?

从芝麻信用分透露的详细数据设计,我们能从中得到什么启示?

数据分析师的算法推荐是否会陷入“真实的谎言”?

从贝叶斯出发,如何真正的理解算法?

个人信用分是如何计算出来的?

一克统计学:小数定律和随机事件

一克统计学:人人都能懂的贝叶斯定理

为什么数据挖掘很难成功?

数据挖掘师,要从一个人活成一支队伍

关于提升机器学习能力的方法 | 从周志华《机器学习》到李航的《统计学习方法》

要看更多,请点击左下角阅读原文即可阅读整理好的所有文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傅一平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值