Kaggle知识点:深入赛题理解核心发表时间:2023-06-14 11:33作者:沃恩智慧 当开始一个算法竞赛的时候,赛题理解是我们的首要工作,也是非常重要的部分。赛题理解其实是从直观上梳理问题,分析问题可解的方法、赛题背景是什么样的、赛题的主要痛点有哪些。理清一道赛题要从赛题背景引发的赛题任务出发,理解其中的业务逻辑以及可能对赛题有意义的外在数据有哪些,并对于赛题数据有一个初步了解,知道现在和任务相关的数据有哪些,其中数据之间的关联逻辑是什么样的。通常赛题任务会给出赛题背景、赛题数据和评价指标。赛题理解的这一部分工作会成为竞赛的重要组成部分和先决条件,通过对赛题的理解,对真实业务的分析,我们可以用自身的先验知识进行初步分析,很好地为接下来的部分做出铺垫。 业务背景深入业务竞赛本身是因特定场景而存在的,同时很多操作也会因场景的不同而大不一样。这里提到的场景指的就是业务,那么该如何分析业务呢。 比如,分析用户的购买行为,这里就需要知道用户购买的目的、所购买产品的哪方面能够吸引用户、公司能够提供什么产品、产品与用户需求是否一致、目标用户定位、用户复购情况、用户的购买能力和支付方式。简而言之,就是把自己当作商家或者用户来换位思考梳理这个过程。 接下来进行一次更直观的业务理解,以此展示出实际竞赛中的分析过程,如下图所示。这是一个以互联网金融信贷业务为背景的赛题,目标是预测用户还款金额与日期,也就是预测用户的还款情况。如果从商家的角度考虑,用户的还款意愿和还款能力将成为影响还款情况的关键因素。接下来,我们一起串一下业务线。首先,用户去借贷,商家就会考虑用户借贷的金额、用户是否有欺诈倾向和历史借贷情况;然后,用户借贷成功,商家要考虑用户当前的负债情况、距离还款时间和以及工资日;最后,用户成功还款,商家要分析用户逾期情况、所剩欠款和当前期数等。这样就模拟出了基础的业务线。 上文介绍了如何进行业务理解,在接下来的内容中,我们将阐述如何将赛题目标与业务紧密联合起来,为竞赛成绩带来收益。 明确目标真实业务涵盖的内容通常来说比竞赛涉及的更加广泛,因此赛题目标只是其中的一部分,真实业务还包括主办方提供的数据。在上面的例子中,赛题目标是预测用户还款金额与日期,那么参赛者可以先根据此目标来分析相关业务,即影响用户还款的因素等;然后再将业务中的信息反馈到赛题目标中,即工资日、总借款次数等。将赛题目标与真实业务紧密连接在一起的是数据,有了具体的数据才能根据业务提取出特征来显性表示用户还款的情况,所以为进一步深入理解赛题还需要对数据有一个初步的认识。 数据理解我们可以将数据理解分为两个部分,分别是数据基础层和数据描述层。当然,在问题建模阶段并不需要对数据有特别深的理解,只需要做基本的分析即可,在后面数据探察阶段再深入理解数据,从数据中发现关键信息。 数据基础层各种竞赛主办方提供的原始数据质量良莠不齐,数据形态如数据类型、存储格式等也是多种多样。为了进一步分析和建模,往往需要对原始数据进行清洗、加工和计算等处理。数据基础层重点关注的是每个数据字段的来源、生产过程、取数逻辑、计算逻辑等,了解了这些才能正确地理解、选取并使用每一个原始字段,从而加工计算得出所需的更多衍生字段,数据最终的呈现方式通常是数据表格。 数据描述层数据描述层主要是在处理好的数据基础层上进行统计分析和概括描述,这个层面的重点在于尽可能地通过一些简单统计量(如均值、最值、分布、增幅、趋势等)来概括整体数据的状况,也使得参赛者能够清晰地知晓数据的基本情况。然而具体使用哪些统计量,并没有统一的标准,这要根据数据呈现的具体场景而定。比如,对于时间序列问题,可以统计其增幅、趋势和周期;对于常规的数值特征,则可以观察其均值、最值和方差等统计量;对于存在多类别的样本集合,则可以使用分布、分位点等进行描述。基于以上这两个层面的数据探索,参赛者可以对数据有一个基本的认识,这些理解将会对之后进行的数据预处理、特征提取等起到关键性的作用。 评价指标分类指标分类问题不仅是竞赛中常出现的一种核心问题,也是实际应用中常见的一种机器学习问题。评价分类问题的效果要比评价回归问题的效果困难很多,这两类问题都包含各式各样的评价指标。本书将会撇开传统的介绍方式,结合实际应用出发,总结评价指标的特性和优缺点,帮助参赛者在竞赛中获得一定收益。竞赛中常见的分类指标包括错误率、精度、准确率(precision,也称查准率)、召回率(recall,也称查全率)、F1-score、ROC曲线、AUC、和对数损失(logloss)等。其实这些指标衡量的都是模型效果的好坏程度,且相互之间是有关系的,只是各自的侧重点不同。在我们理解了各指标的定义后就能找出它们的区别与联系,下面将对上述指标进行简单的介绍,并给出一个例子来解释这些指标。
在分类问题中,错误率是分类结果错误的样本数占样本总数的比例,精度则是分类结果正确的样本数占样本总数的比例。即错误率=1-精度。
以最简单的二分类为例,下图给出了混淆矩阵的定义来源,其中TP、FN、FP、TN分别表示各自群体的样本数量。 混淆矩阵 其中基本的逻辑是,对模型预测出的概率值给定一个阈值。若概率值超过阈值,则将样本预测为1(Positive,正类),否则预测为0(Negative,负类)。
(1)准确率是指被分类器判定为正类的样本中真正的正类样本所占的比重,即被分类器判为正类的所有样本中有多少是真正的正类样本,其公式定义如下: 由此易知,如果只做一个单独的正样本预测,并且预测类别正确,则通过此公式可得到100%的准确率。但这没有什么意义,这会使得分类器忽略除正样本之外的数据,因此还需考虑另一个指标,即召回率。 (2)召回率是指被分类器正确判定的正类样本占总的正类样本的比重,即所有正类样本中有多少被分类器判为正类样本,定义如下: 准确率和召回率反映了分类器性能的两个方面,单依靠其中一个并不能较为全面地评价一个分类器的性能。一般来说,鱼与熊掌不可兼得,你的准确率越高,召回率越低;反之,召回率越高,准确率越低。继而为了平衡准确率和召回率的影响,较为全面地评价一个分类器,便有了F1-score这个综合了这两者的指标。
很多机器学习分类问题都希望准确率和召回率能同时都高,所以可以考虑使用调和平均公式,以均衡这两个指标,从而避免在使用算术平均时,由于其中一个较高,另一个较低,出现均值虚高的现象。F1-score就能起到这样一个作用,其定义如下: 容易看出其最大值是1,最小值是0。构建一个计算准确率、召回率和F1-score的评价代码也很简单,具体实现代码如下:
除了上述几种评价指标之外,还有一种常用于度量分类中的非均衡性的工具,即ROC曲线(接受者操作特征曲线)。ROC曲线用于绘制采用不同分类阈值时的TP率与FP率。降低分类阈值会导致更多样本被归为正类别,从而增加假正例和真正例的个数。如图2.3所示是一个比较典型的ROC曲线。另外,ROC曲线与AUC常被用来评价一个二值分类器的优劣,那么这里就有一个问题,既然已经有了这么多评价指标,那么为什么还要使用ROC曲线呢? 在实际的数据集中经常会出现正负样本不均衡的现象,即负样本比正样本多很多(或者相反),而且测试集中正负样本的分布也可能随着时间发生变化。ROC曲线有一个很好的特质就是在这种情况下,它依然能够保持不变。不过ROC曲线在竞赛中倒是不常见,反而AUC可以说是我们的老朋友,在分类问题中经常出现。
在互联网的搜索、推荐和广告的排序业务中,AUC是一个极其常见的评价指标。它定义为ROC曲线下的面积,因为ROC曲线一般都处于y=x这条直线的上方,所以取值范围在0.5到1之间,使用AUC作为评价指标是因为ROC曲线在很多时候并不能清晰地说明哪个分类器效果更好,而AUC作为一个数值,其值越大就代表分类器效果越好。 值得一提的是AUC的排序特性。相对于准确率、召回率等指标,AUC指标本身和模型预测的概率绝对值无关,它只关注样本间的排序效果,因此特别适合用作排序相关问题建模的评价指标。AUC是一个概率值,我们随机挑选一个正样本和一个负样本,由当前的分类算法根据计算出的分数将这个正样本排在负样本前面的概率就是AUC值。所以,AUC值越大,当前的分类算法就越有可能将正样本排在负样本值前面,即能够更好地分类。 深度思考:既然AUC与模型预测的分数值无关,那这为何是很好的特性?假设你采用的是准确率、F1-score等指标,而模型预测的分数是个概率值,那么就必须选择一个阈值来决定把哪些样本预测为1,哪些预测为0。阈值的选择不同,准确率、召回率与F1-score的值就会不同,而AUC可以直接使用模型预测分数本身,参考的是相对顺序,更加好用。在竞赛任务中,参赛者更是省去了试探阈值的麻烦。
该指标可用于评价分类器的概率输出。对数损失通过惩罚错误的分类来实现对分类器的准确度的量化。最小化对数损失基本等价于最大化分类器的准确度。为了计算对数损失,分类器必须提供概率结果,即输入样本喂入模型后预测得到每个类别0-1之间的概率值, 而不只是最可能的类别。对数损失函数的函数标准形如下: 对于样本点(x,y)来说,y是真实标签,在二分类问题中,其取值只可能为0或1。假设某个样本点的真实标签为yi, 该样本点取yi=1的概率为yp,则该样本点的损失函数如下: 我们不妨想想,AUC同样是只需要给出模型预测的概率值,就能计算并衡量模型效果,那么对数损失与它的区别在哪里呢? 对数损失主要是评价模型预测的概率是否足够准确,它更关注和观察数据的吻合程度,而AUC评价的则是模型把正样本排到前面的能力。由于两个指标评价的侧重点不一样,因此参赛者考虑的问题不同,所选择的评价指标就会不同。对于广告CTR预估问题,如果考虑广告排序效果,就可以选择AUC,这样也不会受到极端值的影响。此外,对数损失反映了平均偏差,更偏向于将样本数量多的那类划分准确。 深度思考:在各种数据竞赛的分类问题中,AUC和对数损失基本是最常见的模型评价指标。通常来说AUC和对数损失比错误率、精度、准确率、召回率、F1-score更常用,这是为什么呢?因为很多机器学习模型对分类问题的预测结果都是概率值,如果要计算上述这些指标,就需要先把概率转化成类别,这需要人为设置一个阈值,如果对一个样本的预测概率高于这个阈值,就把这个样本判到相应类别里面;如果低于这个阈值,则放进另一个类别里面。所以阈值的选取在很大程度上影响了分值的计算,不利于准确评价参赛者的模型效果,而使用AUC或者对数损失则可以避免把预测概率转换成类别的麻烦。 回归指标
首先考虑一个问题,如何去衡量一个回归模型的效果如何呢?大家自然而然地会想到采用残差(真实值与预测值的差值)的均值,如下: 可是这里会存在一个问题,当真实值分布在拟合曲线两侧时,对于不同样本而言残差有正有负,直接相加就会相互抵消,因此考虑采用真实值和预测值之间的距离来衡量模型效果,即平均绝对误差(MAE,Mean Absolute Error),又被称为L1范数损失,其定义如下: 平均绝对误差虽然解决了残差加和的正负抵消问题,能较好衡量回归模型的好坏,但是绝对值的存在导致函数不光滑,在某些点上不能求导。即平均绝对误差不是二阶连续可微的,同时二阶导数总为0。 扩展学习:在XGBoost里面可以使用平均绝对误差作为损失函数进行模型训练,但是由于其存在局限性,大家通常会选择Huber损失进行替换。那为何要使用Huber损失呢?由于平均绝对误差并不是连续可导的(在0处不可导),所以需要使用可导目标函数来逼近平均绝对误差。而对于下述将会讲到的均方误差(MSE),梯度又会随着损失的减小而减小,使预测结果更加精确。在这种情况下,Huber损失就非常有用,它会由于梯度的减小而落在最小值附近。比起均方误差,Huber损失对异常点更具有鲁棒性。因此,Huber损失结合了平均绝对误差和均方误差的优点。但是,Huber损失的问题是我们可能需要不断地调整超参数delta。
和平均绝对误差对应的还有均方误差(MSE,Mean Squared Error),又被称为L2范数损失,其定义如下: 由于均方误差与数据标签的量纲不一致,因此为了保证量纲一致性,通常需要对均方误差进行开方,这也就出现了均方根误差(RMSE)。 深度思考:那么平均绝对误差与均方误差有何区别呢?均方误差对误差取了平方(误差=真实值-预测值),因此若误差>1,则均方误差会进一步增大误差。此时如果数据中存在异常点,那么误差值就会很大,而误差的平方则会远大于误差的绝对值。因此相对于使用平均绝对误差计算损失,使用均方误差的模型会赋予异常点更大的权重。即均方误差对异常值敏感,平均绝对误差对异常值不敏感。
均方根误差(RMSE)用来评价回归模型的好坏,是对均方误差进行开方,缩小了误差的数值,其定义如下: 上面介绍的几种衡量标准的取值大小都与具体的应用场景有关,因此很难定义统一的规则来衡量模型的好坏。同样,均方根误差也存在一定的局限性。例如,在计算广告的应用场景中,需要预测广告的流量情况时,某些离群点可能导致均方根误差指标变得很差,即使模型在95%的数据样本中都能预测得很好。如果我们不选择过滤掉离群点,就需要找一个更合适的指标来评价广告流量的预测效果。下面就将介绍平均绝对百分百误差(MAPE),它是比均方根误差更加鲁棒的评价指标,相当于把每个点的误差进行了归一化,降低了个别离群点对绝对误差带来的影响。
平均绝对百分比误差(MAPE)与平均绝对误差的二阶导数都是不存在的。但不同于平均绝对误差,平均绝对百分比误差除了考虑预测值与真实值的误差,还考虑了误差与真实值之间的比例,比如2019年腾讯广告算法大赛,虽然预测值与真实值的差值是一样的,但是由于使用了平均绝对百分比误差来评测,因此其真实值越大,误差反而越小,平均绝对百分比误差的定义如下: |