看见数据关系,才算真正开始看数据
前两篇说了很多看数据之前该做的事。
先弄清楚数据从哪里来,字段代表什么,标签怎么定义,缺失值为什么缺,异常值到底是错误还是信号,训练集和测试集有没有互相串门,线上数据会不会和训练数据分道扬镳。
这些事情听起来麻烦,做起来折腾,是因为这些本来就是非常琐碎的工作,甚至有一个专门的信息集采和清洗的职业(工资都很低,别去尝试)。
但是在机器学习项目里,越基础的地方越容易埋雷。所谓千里之堤,溃于蚁穴,即便是一个不起眼的小洞,后面可能就是洪水滔天。
你以为自己只是随手跳过一个字段说明,后面可能就是半个月的模型排查。你以为自己只是漏看了一处时间窗口,后面可能就是线下分数高歌猛进,线上系统安静躺平。你以为自己只是顺手删掉几个离群点,后面可能就把真正有价值的大客户、异常交易、故障前兆一起扫进垃圾桶。捡了芝麻丢了西瓜是万不可取的。
回归正题,很多人学习机器学习的时候,最先迷恋的是模型名字。
线性回归,逻辑回归,决策树,随机森林,XGBoost,LightGBM···
名字越多,越觉得自己走进了技术深处。打开教程,复制代码,导入数据,训练模型,输出分数。整个过程丝滑得像短视频剪辑,几分钟之后就能收获一种我已经进入人工智能时代的错觉,确实有点飘飘然了。
可真实项目通常不是请客吃饭,是堡垒攻坚战。
真实项目的数据经常像一个刚经历过三轮需求变更、两次系统迁移、一次运营活动、五个临时补丁的老员工。表面仍然能正常打卡,内里早已写满人情世故。完全是老油条一个,你以为它老实巴交,其实心里门儿清规则,整天偷奸耍滑。
到了第三部分,我们就不能只看单个字段了。
因为一个字段看起来正常,并不代表它和其他字段放在一起也正常。一个分布看起来漂亮,也不代表它对标签真有帮助。
一个相关性看起来惊人,也不代表它能在未来预测中站得住脚。金玉其外,败絮其中,也许看着光鲜,拆开一看全是坑。
机器学习真正麻烦的地方,往往就藏在数据之间的关系里。
字段与字段之间有什么联系。
特征与标签之间是否存在稳定关联。
某些群体的数据是否被平均数掩盖。
时间顺序有没有被偷偷打乱。
模型预测错误的样本是否集中在某些区域。
这些问题,比单纯检查缺失率、最大值、最小值更接近建模本身。
因为模型最终学到的,不是某一列孤零零的数字。
模型学到的是各种变量之间的关系。
你不先把这些关系看一遍,就相当于把一群来历不明的人直接塞进会议室,然后让模型在门外听墙角,最后要求它整理出一份董事会纪要。要赶鸭子上架,但是鸭子在哪里都还没搞清楚。
能写出来,未必可信。
相关性别被当成圣旨
看数据时,人们很容易被相关性迷惑。
这也很好理解。
相关性给人的感觉太舒服了。
一张热力图摆出来,颜色深深浅浅,数字整整齐齐,仿佛一切关系都已经坦白从宽,完全不抗拒你。某个特征和目标值相关系数很高,众人顿时眼前一亮,仿佛看见项目终于有了救命稻草,你喜出望外,以为找到了灵丹妙药。
问题在于,相关性只是一个信号。
它能提醒你两个变量可能一起变化,却不能自动告诉你谁影响了谁,更不能替你解释背后的真实机制。
correlation does not imply causation,这话都快说烂了,但总有人记不住。
比如一个电商平台发现,购买某类高价商品的用户,未来复购率也更高。这个关系看起来很诱人,似乎可以直接推导出"多给用户推荐高价商品,就能提升复购率"。
听起来很像运营周会里我们运营复盘的金句总结,画饼充饥,饼画得挺圆,能不能吃到嘴里是完全另说的事情。
如果经过详细的逻辑分析,数据核验的话这个结论可能完全经不起推敲。
也许真正起作用的是用户收入水平、消费习惯、品牌忠诚度,或者平台对高价值用户本来就提供了更多优惠和服务。
高价商品只是这些因素在数据表里的一个影子。你如果把影子当成原因,模型就会很认真地追着影子跑。指鹿为马,影子是鹿,你非说它是马,模型就跟着你一起瞎。
以某东到24年左右的品牌政策就是高价高服务,商品价格高一点,但是买的是安心和售后,所以不可以认为说高价商品带来了复购率。
再比如,一个学习平台发现,观看课程时间越长,最终考试成绩越高。
这话乍听相当合理、顺理成章,时间越长成绩越好,完全没毛病。
于是产品团队开始疯狂增加课程时长,把一节课拉成连续剧,恨不得让用户在播放器里完成义务教育全流程,只要时间卷起来了,卷得飞起,成绩就会和时间一样的飞增,就和ARR会和年限一样指数增长一样的可笑。
可真实情况可能是,原本自驱力更强的学生更愿意花时间学习,他们成绩好,并非单纯因为视频时长长。
你把课程拉长,未必能让普通学生变成学霸,倒可能让他直接切到后台刷短视频。这就是完全的适得其反,本来想帮忙,结果帮了倒忙。
数据里有关系,不等于现实中有因果。
这句话必须反复刻进脑子里,刻骨铭心,不要忘了。
机器学习模型尤其擅长利用相关性。
只要某个变量能帮助降低损失,它就会拿来用。至于这个变量是不是稳定,是不是合理,是不是会在未来消失,是不是只是某个历史阶段的偶然产物,模型不会主动替你操心。反正不管三七二十一,我先用了再说。
模型没有社会经验。
它不会说,这个字段看上去有点可疑,我们要不先问问业务方。
它只会低头学习,然后在评估集上给你一个好看的分数。闷声发大财和闭门造车是模型的准则,分数好看就行,别的我不管。
很多危险就从这里开始。
一个风控模型发现,某些设备型号和高风险用户相关。看起来像有效特征,可进一步追查后发现,风险集中只是因为某一批渠道推广时恰好绑定了这些设备。过几个月渠道换了,设备结构一变,模型就开始满脸无辜地误判,设备直接躺枪,设备说:“我又招谁惹谁了?”
一个招聘筛选模型发现,某些学校、地区、过往公司经历与历史录用结果相关。它可能会学得飞快,也可能会把过去的人为偏好继续复制下去。最后系统看起来客观中立,实则只是把旧账本换成了算法外壳。新瓶装旧酒,瓶子是新的,酒还是那坛陈年老酒。
一个内容推荐模型发现,争议性标题更容易提升点击和停留。它会一本正经地优化这个方向,直到首页逐渐变成情绪火锅。用户确实更愿意停留,平台指标也确实好看,至于信息环境被煮成什么样,那就进入下一轮专项治理。那就是饮鸩止渴,指标是上去了,口碑下去了,完全不考虑口碑、品牌带来的经济价值,这又不是“相信吧,相信是不需要理由的”。
这就是相关性的双刃剑。
它是建模的重要线索。
它也是误判的温柔陷阱。
看数据时可以相信相关性提供的提示,但不能跪拜相关性给出的幻觉。真正可靠的判断,需要继续追问时间顺序、业务机制、样本覆盖、干预可能,以及未来是否仍然成立。打破砂锅问到底,问到根上才算完。
相关性像线索。
线索可以带路,也可能把人带进沟里。也会引狼入室,线索引错了,坑的就是自己。
图形会比平均数更诚实
很多人看数据,喜欢先看统计量。
均值,方差,最大值,最小值,中位数,相关系数···
这些数字当然有用。它们像体检报告里的基础指标,能快速告诉你身体大致有没有异常,一目了然,有经验的人扫一眼就知道大概。
可如果只看这些数字,很容易被骗得明明白白。大脑看数字也会睁眼说瞎话,数字没骗你,但也没告诉你全部真相。
统计学里有一个经典例子,叫 Anscombe 四重奏。它由四组数据构成,这几组数据在均值、方差、相关性和线性回归结果上非常接近,但画成图以后,形态差异极大。
这个例子原本就是为了提醒人们,分析数据时不能只依赖摘要统计,图形检查非常重要。眼见更直观,图一画,真相大白。
后来又有人做出了更适合互联网传播的 Datasaurus Dozen。它能生成多组摘要统计几乎相同、图形形态却完全不同的数据,其中甚至包括一只看起来像恐龙的散点图。
Autodesk Research 对这个案例的介绍也强调了同一组摘要统计背后可能隐藏着完全不同的图形结构。这就是一个小小的整活,数据科学界也是会整活的。
但它背后的提醒是非常严肃的。
因为平均数不会告诉你分布是不是双峰。
方差也不会告诉你异常点是不是掌握了整条回归线的方向盘。
相关系数不会告诉你关系是线性的、弯曲的、分段的,还是完全由一个离群点撑起来的。一叶障目,如果让一片叶子挡住眼,即便眼前是泰山都看不见。
如果你只看数字,不画图,不分群,不检查样本,就很容易把一张长得像恐龙的数据,看成一条规规整整的直线。这也是另类的指鹿为马,把恐龙看成直线,也是个人才。
好比你只看一个班级的平均身高,觉得大家都差不多。结果一进教室,发现前排坐着幼儿园小朋友,后排站着篮球队。平均数确实没骗你,可它只讲了一个经过压缩的故事。挂羊头卖狗肉,平均数挂的是羊头,但实际上卖的是压缩过的狗肉。
机器学习项目里,这类情况非常的常见。
做房价预测时,均价可能看起来正常,但一画价格分布,马上发现少量豪宅把尾巴拉得很长。你如果直接用常规误差指标训练模型,模型可能会被高价房牵着走,对普通房源反而预测得七歪八扭。豪宅是芝麻,普通房源才是西瓜,这就是典型的丢了西瓜捡芝麻。
做用户活跃预测时,平均登录次数可能看起来平稳,但按用户群体拆开以后,才发现新用户、老用户、活动用户、沉默用户完全是几套行为模式。
你把它们揉成一团去建模,模型只能在混沌中寻找中庸路线。一起来和稀泥,搅和搅和,谁也不得罪,谁也预测不准。
做网络流量异常检测时,平均流量没有明显变化,不代表系统没有风险。攻击可能集中在某几个端口、某几个时间段、某几类协议组合里。
平均数像一个温柔的和事佬,把所有尖锐矛盾都揉平,然后对你说,一切尽在掌握、粉饰太平,表面风平浪静,底下暗流涌动。
可现实不会因为平均数好看就停止出事,毕竟纸包不住火,该来的总会来。
所以看数据一定要画图。
数值字段看直方图、箱线图、散点图。
类别字段看频次分布、头部类别、尾部类别。
时间字段看趋势图、周期变化、节假日波动。
特征和标签之间看分组差异、条件分布、局部模式。
这不是为了把 notebook 装点得像论文。
这是为了防止自己被压缩后的数字带偏。别被数字忽悠了,画图才是硬道理。
很多时候,一张图能让你省掉三天调参。事半功倍,一张图顶三天活。
因为它会直截了当地告诉你,问题根本不在模型,而在数据结构本身。然后对症下药,找到病根,药到病除。
很多信息藏在分群之下
很多数据问题,放在整体上看风平浪静,拆开人群之后才会露出水面。只有水退了,石头才能露出来,也就是水落石出。
这也是初学者最容易忽略的一层。
他们喜欢看全局统计。
全体用户平均消费多少,全体用户流失率多少,全体订单退款率多少,全体设备故障率多少。
这些数字有用,但颗粒度太粗,只看个大概,细节全丢。
机器学习面对的往往不是一个抽象的平均用户,而是许多行为差异极大的群体。
新用户和老用户不是一类人。
高频用户和低频用户不是一类人。
自然流量来的用户和广告投放来的用户不是一类人。
一线城市用户和低线城市用户不是一类人。
移动端用户和网页端用户不是一类人。即便是龙生九子,也还各有不同,用户群体更是千差万别。
同一个指标,在不同群体里可能完全不是一个意思。
比如访问时长。
对短视频平台来说,长时间停留通常代表兴趣较强。
对政务系统来说,长时间停留也可能代表用户找不到入口,正在页面里痛苦迷路。就像热锅上的蚂蚁,用户急得团团转,停留时间能不长吗?
对在线考试系统来说,长时间停留可能代表认真答题,也可能代表卡死在某道题上开始思考人生,卡死了,动不了,时间当然长。
如果不分场景,不分人群,只把访问时长当成统一的正向特征,模型很容易学到一些看似合理、实则偏航的关系,怕是帽子戴错了头。
再看用户流失。
整体流失率从百分之十涨到百分之十二,看起来只是轻微波动。拆开渠道以后,可能发现自然流量用户非常稳定,某个新投放渠道来的用户七天内大量离开。再继续拆开设备和版本,可能又发现问题集中在某个安卓版本的启动崩溃。
这时候你会发现,所谓模型效果下降,源头也许根本不是模型。
它可能是渠道质量问题。
可能是产品版本问题。
可能是埋点口径问题。
也可能是某一类用户根本就不该被放进原来的任务定义里。只有找到病根,才能药到病除。
同样的逻辑也适用于网络安全场景。
整体流量平稳,不代表每个端口都平稳。
总请求数平稳,不代表每个来源 IP 都平稳。
攻击样本比例很低,不代表攻击没有出现,也许它只是聚集在极小的时间窗口里,像一群低调进村的精神小伙,平时不显山不露水,关键时刻直接把日志打满,悄悄进村,打枪的不要。
分群看数据的意义,就在于把被平均数遮住的局部问题重新拉出来,局部问题也是需要详细分析的部分。
因为模型上线后挨打,通常不是被平均用户打的。
它会被边缘用户打,被新版本打,被特殊渠道打,被异常设备打,被恶意流量打,被那些训练数据里没怎么见过的角落场景打。明枪易躲,暗箭难防,角落里的箭最难防。
你如果训练前没有看这些角落,模型上线后自然会在这些角落里摔跤。
而且摔得很安静,走的很安详。
时间顺序是机器学习里的底线
机器学习里有一种很常见的错觉。
只要训练集和测试集比例分好,只要随机种子设置好,只要分数看起来稳定,评估就算可靠。自我感觉良好,分数好看就万事大吉。
这话在某些场景下能用。
可一旦任务和时间有关,随机切分就可能直接把未来揉进过去。数据穿越时空,从未来跑回过去,模型提前看了剧本。
预测未来销量,却随机打散过去两年的订单。
预测用户未来三十天是否流失,却让同一个用户不同时间段的记录同时出现在训练集和测试集。
预测设备未来是否故障,却把故障后的维修状态混进特征。
预测贷款是否逾期,却使用逾期之后产生的催收记录。作弊,妥妥的作弊。
这类操作看起来只是数据处理细节,实际已经让模型提前看了后面的剧情。“剧透”,模型提前知道结局,分数当然好看。
scikit-learn 的常见陷阱文档明确建议,为避免数据泄露,应先划分训练集和测试集,再只用训练集信息完成特征选择等拟合步骤。Google 的机器学习课程也会经常提醒,模型应在训练样本之外的数据上测试,并且验证集和测试集里不应保留与训练集重复的样本。所谓规矩,就是前人对当代境况的极其抽象的总结,不能破。
这有点像是考试纪律。并且无规矩不成方圆,考试作弊,成绩再好也是假的。
现实预测时,你站在某个时间点,只能看到那个时间点之前已经发生的信息。未来的信息不能穿越回来帮你。训练时如果偷偷用了未来字段,线下评估就会变成大型剧透现场。自欺欺人,骗得了自己,骗不了上线后的真实数据。
模型分数会很好看。
好看到你觉得自己发现了行业秘密,这下直接自信心爆棚。
然后上线一跑,才发现秘密没有,事故倒是有一箩筐。乐极生悲,高兴太早,哭的时候在后面,千万不能半途开香槟。
时间顺序对于机器学习项目特别关键,因为很多业务问题本质上都是面向未来的预测。
未来七天用户会不会流失。
未来三十天客户会不会复购。
明天设备会不会故障。
下一小时流量会不会异常。
下一笔交易是不是高风险。
这些都需要提前预测,来防患于未然。
这些任务最重要的问题,不是数据表里有没有这些字段,而是预测发生的那个时刻,这些字段能不能拿到。巧妇也难为无米之炊,预测的时候拿不到,训练的时候再香也没用。
预测时拿不到的字段,训练时就算香得冒油,也不能当成正常特征。
它不是特征。
它只不过是未来寄来的作弊小纸条。
错误样本是模型写给你的投诉信
很多人训练完模型,只看一个总分,想要通过一个分数就想概括全部。
准确率多少,AUC 多少,F1 多少,RMSE 多少。
分数高了就开心,分数低了就换模型。喜新厌旧,分数不好看就换,从不深究为什么。
这套流程很像体重秤减肥法。每天上称看数字,数字没降就换个姿势站,姿势还不行就换个体重秤。至于自己到底吃了什么、睡了多久、训练有没有变形,全都没有认真追问。掩耳盗铃,骗自己是有一套的。
机器学习也一样。
只看总分,很难知道问题出在哪里。就像盲人摸象,摸到一个部位就以为是大象。
真正有价值的动作,是去看模型错在哪里,并且问错在哪,为什么错。
哪些样本被错分了。
哪些价格预测偏差最大。
哪些用户被误判为高风险。
哪些异常流量被漏掉。
哪些正常请求被误报。
这些错误样本,往往是数据最诚实的反馈。
它们就像模型写给你的投诉信,里面模型在抱怨:“你真的看懂我了吗?”
信里不会说好听话,信里只会告诉你,某些地方你没有看懂。一针见血,直指要害。
比如垃圾邮件分类模型经常把正常邮件判成垃圾邮件。你一看错误样本,发现它们都包含"发票"“合同”"付款"这些词。模型并没有理解业务语境,只是把历史垃圾邮件里的高频词当成了风险信号,比如发票是正常业务,模型非说是垃圾邮件。
比如房价模型在某个区域预测误差特别大。你一查,发现这个区域刚开通地铁,历史数据没有覆盖新的价格变化。模型没有犯懒,它只是活在过去,船已经动了,但是剑还杵在原地。
比如网络异常检测模型漏掉了一批低频攻击。你一看样本,发现攻击者刻意降低请求频率,分散来源,避开了基于总流量阈值的特征。模型学会了抓大嗓门,却没学会识别小动作。如果想做到明察秋毫,那这个模型还差得远。
比如用户流失模型误判了一批高价值用户。你继续看,发现这批用户虽然近期登录少,但他们是周期性采购用户,本来就不会天天打开系统。模型把业务周期误读成了兴趣衰减,如果撞错了,那就是把周期用户当成流失用户,给出完全错误的信息。
这些发现,比单纯换模型更有意义;找到问题根源,比盲目换模型强一百倍。
因为它们会告诉你,应该补什么数据,改什么特征,拆什么人群,调整什么标签,甚至重新定义任务。
错误样本分析最适合放在建模早期做,因为早点发现问题,早点解决。
先用一个基础模型跑起来,不用追求极致分数。然后把错误样本捞出来,看它们是否集中在某些类别、时间、地区、渠道、价格段、设备型号、用户群体里。
如果错误样本杂乱无章,可能是模型表达能力不够,也可能是数据本身噪声太大,那就是一团乱麻,乱得找不到头。
如果错误样本高度集中,那就像有人在黑板上帮你圈了重点,重点都给你圈出来了,别视而不见。
别急着调参。
先去看那一坨错误到底在说什么,磨刀不误砍柴工,先看清楚,再动手做。
基线模型是项目里的照妖镜
说到这里,就该谈 baseline 了。
很多人喜欢一上来就把模型配置拉满。好高骛远,你一个小婴儿还没学会走就想跑。
特征交叉安排上,调参搜索安排上,集成学习安排上,AutoML 安排上。流程看起来相当豪华,像是刚进厨房就准备做满汉全席,眼高手低,厨房还没摸清,就想做满汉全席。
可问题是,连白米饭能不能煮熟都没验证过,根基不牢,楼盖再高也得塌。
baseline 的意义,就是先做一个足够简单、足够清楚、足够容易复现的基线方案,只有返璞归真,简单才是真理。
它不需要惊艳。
它只需要诚实、实事求是,是什么就是什么。
分类任务可以先用逻辑回归、决策树、随机森林。回归任务可以先用线性回归、随机森林回归。文本分类可以先用 TF IDF 加逻辑回归或者朴素贝叶斯。异常检测可以先用简单统计阈值或者 Isolation Forest。先从简单开始,逐步深入。
重点不是它有多强。
重点是它能不能让你看清楚,数据和任务之间有没有基本可学的关系。这就是走夜路先扔一块探路石来探探路。
如果一个简单基线已经表现不错,说明数据里确实有信号,后续再做特征工程和模型优化才有意义,信号有了,后面的事就好办了。
如果一个简单基线差得离谱,先别急着搬出复杂模型。很可能标签定义有问题,特征缺关键字段,样本覆盖不足,任务本身过于含糊,或者评估方式和业务目标对不上,如果方向错了,模型再复杂也没用。
baseline 还有一个作用,能有效防止自我感动,一剂清醒剂打下去,让你先别感动。
没有基线时,你会觉得模型从 0.81 提到 0.83 很了不起,沾沾自喜,提升了一点点就觉得自己牛。
有了基线后,你可能发现一个简单规则已经能做到 0.82,这一棒子打醒,原来自己一直在做无用功。
就怕气氛突然沉默。
这就像一个团队连夜开发了复杂系统,最后发现 Excel 筛选加人工经验已经解决了八成问题。场面多少有点尴尬,但这尴尬是有价值的。它能及时阻止项目继续在错误方向上狂奔,悬崖勒马,及时止损,别越跑越偏。
机器学习项目最怕的,不是模型简单。
大道至简,简单有时候是最好的。
最怕的是复杂得毫无必要、画蛇添足,多此一举,反而坏事。
你为了显示技术含量,把一个本来可以用规则解决的问题做成复杂模型。上线以后,可解释性下降,维护成本上升,数据管道变长,监控难度增加,业务方还要忍受模型偶尔抽风。得不偿失,得不偿失啊。
最后大家坐在会议室里复盘,一边看着复杂架构图,一边想念当年那个朴实无华的 if else。if else 虽然土,但好用啊。
baseline 就是防止这种事情发生的最低防线。
它会冷静地提醒你,先证明这件事值得建模。
从看数据走向可用数据
看到这里,可以把看数据这件事重新整理一下。
它绝不是打开表格扫几眼,走马观花,扫一眼能看出啥?
也不是跑几个 describe,画几张图,然后给自己一种"我已经完成 EDA"的安慰和自欺欺人。
真正有用的看数据,应该让你逐渐回答几个问题。
1.这份数据来自哪里。
2.字段含义是否可靠。
3.标签定义是否清楚。
4.训练时使用的信息,预测时能不能拿到。
5.样本是否覆盖真实场景。
6.不同人群之间有没有明显差异。
7.特征和标签之间的关系是否稳定。
8.异常值和缺失值是否藏着业务信息。
9.训练集和测试集切分是否模拟了未来使用方式。
10.错误样本是否集中暴露了某些薄弱区域。
基线模型是否证明了任务确实可学。十问十答,十个问题,需要一个一个答。
稳扎稳打,一步一个脚印。
回答得越含糊,建模越像抽奖。听天由命,抽到什么算什么。
很多初学者不爱看数据,是因为它没有立刻带来技术快感。急功而近利,就想快点看到结果。
模型训练时进度条滚动,分数刷新,图表上升,这些东西更容易让人上头。
看数据则像翻旧账,慢慢检查字段,追问来源,核对口径,反复确认时间窗口。枯燥乏味,确实没训练模型爽。
可真正的项目成败,常常就决定在这些非常枯燥的地方。细节决定成败,不刺激的地方,往往最关键。
一个成熟的机器学习工程师,不会只问"该用什么模型",会多问几个为什么。
他会先问数据有没有资格支撑这个模型,数据不够格,模型再好也是白搭的。
这份数据代表了什么,又漏掉了什么。
它能让模型看见现实的哪一面,又遮住了现实的哪一面。
它有没有把未来信息塞进过去。
它有没有把某些群体压成平均数。
它有没有把历史偏见包装成稳定规律。
它有没有让漂亮的线下分数,变成未来事故的预告片,预告片分数好看,但是正片上线就翻车,预告片变成预告骗。
这就是看数据的真正意义。
不是为了拖慢项目节奏,磨刀不误砍柴工。
是为了让后面的每一步少交智商税。
写在最后
机器学习之前,先学会看数据。讲到第三篇,这句话已经不再只是入门提醒,而是一种工程态度,所谓态度决定一切,态度对了,事就对了。
第一层,是看数据本身。看字段,看缺失,看异常,看标签,看分布。由表及里,从表面开始。
第二层,是看数据结构。看数值字段有没有数量意义,看类别字段有没有业务层级,看分桶是否合理,看样本不平衡是否正在欺骗指标。看结构,结构看清了,才能建高楼。
第三层,是看数据关系。看相关性背后有没有机制,看图形背后有没有异样,看不同群体之间有没有被平均数掩盖的差异,看时间顺序有没有被打乱,看错误样本究竟在向你投诉什么。找关系,关系看清了,模型才能学对。
走到这里,模型才算有资格登场,舞台搭好了,演员才能上场。
因为机器学习并不会凭空产生理解。它只是把你交给它的数据,压缩成某种可用于预测的模式。数据清楚,它才有可能学得清楚。数据混乱,它只会把混乱加工得更体面。数据有偏,它就可能把偏差整理成看似客观的判断。
“Garbage in, garbage out”,进去的是垃圾,出来的也是垃圾。
很多人追逐更强的模型,更大的参数,更复杂的框架,这些当然都有价值,人往高处走,追求更好是人之常情。
但在传统机器学习里,尤其是在结构化数据和业务预测场景中,最常见的胜负手仍然藏在数据里,决定胜负的关键一招通常朴实无华,早早埋下伏笔。
谁更懂字段,谁更懂标签,谁更懂分布,谁更懂场景,谁更愿意对错误样本低头,谁就更接近真正可用的模型。会向数据低头,从来不丢人。
模型像学生。
数据像教材。
评估像考试。
业务场景像毕业后的真实工作。
如果教材写错了,考试泄题了,工作内容还和课堂完全不一样,那么学生成绩再漂亮,也很难让人放心。纸上谈兵,理论再好,实践不行也是白搭。
所以在正式进入监督学习、线性回归、逻辑回归和决策树之前,这一段绕不开。
不要急着让机器学习。欲速则不达,急不得。
1 个帖子 - 1 位参与者