F-мера прогноза перегрузки сети

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

Условие

В файле data.csv находятся результаты прогноза перегрузки электрической сети для квартир дома. Каждая строка описывает один счётчик за расчётный месяц.

Столбец actual_overload содержит результат проверки: 1, если перегрузка действительно была обнаружена, и 0 иначе. Столбец forecast_score содержит оценку модели от 0 до 1. Прогноз считается положительным, если forecast_score >= threshold, где threshold передаётся во входных данных.

Требуется вычислить F-меру с параметром beta для положительного класса, то есть для обнаружения перегрузки. Обозначим через TP число верно предсказанных перегрузок, через FP число ложных срабатываний, через FN число пропущенных перегрузок. Значение метрики равно

F_beta = ((1 + beta^2) * TP) / ((1 + beta^2) * TP + beta^2 * FN + FP).

Пустое значение в столбце month_kwh означает, что показание расхода не передано. Такие строки всё равно участвуют в расчёте, так как для метрики используются только forecast_score и actual_overload. При равенстве forecast_score и threshold строка считается положительным прогнозом.

Формат ввода

В каталоге с программой расположен файл data.csv в кодировке UTF-8. Разделитель полей — запятая, первая строка содержит заголовки. В файле имеются столбцы meter_id, month_kwh, forecast_score, actual_overload.

В первой строке стандартного ввода дано вещественное число beta.

Во второй строке стандартного ввода дано вещественное число threshold.

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

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

Ограничения

В файле от 300 до 4000 строк с данными.

Длина meter_id составляет от 5 до 20 символов. Значение month_kwh является вещественным числом от 0.0 до 5000.0 либо пустой строкой. Значение forecast_score является вещественным числом от 0.0 до 1.0. Значение actual_overload равно 0 или 1.

0.1 <= beta <= 5.0, 0.0 <= threshold <= 1.0.

В файле есть хотя бы одна строка с actual_overload = 1, поэтому знаменатель формулы F-меры не равен нулю.

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

Куда дальше