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

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

Условие

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

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

Требуется вычислить коэффициент детерминации R2 для отзывов запроса. Если после исключения пропусков получились пары фактических оценок y_i и прогнозов p_i, то сначала вычисляется средняя фактическая оценка ȳ. Затем

R2 = 1 - (Σ(y_i - p_i)^2) / (Σ(y_i - ȳ)^2).

Если в расчёте нет отзывов либо все их фактические оценки одинаковы, следует считать R2 равным 0. Равенства числовых значений не требуют выбора и не влияют на результат.

Формат ввода

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

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

В следующей строке задано целое число k — число версий в запросе.

В следующих k строках записаны версии приложения из запроса. Каждая версия в запросе встречается ровно один раз.

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

Выведите одно число — значение R2 для отзывов, соответствующих запросу, с тремя знаками после десятичной точки.

Округление производится до ближайшего значения с тремя знаками после точки. Если следующая цифра равна 5, число округляется в большую сторону по модулю.

Ограничения

1 ≤ n ≤ 4000.

1 ≤ k ≤ 50.

Длина названия версии приложения составляет от 1 до 20 символов. Название состоит из латинских букв, цифр, символов . и -.

Фактическая оценка пользователя — целое число от 1 до 5.

Прогноз модели либо равен -, либо записан с двумя знаками после точки и находится в диапазоне от 0.00 до 5.00.

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

Куда дальше