ROC-AUC прогноза солнечной выработки
Условие
Солнечная электростанция хранит сведения о панелях в файле data.csv, а результаты отдельных измерений выработки — в файле events.csv. Для каждой панели требуется объединить все её измерения с известной выработкой.
Средняя измеренная выработка панели равна среднему значению energy_wh только по строкам events.csv, где это поле не пустое. Панель считается положительным объектом, если её средняя выработка не меньше заданного порога T, и отрицательным объектом иначе.
Качество столбца forecast_score измеряется метрикой ROC-AUC. Рассматриваются все пары из одной положительной и одной отрицательной панели. Пара даёт 1 балл, если forecast_score положительной панели больше, 0 баллов, если он меньше, и 0.5 балла при равенстве. ROC-AUC равен сумме баллов по всем таким парам, делённой на число пар.
Если значения forecast_score у положительной и отрицательной панелей равны, такая пара вносит 0.5 балла. У каждой панели есть хотя бы одно измерение с непустым energy_wh; после применения любого допустимого порога существуют и положительные, и отрицательные панели.
Формат ввода
Рядом с программой находятся два файла в кодировке UTF-8 с разделителем-запятой.
Файл data.csv содержит заголовок и строки вида panel_id,station,forecast_score:
panel_id— целочисленный идентификатор панели;station— строковый код солнечной станции;forecast_score— целый прогнозный балл модели.
Файл events.csv содержит заголовок и строки вида event_id,panel_id,measured_at,energy_wh:
event_id— целочисленный идентификатор измерения;panel_id— идентификатор панели изdata.csv;measured_at— строка даты измерения форматаYYYY-MM-DD;energy_wh— целая измеренная выработка в ватт-часах либо пустая строка при пропуске.
В stdin подаётся одно вещественное число T — порог средней измеренной выработки.
Формат вывода
Выведите одно число — значение ROC-AUC, округлённое до трёх знаков после десятичной точки.
Ограничения
В data.csv от 300 до 4000 строк с данными. panel_id находится в диапазоне от 1 до 1000000, длина station — от 2 до 12 символов, forecast_score — целое число от 0 до 1000.
В events.csv от 300 до 4000 строк с данными. event_id находится в диапазоне от 1 до 10000000, каждый panel_id существует в data.csv, длина measured_at равна 10, непустое значение energy_wh — целое число от 0 до 100000.
Порог T находится в диапазоне от 81.0 до 199.0.
Решить задачу с автопроверкой на Python →
Куда дальше
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами
- Олимпиада по информатике: с чего начать — два мира олимпиад — ВсОШ и перечневые: этапы, задания и на каком языке писать
- На программиста по олимпиаде: путь по классам — что даёт диплом, куда с ним берут на ИТ-направления и почему решает 9 класс