Evalml: 对于基线为 0 的某些目标,“pct 优于基线”为 nan

创建于 2020-11-20  ·  9评论  ·  资料来源: alteryx/evalml

{'F1': nan,
 'MCC Binary': nan,
 'Log Loss Binary': 93.29789549298991,
 'AUC': 58.36492736629537,
 'Precision': nan,
 'Balanced Accuracy Binary': 63.46659876071641,
 'Accuracy Binary': 12.876088314169193}

我创建了一个 Jupyter 笔记本,它在evalml中重现了这个问题,并将它和相关的数据文件附加到 Slack 中的一个线程中。

enhancement

最有用的评论

喜欢。 :-)

所有9条评论

复制器

import evalml
import pandas as pd
X = pd.read_csv('~/Downloads/fraud_500_data.csv').drop(['id', 'expiration_date'], axis=1)
y = X.pop('fraud')
automl = evalml.automl.AutoMLSearch(problem_type="binary", objective="f1")
automl.search(X, y)
# note that all percent_better_than_baseline values are nan in the rankings table
print(automl.rankings)
# can also check the scores of any pipeline other than the baseline pipeline, which should have id 0
print(automl.results['pipeline_results'][1]['percent_better_than_baseline_all_objectives'])

数据集在这里

@dsherry @rpeck这是预期的行为,因为基线管道在具有 NaN( F1MCCBinaryPrecision )的目标上得分为 0。 已经讨论过在此方法中将除以 0 设置为无穷大或无,但我们从未确定它们比 NaN 更好,因为如果基线在任何目标上得分最差,然后比较“更好的百分比”目标并没有多大好处,可以用 None、NaN 或无穷大来传达。

话虽如此,可能还有其他理由选择这些选项之一而不是 NaN!

@freddyaboulton啊,有道理! 我将更改测试以跳过基线为 0 的任何目标。谢谢!

谢谢@freddyaboulton@rpeck抱歉,当您昨天问我这件事时,我没有听懂。

让这个问题开放讨论:我们应该改变这种情况下的行为吗?

@freddyaboulton所以 F1、MCCBinary 和 Precision 都是越大越好的指标,并且在 [-1, 1] (corr) 或 [0, 1] 范围内。 我们可以改变 pct 改进 impl 来计算与 0 的绝对差并将其用作 pct 改进吗? 如果这就是我们目前正在做的事情,我不希望基线为 0 会为这些指标产生nan pct 改进。

@dsherry我们建议在设计阶段计算以 [0, 1] 为界的目标的绝对差异,但我们认为使用两种不同的计算会造成混淆。 话虽如此,我们或许应该重新考虑,因为基线管道几乎被设计为在这些目标上得分为 0,哈哈。 值得注意的是,当我们第一次做出这个决定时,我们只是在计算主要目标的百分比更好(除了回归之外,这不是这些有界目标之一)。

即使我们去计算绝对差,我们也可能要考虑改变 Nan/None/inf 除以 0 的行为。 一个值得考虑的有趣案例是R2 ,因为在大多数情况下它是 [0, 1] 但在技术上它是 (-inf, 1]。因此计算绝对差值可能在数学上并不合理,但因为它是回归的默认目标,我们应该会看到很多基线得分为 0。

总而言之,我们可以做出两个独立的改变,导致四种可能的结果:

  1. 不要计算 [0, 1] 范围内的目标的绝对差,除以 0 是 Nan。 当前行为。
  2. 不要计算 [0, 1] 中的目标的绝对差,除以 0 是 inf。
  3. 计算 [0, 1] 范围内目标的绝对差,除以 0 为 Nan。
  4. 计算以 [0, 1] 为界的目标的绝对差,除以 0 为 inf。

虽然我更喜欢在除以 0 时返回 NaN,但用户看到 NaN 时的直觉反应是假设 automl 中出现了问题。 我认为返回 inf 会更清楚地表明没有任何问题,并且管道实际上比基线更好。

剩下的选项 2 和 4。

我认为为“更好的百分比”进行两种不同的计算将使与用户交流每个管道实际计算的内容变得更加困难。 话虽如此,我们的基线管道旨在为许多目标(R2、F1、MCC)得分为 0,尤其是在不平衡问题中(我们只是预测模式)。 这使得“百分比更好”功能对于大多数实际问题不是很有用,因为所有管道都将比基线“无限”好。

我认为我倾向于选项 4 的 55% 和选项 2 的 45% 但我想在做出改变之前听听其他观点!

在今天的站立会议中,我们决定是时候更新“pct 比基线更好”的行为了。 我们将使用上面的选项 2 和 4:

  • 对无边界目标使用相对差异(MSE、对数损失等)
  • 对具有 [0, 1] 界限(AUC、R2 等)的目标使用绝对差
  • 我们将不得不处理像皮尔逊相关 ([-1, 1]) 这样的边缘情况
  • 如果存在除以 0 错误,则返回inf而不是nan

@freddyaboulton这符合我们讨论的内容吗?

喜欢。 :-)

进一步:我同意这个决定。 IMO,如果一个指标 [通常,至少] 0..1,那么从 0 到 0.2 _feels_ 就像提高了 20%,即使在数学上它不是。 在某种程度上,这让我想起了所有那些采用log数量的公式,但它们先加 1,这样它们就不会采用 0 的log 。:slightly_smiling_face:

此页面是否有帮助?
0 / 5 - 0 等级