机器学习之评估函数探究

。今天遇到有一个比较有趣的问题, 我想做一个分类问题,预测用户下单的概率,但是我出了对这个下单的概率感兴趣以外,还对下单的总人数感兴趣,中间可能考虑一些补贴的事宜,这个时候就有一个比较有意思的问题, 对于分类问题我们一般关注AUC即可,那么对于这个场景我是否能只关注AUC呢?因为考虑到下单人数的计数,我也想关注MAE,然后就产生了一个很好的问题, AUC和RMSE是否是完全同向的, 以及我们分类使用的交叉熵是否和MAE是同向的。接下来咱们就一个一个看吧。

交叉熵和MAE是不是完全同向的

import math

import numpy as np

# 真实标签,使用one-hot编码
true_labels = np.array([[1, 0], [0, 1], [1, 0]])

# 预测标签,使用softmax函数得到的输出
predicted_labels1 = np.array([[0.7, 0.3], [0.25, 0.75], [0.7, 0.3]])
predicted_labels2 = np.array([[0.6, 0.4], [0.4, 0.6], [1, 0]])


def cross_entropy(true_labels, predicted_labels):
    # 确保预测标签的值在0和1之间
    predicted_labels = np.clip(predicted_labels, 1e-15, 1 - 1e-15)
    # 计算交叉熵
    cross_entropy = -np.sum(true_labels * np.log(predicted_labels)) / true_labels.shape[0]
    return cross_entropy


def cross_mae(true_labels, predicted_labels):
    mae = np.mean(np.abs(true_labels - predicted_labels))
    return mae
# 调用函数计算交叉熵
cross_entropy_val1 = cross_entropy(true_labels, predicted_labels1)
mae1 = cross_mae(true_labels, predicted_labels1)
cross_entropy_value2 = cross_entropy(true_labels, predicted_labels2)
mae2 = cross_mae(true_labels, predicted_labels2)
print("交叉熵值:", cross_entropy_val1, cross_entropy_value2)
print("MAE:", mae1, mae2)

通过上面这个代码可以发现,我们训练的时候用的是交叉熵, 但是使用的时候也可能会出现模型偏好是居中的判断,MAE更偏好极端的判断,所以在业务场景下需要谨慎看损失函数和评估指标的关系。

AUC是否和MAE是完全同向的呢?

这也引入了一个问题,对于分类模型的评估我们一般使用AUC,刚刚我们的业务背景是这样的,但是我们也关心转化人数, 那么是否我们的模型的AUC变好了。

import numpy as np
from sklearn.metrics import roc_auc_score, mean_squared_error, mean_absolute_error

# 真实标签
y_true = np.array([1, 1, 1, 0, 1])

# 预测分布1:AUC较高,RMSE较大
y_pred1 = np.array([0.8, 0.8, 0.6, 0.6, 0.7])

# 预测分布2:AUC较低,RMSE较小
y_pred2 = np.array([1, 1, 0, 0, 1])

# 计算AUC
auc1 = roc_auc_score(y_true, y_pred1)
auc2 = roc_auc_score(y_true, y_pred2)

# 计算RMSE
rmse1 = np.sqrt(mean_absolute_error(y_true, y_pred1))
rmse2 = np.sqrt(mean_absolute_error(y_true, y_pred2))

print(auc1, rmse1, auc2, rmse2)

上面这个case能够看出来,当AUC一致的情况下, MAE可以相差很大。通过上面这个case是否发现,让我们模型出现模型过拟合的时候,经常就会遇到AUC高的时候,MAE也大。

总而言之

这个问题不知道大家是否觉得有趣,大家面对业务场景千奇百怪, 对于评估经常也是墨守成规,希望通过这个case 能让大家感受到基础知识的重要性,再结合上业务才是真正的大杀器!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×