Метрики прогноза тренировки бегуна

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

Условие

В дневнике бегуна для каждой запланированной тренировки записано, состоялась ли она на самом деле, и прогноз приложения. Положительный класс обозначается числом 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 →

Куда дальше