Метрики прогноза победы белых

тема: Метрики классификации · уровень: средний

Условие

Организаторы шахматного турнира проверяют модель, оценивающую вероятность победы белых в партии. Для каждой партии известна оценка модели от 0 до 100 и результат партии.

Значение 1 означает, что белые победили. Значение 0 означает, что белые не победили: партия могла завершиться ничьёй или победой чёрных. Значение - означает, что официальный результат отсутствует и такую партию нельзя использовать при вычислении метрик.

В конце входа указаны несколько порогов. Для каждого порога t модель считает победу белых предсказанной, если её оценка не меньше t. Требуется для каждого запроса вывести precision, recall и F1 для положительного класса, то есть для победы белых.

Precision равен TP / (TP + FP), recall равен TP / (TP + FN), а F1 = 2 * precision * recall / (precision + recall). Здесь TP — число верно предсказанных побед белых, FP — число ошибочно предсказанных побед белых, FN — число пропущенных побед белых. Строки с результатом - не входят ни в одну из этих величин. Если знаменатель precision или recall равен нулю, соответствующая метрика считается равной 0. Если precision + recall = 0, значение F1 считается равным 0.

Если оценка модели равна порогу, партия считается предсказанной как победа белых.

Формат ввода

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

В следующих n строках даны два значения: result и score, где result — результат партии (1, 0 или -), а score — оценка модели вероятности победы белых.

В следующей строке дано целое число q — количество запросов.

В следующих q строках дано по одному целому числу t — порогу для модели.

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

Для каждого запроса выведите в отдельной строке три числа: precision, recall и F1 для соответствующего порога.

Каждое число выводится ровно с тремя знаками после десятичной точки.

Ограничения

1 <= n <= 2000.

Среди строк с партиями есть хотя бы одна строка, у которой result равен 0 или 1.

result имеет длину 1 и принадлежит множеству 1, 0, -.

0 <= score <= 100.

1 <= q <= 2000.

0 <= t <= 100.

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

Куда дальше