Метрики модели рекомендаций фильмов
Условие
Онлайн-кинотеатр хранит сведения о фильмах в файле data.csv, а результаты показа рекомендаций — в файле events.csv. Каждая запись второго файла содержит настоящую реакцию зрителя и предсказание модели: понравится ли фильм зрителю.
Из стандартного ввода поступают жанр и устройство. Нужно рассмотреть только события показа фильмов заданного жанра на заданном устройстве, соединив файлы по идентификатору фильма.
Пусть TP — число событий, в которых viewer_liked = 1 и predicted_liked = 1; TN — число событий, в которых оба значения равны 0; FP — число событий с viewer_liked = 0 и predicted_liked = 1; FN — число событий с viewer_liked = 1 и predicted_liked = 0.
Требуется вывести accuracy и сбалансированную accuracy. Формулы имеют вид: accuracy = (TP + TN) / (TP + TN + FP + FN), balanced_accuracy = (TP / (TP + FN) + TN / (TN + FP)) / 2. В выбранных событиях гарантированно есть хотя бы один зритель, которому фильм понравился, и хотя бы один зритель, которому фильм не понравился, поэтому деления на ноль не возникает. Пустые значения в столбце rating файла data.csv не используются и должны быть проигнорированы.
При равенстве значений метрик никакого дополнительного выбора не требуется: должны быть выведены оба вычисленных значения.
Формат ввода
Рядом с программой находятся два CSV-файла в кодировке UTF-8 с разделителем-запятой.
Файл data.csv содержит от 300 до 2000 строк с данными о фильмах. Первая строка — заголовок. Столбцы: movie_id — целочисленный идентификатор фильма, title — название без запятых, genre — жанр, release_year — год выхода, rating — рейтинг от 1.0 до 10.0 либо пустая строка.
Файл events.csv содержит от 300 до 2000 строк с событиями показа рекомендаций. Первая строка — заголовок. Столбцы: event_id — целочисленный идентификатор события, movie_id — идентификатор фильма из data.csv, device — устройство, viewer_liked — настоящая реакция зрителя 0 или 1, predicted_liked — предсказание модели 0 или 1.
Стандартный ввод содержит одну строку из двух слов через пробел: жанр genre и устройство device.
Формат вывода
Выведите в одной строке через пробел два числа: сначала accuracy, затем сбалансированную accuracy.
Каждое число должно быть выведено ровно с двумя знаками после десятичной точки.
Ограничения
300 ≤ число строк в data.csv ≤ 2000.
300 ≤ число строк в events.csv ≤ 2000.
1 ≤ movie_id ≤ 10^9, 1 ≤ event_id ≤ 10^9.
1900 ≤ release_year ≤ 2026.
Длина title — от 3 до 40 символов, длина genre — от 3 до 12 символов, длина device — от 2 до 10 символов.
Жанр во входе принадлежит множеству жанров файла data.csv, устройство во входе принадлежит множеству устройств файла events.csv. Для каждой допустимой пары жанра и устройства после соединения файлов есть ровно 80 событий, среди которых есть события обоих классов viewer_liked.
Решить задачу с автопроверкой на Python →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- Перечневые олимпиады по информатике — олимпиады перечня Минобрнауки, их уровни и что нужно к диплому
- БВИ по олимпиадам: в какие вузы берут — правила приёма вузов, разобранные построчно, со ссылкой на приказ у каждой строки