Нечеткая логика - это одно из величайших достижений математики XX-го века, если критерием брать практическую пользу. В этой статье мы попытаемся показать, что fuzzy logic может стать простым и мощным инструментом прогнозирования рынков - принципы нечеткой логики так же просты, как и в обычной логике, но при этом система fuzzy logic гораздо гибче, и поэтому может давать более интересные результаты на финансовых рынках, чем система обычных логических операций.
Простое объяснение, что такое fuzzy logic
Нечеткая логика - это уход от категоричности, присущей обычной логической системе, которая использует полярные состояния или степени реальности; это попытка описать не поляризованный черно-белый мир, а более реальный мир со всеми его "50-ю оттенками серого". Это не обычная «истинная или ложная» (1 или 0), булева (двоичная) логика, на которой основаны современные компьютеры. Она в основном обеспечивает основы для приблизительного рассуждения с использованием неточных решений и позволяет использовать лингвистические переменные (записи такого рода, с лингвистическими переменными, используются у нас в моделях авторегрессии и моделях на основе японских подсвечников).
Схематично разницу между нечеткой и булевой логикой можно представить так:
Нечеткая логика была разработана в 1965 году профессором Лотфи Заде в Калифорнийском университете в Беркли. Кстати, Lotfi Askar Zadeh выходец из Азербайджана, и можно сказать, в какой-то мере, наш соотечественник. Первым приложением было выполнение обработки компьютерных данных на основе естественных значений.
Если говорить прямо, состояниями нечеткой логики могут быть не только 1 или 0, но и значения между ними, то есть 0.15, 0.8 и т.д. Например, в двоичной логике, мы можем сказать, что мы имеем стакан горячей воды (то есть 1 или высокий логический уровень) или стакан холодной воды, то есть (0 или низкий логический уровень), но в нечеткой логике, мы можем сказать, что мы имеем стакан теплой воды (ни горячий, ни холодный, то есть где-то между этими двумя крайними состояниями). Четкая логика: да или нет (1, 0). Нечеткая логика: конечно, да; возможно, нет; не могу сказать; возможно да и т.д. В общем вы поняли, это гораздо ближе к реалиям финансового рынка :)
Практический пример системы "из жизни" точнее, из быта, на основе нечеткой логики
Давайте разработаем простую систему нечеткого управления для управления работой стиральной машины, так чтобы нечеткая система контролировала процесс стирки, водозабор, время стирки и скорость отжима. Входными параметрами здесь являются объем одежды, степень загрязнения и тип грязи. В то время как объем одежды определял бы водозабор, степень загрязнения в свою очередь определялась бы прозрачностью воды, а тип грязи определялся временем, когда цвет воды остается неизменным.
Первым шагом будет определение лингвистических переменных и терминов. Для входных данных лингвистические переменные приведены ниже:
Тип грязи: {Greasy, Medium, Not Greasy} (жирное, среднее, не жирное)
Качество грязи: {Large, Medium, Small} (высокое, среднее, незначительное)
Для вывода лингвистические переменные приведены ниже:
Время стирки: {Short, Very Short, Long, Medium, Very Long} (короткий, очень короткий, длинный, средний, очень длинный).
Второй шаг включает в себя построение функций принадлежности. Ниже приведены графики, определяющие функции принадлежности для двух входов. Функции принадлежности для качества грязи:
Функции принадлежности для типа грязи:
Третий шаг включает разработку набора правил для базы знаний. Ниже приведен набор правил с использованием логики IF-THEN (если-тогда):
IF качество грязи Small И Тип грязи Greasy, THEN Время стирки Long.
IF качество грязи Medium И Тип грязи Greasy, THEN Время стирки Long.
IF качество грязи Large и тип грязи Greasy, THEN Время стирки Very Long.
IF качество грязи Small И Тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Medium И Тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Large и тип грязи Medium, THEN Время стирки Medium.
IF качество грязи Small и тип грязи Non-Greasy, THEN Время стирки Very Short.
IF качество грязи Medium И Тип грязи Non-Greasy, THEN Время стирки Medium.
IF качество грязи Large и тип грязи Greasy, THEN Время стирки Very Short.
Сравните вышеприведенное с классической задачей по математике, где все это будет выглядеть чрезвычайно сложной задачей, особенно, если потребуется учитывать множество других условий. Классическая математика будет применять дифференциальные уравнения (которые, я думаю, имеют несколько решений). Применение нечетких правил делает эту задачу более интуитивно понятной. Именно по этой причине нечеткая логика была принята в отрасли. Вместо дифференциальных уравнений, у нас появляется набор правил, каждое из которых из них понятно и для ребенка. Мы только должны произвести правильный путь процедуры по фаззификации и определить нечеткие правила, охватывающие все возможные ситуации.
Fuzzy Logic + Neural Net
Иногда, для сложных систем, определить нечеткие правила бывает непросто. Было бы хорошо найти способ автоматизировать процесс поиска наиболее подходящих нечетких правил. Эта задача решается особым видом нейронной сети, которая называется "нечеткой нейронной сетью". Нейронная сеть ищет соответствие между входами и выходами. Изучая финансовые данные (котировки), которые предварительно были подвергнуты процедуре фаззификации, мы, возможно, сможем научить нейронную сеть выявлять определенные паттерны, существующие в финансовых данных, и тем самым, попытаться прогнозировать рынки.
Кто-то может задать вопрос: "Почему мы должны использовать замысловатые правила вместо анализа самой цены в качестве входных данных для нейронной сети, без использования какой-либо размытости?". Ответ прост: "Мы пытаемся уловить нелинейный процесс изменения фондового рынка".
На самом деле, нечеткие правила относительно финансовых рынком могут быть установлены таким образом, для примера:
Правило 1: Если цена поднялась вверх очень сильно 2 дня назад, а затем немного снизилась 1 день назад, то высока вероятность того, что сегодняшняя цена пойдет вниз.
Правило 2: Если цена поднялась вверх сильно 2 дня назад, а затем немного снизилась 1 день назад, существует высокая вероятность того, что сегодняшняя цена снова пойдет вверх.
И так далее, таких правил может быть довольно много. Заметим, на этой стадии нам не важно, являются ли эти правила правильными или нет (одни будут правильными, другие - нет) - пусть нейронная сеть сама с этим разбирается; в пределах разумного, конечно, потому что эти правила должны быть правдоподобными - формируя входы в нейросеть мы должны выбирать из того, что действительно может сработать. Самое здесь главное - сформировать набор весьма вероятных предположений, чтобы сеть начала с ними работать; и как было сказано выше - здесь нужно определить нечеткие правила, охватывающие все возможные ситуации. В Timing Solution это делается автоматически, прописывать правила вручную, разумеется не потребуется - от вас только потребуется определить степень градуировки в процедуре фаззификации (по умолчанию в нейромодуле используется значение 4).
Как происходить весьма важная процедура фаззификации, одно из базовых условий нечеткой логики? Визуально оценить это можно в статистическом модуле, выглядит это вот так:
Здесь произведена фаззификация со степенью градуировки в 5 значений. Далее, эти фазы будут использоваться для автоматического формирования лингвистических правил в нейромоделях с условиями "если - тогда". Модуль статистики находится здесь:
Записи в модели будут выглядеть так (в примере - модель авторегрессии, фаззификация в четыре значения градуировки; использован параметр Close):
Подробнее об этой модели смотрите в руководстве по модулю Neural Net; кроме того, мы поговорим о ней отдельной статье.
Сергей Тарасов, Рамиль Халиков