Порог прогноза задержки посылок

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

Условие

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

Строки двух таблиц сопоставляются по идентификатору посылки parcel_id. В расчёт включаются только посылки, присутствующие в обеих таблицах. Значение actual_delay = 1 означает, что задержка была, а actual_delay = 0 означает отсутствие задержки.

Для каждого заданного порога t модель считает посылку задержанной, если delay_score >= t. Для этого порога вычисляется F1-мера: F1 = 2 * TP / (2 * TP + FP + FN), где TP — число верно найденных задержек, FP — число ошибочно предсказанных задержек, FN — число пропущенных задержек. Если знаменатель формулы равен нулю, значение F1 считается равным 0. Требуется вывести порог с наибольшим значением F1.

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

Формат ввода

В первой строке даны три целых числа n, m и k — число строк в таблице фактических данных, число строк в таблице прогнозов и число проверяемых порогов.

В следующих n строках находится первая таблица. Каждая строка содержит идентификатор посылки parcel_id и целое число actual_delay.

В следующих m строках находится вторая таблица. Каждая строка содержит идентификатор посылки parcel_id и целое число delay_score.

В последней строке записаны k целых чисел — проверяемые пороги.

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

Выведите один целый порог, при котором F1-мера максимальна.

Ограничения

1 <= n <= 2000.

1 <= m <= n.

1 <= k <= 101.

n + m + k <= 4000.

Идентификатор parcel_id состоит из латинских букв, цифр и символа _, его длина от 1 до 20 символов.

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

actual_delay равен 0 или 1.

0 <= delay_score <= 100.

0 <= t <= 100 для каждого проверяемого порога. Все проверяемые пороги различны.

Гарантируется, что в обеих таблицах есть хотя бы одна общая посылка.

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

Куда дальше