SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
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

Semelhante a Analytics - Data Science - Arvores de decisao

Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Marcos Vinicius Fidelis
 
Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Douglas Mendes
 
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdf
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdfU1S4 - PPCP e Técnicas de Previsão de Demanda.pdf
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdfCelsoCiamponi1
 
Aula 7 - MASP - ferramentas da qualidade - 2019-1
Aula 7   - MASP -  ferramentas da qualidade - 2019-1Aula 7   - MASP -  ferramentas da qualidade - 2019-1
Aula 7 - MASP - ferramentas da qualidade - 2019-1IFMG
 
Métodos Quant. Aplic. a Gestão
Métodos Quant. Aplic. a GestãoMétodos Quant. Aplic. a Gestão
Métodos Quant. Aplic. a GestãoAna Fabricia Ludwig
 
Sistema de Recomendação de Produtos Utilizando Mineração de Dados
Sistema de Recomendação de Produtos Utilizando Mineração de DadosSistema de Recomendação de Produtos Utilizando Mineração de Dados
Sistema de Recomendação de Produtos Utilizando Mineração de DadosCássio Alan Garcia
 
Aprendizagem Supervisionada I
Aprendizagem Supervisionada IAprendizagem Supervisionada I
Aprendizagem Supervisionada ILuís Nunes
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - AlgoritmosPsLucas
 
People analytics - O RH Data Driven
People analytics - O RH Data DrivenPeople analytics - O RH Data Driven
People analytics - O RH Data DrivenMarcelo Furtado
 
MEDIDA DETENDENCIA CENTRAL (3).pptx
MEDIDA DETENDENCIA CENTRAL (3).pptxMEDIDA DETENDENCIA CENTRAL (3).pptx
MEDIDA DETENDENCIA CENTRAL (3).pptxgirlstrange
 
Machine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETMachine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETRenato Haddad
 
Modelagem Dimensional
Modelagem DimensionalModelagem Dimensional
Modelagem DimensionalMarco Garcia
 

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

Aula1
Aula1Aula1
Aula1
 
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014 Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
Construção de Classificadores utilizando Pentaho Data Mining (WEKA) - FTSL 2014
 
topico 2_Medidas descritivas.pdf
topico 2_Medidas descritivas.pdftopico 2_Medidas descritivas.pdf
topico 2_Medidas descritivas.pdf
 
Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023Treinamento MLOps Databricks 2023
Treinamento MLOps Databricks 2023
 
Tsg web mining
Tsg web miningTsg web mining
Tsg web mining
 
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdf
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdfU1S4 - PPCP e Técnicas de Previsão de Demanda.pdf
U1S4 - PPCP e Técnicas de Previsão de Demanda.pdf
 
Aula 7 - MASP - ferramentas da qualidade - 2019-1
Aula 7   - MASP -  ferramentas da qualidade - 2019-1Aula 7   - MASP -  ferramentas da qualidade - 2019-1
Aula 7 - MASP - ferramentas da qualidade - 2019-1
 
Gilcimar apresentação
Gilcimar apresentaçãoGilcimar apresentação
Gilcimar apresentação
 
Métodos Quant. Aplic. a Gestão
Métodos Quant. Aplic. a GestãoMétodos Quant. Aplic. a Gestão
Métodos Quant. Aplic. a Gestão
 
Sistema de Recomendação de Produtos Utilizando Mineração de Dados
Sistema de Recomendação de Produtos Utilizando Mineração de DadosSistema de Recomendação de Produtos Utilizando Mineração de Dados
Sistema de Recomendação de Produtos Utilizando Mineração de Dados
 
Aprendizagem Supervisionada I
Aprendizagem Supervisionada IAprendizagem Supervisionada I
Aprendizagem Supervisionada I
 
Introdução - Algoritmos
Introdução - AlgoritmosIntrodução - Algoritmos
Introdução - Algoritmos
 
People analytics - O RH Data Driven
People analytics - O RH Data DrivenPeople analytics - O RH Data Driven
People analytics - O RH Data Driven
 
MEDIDA DETENDENCIA CENTRAL (3).pptx
MEDIDA DETENDENCIA CENTRAL (3).pptxMEDIDA DETENDENCIA CENTRAL (3).pptx
MEDIDA DETENDENCIA CENTRAL (3).pptx
 
Machine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NETMachine Learning e Artificial Intelligence para desenvolvedores .NET
Machine Learning e Artificial Intelligence para desenvolvedores .NET
 
Modelagem Dimensional
Modelagem DimensionalModelagem Dimensional
Modelagem Dimensional
 
Princípios da contagem
Princípios da contagemPrincípios da contagem
Princípios da contagem
 
Analise exploratório de dados
Analise exploratório de dadosAnalise exploratório de dados
Analise exploratório de dados
 
Mineração
MineraçãoMineração
Mineração
 
Big data
Big dataBig data
Big data
 

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)