评估穿越是机器学习系统中一个常见而又隐蔽的问题,会导致对模型做出不准确的评估结果,进而影响对模型的选择和调优。本文以两种最常见的穿越方式为例,介绍一下评估穿越,以及带来的问题和解决方案。

什么是评估穿越?

首先我们来回顾一下ML系统中的评估一般是怎么做的。为了便于描述,我们假设一个训练和评估均为离线进行的场景,但是本文的讨论同样适用于在线的训练和评估。

在拿到样本数据之后,做了必要的清洗和采样之后,我们会将样本分为训练集(train)和测试集(test)(有时还会再分一份作为validation),我们会在训练集上训练出模型,然后在测试集上对模型的效果进行评估,具体来说,我们会计算各种指标出来,例如准确率、召回率、AUC,MAP等等。我们之所以要将样本划分为训练集和测试集,主要目的就是希望在测试集上做评估,而不是在训练集上做评估,防止发生过拟合,进而使得评估结果更加准确。

评估穿越,指的就是由于样本划分不当,导致测试集中的信息“穿越”到了训练集中,导致评估结果会更偏爱过拟合的模型,从而导致评估结果不够准确。这么说比较抽象,下面我们以最常见的两种穿越为例,认识一下穿越究竟是怎么发生的。

时间穿越

机器学习的课本中告诉我们,拿到数据集后,需要将其按照一定比例分割为训练集和测试集,训练集用来训练模型,而测试集用来评测效果。要实现这个目的,最简单的实现方法,就是对于每条样本做一次随机选择,来判断将其放到训练集还是测试集。

但是这种实现方法,会导致一个问题,就是我们称之为“时间穿越”的问题。假设我们的样本数据包含了七月份和八月份的用户行为,按照上面的方法进行划分的话,划分的结果就是训练集和测试集中都可能含有七月和八月的数据,这样的数据在训练时没有问题,但是在预测评估时,会导致数据指标优于实际情况,例如,真的的AUC应该是0.7的话,那么在这样的数据集上评估出的结果就会大于0.7。

为什么呢?大家都知道训练集上训练出来的模型是不能在训练集上进行评估的,因为训练集上的评估结果会更偏好过拟合的模型,导致我们错误评估了模型的泛化能力。这就好比用来练习的试卷不能用来考试,因为这样会导致死记硬背的学生分数更高,而不是学习能力强的学生。类似的,在上面的例子中,由于训练集和测试集中都包含了七月和八月的数据,这就好像考试卷子中虽然没有包含练习试卷的题目,但是包含了非常相似的题目,也会导致我们错误判断一个学生的学习能力。究其根本原因,是因为在实际场景中,数据行为都是在快速变化的,相近时间内的行为存在一定的相似性,时间相差越远行为差异越大。这一点和一个稳定数据分布场景是完全不同的,如果数据分布在时间维度上是相对稳定的,那么时间因素就不是一个那么重要的因素,相互穿越带来的问题就会比较小。

换一个角度来说,我们的模型在训练完成之后,用到线上预测真实数据时,预测的数据不仅是训练模型时没有见到过的,而且在时间上也是一定晚于训练模型时的数据的。那么我们在训练和评估时也要尽量还原这样的场景,否则得到的评测结果就会和真实结果产生偏差。

所以说,要想避免时间维度的穿越,应该在划分训练和测试样本时要将时间维度加以考虑。

会话穿越

以电商网站的推荐为例,用户在浏览一个商品时,某个推荐模块会为他推荐多个商品进行展现,用户可能会点击其中的某几个,其他的则不会点击。为了描述方便,我们将这些一次展现中产生的点击和未点击数据合起来称为一次会话(不同于计算机网络中会话的概念)。

在上面描述的样本划分方法中,一次会话中样本可能有部分被划分到训练集,另外部分会划分到测试集。这样的行为,我们称之为会话穿越。会话穿越的问题在于,由于一个会话对应的是一个用户在一次展现中的行为,所以是存在较高相关性的,穿越会带来类似上面提到的用练习题考试的问题;此外,会话本身是不可分割的,也就是说,在线上使用模型时,不可能让你先看到一次会话的一部分,然后让你预测剩余的部分,因为会话的展现结果是一次性产生的,一旦产生后,模型已经无法干预展现结果。这就好比说模拟考试时老师告诉你说是开卷的,于是你很开心地考了90分,但是到了真实考场上时,考试却是闭卷的,那么你可能只能得到70分。原因就在于你在模拟考试时利用了你在真实考试时无法利用到的信息。

所以在处理涉及到会话的样本时,最好是以会话为单位对样本进行划分,以免出现会话穿越的问题。

穿越的本质

上面我们用两种类型的穿越,向大家介绍了穿越问题,但是这两种穿越,以及我们没有介绍到的其他类型的穿越,里面的核心问题是什么呢?

首先是一个信息泄露的问题。无论是时间穿越,还是会话穿越,其核心问题都在于在训练数据中的信息以不同方式、不同程度泄漏到了测试数据中。我在其他文章中也简单介绍过,机器学习本质上就是信息的游戏,信息的泄露必然会导致评估结果发生偏差。

其次是场景真实性的问题。上面的两种穿越问题中,线下训练测试的场景,都和线上真正预测未知数据的场景有着偏差,从而导致了评估结果的偏差。举个极端的例子,就好比慈溪在颐和园风平浪静的昆明湖训练水兵,然后去波涛汹涌的大海上和敌人打仗,焉有不败之理。

所以大家无论是在处理样本时,还是在处理特征时,需要对信息泄露和场景真实性问题加以注意,这两个问题可能会以各种形态出现在机器学习系统中,稍不留神可能就会被捉弄。

总结

本文用两种最为常见的场景介绍了评估穿越这样一个机器学习系统中常见而又隐蔽的问题,之后通过进一步抽象指出了信息泄露和场景真实性这两个更为泛化的问题,希望能够引起大家的注意。

浅谈机器学习评估中的穿越问题相关推荐

  1. 浅谈机器学习之数据集构建

    浅谈机器学习之数据集构建 ​ 正如大家现在知道的,深度学习模型(DL)和机器学习模型(ML)是数据驱动型任务,在近乎完美的数据集面前,模型间的细微差异可以忽略.但要获得覆盖目标场景所有特征的样本,不仅 ...

  2. 浅谈软件性能测试中关键指标的监控与分析(转)

    浅谈软件性能测试中关键指标的监控与分析 一.软件性能测试需要监控哪些关键指标? 软件性能测试的目的主要有以下三点: Ø  评价系统当前性能,判断系统是否满足预期的性能需求. Ø  寻找软件系统可能存在 ...

  3. python中if和elif的区别_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  4. python执行不了elif_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  5. python中分支语句elif与else的区别_浅谈对python中if、elif、else的误解

    今天下午在练习python时用了"if...if...else..."的分支结构,结果运行出来吓我一跳.原来我想当然的认为"if...if...else..." ...

  6. 浅谈机器学习之深度学习

    浅谈机器学习之深度学习 从人工智能到机器学习再到深度学习 人工智能是个很大的知识集合体,但目前有个和它关系最大的学科---机器学习 机器学习是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算 ...

  7. 嵌入式AI —— 6. 为糖葫芦加糖,浅谈深度学习中的数据增广

    没有读过本系列前几期文章的朋友,需要先回顾下已发表的文章: 开篇大吉 集成AI模块到系统中 模型的部署 CMSIS-NN介绍 从穿糖葫芦到织深度神经网络 又和大家见面了,上次本程序猿介绍了CMSIS- ...

  8. mysql declare与set的区别_浅谈MySQL存储过程中declare和set定义变量的区别

    在存储过程中常看到declare定义的变量和@set定义的变量.简单的来说,declare定义的类似是局部变量,@set定义的类似全局变量. 1.declare定义的变量类似java类中的局部变量,仅 ...

  9. 浅谈单片机程序设计中的“分层思想”!

    浅谈单片机程序设计中的"分层思想",并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用.看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种 ...

  10. 浅谈网络爬虫中广度优先算法和代码实现

    前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章--浅谈网络爬虫中深度优先算法和简单代码实现.今天小编给大家分享网络爬虫中广度优先算法的介绍及其代码 ...

最新文章

  1. 线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式
  2. [eslint-plugin-vue] [vue/no-unused-vars] 'scope' is defined but never used.
  3. 没有回家的等于没过年
  4. 又一个很全的R资讯网站
  5. 任务调度的使用crontab
  6. react实现上传文件进度条功能_React.js 可拖放文件的上传表单(支持多文件和进度显示)...
  7. 血泪教训!拖垮公司的技术团队常用的 7 个操作
  8. PHP面向对象分析设计的61条军规
  9. 古老的txt下传和txt上载
  10. java的本质_Java线程本质
  11. Tapestry5的喜爱.
  12. dcp9020cdn硒鼓!错误_打印机硒鼓错误是什么意思?故障解决【详解】
  13. MTK6763平台手机 在国外无法成功注册VOLTE。求解
  14. 图像识别技术原理和神经网络的图像识别技术
  15. 用javascript实现一个打乱文字小程序
  16. 糯米网电子商务模式:上线当天销售额600多万元的缘由
  17. PHPAdmin数据类型
  18. c++排序(CList类库)
  19. 【数据库】达梦数据库更新key文件
  20. [转载]WIFI Direct/WIFI P2P

热门文章

  1. 车联网大数据框架_车联网大数据平台架构设计-系统总体架构
  2. 贴片钽电容的封装、尺寸和标…
  3. 【PTA L1-028】判断素数 开方判断质数
  4. 再探幻读!什么是幻读?为什么会产生幻读,MySQL中是怎么解决幻读的?
  5. Java相关证书,你考过哪个?
  6. 前后端分离的跨域问题
  7. coherence mysql_Coherence Step by Step 第三篇 缓存(四) 缓存数据源(翻译)
  8. 磁珠法RNA pull down试剂盒、蛋白质-核酸相互作用
  9. Java电子签章验章知识储备
  10. “食尸鬼行动”攻击30多个国家超过130家企业 包括中国