Sistemas de Apoio à Decisão
•
Alternativas para modelar o processo de tomada de
decisões:
–
consultar o gestor/perito e elaborar um modelo a partir dessa
informação.
– construir um modelo a partir de dados.
1. Recolher uma amostra de dados.
–
Descrição de situações concretas e respectivas decisões então
tomadas.
•
Registo histórico das decisões dos peritos humanos.
2. Construír um modelo a partir desse registo histórico.
Luís Torgo, 2002
FEP, UP
O exemplo da concessão de crédito
• Em vez de “extraírmos” dos peritos do banco o modelo de
decisão que usam, podemos solicitar-lhes o registo histórico
das suas decisões.
Vantagens : Mais fácil e mais rápido.
Poderiamos obter uma tabela de casos de decisões como a seguinte:
Montante
médio
médio
alto
baixo
alto
…
Luís Torgo, 2002
Idade
junior
junior
senior
junior
senior
…
Salário
médio
baixo
alto
médio
médio
…
Conta
sim
não
sim
sim
não
…
Decisão
concedido
não concedido
concedido
concedido
não concedido
…
FEP, UP
Árvores de decisão
• Existem métodos para obter um modelo de decisão a partir
de dados como os da tabela anterior.
– As árvores de decisão são um exemplo desses métodos.
Exemplo de uma árvore de decisão:
Esta árvore foi obtida de um
registo histórico contendo 29
decisões de não conceder e 70
decisões de conceder (a decisão
maioritária é “sim”)
Luís Torgo, 2002
FEP, UP
Obter uma árvore de decisão em R
Passo 1: obter os dados (registo histórico)
• Alternativas possíveis em R:
–
–
–
–
–
Introduzir os dados “à mão”.
Carregar os dados que estão guardados num ficheiro qualquer.
Carregar os dados da Internet.
Carregar os dados de uma base de dados qualquer (ex. Access).
Carregar os dados de uma outra aplicação qualquer (ex. um
package estatístico como o SPSS, ou do Excel, etc.)
Luís Torgo, 2002
FEP, UP
Obter os dados
• No site
http://www.liacc.up.pt/~ltorgo/Ensino/FEP/AnaliseDados/credito.Rdata
Está um ficheiro com dados de pedidos de concessão de crédito.
• Vejamos como colocar estes dados num data frame do R
> download.file(’http://www.liacc.up.pt/~ltorgo/Ensino/FEP/AnaliseDados/credito.Rdata’,
+
’exp.data’)
trying URL ‘http://www.liacc.up.pt/~ltorgo/Ensino/FEP/AnaliseDados/credito.Rdata’
Content type ‘text/plain’ length 2661 bytes
Ler os dados da Internet
opened URL
para um ficheiro.
downloaded 2661 bytes
> dados <- read.csv(’exp.data’)
> dados
Ler os dados de um ficheiro
montante
idade
salario conta
emprestimo
CSV para um data frame
1 medio
junior
baixo
sim
nao
2 medio
junior
baixo
nao
nao
3 baixo
junior
baixo
sim
sim
4 alto
media
baixo
sim
sim
5 alto
senior
alto
sim
sim
...
Luís Torgo, 2002
FEP, UP
Ficheiros CSV
• Ficheiros de texto com o seguinte conteúdo
A primeira linha tem o nome
das colunas (variáveis)
Cada linha tem um caso, com os valores
das variáveis separados por vírgulas
• Formato bastante comum para guardar dados tabulares como estes.
– Usado em muitos programas para além do R,
• Por exemplo, se tivermos os nossos dados numa folha de cálculo do
Excel, podemos fazer “Save As” CSV, o que permitiria guardar os
dados da folha de cálculo num ficheiro em formato CSV, que
poderiam ser depois lidos para o R, usando a função “read.csv()”
Luís Torgo, 2002
FEP, UP
Exportar os dados de uma tabela do Access
• Vamos supor que gostaríamos de ter os dados de uma tabela
do Access num data frame do R para posterior análise.
• Existem várias formas de o fazer. Uma delas é exportar
esses dados para um ficheiro CSV, e depois lê-lo do R.
Carregando no botão direito
do rato aparece este menu
Luís Torgo, 2002
FEP, UP
(cont.)
Luís Torgo, 2002
FEP, UP
(cont.)
• Depois de exportados os dados para um ficheiro CSV,
podemos usar a função “read.csv()” para os ler para um data
frame:
> dados <- read.csv('Clientes.txt')
> dados
Cliente Morada
Telf
1
Alvaro Silva lisboa
56456
2
Ana Castro
faro
343454
3 Ana Silva Pereira coimbra 5467567867
4
Carlitos
faro
434334345
5
Carlos Amaral
faro 21 34345345
6
Claudia lisboa 22 4546756
7
José Carlos
porto
4455
8
Pedro
porto
225455465
9
Silva e filhos coimbra
6666666
Luís Torgo, 2002
FEP, UP
Obter um árvore de decisão
com os dados de um data frame
Package extra do R, que contém as
> library(rpart)
funções para obter árvores de
> árvore <- rpart(emprestimo ~ ., data=dados) decisão
> árvore
n= 99
node), split, n, loss, yval, (yprob)
* denotes terminal node
Fórmula que indica a forma
funcional do modelo que o R
deve obter.
Neste caso é um modelo para
prever a variável “emprestimo”
usando todas as outras.
1) root 99 29 sim (0.29292929 0.70707071)
2) salario=baixo 31 11 nao (0.64516129 0.35483871)
4) montante=alto,medio 21 1 nao (0.95238095 0.04761905) *
5) montante=baixo 10 0 sim (0.00000000 1.00000000) *
3) salario=alto 68 9 sim (0.13235294 0.86764706)
6) conta=nao 27 9 sim (0.33333333 0.66666667)
12) montante=alto 9 0 nao (1.00000000 0.00000000) *
13) montante=baixo,medio 18 0 sim (0.00000000 1.00000000) *
7) conta=sim 41 0 sim (0.00000000 1.00000000) *
Luís Torgo, 2002
FEP, UP
Obter uma representação gráfica
de uma árvore de decisão
> plot(árvore)
> text(árvore)
• Usando alguns parâmetros destas duas
funções é possível obter resultados gráficos
muito melhores.
• Por exemplo:
> mostra.arvore <- function(árvore) {
+
plot(árvore,uniform=T,branch=0)
+
text(árvore,digits=3,cex=0.65,
+
font=10, pretty=0,fancy=T,fwidth=0,
+
fheight=0)
+ }
> mostra.arvore(árvore)
• Com mais parametrização é possível ainda melhor
como na árvore mostrada anteriormente
Luís Torgo, 2002
FEP, UP
Avaliar a qualidade do modelo de decisão
• Que confiança podemos ter no modelo de decisão que obtivemos a
partir do registo histórico de decisões?
• Podemos tentar responder a esta questão usando o modelo para tomar
decisões, e verificando que percentagem destas é acertada.
• Para isso vamos proceder do seguinte modo:
– Vamos dividir a nossa amostra de decisões (para as quais sabemos a decisão
correcta) em duas partes:
• Uma para construir o modelo de decisão
• Outra para o testar comparando as previsões do modelo com as decisões dos peritos.
>
>
>
>
>
>
amostra <- sample(1:nrow(dados),as.integer(0.7*nrow(dados)))
dados.modelo <- dados[amostra,]
dados.teste <- dados[-amostra,]
árvore <- rpart(emprestimo ~ .,data=dados.modelo)
previsões.modelo <- predict(árvore,dados.teste)
previsões.modelo
A árvore prevê que existe 72% de probabilidade de
nao
sim
3 0.7200000 0.2800000
este ser um caso em que não se deve conceder crédito.
7 0.1590909 0.8409091
...
Luís Torgo, 2002
FEP, UP
(cont.)
> previsões.modelo <- predict(árvore,dados.teste,type='class')
> previsões.modelo
[1] nao sim nao sim sim sim sim sim nao sim sim sim sim sim sim sim sim nao sim
[20] sim nao sim sim sim sim nao sim sim sim sim
Levels: nao sim
> table(dados.teste$emprestimo,previsões.modelo)
previsões.modelo
nao sim
Matriz de confusão
nao
2
2
sim
4 22
> m.conf <- table(dados.teste$emprestimo,previsões.modelo)
> perc.erro <- 100*(m.conf[1,2]+m.conf[2,1])/sum(m.conf)
> perc.erro
[1] 20
•
Nestes 30 casos de teste, a árvore acerta em 80% dos casos.
Luís Torgo, 2002
FEP, UP
Download

Sistemas de Apoio à Decisão