Macro-F1 для категорий поездок велопроката
Условие
Система городского велопроката относит каждую завершённую поездку к одной из трёх категорий длительности: short, regular или long. Для набора поездок известна настоящая категория и результат модели.
Иногда модель не смогла выдать категорию. В этом случае во втором столбце записан символ -. Такая запись считается ошибкой: она увеличивает FN настоящего класса, но не увеличивает FP ни одного класса.
Для каждого класса c определяются значения TP_c, FP_c, FN_c. Значение F1 класса равно F1_c = 2 * TP_c / (2 * TP_c + FP_c + FN_c). Если знаменатель этой дроби равен нулю, значение F1_c считается равным нулю. Требуется вычислить метрику macro-F1: (F1_short + F1_regular + F1_long) / 3.
При равенстве значений F1 у классов никакой класс не выбирается: в среднее включаются все три значения.
Формат ввода
В первой строке дано целое число n — количество поездок.
В следующих n строках записаны два значения через пробел: настоящая категория поездки actual и категория, предсказанная моделью predicted.
actual всегда равна одной из строк short, regular, long. Значение predicted равно одной из этих строк или -.
Формат вывода
Выведите одно число — значение macro-F1 с тремя знаками после десятичной точки.
Округление выполняется до ближайшего значения с тремя знаками после точки. Если следующее отброшенное значение ровно посередине, округление выполняется в большую сторону.
Ограничения
1 <= n <= 4000.
Длина каждой категории составляет от 1 до 7 символов, длина обозначения пропуска равна 1 символу.
Количество строк с пропущенным предсказанием может быть от 0 до n.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Вердикты судьи: WA, TLE, RE, PE, CE — что значит каждый код проверяющей системы и где искать причину
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт