Использование перекрестной проверки временных рядов и выявление предвзятости опережающего просмотра

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

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

Данные на фондовом рынке, зависящие от времени

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

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

Мы обучаем нейронные сети предсказывать будущую доходность акций в различных временных рамках. Когда мы только начинали, мы использовали очень стандартный подход науки о данных для решения этой задачи. Сначала мы разделили наш набор данных на обучающий набор, который содержал первые 70–80% наших данных (в хронологическом порядке), а затем мы использовали оставшиеся данные в качестве тестового набора.

Метка для каждого экземпляра была сгенерирована путем взятия скорректированного закрытия каждой акции в момент времени t (некоторая дата в прошлом) и сравнения ее с скорректированным закрытием этой акции через N дней (дата, которая также находится в прошлом).

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

Конечно, нет, иначе мы бы не публиковали этот пост!

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

Пример может помочь проиллюстрировать проблему.

Предвзятость в прогнозировании в процессе оценки

Если последний обучающий пример в нашем наборе данных был для Apple 2 января 2011 г. (поскольку 1 января - рыночный выходной), это означает, что нам нужно будет использовать курс акций Apple от 2 января 2012 г., чтобы создать метку для этого пример. Что бы произошло, если бы мы использовали нашу обученную сеть, чтобы спрогнозировать доходность акций Apple на 9 января 2011 г.?

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

Мы проиллюстрируем это на изображении ниже.

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

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

Смена режимов

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

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

Сегодня наша сеть может быть точной. Однако год назад сеть, обученная точно так же, как сеть, обученная сегодня, могла быть крайне неточной.

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

Итак, теперь возникает естественный вопрос: как мы можем учитывать предвзятость прогнозирования и изменение режимов?

Наш ответ заключается в прямой перекрестной проверке.

Прямая перекрестная проверка

В машинном обучении, которое не имеет сильной зависимости от времени, довольно часто используется перекрестная проверка в k-кратном размере для оценки обученной модели. Идея этой техники довольно проста:

  • Выберите значение для k (для нас это часто 10)
  • Для каждой из k итераций создайте подмножество данных, содержащее 1 / k точек данных, и используйте его в качестве тестового набора.
  • Используйте оставшиеся данные в качестве обучающего набора
  • Обучите и оцените свою модель на обучающих и тестовых наборах данных как обычно
  • Следите за метриками по каждому из наборов тестов
  • Когда все модели k обучены, усредните показатели из каждого набора тестов вместе, чтобы получить окончательное значение для всей модели (на этом этапе необходимо обучить модель на всем наборе данных, чтобы получить актуальную модель для использования в производстве)

Для данных, зависящих от времени, используется та же идея. Однако разница заключается в том, как тестовые и обучающие наборы создаются на каждой итерации. Вместо того, чтобы удерживать 1 / k данных при каждом повторении, даты начала и окончания набора данных для обучения продвигаются вперед на каждой итерации, и сеть обучается от начала всего набора данных до конечного периода набора обучающих данных (который должен учитывать смещение опережающего просмотра, о котором мы упоминали выше).

Мы проиллюстрируем это на изображении ниже.

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

Преимущества и недостатки

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

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

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

В данном случае мы полностью верим в поговорку «нельзя управлять тем, что нельзя измерить».

Acks

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

Наконец, если что-то из этого было интересно для вас, и вы хотите узнать больше о том, чем мы занимаемся в Apteo, не стесняйтесь, напишите нам по адресу [email protected]. Мы любим говорить об искусственном интеллекте, финансовых технологиях и акциях.