SlideShare uma empresa Scribd logo
Sistemas de Informação
MEAE
3- Sistemas de apoio à decisão - Árvores de Decisão e Regressão
Pedro Campos 2019/2020
(parcialmente baseado nos apontamentos de Gestão de Informação, FEP)
1
Faculdade de Economia do Porto 2
Sistemas de apoio à decisão - Árvores de
Decisão e Regressão
Faculdade de Economia do Porto 3
Sistemas de Apoio à Decisão
• Hoje em dia, alguns sistemas de apoio a decisão
são contruídos a partir de aprendizagem
automática (machine learning)
• Dentro dos algoritmos de machine learning,
destacam-se:
– os algoritmos supervisionados, permitem fazer
tarefas de classificação (tais como as árvores de
decisão e as árvores de regressão)
– os algoritmos não supervisionados, que permitem
encontrar padrões nos dados (como as regras de
associação e o clustering)
Faculdade de Economia do Porto 4
Árvores de Decisão e Regressão
• Os problemas de tomada de decisão com
árvores que consideramos são:
– Decisão.
• A decisão a tomar é qualitativa (ex. Compar ou não um
dado produto).
– Regressão.
• A decisão a tomar é numérica (ex. valor de um bem
imobiliário).
Neste caso, como a decisão a tomar é do tipo
qualitativo (conceder ou não crédito), estamos perante
um problema de que pode ser resolvido recorrendo a
árvores de decisão
5
Exemplo - 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 Idade Salário Conta Decisão
médio junior médio sim concedido
médio junior baixo não não concedido
alto senior alto sim concedido
baixo junior médio sim concedido
alto senior médio não não concedido
… … … … …
Faculdade de Economia do Porto 6
Árvores de decisão
• Existem métodos para obter um modelo de decisão a
partir de dados como os da tabela anterior.
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”)
Informática Faculdade de Economia do Porto 7
Árvores de decisão
Raíz da árvore
nó
nónó
folha
Informática Faculdade de Economia do Porto 8
Árvores de decisão podem ser escritas como
regras
Se salário=baixo E montante=alto/médio Então não conceder
Senão Se salário=baixo E montante=alto Então conceder
Senão Se conta=não E montante=alto Então não conceder
Senão Se conta=não E montante=baixo/médio Então conceder
Senão conceder
Informática Faculdade de Economia do Porto 9
Obter os dados
– Análise de dados e apoio à decisão/dados-crédito.txt
– Copiar e colar para um ficheiro de texto no notepad
– Guardar (por exemplo com o nome cred.csv.txt)
• Vejamos como colocar estes dados num data frame do R
> dados <- read.csv(’cred.txt’)
> dados
montante idade salario conta emprestimo
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
...
Ler os dados de um ficheiro
CSV para um data frame
Atributo classe
Informática Faculdade de Economia do Porto 10
Obter um árvore de decisão
com os dados de um data frame
• O modelo de decisão
– É construído através da análise dos dados (data mining)
• Como?
– É capaz, com uma certa percentagem de erro, de classificar um novo caso
• Como se mede essa percentagem de erro?
– Ou seja, determina o valor do atributo classe (empréstimo) em função dos outros
atributos (montante, idade, salário, conta)
dados
rpart
modelo de decisão
Informática Faculdade de Economia do Porto 11
Obter um árvore de decisão
com os dados de um data frame
> library(rpart)
> árvore <- rpart(emprestimo ~ ., dados)
> árvore
n= 99
node), split, n, loss, yval, (yprob)
* denotes terminal node
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) *
A função rpart não vem
com o R base.
Ver:
http://www.statmethods.
net/advstats/cart.html
> árvore
n= 99
node), split, n, loss, yval, (yprob)
* denotes terminal node
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) *
Informática Faculdade de Economia do Porto 12
Nº de exemplos
dados ao R
Nº de exemplos
em que a classe
é “não”
Antes de sabermos/testarmos o
valor de qualquer variável,
a melhor decisão seria “sim”.
Probabilidade de um
qualquer exemplo ser
se classe “sim”
Informática Faculdade de Economia do Porto 13
> árvore
n= 99
node), split, n, loss, yval, (yprob)
* denotes terminal node
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) *
Informática Faculdade de Economia do Porto 13
Nº de exemplos em que
o salário é “alto”, a conta é
“não” e o montante é “baixo”
ou “médio”
Nº de exemplos em que
o salário é “alto”, a conta é
“não” , o montante é “baixo”
ou “médio” e a classe é “não”
No grupo de exemplos em
que o salário é “alto”, a conta é
“não” e o montante é “baixo”
ou “médio”, a melhor decisão
seria “sim”.
Probabilidade de um
qualquer exemplo em
que o salário é “alto”,
a conta é “não” e o
montante é “baixo”
ou “médio” ser de
classe “sim”
Informática Faculdade de Economia do Porto 14
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
> help(plot.rpart)
Informática 15
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
dados
rpart
modelo de decisão
treino
teste
avaliação
do modelo
Avaliar a qualidade do modelo de decisão
Primeira abordagem:
selecção das primeiras linhas (ex. 70% delas)
para dados de treino e das restantes para
dados de teste.
> dados.treino <- dados[1:69,]
> dados.teste <- dados[70:99,]
Ou um pouco mais geral:
> caso.separador <- 0.7*nrow(dados)
> dados.treino <- dados[1:caso.separador,]
> dados.teste <- dados[-(1:caso.separador),]
Informática Faculdade de Economia do Porto 16
Função sample
A função sample permite gerar números
aleatórios inteiros não repetidos.
> sample(1:10,3)
Informática Faculdade de Economia do Porto 17
Sequência de inteiros
de onde se vai extrair
os números aleatórios
Nº de números
aleatórios a extrair
O resultado desta instrução foi 7, 8 e 9. Se se executar uma segunda vez a
instrução, o resultado será, em princípio, diferente, pois senão não seriam
números aleatórios!
Informática Faculdade de Economia do Porto 18
Avaliar a qualidade do modelo de decisão
Segunda abordagem:
selecção aleatória dos dados de treino e dos dados
de teste.
> amostra <- sample(1:nrow(dados),0.7*nrow(dados))
> dados.modelo <- dados[amostra,]
> dados.teste <- dados[-amostra,]
> árvore <- rpart(emprestimo ~ .,dados.modelo)
> previsões.modelo <- predict(árvore,dados.teste,predict="prob")
> previsões.modelo
nao sim
3 0.7200000 0.2800000
7 0.1590909 0.8409091
...
A árvore prevê que existe 72% de probabilidade de
este ser um caso em que não se deve conceder
crédito.
Informática Faculdade de Economia do Porto 19
Avaliar a qualidade do modelo de decisão (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
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.
Matriz de confusão
Informática Faculdade de Economia do Porto 20
Avaliar a qualidade do modelo de decisão (cont.)
O método de cálculo de erro apresentado antes tem uma desvantagem:
Aplica-se só aos casos que envolvem 2 classes só.
O problema pode ser contornado, usando a instrução diag(m.conf),
que retorna os elementos na diagonal da matriz (i.e. acertos):
> perc.erro <- 100*(sum(m.conf) – sum(diag(m.conf)))/sum(m.conf)
> perc.erro
[1] 20
Faculdade de Economia do Porto 21
Árvores de Regressão
• Agora os problemas de tomada de decisão
com árvores que consideramos são:
– Regressão.
• A decisão a tomar é numérica (ex. valor de um bem
imobiliário).
Faculdade de Economia do Porto 22
• Variável Objectivo
– preço
• Atributos descritivos
– quartos, zona
• Modelo de regressão
Se quartos>3
Se zona=cara Então preço=250000
Senão preço=150000
Senão se quartos<=3
Se zona=cara Então preço=180000
Senão preço=100000
250000 150000 180000 100000
quartos>3 quartos<=3
zona=cara zona=barata
zona=cara zona=barata
Exemplo – preço de uma casa
Faculdade de Economia do Porto 23
Um problema de árvores de regressão
• O conjunto de dados “swiss” que vem com o R apresenta vários casos referentes a um estudo
destinado a explorar a relação entre a taxa de mortalidade infantil e uma série de factores
sócio-económicos de várias províncias da Suíça.
> data(swiss)
> swiss[1:5,]
Fertility Agriculture Examination Education Catholic Infant.Mortality
Courtelary 80.2 17.0 15 12 9.96 22.2
Delemont 83.1 45.1 6 9 84.84 22.2
Franches-Mnt 92.5 39.7 5 5 93.40 20.2
Moutier 85.8 36.5 12 7 33.77 20.3
Neuveville 76.9 43.5 17 15 5.16 20.6
>
Faculdade de Economia do Porto 24
Um problema de regressão
> summary(swiss)
Fertility Agriculture Examination Education
Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00
1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00
Median :70.40 Median :54.10 Median :16.00 Median : 8.00
Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98
3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00
Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00
Catholic Infant.Mortality
Min. : 2.150 Min. :10.80
1st Qu.: 5.195 1st Qu.:18.15
Median : 15.140 Median :20.00
Mean : 41.144 Mean :19.94
3rd Qu.: 93.125 3rd Qu.:21.70
Max. :100.000 Max. :26.60
> hist(swiss$Infant.Mortality,
+ main='Histograma da variável objectivo',
+ xlab='Taxa de mortalidade')
Faculdade de Economia do Porto 25
Árvores de regressão
• A função “rpart()” usada para obter árvores de decisão, pode ser usada de
igual forma para obter árvores de regressão.
> arv.regr <- rpart(Infant.Mortality ~ ., data=swiss)
> arv.regr
n= 47
node), split, n, deviance, yval
* denotes terminal node
1) root 47 390.25490 19.94255
2) Fertility< 64.25 11 76.84727 17.35455 *
3) Fertility>=64.25 36 217.22000 20.73333
6) Agriculture>=72.8 7 20.56000 18.10000 *
7) Agriculture< 72.8 29 136.40210 21.36897
14) Catholic< 59.305 19 50.76421 20.73684 *
15) Catholic>=59.305 10 63.62100 22.57000 *
> mostra.arvore(arv.regr)
> arv.regr
n= 47
node), split, n, deviance, yval
* denotes terminal node
1) root 47 390.25490 19.94255
2) Fertility< 64.25 11 76.84727 17.35455 *
3) Fertility>=64.25 36 217.22000 20.73333
6) Agriculture>=72.8 7 20.56000 18.10000 *
7) Agriculture< 72.8 29 136.40210 21.36897
14) Catholic< 59.305 19 50.76421 20.73684 *
15) Catholic>=59.305 10 63.62100 22.57000 *
Faculdade de Economia do Porto 26
Nº de casos em
que a Fertility é
menor do que
64.25
Valor médio, na variável objectivo,
dos exemplos em que a Fertility é
menor do que 64.25. A previsão da
variável objectivo, pela árvore, para
um qualquer caso em que a Fertility é
menor do 64.25, é de
17.35455
Soma dos quadrados dos
desvios em relação à média, na
variável objectivo, para os
exemplos em que a Fertility é
menor do 64.25
Faculdade de Economia do Porto 27
Avaliar a árvore de regressão
• Vamos usar um processo semelhante de divisão dos dados:
> amostra <- sample(1:nrow(swiss),as.integer(0.7*nrow(swiss)))
> dados.treino <- swiss[amostra,]
> dados.teste <- swiss[-amostra,]
> arv.regr <- rpart(Infant.Mortality ~.,data=dados.treino)
> prev.arv <- predict(arv.regr,dados.teste)
> prev.arv
Franches-Mnt Neuveville Glane Gruyere Veveyse Aubonne
22.53636 22.53636 18.65000 22.53636 18.65000 18.65000
Avenches Echallens Grandson Oron Entremont Herens
18.65000 18.65000 22.53636 18.65000 18.65000 18.65000
Boudry Le Locle ValdeTravers
22.53636 22.53636 22.53636
> (mae <- mean(abs(prev.arv-dados.teste$Infant.Mortality)))
[1] 2.683636
Erro absoluto
médio.



testen
i
ii
teste
deiroValorVerdaevistoValor
n
MAE
1
1
Pr
Faculdade de Economia do Porto 28
Outros aspetos com árvores
• Overfitting
• Prunning (poda)
• Bagging
• Random forests
Faculdade de Economia do Porto 29
Overfitting
• Overfitting) ocorre quando o modelo de dados se ajusta
em demasiado ao conjunto de dados/amostra.
• Os dados de treino podem apresentar desvios causados
por erros de medição ou outros fatores aleatórios, e o
overfitting ocorre quando o modelo se ajusta em
demasia a dados com estas imprecisões
Faculdade de Economia do Porto 30
Poda (Prunning)
• A poda evita o overfitting dos dados
• A ideia é minimizar os erros no porcesso de validação
cruzada
• Exemplo:
z.auto <- rpart(Mileage ~ Weight, car.test.frame)
zp <- prune(z.auto, cp = 0.1)
plot(z.auto)
plot(zp)
cp é o “complexity parameter”, ou seja, é o custo de adicionar uma nova variável ao modelo
Faculdade de Economia do Porto 31
Bagging
• Bagging, (=Bootstrap aggregating) é um algoritmo de machine
learning do tipo ensemble ou meta-algorithm desenhado para
melhorar a estabilidade e a precisãod e uma árvore de decisão ou
regressão. Reduz tambmém a a variância e ajuda a evitar o
overfitting
• Dado um conjunto de treino D de tamanho n, o bagging gera m
novos conjuntos Di, cada um de tamanho n′, através de um processo
de amostragem a partir de D uniformemente com reposição
(bootstrap sampling).
• Os m modelos são ajustados usando estas amostras e combinados
através da média ou de um algoritmo de votação
Faculdade de Economia do Porto 32
Bagging
Exemplo:
• Recorrendo ao package ipred do R (instale-o primeiro) e recorrendo
ao conjunto de dados swiss, disponível no R
library ( ipred )
modelo <- bagging ( Fertility ~ ., swiss , nbagg =100)
previsoes.finais <-predict ( modelo , swiss , type =" class ")
• Para verificar relação entre previsões e dados reais:
cor(previsoes.finais, swiss$Fertility)
Faculdade de Economia do Porto 33
Random Forests
• A diferença entre o bagging e as random forests está no modo de
construção de cada árvore.
• O bagging, considera todas as variáveis explicativas em todos os nós
(splits),
• As random forests não consideram todas as variáveis explicativas em
cada split. Consideram apenas um número reduzido destas
• Supostamente, as random forests são mais eficazes, pois aumentam
a diversidade do modelo de previsão em comparação com o bagging
e diminuem o esforço computacional
Faculdade de Economia do Porto 34
Random Forests
• Exemplo
• Recorrendo ao package randomForest do R (instale-o primeiro) e
recorrendo ao conjunto de dados swiss, disponível no R
Library (randomForest)
modelo <- randomForest ( Fertility ~ ., swiss , ntree =100 , mtry
=5)
predict(modelo)
Faculdade de Economia do Porto 35
Package Party
• Install.package (“party”)
• library(party)
• modelo <- ctree ( Fertility ~ ., swiss)
• plot(modelo)

Mais conteúdo relacionado

PPTX
2011: Mineração de Dados - Conceitos Básicos e Aplicações
PDF
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
PDF
Classificação: Árvores de Decisão e Bias Indutivo
PDF
árvore de decisão (mach_learn)_slides 18-22_uel.pdf
PDF
Árvore de Decisão | IA
PDF
Inteligência Artificial - Parte 5 -
PPTX
Mineração de dados
2011: Mineração de Dados - Conceitos Básicos e Aplicações
Automação de BackOffice de uma grande corporação financeira usando Visão Comp...
Classificação: Árvores de Decisão e Bias Indutivo
árvore de decisão (mach_learn)_slides 18-22_uel.pdf
Árvore de Decisão | IA
Inteligência Artificial - Parte 5 -
Mineração de dados

Semelhante a Analytics - Data Science - Arvores de decisao (20)

PDF
Arvore de decisao na gestao de projetos quando como e porque utilizar
DOC
Estrutura de dados - Arvores
PPTX
Árvores de Decisão
PDF
(ACH2044) Inteligência Artificial - Aula 18
PDF
Árvores de decisão no FreeBSD com R - PagSeguro
PDF
ID3 Algorithm
PDF
Modelos de Apoio à Decisão_ Exercicos_Relatório 1
PDF
ARVORE_DECISAO_ufpr_slides resumidos.pdf
PPT
Gilcimar apresentação
PPT
Algoritmo_ID3_e_C.45_Gilcimar
PDF
Análise bayesiana de decisões aspectos práticos
PPTX
Arvores de Decisão em dados de incubação de matrizes de postura
PDF
[José Ahirton Lopes] Treinamento - Árvores de Decisão, SVM e Naive Bayes
PDF
Aula pb 12_resumo
PDF
Aula pb 12_resumo
PDF
Criando e aplicando modelos de redes neurais e árvores de decisão
PDF
36648 43185-1-pb
PDF
Aula rotulação automática - Automatic tagging
PPT
Fundamentos de Sistemas de Informacao - Aula 12 2009_2
PPTX
Introdução ao pensamento analítico e à tomada de DECISAO.pptx
Arvore de decisao na gestao de projetos quando como e porque utilizar
Estrutura de dados - Arvores
Árvores de Decisão
(ACH2044) Inteligência Artificial - Aula 18
Árvores de decisão no FreeBSD com R - PagSeguro
ID3 Algorithm
Modelos de Apoio à Decisão_ Exercicos_Relatório 1
ARVORE_DECISAO_ufpr_slides resumidos.pdf
Gilcimar apresentação
Algoritmo_ID3_e_C.45_Gilcimar
Análise bayesiana de decisões aspectos práticos
Arvores de Decisão em dados de incubação de matrizes de postura
[José Ahirton Lopes] Treinamento - Árvores de Decisão, SVM e Naive Bayes
Aula pb 12_resumo
Aula pb 12_resumo
Criando e aplicando modelos de redes neurais e árvores de decisão
36648 43185-1-pb
Aula rotulação automática - Automatic tagging
Fundamentos de Sistemas de Informacao - Aula 12 2009_2
Introdução ao pensamento analítico e à tomada de DECISAO.pptx
Anúncio

Último (9)

PPT
AULA COACHING INICIAL *******************
PPTX
Sermao a mensagem da Cruz.pptx gdfvdcdfdfdsfcdsfxdfdfdfvdgf
PDF
Plano de gestão - template.pptx.pdf.pdf
DOC
COMO CRIAR DASHBOARD ATRAVES DE CODIFICAÇÃO PYTHON
PDF
Medidor de PH de bancada PH140 para uso em laboratório
PDF
Apresentação CME-Caldas da Rainha_250217_102132.pdf
PDF
48585b89-ee4d-4f8d-b2c0-7db19cc44e44.pdf
PPTX
Perguntas e respostas.pptx Informática aplicada
PDF
Bases de dados - basicos dos basicos. como identificar chaves
AULA COACHING INICIAL *******************
Sermao a mensagem da Cruz.pptx gdfvdcdfdfdsfcdsfxdfdfdfvdgf
Plano de gestão - template.pptx.pdf.pdf
COMO CRIAR DASHBOARD ATRAVES DE CODIFICAÇÃO PYTHON
Medidor de PH de bancada PH140 para uso em laboratório
Apresentação CME-Caldas da Rainha_250217_102132.pdf
48585b89-ee4d-4f8d-b2c0-7db19cc44e44.pdf
Perguntas e respostas.pptx Informática aplicada
Bases de dados - basicos dos basicos. como identificar chaves
Anúncio

Analytics - Data Science - Arvores de decisao

  • 1. Sistemas de Informação MEAE 3- Sistemas de apoio à decisão - Árvores de Decisão e Regressão Pedro Campos 2019/2020 (parcialmente baseado nos apontamentos de Gestão de Informação, FEP) 1
  • 2. Faculdade de Economia do Porto 2 Sistemas de apoio à decisão - Árvores de Decisão e Regressão
  • 3. Faculdade de Economia do Porto 3 Sistemas de Apoio à Decisão • Hoje em dia, alguns sistemas de apoio a decisão são contruídos a partir de aprendizagem automática (machine learning) • Dentro dos algoritmos de machine learning, destacam-se: – os algoritmos supervisionados, permitem fazer tarefas de classificação (tais como as árvores de decisão e as árvores de regressão) – os algoritmos não supervisionados, que permitem encontrar padrões nos dados (como as regras de associação e o clustering)
  • 4. Faculdade de Economia do Porto 4 Árvores de Decisão e Regressão • Os problemas de tomada de decisão com árvores que consideramos são: – Decisão. • A decisão a tomar é qualitativa (ex. Compar ou não um dado produto). – Regressão. • A decisão a tomar é numérica (ex. valor de um bem imobiliário).
  • 5. Neste caso, como a decisão a tomar é do tipo qualitativo (conceder ou não crédito), estamos perante um problema de que pode ser resolvido recorrendo a árvores de decisão 5 Exemplo - 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 Idade Salário Conta Decisão médio junior médio sim concedido médio junior baixo não não concedido alto senior alto sim concedido baixo junior médio sim concedido alto senior médio não não concedido … … … … …
  • 6. Faculdade de Economia do Porto 6 Árvores de decisão • Existem métodos para obter um modelo de decisão a partir de dados como os da tabela anterior. 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”)
  • 7. Informática Faculdade de Economia do Porto 7 Árvores de decisão Raíz da árvore nó nónó folha
  • 8. Informática Faculdade de Economia do Porto 8 Árvores de decisão podem ser escritas como regras Se salário=baixo E montante=alto/médio Então não conceder Senão Se salário=baixo E montante=alto Então conceder Senão Se conta=não E montante=alto Então não conceder Senão Se conta=não E montante=baixo/médio Então conceder Senão conceder
  • 9. Informática Faculdade de Economia do Porto 9 Obter os dados – Análise de dados e apoio à decisão/dados-crédito.txt – Copiar e colar para um ficheiro de texto no notepad – Guardar (por exemplo com o nome cred.csv.txt) • Vejamos como colocar estes dados num data frame do R > dados <- read.csv(’cred.txt’) > dados montante idade salario conta emprestimo 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 ... Ler os dados de um ficheiro CSV para um data frame Atributo classe
  • 10. Informática Faculdade de Economia do Porto 10 Obter um árvore de decisão com os dados de um data frame • O modelo de decisão – É construído através da análise dos dados (data mining) • Como? – É capaz, com uma certa percentagem de erro, de classificar um novo caso • Como se mede essa percentagem de erro? – Ou seja, determina o valor do atributo classe (empréstimo) em função dos outros atributos (montante, idade, salário, conta) dados rpart modelo de decisão
  • 11. Informática Faculdade de Economia do Porto 11 Obter um árvore de decisão com os dados de um data frame > library(rpart) > árvore <- rpart(emprestimo ~ ., dados) > árvore n= 99 node), split, n, loss, yval, (yprob) * denotes terminal node 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) * A função rpart não vem com o R base. Ver: http://www.statmethods. net/advstats/cart.html
  • 12. > árvore n= 99 node), split, n, loss, yval, (yprob) * denotes terminal node 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) * Informática Faculdade de Economia do Porto 12 Nº de exemplos dados ao R Nº de exemplos em que a classe é “não” Antes de sabermos/testarmos o valor de qualquer variável, a melhor decisão seria “sim”. Probabilidade de um qualquer exemplo ser se classe “sim”
  • 13. Informática Faculdade de Economia do Porto 13 > árvore n= 99 node), split, n, loss, yval, (yprob) * denotes terminal node 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) * Informática Faculdade de Economia do Porto 13 Nº de exemplos em que o salário é “alto”, a conta é “não” e o montante é “baixo” ou “médio” Nº de exemplos em que o salário é “alto”, a conta é “não” , o montante é “baixo” ou “médio” e a classe é “não” No grupo de exemplos em que o salário é “alto”, a conta é “não” e o montante é “baixo” ou “médio”, a melhor decisão seria “sim”. Probabilidade de um qualquer exemplo em que o salário é “alto”, a conta é “não” e o montante é “baixo” ou “médio” ser de classe “sim”
  • 14. Informática Faculdade de Economia do Porto 14 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 > help(plot.rpart)
  • 15. Informática 15 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 dados rpart modelo de decisão treino teste avaliação do modelo
  • 16. Avaliar a qualidade do modelo de decisão Primeira abordagem: selecção das primeiras linhas (ex. 70% delas) para dados de treino e das restantes para dados de teste. > dados.treino <- dados[1:69,] > dados.teste <- dados[70:99,] Ou um pouco mais geral: > caso.separador <- 0.7*nrow(dados) > dados.treino <- dados[1:caso.separador,] > dados.teste <- dados[-(1:caso.separador),] Informática Faculdade de Economia do Porto 16
  • 17. Função sample A função sample permite gerar números aleatórios inteiros não repetidos. > sample(1:10,3) Informática Faculdade de Economia do Porto 17 Sequência de inteiros de onde se vai extrair os números aleatórios Nº de números aleatórios a extrair O resultado desta instrução foi 7, 8 e 9. Se se executar uma segunda vez a instrução, o resultado será, em princípio, diferente, pois senão não seriam números aleatórios!
  • 18. Informática Faculdade de Economia do Porto 18 Avaliar a qualidade do modelo de decisão Segunda abordagem: selecção aleatória dos dados de treino e dos dados de teste. > amostra <- sample(1:nrow(dados),0.7*nrow(dados)) > dados.modelo <- dados[amostra,] > dados.teste <- dados[-amostra,] > árvore <- rpart(emprestimo ~ .,dados.modelo) > previsões.modelo <- predict(árvore,dados.teste,predict="prob") > previsões.modelo nao sim 3 0.7200000 0.2800000 7 0.1590909 0.8409091 ... A árvore prevê que existe 72% de probabilidade de este ser um caso em que não se deve conceder crédito.
  • 19. Informática Faculdade de Economia do Porto 19 Avaliar a qualidade do modelo de decisão (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 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. Matriz de confusão
  • 20. Informática Faculdade de Economia do Porto 20 Avaliar a qualidade do modelo de decisão (cont.) O método de cálculo de erro apresentado antes tem uma desvantagem: Aplica-se só aos casos que envolvem 2 classes só. O problema pode ser contornado, usando a instrução diag(m.conf), que retorna os elementos na diagonal da matriz (i.e. acertos): > perc.erro <- 100*(sum(m.conf) – sum(diag(m.conf)))/sum(m.conf) > perc.erro [1] 20
  • 21. Faculdade de Economia do Porto 21 Árvores de Regressão • Agora os problemas de tomada de decisão com árvores que consideramos são: – Regressão. • A decisão a tomar é numérica (ex. valor de um bem imobiliário).
  • 22. Faculdade de Economia do Porto 22 • Variável Objectivo – preço • Atributos descritivos – quartos, zona • Modelo de regressão Se quartos>3 Se zona=cara Então preço=250000 Senão preço=150000 Senão se quartos<=3 Se zona=cara Então preço=180000 Senão preço=100000 250000 150000 180000 100000 quartos>3 quartos<=3 zona=cara zona=barata zona=cara zona=barata Exemplo – preço de uma casa
  • 23. Faculdade de Economia do Porto 23 Um problema de árvores de regressão • O conjunto de dados “swiss” que vem com o R apresenta vários casos referentes a um estudo destinado a explorar a relação entre a taxa de mortalidade infantil e uma série de factores sócio-económicos de várias províncias da Suíça. > data(swiss) > swiss[1:5,] Fertility Agriculture Examination Education Catholic Infant.Mortality Courtelary 80.2 17.0 15 12 9.96 22.2 Delemont 83.1 45.1 6 9 84.84 22.2 Franches-Mnt 92.5 39.7 5 5 93.40 20.2 Moutier 85.8 36.5 12 7 33.77 20.3 Neuveville 76.9 43.5 17 15 5.16 20.6 >
  • 24. Faculdade de Economia do Porto 24 Um problema de regressão > summary(swiss) Fertility Agriculture Examination Education Min. :35.00 Min. : 1.20 Min. : 3.00 Min. : 1.00 1st Qu.:64.70 1st Qu.:35.90 1st Qu.:12.00 1st Qu.: 6.00 Median :70.40 Median :54.10 Median :16.00 Median : 8.00 Mean :70.14 Mean :50.66 Mean :16.49 Mean :10.98 3rd Qu.:78.45 3rd Qu.:67.65 3rd Qu.:22.00 3rd Qu.:12.00 Max. :92.50 Max. :89.70 Max. :37.00 Max. :53.00 Catholic Infant.Mortality Min. : 2.150 Min. :10.80 1st Qu.: 5.195 1st Qu.:18.15 Median : 15.140 Median :20.00 Mean : 41.144 Mean :19.94 3rd Qu.: 93.125 3rd Qu.:21.70 Max. :100.000 Max. :26.60 > hist(swiss$Infant.Mortality, + main='Histograma da variável objectivo', + xlab='Taxa de mortalidade')
  • 25. Faculdade de Economia do Porto 25 Árvores de regressão • A função “rpart()” usada para obter árvores de decisão, pode ser usada de igual forma para obter árvores de regressão. > arv.regr <- rpart(Infant.Mortality ~ ., data=swiss) > arv.regr n= 47 node), split, n, deviance, yval * denotes terminal node 1) root 47 390.25490 19.94255 2) Fertility< 64.25 11 76.84727 17.35455 * 3) Fertility>=64.25 36 217.22000 20.73333 6) Agriculture>=72.8 7 20.56000 18.10000 * 7) Agriculture< 72.8 29 136.40210 21.36897 14) Catholic< 59.305 19 50.76421 20.73684 * 15) Catholic>=59.305 10 63.62100 22.57000 * > mostra.arvore(arv.regr)
  • 26. > arv.regr n= 47 node), split, n, deviance, yval * denotes terminal node 1) root 47 390.25490 19.94255 2) Fertility< 64.25 11 76.84727 17.35455 * 3) Fertility>=64.25 36 217.22000 20.73333 6) Agriculture>=72.8 7 20.56000 18.10000 * 7) Agriculture< 72.8 29 136.40210 21.36897 14) Catholic< 59.305 19 50.76421 20.73684 * 15) Catholic>=59.305 10 63.62100 22.57000 * Faculdade de Economia do Porto 26 Nº de casos em que a Fertility é menor do que 64.25 Valor médio, na variável objectivo, dos exemplos em que a Fertility é menor do que 64.25. A previsão da variável objectivo, pela árvore, para um qualquer caso em que a Fertility é menor do 64.25, é de 17.35455 Soma dos quadrados dos desvios em relação à média, na variável objectivo, para os exemplos em que a Fertility é menor do 64.25
  • 27. Faculdade de Economia do Porto 27 Avaliar a árvore de regressão • Vamos usar um processo semelhante de divisão dos dados: > amostra <- sample(1:nrow(swiss),as.integer(0.7*nrow(swiss))) > dados.treino <- swiss[amostra,] > dados.teste <- swiss[-amostra,] > arv.regr <- rpart(Infant.Mortality ~.,data=dados.treino) > prev.arv <- predict(arv.regr,dados.teste) > prev.arv Franches-Mnt Neuveville Glane Gruyere Veveyse Aubonne 22.53636 22.53636 18.65000 22.53636 18.65000 18.65000 Avenches Echallens Grandson Oron Entremont Herens 18.65000 18.65000 22.53636 18.65000 18.65000 18.65000 Boudry Le Locle ValdeTravers 22.53636 22.53636 22.53636 > (mae <- mean(abs(prev.arv-dados.teste$Infant.Mortality))) [1] 2.683636 Erro absoluto médio.    testen i ii teste deiroValorVerdaevistoValor n MAE 1 1 Pr
  • 28. Faculdade de Economia do Porto 28 Outros aspetos com árvores • Overfitting • Prunning (poda) • Bagging • Random forests
  • 29. Faculdade de Economia do Porto 29 Overfitting • Overfitting) ocorre quando o modelo de dados se ajusta em demasiado ao conjunto de dados/amostra. • Os dados de treino podem apresentar desvios causados por erros de medição ou outros fatores aleatórios, e o overfitting ocorre quando o modelo se ajusta em demasia a dados com estas imprecisões
  • 30. Faculdade de Economia do Porto 30 Poda (Prunning) • A poda evita o overfitting dos dados • A ideia é minimizar os erros no porcesso de validação cruzada • Exemplo: z.auto <- rpart(Mileage ~ Weight, car.test.frame) zp <- prune(z.auto, cp = 0.1) plot(z.auto) plot(zp) cp é o “complexity parameter”, ou seja, é o custo de adicionar uma nova variável ao modelo
  • 31. Faculdade de Economia do Porto 31 Bagging • Bagging, (=Bootstrap aggregating) é um algoritmo de machine learning do tipo ensemble ou meta-algorithm desenhado para melhorar a estabilidade e a precisãod e uma árvore de decisão ou regressão. Reduz tambmém a a variância e ajuda a evitar o overfitting • Dado um conjunto de treino D de tamanho n, o bagging gera m novos conjuntos Di, cada um de tamanho n′, através de um processo de amostragem a partir de D uniformemente com reposição (bootstrap sampling). • Os m modelos são ajustados usando estas amostras e combinados através da média ou de um algoritmo de votação
  • 32. Faculdade de Economia do Porto 32 Bagging Exemplo: • Recorrendo ao package ipred do R (instale-o primeiro) e recorrendo ao conjunto de dados swiss, disponível no R library ( ipred ) modelo <- bagging ( Fertility ~ ., swiss , nbagg =100) previsoes.finais <-predict ( modelo , swiss , type =" class ") • Para verificar relação entre previsões e dados reais: cor(previsoes.finais, swiss$Fertility)
  • 33. Faculdade de Economia do Porto 33 Random Forests • A diferença entre o bagging e as random forests está no modo de construção de cada árvore. • O bagging, considera todas as variáveis explicativas em todos os nós (splits), • As random forests não consideram todas as variáveis explicativas em cada split. Consideram apenas um número reduzido destas • Supostamente, as random forests são mais eficazes, pois aumentam a diversidade do modelo de previsão em comparação com o bagging e diminuem o esforço computacional
  • 34. Faculdade de Economia do Porto 34 Random Forests • Exemplo • Recorrendo ao package randomForest do R (instale-o primeiro) e recorrendo ao conjunto de dados swiss, disponível no R Library (randomForest) modelo <- randomForest ( Fertility ~ ., swiss , ntree =100 , mtry =5) predict(modelo)
  • 35. Faculdade de Economia do Porto 35 Package Party • Install.package (“party”) • library(party) • modelo <- ctree ( Fertility ~ ., swiss) • plot(modelo)