Метрики прогноза тренировки бегуна
Условие
В дневнике бегуна для каждой запланированной тренировки записано, состоялась ли она на самом деле, и прогноз приложения. Положительный класс обозначается числом 1: тренировка состоялась. Отрицательный класс обозначается числом 0: тренировка не состоялась.
Прогноз приложения может отсутствовать и тогда записывается как -. Такие строки не участвуют в подсчёте метрик: их нужно пропустить. Остальные строки, включая повторяющиеся, учитываются отдельно.
Для положительного класса вычислите precision, recall и F1. Обозначим: TP — число строк, где факт и прогноз равны 1; FP — факт равен 0, прогноз равен 1; FN — факт равен 1, прогноз равен 0.
precision = TP / (TP + FP), recall = TP / (TP + FN), F1 = 2 * TP / (2 * TP + FP + FN). Если знаменатель какой-либо из формул равен нулю, соответствующая метрика считается равной 0.
Формат ввода
В первой строке дано целое число n — число записей в дневнике.
В следующих n строках даны два значения через пробел: actual и prediction.
actual — факт проведения тренировки, 0 или 1.
prediction — прогноз приложения: 0, 1 или -.
Формат вывода
Выведите три числа через пробел: precision, recall и F1 в этом порядке.
Каждое число необходимо округлить до трёх знаков после десятичной точки. Если четвёртый знак после точки равен 5 или больше, третий знак увеличивается на единицу.
Ограничения
1 ≤ n ≤ 2000.
actual имеет длину 1 и принимает значения 0 или 1.
prediction имеет длину 1 и принимает значения 0, 1 или -.
Пропуски в прогнозе обозначаются только символом - и не участвуют в подсчёте.
Правило выбора при равенстве не применяется: требуется вывести все три метрики, а не выбирать один объект.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину