作者:Pol Marin
我们的数据科学家是最多,但也是最误导的。
很久以前,我们发现模型的开发不仅仅是做出预测。我们创建模型来做出决策,这需要信任。依靠准确性是不够的。
在这篇文章中,我们将看到为什么,我们将检查其他替代方案,这些替代方案更高级和针对我们的需求进行量身定制。与往常一样,我们将按照实用的方法进行操作,最终的目标是深入研究标准指标以外的评估。
这是今天的目录:
精度对于分类算法而不是回归任务更有意义。因此,并非所有问题都是平等衡量的。
这就是我决定通过创建两个不同模型来解决这两个方案的原因。
而且它们非常简单,因为它们的性能和应用并不重要:
如果您是经常出现的读者,我相信足球例子的使用并不令人惊讶。
笔记:即使我们不会在回归问题上使用准确性,并且这篇文章被认为更加专注于该指标,但我并不希望将这些案件抛在后面。这就是为什么我们也会探索回归指标。
同样,因为我们不关心数据或性能,所以让我跳过所有预处理部分,直接进入模型本身:
#分类模型模型= LogisticRegress()model.fit(x_train_scaled,y_train)#梯度提升回归器模型=渐变boostingRegressor()model.fit(x_train_scaled,y_train)
如您所见,我们坚持简单的模型:二进制分类的逻辑回归,以及提高回归的梯度。
让我们检查我们通常检查的指标:
# 分类y_pred = model.predict(x_test_scaled)精度=准确_score(y_test,y_pred)打印(F“测试精度:{精度:.2%}”)
印刷精度为92.43%,诚实地比我预期的要高。模型真的那么好吗?
#回归y_pred = model.predict(x_test_scaled)rmse = np.sqrt(mean_squared_error(y_test,y_pred))打印(f“测试RMSE:{rmse:.4f}”)
我的RMSE为0.3059。不是那么好。但是,丢弃我们的回归模型是否足够?
我们需要做得更好。
太多的数据科学项目停止了准确性,这通常是误导性的,尤其是目标不平衡的目标(例如,得分目标很少)。
评估我们的模型是否真的预测该玩家会执行吗?–我们应该考虑以下其他指标:
我们现在不会测试所有这些,但是让我们简要介绍ROC-AUC和原木损失,这可能是精确度最高的。Roc-auc
接收器操作特征 - 曲线下的区域,是一个流行的度量标准,包括测量ROC曲线下的面积,这是一条曲线,该曲线将真实的正速率(TPR)与假阳性率(FPR)绘制。简而言之,ROC-AUC分数(从0到1)总结了模型可以产生相对得分的程度以区分所有分类阈值的正面或负面实例。”
得分为0.5表示随机猜测和1是完美的表现。
在Python中计算它很容易:
从sklearn.metrics导入roc_auc_score
roc_auc = roc_auc_score(y_test,y_proba)
在这里,y_true包含真实标签,y_proba包含我们的模型预测的prorbibals。在我的情况下,分数为0.7585,与准确性相比相对较低。但是,如果我们的精度超过90%,这怎么可能?
上下文:我们试图预测玩家是否会在比赛中得分。问题是这是高度不平衡的数据:大多数玩家都不会在比赛中得分,因此我们的模型知道预测0是最可能的,而没有真正了解数据本身的任何内容。
它可以正确地捕获少数族裔阶级,而准确性只能向我们展示。
对数损失,跨透镜或简单的对数损失用于评估概率输出的性能。它通过对数测量预测概率与实际(真)值之间的差异。
同样,我们可以在Python的一个单线上做到这一点:
来自sklearn.metrics导入log_losslogloss = log_loss(y_test,y_proba)
正如您可能猜到的那样,价值越低,越好。0将是完美的模型。就我而言,我得到了0.2345。
这也受到阶级不平衡的影响:对数损失惩罚了自信的错误预测,并且由于我们的模型在大多数情况下预测了0个,因此确实存在进球得分的情况会影响最终得分。
准确性在回归方面没有意义,但是我们有一些有趣的指标来评估在给定比赛中播放器得分多少目标的问题。
预测时连续的结果(例如,预期的会议记录,比赛等级,幻想点),简单的RMSE/MAE是一个开始,但我们可以走得更远。
其他指标和检查:
同样,让我们专注于它们的子组。
它也称为确定系数,它将模型的误差与基线误差进行了比较。得分为1是完美的拟合,0表示仅预测平均值,而低于0的值则意味着它比平均值预测差。
来自Sklearn.metrics导入R2_Scorer2 = r2_score(y_test,y_pred)
我的价值为0.0557,它非常接近0â€不好。
这根平方对数误差,或rmsle,测量平均平方差的平方根lOG转换的预测和实际值。当以下情况下,该指标很有用:
来自sklearn.metrics导入均值_squared_log_errorrmsle = np.sqrt(mean_squared_log_error(y_test,y_pred))
我得到了0.19684,这意味着我的平均预测错误约为0.2个目标。它不是那么大,但是鉴于我们的目标变量是0到4之间的值,并且高度偏向0!
它也称为弹球丢失,可用于分位数回归模型来评估我们的预测分位数的表现。如果我们构建一个分位数模型(梯度bloostingRegressor具有分位数损失),则可以按以下方式进行测试:
来自sklearn.metrics导入均值_pinball_lossalpha = 0.9q_loss = mean_pinball_loss(y_test,y_pred_quantile,alpha = alpha)
在这里,使用alpha 0.9,我们试图预测第90个百分位数。我的分位数损失为0.0644,在相对方面非常小(占目标变量范围的约1.6%)。
但是,分销很重要:我们的大多数y_test值是0,我们需要将其解释为平均而言,捕获上尾的模型错误非常低。
鉴于0个重量的目标,这尤其令人印象深刻。
但是,由于大多数结果是0,所以其他指标(如我们看到的和上面提到的指标)应用于评估我们的模型是否实际上表现良好。
构建预测模型远远超出了实现良好的准确性。
为了分类任务,您需要考虑数据不平衡的数据,概率校准以及定价或风险管理等实际用例。
为了回归,目标不仅是最大程度地减少错误,而且要了解不确定性至关重要,如果您的预测为策略或交易决策提供了信息。
最终,真正的价值在于:
如果您正确地理解了这些,那么您将不再建立另一个型号。您可以提供强大的决策准备工具。我们在这里探索的指标只是切入点。