Прогнозирование с трансферным обучением

Как трансферное обучение может помочь со сдвигами в данных

Изменения в данных могут произойти в любое время. Часто они приводят к тому, что модели временных рядов перестают делать точные прогнозы изо дня в день. Чтобы лучше разобраться в этом вопросе, давайте подробно рассмотрим следующую ситуацию.

Компания, в которой вы работаете, собирает данные о потоках людей в определенных точках. В частности, возраст и пол каждого проходящего мимо человека определяются и сохраняются с помощью алгоритма компьютерного зрения. Ваша работа как Data Scientist состоит в том, чтобы взять эти данные, которые собирались годами, и разработать модель, которая прогнозирует потоки людей для каждой половозрастной группы на будущее; то есть прогноз временного ряда для всех половозрастных групп в отдельности. Вы выполняете эту задачу с помощью нейронной сети, с удовлетворением отмечая, что модель также воспроизводит годовые сезонности. Так как все в порядке, эта модель прогноза запущена в производство.

Через какое-то время вы понимаете, что предсказанное возрастно-половое распределение больше не соответствует действительности. Ваше исследование показывает, что эти искажения связаны с отменой требования маски Corona. Похоже, что алгоритм компьютерного зрения по-разному оценивает людей, когда они не носят маску. Он по-прежнему обнаруживает то же количество людей в целом, но их распределение по отдельным группам отличается от прежнего. Теперь ваша задача — адаптировать предсказания к новой ситуации. К сожалению, новых данных всего за несколько недель, и вы задаетесь вопросом, как их можно использовать для отображения годовой сезонности (дополнительную информацию о прогнозировании сезонности см. в этом сообщении в блоге).

То, что звучит как головоломка, на самом деле произошло точно так же в Adtrac. Это подчеркивает, что этот сценарий ни в коем случае не является выдуманным, а действительно происходит в реальности. Однако остается вопрос, как с этим бороться?

Как всегда, есть разные подходы. Например, можно адаптировать «старые» данные к новой ситуации или заменить вывод существующей модели эвристикой. Здесь мы хотим сосредоточиться на подходе к трансфертному обучению, который еще не получил широкой известности и тем не менее достиг целей, а именно:

  • Распределение по полу и возрасту корректируется в соответствии с новыми данными
  • Годовая сезонность прогнозируется аналогично существующей модели.

Что такое трансферное обучение

Перенос обучения в основном означает перенос знаний из известной области в область, о которой вы еще мало знаете.

В машинном обучении этот метод часто используется для задач классификации в компьютерном зрении. Например, если кто-то хочет обучить модель, которая может различать разные породы собак, лучше всего начать с общей модели распознавания объектов (например, ResNet50). Эта крупная модель уже может отличить собаку от кошки или лошади. Чтобы приучить разные породы собак к этой конкретной модели, нужно всего лишь несколько изображений разных пород. С их помощью вы переобучаете последние слои базовой модели. Все первые слои базовой модели остаются нетронутыми и служат только для разложения входных данных на отдельные функции. После этого обучения вы, надеюсь, получите модель, которая может присвоить изображению собаки соответствующую породу.

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

Возможно, есть способ решить нашу проблему временных рядов, используя этот метод? Короткий ответ — да, что мы и смогли показать на Adtrac.

Применение трансферного обучения к временным рядам

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

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

В Tensorflow это можно сделать с помощью нескольких строк кода:

Чтобы проанализировать, достигли ли мы нашей цели, мы сначала рассмотрим распределение по возрасту и полу. Как показывает диаграмма, это было полностью заменено новыми данными. Таким образом, наша первая цель достигнута.

Теперь о сезонности. Мы надеялись, что характеристики долгосрочных временных рядов будут перенесены из базовой модели. Диаграмма теперь доказывает, что эти сезонные эффекты также присутствуют в новой модели. Следовательно, вторая поставленная задача также была достигнута.

Следует отметить, что, несмотря на этот успех, не было найдено ни одного патента, объясняющего, как лучше всего применять трансферное обучение. Наш опыт показывает, что для каждой проблемы это необходимо оценивать индивидуально.

Заключение

Особенно для временных рядов с более длительной сезонностью изменения меток из-за различных факторов (приостановка мер по борьбе с коронавирусом, обновление программного обеспечения и т. д.) могут иметь большие последствия, поскольку для обучения таких моделей требуются данные как минимум за один полный цикл. Однако часто не нужно ждать, пока будет доступно достаточно новых данных, а просто нужно адаптировать существующую модель к новым обстоятельствам. В качестве возможного подхода в игру вступает трансферное обучение, которое уже зарекомендовало себя как многообещающий метод в задачах классификации. Применительно к проблемам временных рядов этот метод может предоставить способ получить обновление в рабочей среде быстрее, чем сезонный цикл. Мы доказали это в Adtrac.