uso de sistema especialista para decisão do perfil de um investidor

Propaganda
USO DE SISTEMA ESPECIALISTA PARA DECISÃO DO PERFIL DE UM
INVESTIDOR VIA WEB
Marcela Gonçalves Pazo
Daniela Pasotto
[email protected]
[email protected]
Silvana Vicente Lobão
Rogério de Oliveira
[email protected]
[email protected]
Faculdade de Computação e Informática
Universidade Presbiteriana Mackenzie
R. da Consolacão, 895 - Prédio 13
01302-907, São Paulo, SP - Brasil
RESUMO
Ainda existe uma forte resistência ao uso de sistemas especialistas em sistemas comerciais, seja pela falta de
conhecimento por parte dos fornecedores de aplicações, seja pela falta de ferramentas e soluções, em contraposição
a um amplo suporte às técnicas tradicionais de desenvolvimento. Este estudo explora o uso de uma ferramenta de
construção de sistemas especialistas (o Jess) no desenvolvimento de um aplicativo para decisão do perfil de
investidor do usuário (conservador, moderado ou agressivo) mostrando alternativas de como essa ferramenta pode
ser facilmente integrada a técnicas amplamente utilizadas no desenvolvimento de aplicações comerciais (Java e
tecnologias Web), agregando vantagens ao desenvolvimento e permitindo superar algumas das limitações da
programação tradicional.
Palavras-chave: sistemas especialistas, Java, aquisição do conhecimento, IA.
ABSTRACT
Commercial systems have still been avoid to use expert system, either for the lack of knowledge by the applications
suppliers, either for the lack of tools and solutions, in contraposition to a large number of the traditional techniques
and tools to develop standard applications. This study investigates the use of a tool for build expert systems (the
Jess, a expert system shell) in the development of an application that decides the user’s investor financial skill
(conservative, moderate or aggressive). It shows alternatives of how this tool can be integrated to the most common
and up to date techniques have been used in development of commercial systems (such as Java and Web
technologies), adding advantages and allowing to surpass some limitations of the traditional programming.
Keywords: expert systems, Java, knowledge acquisition, IA.
1
1 Introdução
Sistemas especialistas e técnicas de inteligência artificial em geral, não obstante os
resultados que possam proporcionar, ainda são utilizados de forma bastante modesta em
aplicativos comerciais quando comparado o uso em outras áreas (controle, bio-medicina,
sistemas de suporte a decisão, diagnóstico de falhas, planejamento etc.) e frente às inúmeras
soluções de suporte ao desenvolvimento tradicional (LIU, 2000).
De fato os modelos de
engenharia de software tradicionais e modelos de dados e processos, só recentemente
contemplam soluções como aquisição e representação do conhecimento, ou mecanismos de
inferência ou lógica difusa (CARLSON, 1998), (ABULSOROUR,2003).
Este estudo procura mostrar a viabilidade e as vantagens do uso de sistemas especialistas
no desenvolvimento de aplicações comerciais, como processamento de operações de venda,
aplicações financeiras e controle de processos no setor de serviços. Para isso utilizamos um shell
para construção de sistemas especialistas baseados em regras, o Jess (FRIEDMAN-HILL, 2002),
que permite uma fácil integração das tecnologias atuais de desenvolvimento de aplicações
(aplicações Web, e as diversas tecnologias Java como Javabeans e Servlets – ver (DEITEL,
2000)).
Como aplicação dessa arquitetura optamos pelo desenvolvimento de um aplicativo que
permite definir o perfil de investidor do usuário. Essa aplicação apresenta duas características
que a tornam bastante adequada ao nosso propósito: por um lado pode ser encontrada em
inúmeros aplicativos e sites comerciais, como os de bancos, corretoras de valores e sites
consultoria de investimentos; por outro permite explorar algumas limitações da programação e
desenvolvimento tradicionais que podem ser adequadamente endereçadas por sistemas
especialistas baseados em regras, como diferentes graus de confiança das informações.
2 Descrição do modelo
Jess (Java Expert System Shell) é um “script shell”
para construção de sistemas
especialistas baseados em regras inteiramente desenvolvido em Java (FRIEDMAN-HILL, 2002).
Originalmente baseado na linguagem CLIPS (RILEY, 2002), o Jess ainda mantêm grande
compatibilidade com a linguagem CLIPS, mas adiciona uma série de facilidades. Entre elas o
Jess integra a linguagem de scripts, a base de conhecimento e sua máquina de inferência ao
2
ambiente Java e suas tecnologias, como J2EE, Javabeans e padrões de projeto (“java patterns”)
(ABULSOROUR, 2003), (DEITEL, 2000). Isso permite o surgimento de diversas extensões do
Jess, como a integração com pacotes de lógica difusa (“fuzzy”) e com outras tecnologias
relacionadas ao ambiente Java como o JDBC e o XML, que fornecem mecanismos adicionais
para o armazenamento da base de conhecimento (ABULSOROUR, 2003) (FRIEDMAN-HILL,
2002).
O Java é uma linguagem orientada a objetos que vem se constituindo em um padrão
aberto de linguagem para o desenvolvimento de aplicações web. Grande parte dos sistemas
especialistas foram construídos usando técnicas convencionais de programação estruturada (LIU,
2000). Não obstante esse sucesso, as técnicas de orientação a objeto mostram-se mais flexíveis e
naturais para o desenvolvimento, sobretudo de aplicações complexas, contexto em que
encontram-se os sistemas especialistas. Desse modo, a modelagem orientada a objetos, mais
próxima de como percebemos o mundo real, também parece mais adequada para o
desenvolvimento de sistemas especialistas em que o sistema parece “agir” como um humano
especialista (LIU, 2000).
2.1 Integrando o sistema especialista a uma aplicação
Aplicações em Jess podem ser desenvolvidas de diferentes maneiras (CARLSON, 1998)
(FRIEDMAN-HILL, 2002):
1. Podem ser desenvolvidas fazendo uso de scripts na linguagem Jess, executados sem o uso
de código Java (scripts em grande parte compatíveis com a linguagem CLIPS) ou
contendo diferentes níveis de código Java (APIs, código Java customizado e scripts sob a
classe main fornecida pelo Jess).
2. Usando uma classe Java que carrega em tempo de execução scripts na linguagem Jess.
3. Ou, utilizando unicamente classes em Java que interagem com as APIs Java do pacote
Jess.
Avaliadas essas três opções verificamos que a opção (2) é a mais adequada para o
desenvolvimento de um protótipo de aplicação comercial. A opção (1) apresenta a limitação de
restringir-se ao uso limitado de uma linguagem de scripts; a opção (3), seria uma alternativa
bastante adequada, mas, na presente versão do Jess não suporta todas as suas funcionalidades do
3
pacote (FRIEDMAN-HILL, 2002); a opção (2), por outro lado permite o uso de todos os
recursos proporcionados pelo ambiente Java (“multithread”, “applets”, componentes e outros) e
o acesso completo às funcionalidades do Jess.
Essa opção basicamente consiste em carregarmos através de uma classe Java um script
em linguagem Jess residente em um “flat file”. Esse arquivo contém a base de conhecimento e
regras que compõem a parte “especialista” de nosso sistema. Toda parte de interface com o
usuário, como uma interface web ou interfaces gráficas; lógica adicional da aplicação, como
consistência de dados, controle de fluxo da aplicação e acesso a outros objetos; e interfaces,
como acesso à banco de dados; podem ser manipuladas pelo código Java da aplicação.
O código abaixo apresenta os principais itens dessa forma de implementação em um
aplicativo Java.
public static void main(String[] argv) throws JessException
{ Rete rete = new Rete();
// Carrega regras para o algoritmo Rete
rete.executeCommand("(Regras.clp)");
rete.executeCommand("(reset)");
// Cria e instancia Beans
...
// Carrega contexto (Beans)
Funcall f = new Funcall("definstance", rete);
f.add(new Value(<values>, RU.ATOM));
f.add(new Value(<bean>));
...
// Submete contexto a máquina de inferência
f.execute(rete.getGlobalContext());
while (<bean>.isIntact())
rete.executeCommand("(run)");
}
}
O Jess utiliza-se da tecnologia de “beans” (componentes Javabeans) para permitir que as
regras tenham acesso aos métodos Get()/Set()
das instâncias beans como simples
propriedades dos objetos (ABULSOROUR, 2003). Assim as propriedades são lidas e alteradas
pela máquina de inferência do Jess. O padrão JavaBeans ainda possibilita que as modificações
4
nas propriedades sejam automaticamente notificadas para a máquina de inferência quando
ocorrem.
2.2 Regras para definição do perfil de um investidor
Desenvolvemos uma aplicação com o objetivo definir o perfil de investidor de um
usuário entre 3 categorias: conservador, moderado e agressivo.
Um investidor conservador é aquele que não está disposto a correr riscos e a aplicar
dinheiro em investimentos com grande oscilação, ou ainda, sua atual situação não permite
investimentos que envolvam altos riscos e que possam comprometer o capital investido. Um
investidor moderado está disposto a correr um risco um risco um pouco mais elevado para obter
uma rentabilidade maior, está propenso a aplicar uma parcela significativa do dinheiro em
investimentos que oscilam muito destinando, o restante, para aplicações mais seguras. Por último
o investidor agressivo está disposto a correr riscos para conseguir a máxima rentabilidade, está
propenso a investir a maior parte de seu dinheiro em aplicações que apresentam grande oscilação
e a destinar uma parcela mínima para aplicações mais seguras que preservem o capital investido.
Os especialistas buscam propor as opções de investimento mais adequadas ao perfil de
um dado cliente buscando garantir a satisfação do investidor no que se refere à rentabilidade e à
proteção do capital desejada. Para isso desenvolveram uma série de regras que permitem definir
o perfil do investidor através de seu histórico de investimentos, dados pessoais, intenção do
investimento e informações de receita e capital. Essas informações como aplicações anteriores e
satisfação com o retorno obtido (histórico de investimentos), idade, tipo de profissão, tempo de
retorno esperado de uma aplicação (intenção do investimento), renda e bens do usuário
influenciam diferentemente na definição do perfil do investidor, o qual ainda pode variar ao
longo tempo com o histórico do cliente.
Essas regras constituem o material para a construção da base de conhecimento da nossa
aplicação. Para a montagem das regras e fatos da base de conhecimento adotamos uma
abordagem bastante prática baseada em diferentes sites que buscam auxiliar o usuário na
definição de seu perfil de investidor, os quais possuem uma série de questões e esclarecimentos
para o investidor.
5
2.3 Estrutura de base de conhecimento
Para o desenvolvimento da base de conhecimento utilizamos um shell de sistema
especialista, o JESS (Java Expert System Shell). A máquina de inferência do JESS implementa
um algoritmo Rete (RUSSELL, 1995) que permite grande eficiência no processamento de regras
pelo sistema. Sua máquina de inferência suporta tanto o encadeamento para trás (backward
chaining) como o encadeamento de regras para frente (foreward chaining) (CHUN, 2001). O
encadeamento para trás é o mais empregado e destaca-se como mais intuitivo para o
desenvolvedor, sendo a sua base o mecanismo de recursão (CHUN, 2001). Neste trabalho
empregamos essa forma de encadeamento sendo a mais adequada para problemas de classe de
interpretação.
A estrutura básica da aplicação é uma base de conhecimento que armazena um conjunto
de regras, fatos e heurísticas que juntos correspondem ao conhecimento do especialista no
domínio sobre o qual foi construído o sistema. O motor de inferência é responsável pelo
processamento do conhecimento. De forma geral, podemos afirmar que o processo permite tirar
conclusões a partir do conhecimento armazenado, explorando o encadeamento lógico existente
na base de conhecimento.
Jess
usuário
Interface
do
Usuário
Interface de
programação
JAVA
Máquina
De
Inferência
Base de
Conhecimento
Figura 1: Estrutura do sistema especialista.
6
O encadeamento é realizado a partir de diversas questões feitas para o usuário. Nossa
construção permite que a interface com o usuário e a base de conhecimento sejam independentes
garantindo a flexibilidade da aplicação. As respostas fornecidas criam novos fatos na base de
conhecimento que permitirão deduzir o perfil de investidor do usuário. A figura 1 mostra de
forma esquemática essa estrutura.
Iniciamos a construção da base de conhecimento criando templates que são estruturas
para inserção de dados na base no Jess. O templates funcionam como a definição de classes em
um linguagem orientada a objetos onde as variáveis os slots representam as variáveis de
instância
da
classe.
Abaixo
a
definição
dos
templates
usuariorenda
e
usuariograusatisfacao utilizados na aplicação para armazenar dados do usuário e sua
satisfação com investimentos anteriores:
;; define dados do usuário
(deftemplate usuariorenda
(slot estadocivil)
(slot dependentes)
(slot divida)
)
;; define satisfação do usuário com investimentos anteriores
(deftemplate usuariograusatisfacao
(slot grau (type integer))
)
As perguntas feitas ao usuário são implementadas com o conceito de regras, essas regras
são definidas no Jess por uma estrutura chamada defrule. Uma regra “dispara” as instruções à
direita da regra (após =>) conforme são satisfeitas as condições do lado esquerdo (anterior a =>).
Abaixo uma implementação simples de regra na forma de script shell para o controle de fluxo
das questões ao usuário.
;; verifica satisfação do usuário com investimentos anteriores
(defrule R0
(usuarioinvestimento (investiu sim))
=>
(printout t "7. Forneça o grau de satisfacao (0-100) em
investimentos anteriores" (bind ?leitura (read))
7
(if (and(>= ?leitura 1)(<= ?leitura 33)) then
(bind ?alternativa7 1/33)
else
(if (and (>= ?leitura 34)(<= ?leitura 66)) then
(bind ?alternativa7 34/66)
else
(bind ?alternativa7 67/100)
)
)
(assert (usuariograusatisfacao (grau ?alternativa7)))
(printout t crlf crlf))
À medida que o usuário entra com os dados no aplicativo um conjunto de cerca de 30
regras são verificadas fazendo as asserções necessárias e criando novos fatos na base de
conhecimento.
;; regras para inferência
(defrule R1 ;; dados pessoais
(usuariorenda (estadocivil casado)
(dependentes possui) (divida comdivida))
=> (assert
(caracteristicasrenda (renda rendacomprometida))))
...
(defrule R28 ;; tolerância a risco e investimentos anteriores
(usuariotolerancia (tipo naotolerante))
(usuarioinvestimento (investiu nao))
=>
(assert (usuariograusatisfacao (grau 0)))
(assert (perfil conservador))))
...
Cada regra possui do lado esquerdo a => um fato do tipo (<template> [ (
<slot> , <valor> ]). Esses fatos verificados o sistema adiciona novos fatos na base na
forma (assert (<template> [ ( <slot> , <valor> ])).
Completada a inserção dos fatos do usuário na base e realizada a verificação das
alternativas segundo as regras fornecidas pelo especialista, o aplicativo retorna como resultado o
perfil de investimento mais adequado ao usuário. Abaixo o retorno final via shell script:
8
;; resultado final
(defrule FinalRule
(perfil moderado) ;; perfil moderado
=>
(printout t crlf crlf)
(printout t ?*nome* crlf crlf)
(printout t "Seu perfil é MODERADO" crlf crlf)
(printout t "Este e o perfil de quem esta disposto a correr pouco risco
sendo recomendável ...
...
3 Resultados e discussão
O uso de um shell de sistemas especialistas integrada a linguagem de desenvolvimento de
aplicações permitiu separarmos, adequadamente, a construção e uso da base de conhecimento da
interface de programação, comunicação e demais porções do sistema. Isso possibilita que a base
de conhecimento possa ser estendida, modificada ou mesmo substituída sem alterações das
demais partes do sistema. A mesma flexibilidade, proporcionada à interface com usuário,
permitiria o uso da mesma base de conhecimento por múltiplas aplicações e vemos, nessa
possibilidade, uma grande vantagem no reuso de regras e fatos, à exemplo do reuso de objetos.
Além disso o Jess, diferentemente de outros script shells, fornece suporte mais amplo às
funções de linguagem de programação. Essa característica parece bastante importante para a
maior popularização do uso de sistemas especialistas em aplicações comerciais pois facilita o
trabalho do programador em diversas tarefas, como a entrada e saída de dados e a manipulação
tradicional de dados, permitindo ainda a adoção de soluções de programação tradicional quando
requeridas. Desse modo acreditamos ter agregado vantagens ao desenvolvimento e superado
algumas das limitações da programação tradicional.
Trabalhos futuros podem buscar o aprimoramento da independência da máquina de
inferência utilizada com relação às demais porções do aplicativo, empregando tecnologias de
componentes e representações do conhecimento baseadas padrões abertos como o XML e sua
extensões, e provendo formas mais adequadas de armazenamento de regras e fatos. Também
podem ser explorado estender a aplicação para suportar fatores de confiança aos fatos da base de
conhecimento tornando o sistema apto a operar com lógica difusa (fuzzy).
9
5 Referências bibliográficas
LIU, Q., CHENG, S., Object-oriented methods drive protective relay system, em IEEE
Computer Applications on Power, janeiro, 2000;33—37.
FRIEDMAN-HILL, E.J., Jess, The expert system shell for the Java platform. Disponível em:
<http://herzberg.ca.sandia.gov/jess/>. Acesso em: outubro, 2002.
DEITEL, H.M., DEITEL, P.J., Java: How to program. Prentice-Hall: 2000.
RILEY, G., What is CLIPS? Disponível em: <http://www.ghg.net/clips/CLIPS.html >. Acesso
em: outubro, 2002.
ABULSOROUR, A., VISVESWARAN, S., Business process automation made easy with
Java em JavaWorld Part 1: Implement business rule engines in a J2EE enterprise (Setembro)
Part 2: Design options for rule engine integration (Outubro). Disponível em: <
http://www.javaworld.com/>. Acesso em: março, 2003.
CARLSON, D., Rules and web-object systems, em Object Magazine, junho, 1998.
RUSSELL, S., NORVING, P., Artificial intelligence: A modern approach. Prentice-Hall:
1995.
CHUN, I-G., HONG, I-S., The implementation of knowledge-based recommender system
for eletronic commerce using Java expert system library. Proceedings in IEEE International
Symposium on Industrial Electronics, 2001;1766—1770.
10
Download