Численный градиент модели выездов

тема: Градиентный шаг · уровень: средний

Условие

Торговый центр оценивает число выездов с парковки по числу въездов за тот же час. Для каждого часа модель использует формулу \(\hat y = wx + b\), где \(x\) — число въездов, \(\hat y\) — прогноз числа выездов, \(w\) — вес, \(b\) — свободный член.

В некоторых строках число выездов не передано и обозначено словом NA. Такие строки не участвуют в вычислении ошибки. Строки с одинаковыми значениями считаются разными наблюдениями и учитываются по отдельности.

Для запроса заданы значения \(b\), \(w\) и положительный шаг \(h\). На допустимых строках определяется средняя квадратичная ошибка

\[ L(w)=\frac{1}{m}\sum_{i=1}^{m}(wx_i+b-y_i)^2, \]

где \(m\) — количество строк, в которых число выездов известно. Требуется найти численный центральный градиент ошибки по весу:

\[ G=\frac{L(w+h)-L(w-h)}{2h}. \]

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

Формат ввода

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

В следующих \(n\) строках записаны два значения: число въездов entries и число выездов exits. Значение exits равно целому числу или строке NA.

В последней строке расположен запрос из трёх десятичных чисел: b w h.

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

Выведите одно число \(G\) — численный градиент по весу для параметров из запроса, ровно с четырьмя знаками после точки.

Ограничения

\(1 \le n \le 2000\).

\(0 \le entries \le 20000\).

Если exits не равно NA, то \(0 \le exits \le 20000\).

Хотя бы в одной строке значение exits не равно NA.

\(-1000.00 \le b \le 1000.00\), \(-10.00 \le w \le 10.00\), \(0.01 \le h \le 10.00\).

Каждое десятичное число в запросе содержит не более двух знаков после точки и не более восьми символов.

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

Куда дальше