Код-ревью Senior PyTorch на практике обновлено

Ревью: подготовка данных и валидация

Вопрос

Пайплайн обучения модели по табличным данным на PyTorch. Найдите проблемы, искажающие оценку качества.

X = (df[features] - df[features].mean()) / df[features].std()
y = df["target"]
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, shuffle=True)
best = 0
for epoch in range(200):
    train_one_epoch(model, X_train, y_train)
    model.eval()
    with torch.no_grad():
        acc = accuracy(model(X_val), y_val)
    if acc > best:
        best = acc
        torch.save(model.state_dict(), "best.pt")
    model.train()
print("Итоговое качество", best)

Коротко

Утечки в оценке опаснее багов в обучении: модель выглядит отлично и проваливается в проде. Препроцессинг обучается только на трейне, схема разбиения повторяет прод (время, группы), а финальная оценка делается на тесте, который не участвовал ни в выборе эпохи, ни в выборе гиперпараметров.

Что должен найти ревьюер

  1. Ошибкастрока 1
    Нормализация по всему датасету до разбиения: статистики валидации попадают в препроцессинг. Нужно считать среднее и std только по трейну.
  2. Ошибкастрока 3
    Если данные временные или есть группы (пользователи), случайное перемешанное разбиение даёт утечку: нужно разбиение по времени или по группам.
  3. Стильстрока 3
    Нет фиксированного random_state: разбиение и результат невоспроизводимы.
  4. Стильстрока 9
    Accuracy без учёта баланса классов может вводить в заблуждение.
  5. Ошибкастрока 14
    Итоговое качество это максимум по 200 эпохам на той же валидации, по которой выбирали чекпоинт: оценка оптимистична, нужна отдельная тестовая выборка.

Разбор

Утечки в оценке опаснее багов в обучении: модель выглядит отлично и проваливается в проде. Препроцессинг обучается только на трейне, схема разбиения повторяет прод (время, группы), а финальная оценка делается на тесте, который не участвовал ни в выборе эпохи, ни в выборе гиперпараметров.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.