Проверка переобучения модели велопроката
Условие
Модель велопроката предсказывает длительность поездки в минутах. Для аудита собраны парные записи: в каждой строке указаны фактическая и предсказанная длительности для обучающей части данных и для контрольной части данных.
Иногда прогноз отсутствует и вместо него записан символ -. Такая запись не участвует в расчёте ошибки соответствующей части данных. Ограничениями гарантировано, что после исключения пропусков в каждой из двух частей останется хотя бы одна запись.
Для каждой части вычисляется средняя абсолютная ошибка 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 →
Куда дальше
- Школьный этап ВсОШ по информатике — как устроен первый этап и план подготовки за четыре недели
- С нуля до олимпиады: маршрут — сколько занимает язык, какие приёмы нужны и к какому этапу это ведёт
- Python на олимпиадах — где языка хватает с запасом, а где начинают значить лимиты — с замерами