Covariance shift и Adversarial validation
Давайте представим ситуацию: у нас есть тренировочный и тестовый датасеты для какой-то задачи. Данные в датасетах могут различаться по свойствам распределения (допустим, если в трейне оказались в среднем более молодые люди, чем в тестовом). Такое явление называется Covariance shift, или ковариационный сдвиг.
Почему это важно?
Если возраст — значимая фича, то качество на тесте сильно упадет, так как модель ничего не знает о старшем поколении.
Как детектировать Covariance shift?
Есть много способов его детектировать, но сегодня рассмотрим самый веселый 🙂
Давайте обозначим тренировочный датасет как класс 0, а тестовый — класс 1. Затем обучим классификатор различать их. Чем roc auc будет больше 0.5, тем ковариационный сдвиг будет сильнее. Этот трюк называется adversarial validation и порой его можно встретить соревнованиях на kaggle.
Как бороться с Covariance shift?
Если мы посмотрим на важность признаков в нашем классификаторе — узнаем фичи, наиболее сильно влияющие на сдвиг. Эти фичи нужно удалять, но стоит быть аккуратным: некоторые из них могут быть важны для решения исходной задачи.
Как использовать Covariance shift для извлечения выгоды, если мы на kaggle и у нас на руках тестовая выборка?
Применим следующий трюк. Нашу исходную задачу будем решать так: с помощью классификатора на трейн/тест для каждого объекта трейна возьмем его вероятность принадлежности к тесту
Теперь при обучении наша модель будет обращать больше внимания на объекты, похожие на тестовую выборку. Следовательно, мы лучше заточимся под распределение теста!
С этим подходом нужно быть аккуратным в рабочих задачах, потому что это ни что иное как data leak. Но если мы решаем соревнование, в котором нам выдали тестовую выборку (без ответов), то почему бы не почитерить 🙂
А ещё с помощью этого метода можно заметить потерю актуальности модели. Если новые данные начали сильно отличаться от тех, на которых модель обучена, то пора задуматься о ее переобучении.
Представленный выше метод — частный случай Domain adaptation. Это направление машинного обучения для адаптации модели, обученной на одних данных, с целью решения задач из другого домена.