我们定义并开放了预测能力得分(PPS)。 PPS是可以在数据中找到更多模式的关联的替代方法。

相关性有太多问题

现在是星期五下午,您的老板告诉您,数据传递令人惊讶地提前到来了-来回仅4周。 这是您的预测模型缺少的部分。 您很兴奋,但也有点着急,因为您知道接下来的事情:浏览数据。 所有。 45.列。 这将花费许多小时,但您知道这是值得的,因为如果没有数据了解,您就会失明。 一个显而易见的步骤是查看所有单变量列分布。 但这还不够。

您问自己:列之间存在什么关系?

要回答这个问题,您只需重复典型的练习即可:计算相关矩阵并检查一些令人惊讶的关系。 每当您感到惊讶时,您都花一点时间绘制手头两列的散点图,看看您是否可以理解。 希望您可以,但通常却不能,因为您根本不知道这些列的含义。 但这是另一天的故事。

在检查了相关矩阵之后,您继续前进,甚至不知道自己不知道的(可怕的)。

我们花一点时间来回顾一下相关性。 分数在-1到1之间,表示是否存在强线性关系(正向还是负向)。 到现在为止还挺好。 但是,分数根本无法检测到许多非线性关系。 例如,窦波,二次曲线或神秘阶跃函数。 分数将是0,表示:"这里没什么有趣的"。 同样,仅为数字列定义相关性。 因此,让我们删除所有类别列。 在我的上一个项目中,超过60%的列是分类的,但是,嘿。 没关系。 不,我不会转换这些列,因为它们不是序数,并且OneHotEncoding将创建一个矩阵,该矩阵具有比宇宙中原子更多的值。

mvp预测本赛季(相关性可以歇菜了)(1)

> Too many scenarios where the correlation is 0. This makes me wonder if I missed something… (Excer

如果您受过良好的教育,您会知道相关矩阵是对称的。 因此,您基本上可以扔掉一半。 太好了,我们在那里节省了一些工作! 还是我们? 对称性意味着无论您计算A与B的相关性还是B与A的相关性,相关性都是相同的。但是,现实世界中的关系很少是对称的。 关系经常是不对称的。 这是一个例子:上次检查时,我的邮政编码60327告诉陌生人我住在德国法兰克福。 但是,当我只告诉他们我的城市时,他们却永远无法推断出正确的邮政编码。 PFF…业余爱好者。 另一个例子是:具有3个唯一值的列将永远无法完美预测具有100个唯一值的另一列。 但是事实可能恰恰相反。 显然,不对称很重要,因为它在现实世界中非常普遍。

考虑到相关性的那些缺点,我开始怀疑:我们可以做得更好吗?

要求:去年的一天,我梦见一个分数,该分数将告诉我两列之间是否存在任何关系-无论该关系是线性,非线性,高斯还是仅被外星人知道。 当然,分数应该是不对称的,因为我想检测城市和邮政编码之间的所有奇怪关系。 如果没有关系,则分数应为0;如果存在完美的关系,则分数应为1。 锦上添花的是,该分数应该能够立即解决分类和数字列的问题。 为我所有的学术朋友总结一下:两个列之间的预测关系的不对称,数据类型不可知分数,范围从0到1。

计算预测能力得分(PPS)

首先,没有一种唯一的方法来计算预测能力得分。 实际上,有许多种方法可以计算出满足前面提到的要求的分数。 因此,我们宁可将预测能力得分视为一系列得分的框架。

假设我们有两列,并且想要计算A预测B的预测能力得分。在这种情况下,我们将B作为目标变量,将A作为我们的(唯一)特征。 现在,我们可以计算交叉验证的决策树,并计算合适的评估指标。 当目标是数字时,我们可以使用决策树回归器并计算平均绝对误差(MAE)。 当目标是分类时,我们可以使用决策树分类器并计算加权F1。 您也可以使用ROC等其他分数,但由于我们还有另一个问题,让我们将这些疑问搁置一秒钟。

如果不将其与基准进行比较,大多数评估指标将毫无意义。

我想大家都知道这种情况:您告诉奶奶您的新车型F1得分为0.9,所以她不像您那样兴奋。 实际上,这对她来说是非常聪明的,因为她不知道有人能得分0.9还是您是成千上万了不起的KAGGLErs尝试过后第一个得分超过0.5的人。 因此,我们需要"标准化"我们的评估分数。 您如何标准化分数? 您定义一个上限和下限,然后将分数记入透视图。 那么下限和上限应该是多少? 让我们从上限开始,因为通常这比较容易:理想的F1是1。理想的MAE是0。 做完了 但是下限呢? 实际上,我们不能绝对地回答这个问题。

下限取决于评估指标和您的数据集。 这是天真的预测器实现的价值。

如果您的F1分数达到0.9,则可能会非常糟糕或非常好。 如果您的超级癌症检测模型始终预测为"良性",并且在该高度偏斜的数据集上仍得分为0.9,则显然不是那么好。 因此,我们需要为一个非常幼稚的模型计算分数。 但是什么是天真的模型? 对于分类问题,总是预测最普通的类是非常幼稚的。 对于回归问题,始终预测中位数非常幼稚。

让我们看一个详细的虚构示例:

回到邮政编码和城市名称的示例。 想象两列都是分类的。 首先,我们要计算到城市的邮政编码的PPS。 因为城市是分类的,所以我们使用加权F1分数。 我们的经过交叉验证的决策树分类器得分为0.95 F1。 我们通过始终预测最常见的城市并获得0.1 F1的分数来计算基线分数。 如果对分数进行归一化,则应用以下归一化公式后,最终的PPS将为0.94:(0.95-0.1)/(1-0.1)。 正如我们所看到的,PPS得分为0.94相当高,因此邮政编码似乎对城市具有良好的预测能力。 但是,如果我们在相反方向上计算PPS,则可能会获得接近0的PPS,因为决策树分类器并不比总是预测最常用的邮政编码好得多。

请注意:MAE的归一化公式与F1不同。 对于MAE,越低越好,最佳值为0。

将PPS与相关性进行比较

为了更好地了解PPS及其与相关性之间的差异,我们来看以下两个示例:

示例1:非线性效应和不对称

mvp预测本赛季(相关性可以歇菜了)(2)

> Example 1: Comparison of Correlation to PPS for y=x²

让我们使用一种典型的二次关系:特征x是一个统一变量,范围是-2到2,目标y是x的平方加上一些误差。 在这种情况下,x可以很好地预测y,因为存在明显的非线性二次关系-毕竟这就是我们生成数据的方式。 但是,这在从y到x的另一个方向上是不正确的。 例如,如果y为4,则无法预测x大约为2还是-2。 因此,预测关系是不对称的,得分应反映这一点。

在此示例中,分数的值是多少? 如果您尚不知道要寻找的内容,则相关性将使您垂涎三尺,因为相关性为0。因为相关性是对称的,所以从x到y以及从y到x都是如此。 但是,从x到y的PPS为0.88,可以检测非线性关系并节省时间。 但是,PPS不是1,因为在关系中存在一些错误。 在另一个方向上,从y到x的PPS为0,因为y仅知道自己的值没有关系可以预测。 这与我们之前所做的观察一致。

示例2:分类列和隐藏模式

让我们将相关矩阵与Titanic数据集上的PPS矩阵进行比较。 "泰坦尼克号数据集? 再次??" 我知道,您可能认为您已经了解了有关Titanic数据集的所有内容,但是PPS可能会为您提供一些新见解。

mvp预测本赛季(相关性可以歇菜了)(3)

mvp预测本赛季(相关性可以歇菜了)(4)

> Example 2: Comparing the Pearson correlation matrix (left) with the PPS matrix (right) for the Tit

有关相关矩阵的两个发现:

· 相关矩阵较小,并且省略了许多有趣的关系。 当然,这是有道理的,因为诸如Sex,TicketID或Port之类的列是分类的,并且无法为它们计算相关性。

· 相关矩阵显示TicketPrice与中等强度等级(-0.55)之间呈负相关。 如果我们查看PPS,我们可以仔细检查这种关系。 我们将看到TicketPrice是该类(0.9 PPS)的有力预测指标,但反之亦然。 该类仅以0.33的PPS预测TicketPrice。 这是有道理的,因为您的机票价格是5.000美元还是10.000美元,您很可能是最高级的。 相反,如果您知道某人是最高阶层的人,则无法说出他们是为门票支付了5.000美元还是10.000美元。 在这种情况下,PPS的不对称性再次发光。

有关PPS矩阵的四个发现:

· 矩阵的第一行告诉您Survived列的最佳单变量预测变量是Sex列。 这是有道理的,因为在救援过程中优先考虑了妇女。 (由于删除了"性别"列,因此我们无法在相关矩阵中找到此信息。)

· 如果您查看TicketID的列,您会发现TicketID是一系列列的很好的预测指标。 如果进一步研究此模式,您将发现多个人具有相同的TicketID。 因此,TicketID实际上是指一组潜在的一起购买机票的乘客,例如,大意大利的Rossi一家人,他们将任何夜晚变成一个奇观。 因此,PPS帮助我检测到隐藏模式。

· 比TicketID的强大预测能力更令人惊讶的是,TicketPrice在各种列中的强大预测能力。 特别是,TicketPrice可以很好地预测TicketID(0.67),反之亦然(0.7)。 经过进一步研究,您会发现门票通常具有独特的价格。 例如,只有意大利的罗西家族支付了72,50美元的价格。 这是至关重要的见解! 这意味着TicketPrice包含有关TicketID的信息,因此也包含我们的意大利家庭的信息。 考虑潜在的信息泄漏时需要的信息。

· 查看PPS矩阵,我们可以看到因果链可能解释的影响。 (他只是说因果关系吗?—当然,这些因果关系的假设必须谨慎对待,但这不在本文的讨论范围之内。)例如,您可能会感到惊讶,TicketPrice对生存率具有预测能力(PPS 0.39) )。 但是,如果您知道该舱位会影响您的生存率(PPS 0.36),而TicketPrice可以很好地预测您的舱位(PPS 0.9),那么您可能已经找到了一个解释。

PPS和PPS矩阵的应用

在了解了PPS的优势之后,让我们看看在现实生活中可以在哪里使用PPS。

免责声明:PPS和关联都有用例。 对于在数据中查找预测模式,PPS显然比相关性具有一些优势。 但是,一旦找到模式,相关性仍然是传达找到的线性关系的一种好方法。

· 查找数据中的模式:PPS查找相关性找到的每个关系-以及更多。 因此,您可以使用PPS矩阵来替代相关矩阵,以检测和理解数据中的线性或非线性模式。 使用单个分数始终在0到1范围内的数据类型,这是可能的。

· 特征选择:除了通常的特征选择机制外,您还可以使用预测能力得分来为目标列找到好的预测因子。 此外,您可以消除仅添加随机噪声的功能。 这些功能有时在功能重要性指标上仍然得分很高。 此外,您可以消除其他功能无法预测的功能,因为它们不会添加新信息。 此外,您可以在PPS矩阵中识别成对的相互预测特征-这包括高度相关的特征,但也将检测非线性关系。

· 检测信息泄漏:使用PPS矩阵检测变量之间的信息泄漏-即使信息泄漏是通过其他变量来调节的。

· 数据规范化:通过将PPS矩阵解释为有向图来查找数据中的实体结构。 当数据包含以前未知的潜在结构时,这可能令人惊讶。 例如:泰坦尼克号数据集中的TicketID通常是一个家庭的指标。

与相关性相比,PPS有多快?

尽管PPS相对于相关性有很多优点,但存在一些缺点:计算时间更长。但这有多糟?是否需要数周的时间,或者我们需要在几分钟甚至几秒钟内完成?使用Python库计算单个PPS时,时间应该没有问题,因为通常需要10-500毫秒左右的时间。计算时间主要取决于数据类型,行数和使用的实现。但是,在计算40列的整个PPS矩阵时,这将导致40 * 40 = 1600的单独计算可能需要1-10分钟。因此,您可能想在后台开始计算PPS矩阵,然后继续您梦dream以求的暑假! ️对于我们的项目和数据集,计算性能始终足够好,但是当然还有改进的空间。幸运的是,我们看到了许多方法可以改进PPS的计算,以使速度增益提高10-100倍。例如,使用智能采样,试探法或PPS的不同实现。如果您喜欢PPS,并且需要更快的计算速度,请与我们联系。

如何在自己的(Python)项目中使用PPS

如果您仍在追随,您将是仍然受到关注的稀有人类之一,您就是疯狂的野兽! 如果您迫不及待想看到PPS将在您自己的数据上显示什么,那么我们对您来说有个好消息:我们将PPS的实现开源为一个名为ppscore的Python库。

在使用Python库之前,请花一点时间通读计算细节

安装软件包:

pip install ppscore

计算给定熊猫数据帧的PPS:

import ppscore as ppspps.score(df, "feature_column", "target_column")

您还可以计算整个PPS矩阵:

pps.matrix(df)

局限性

我们做到了–您很兴奋,并希望向您的同事展示PPS。 但是,您知道他们对新方法总是如此批评。 因此,您最好准备知道PPS的局限性:

· 计算比相关性(矩阵)慢。

· 分数不能像相关性那样容易地解释,因为它不会告诉您有关所找到的关系类型的任何信息。 因此,PPS更适合查找模式,而相关性更适合传达找到的线性关系。

· 您不能以严格的数学方式比较不同目标变量的分数,因为它们是使用不同的评估指标计算得出的。 分数在现实世界中仍然很有价值,但是您需要牢记这一点。

· 引擎盖下方使用的组件存在局限性。 请记住:您可能会交换组件,例如 使用GLM代替决策树,或使用ROC代替F1进行二进制分类。

· 如果您使用PPS进行功能选择,则您仍然需要执行向前和向后选择。 而且,PPS无法检测到目标之间的要素之间的交互作用。

结论

经过多年使用相关性,我们如此大胆(或疯狂?)提出了一种可以检测线性和非线性关系的替代方法。 PPS可以应用于数字列和分类列,并且是不对称的。 我们提出了一个实现并开源了一个Python包。 此外,我们在一些示例中显示了相关性的差异,并讨论了我们可以从PPS矩阵中得出的一些新见解。

现在由您决定对PPS的看法以及是否要在自己的项目中使用它。 作为图书馆Bamboolib库的一部分,我们已经使用PPS一年多了,在该库中PPS对于添加一些高级功能至关重要,因此我们希望与更广泛的社区共享PPS。 因此,我们希望收到您对该概念的反馈,如果您对自己的数据尝试PPS,我们将感到非常高兴。 如果收到积极的答复,我们很高兴听到您提出的有关调整或改进实施的要求。 正如我们之前提到的,有许多方法可以提高速度以及如何针对更具体的用例调整PPS。

GitHub:https://github.com/8080labs/ppscore

电子邮件:florian AT 8080labs.com

时事通讯:如果您想了解有关PPS以及我们即将推出的其他数据科学项目和工具的更多信息,可以在这里订阅。 我们不会写有关付费产品的信息,您可以随时退订,并且-甚至我们不得不提及这一点-我们永远不会放弃您的电子邮件。

(本文翻译自Florian Wetschoreck的文章《RIP correlation. Introducing the Predictive Power Score》,参考:https://towardsdatascience.com/rip-correlation-introducing-the-predictive-power-score-3d90808b9598)

,