Утечка архивной отметки о гнездовании

тема: Валидация и переобучение · уровень: продвинутый

Условие

Сотрудники парка проверяют простую модель, предсказывающую, гнездится ли птица в парке. В первой таблице собраны сведения, доступные во время наблюдений: идентификатор птицы и число утренних встреч с ней.

После окончания сезона составлена вторая таблица. В ней записан истинный факт гнездования и архивная отметка. Архивная отметка заполнялась после проверки гнезда, поэтому использовать её при настоящем прогнозе нельзя: это утечка признака.

Нужно сопоставить строки двух таблиц по идентификатору птицы и вычислить качество двух правил. Первое правило использует только число утренних встреч. Второе дополнительно использует архивную отметку.

Для птицы с числом утренних встреч visits первое правило выдаёт прогноз p0 = 1, если visits >= 3, и p0 = 0 в остальных случаях. Второе правило выдаёт прогноз p1 = 1, если visits >= 3 или архивная отметка равна 1, и p1 = 0 в остальных случаях. Значение архивной отметки -1 означает пропуск и не считается равным 1.

Качество каждого правила измеряется точностью классификации: \[Acc = \frac{1}{n}\sum_{i=1}^{n}[p_i=y_i],\] где y_i — истинный факт гнездования, а выражение в квадратных скобках равно 1 при совпадении прогноза с ответом и 0 иначе. Если число утренних встреч равно 3, оба правила выдают прогноз 1.

Формат ввода

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

В следующих n строках дана первая таблица: идентификатор птицы bird_id и целое число visits.

В следующих n строках дана вторая таблица: идентификатор птицы bird_id, целое число nesting и целое число archive_mark.

Идентификаторы в каждой таблице не повторяются, и множества идентификаторов двух таблиц совпадают. Строки второй таблицы могут идти в другом порядке. Пропусков в идентификаторах, числе встреч и истинном факте гнездования нет. Пропуск архивной отметки записывается числом -1.

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

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

Для каждого правила вычислите значение floor(100 * correct / n), где correct — число верных прогнозов. Дробная часть отбрасывается.

Ограничения

1 <= n <= 4000.

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

0 <= visits <= 1000.

nesting равно 0 или 1.

archive_mark равно -1, 0 или 1.

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

Куда дальше