Вы аналитик приложения по распознаванию цветков по фотографии. Вам нужно посчитать качество
классификатора. В классификатор подаются уже обрезанные фотографии, где всегда ожидается 1 вид
цветка. Но обрезка может ошибаться и подать на вход не фотографию цветка.
Вам нужно посчитать долю верно распознанных цветков среди всех входящих фотографий, на которых
действительно были цветки, с учётом пропорций видов цветков у пользователей.
У вас есть 2 файла:
1. Число каждого вида цветков, как их распознал алгоритм. Получается автоматически из логов
приложения за последний месяц. detection_count.csv со столбцами detected_name - название цветка по
результатам распознавания, count — число цветков такого вида.
2. Результаты ручной разметки на выборке (из другого периода). Здесь каждая строка - это результат
проверки распознавания экспертом, который проставляет правильный вид цветка. detection_quality.csv
со столбцами detected_name - название цветка по результатам распознавания, human_name —
название цветка согласно ручной проверки (считаем ответ эталоном).
Кроме названия цветка, в detected _name и human_name может присутствовать запись not_a_flower, что
означает, что алгоритм или человек решили, что на изображении не цветок.
Вам нужно перевзвесить результаты замеров качества из detection_quality.csv с учётом реального
распределения классов цветков из detection_count.csv.
При этом по некоторым цветкам у нас очень мало замеров или они вообще отсутствуют. Здесь нужно будет
делать какие-то допущения. Вам нужно будет произвести расчёты по алгоритму ниже.
1. Разделим цветки на 3 класса:
• not_a_flower - их обрабатываем отдельно;
• популярные - по которым у нас есть 10 или более замеров, где классификатор совпал с вердиктом
человека;
• остальные — где у нас нет 10 замеров, где классификатор совпал с вердиктом человека. Группируем
по распознанному виду цветка.
2. Для каждой группы считаем среднюю вероятность того, что в реальности на входе был подан не
цветок, но классификатор отнёс его к данной группе.
3. Далее считаем среднюю вероятность правильной классификации, при этом для цветков из
популярной группы считаем эту вероятность индивидуально для каждого. А для остальных и
not_a_flower считаем вероятность усреднённо по всем внутри группы.
4. Взвешиваем месячную статистику классифицированных цветков: учитываем вероятность того, что на
входе был не цветок (это должно снижать вес группы), и учитываем качество. Получаем среднее
качество для пользователя.
По результатам прошлого месяца (файл detection_count_previous.csv качество получилось 0.8613
(используйте для отладки кода).
Какое взвешенное качество будет в этом месяце (detection_quality.csv тот же, но другое распределение
частоты распознанных цветков в detection_count.csv)?
Напишите программу, которая читает detection_quality.csv и detection_count.csv и печатает число с
точностью до 4-х знаков после запятой и более ничего не выводит.
Формат ввода
month_detected.csv c полями
• detected_name
• count
human_classification.csv c полями
• detected_name
• human_name

Формат вывода
Распечатайте метрику с точностью до 4-х знаков (округлённо до ближайшего). Например: 0.1234 (вместо
0. 1233987). Больше ничего распечатываться не должно.