Средняя ошибка по фолдам теплицы

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

Условие

В теплице проверяют модель прогноза температуры по схеме из k фолдов. Каждая строка содержит номер фолда, фактическую температуру и прогноз модели. Температуры записаны целыми числами в десятых долях градуса Цельсия.

В некоторых строках прогноз отсутствует и обозначен NA: такие строки не участвуют в вычислении ошибки. Для каждого фолда сначала вычисляется средняя абсолютная ошибка MAE только по строкам с известным прогнозом. Затем требуется найти среднее арифметическое полученных значений MAE по всем фолдам.

Для фолда f с множеством строк S_f, в которых прогноз известен, его ошибка равна MAE_f = (sum(|fact_i - pred_i|) / |S_f|). Ответ равен MAE = (MAE_1 + MAE_2 + ... + MAE_k) / k. Каждый фолд содержит хотя бы одну строку с известным прогнозом, поэтому деления на ноль не возникает. Равенство значений не требует выбора между вариантами и не влияет на ответ.

Формат ввода

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

В следующих n строках записаны три значения: fold fact pred.

fold — номер фолда, fact — фактическая температура в десятых долях градуса, pred — прогноз в тех же единицах или строка NA.

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

Выведите одно число — среднюю MAE по фолдам.

Выведите ровно четыре знака после десятичной точки. Округляйте до ближайшего значения с четырьмя знаками; если отброшенная часть ровно посередине, округляйте в большую сторону.

Ограничения

1 <= n <= 4000.

1 <= k <= n.

1 <= fold <= k.

Каждый номер от 1 до k встречается хотя бы один раз.

-500 <= fact <= 800.

Если pred не равно NA, то -500 <= pred <= 800.

Длина каждого токена во входе не превышает 3 символов.

В каждом фолде есть хотя бы одна строка, у которой pred не равно NA.

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

Куда дальше