Прогноз продаж мороженого по температуре

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

Условие

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

Модель имеет вид \(y=ax+b\), где \(x\) — температура, \(y\) — число проданных порций. Коэффициенты выбираются методом наименьших квадратов: \(a=\frac{\sum (x_i-\bar{x})(y_i-\bar{y})}{\sum (x_i-\bar{x})^2}\), \(b=\bar{y}-a\bar{x}\). Здесь \(\bar{x}\) и \(\bar{y}\) — средние значения температуры и продаж по всем наблюдениям.

Если все температуры в наблюдениях одинаковы, знаменатель в формуле наклона равен нулю. В этом случае следует считать \(a=0\), \(b=\bar{y}\). Повторяющиеся температуры являются отдельными наблюдениями и все учитываются в суммах. Пропусков в данных нет, выбросы также учитываются без изменений.

В последней строке даны две температуры, для которых требуется вычислить прогнозы \(ax+b\). Каждый прогноз следует округлить до трёх знаков после десятичной точки по правилу округления до ближайшего значения, а при ровно половине шага округлять по модулю от нуля. При совпадении температур строки считаются разными наблюдениями и обе учитываются.

Формат ввода

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

В следующих \(n\) строках даны два целых числа \(x_i\) и \(y_i\): температура в день наблюдения и число проданных порций.

В последней строке даны два целых числа \(q_1\) и \(q_2\) — температуры для запроса прогноза.

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

Выведите два числа: прогноз продаж для температуры \(q_1\), затем прогноз продаж для температуры \(q_2\). Числа разделяются пробелом и выводятся ровно с тремя знаками после десятичной точки.

Ограничения

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

\(-30 \le x_i \le 45\).

\(0 \le y_i \le 3000\).

\(-30 \le q_1,q_2 \le 45\).

Все значения во входных данных являются целыми числами.

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

Куда дальше