在2012年kdd杯赛道2中使用AUC指标时,它真的合理吗?

时间:2013-07-08 03:28:38

标签: machine-learning data-mining

我已将测试集解决方案文件https://www.kddcup2012.org/c/kddcup2012-track2/download/KDD_Track2_solution.csv用于kdd cup 2012 track 2, 在此之后我只是作弊(实际上只是一个测试),使predict_ctr成为每个测试集实例的解决方案文件中#clicks / #impressions的比例,但AUC仍然很低:

我很困惑,这是否合理?甚至看起来像作弊,但我认为设计的ctr应该很好地匹配解决方案文件,如果设计的ctr是一个很好的预测,那么AUC度量可能无法代表该问题中学习算法的预测质量。

AUC  : 0.478290
NWMAE: 0.000000
WRMSE: 0.000000

相应的python代码片段如下:

num_clicks, num_impressions = read_solution_file(sys.argv[1])
predicted_ctr = [num_clicks[i]/num_impressions[i] for i in range(len(num_clicks))]
auc = scoreClickAUC(num_clicks, num_impressions, predicted_ctr)
print("AUC  : %f" % auc)
nwmae = scoreNWMAE(num_clicks, num_impressions, predicted_ctr)
print("NWMAE: %f" % nwmae)
wrmse = scoreWRMSE(num_clicks, num_impressions, predicted_ctr)
print("WRMSE: %f" % wrmse)

经过一些搜索,我知道如何计算auc,以及像http://www.kddcup2012.org/c/kddcup2012-track2/forums/t/1545/calculate-auc这样的一些问题

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

约0.5的AUC值随机。值0.0表示完全相反

所以你的计算肯定有问题。你排序了吗?

在某些情况下,在计算AUC时应特别注意;如处理关系。如果你天真地对数据进行排序,那么当你出现平局时,你可能会将所有正面或负面的例子放在开头,这是不公平的。最好使用实际上对角线的计算。

更新:我现在看到他们以一种有点hack的方式滥用ROC AUC。它仍然会有所作为,虽然它很难看。你失去的是AUC = 1.0的“完美”和AUC = 0.0是“反向”的好语义。如果此数据集上的点击率保持不变,那么您对该度量的最佳效果实际上是0.5!

但是我没有看到如何获得小于0.5的值。你能找到一个小例子数据集吗?您是否可以验证所有值在域中是否正确(例如,没有负面点击!)