Skip to content
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

Add an option for standardized scoring in contest judging system #11390

Open
Tracked by #11403
venix12 opened this issue Aug 2, 2024 · 11 comments · May be fixed by #12014
Open
Tracked by #11403

Add an option for standardized scoring in contest judging system #11390

venix12 opened this issue Aug 2, 2024 · 11 comments · May be fixed by #12014
Assignees

Comments

@venix12
Copy link
Member

venix12 commented Aug 2, 2024

Currently most of the beatmapping contests use standardized scoring for a more proper score weighting across the judges, with the formula that goes as following and applies to final scores of the contest judging:

judge X's final score = (judge X's raw score - judge X's average raw score) / judge X's standard deviation

Should likely be added as an option to be enabled in extra_options on Contest.

@Walavouchey
Copy link
Member

i want to note that currently Pending Cup 2024 is blocked from displaying results on the contest page until support for this is added (though the results have been announced in other channels and a news post is also ready soon)

@Hiviexd
Copy link
Member

Hiviexd commented Mar 11, 2025

@ppy/team-web any chance we could pls get some priority on this? standardized scoring is a requirement for contests official support (see this clause), and having our official system contradict with that is not good.

@notbakaneko
Copy link
Collaborator

I'll do it if @venix12 isn't currently on it?

@notbakaneko
Copy link
Collaborator

judge X's final score = (judge X's raw score - judge X's average raw score) / judge X's standard deviation

so a negative score is possible?
5 - 6 / 1.2 = -0.83?

@Walavouchey
Copy link
Member

@venix12
Copy link
Member Author

venix12 commented Mar 11, 2025

I'll do it if @venix12 isn't currently on it?

don't mind, probably quite quick to do, though busy with other stuffs at the very moment

@venix12 venix12 removed their assignment Mar 11, 2025
@peppy
Copy link
Member

peppy commented Mar 12, 2025

(@notbakaneko i think that's permission for you to get this done)

@notbakaneko notbakaneko self-assigned this Mar 12, 2025
@notbakaneko
Copy link
Collaborator

Is the standard deviation across all the judge's scores across every category, or per category, because each category can have a different max_value which skews the averages and deviation?

@Walavouchey
Copy link
Member

@notbakaneko here's a demo in google sheets https://docs.google.com/spreadsheets/d/1uZS2Zp0tirJHEBc7s6wqSwofoEedg4lCFZRCSWPO9xM/edit?usp=sharing

sum of judge's category scores for an entry = judge's raw score for that entry

both the average and standard deviation is across judge raw scores per entry (where categories are summed together)

the max_values can be different, and they usually add up to 100 (organisers i've worked with define category weights as percentages), but this doesn't matter for the calculations

@notbakaneko notbakaneko linked a pull request Mar 17, 2025 that will close this issue
4 tasks
@notbakaneko
Copy link
Collaborator

@venix12 @Walavouchey what's the process for this when it's time to get the scores? (i.e. when/who collects the scores, is there anyone who can see the scores before they're published, etc?)

@Walavouchey
Copy link
Member

Walavouchey commented Mar 24, 2025

@notbakaneko contest hosts need visibility on the final results and scoring/comments before they can publish results on their end. judge comments may need inspection before publishing for moderation purposes

current process:

  1. fetch judge score data (including comments) once the judging period ends by pinging peppy to run
SELECT `id`, `masked_name` FROM `contest_entries`
WHERE `contest_id` = 'CONTEST_ID';

SELECT `id`, `name`, `max_value` FROM `contest_scoring_categories`
WHERE `contest_id` = 'CONTEST_ID';

SELECT * FROM `contest_judge_votes`
WHERE `contest_entry_id` IN (
	SELECT `id` FROM `contest_entries` WHERE `contest_id` = 'CONTEST_ID'
);

SELECT * FROM `contest_judge_scores`
WHERE `contest_judge_vote_id` IN (
	SELECT `id` FROM `contest_judge_votes` WHERE `contest_entry_id` IN (
		SELECT `id` FROM `contest_entries` WHERE `contest_id` = 'CONTEST_ID'
	)
);
  1. calculate the the leaderboard with standardised scoring from the data (i do this with a not-so-pretty script but the linked pr above has this functionality now)
    • ideally these first two steps should be an ASS command or website admin export button
    • results along with all scoring data and comments are sent to the contest hosts
    • idk if site admins can see scores and comments on the contest page at this point already (should later be visible to and exportable by the contest hosts, imo)
  2. contest hosts publish results on discord/livestream/news/wiki/etc when they're ready
  3. contest page results are made public (whenever standardised scoring is supported)
  4. due to Add a way to lock the judging before results are displayed on contest judging system #11393, i'll need to compare the exported data (from when the judging period ended) with contest page results (once they're published) and manually revert any discrepancies (was an issue with kyoku 2024)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants