![image](https://habrastorage.org/getpro/habr/post_images/dea/2d3/c36/dea2d3c36b7130ad7a3666d7c1a3ffa6.jpg)
Я размышлял, в основном с точки зрения преподавателя, о том, как научить отлаживать модели машинного обучения. Лично мне кажется полезным рассмотреть модель с точки зрения ошибок разного рода: байесовская ошибка (насколько ошибочен лучший из возможных классификаторов), ошибка аппроксимации (что мы потеряем из-за ограничения класса гипотезы), ошибка оценки (связанная с ограниченной длиной выборки), ошибка оптимизации (что случится, если не найти глобальный оптимум для задачи оптимизации). Я понял, что полезно попытаться отнести ошибку к определенной области, а потом устранять недостатки в этой конкретной области.
Например, моя обычная стратегия по устранению ошибок состоит из следующих шагов:
- Сначала убедимся, что проблема не в оптимизаторе. Это можно проверить, добавив признаки, которые идеально соответствуют меткам классов. Убедитесь, что в этом случае классификация обучающих данных работает верно. Если нет, то проблема, скорее всего, в оптимизаторе или в слишком маленькой выборке.
- Удалите все признаки кроме добавленных на шаге 1. Проверьте, что классификация работает в этом случае. Если да, постепенно возвращайте признаки на место возрастающими порциями (обычно по экспоненциальному закону). Если в какой-то момент модель перестает работать, значит, у вас слишком много признаков или слишком мало данных.
- Удалите добавленные признаки и значительно увеличьте ваш класс гипотез, например, добавив множество квадратичных признаков. Проверьте, что классификация работает. Если нет — возможно, нам нужен лучший класс гипотез.
- Сократите объем обучающих данных в два раза. Обычно с возрастанием объема обучающих данных точность теста стремится к асимптоте, а значит, если уменьшение их объема в два раза имеет значительных эффект, то вы еще далеки от асимптоты и стоит взять больше данных.
Проблема в том, что обычный разбор в терминах ошибок пришел из теории, а теории свойственно упускать из виду некоторые вещи из-за определенного уровня абстракции. Обычно абстракции приходится иметь дело с тем фактом, что итоговая цель уже была приведена к задаче iid (гипотеза простой выборки) / PAC learning (теория вероятно почти корректного обучения), поэтому мы не можем видеть все типы ошибок — их скрывает абстракция.
Чтобы лучше понимать, о чем идет речь, я построил блок-схему, которая охватывала бы все известные мне типы ошибок, которые могут закрасться в машинное обучение.
Блок-схема приведена ниже.
Я постарался дать шагам приемлемые имена (левая часть прямоугольников), а затем привести пример из реальной жизни — из области размещения рекламы. Пройдемся по всем шагам и рассмотрим, какие ошибки могут возникать на каждом из них.
![](https://habrastorage.org/files/211/130/e00/211130e002c04d02898bb6df8aaf2274.png)
- На первом шаге мы ставим цель увеличения прибылей нашей компании, а чтобы достигнуть ее, решаем оптимизировать отображение рекламных баннеров. Уже на этом шаге мы ограничиваем максимальное увеличение прибыли, на которое мы можем надеяться, так как, возможно, стоит сфокусироваться не на рекламе, а, например, на создании лучшего продукта. Это своего рода бизнес-решение, но и, может быть, один из главных вопросов: а теми ли вещами мы занимаемся?
- Теперь, когда у нас есть реальный механизм (оптимизация размещения рекламы), необходимо превратить его в задачу обучения (или нет). В данном случае мы решили сделать это, спрогнозировав, куда будут кликать пользователи, а затем используя полученные прогнозы для наилучшего размещения рекламных баннеров. Можно ли использовать информацию о кликах для прогнозирования увеличения продаж? Этот вопрос сам по себе — область активных исследований. Но как только вы решаете прогнозировать клики, вы уже испытываете некоторые потери из-за несоответствия задачи прогнозирования и цели оптимизации размещения баннеров.
- Теперь нужно собрать немного данных. Можно сделать это, регистрируя взаимодействия с работающей системой. И здесь мы получим весь зоопарк погрешностей, так как данные собраны не с той системы, которую вы планируете развернуть (она-то находится в процессе построения), что приводит к проблемам, связанным со смещением распределения.
- Вероятно, у вас нет возможности залогировать все, что происходит на текущей системе, а значит, вы сможете собрать только определенное подмножество информации. Допустим, вы собрали информацию о запросах, баннерах и кликах. В этом случае мы теряем все данные, которые не были зарегистрированы, например, время дня, день недели, информация о пользователе, которые тоже могут иметь значение. Все это также ограничивает вашу максимально возможную прибыль.
- Затем обычно выбирается представление данных, например, квадратичные отношения между набором ключевых слов запроса и набором ключевых слов баннера со знаком + или — в зависимости от того, кликнул ли пользователь на баннер. Это тот момент, когда мы можем использовать теоретические выкладки, но они ограничены в основном понятием байесовской ошибки. Чем больше информации получено и чем лучше выбрано представление данных, тем меньше будет эта ошибка.
- Далее необходимо выбрать класс гипотез. Лично я выбрал бы деревья решений. Отсюда и мои ошибки аппроксимации.
- Нам нужно собрать обучающие данные. В реальном мире не существуют простых выборок (i.i.d.), так что какие данные мы не возьмем, они всегда будут содержать погрешность. Распределение может отличаться от распределения тестовых данных (например, потому что поведение может отличаться в разные месяцы). Выборка может не быть независимой (потому что поведение не сильно расходится в соседние секунды). Это все будет стоить нам точности.
- Теперь мы обучаем нашу модель, возможно настраивая также и гиперпараметры. На этом шаге появляются ошибки оценки (estimation error).
- Затем подбираем тестовые данные для измерения производительности модели. Конечно, эти данные скажут нам только о том, насколько хорошо модель будет работать в будущем, если эти данные вообще о чем-то говорят. На практике, выборка вряд ли будет репрезентативной, хотя бы потому что с течением времени данные будут меняться.
- После того, как прогнозирование будет выполнено на тестовой выборке, необходимо выбрать критерии оценки успешности. Можно использовать точность, F-меру, площадь под ROC-кривой и т.д. Степень того, как эти метрики соотносятся с тем, что для нас действительно важно (увеличение прибыли), определит успех достижения главной цели. Если метрика не соответствует этому, мы можем оказаться в убытке вместо прибыли.
(Небольшое замечание: хотя и расположил шаги в определенном порядке, не обязательно этого порядка придерживаться, многие стадии можно поменять местами. Кроме того, в этом процессе работы над улучшением системы может быть множество итераций и зависимостей).
Некоторые из упомянутых аспектов еще находятся на стадии исследования. Такие проблемы как погрешности при выборе образца, адаптация предметной области, ковариационный сдвиг, могут быть вызваны несоответствием между обучающими и тестовыми данными. Например, если классификация обучающей выборки работает правильно, а обобщение — ужасно, я часто пробую случайным образом перемешивать тестовую и обучающую выборки и проверять, не станет ли обобщение работать лучше. Если нет, скорее всего, мы имеем дело в ошибкой адаптации.
Когда разрабатывают новые метрики для оценки моделей (такие, как Bleu для машинного перевода), стараются принимать во внимание их соответствие конечной цели (подобно описанному в пункте 10).
Литература по теме:
- The Seven Steps of a Data Project; Alivia Smith
- Machine Learning: The High Interest Credit Card of Technical Debt; Sculley et al.
О, а приходите к нам работать? :)wunderfund.io — молодой фонд, который занимается высокочастотной алготорговлей. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.
Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.
Присоединяйтесь к нашей команде: wunderfund.io