Проверка переобучения модели велопроката

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

Условие

Модель велопроката предсказывает длительность поездки в минутах. Для аудита собраны парные записи: в каждой строке указаны фактическая и предсказанная длительности для обучающей части данных и для контрольной части данных.

Иногда прогноз отсутствует и вместо него записан символ -. Такая запись не участвует в расчёте ошибки соответствующей части данных. Ограничениями гарантировано, что после исключения пропусков в каждой из двух частей останется хотя бы одна запись.

Для каждой части вычисляется средняя абсолютная ошибка MAE:

MAE = (|y_1 - p_1| + |y_2 - p_2| + ... + |y_k - p_k|) / k,

где y_i — фактическая длительность, p_i — прогноз, а k — число строк без пропуска в данной части. Модель считается переобученной, если контрольная ошибка не меньше полутора обучающих: MAE_контроль >= 1.5 * MAE_обучение. При выполнении этого условия выведите ПЕРЕОБУЧЕНИЕ, иначе — НОРМА.

В ответе после слова выведите MAE обучающей и контрольной частей именно в этом порядке.

Формат ввода

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

В следующих n строках содержатся четыре значения:

fact_train pred_train fact_control pred_control

где fact_train и pred_train — фактическая и предсказанная длительности для обучающей части, а fact_control и pred_control — фактическая и предсказанная длительности для контрольной части. Вместо любого значения pred_train или pred_control может стоять символ -.

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

Выведите одну строку из трёх частей через пробел: слово ПЕРЕОБУЧЕНИЕ или НОРМА, затем MAE обучающей части и MAE контрольной части.

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

Ограничения

1 <= n <= 2000.

0 <= fact_train, fact_control <= 240.

Каждый прогноз — либо символ -, либо целое число от 0 до 300 включительно.

Длина каждого числового поля не превышает 3 символов, длина символа пропуска равна 1.

В обучающей части есть хотя бы одна строка, в которой pred_train не равен -. В контрольной части есть хотя бы одна строка, в которой pred_control не равен -.

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

Куда дальше