Порог уведомлений школьного сайта

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

Условие

Школьный сайт отмечает посещения, которые могут быть связаны с проблемой доступа к учебным материалам. Для каждого посещения модель вычисляет оценку риска от 0 до 1000. Чем больше оценка, тем вероятнее проблема.

Часть журнала имеет тип V и используется для выбора порога уведомления. Остальные строки имеют тип C и являются контрольными. Посещение считается отмеченным моделью, если его оценка не меньше выбранного порога. Если вместо оценки указано NA, оценка отсутствует, и такое посещение никогда не считается отмеченным.

Порог выбирается по всем строкам типа V: среди целых порогов от 0 до 1000 выбирается тот, при котором F1-мера максимальна. Для выбранного порога затем вычисляется F1-мера только по строкам типа C, разделы которых перечислены в запросе в конце входа.

Для некоторого набора строк обозначим через TP число отмеченных посещений с меткой 1, через FP — число отмеченных посещений с меткой 0, через FN — число неотмеченных посещений с меткой 1. F1-мера определяется формулой F1 = 2·TP / (2·TP + FP + FN). Если знаменатель равен нулю, F1-мера считается равной 0. В ответе требуется вывести F1-мeру контрольных строк в процентах.

Если максимальная F1-мера на валидационных строках достигается при нескольких порогах, выбирается наименьший из них. Повторяющиеся строки журнала учитываются по отдельности.

Формат ввода

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

В следующих n строках записаны четыре значения: тип строки part, название раздела section, оценка риска score и метка label.

part равно V или C. score является целым числом либо строкой NA. Метка label равна 1, если проблема доступа действительно была, и 0 иначе.

Далее дана строка с целым числом q — количеством разделов в запросе. В следующих q строках записаны названия разделов. При вычислении ответа учитываются контрольные строки, название раздела которых встречается в запросе.

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

Выведите одно число — F1-меру в процентах для контрольных строк из запроса.

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

Ограничения

1 ≤ n ≤ 4000.

В журнале есть хотя бы одна строка типа V.

1 ≤ q ≤ 20.

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

Если score не равно NA, то 0 ≤ score ≤ 1000.

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

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

Куда дальше