Антон Шмаков,
старший консультант отдела
бизнес-анализа
и хранилищ данных
Консалтинговая
группа «Борлас» (Москва)
Источник: Oracle Magazine - Русское издание
Oracle Real Time Decisions (ORTD) – специальный инструмент от компании Oracle, предназначенный для автоматизации принятия решений в режиме реального времени (ранее об этом продукте была опубликована статья «Глубинный анализ данных в режиме реального времени: Oracle Real Time Decisions»). Он позволяет строить сложные прогностические модели, опираясь на анализ исторических и оперативных данных. Кроме мощного аналитического движка, ORTD предоставляет бизнес-пользователям и разработчикам полную инфраструктуру как для построения моделей, так и для их повседневного исполнения.
В статье «Решения «растут» на деревьях» (Decisions Grow on Trees, by Ron Hardman) описывается конкретный тип классификации данных, называемый деревья решений. Этот метод был не так давно реализован в продукте Oracle Data Miner (ODM). Результаты его работы легко воспринимаются визуально и могут быть легко объяснены в бизнес-терминах.
В этой статье мы хотели бы познакомить читателей с ORTD на практическом уровне. В ней описывается весь путь от установки и настройки ORTD и до создания проекта и получения практических результатов. В качестве бизнес задачи предлагается взять пример из уже упоминавшейся статьи «Решения «растут» на деревьях». Следует отметить, что в Real Time Decisions реализованы Байесовский классификатор и регрессионная модель, деревья решений в нем не реализованы. Мы построим небольшой тестовый проект в ORTD, целью которого будет продемонстрировать работу в ORTD и сравнить результаты работы Байесовского классификатора в Real Time Decisions, с деревьями решений в ODM.
Рассмотрим бизнес ситуацию. Производитель предлагает два продукта, А и B. Относительно них имеется очень скудная информация, а именно тип продукта (PRODUCT), версия продукта (VERSION), время его последней модификации (LAST_UPGRADE_YEAR) и отзыв покупателей (FEEDBACK). Производитель хочет, во-первых, узнать как связаны отзывы покупателей с характеристиками продукта и, во-вторых, построить модель для прогнозирования будущих отзывов. В упоминаемой статье автор строит модель классификации на основе деревьев решений в Oracle Data Miner. Мы же попробуем построить Байесовскую модель в Oracle Real Time Decisions, c помощью которой мы сможем проанализировать входные данные.
SQL>create user rtd identified by rtd; SQL>grant resource,connect to rtd;
Поскольку администрирование ORTD осуществляется в JConsole через JMX протокол, надо настроить его поддержку в OC4J.
set JVMARGS=%JVMARGS% -Dcom.sun.management.jmxremote=true set JVMARGS=%JVMARGS% -Dcom.sun.management.jmxremote.port=12345 set JVMARGS=%JVMARGS% -Dcom.sun.management.jmxremote.authenticate=true set JVMARGS=%JVMARGS% -Dcom.sun.management.jmxremote.ssl=false
Для удобства настроим ORTD на отдельный порт 8080.
<web-site default="true" path="./default-web-site.xml" />
строку
<web-site default="true" path="./rtd-web-site.xml"/>.
monitorRole QED controlRole R&D
OC4J_HOME/bin/oc4j.cmd
–start
Для корректной работы ORTD надо настроить JDBC источники в OC4J для схемы с метаданными.
| Свойство | Значение |
|---|---|
| Application | Default |
| Connection Pool Type | New Connection Pool |
| Name | RTDConnectionPool |
| Connection Factory Class | Oracle.jdbc.driver.OracleDriver |
| URL | Ваша строка соединения к базе данных |
| Username | rtd |
| Password (Use Cleartext Password) | rtd |
| Свойство | Значение |
|---|---|
| Application | Default |
| Data Source Type | Managed Data Source |
| Name | RTD_DS |
| JNDI Location | jdbc/SDDS (жестко прошито в ORTD) |
| Connection Pool | RTDConnectionPool |
Теперь можно «задеплоить» приложение ORTD на сервер.
| Свойство | Значение |
|---|---|
| Application Name | OracleRTD |
| Parent Application | default |
| Bind Web Module to Site | rtd-web-site |
Создадим и настроим схему SURVEYS из статьи «Решения «растут» на деревьях» (Decisions Grow on Trees, by Ron Hardman). Кроме того, зарегистрируем ее в JDBC источниках в OC4J, чтобы мы могли работать с ней в Real Time Decisions.
Настроим дополнительный JDBC источник для схемы Survyes.
| Свойство | Значение |
|---|---|
| Application | Default |
| Connection Pool Type | New Connection Pool |
| Name | SurveysConnectionPool |
| Connection Factory Class | oracle.jdbc.driver.OracleDriver |
| URL | Ваша строка соединения к базе данных |
| Username | surveys |
| Password (Use Cleartext Password) | surveys |
| Свойство | Значение |
|---|---|
| Application | Default |
| Data Source Type | Managed Data Source |
| Name | SURVYES_DS |
| JNDI Location | jdbc/SURVEYSDS |
| Connection Pool | SurveysConnectionPool |
<resource-ref id="SURVEYSDS_RTIS">
<res-ref-name>SURVEYSDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
<resource-ref-mapping name="SDDS" location="jdbc/SDDS" />
строку
<resource-ref-mapping name="SURVEYSDS" location="jdbc/SURVEYSDS" />
Итак, теперь, у нас есть полностью настроенный Oracle Real Time Decisions и мы можем приступить к созданию проекта.
Настройка Oracle Real Time Decisions осуществляется через стандартный инструмент Java JConsole, работающий через JMX протокол.
Из всех закладок самая важная для нас – это MBeans, поскольку MBeans и протокол JMX позволяют читать и устанавливать атрибуты, вызывать операции (методы) MBean, подписываться и получать нотификации.
Включим поддержку аутентификации средствами самого Oracle Real Time Decisions.
Создадим администратора
Вся разработка для Real Time Decisions ведется в Decision Studio, специальном инструменте, построенном на основе движка Eclipse.
Интерфейс Decision Studio устроен следующим образом.
Для того, чтобы можно было заходить в проект из Decision Studion (Web-приложение для конечного пользователя, необходимо дать доступ пользователя к проекту.
На предыдущих шагах, мы настроили в OC4J и ORTD поддержку нашего источника данных Surveys Data Source.
К этому моменту мы создали новый проект, настроили доступ пользователя admin к нему, настроили источник данных из схемы Surveys. Теперь настроим основную логику работы.
Создадим сущность, описывающую событие, что конкретный продукт получил или положительную или отрицательную оценку.
В таблице поля, которые были импортированы, автоматически настроены на источник Surveys Data Source. Созданное нами поле Id не имеет привязки к источнику. Нам надо привязать созданный нами атрибут на входные атрибуты.
Во всех проекта Real Time Decisions есть специальная сущность Session, которая создается при открытии новой сессии к серверу. Нам надо связать сущность Session с только что созданной сущностью Satisfaction
Для построения анализа зависимостей оценки типа продукта, его версии и год обновления , надо создать группу возможных оценок продукта.
C помощью атрибута code, будем определять оценку, которую получает той или иной продукт. Создадим сами оценки.
Перейдем к созданию модели для поиска зависимостей между оценками продукта и его характеристиками.
Необходимо исключить саму оценку из анализа зависимостей.
Теперь создадим простейший информатор, который будет добавлять новые прецеденты к модели анализа FeedbackAnalysis
Для работы информатора надо выбрать Session Key и ввести логику его работы.
На закладке Logic вводится вся логика работы информатора. Логика пишется на языке Java. Список всех методов можно посмотреть в документации. Для обращения к созданным сущностям и объектам, используется стандартная нотация. Поскольку в Real Time Decisions есть сущность по умолчанию Session, то мы можем обратиться к ней всегда. Кроме того, на предыдущих шагах, мы связали Сущность Session c сущностью Satisfaction.
Теперь создадим еще одного информатора, который будет закрывать сессию.
Остается последний шаг, указать модели анализа выбора FeedbackAnalysis, где осуществляется добавление нового прецедента.
После того, как мы создали все необходимые структуры, для того чтобы их протестировать , необходимо «задеплоить» проект на сервер, для этого надо выбрать в меню Project > Deploy. Затем выбрать проект Survyes, ввести название Inline Service – Surveys, Deploymeny State – Development, отметить Terminate active sessions и нажать Deploy.
Если все было сделано правильно, то проект удачно «отдеплоится» на сервер и может приступать к тестированию. Если возникнут ошибки, то их список можно посмотреть, выбрав в меню Windows > Show View > Problems.
Для тестирования необходимо выбрать Windows > Show View > Test.
В Integration Point надо выбрать Process, тогда в таблице Request Inputs появится одно поле Id. Введем значение 25 и нажмем справа вверху на кнопку Execute Request. Сервер выполнит наш запрос и запишет результаты в лог. Откроем закладку Log.
Сервер сделает запрос к таблице CUSTOMER_SATISFACTION по указанному Id, возьмем все характеристики по продукту, и запишет в модель анализа FeedbackAnalysis положительный или отрицательный отзыв.
Для того, чтобы не перебирать руками все записи в таблице CUSTOMER_SATISFACTION, для построения модели анализа. В состав Oracle Real Time Decisions входит специальный инструмент для моделирования работы системы. Называется он Oracle RTD Load Generator и находится RTD_HOME/scripts/loadgen.cmd. Запустим его.
| Свойство | Значение |
|---|---|
| Client Configuration File | RTD_HOME/client/clientHttpEndPoints.properties |
| Graphs Refresh Interval in Seconds | 1 |
| Inline Service | Surveys (мы указывали название, когда деплоили проект на сервер) |
| Random Number Generator Seed | -1 |
| Think Time | Fixed Global Think Time |
| Constant | 0 |
| Number of Concurrent Scripts to Run | 1 |
| Maximum Number of Scripts to Run | 4920 |
| Enable Logging | Убрать галку |
| Свойство | Значение |
|---|---|
| Type | Message |
| Integration Point | Process (Точное название, как он называется в проекте) |
| Inline Service | Surveys (мы указывали название, когда деплоили проект на сервер) |
| Is Asynchronous | Не отмечен |
| Свойство | Значение |
|---|---|
| Type | Message |
| Integration Point | End (Точное название, как он называется в проекте) |
| Inline Service | Surveys (мы указывали название, когда деплоили проект на сервер) |
| Is Asynchronous | Не отмечен |
Построенная нам скрипт будет генерит последовательно id с 1 по 4920 и вызывать шаги Process и End, моделируя работу оператора, который вводит информацию об отзывах о продуктах.
Запустим выполнение построенного нами скрипта.
Если все было сделано правильно, то в поле Total Finished Scripts будет стоять 4920, а в поле Total Errors – 0. Это означает, что все запросы были успешно обработаны сервером Real Time Decisions.
Чтобы посмотреть результаты, надо зайти в Decision Center - приложение для среды J2EE, которое обеспечивает доступ к проекту через Web и позволяет бизнес пользователям просматривать и администрировать проекты, следить за работой всей системы, собирать статистику. На сегодняшний момент корректно Decision Center работает только с Internet Explorer.
После этого открывается интерфейс Decision Center, слева отображается дерево объектов системы, которые можно анализировать.
На Integration Map отображается вся информация о логике работы системы, в ней присутствуют все объекты взаимодействия: информаторы (Informants) и советчики (Advisors). В ней можно интерактивно выполнять тот или иной объект, указывая его входные параметры. В нашем тестовом проекте мы ввели только два информаторы Process, которые записывает очередную реакцию на продукт в модель FeedbackAnalysis и End, который закрывает сессию.
Ветка Decision Process является для нас наиболее важной, потому что именно там, находится вся информация о построенной модели для анализа отзывов покупателей.
Мы увидим общую информацию по группе выборов Feedback, сколько было положительных и отрицательных отзывов.
На этой закладке выводится общая информация по прогнозированию значений атрибутов. Мы видим, что наилучшие прогноз получается на негативных отзывах (NEGATIVE), причем наибольшую влияние на отзыв оказывает атрибуты LAST_UPGRADE_YEAR, VERSION, PRODUCT.
Для NEGATIVE мы видим, что наибольшая корреляция наблюдается с LAST_UPGRADE_YEAR = 1991, VERSION = 1 и PRODUCT = A (в порядке степени корреляции)
В то время как для POSITIVE наиболее характерно VERSION = 3, LAST_UPGRADE_YEAR = 2006 и PRODUCT = B (в порядке степени корреляции).
Для NEGATIVE указано, качество предсказания 83%, причем по LAST_UPGRADE_YEAR качество, даже выше, чем вся модель – 85%.
Получим, что негативные отзывы наиболее сильно коррелированны со следующими значениями атрибута LAST_UPGRADE_YEAR: 1999, 2001, 2002 (в порядке степени влияния).
Для позитивных отзывов получим следующее распределение по атрибуту LAST_UPGRADE_YEAR
Наиболее сильно коррелированные годы для POSITIVE: 2005,2006,2003,2004 (в порядке степени влияния).
Аналогичным образом, мы посмотреть результаты по атрибутам VERSION и PRODUCT.
В результате получаются следующие наиболее устойчивые кластеры
NEGATIVE: LAST_UPGRADE_YEAR: 1999, 2001, 2002 VERSION: 1,2 PRODUCT: A POSITIVE: LAST_UPGRADE_YEAR: 2005, 2006, 2003, 2004 VERSION: 3 PRODUCT: B
Таким образом, мы получили следующие результаты: основное расщепление или ветвление осуществляет по атрибуту LAST_UPGRADE_YEAR, если он меньше 2003 года, то отзыв отрицательный, иначе он положительный. При этом если учитывать атрибуты VERSION и PRODUCT в анализе, то получается, что отрицательный отзыв получают продукт A с версиями 1 и 2, а положительный B с версиями 3.
Если посмотреть на результаты, которые были получены в статье «Решения «растут» на деревьях» (Decisions Grow on Trees, by Ron Hardman) с полученными нами, то видно, что они совпадают. Отличия лишь в максимальной достоверности классификации и представлении самих результатов. В Data Mining Option была получена точность предсказания на уровне 90%. В Real Time Decisions максимальная точность была 83%. Связано это с тем, что в Real Time Decisions использовался Байесовский классификатор, а в Oracle Data Mining деревья решений, которые в данном случае оказались лучше. С точки зрения графической интерпретации результатов, в Oracle Data Miner они были представлены в виде иерархической группировки признаков и их значений (дерева решений). В Real Time Decisions они же были представлены в виде упорядоченных списков коррелированных признаков и их значений. Каждый вариант представления информации имеет свои достоинства и недостатки.
На данном примере очевидными становятся различия в применении Oracle Data Mining и Real Time Decisions. В Data Mining можно легко и быстро осуществить сложный и глубокий анализ на уровне базы данных, причем достоверность классификации будет выше. С другой стороны Real Time Decisions позволяет сроить менее глубокий анализ, но в режиме реального времени. В нашем случае в качестве он-лайн системы, которая генерила события выступал специальный инструмент LoadGen, но с тем же успехом можно подключить и любое бизнес приложение. Real Time Decisions в реальном времени будет пересчитывать модель и строить закономерности между признаками.