Все больше и больше нравится использовать R для поиска идей и анализа.
Сегодня я хочу рассказать о небольшом исследовании и сравнении системы прогнозирования на основе алгоритма случайного леса и алгоритма ближайшего соседа.
Вопросы, которые я себе ставил были следующими:
— на сколько алгоритм Random Fores (RF) продуктивнее чем Nearest Neighbor (NN) или наоборот;
— каково влияние параметров количества случайных соседей на работу алгоритма и на сколько оно может оказаться простой подгонкой данных;
— получится ли эффективно сочетать результаты NN для маленькой и большой выборки, избавляясь тем самым от ошибки переоптимизации;
— как оценить надежность обучения;
— какой метод работает лучше, регрессионный или с формализованными ответами;
— когда проводить переобучение;
Данное исследование помогло мне ответить на некоторые вопросы.
В качестве предикторов были использованы некоторые внутридневные метрики (10 штук) акции AAPL за один год, результатом я считал изменение цены акции от Close первой пятиминутной свечи до конца дня. Сразу скажу, предикторы мне показались неэффективными, но суть исследования, все же, была в оценке методов прогнозирования прежде всего. Я надеялся, что алгоритмы смогут выявить определенные паттерны внутри многомерного пространства и использовать их.
И так, первый график показывает эквити за последние 60 дней выборки Out of sample, результатом которой бралась величина изменения цены.
(сразу извинюсь за грамматическую ошибку в легенде, переделывать не стал)
И так, мы видим результат, если бы мы каждый день покупали Apple в сравнении с торговлей Long+Short. Random Forest выглядит достаточно убедительно, за исключение серьезного DrawDown в конце. Неплохо ведут себя NN для 10 и 30 соседей, однако, совокупная эквити для трех NN выглядит неубедительно.
Теперь возьмем и формализуем результат в терминах Flat/Long/Short и посмотрим, что получилось.
Ближние соседи для 10 точек выглядят молодцом, даже немного лучше чем Random Forest. Все остальное очень плохо.
За 60 дней результат в абсолютном выражении очень неплох. Он, кстати, выражен в пунктах, то есть если мы торгуем 100 акций, его надо умножить на 100 и вычесть комиссии.
А теперь посмотрим, на сколько эффективно такое обучение вообще. Out of Sample в этом случае будут 30 процентов выборки.
Здесь я приведу два графика. Один плох совсем, другой выглядит неплохо для Random Forest.
Формализованное обучение:
И второй массив случайных данных.
Как видно, не везде обучение прошло удачно. Random Forest как-то держится, а вот ближние соседи выглядят очень печально.
И так, выводы:
— Random Forest выглядит действительно лучше Nearest Neighbor.
— похоже, параметр ближайших соседей очень сильно влияет на результаты. На каких-то данных лучше работает маленькая выборка, на каких-то — большая. Когда мы говорим о многомерном пространстве и непонятных предикторах, все же все это выглядит очень серьезной авантюрой в стиле бросания дротика.
— сочетать результаты работы ближних соседей получается плохо. К сожалению, по всей видимости происходит рассогласование, ведущее к отсечке сигналов, при этом отнюдь не гарантируется, что согласованность результатов даст правильное направление к действию.
— оценка надежности обучения требует проверки моделей на разных типах данных Out of sample. Можно увидеть как очень положительный, так и очень отрицательный результат.
— если сравнивать абсолютные и формализованные значения результатов, вторые выглядят привлекательнее, однако, может быть есть смысл поработать с рядами данных на предмет сглаживания экстремальных значений.
— по поводу переобучения есть несколько мыслей, но ни требуют дальнейшего исследования.
У Вас изначально небольшая выборка, что ставит результаты под сомнение.
С другой стороны, для метода «ближайшего соседа», строго имхо, надо задавать не фиксированное число соседей, а долю в выборке. 10%, 5 % и так далее.
В США торгуются тысячи акций, ликвидность которых позволяет купить утром и сдать вечером.