Ошибка прогноза продаж мороженого

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

Условие

Киоск с мороженым хранит сведения о сменах в двух таблицах. В первой таблице для каждой смены указаны её идентификатор, температура воздуха и назначение смены. Во второй таблице указано фактическое число проданных порций.

Значение 0 в столбце group означает обучающую смену, значение 1 — контрольную смену. Строки таблиц требуется сопоставить по одинаковому shift_id. Значение NA в таблице продаж означает, что данные о продажах для этой смены отсутствуют. Такие строки не используются ни при обучении, ни при подсчёте ошибки.

По известным продажам обучающих смен строится прямая prediction = a * temperature + b методом наименьших квадратов. Если и ȳ — средние температуры и продажи известных обучающих смен, то

a = Σ((x - x̄) * (y - ȳ)) / Σ((x - x̄)^2),

b = ȳ - a * x̄.

Для контрольных смен с известными продажами вычисляется среднеквадратичная ошибка MSE:

MSE = Σ((prediction - y)^2) / k,

где k — число контрольных смен с известными продажами. Требуется вывести MSE.

При совпадении температур или продаж все соответствующие строки учитываются отдельно.

Формат ввода

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

В следующих n строках дана первая таблица в формате:

shift_id temperature group

В следующих n строках дана вторая таблица в формате:

shift_id sold

Значение sold является целым числом или строкой NA.

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

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

Для округления умножьте точное значение MSE на 1000, округлите результат до ближайшего целого, а при ровно одинаковой близости к двум целым выберите большее. Затем разделите полученное целое на 1000 при записи ответа.

Ограничения

3 ≤ n ≤ 2000.

1 ≤ shift_id ≤ 10^9, все идентификаторы смен различны в каждой таблице, и множества идентификаторов в таблицах совпадают.

-40 ≤ temperature ≤ 50.

group равно 0 или 1.

Если значение sold не равно NA, то 0 ≤ sold ≤ 10000.

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

Среди контрольных смен есть хотя бы одна строка с известной продажей.

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

Куда дальше