Проверка прогнозов шахматных партий

тема: Валидация и переобучение · уровень: продвинутый

Условие

Перед шахматным турниром для каждой партии был записан прогноз ожидаемого результата белых. Прогноз p задаётся целым числом от 0 до 1000 и означает значение p / 1000: ожидаемое число очков белых.

Фактический результат кодируется числом r: 0 означает победу чёрных, 1 означает ничью, 2 означает победу белых. Тогда фактическое число очков белых равно r / 2.

У некоторых партий прогноз отсутствует и записан как NA. Такие партии полностью исключаются из проверки. Оставшиеся партии сохраняют порядок во входных данных и по очереди распределяются по k фолдам: первая оставшаяся партия попадает в фолд 1, вторая в фолд 2, и так далее, после фолда k снова идёт фолд 1.

Для каждого значения k из запроса требуется вычислить средний Brier score по фолдам. Если в фолде находятся партии с прогнозами p_i и результатами r_i, его метрика равна

B = (1 / c) * Σ (p_i / 1000 - r_i / 2)^2,

где c — число партий в этом фолде. Ответом является среднее арифметическое метрик всех k фолдов.

При равенстве числовых значений никаких выборов не производится: для каждого значения k выводится его собственное значение метрики.

Формат ввода

В первой строке дано целое число n — число партий в журнале.

В следующих n строках записаны три значения: номер тура round, прогноз p и результат r. Прогноз p является целым числом либо строкой NA.

После журнала дана строка с целым числом q — числом запросов. В следующих q строках дано по одному целому числу k.

Формат вывода

Для каждого запроса выведите в отдельной строке средний Brier score по k фолдам.

Каждое значение выводится ровно с четырьмя знаками после десятичной точки. Округление производится до ближайшего значения с четырьмя знаками после точки, а при точной середине округление производится вверх.

Ограничения

1 ≤ n ≤ 4000.

1 ≤ round ≤ 500.

Прогноз p равен NA или целому числу от 0 до 1000.

0 ≤ r ≤ 2.

Хотя бы у одной партии прогноз не равен NA.

1 ≤ q ≤ 20.

Для каждого запроса 1 ≤ k ≤ m, где m — число партий, у которых прогноз не равен NA.

Поэтому после исключения партий с NA каждый из k фолдов содержит хотя бы одну партию.

Решить задачу с автопроверкой на Python →

Куда дальше