CatBoost unbiased boosting with categorical features
arxiv [Submitted on 28 Jun 2017 , last revised 20 Jan 2019 ]
代码:https://github.com/catboost/catboost
摘要
本文介绍了 CatBoost(一种新的梯度提升工具包)背后的关键算法技术。它们的结合导致 CatBoost 在各种数据集的质量方面优于其他公开可用的提升实现。CatBoost 中引入的两个关键算法进步是有序提升的实现、经典算法的排列驱动替代方案,以及用于处理分类特征的创新算法。这两种技术都是为了对抗由当前所有现有的梯度提升算法实现中存在的一种特殊目标泄漏引起的预测偏移。在本文中,作者对该问题进行了详细的分析,并证明了所提出的算法有效地解决了该问题,从而获得了出色的实证结果。
1 Introduction(介绍)
梯度提升是一种强大的机器学习技术,可在各种实际任务中实现最先进的结果。多年来,它一直是学习具有异构特征、嘈杂数据和复杂依赖关系的问题的主要方法:网络搜索、推荐系统、天气预报等。梯度提升本质上是通过在函数空间中执行梯度下降来构建集成预测变量的过程。它得到了坚实的理论结果的支持,这些结果解释了如何通过以贪婪的方式迭代组合较弱的模型(基本预测变量)来构建强预测变量。
在原文中,作者表明,所有现有的梯度提升实现都面临着以下统计问题。经过几个步骤的提升后获得的预测模型 F F F 依赖于所有训练示例的目标。作者证明,这实际上导致了训练样本 x k x_k xk的 F ( x k ) ∣ x k F(x_k)| x_k F(xk)∣xk 分布与测试样本 x x x 的 F ( x ) ∣ x F(x)|x F(x)∣x 分布的偏移。这最后会导致学习模型的预测偏移。作者在第 4 章中将此问题确定为一种特殊类型的目标泄漏。此外,在预处理分类特征的标准算法中也存在类似的问题。在梯度提升中使用它们的最有效方法之一是将类别转换为其目标统计数据。目标统计量本身就是一个简单的统计模型,它还可能导致目标泄漏和预测偏移。作者将在第 3 章中对此进行分析。
在原文中,作者提出了解决这两个问题的排序原则。依靠它,作者推导出了有序提升,这是对标准梯度提升算法的修改,它避免了目标泄漏(第 4 章),以及用于处理分类特征的新算法(第 3 章)。它们的组合被实现为一个名为 CatBoost(用于“分类提升”)的开源库,它优于现有的梯度提升决策树的先进实现——XGBoost和 LightGBM——onadiversesetofpopular 机器学习任务(参见第 6 章)。
2 Background(背景)
本文讨论了使用带有示例的数据集来训练预测结果的函数。每个示例都有特征和目标值,目标值可以是数字或类别。它引入了梯度提升,该方法通过在先前的预测基础上添加新的预测来逐步改善预测,旨在减少错误。该过程包括使用牛顿方法或梯度步骤等数学技巧,在每个步骤中选择最佳加法,以更接近正确答案。CatBoost 是一种特殊类型的梯度提升,它使用决策树,决策树根据特征值将数据分成几组以进行预测。决策树根据特征将数据分成不同的部分,并为每个部分分配预测结果,从而帮助完成猜测数字或类别等任务。
3 Categorical features(分类特征)
3.1 Related work on categorical features(分类特征的相关工作)
分类特征是具有一组离散值(称为类别)的特征,这些值彼此之间没有可比性。在提升树中处理分类特征的一种流行技术是单热编码,即为每个类别添加一个新的二进制特征来指示它。然而,在高基数特征(例如,“用户ID”特征)的情况下,这种技术会导致大量新特征。为了解决这个问题,可以将类别分组到有限数量的集群中,然后应用单热编码。一种常用方法是按目标统计量(TS)对类别进行分组,这些统计量估计每个类别的预期目标值。Micci-Barreca 建议将TS视为一种新的数值特征。重要的是,在所有可能的类别划分为两组中,在数值 TS 特征的阈值中可以找到训练数据在对数损失、基尼指数、MSE 方面的最优划分。在 LightGBM 中,分类特征在梯度提升的每个步骤中都转换为梯度统计。虽然这种方法为构建树提供了重要信息,但这种方法会显著增加(i)计算时间,因为它在每个步骤中都会计算每个分类值的统计数据,以及(ii)内存消耗,以存储基于分类特征的每个拆分的哪个类别属于哪个节点。为了克服这个问题,LightGBM 将尾部类别分组到一个集群中,从而丢失了部分信息。此外,其作者声称将具有高基数的分类特征转换为数值特征会更好。请注意,TS 功能仅要求为每个类别计算和存储一个数字。
因此,使用 TS 作为新的数值特征似乎是将信息损失降至最低的处理分类特征的最有效方法。TS被广泛使用,例如,在点击预测任务(点击率)中,用户、地区、广告、发布商等分类特征起着至关重要的作用。作者进一步关注TS的计算方法,而将one-hot编码和梯度统计排除在本文的范围之外。同时,我们认为本文提出的排序原则对于梯度统计也有效。
3.2 Target statistics(目标统计)
简单来说,作者认为,要处理数据中的类别,需将每个类别替换为基于目标统计数据的数字,例如该类别的平均结果。一种简单的方法是对每个类别的结果求平均值,但需要使用平滑系数对稀有类别进行调整。但此方法可能导致 “目标泄漏”,即模型从不应获得的数据中获得提示,从而导致新数据性能不佳。一个示例表明,如果每个类别都是独一无二的,则该模型在训练中看起来很完美,但在处理新数据时会失败。为避免出现问题,一种解决方案是计算从数据集中排除当前示例的统计数,将数据分成两部分,一部分用于计算统计数据,另一部分用于训练,可以起作用,但会浪费数据。而另一种方法,即排除漏洞,也试图防止泄漏,但并不总是有效,尤其是在类别恒定的情况下。而CatBoost 是一种更先进的方法,它随机排序数据,并根据所见示例的 “历史记录” 计算统计数据,有效使用所有数据并避免泄漏。
4 Prediction shift and ordered boosting(预测偏移和有序提升)
4.1 Prediction shift(预测偏移)
梯度提升中的预测偏移是一个新问题,类似于目标泄漏,即模型的预测偏离了应有的水平。受有序目标统计方法的启发,作者引入了有序提升作为解决方案,以修复这种偏移。之所以出现问题,是因为该模型使用相同的数据进行学习和预测,从而导致预期结果不匹配。这种不匹配会影响模型对新的、看不见的数据做出准确预测的能力。先前的研究提到了这种转变,但没有正式定义或证明这一点。有些人试图用迭代装袋和子抽样等方法来修复这个问题,但这些并不是完美的解决方案。本文通过一个具有两个特征的简单示例分析了预测偏移,并说明了在所有提升步骤中使用相同的数据会导致偏差。如果每个提升步骤都使用独立的数据集,则该模型可以毫无偏见地准确预测真实关系。在所有步骤中使用相同的数据集会产生偏差,这种偏差在较小的数据集中会变得更糟,并且取决于建模的特定关系。提供的证据显示了偏差如何发生并影响模型的预测,从而导致预测偏移。此问题类似于统计模型中的目标泄漏,在统计模型中,使用目标数据进行预测会导致预期结果发生变化。
4.2 Ordered boosting(有序提升)
在这里,作者提出了一种提升算法,该算法不受第 4.1 节中描述的预测偏移问题的影响。假设可以访问无限量的训练数据,我们可以很容易地构建这样的算法。在提升的每个步骤中,我们独立采样一个新的数据集 D t D_t Dt,并通过将当前模型应用于新的训练示例来获得未移位的残差。然而,在实践中,标记的数据是有限的。假设我们有一个 I I I 树的模型。为了使残差 r I − 1 ( x k , y k ) r^{I-1}(x_k,y_k) rI−1(xk,yk) 不移位,我们需要在没有示例 x k x_k xk 的情况下训练 F I − 1 F^{I-1} FI−1。由于我们需要所有训练样本的无偏残差,因此不能使用任何样本来训练 F I − 1 F^{I-1} FI−1,乍一看,这似乎使训练过程变得不可能。但是,可以维护一组模型,这些模型因用于训练的示例而异。然后,为了计算示例上的残差,我们使用一个没有它训练的模型。为了构建这样一组模型,我们可以使用之前在第 3.2 节中应用于 TS 的排序原则。为了说明这个想法,假设我们采用训练样本的一个随机排列 σ \sigma σ,并保持 n