Постановка задачи ML
Ihar NestsiareniaЛонгрид-резюме, набор полезных сниппетов заметок важных идей для себя (лучше читайте оригинал https://developers.google.com/machine-learning/problem-framing)
Машинное обучение изменяет способ мышления о задаче. Фокус сдвигается от математической к естественной науке, запуску экспериментов и использование статистики, а не логике чтобы проанализировать результаты. - Peter Norvig - Google Research Director
- Модели машинного обучения могут делать странные ошибки и их сложно отлаживать. В связи с некачественными данными может быть неожиданная интерпретация данных в процессе обучения. Это отдельная проблема, с которой сталкиваются продуктовые команды, при внедрении моделей в продакшен.
- Одна из сложностей заключается в том, что ты на старте никогда не знаешь наверняка, что модель получится полезной.
- При выборе задач, которые можно решить с помощью ML, надо сфокусировать на задачи которые сложно решить традиционным программированием. Например Spart Reply в gmail. Команда обратила внимание, что пользователь много времени тратит на типичные ответ, и попыталась оптимизировать это. Другой пример - поиск по фото, для человека очевидно что на изображении, но не для машины.
Постановка задач машинного обучения имеет сходство с постановкой научных исследований.

Перед началом постановки задачи нужно задать вопросы:
- С какими проблемами сталкивается продукт?
- Какие из этих проблемы хороши для ML?
Но не задавайте эти вопросы в обратном порядке!
Всегда смотрите на данные, с которыми предстоит работать. Но не пытайтесь находить в них закономерности, пока не поставили задачу. Это может направить вас по ложному пути.
Для машинного обучения нужно много данных. Но “много” это сколько? Здесь нет правильного ответа, но хорошее правило: если у вас есть хотя бы ТЫСЯЧИ примеров - простые линейные модели хорошо подходят, если у вас СОТНИ ТЫСЯЧ - нейронные сети. Если данных меньше, стоит рассмотреть не ML решение в первую очередь.
На маленьких датасетах выше риск, что какой-то признак будет коррелировать с правильным ответом по случайному стечению обстоятельств. Нужно быть очень осторожным, когда пытаешься добавить сразу много всевозможных признаков.
Следующий важный вопросы это разница между предсказаниями и решениями.
Например исследователи сосредотачивают своё внимание на предсказании, но для продукта важно иметь решения. Это то, как вы будете использовать выход с модели в вашем продукте. Ну например ваша модель возвращает вероятность того, что пользователь кликнет на рекомендованное видео - это предсказание. То, что вы в продукте собираетесь показать видео, которые имеют, например 95% вероятность клика - это решение. См. первый скрин.

Сложные проблемы ML
- Кластеризация - это обучение без учителя, и не всегда легко понять, почему алгоритм объединил некоторых пользователей в один кластер. Будьте осторожны с назначением некоторого смысла кластерам.
- Нахождение закономерностей. Предсказать, что событие произошло именно в результате действия алгоритма - сложная задача. Например пользователь купил товар, потому что вы показали рекомендацию, или нет? Может он его купил бы в любом случае? Как проверить? A/B тестирование частичное решение проблемы - но это не просто, и помните об этом, когда ставите задачу ML. Нужно думать о том, как измерить вклад модели.
- Проблема отсутствия данных. Если нет данных - модель не обучить. В этом случае лучше начать с эвристик и rule-based систем. Для многих продуктов можно получить приемлемый результат не используя машинное обучение. Если у вас есть данные, попробуйте паттерны, если нет хороших паттернов, то возможно машинное обучение вам не поможет. Если есть хорошие паттерны - машинное обучение правильный подход.
Когда у вас мало размеченных данных, вы можете построить модель основанную на строгой эвристике, с высоким precision и низким recall. Потом использовать semi-supervised подход и обучить модель на этих данных.
Что является вашим идеальным исходом?
Добавление ML модели должно приносить значительный вклад в продукт. Одна и таже модель может использоваться для нескольких продуктовых задач. См. второй рисунок.
Нужно поставить success и failure метрики, и они про продукт, и могут напрямую не зависеть от метрик модели. Перед решением задачи, нужно определить, что можно считать успехом.
Проверочные вопросы:
- Как измерить метрику?
- Когда эту метрику можно измерить?
- Как много времени нужно, чтобы понять, что новая ML модель успешна или нет.
Идея простая, нужно получить измеряемый результат, и чем раньше будет понятно, что модель не работает, тем лучше для продукта.
При постановке задач, часто применяется техника, с подменой вопросов. Например, пользователю понравилось видео? или Может быть Пользователь поделился этим видео? Это один и тот же вопрос? Очевидно нет, но для модели нужно выбирать те метрики, которые можно точно измерить. Не забывайте что ваше сель сделать какой-то решение, а не просто предсказание. Когда выбираете метрику, думайте, как она поможет выбрать решение.
Всегда придумывайте эвристику, это не должна быть быть лучшая из лучших идея, но вам надо иметь простое решение, с которым вы можете сравнивать ML решение.