Коэффициент детерминации для чеков

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

Условие

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

Качество прогнозов измеряется коэффициентом детерминации R². В расчёт входят только чеки, у которых прогноз указан. Пусть их фактические суммы равны y₁, y₂, ..., yₘ, прогнозы равны p₁, p₂, ..., pₘ, а средняя фактическая сумма равна ȳ.

Значение метрики вычисляется по формуле R² = 1 − Σ(yᵢ − pᵢ)² / Σ(yᵢ − ȳ)². Если прогноз отсутствует, строка полностью исключается из обеих сумм. Строки с одинаковыми суммами считаются разными чеками и учитываются по отдельности. При равенстве фактической и прогнозной сумм соответствующий член первой суммы равен нулю.

Если в расчёт не вошло ни одного чека, вошёл ровно один чек или все вошедшие фактические суммы одинаковы, следует считать R² равным 0.

Формат ввода

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

В следующих n строках записаны два значения: фактическая сумма чека y и прогноз p. Фактическая сумма является целым числом. Прогноз является целым числом либо символом -, обозначающим отсутствие прогноза.

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

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

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

Ограничения

1 ≤ n ≤ 4000.

0 ≤ y ≤ 1 000 000.

Если прогноз указан, то 0 ≤ p ≤ 1 000 000.

Длина каждого обозначения суммы не превышает 7 символов.

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

Куда дальше