-
-
Notifications
You must be signed in to change notification settings - Fork 8.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Selection of objective "rank:ndcg" results in lower NDCG than "rank:pairwise" #4177
Comments
Hi @Edmondguo . I can just point to some historic discussion and my understanding of how xgboost works, so it would still be good to get some official confirmation for that, e.g. from @hcho3 . I believe rank:pairwise is a pairwise method that tries to minimize the number of pairwise errors. however in a few experiments it looks as if rank:ndcg performs worse than rank:pairwise, and it might be due to the implementation. see e.g. #2092 (comment) Some time ago we verified rank:ndcg to perform a bit worse when evaluated on ndcg than rank:pairwise in our case. |
Exactly. In "From RankNet to LambdaRank to LambdaMART", LambdaMART optimizes NDCG by optimizing the pairwise loss (with lambda's) that is weighted with change in NDCG. |
Thank you very much! In my experiment I also found that rank:ndcg perform worse than rank:pairwise. |
Thank you! So is it means in rank:pairwise, xgboost use lambda's which is derived by "Cross Entropy Loss" in RankNet as the loss funtion? |
@Edmondguo Yes |
@Edmondguo @kretes Would you be interested in posting an example where you get better NDCG metric by choosing |
The project I am dealing with is using rank model in quantitative stock selection.It seems hard to provide because the data is too big.In this case "rank:pairwise" performs much better than "rank:ndcg" under the same booster parameters.the NDCG are 0.5138 for "rank:ndcg", 0.5586 for "rank:pairwise". |
@Edmondguo Does your data have multiple relevance judgment levels (1, 2, 3, 4, ...) ? |
Yes,before I train the model,I have change y into (1,2,3,...30) |
It would be nice if there is a toy example we can use to show |
Hello. I believe I found an example where this is reproducible. rank-pairwise gives ndcg 1 while rank:ndcg cannot. I hope this will help nailing the issue |
i met this problem too, i could't find the reason to explain it, "objective = rank:pairwise" better than "objective = rank:ndcg" |
@Edmondguo just want to follow up this issue. I met the same problem. Did you figure out the reason? |
Thanks for adding ranking task support in xgboost! But I have a few questions:
The text was updated successfully, but these errors were encountered: