Проверка среднего времени посещения

тема: Валидация и переобучение · уровень: продвинутый

Условие

В логе школьного сайта каждая строка описывает одно посещение раздела. Поле duration_s содержит длительность посещения в секундах. Значение - означает, что длительность не была записана.

Рассматривается простая модель: она игнорирует раздел сайта и предсказывает длительность следующего корректного посещения средним значением длительностей в обучающих строках. Качество модели требуется оценить методом leave-one-out: для каждой строки с известной длительностью строка временно исключается, модель обучается на остальных строках с известной длительностью, затем вычисляется ошибка на исключённой строке.

Пусть известно m длительностей x_1, x_2, ..., x_m. Для строки i прогноз равен p_i = (sum(x_j) - x_i) / (m - 1) при m > 1. Если m = 1, после исключения строки обучающих наблюдений нет, поэтому по соглашению p_1 = 0. Требуется вывести среднеквадратичную ошибку leave-one-out: MSE = (1 / m) * sum((x_i - p_i)^2). Строки с duration_s = - полностью пропускаются и не участвуют ни в обучении, ни в вычислении ошибки. Равенства чисел не требуют выбора и не изменяют ответ.

Формат ввода

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

В следующих n строках содержатся три поля через пробел: session_id, section, duration_s.

Поле duration_s равно целому числу секунд либо символу -.

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

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

Округление выполняется до ближайшего значения с четырьмя знаками после точки; при ровно половинном случае выбирается большее по модулю значение.

Ограничения

1 <= n <= 4000.

Длина session_id составляет от 1 до 20 символов и содержит только латинские буквы, цифры, символы _ и -.

Длина section составляет от 1 до 12 символов и содержит только строчные латинские буквы и символ _.

Если длительность известна, то 0 <= duration_s <= 86400.

Во входе есть хотя бы одна строка с известной длительностью.

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

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

Куда дальше