Нечеткая логика в Timing Solution

Oct 05, 2018 11:42

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

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

b) второй факт, пользователи нейросети имеет обыкновение закладывать в Neural Net все, что им под руку подвернется - любую информацию, имеет она ценность или нет. С таким подходом перетренировка нейросети становится неизбежной (см. Нейропрогноз: как избежать эффекта перетренированности нейросети?)

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

Итак, вот что мною сделано:

1) Я создал основы специальной стандартизации для описания любого процесса, что может проявляется во времени. Это не просто набор цифр, данный стандарт содержит описание основных функций процесса: как он взаимодействует с миром, какие методы оптимизации предпочтительнее. Здесь применяется методы Fuzzy Logics - нечеткой логики. Эта технология открыта и позволяет добавлять новые кластеры данных в нейросеть, по мере того, как наши познания совершенствуются.

2) Мною разработан специальный тип нейросети, называемый объектно-ориентированной нейронной сетью, который занимается данными объектами. Изменение вот в чем: здесь мы работаем не только с некими цифрами, теперь мы работаем с информацией вообще. Такой подход позволяет максимально использовать имеющуюся информацию (здесь учитываются не только некие факты сами по себе, но суть взаимоотношений между отдельными единицами информационной матрицы). Конечно, эту технологию нужно развивать дальше, и мы это будем делать.

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

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

Регулярный подход основан на модели линейной авторегрессии. При таком подходе можно утверждать примерно следующее:

(Изменение цены сегодня) = A1 x (Изменение цены вчера) + A2 x (Изменение цены два дня назад) + A3 x (Изменение цен три дня назад) и т. д.

Как упоминал Лу Мендельсон (см. http://www.profittaker.com/market_analysis.asp ), этот метод был довольно популярен в 1980-х. Теперь он уступил место другим методам. Почему это произошло?

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

Есть ли способ избежать такого упрощения? Конечно, есть: используйте нейронную сеть и нечеткую логику вместе. Возвращаясь к нашему сравнению, этот способ позволяет не делить всех участников лишь на "плохих и хороших парней" (на две полярные группы). Будет лучше определить несколько групп среди всех участников рынка: "ребята", которые подталкивают рынок вверх; "ребята", которые двигают рынок умеренно; или "ребята", которые двигают рынок вверх лишь ненамного. Такие же группы существуют среди групп "парней", двигающих рынок вниз. Эта процедура называется фаззификацией. Это помогает нам лучше идентифицировать всех игроков. Затем нейронная сеть начинает свою работу, выявляя неочевидные взаимосвязи между игроками и результатом (другими словами, отношения между факторами, влияющими на рынок и цену сегодня). Теперь уже не так важно, что на рынке есть две армии (плохие и хорошие ребята). Самое главное сейчас - это стратегия, используемая каждой из армий. Каждый воин играет свою уникальную роль в этой стратегии. Это уже не просто бухгалтерия, это информация.

В качестве практического примера, см. на эту иллюстрацию процедуры фаззификации в программе Timing Solution:



Это распределение истинного диапазона цен на сырую нефть (% Close-Open) в 1983-2004 годах. Согласно этой процедуре, изменения цен делятся на 6 групп (например, 6 типов разных факторов):

0% - 0,35% - Низкий уровень; 0,35% - 1% - Средний уровень; более 1% - Высокий. Аналогичные группы для нисходящего движения. Когда группы определены, мы можем работать с ними.

Но у этого подхода тоже есть своя проблема, и эта проблема связана с проблемой фаззификации. Сколько классов мы должны использовать, чтобы правильно разделить наших "парней"? Очевидно, что разбить их только на  две групппы будет недостаточно. В приведенном выше примере у нас есть 3 класса для 2 полярных групп факторов, в совокупности это дает нам 2*3=6 групп. Достаточно ли этого? Чем менее подробное разделение мы предоставляем, тем выше вероятность того, что некоторая ценная информация может быть утеряна. Таким образом, точность такого подхода ограничена количеством критериев деления (а также типом функции принадлежности). Например, если какой-то небольшой уровень является ключевым для процесса (например, изменение цены на 1,35%), он может остаться незамеченным, когда у нас есть только эти 3 нечеткие оценки, как в нашем примере (низкая, средняя и высокая). С другой стороны, когда мы используем более детальное разделение, мы можем встретить эффект перетренированности.

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

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

Чтобы продемонстрировать эту технологию в действии, давайте создадим процедуру тестирования на истории для модели, которая сочетает в себе автоматическую регрессию и OONN (объектно-ориентированная нейронная сеть). Мы создали нелинейную модель для прогнозирования будущих движений индекса Доу-Джонс (точнее, осциллятора с периодом=10 бар) с учетом предыдущего изменения Close, RSI и пропорций для ценового бара 100%х(High-Low)/Close, 100%х(Close-Open)/Close и 100%х(Open-Low)/Close, (и, конечно, все эти данные были нормализованы до их использования). Мы также использовали DJI с 1970 по 2004 год, обучали нейронную сеть на 50 интервалах и сделали прогноз для тестируемой модели (тестируемые интервалы были отделены от данных, используемых в интервалах обучения). Вот результаты бэктестинга:



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



Закончить эту статью мне хотелось бы теми же словами, что и в начале: нейросеть может помочь, но она не может заменить человеческий разум. Нейросеть может быть фантастически эффективна в решении таких задач, как управление шпионскими самолетами-беспилотниками, потому что она основана на познаниях реальных людей, которые действительно могли бы летать на этих самолетах в реальной жизни. NN показывает хорошие результаты при использовании технолонии японских свечей, потому что этот метод показал свою эффективность и работает почти 300 лет. Но все, что нуждается в различении и определении, не может быть заменено какой-либо механической системой. Настойчивость в нашей попытке заставить механическую систему думать вместо Человеческого Разума может привести к потере контроля над ней, и природа может отомстить нам, превратив вещь, предназначенную для помощи, в ящик Пандоры.

Выражение "Garbage in, garbage out"; "Мусор (вошел) внутрь, мусор (вышел) наружу" хорошо известно среди профессионалов в области нейросетевых технологий. Они часто ссылаются на утверждение, полагая, что нейронная сеть позволяет выявлять скрытые паттерны. Впрочем, слово "скрытый" не должно использоваться как синоним нашего невежества. Нейронная сеть действительно может найти скрытые паттерны - только если мы предоставим ей адекватный фрейм (язык, контекст), чтобы дать ей возможность вскрыть эти скрытые взаимосвязи. Почему? Просто потому, что "язык - это дом бытия".

Сергей Тарасов

#модель авторегрессии, [модуль Neural Net], [Нечеткая логика в Timing Solution], [статьи Сергея Тарасова], #фаззификация в Timing Solution, [Нейросетевой анализ в Timing Solution]

Previous post Next post
Up