Точность модели на контрольных отзывах

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

Условие

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

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

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

Настоящий негативный отзыв имеет оценку не больше 2. Модель считает отзыв негативным, если его риск не меньше 600. Точностью называется доля контрольных отзывов, для которых решение модели совпало с настоящим классом: accuracy = correct / control, где correct — количество верных решений модели, control — количество отзывов контрольной части.

При риске, равном 600, модель считает отзыв негативным. Идентификаторы отзывов в каждой таблице не повторяются, поэтому при сопоставлении строк равенства между несколькими подходящими строками не возникает. Гарантируется, что контрольная часть содержит хотя бы один отзыв.

Формат ввода

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

В следующих n строках даны два целых числа review_id и stars — идентификатор отзыва и оценка пользователя.

В следующих m строках даны два целых числа review_id и risk_score — идентификатор отзыва и предсказанный моделью риск негативного отзыва.

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

Выведите точность модели на контрольной части с тремя знаками после десятичной точки.

Ограничения

1 ≤ n = m ≤ 2000.

1 ≤ review_id ≤ 10^9.

1 ≤ stars ≤ 5.

0 ≤ risk_score ≤ 1000.

Множества идентификаторов в двух таблицах совпадают. В каждой из таблиц все идентификаторы различны. Хотя бы один идентификатор из первой таблицы делится на 5 без остатка.

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

Куда дальше