PolyAnalyst решает задачи интеллектуального анализа данных

Artifical programmer solves the problems of data mining/ А.Зельцер

В течение последних нескольких лет наблюдается бурное развитие систем интеллектуального анализа, интерпретации и представления данных (Data Mining). Этому способствует снижение соотношения цена/производительность вычислительной техники, а также появление большого числа приложений, в процессе работы с которыми предприятия накапливают самую разнообразную информацию. В *CW-M* (1996. No 16) был опубликован обзор информационных хранилищ и средств аналитической обработки данных, в котором подробно рассматривались основные аспекты этой области информационных технологий. В настоящей статье мы знакомим читателей с оригинальным продуктом PolyAnalyst российской компании *Мегапьютер Интеллидженс*, функциониующем на платформе IBM-совместимых ПК с операционной системой OS/2 (он демонстрировался на выставке Windows Expo'96.

Существующие системы, применяемые для поиска скрытой в архивах данных информации, такие как Intelligent Miner от IBM или MineSet от Silicon Graphics, требуют дорогостоящих высокопроизводительных RISK-машин, как правило многопроцессорных. Но предметом исследования не обязательно являются крупные хранилища данных. С помощью подобных продуктов можно изучать любой сложный объект, для которого не существует хороших готовых моделей, например результаты социологического опроса или медицинского обследования, где небольшое количество информации (часто неполной) описывает такую сложную систему, как общество или человеческий организм.

PolyAnalyst нацелен именно на такие задачи. В числе его пользователей представители самых различных отраслей - от медицины до финансов. Благодаря оригинальному техническому решению этот пакет экономичен и гибок с точки зрения ставящихся перед ним проблем. Когда системы анализируют данные, они формулируют получаемые знания на некотором формальном языке. И чем он мощнее, тем больше закономерностей можно отыскать. Многие существующие продукты, относящиеся к категории Data Mining, формализуют полученные знания в виде логических формул, определяющих операции сравнения значений полей базы данных с константами. Такой формальный метод сильно ограничивает область применения этих систем, так как они просто неспособны выразить знания о других взаимосвязях, имеющих место в исследуемых данных. С другой стороны, есть большой класс систем, которые позволяют обнаруживать любые зависимости в данных, но не в состоянии сформулировать их на сколько-нибудь понятном языке. Примером могут служить нейронные сети: они прогнозируют поведение конкретных анализируемых систем, но процесс, приводящий к тому или иному результату, не поддается формальному описанию. Однако в таких приложениях, как финансовый анализ, дял работающего на компьютере эксперта важно точно знать, чем определяются те или иные выводы, не упущены ли какие-либо факторы, о которых система не могла знать, и т.д. Единственной гарантией точности ответа может быть лишь четкое понимание причин, по которым принимается то или иное решение.

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

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

Работу системы можно представить следующим образом: некий внутренний искусственный программист, обнаружив зависимость в данных (например, одного поля от других), выражает ее средствами функционального программирования. Затем вносит в полученную программу некоторые модификации с применением методов так называемых обобщающих преобразований, гарантирующих, что потомок будет описывать анализируемый набор данных не хуже, чем исходная родительская программа. Таким образом формируется популяция программ, из которой методом искусственного отбора выделяются растущие, постепенно усложняющиеся генетические линии.

Рассмотрим этот процесс на примере рынка ГКО. Известны котировки ценных бумаг, количество поданных заявок, объемы сделок и т.д. В простейшем случае задача сводится к тому, чтобы найти самый выгодный финансовый инструмент, т.е. выявить наиболее привлекательный для инвесторов выпуск ГКО и определить соответствующую торговую стратегию, заданную некоторой функциональной программой. Если системе PolyAnalyst предложить фрагмент истории рынка, то ее внутренний эволюционный механизм синтезирует программу, определяющую правила оптимальной торговой стратегии для данного отрезка времени. Как показывает практика, эта же торговая стратегия, оставаясь близкой к оптимальной, может быть использована для выработки решений по управлению портфелем ГКО в продолжение еще 1 - 1,5 месяцев.

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

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

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

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

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

Внутренние механизмы PolyAnalyst легко распараллеливаются - анализ каждой дочерней синтезированной *внутренним программистом* программы можно поручить отдельному процессору. В настоящее время *Мегапьютер Интеллидженс* работает над созданием программно-аппаратного комплекса с применением 10-модульной транспьютерной платы для IBM-совместимого ПК. Операционная система OS/2 содержит все необходимые сервисные средства, позволяющие легко написать соответствующие драйверы.

К концу текущего года на рынок поступит версия PolyAnalyst для Windows NT. Кроме того, существует сетевая версия клиент/сервер, которая в настоящее время проходит тестирование. Она позволит одному или нескольким серверам, работающим под NT или OS/2, одновременно обслуживать множество клиентов.