meooow25 / carrot

A browser extension for Codeforces rating prediction
MIT License
114 stars 4 forks source link

Performance ratings for unofficial contestants #41

Open DrSwad opened 2 years ago

DrSwad commented 2 years ago

Hello! Extremely helpful extension. You have my utmost appreciation for it.

Currently, the extension shows performance ratings only for the official contestants. I was wondering if it would be possible to include the unofficial contestants too during the performance rating calculation. It'll be very useful for the higher-rated contestants participating in Div2 rounds for practice to have an estimation of their performance.

My guess about the reason why it's not already included in the extension yet is that there's no way to distinguish between the unofficial contestants from the virtual contestants in Codeforces API. This surely is a problem, and there seems to be no easy workaround for it. But at least for the higher-rated contestants who participate in a contest on time as it happens, being able to view the combined performance rating in real-time or shortly after the contest ends could still be perfectly useful. So maybe there could be an option to view the combined performance ratings (for the higher-rated contestants) or only the official performance ratings?

Looking forward to learning your thoughts on this. Thanks!

meooow25 commented 2 years ago

I've briefly considered this feature (a long time ago) and I think it's possible, unless I run into some unpredicted issue.
I just looked it up and there is a way to distinguish the type of participation (ref) so that should not be a problem.

I've been thinking of performing some upkeep on this extension for a while now, so I'll try to include this feature when I work on it. Thank you for the suggestion!

meooow25 commented 1 year ago

I was recently thinking about this more, and realized that it would have a certain limitation if implemented.
The problem is that there is no good way to get historical ratings for multiple users, so it is only viable to calculate the performance rating in terms of current rating of the unofficial contestants. Of course, ideally it would be in terms of the rating at the time of participation.

DrSwad commented 1 year ago

@meooow25 Hi! Apologies for the long delay to reply. I somehow overlooked the notification.

I think that the mentioned limitation is reasonably acceptable(?). Because for most active users, their current visible rating should be a close enough estimation to their actual potential rating:

In essence, Div1 users who are actively practicing Div2 rounds are doing so to improve their skills, so they can be somewhat trusted to be active contestants. In which case, their current ratings should also reflect that. But if they are not active contestants (and their current ratings are way off), then they shouldn't be motivated enough to practice Div2 rounds, and thus the extension wouldn't usually need to consider them in the first place.

So if I'm understanding your concerns correctly, being able to calculate actual potential ratings through historical Div2 performances would be cool, but seems a bit unnecessary and kind of an overkill.

Looking forward to learning your thoughts on this. :)

DrSwad commented 1 year ago

@meooow25 Friendly ping! Would love to have your input and discuss more about it. It'll be very helpful for practicing with unofficial rounds. :)

meooow25 commented 1 year ago

Sorry I'm not sure what you refer to as "potential rating"? Could you explain?

DrSwad commented 1 year ago

Definitely. My bad, the choice of that term might not be good now I'm realizing. Since Div1 contests don't happen that often, the ratings shown in the profile of Div1 participants might not necessarily reflect their current skill levels. Also, many Div1 participants like to practice using Div2 contests for a few months and then participate in rated Div1s again. So by potential rating I meant the true rating a Div1 participant should currently have depending on their skill, instead of the visible one on their profile. I think true rating should be a better term. By not using the true ratings, the predictions of the extension might be slightly off, but I tried to reason in the above reply why the deviation shouldn't be concerningly high.

meooow25 commented 1 year ago

Ah I see. This is not the problem I meant, though this is also something to think about, sure.

I'll clarify my older comment: Suppose you virtually participate in contest X today. The extension shows you your performance P. So far so good. Then you participate officially in some contests and your rating changes. Now if you open the ranklist of X, your performance should still be the same P. But this is currently not feasible, because to show that the extension needs your rating at the time you virtually participated in X. It can use your current rating, but that will of course result in a different performance value.

DrSwad commented 1 year ago

Thank you very much for clarifying it. I see your concern now. I also don’t really seem to find a good solution for this issue, without using a storage of some sort to store the rating records of the participants. But that’s infeasible.

However, as for me personally, I wouldn’t really mind much about not being able to see my unofficial rating for a past contest. Because these past unofficial ratings shouldn’t actually hold much value to Div1 participants anymore. The whole point of being able to view my unofficial rating in a Div2 contest is to assess my current state after practicing/upsolving for a while, since Div1 contests don’t happen that often.

So, I think if the extension could just show the unofficial predictions for the most recent contest, or even just the ongoing contest (and a few hours once the contest ends, to analyse it), that really should get the job done more than well. I’d appreciate learning your thoughts on this.

meooow25 commented 1 year ago

I think that much is feasible, though it might feel a bit odd to a user.

An alternate point of view is whether you care about all virtual participants. If you only care about your own virtual performance, then it is feasible to show correct performances for past contests too. This would need Carrot to know that a particular user (the logged-in user let's say) is to be treated specially. It doesn't do anything like that today, but it is possible.