0

我已经将测试集解决方案文件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

提前感谢您的帮助。

4

1 回答 1

1

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

所以你的计算一定有问题。你分类得当吗?

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

更新:我现在看到他们以一种有点骇人听闻的方式滥用 ROC AUC。它仍然会起作用,尽管它很丑陋。您失去的是 AUC=1.0 是“完美”而 AUC=0.0 是“反向”的良好语义。如果这个数据集的 CTR 是恒定的,那么在这个度量上你能做的最好的实际上是 0.5!

但是,我看不到如何获得小于 0.5 的值。你能找到一个发生这种情况的小示例数据集吗?您能否验证所有值都在域内正确(例如,没有负面点击!)

于 2013-07-08T07:56:24.437 回答