Привет, Хабр! Меня зовут Максим Шевченко, я ведущий ML разработчик в Big Data МТС. В этом посте я расскажу о том, что такое метод подмены задачи. Также разберем несколько примеров того, как такой подход позволил найти эффективные решения для рабочих проектов. Проверим валидность таргетинга в наружной рекламе; рассмотрим, как еще можно проверить однородность групп до проведения А/В тестирования; расскажу про необычный подход к оценке качества данных.  Один из самых популярных примеров использования подмены задачи – adversarial validation – трюк, который пришел к нам из соревновательного анализа данных. В конкурсах по машинному обучению организаторы обычно предоставляют две выборки: обучающую и тестовую. Для обучающей выборки целевая переменная известна, для тестовой выборки ее необходимо предсказать. Как и в реальных задачах, в соревнованиях часто бывает так, что тестовые данные сильно отличаются от обучающих. Причины могут быть совершенно разные: от нерепрезентативности обучающей выборки относительно генеральной совокупности до долгого процесса построения модели, в течение которого существенно изменяются признаки объектов. Чтобы правильно оценивать качество модели, нам необходимо выбрать такие объекты из обучающей выборки, которые будут максимально похожи на объекты из тестовой выборки. Как оценить отличие обучающей выборки от тестовой? Забудем на время о нашей целевой переменной и искусственно создадим новый таргет по такому правилу: все объекты в обучающей выборке обозначим как нолики, а все объекты в тестовой выборке — как единички. На основе этих данных построим другую модель машинного обучения – модель бинарной классификации. Она будет учиться отличать объекты обучающей выборки от объектов тестовой. Нам интересны две вещи: качество этой модели и важность признаков.  Если качество модели случайно, например, в терминах ROC AUC метрика будет иметь значение близкое к 0.5, значит, тест с обучающей выборкой однородны. Поэтому мы можем определить валидационную выборку стандартными способами, не забывая при необходимости про стратификацию целевой переменной или про распределение объектов по времени. Другое дело, если модель легко классифицирует трейн и тест. Тогда в обучающей и тестовой выборках есть существенные отличия. Анализируя важность признаков такой модели, мы можем понять, какие именно признаки отличают два этих подмножества. Кроме того, с помощью этой модели мы можем выбрать ограниченное подмножество из обучающей выборки, которое будет максимально похоже на тестовую, и валидировать нашу основную модель на нем. Подмену задачи можно использовать и в других кейсах. Например, при обработке геоданных. В прошлом я работал с наружной рекламой и узнал, что агентства таргетируют уличные билборды по разным признакам и интересам клиентов. Как и положено аналитику с критическим мышлением, мне захотелось проверить – действительно ли можно найти такую дорогу, по которой, например, в среднем проезжает более возрастная аудитория? Так как я работаю в телекоме, то могу это сделать. У МТС, например, есть более 5000 различных метрик обезличенного профиля клиента, а также геоданные. Для решения этой задачи рассмотрим некоторый граничный случай. Сравним две выборки обезличенных профилей клиентов:  те, кто часто проезжал мимо рекламного щита в центре Москвы те, кто часто проезжал мимо рекламного щита на окраине Кажется, что две эти выборки должны отличаться. Если мы не найдем существенного различия между ними по каким-либо метрикам профилей клиентов, то сможем сделать вывод, что таргетинг в наружной рекламе неэффективен. Первое, что приходит в голову любому аналитику, когда речь заходит о различиях в двух выборках, – статистические критерии. С их помощью мы можем проверить, статистически ли значимо отличаются две выборки по каждой метрике обезличенного профиля клиента. Например, по возрасту, доходу и другим характеристикам. Однако такой подход имеет ряд недостатков:  один статистический критерий для одного признака, а у нас их тысячи для каждого теста нужно рассчитывать корректность и мощность Пойдем по пути, похожему на adversarial validation. Создадим новую искусственную целевую переменную, где единичками будут профили клиентов, проезжающих около билборда в центре, а ноликами – около билборда на окраине. Построим модель машинного обучения, которая будет отличать одних клиентов от других. Если такая модель будет работать случайно и не сможет найти отличия в двух выборках, то следует вывод, что таргетинг – нерабочее решение и заказчику, возможно, нет смысла переплачивать за рекламу на билборде в центре.  Проделав это упражнение сразу с большим количеством признаков, мы получили модель, ROC AUC которой был равен 0.8. Это значит, что предсказания нашей модели статистически значимо отличаются от случайных, а сама модель умеет отделять одно множество клиентов от другого. Анализируя важность признаков, мы поняли, какие именно характеристики помогают отличить два этих множества. Например, возраст клиентов, которые проезжали мимо щита в центре, отличается от возраста людей, которые видели билборд на окраине. Также их отличают производитель устройства, количество входящих звонков, последний способ оплаты. Пользуясь таким подходом, можно сделать вывод, что таргетинг в наружной рекламе валиден и с помощью этих данных мы можем оптимально выбирать локации, чтобы охватить ту или иную целевую аудиторию. Рассмотрим другой кейс использования подмены задачи. При разработке новой фичи мы не можем внедрить ее сразу на всех пользователей. Ведь если она ухудшит продукт, то мы потеряем прибыль. Поэтому при внедрении нового функционала используются А/B тесты: фиксируем контрольную и тестовые группы, на последнюю раскатываем нашу фичу и смотрим, как изменяется наша бизнес-метрика. Важно, чтобы до проведения теста контрольная и тестовые группы были однородны. Обычно аналитики проверяют это с помощью статистического аппарата на нескольких важных бизнес-метриках. Например, они могут проверить, что средняя прибыль на одного клиента в двух группах не отличается.  Но при таком подходе можно проверить лишь небольшое количество бизнес-метрик, обычно две или три. Поэтому до проведения A/B тестов можно также воспользоваться паттерном подмены задачи, чтобы проверить, что группы однородны во всем множестве признаков профилей клиентов, в том числе и тех 2-3 бизнес-метриках. В очередной раз построим модель машинного обучения с новым таргетом, где в качестве единичек выступают клиенты контрольной группы, а в качестве ноликов – клиенты тестовой группы. Если ее качество близко к случайному – модель на основе тысячи метрик не научилась разделять два множества клиентов. Значит, группы в среднем похожи друг на друга. Если же предсказания модели не случайны, то можно разобраться в чем проблема, анализируя важность признаков. Воспользоваться подменой задачи можно и при оценке качества данных. Сейчас у многих крупных игроков рынка есть витрины данных, которые стоят на регламенте и считаются с некоторой периодичностью: раз в день, раз в неделю или раз в месяц.  Пользователям этих витрин – аналитикам и разработчикам машинного обучения – очень важно, чтобы одни и те же столбцы за разные срезы были похожи. Например, чтобы у них было примерно одинаковое количество незаполненных значений.  К оценке качества такого рода данных обычно подходят также с помощью статистического аппарата: мы берем один столбец за текущую и предыдущие даты и пытаемся сравнить два этих распределения между собой. Для сравнения распределений, как правило, можно использовать критерий Колмогорова-Смирнова, Расстояние Кульбака-Лейблера или PSI индекс из банковского скоринга. Проблема такого подхода заключается в том, что нужно работать с каждым столбцом таблицы отдельно, нельзя сразу сравнить два среза. А если и в данном случае воспользоваться подменой задачи? В качестве ноликов возьмем подмножество объектов из текущей даты, в качестве единичек – подмножество объектов из другой даты. Обучим модель машинного обучения, которая будет сравнивать два среза данных целиком. Если хотя бы один столбец в новом срезе будет сломан, например, полностью заполнен пропущенными значениями, то качество нашей модели будет очень высоким. Анализируя важность признаков, мы быстро обнаружим тот самый сломанный столбец. Если вы  используете подобные таблицы, рассчитываемые с некоторой периодичностью, рекомендую проделать такое упражнение, особенно если эти таблицы строятся на основе большого количества различных источников. Конечно же, паттерн подмены задачи не является универсальным решением и имеет ряд недостатков. Например, в отличие от статистических критериев, мы не можем строго отвергнуть ту или иную гипотезу, потому что нет явного механизма определения статистической мощности такого подхода. Но в ряде случаев метод подмены позволяет значительно быстрее и эффективнее подойти к решению некоторых задач. О других, более общих, примерах применения подмены задачи можно почитать в блоге у Александра Дьяконова. А где в своей работе вы могли бы воспользоваться методом подмены задачи данных? Расскажите об этом в комментариях к статье, обсудим ваши идеи вместе! Все вопросы – туда же. Lead Data scientist @ MTS