Автор: Александр Гончаренко

Редактура: Александр Лекомцев

Давайте представим ситуацию: у нас есть тренировочный и тестовый датасеты для какой-то задачи. Данные в датасетах могут различаться по свойствам распределения (допустим, если в трейне оказались в среднем более молодые люди, чем в тестовом). Такое явление называется Covariance shift, ****или ковариационный сдвиг.

IMAGE 2023-03-14 16:07:34.jpg

Почему это важно?

Если возраст — значимая фича, то качество на тесте сильно упадет, так как модель ничего не знает о старшем поколении.

Как детектировать Covariance shift?

Есть много способов его детектировать, но сегодня рассмотрим самый веселый 🙂

Давайте обозначим тренировочный датасет как класс 0, а тестовый — класс 1. Затем обучим классификатор различать их. Чем roc auc будет больше 0.5, тем ковариационный сдвиг будет сильнее. Этот трюк называется adversarial validation и порой его можно встретить соревнованиях на kaggle.

Как бороться с Covariance shift?

Если мы посмотрим на важность признаков в нашем классификаторе — узнаем фичи, наиболее сильно влияющие на сдвиг. Эти фичи нужно удалять, но стоит быть аккуратным: некоторые из них могут быть важны для решения исходной задачи.

Как использовать Covariance shift для извлечения выгоды, если мы на kaggle и у нас на руках тестовая выборка?

Применим следующий трюк. Нашу исходную задачу будем решать так: с помощью классификатора на трейн/тест для каждого объекта трейна возьмем его вероятность принадлежности к тесту $P(y=1)$ и будем использовать ее как вес этого сэмпла при обучении модели.

Теперь при обучении наша модель будет обращать больше внимания на объекты, похожие на тестовую выборку. Следовательно, мы лучше заточимся под распределение теста!

С этим подходом нужно быть аккуратным в рабочих задачах, потому что это ни что иное как data leak. Но если мы решаем соревнование, в котором нам выдали тестовую выборку (без ответов), то почему бы не почитерить 🙂

****А еще с помощью этого метода можно заметить потерю актуальности модели. Если новые данные начали сильно отличаться от тех, на которых модель обучена, то пора задуматься о ее переобучении.

Представленный выше метод — частный случай Domain adaptation. Это направление машинного обучения для адаптации модели, обученной на одних данных, с целью решения задач из другого домена.