Как сравнивать модели

Train, validation и test: где выбирать модель

Содержание курса

0 / 1 баллов

Выбрать модель по validation

Когда под рукой есть несколько способов оценить месячную аренду квартир, велик соблазн сразу объявить победителем модель посложнее. Но интуиция здесь плохой советчик: простейший прогноз по среднему значению из обучающей выборки порой держится не хуже линейных моделей с разным набором числовых признаков. Чтобы честно выяснить, какой из вариантов действительно улавливает закономерности, а не просто усложняет вычисления, все гипотезы нужно сопоставить в строго одинаковых условиях.

Данные уже аккуратно разбиты по уникальным идентификаторам строк на обучающую, валидационную и тестовую части. Правило здесь жесткое и не терпит самодеятельности: каждый кандидат должен учиться исключительно на train, а оцениваться — на одном и том же validation по величине средней абсолютной ошибки. Финальный тестовый набор пока отложен в сторону для будущей независимой проверки, так что трогать его, подглядывать в метрики или пытаться выбирать по нему прямо сейчас категорически запрещено.

Вам предстоит рассчитать валидационную ошибку для каждого претендента и определить сильнейшего. При сравнении MAE нельзя округлять значения, чтобы не потерять едва заметную разницу между соперниками, а в случае абсолютного совпадения результатов приоритет остаётся за тем вариантом, который встретился первым. Итогом работы должно стать точное имя модели, показавшей наименьшую ошибку на валидации.

Что уже дано

В шаблоне есть импорт метрики и сигнатура функции. Скрытая подготовка не создаёт глобальных данных: проверяющая система передаёт аргументы при вызове.

X_train, X_val, X_test — pandas DataFrame с одинаковыми числовыми столбцами, без пропусков. Индексы — уникальные ID строк внутри каждой таблицы. y_train и y_val — pandas Series с целевыми значениями и индексами соответствующих таблиц в том же порядке. candidates — непустой список кортежей (name, model, columns): уникальное строковое имя, необученный объект DummyRegressor со strategy="mean" либо LinearRegression и непустой список имён его признаков. Все эти столбцы есть в таблицах.

Что нужно сделать

Реализуйте select_model(X_train, X_val, X_test, y_train, y_val, candidates) и верните имя кандидата с минимальной MAE на validation. Сравнивайте ошибки без округления; при точном равенстве выбирайте первый вариант из списка.

Используйте переданные объекты моделей: каждый кандидат обучается только на train, его прогнозы для сравнения получаются только на validation. X_test можно использовать лишь для проверки индексов, но нельзя передавать в fit или predict. Значения y_test не передаются. Если индексы любой пары выборок пересекаются, поднимите ValueError до обучения моделей. Входные таблицы и цели не меняйте.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно. Проверяющая система вызывает функцию select_model(X_train, X_val, X_test, y_train, y_val, candidates) с описанными объектами. Результат — одна строка name; при пересечении индексов — исключение ValueError.

Пример использования

import pandas as pd
from sklearn.dummy import DummyRegressor
from sklearn.linear_model import LinearRegression
X_train = pd.DataFrame({'a': [-2, -1, 0, 1, 2, 3], 'b': [1, 0, 2, 0, 1, 2]}, index=[11, 12, 13, 14, 15, 16])
X_val = pd.DataFrame({'a': [-3, 4, 0], 'b': [2, 0, 3]}, index=[21, 22, 23])
X_test = pd.DataFrame({'a': [8, 9], 'b': [3, 2]}, index=[31, 32])
y_train = pd.Series([5, 3, 13, 7, 13, 19], index=[11, 12, 13, 14, 15, 16])
y_val = pd.Series([7, 13, 17], index=[21, 22, 23])
candidates = [
    ('mean', DummyRegressor(strategy="mean"), ['a']),
    ('area', LinearRegression(), ['a']),
    ('both', LinearRegression(), ['a', 'b']),
]
print(select_model(X_train, X_val, X_test, y_train, y_val, candidates))

Результат:

both
О данных в ответах

Используйте учебные данные. Не вставляйте пароли, токены, ключи доступа, паспортные и банковские данные, а также персональные данные других людей. Политика обработки данных.

РешениеPython · Python 3.12 (data: numpy, pandas, sklearn...)
Как проверяется решение

Проверяются функции и их результаты. Собственный запуск выполняет ваш код без авторских тестов. Интерактивный запуск не влияет на оценку. Лимит сессии — 5 минут, процессорного времени — 10 секунд.

Отправьте решение, чтобы увидеть результаты тестов.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.