Коэффициент детерминации прогнозов задержки

тема: Метрики регрессии и МНК · уровень: продвинутый

Условие

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

Строки необходимо сопоставить по идентификатору заказа. Заказы из первой таблицы, отсутствующие во второй, не участвуют в вычислении. Каждый идентификатор в пределах одной таблицы встречается не более одного раза, а каждый идентификатор второй таблицы имеется в первой.

Требуется вычислить коэффициент детерминации R² для заказов с прогнозом. Пусть y_i — фактическая задержка, p_i — прогноз, а среднее фактических задержек равно \(\bar y\). Если \(SST=\sum_i(y_i-\bar y)^2>0\), то

\[ R^2=1-\frac{SSE}{SST},\qquad SSE=\sum_i(y_i-p_i)^2. \]

Если SST равно нулю, то выводится 1.000 при SSE, равном нулю, и 0.000 в противном случае. При равенстве всех фактических задержек применяется именно это правило.

Формат ввода

В первой строке даны два целых числа n и m: число строк в таблице доставленных заказов и число строк в таблице прогнозов.

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

В следующих m строках даны идентификатор заказа order_id и прогноз задержки predicted_delay.

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

Выведите одно число — значение R² с тремя знаками после десятичной точки.

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

Ограничения

\(1\le n\le 3999\), \(1\le m\le n\), \(n+m\le 4000\).

\(1\le order\_id\le 10^9\).

\(0\le actual\_delay\le 360\), \(0\le predicted\_delay\le 360\).

Идентификаторы внутри каждой таблицы различны. Все идентификаторы из таблицы прогнозов присутствуют в таблице доставленных заказов. Входные строки не содержат пропусков. Длина текстового представления каждого числового поля не превышает 10 символов.

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

Куда дальше