Метрики поиска аномалий счётчиков

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

Условие

В доме работает система, отмечающая подозрительные показания счётчиков электричества. В первой таблице хранится результат ручной проверки: метка 1 означает аномальное показание, метка 0 означает обычное. Во второй таблице находится предсказание системы для тех же счётчиков.

Строки двух таблиц могут идти в разном порядке, поэтому их нужно сопоставить по идентификатору счётчика. Необходимо вычислить accuracy и сбалансированную accuracy предсказаний.

Пусть TP — число строк с истинной меткой 1 и предсказанием 1, TN — число строк с истинной меткой 0 и предсказанием 0, P — число истинных меток 1, N — число истинных меток 0. Тогда accuracy = (TP + TN) / n, а balanced_accuracy = (TP / P + TN / N) / 2. Если P = 0, значение TP / P считается равным 0. Если N = 0, значение TN / N считается равным 0. При равенстве предсказанной и истинной метки строка засчитывается как верно классифицированная.

Формат ввода

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

В следующих n строках дана первая таблица: идентификатор счётчика meter_id и истинная метка actual через пробел.

В следующих n строках дана вторая таблица: идентификатор счётчика meter_id и предсказанная метка predicted через пробел.

Идентификаторы в каждой таблице не повторяются. Множества идентификаторов в обеих таблицах совпадают.

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

Выведите два числа через пробел: сначала accuracy, затем balanced_accuracy.

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

Ограничения

1 ≤ n ≤ 2000.

Длина каждого идентификатора meter_id составляет от 1 до 20 символов. Идентификатор состоит из строчных латинских букв, цифр и символа -.

actual и predicted — целые числа 0 или 1.

Пропусков в таблицах нет.

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

Куда дальше