Как понять, что у модели высокий bias или variance
Что проверяют
Умеете ли вы по цифрам на обучении и валидации поставить диагноз модели и выбрать правильное лечение. Определения знают все, поэтому интервьюер почти сразу спрашивает: ошибка на трейне 2%, на валидации 15%, что будете делать?
Как отвечать
Диагноз ставится по трём числам: ошибка на обучающей выборке, на валидации и ориентир, которого реально достичь (качество человека, сильный бейзлайн, текущая модель в проде).
- высокий bias (недообучение): ошибка на обучении далека от ориентира, а валидация немногим хуже обучения. Модель не улавливает закономерность даже на данных, которые видела;
- высокий variance (переобучение): на обучении ошибка низкая, на валидации заметно выше. Модель запомнила шум выборки;
- оба сразу: ошибка на обучении высокая, а разрыв с валидацией ещё и большой.
Надёжнее смотреть не на один сплит, а на кросс-валидацию: cross_validate(..., return_train_score=True) в scikit-learn даёт обе ошибки по фолдам. Кривые из learning_curve показывают поведение при росте данных: при высоком bias обе кривые быстро сходятся на плохом уровне, и новые данные не помогут; при высоком variance между ними зазор, который сокращается с ростом выборки. validation_curve показывает то же по одному гиперпараметру, например max_depth.
Лечение разное:
- против bias: более ёмкая модель, новые признаки, слабее регуляризация, больше итераций или деревьев в бустинге;
- против variance: больше данных, сильнее регуляризация (L1/L2, dropout, ранняя остановка), меньше глубина деревьев, отбор признаков, бэггинг.
Где спотыкаются
Предлагают собрать больше данных при недообучении. Кривые обучения сразу показывают, что это не поможет.
Путают направление параметров: в LogisticRegression и SVC параметр C обратен силе регуляризации, и уменьшать его нужно при переобучении, а не при недообучении.
Списывают любой разрыв между валидацией и тестом на variance. Часто причина в утечке данных или сдвиге распределения, и регуляризация тут не поможет.