Принятие решений в финансовой сфере, и особенно в области инвестирования, — это всегда работа с высокой степенью неопределенности. Множество разнородных факторов, от макроэкономических показателей до политических рисков, делают точный прогноз практически невозможным. Традиционные математические модели, требующие четких и однозначных данных, часто оказываются бессильны перед лицом неточной, двусмысленной и неполной информации. Именно для таких сложных условий были созданы системы поддержки принятия решений (СППР) — компьютерные системы, помогающие экспертам делать обоснованный выбор.
Со временем, с развитием искусственного интеллекта, появились их более совершенные версии — интеллектуализированные СППР. Они способны не просто обрабатывать данные, а использовать методы, имитирующие человеческое мышление. Одним из ключевых таких методов является нечеткая логика. Ее главная сила — в способности оперировать не строгими числами, а привычными для человека понятиями, такими как «высокий риск», «привлекательная цена» или «незначительные долговые обязательства». Это делает ее незаменимым инструментом для анализа инвестиций, где большинство факторов изначально носят качественный, а не количественный характер.
Итак, мы определили, что нечеткая логика — мощный инструмент для анализа инвестиций. Теперь давайте сформулируем конкретную задачу, которую будет решать наша курсовая работа, и определим ее структуру.
Какую именно задачу мы решаем и каковы теоретические основы
Прежде чем погружаться в практику, важно четко определить рамки проекта и вооружиться необходимой теорией. Цель нашей курсовой работы — разработать нечеткую модель поддержки принятия решений для оценки инвестиционной привлекательности. Для ее достижения необходимо последовательно решить несколько задач:
- Разработать нечеткую модель, включающую входные и выходные лингвистические переменные, а также нечеткие продукционные правила.
- Провести тестирование созданной модели в среде имитационного моделирования MatLab.
- Разработать концепцию и описать прототип пользовательского интерфейса для взаимодействия с моделью.
- Провести гипотетическое тестирование разработанного прототипа.
Основой для нашей работы служит система нечеткого вывода (FIS) — ядро любого приложения, использующего нечеткую логику. Существует два основных типа таких систем: Мамдани (Mamdani) и Сугено (Sugeno), мы будем использовать более наглядный и популярный для таких задач тип Мамдани. Процесс получения решения в такой системе состоит из четырех ключевых этапов:
- Фаззификация: Преобразование четких входных данных (например, уровень инфляции 8%) в нечеткие множества (например, на 70% «Средняя» и на 30% «Высокая»).
- База правил: Применение логических правил формата «ЕСЛИ-ТО», которые составляют мозг системы.
- Агрегирование (логический вывод): Объединение результатов всех сработавших правил в одно итоговое нечеткое множество.
- Дефаззификация: Преобразование этого итогового нечеткого множества обратно в четкое число (например, «Инвестиционная привлекательность равна 68.4 баллам»).
Ключевую роль в этом процессе играют функции принадлежности. Они определяют, в какой степени тот или иной показатель соответствует лингвистическому понятию (например, «Низкий», «Средний», «Высокий»). Эти функции могут иметь разную форму, но наиболее распространены треугольная и гауссова. Все эти компоненты мы будем проектировать и настраивать с помощью специализированного пакета Fuzzy Logic Toolbox в среде MatLab.
Проектирование модели начинается с определения входных переменных
Первый практический шаг — определить, какие факторы будут влиять на наше решение. Это и есть входные лингвистические переменные. Важно выбрать показатели, которые являются значимыми для оценки инвестиционной привлекательности и могут быть выражены количественно. В качестве примера для нашей курсовой работы возьмем три ключевых фактора, которые часто используются в S-образных моделях экономического анализа.
Для каждой переменной нужно выполнить четкую последовательность действий. Разберем ее на примере первого фактора — «Уровень инфляции».
- Название и диапазон. Даем переменной системное имя, например, `Inflation_Level`. Определяем ее реальный диапазон значений, допустим, от 0 до 20%.
- Лингвистические термы. Определяем качественные оценки, которыми может оперировать эксперт. Для инфляции это могут быть термы: «Низкая», «Средняя», «Высокая».
- Функции принадлежности. Для каждого терма задаем функцию, которая будет определять степень его истинности. Например, для терма «Низкая» можно использовать треугольную функцию с параметрами [0 0 7], что означает: инфляция от 0 до 7% будет считаться низкой, с пиком уверенности в точке 0.
После задания этих параметров в редакторе переменных Fuzzy Logic Toolbox в MatLab мы получим наглядный график. На нем будет видно, как пересекаются функции принадлежности и как любое числовое значение из диапазона (например, 5%) будет одновременно принадлежать в разной степени одному или нескольким термам. Это и есть суть фаззификации.
Аналогичную процедуру необходимо проделать для всех остальных входных переменных. Например:
- Переменная `Debt_Level` (Объем долговых обязательств):
- Диапазон: 0-100% от активов.
- Термы: «Низкий», «Средний», «Высокий», «Критический».
- Функции принадлежности: также могут быть заданы треугольными или трапециевидными формами для каждого терма.
- Переменная `Revenue_Dynamics` (Динамика поступлений):
- Диапазон: от -50% до +50% (отрицательные значения — падение).
- Термы: «Отрицательная», «Стабильная», «Растущая».
- Функции принадлежности: здесь также подбираются соответствующие диапазоны и формы.
Тщательная проработка этого этапа — залог того, что модель будет оперировать данными адекватно и в соответствии с логикой предметной области. Именно здесь формализуются базовые «понятия», на которых система будет строить свои умозаключения.
Как мы описываем итоговое решение, или наша выходная переменная
Когда мы определили входные факторы, нужно описать, какой результат мы хотим получить. За это отвечает выходная лингвистическая переменная. В нашем случае она будет отражать итоговую оценку — «Инвестиционную привлекательность». Процесс ее настройки полностью аналогичен работе с входными переменными.
- Название и диапазон. Назовем переменную `Investment_Attractiveness`. Ее результат мы будем измерять в условных баллах, например, в диапазоне от 0 до 100.
- Лингвистические термы. Здесь мы описываем возможные вердикты нашей системы. Логично выделить несколько градаций: «Низкая», «Средняя», «Высокая» и «Очень высокая».
- Функции принадлежности. Каждому из этих термов мы также ставим в соответствие функцию принадлежности на шкале от 0 до 100. Например, терм «Высокая» может быть определен треугольной функцией в диапазоне [60 80 100], что будет означать: все, что выше 80 баллов, — это точно высокая привлекательность, а значения от 60 до 80 — высокая в той или иной степени.
Настроив эту переменную в редакторе Fuzzy Logic Toolbox, мы получим визуальное представление шкалы нашего итогового решения. Теперь у системы есть и «условия» (входные переменные), и «заключения» (выходная переменная). Осталось связать их воедино, объяснив системе, какие комбинации условий к каким заключениям приводят.
Создаем ядро системы, или как сформулировать нечеткие продукционные правила
Это самая творческая и важная часть работы, где знания эксперта превращаются в работающий алгоритм. Мозг нашей модели — это база нечетких продукционных правил. Каждое правило имеет простую и интуитивно понятную структуру «ЕСЛИ-ТО». Оно связывает определенную комбинацию входных условий с одним из выходных решений.
Например, опираясь на наши переменные, мы можем сформулировать такие правила:
Правило 1: ЕСЛИ (`Inflation_Level` есть Низкая) И (`Debt_Level` есть Низкий) И (`Revenue_Dynamics` есть Растущая) ТО (`Investment_Attractiveness` есть Очень высокая).
Правило 2: ЕСЛИ (`Inflation_Level` есть Высокая) И (`Revenue_Dynamics` есть Отрицательная) ТО (`Investment_Attractiveness` есть Низкая).
Эти правила заносятся в специальный редактор (Rule Editor) в MatLab. Система будет обрабатывать их все одновременно. Если текущие входные данные (например, инфляция = 3%, долги = 15%) частично соответствуют условиям нескольких правил, то и выводы этих правил будут учтены с определенным «весом». Именно этот механизм позволяет системе принимать гибкие и взвешенные решения, а не действовать по жесткому бинарному принципу «да/нет».
Для полноценной работы модели необходимо создать достаточное количество правил, чтобы покрыть наиболее вероятные и важные комбинации входных факторов. Обычно для трех переменных с 3-4 термами в каждой требуется от 15 до 30 правил. Успешное применение такого подхода было продемонстрировано, например, финансовой корпорацией Yamaichi Securities, которая использовала систему на основе нечетких правил для игры на рынке ценных бумаг. Вот пример того, как может выглядеть фрагмент базы знаний в виде таблицы:
№ | ЕСЛИ Инфляция… | И Долги… | И Динамика… | ТО Привлекательность… |
---|---|---|---|---|
1 | Низкая | Низкий | Растущая | Очень высокая |
2 | Средняя | Низкий | Растущая | Высокая |
3 | Средняя | Средний | Стабильная | Средняя |
4 | Высокая | Средний | Отрицательная | Низкая |
5 | Высокая | Высокий | Стабильная | Низкая |
Запускаем модель в MatLab и анализируем полученные результаты
Модель полностью спроектирована: у нее есть входы, выход и логический аппарат для принятия решений. Пришло время проверить ее в действии. В Fuzzy Logic Toolbox для этого есть два мощных инструмента: Rule Viewer и Surface Viewer.
Rule Viewer позволяет провести симуляцию для одного конкретного случая. Мы можем вручную задать четкие входные значения и в реальном времени увидеть, как работает модель. Например, установим:
- `Inflation_Level` = 8%
- `Debt_Level` = 15%
- `Revenue_Dynamics` = 5%
На экране Rule Viewer мы увидим всю цепочку вывода: как входные значения были фаззифицированы, какие правила сработали и с какой интенсивностью, как их результаты были объединены и какой итоговый четкий результат был получен после дефаззификации. Допустим, для наших входных данных модель выдаст итоговое значение `Investment_Attractiveness` = 68.4. Это быстрый и наглядный способ проверить логику на единичных примерах.
Однако для комплексного анализа поведения системы используется Surface Viewer. Этот инструмент строит трехмерный график, который показывает зависимость выходной переменной от двух входных (третья при этом фиксируется на каком-то значении). Этот график называется поверхностью управления, и он является главным доказательством адекватности модели.
Например, мы можем построить зависимость привлекательности (`Investment_Attractiveness`) от инфляции (`Inflation_Level`) и долгов (`Debt_Level`). Мы должны увидеть гладкую поверхность. Как видим из графика, при одновременном росте инфляции и долговых обязательств поверхность плавно снижается из «теплой» зоны высоких значений в «холодную» зону низких. Наличие резких скачков или провалов свидетельствовало бы об ошибках в базе правил, а плавная, логичная поверхность подтверждает, что заложенная нами экспертная логика работает корректно во всем диапазоне значений. Это и есть главный результат моделирования, который необходимо представить в курсовой работе.
Как превратить модель в прототип готового приложения
Мы доказали, что наша модель работает корректно. Но для конечного пользователя, например, финансового аналитика, работа в среде MatLab неудобна. Поэтому в хорошей курсовой работе стоит показать, как можно «упаковать» это решение в простой и понятный интерфейс. Этот шаг демонстрирует глубину проработки темы и превращает теоретическую модель в концепт реального рабочего инструмента.
Не нужно создавать полноценное приложение, достаточно описать его прототип. Разработанную в MatLab FIS-модель можно экспортировать и интегрировать в приложения, написанные на других языках. Например, как указано в некоторых практических работах, прототип можно реализовать в среде программирования C++ Builder 6.0, хотя сегодня для этого часто используют Python с библиотеками вроде Tkinter или веб-технологии.
Концепция интерфейса может быть очень простой:
- Несколько полей для ввода числовых значений: «Уровень инфляции, %», «Долговые обязательства, %», «Динамика поступлений, %».
- Кнопка «Рассчитать привлекательность».
- Поле для вывода результата, где будет отображаться не только итоговый балл (например, 68.4), но и соответствующий ему текстовый вердикт («Высокая»).
Создание макета или скриншота такого гипотетического интерфейса станет отличным дополнением к курсовой работе, показывая, что вы мыслите не только как исследователь, но и как разработчик.
Подведение итогов и выводы
Мы прошли весь путь от постановки задачи до концепции готового продукта. Подводя итог проделанной работы, можно сказать, что все поставленные в начале цели были достигнуты. В ходе работы над проектом:
- Была разработана структура нечеткой модели, включающая 3 входные и 1 выходную лингвистическую переменную, а также определены их параметры.
- С помощью базы из продукционных правил была формализована экспертная логика для оценки инвестиционной привлекательности.
- Модель была реализована и протестирована в среде MatLab с использованием Fuzzy Logic Toolbox, где ее адекватность была подтверждена анализом поверхности управления.
- Был предложен концепт простого и понятного пользовательского интерфейса для практического применения модели.
В заключение можно с уверенностью сказать, что нечеткая логика является эффективным и гибким инструментом для решения задач в условиях неопределенности. Созданная модель, несмотря на свою простоту, может служить надежной основой для разработки реальной интеллектуальной системы поддержки принятия решений. Перспективы применения таких систем в автоматизированном анализе эффективности инвестиций очень широки, что подтверждает актуальность и практическую значимость проделанной работы.
Список использованной литературы
- Головина Е.Ю, Дистанционный курс лекций по дисциплине «Интеллектуальные информационные системы».
- Интеллектуальные методы для создания информационных систем: учебное пособие / Е.Ю. Головина.– М.: Издательский дом МЭИ.
- Башмаков А.И., Башмаков И.А. Интеллектуальные информационные технологии: Учеб. пособие.–М.: Изд-во МГТУ им. Н.Э. Баумана.