Проверка прогноза времени доставки

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

Условие

Служба доставки проверяет простой прогноз времени доставки. Для каждого района прогноз строится как среднее известное время доставок этого района в обучающей части журнала.

Заказ относится к контрольной части, если его идентификатор делится на 10 без остатка. Остальные заказы относятся к обучающей части. Значение - вместо времени означает, что время доставки не было записано.

Для контрольного заказа с известным временем прогноз равен среднему времени известных обучающих заказов того же района. Если в обучающей части нет ни одного известного заказа этого района, используется среднее время всех известных обучающих заказов. Если во всей обучающей части нет известного времени, используется прогноз 30 минут. Контрольные заказы с - не участвуют в вычислении ошибки. Гарантируется, что хотя бы один контрольный заказ имеет известное время.

Требуется вычислить среднюю абсолютную ошибку, MAE:

\[ MAE = \frac{1}{k}\sum_{i=1}^{k}|y_i-\hat y_i|, \]

где \(y_i\) — известное фактическое время контрольного заказа, \(\hat y_i\) — его прогноз, а \(k\) — число контрольных заказов с известным временем.

Формат ввода

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

В следующих n строках записаны три значения через пробел: идентификатор заказа order_id, район zone и фактическое время доставки delivery_minutes. Вместо delivery_minutes может стоять символ -.

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

Выведите одно число — MAE в минутах.

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

Ограничения

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

Куда дальше