Две мерки и лучшее число

Модель предсказывает время доставки по нескольким числам-весам. Веса эти надо как-то подобрать, а для подбора нужно уметь отвечать на один вопрос: этот набор весов лучше предыдущего или хуже?

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

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

Подробно: Ошибка одним числом.
 


Задание

Напишите три функции.

def mse(y_true, y_pred):   # среднее квадратов промахов
    ...

def mae(y_true, y_pred):   # среднее модулей промахов
    ...

def best_const(data, metric, lo, hi, step):
    ...

Аргумент metric — это функция, mse или mae. Внутри best_const перебирает значения c от lo до hi с шагом step, для каждого вызывает metric(data, [c] * len(data)) и возвращает то c, при котором мерка наименьшая.

Как проверить себя

Для y_true = [2, 4, 6] и y_pred = [1, 4, 9] промахи равны −1, 0 и +3. Тогда mse даёт 3.3333, а mae — 1.3333.

Дальше примените best_const к пяти замерам времени, где один испорчен: [10.0, 11.0, 12.0, 13.0, 60.0], отрезок от 0 до 70, шаг 0.001. Сравните, что выйдет по mse и что по mae, и подумайте, какое из двух чисел вы показали бы диспетчеру как обычное время поездки.

Числа сравниваются с допуском, а не как строки: достаточно совпадения в первых четырёх знаках. Печатать ничего не надо — функция возвращает значение.


Напишите программу
Auto
       

time 10000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python8