Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ
ESCOLA POLITÉCNICA
CURSO DE ENGENHARIA DE COMPUTAÇÃO
4º BIMESTRE
RELATÓRIO TÉCNICO FINAL
RESOLUÇÃO DO DESAFIO KDD CUP 2009 UTILIZANDO COMITÊ DE
MÁQUINAS
NOME: LUÍS FELIPE HARTMANN, LUÍS FELIPE NOGOSEKE
ORIENTADOR: LEANDRO DOS SANTOS COELHO
CURITIBA
2016
2
RESUMO
Este projeto objetiva apresentar soluções para o desafio proposto pela KDD
Cup 2009 (Knowledge Discovery and Data Mining Cup 2009 ): reconhecer
comportamentos de consumidores importantes para direcionamento de campanhas
de marketing , a partir de uma base de dados da Orange S.A. Esta base de dados foi
disponibilizada durante a KDD Cup 2009, sendo esta competição patrocinada pela
ACM (Association for Computing Machinery ). Para a solução deseja-se utilizar
abordagens de comitê de máquinas (ensemble methods ) oriundos de abordagens
de Aprendizado de Máquina. Neste contexto, para a implementação será adotada a
linguagem R, por esta estar disponível gratuitamente sob a GNU (General Public
License ), possuir muitas bibliotecas com ferramentas de Aprendizado de Máquina
disponíveis e facilidade de gerar gráficos, análises e imagens.
3
1. INTRODUÇÃO
Os paradigmas da área do conhecimento denominada Aprendizado de
Máquina são utilizados para resolver uma ampla variedade de problemas
relacionados à classificação, regressão e agrupamento de dados. Conforme descrito
pelo teorema No Free Lunch (“não existe almoço de graça”), proposto por Wolpert
em [1], quando uma técnica de aprendizado de máquina apresenta melhor
desempenho em problemas de determinado contexto, isso implica que a mesma
técnica terá um desempenho negativo (não desejado) na mesma proporção em
outros contextos. Em geral, não é possível determinar de antemão qual técnica é a
mais adequada para determinado problema.
Uma técnica que vem sendo utilizada para contornar as deficiências de cada
método e enfatizar as potencialidades é o denominado comitê de máquinas, em que
se faz uma combinação de duas ou mais técnicas (ou modelos diferentes de uma
mesma técnica). Existem várias formas de se combinar os diferentes modelos em
abordagens de bagging , boosting e stacking [2].
Bagging propõe criar diferentes classificadores a partir da geração de
conjuntos de testes fazendo amostragem com reposição do conjunto original [3]. A
proposta do boosting é similar, porém modificando a probabilidade de uma amostra
ser sorteada de acordo com ela ter sido correta ou incorretamente classificada pelos
classificadores treinados anteriormente [4]. E o stacking (empilhamento) propõe
treinar um “meta-classificador” que tenha como entrada as saídas dos primeiros
classificadores [5].
Para aplicar e validar novas abordagens de criação de comitês de máquinas,
este projeto visa lidar com o problema proposto pela KDD Cup 2009: prever o
comportamento de clientes, mais especificamente a propensão de troca de provedor
de um serviço, de adquirir um produto ou realizar um upgrade , a partir de uma base
de dados [6].
O número de clientes que mudam de provedor de serviço (churn rate ) causa
um prejuízo de 4 bilhões de dólares todos os anos na América do Norte e na
Europa. Isto mais do que justifica o interesse das empresas em formas de fazer
4
estas previsões para que ações possam ser tomadas o quanto antes para evitar a
perda de clientes [7].
O restante deste projeto está organizado da seguinte forma. Na seção 2 é
apresentado o detalhamento do projeto, começando por uma revisão de literatura
dos temas relevantes ao projeto, passando pelos fundamentos do problema a ser
resolvido, descrição do estado da arte, e detalhamento da solução desenvolvida por
este projeto. Na seção 3 detalha-se os procedimentos de teste e validação do
projeto. Na seção 4 é apresentado os resultados obtidos na implementação. E por
fim, na seção 5, são comentadas as conclusões decorrentes da execução deste
projeto e possíveis trabalhos futuros.
5
2. DETALHAMENTO DO PROJETO
2.1. Revisão de Literatura
Nesta seção é feito um resumo da literatura relevante para a execução deste
projeto.
2.1.1. Comitês de Máquinas
Um comitê de máquinas é uma combinação de componentes ( ou máquinas)
individuais treinados para resolver um mesmo problema e que são combinados para
realizarem novas previsões. Este paradigma tem origem no trabalho de Hansen e
Salamon [8], que demonstraram que a combinação da saída de várias redes neurais
treinadas de forma independente melhora de forma significativa a capacidade de
generalização do modelo.
A Figura 1 apresenta a estrutura básica de um comitê de máquinas, a
entrada é alimentada para todas as m máquinas e suas saídas são combinada para
gerar uma saída.
Figura 1. Estrutura de um comitê de máquinas
6
Um comitê é gerado em três etapas: geração de componentes, seleção de
componentes e combinação das saídas. Muitas vezes a seleção é omitida e todos
os componentes gerados são utilizados no comitê.
2.1.1.1. Geração de Componentes
Em seu trabalho, Krogh e Vedelsby [9] provaram que o erro de um comitê de
máquinas pode ser dividido em dois termos, um termo medindo o erro médio de
cada componente individual e um termo representando a descorrelação entre os
componentes. A conclusão que se retira do trabalho destes, é que o “bom”
desempenho de um comitê depende de seus componentes terem uma alta taxa de
acerto individualmente e serem o mais diferentes entre si possível. Em seu trabalho
Dietterich [10] afirma que componentes precisos e diversos são condições
necessárias e suficientes para que um comitê supere o desempenho individual de
qualquer um dos componentes. Opitz e Shavlik [11] provaram com testes empíricos
que comitês gerados seguindo esta linha tem boa generalização.
Os métodos para gerar componentes de comitês se baseiam, então, em
gerar componentes que difiram o máximo entre si em suas previsões. Existem três
possibilidades para se conceber componentes distintos para o mesmo problema:
variar o modelo, isto é, escolher diferentes modelos tais como redes neurais
artificiais, árvores de decisão, máquinas de vetor de suporte, entre outros., variar os
parâmetros iniciais do modelo, como variar os pesos iniciais de uma rede neural
artificial, por exemplo, ou variar os dados usados para treinar o componente.
Os métodos que são mais utilizados são os de variar os dados de
treinamento, e dentre estes os mais conhecidos são Bagging e Boosting . Bagging
foi proposto por Breiman [3], [11] e consiste em gerar vários conjuntos de
treinamento, criados a partir de amostragem uniforme e com reposição do conjunto
original de dados. Boosting foi proposto por [4] e consiste em gerar diversos
conjuntos de treinamento a partir de amostragem uniforme e com reposição do
conjunto inicial, mas a probabilidade de escolha de um dado exemplo depende da
sua contribuição para o erro nos componentes já gerados, ou seja, se os
7
componentes anteriores cometeram erros ao classificar determinado exemplo, este
terá probabilidade maior de ser sorteado para fazer parte do conjunto de dados do
próximo componente.
2.1.1.1.1. Bagging
Bagging é uma técnica para a geração de conjuntos de treinamento distintos
a partir do conjunto original para que seja possível obter componentes
descorrelacionados.
A partir do conjunto original de N amostras, é feito uma re-amostragem com
reposição e probabilidade igual para todas as amostras de forma a gerar M (número
de componentes) conjuntos com N amostras. Visto que há reposição é possível que
determinada amostra se repita em um mesmo conjunto.
Breiman [12] comprovou que Bagging atua de forma eficiente em algoritmos
instáveis, algoritmos que são fortemente influenciados por diferenças no conjunto de
treinamento. Redes neurais artificiais e árvores de decisão são exemplos de
algoritmos instáveis e que podem se beneficiar do uso de Bagging .
2.1.1.1.2. Boosting
Diferentemente do Bagging , que gera todos os componentes de forma
paralela, Boosting gera seus componentes de forma sequencial. O conjunto de
dados utilizado por um componente depende do desempenho do componente
anterior sobre as amostras. Os exemplos que foram incorretamente classificados
pelo componente anterior terão maior probabilidade de serem escolhidos para fazer
parte do conjunto de treinamento do próximo classificador. Desta forma, o Boosting
tenta gerar novos classificadores capazes de prever corretamente os exemplos que
os classificadores anteriores não conseguiram classificar corretamente.
2.1.1.1.3. Bias Variância
O erro de um algoritmo de aprendizado pode ser dividido em três termos: Um
termo de bias , que representa o erro devido ao modelo escolhido não ser o mesmo
que o processo real. Um termo de variância , que representa o erro devido ao
8
conjunto de dados de treinamento utilizado. E um termo de erro intrínseco que
representa ruído e não pode ser reduzido [13].
Esta decomposição do erro em termos de bias e variância é bastante
interessante, mas de difícil aplicação prática, pois para descobrir estes termos é
necessário conhecer a função que se está modelando, o que na prática não é
viável, ou então utilizar uma grande quantidade de dados para teste, o que reduz
muito os dados para treinamento [14].
Segundo Bauer e Kohavi [15], tanto Bagging quanto Boosting , reduzem o
erro diminuindo principalmente a variância, mas as duas técnicas também podem
reduzir a polarização (bias ).
2.1.1.2. Seleção de Componentes
Muitas vezes nem todos os componentes gerados contribuem de forma
positiva para o desempenho final do comitê de máquinas, pois mesmo com o uso de
estratégias como Bagging e Boosting os classificadores gerados podem ainda ser
muito correlacionados. Para garantir que apenas os componentes que melhoram o
desempenho fazem parte do comitê é possível fazer uma seleção após ter gerado
todos os componentes. Zhou et al. [16] demonstrou que o uso de seleção em
ensembles de redes neurais artificiais se mostra mais eficaz do que o uso de todos
os componentes gerados. A seleção pode ser feita de forma construtiva ou
destrutiva.
Na forma construtiva começa-se com o comitê vazio e escolhemos dentre os
componentes o que possui a menor taxa de erro. Então calcula-se a taxa de erro ao
adicionar um segundo componente ao comitê, o componente que mais reduzir a
taxa de erro entra no comitê. O processo se repete até que a taxa de erro se
mantenha ao comece a aumentar [17].
Na forma destrutiva começa-se com todos os componente dentro do comitê,
verifica-se então qual componente que ao ser removido melhora a taxa de erro, tal
componente é então removido. O processo se repete até a taxa de erro se manter
ou começar a aumentar [16].
9
2.1.1.3. Combinação das Saídas
Com o conjunto final de componentes definido, é necessário determinar uma
forma de combinar as suas saídas para gerar a resposta final do comitê. Existem
diversas abordagens para fazer esta combinação na literatura, tais como: média,
combinação não-linear, empilhamento e votação [5], [8], [17], [18].
Média: método simples e popular de combinação. A saída do comitê é gerada a
partir de média simples, ou ponderada pelo desempenho de cada classificador, da
saída dos componentes. Faz se a média de quantos componentes escolheram a
classe, a classe com a maior média será a saída do comitê de máquinas [17].
Combinação não-linear: existem vários métodos de combinação não-linear, um
deles é a combinação por ranqueamento [18]. Neste caso as saídas dos
componentes são classificados com um rank, o maior valor indica a resposta que o
comitê acredita ser a mais provável. É possível definir uma função de custo para
minimizar o erro dos ranqueamentos e desta forma escolher a resposta mais
provável.
Generalização empilhada (stacking ): este método proposto por Wolpert [5] sugere
que um novo componente seja empilhada a saída do comitê, ou seja, as saídas dos
componentes do comitê serão entradas do novo componente que será treinado para
prever a saída correta a partir das saídas dos componentes.
Votação: método simples em que a saída escolhida é a classe que venceu uma
votação majoritária das saídas dos componentes [8].
2.2. Detalhamento do Problema
O problema que este projeto se propõe a resolver é o proposto pela KDD Cup
2009 (Knowledge Discovery and Data Mining Cup) : a partir de uma base de dados
prever a propensão de clientes de trocarem de provedor de serviço (churn ),
10
comprarem novos produtos (appetency ), a comprar upgrades ou incluirem mais
serviços propostos aos clientes para melhorar a margem de lucro da venda
(up-selling ). Ou seja, três problemas de classificação. [19]
A base de dados disponibilizada para a competição é da empresa francesa
de telecomunicações Orange. A competição apresenta vários desafios: lidar com
uma base de dados bastante grande, milhares de variáveis (tanto numéricas quanto
categóricas), dados com bastante ruído, valores faltando e classes desbalanceadas
(poucas amostras de clientes que trocaram de provedor, por exemplo).
2.2.1. Análise da Base
A base de dados da competição é dividida em base de treinamento e de
testes, estando disponível em duas versões, uma reduzida com 230 variáveis e uma
completa com 15.000 variáveis, porém ambas possuem 50.000 entradas. A base
reduzida conta com 190 dados numéricos e 40 categóricos, já a completa possui
14.740 atributos numéricos e 260 categóricos. Os atributos-meta a serem previstos
estão em arquivos separados, um para churn , um para appetency e um para
up-selling . Estes atributos-meta possuem um valor binário, sendo “-1” uma
pretensão inexistente e “1” uma pretensão presente, portanto, o valor “1” no atributo
churn , representa um usuário que tende a mudar de provedor. A base de testes é
similar a base de treinamento porém sem os arquivos com os atributos-meta [19].
A base de treinamento apresenta classes desbalanceadas, como é possível
ver na Tabela 1, para o problema de appetency apenas 1,8% dos exemplos é
positivo. Além disso, em torno de 60% dos valores não estão presentes.
Problema Exemplos Positivos
Exemplos Negativos
Percentual de Positivos
Churn 3672 46328 7,3%
Appetency 890 49110 1,8%
Up-selling 3682 46318 7,4% Tabela 1. Distribuição de instâncias meta na base de treinamento
11
Os dados desta base de dados foram alterados a fim de preservar a
identidade e informações dos clientes da empresa. É impossível, portanto, inferir
qual dado representa uma determinada característica do consumidor, entretanto
esta modificação não altera a possibilidade de uso desta base para a geração de
classificadores.
2.3. Estado da Arte
2.3.1. KDD Cup
Um classificador Naïve Bayes é um classificador extremamente simples, ele
assume independência entre as variáveis e faz predições baseadas na correlação
da variável com a meta. Utilizando este classificador Guyon et al. [19] obteve os
resultados descritos na tabela 2. Por ser um dos classificadores mais simples, os
seus resultados são o mínimo a ser superado.
O classificador já utilizado pela Orange utiliza um classificador Naïve Bayes
melhorado [19], [20], incluindo pré processamento e seleção de variáveis. Os
resultados deste classificador também estão na Tabela 2, o desafio da competição é
superar estes resultados, que são calculados através da área embaixo da curva
(Area Under the Curve - AUC).
Problema Naïve Bayes (AUC)
Classificador da Orange (AUC)
IBM Research (AUC)
Churn 0,6468 0,7435 0,7611
Appetency 0,6453 0,8522 0,8830
Up-selling 0,7211 0,8975 0,9038 Tabela 2. Resultados dos classificadores de outros grupos
O ganhador da competição foi um time de pesquisa da IBM (IBM Research ),
utilizando um comitê de máquinas composto de diversos classificadores diferentes.
Eles colocaram esforço no pré processamento de dados, na seleção de variáveis,
codificação de variáveis categóricas e tratamento de valores faltantes. Outros
12
participantes premiados utilizaram comitês de árvores de decisão, filtros de seleção
de variáveis, boosting , entre outros métodos. Os resultados alcançados pela equipe
vencedora estão na Tabela 2 para fins de comparação futuro [19].
2.3.2. Trabalhos Relacionados
A possibilidade de prever o comportamento de clientes claramente traz
vantagens para as empresas, por isso várias empresas têm investido nesta área. A
abordagem de Mozer et al. [21] para prever o churn de empresas de
telecomunicações nos Estados Unidos da América envolve o uso de regressão
logística, árvores de decisão, redes neurais artificiais e boosting . Um comitê de
redes neurais foi treinado e usado por uma empresa de telecomunicações, clientes
foram divididos em dois grupos, um de controle e um de tratamento. Os clientes do
grupo de tratamento que fossem previstos com risco de mudar de serviço foram
contatados pela empresa. Ao final de 6 semanas a taxa de churn do grupo de
controle foi de 3,7% e a do grupo de tratamento foi de 2,2%.
No trabalho de Burez e Van den Poel [22],[22] modelos utilizando Random
Forests e boosting foram testados em 6 bases de dados para prever churn . O
trabalho foi focado no tratamento da falta de balanceamento das classes nas bases
de dados, mas o resultado demonstra o melhor desempenho dos métodos de
comitê de máquinas sobre implementações únicas, tal como a regressão logística.
2.4. Descrição da Implementação do Projeto
Este projeto desenvolveu uma solução para o problema proposto pela
KDD-Cup 2009 utilizando comitês de máquina heterogêneos. O produto final
entregue é uma aplicação na qual o usuário poderá inserir um arquivo com dados
de clientes e receber as previsões de churn , appetency e up-selling . A Figura 2
apresenta um diagrama de blocos do projeto.
13
Figura 2. Diagrama de blocos do software final
A parte principal do projeto é portanto a geração dos três modelos para
fazerem as previsões. Isto envolve a preparação dos dados, escolha das variáveis a
serem utilizadas, geração dos componentes, seleção dos componentes e
combinação das saídas. A Figura 3 mostra o diagrama de blocos que representa
este processo.
Figura 3. Diagrama de blocos geral do gerador de classificadores
2.4.1. Tecnologias Escolhidas
O projeto e todos os seus módulos foram desenvolvidos utilizando a
linguagem R, distribuída gratuitamente sob a GNU (General Public License ) [23].
Para as técnicas específicas utilizadas, foram necessárias bibliotecas específicas da
linguagem R, todas disponíveis gratuitamente.
O R foi escolhido por ser uma linguagem criada para o uso em aplicações de
estatística e aprendizado de máquina. Além disto o R apresenta uma grande
capacidade e facilidade de gerar gráficos e imagens, o que auxilia na verificação
durante o desenvolvimento e na produção de relatórios. Outra característica
presente no R é a possibilidade de ligar com código C, C++ e Fortran durante
14
execução, portanto se alguma tarefa computacionalmente intensiva precisasse ser
executada, seria possível implementá-la em C++ e manipular os objetos do R
diretamente [24], [25].
2.4.2. Criação dos Comitês
A criação dos comitês de máquinas é bastante complexa e com várias partes
que podem ser implementadas de diversas maneiras. Nas subseções seguintes são
descritos como foram implementadas cada etapa.
2.4.2.1. Pré Processamento
A primeira etapa para a criação dos comitês é preparar os dados de forma
que eles estejam formatados adequadamente para serem utilizados pelos
algoritmos de aprendizado de máquina. Além disso existem várias alterações que
podem ser feitas nos dados que podem melhorar o desempenho dos
classificadores, como normalizar variáveis numéricas e a forma de representar
variáveis categóricas.
Para as variáveis da base de dados tipo numérico os valores faltantes foram
substituídos pela média da variável. Os atributos numéricos também foram
normalizados de forma a obter, para cada um, média próxima de zero e variância
próxima de 1.
Para as variáveis do tipo categórico os valores faltantes foram substituídos
pela moda. Para atributos categóricos com mais de 10 níveis, foram mantidos os 9
níveis mais frequentes e todos os outros foram agrupados em um novo nível.
2.4.2.2. Seleção das Variáveis
A base de dados fornecida contém 230 variáveis, uma quantidade
consideravelmente grande. O uso de todas estas variáveis não era aconselhável,
pois provavelmente algumas variáveis possuem pouco ou nenhum valor preditivo
para as metas que desejamos prever, variáveis repetidas e variáveis redundantes.
Portanto foi necessário fazer uma análise de quais variáveis são relevantes e
possuem valor preditivo significante.
15
A primeira etapa foi a verificação da existência de atributos constantes, ou
seja, com valores idênticos para todos os exemplos, estes atributos foram
eliminados.
O segundo passo foi eliminar atributos que tivessem mais de 60% dos dados
faltantes, pois isto implica que o atributo possui uma quantidade reduzida de
informação.
O terceiro passo foi procurar por variáveis redundantes, com alta correlação.
Para esta função utilizamos uma funcionalidade da biblioteca caret , o método
“findCorrelation ”, e eliminamos atributos que possuíam correlação igual ou superior
a 75%. Abaixo está um exemplo de código em R fazendo esta operação.
# calcular matriz de correlação corr <- cor(Dataset) # Encontrar variáveis com correlação maior do que 75% AltaCorr <- findCorrelation(corr, cutoff=0.75) # Remover variáveis com alta correlação da base NovoDataset <- subset(Dataset, select=-AltaCorr)
2.4.2.3. Geração de Componentes
Com os dados formatados e as variáveis a serem utilizadas escolhidas, o
próximo passo é gerar todos os classificadores que poderão fazer parte do comitê.
A geração e seleção foram feitas seguindo [26], porém os algoritmos de
classificação base utilizados, não foram implementados, foram utilizados pacotes
disponíveis para a linguagem R, já que o foco do projeto foi a geração dos comitês
de máquinas. Os classificadores utilizados foram: árvores de decisão [29], florestas
aleatórias [32], redes neurais, GBM [27] e XGBoost [28], descritos a seguir..
2.4.2.3.1. Floresta Aleatória
Floresta aleatória é um comitê de máquinas que gera um grupo de árvores de
decisão pelo método de Bagging ou Boosting . As árvores de decisão são algoritmos
que se baseiam em classificar uma entrada a partir de hierarquias entre seus
atributos. Para a geração de componentes de árvore de decisão, foi usado o pacote
16
“rpart”, que possuí implementação similar ao descrito por [29]. Abaixo está um
exemplo de pseudocódigo para implementação de uma árvore de decisão.
Árvore de Decisão: 1 Árvore(nó_pai): 2 | Selecionar casos do nó pai 3 | Para cada atributo Ai 4 | | Calcular o ganho de informação ao separar por Ai 5 | | Se ganho de Ai > A_melhor: A_melhor <- Ai 6 | FIM 7 | Se ganho < 0 : FIM 8 | Criar nó de decisão em A_melhor 9 | Para cada valor Vi de A_melhor : Árvore(Vi) 10 FIM
Para cada um dos modelos, foi gerado dois grupos com um número finito de
árvores, utilizando uma parcela de 56.25% da base de dados, sendo um grupo de
cem e outro de duzentos e cinquenta, para cada um dos problemas à ser resolvido.
Para permitir que diferentes árvores fossem geradas pelo mesmo algoritmo, os
exemplos de entrada para cada componente foram re-amostrados de acordo com
as estratégias de bagging descrita a seguir.
Bagging: 1 D <- dados de treinamento 2 N <- quantidade de entradas por componente 3 X <- quantidade de componentes a ser gerado 4 Para X 5 | Selecionar um subconjunto de D de tamanho N -> S, aleatoriamente 6 | Treinar um Componente Ci com o conjunto S 7 | Armazenar Ci 8 FIM
Após a geração dos dois grupos citados, o grupo com cem árvores passou
por um processo de seleção construtiva de componentes, já que nem todos os
componentes gerados podem trazer um ganho de desempenho para o comitê. Esta
seleção de componentes tem como objetivo obter o melhor comitê sem fazer
overfitting . Esta seleção foi implementada segundo o pseudo código a seguir,
utilizando uma parcela de 18.75% da base de dados:
17
Seleção construtiva: Começa-se com o comitê vazio e é escolhido componente
mais reduz a taxa de erro, até não ser possível melhorar a taxa de acerto, como
descreve o pseudocódigo a seguir:
1 Iniciar um Ensemble vazio 2 Enquanto melhora > 0: 3 | Para cada componente Ci não adicionada ao ensemble 4 | | Combinar Ci ao Ensemble 5 | | Calcular a performance do ensemble 6 | | Retirar Ci do Ensemble 7 | FIM 8 | Selecionar a componente com maior melhora 9 | Se melhora do componente selecionado é > 0 10 | | Adiciona o componente ao Ensemble 11 | FIM 12 FIM
Por fim, foram gerados três modelos para cada um dos problemas, sendo um
uma floresta aleatória com cem árvores, outro modelo com uma parcela das cem
árvores do modelo anterior e o último modelo com duzentas e cinquenta árvores.
Estes modelos foram testados com os 25% restantes da base de dados, para que
não fosse utilizado para teste dados utilizados anteriormente para treinamento.
2.4.2.3.2. Comitê Heterogêneo
Para este comitê testado, foi decidido combinar diferentes classificadores
base. Os classificadores base utilizados foram: árvore de decisão, bagging de
árvores, rede neural artificial e GBM (Gradient Boosting Machine ).
GBM: É em si um comitê de árvores de decisão, inicia treinando uma árvore e
medindo seu desempenho, então iterativamente novas árvores são criadas tendo
como foco melhorar a árvore anterior, acertar onde a anterior errou. Desta forma
fazendo uma otimização através de um gradiente descendente [27].
Redes neurais artificiais: É um algoritmo que cria uma rede de neurônios
artificiais, cujos pesos são atualizados durante várias iterações a partir do erro de
classificações, como apresentado no pseudocódigo abaixo. O pacote utilizado para
a geração dos componentes de redes neurais foi o “nnet”.
18
1 Determinar os parâmetros de controle da rede 2 Inicializar Camadas da Rede 3 Inicializar Pesos 4 Para N iterações 5 | Selecionar dados de entrada 6 | Classificar cada entrada 7 | Calcular erro 8 | Propagar erro reversamente 9 | Atualizar Pesos 10 FIM 11 Retornar Rede
Cada um dos classificadores base foram treinados com uma parcela de
56.25% da base de dados. Para então combinar a saída de cada um destes
classificadores base foi implementado um stacking , cuja estrutura básica está
representada na Figura 4. Uma nova rede neural foi treinada, tendo como entrada
as previsões geradas por estes classificadores base utilizando uma outra parcela de
18.75% da base de dados.
A avaliação final do desempenho foi feita utilizando os 25% restantes da base
de dados.
Figura 4. Estrutura de uma rede neural formando um stacking
19
Stacking : Sendo a base de dados D = {(x(1), y(1)), …, (x(N), y(N))}, x são os atributos
e y a variável meta, C1, …, CT são os os classificadores do primeiro nível e C’ o
classificador do segundo nível. O pseudocódigo para a implementação do stacking é
o seguinte:
# Treinamento dos classificadores do primeiro nível Para (t = 1, …, T) {
ht = Ct(D); } # Criar uma nova base de dados D’ = Ø Para (i = 1, …, N) {
For (t = 1, …, T) { zit = ht(x(i)) # previsões do primeiro nível
} D’ = D’ ∪ {((zi1, …, ziT), y(i)}
} # Treinar o classificador de segundo nível h’ = C’(D’)
2.4.2.3.3. XGBoost
O XGBoost é uma implementação baseada no modelo do GBM, capaz de
treinar as árvores de forma paralela e com uso eficiente de memória. Esta
implementação permite trabalhar com muitos parâmetros para um ajuste mais fino
do modelo, de forma a controlar a relação de bias e variância e controlar o
overfitting [28].
20
2.4.3. Aplicação
A aplicação onde será utilizado os dados para classificação foi desenvolvida
para web. Um servidor roda o serviço e o usuário pode acessar a página web onde
pode realizar o upload de um arquivo com os dados de clientes dos quais deseja
prever a possibilidade de churn , appetency e up-selling . O servidor então processa
os dados e gera um arquivo com as previsões feitas, e disponibiliza o arquivo para
download pelo cliente.
Esta aplicação foi implementada utilizando a biblioteca em R shiny . Na
página é possível enviar um arquivo com os dados novos, gerar um arquivo com as
previsões para os três objetivos e também é possível ver gráficos que mostram a
distribuição das previsões.
O servidor ao receber o arquivo novo faz o mesmo pré processamento que
os dados de treinamento receberam, para que os dados estejam no formato
esperado pelos modelos treinados.
A Figura 5 mostra um diagrama de blocos do funcionamento da aplicação.
Figura 5. Diagrama de blocos da aplicação
21
3. PROCEDIMENTO DE TESTES E VALIDAÇÃO DO PROJETO
Os testes dos classificadores foram realizados utilizando parte da base de
treinamento disponível, calculando a área embaixo da curva a partir dos parâmetros
de sensitividade e especificidade extraídos da matriz de confusão para cada um dos
três comportamentos. Seguindo o mesmo padrão utilizado pelo desafio da KDD-Cup
de 2009, sendo então possível comparar com os escores atingidos pelas equipes
participantes do desafio. Será considerado um bom classificador aqueles que
atingirem valores superiores aos atingidos pelo algoritmo Naïve Bayes, apresentado
na tabela 2.
3.1. Matriz de Confusão
A matriz de confusão é uma maneira fácil de comparar os resultados obtidos
por um classificador, com os resultados esperados. Nesta matriz temos nas linhas
os resultados esperados e nas colunas os resultados preditos pelo classificador,
como podemos observar na Tabela 3, onde são representadas três classes.
Tabela 3. Exemplo de matriz de confusão
Se espera, idealmente, uma matriz com todos os casos caindo em sua
diagonal principal, enquanto a sua volta se tem zeros. Porém em classificadores
reais é esperado se ter erros, sendo estes representados pelos valores fora da
diagonal principal, como é possível identificar na Tabela 3, onde na diagonal
principal se encontra a maior parte dos resultados. Sendo possível, também,
identificar em quais classes estes exemplos estão sendo classificadas
erroneamente.
22
Caso o problema apresente apenas duas saídas possíveis, como o problema
descrito neste trabalho em que um consumidor pode ou não apresentar um
comportamento, pode se utilizar os termos positivos ou negativos verdadeiros, ou
falso positivo ou negativo, como exemplificado na tabela 4. Estes termos são
interessantes, pois, além de serem muito úteis para abstrair métricas para análise,
dependendo do problema pode ser melhor ter falsos positivos do que falsos
negativos, ou vice-versa.
Tabela 4. Exemplo de matriz de confusão binária
3.2. Sensibilidade e Especificidade
A sensibilidade (sen) é a probabilidade de acerto para predições positivas,
sendo calculado pela razão entre os verdadeiros positivos com o total de exemplos
positivos, como mostra a equação 1. Já a especificidade (esp) é a taxa de acerto de
predições negativas, sendo calculado a partir da razão entre a quantidade de
verdadeiros negativos com o número total de exemplos negativos, como mostra a
equação 2. [6]
(1)en p/(V p p)S = V + F
(2)sp n/(V n p)E = V + F
Onde
Vp é o Verdadeiro Positivo;
Fp é o Falso Positivo;
Vn é o Verdadeiro Negativo;
Fn é o Falso Negativo.
23
3.3. Área Abaixo da Curva e Acurácia Balanceada
O cálculo do escore de cada um dos classificadores será realizado por meio
da área abaixo da curva de sensitividade por especificidade (AUC – Area Under the
Curve ), como apresentado pela figura 7. Neste caso, por se tratar de uma
classificação binária, será utilizando uma aproximação trapezoidal entre os pontos
(0, 1), (esp, sen) e (1, 0), também denominada acurácia balanceada (BAC -
Balanced Accuracy ), descrita pela equação 3. [6]
Figura 6. Representação da AUC e BAC
(3)AC esp en)/2B = ( + s
O escore final será calculado a partir da média aritmética entre cada um dos
três classificadores, sendo assim possível comparar os resultados deste trabalho
com os obtidos por outros grupos durante a KDD Cup 2009. Este escore geral
24
também promove um parâmetro para comparar os diferentes classificadores
gerados durante o trabalho.
3.4. Plano de Testes
Nesta seção é descrito a estratégia de testes e os casos de testes que foram
utilizados para garantir a qualidade e garantir que que o projeto está correto. Esta
seção serve como guia a ser seguido para testar o projeto ao longo de seu
desenvolvimento. Os casos de teste a seguir foram divididos entre testes caixa preta
e caixa branca.
Testes Caixa Preta:
[TCP01]
Descrição: Testar o determinismo dos classificadores. Ao entrar com dados
repetidos, a previsão também deve se repetir.
Módulo testado: Módulo de Geração de Previsões.
Resultado esperado: As previsões feitas a partir das mesmas entradas
devem ser iguais confirmando que não existe nenhum componente aleatório nas
previsões.
Função Testada Passo Resultado Esperado
01 Envio de dados de entrada.
Inserir arquivo com dados de clientes utilizando o botão “Choose Input”. Todas as entradas do arquivo devem conter os mesmos dados.
O arquivo é enviado ao servidor que calcula as previsões. O usuário vê na tela a mensagem de upload completo.
02 Download das previsões. Selecionar o botão “Download Results”.
O servidor envia para o cliente o arquivo com as previsões.
03 Determinismo dos classificadores.
Comparar as previsões.
Todas as previsões devem ser iguais.
25
Testes de Caixa Branca:
[TCB01]
Descrição: Testar funcionamento do algoritmo de pré processamento. Ao
entrar com dados preparados, ter na saída os dados processados da forma
esperada.
Módulo testado: Módulo de Pré Processamento.
Resultado esperado: Os atributos da base, tanto numéricos quanto
categóricos, sem valores faltantes, variáveis numéricas com média 0 e variáveis
categóricas com no máximo 10 níveis.
Função Testada Passo Resultado Esperado
01 Entrada de dados Inserir dados de teste Dados tratados são gerados
02 Pré Processamento Verificar os valores faltantes
Nenhum valor deve estar faltando
03 Pré Processamento Verificar normalização dos atributos numéricos
As colunas numéricas devem estar com média igual a 0
04 Pré Processamento Verificar níveis dos atributos categóricos
As colunas categóricas não devem conter mais de 10 níveis diferentes
26
[TCB02]
Descrição: Teste do funcionamento do algoritmo de seleção de variáveis.
Módulo testado: Módulo de Seleção das Variáveis.
Resultado esperado: As variáveis com muitos valores faltantes devem ter
sido eliminadas, variáveis com correlação muito alta devem ter sido eliminadas.
Função Testada Passo Resultado Esperado
01 Entrada de dados Inserir dados de teste Variáveis são selecionadas
02 Seleção de variáveis Verificar a coluna com mais de 60% de valores faltantes
Coluna com mais de 60% de valores faltantes deve ter sido eliminada
03 Seleção de variáveis Verificar colunas com alta correlação
As colunas com correlação maior do que 75% devem ter sido eliminadas
[TCB03]
Descrição: Teste do funcionamento do algoritmo de seleção de
componentes.
Módulo testado:
Resultado esperado:
Função Testada Passo Resultado Esperado
01 Seleção dos componentes
Inserir componentes gerados
Lista de componentes selecionados é gerada
02 Rodar seleção de componentes
Uma sub lista de componentes é selecionada
03 Testar modelo com componentes selecionados
Resultado gerado é satisfatório, mas não necessariamente melhor do que utilizar todos os componentes
27
[TCB04]
Descrição: Teste do funcionamento do algoritmo de combinação dos
componentes.
Módulo testado:
Resultado esperado:
Função Testada Passo Resultado Esperado
01 Combinação dos componentes
Inserir componentes regados no modelo
Os modelos são carregados no sistema
02 Insere dados de teste no modelo
Dados são carregados
03 Executa código de combinação de componentes
Resultado gerado é satisfatório, mas não necessariamente melhor do que utilizar apenas um componente
28
4. TESTES E RESULTADOS
4.1. Árvores de decisão
Os testes das árvores geradas para cada um dos três problemas, foi
realizado utilizando a parcela de 20% de casos separados durante a etapa de
pré-processamento dos dados. Com os testes foi obtido as matrizes de confusão 5,
que correspondem aos modelos gerados para churn , appetency e upselling . O
escore AUC para cada um dos teste foram de 0.511, 0.526 e 0.709,
respectivamente, obtendo um escore final de 0.582, como mostra a tabela 6, isto
indica que utilizando apenas uma árvore de decisão não é possível obter resultados
satisfatórios, já que o resultado ficou muito abaixo do resultado usando Naive
Bayes, que seria o mínimo aceitável para o projeto.
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 11465 117 12240 37 11443 136
1 888 30 210 12 524 396
Tabela 5. Matrizes de confusão para árvore de decisão
Problema
Naïve Bayes
(AUC)
Classificador da
Orange (AUC)
Árvore de
decisão
Churn 0.6468 0.7435 0.5113
Appetency 0.6453 0.8522 0.5255
Upselling 0.7211 0.8975 0.7093
Escore final 0.6711 0.8311 0.5821
Tabela 6. escores para árvore de decisão
29
4.2. Floresta Aleatória
Para realizar os testes dos modelos gerados com o algoritmo de floresta
aleatória implementado, foi utilizado a parcela de 20% de casos separados durante
a etapa de pré-processamento dos dados. Inicialmente foi realizado um teste
construindo 100 árvores sem realizar a seleção dos modelos, obtendo as matrizes
de confusão 7, que correspondem aos modelos gerados para churn , appetency e
upselling . O escore AUC para cada um dos teste foram de 0.659, 0.638 e 0.758,
respectivamente, obtendo um escore final de 0.685.
Os resultados gerados a partir deste primeiro teste mostraram um potencial
de ensembles funcionarem para classificação do problema descrito por este
trabalho, já que foi obtido um escore final 0.103 acima do resultado obtido usando
apenas uma árvore.
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 8484 3098 11959 318 9703 1876
1 381 537 155 67 296 624
Tabela 7. Matrizes de confusão para 100 árvores, sem seleção
Seguindo o mesmo modelo dos testes anteriores, foi realizada a seleção das
componentes, pelo método construtivo, usando como critério de parada um
incremento abaixo de 0.1%. Esta seleção resultou na escolha de 27, 14 e 10
árvores para churn , appetency e upselling , respectivamente. O teste destes modelos
reduzidos resultou nas matrizes de confusão apresentadas na tabela 8, com um
escore final de 0.657, que é um pouco abaixo dos resultados obtidos pelo modelo
completo, porém mostra que não é necessário um quantidade grande de modelos
para gerar um resultado satisfatório, porém pode ser necessário selecionar modelos
dentro de um grande grupo de modelos.
30
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 9688 1894 12042 235 11037 542
1 520 398 175 47 434 486
Tabela 8. Matrizes de confusão para 100 árvores, com seleção
Por fim foi realizado um teste gerando uma floresta com duzentas e
cinquenta árvores de decisão, sem realizar a seleção de variáveis, com o resultado
dos testes apresentado nas matrizes de confusão da tabela 9. Com este teste foi
obtido um escore final de 0.695, porém é possível perceber que foi obtido um valor
muito baixo para a especificidade do classificador de taxa de churn, que foi de
0.635, enquanto que nos classificadores anteriores ficou acima de 0.730, o que
indica que com o aumento da quantidade de modelos, há um aumento da
sensibilidade do classificador com uma redução da especificidade do mesmo.
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 7357 4225 11804 473 8897 2682
1 271 647 142 80 242 678
Tabela 9. Matrizes de confusão para 250 árvores, sem seleção
Analisando a tabela 10, que apresenta os escores atingidos pelos modelos
gerados com o método de florestas aleatórias é possível verificar que o método de
florestas aleatória funciona, porém não parece promissor para classificar os
problemas apresentados, já que os modelos não conseguiram superar o resultado
do classificador da Orange. Este método, entretanto, não se mostrou promissor para
classificar appetency, pois embora tenha superado o modelo gerado por naive
bayes, ele ficou muito atrás do modelo da Orange. Este resultado foi obtido,
31
provavelmente, pela natureza dos dados, já que na base de dados apenas 1.8% dos
casos são positivos para appetency .
Problema Naïve Bayes
Classificador
da Orange
100 Árvores
sem seleção
100 Árvores
com seleção
250 Árvores
sem seleção
Churn 0.6468 0.7435 0.6587 0.6350 0.6700
Appetency 0.6453 0.8522 0.6379 0.5963 0.6609
Upselling 0.7211 0.8975 0.7581 0.7407 0.7527
Escore final 0.6711 0.8311 0.6849 0.6573 0.6945
Tabela 10. Escores obtidos com árvores aleatórias
4.3. Comitê Heterogêneo
Os dois comitês utilizando stacking implementados foram testados da mesma
forma que os modelos anteriores. O stacking com os quatro classificadores (gbm,
árvore, bagging de árvores e rede neural) apresentou os seguinte escores AUC para
churn , appetency e upselling , respectivamente, 0.674, 0.724 e 0.748. Portanto o
escore final foi de 0.716. O resultado para o appetency foi melhor do que os
atingidos pelo comitê de árvores aleatórias, mas os outros dois parâmetros não
foram tão bons. As matrizes de confusão estão presentes na tabela 11.
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 5423 3263 6999 2209 7556 1128
1 190 498 52 115 258 432
Tabela 11. Matrizes de confusão para stacking com 4 modelos
32
4.4. XGBoost
Os modelos gerados utilizando o algoritmo XGBoost apresentaram
bons resultados para upselling e para appetency , porém não para churn . Os escores
AUC para churn , appetency e upselling foram, respectivamente, 0.663, 0.741 e
0.763. O escore final ficou em 0.722. Na tabela 12 estão as matrizes de confusão
para a base de teste utilizando estes modelos.
Predito
Churn Appetency Upselling
-1 1 -1 1 -1 1
Real -1 6762 1924 7197 2011 7176 1508
1 312 376 50 117 208 482
Tabela 12. Matrizes de confusão para XGBoost
4.5. Performance dos Modelos Gerados
Embora não tenha sido possível gerar modelos melhores do que o utilizado
pela Orange, foi possível gerar modelos que superaram o modelo gerado pelo
método Naive Bayes com todos os comitês de máquinas implementados. O
algoritmo que apresentou a melhor performance geral foi o XGBoost, com um
escore final de 0.721, como mostra a tabela 13. O comitê heterogêneo, entretanto,
superou o XGBoost para a classificação de taxa de churn, portanto ao utilizar este
modelo, se tem um escore final de 0.725.
Problema
Naïve
Bayes
Classificador
da Orange
Árvore de
decisão
Floresta
Aleatória
Comitê
Heterogêne
o
XGBoos
t
Melhores
Modelos
Churn 0.6468 0.7435 0.5113 0.6700 0.6741 0.6625 0.6741
Appetency 0.6453 0.8522 0.5255 0.6609 0.7244 0.7390 0.7390
Upselling 0.7211 0.8975 0.7093 0.7581 0.7481 0.7624 0.7624
Final Score 0.6711 0.8311 0.5821 0.6963 0.7155 0.7213 0.7252
Tabela 13. Escores obtidos com os modelos gerados
33
Outra análise possível de ser realizada do aumento da eficiência de uma
campanha de marketing, comparando uma campanha aleatória, com uma
campanha direcionada utilizando os dados gerados pelo aplicativo gerado. Como
mostra a tabela 14, onde é analisado a eficiência da campanha com o modelo
gerado por florestas aleatórias. Com esta análise é possível verificar que, embora o
escore AUC para appetency não tenha sido alto, o modelo seria suficiente para
causar um aumento de 838% na eficiência de uma campanha de marketing.
Problema
Campanha
Aleatória
Campanha
Direcionada
Aumento de
Eficiência
Churn 7.34% 17.36% 136.45%
Appetency 1.78% 16.67% 838.36%
Upselling 7.36% 47.28% 542.29%
Tabela 14. Comparação de eficiência de campanha de marketing
4.6. Aplicação
Como um produto final foi desenvolvida uma aplicação web incorporando os
modelos treinados. Nas figuras 7 e 8 estão apresentadas imagens da aplicação.
Figura 7. Tela para enviar dados e receber previsões da aplicação
34
Figura 8. Gráfico gerado pela aplicação
35
5. CONCLUSÃO
Este projeto desenvolveu uma aplicação que prevê o comportamento de
clientes da operadora de telecomunicações Orange S.A. com base nos dados
disponibilizados na KDD cup de 2009. Para isso foram implementados comitês de
máquinas fazendo combinações de diversos métodos de aprendizado de máquina,
assim como métodos de pré processamento e seleção de dados. O projeto,
entretanto, não implementou os algoritmos de base do comitê de máquinas,
utilizando, portanto, pacotes já disponíveis para a linguagem R.
Os resultados obtidos com os ensembles implementado durante o projeto
conseguiram classificar os clientes dentro dos três parâmetros estabelecidos,
superando o modelo Naive-Bayes simples em todos os objetivos. Embora os
resultados não tenham sido ideais na métrica AUC, eles demonstram o potencial da
abordagem de problemas de classificação por meio de ensembles .
No ponto de vista do produto final, é possível verificar que este software teria
um real impacto na gerência de campanhas de marketing. Pois com ele seria
possível direcionar as campanhas para aqueles clientes que pretendem deixar a
empresa ou àqueles que possuem predisposição a adquirir novos produtos da
empresa. A utilização deste software, portanto, reduziria custos de marketing e
aumentaria a eficiência das campanhas, resultando em lucro maior para a empresa.
A principal dificuldade encontrada foi em utilizar a base de dados maior, com
15000 colunas, pois o processamento acabava consumindo toda a memória. A
alternativa foi utilizar a base reduzida e investir nos métodos de seleção de variáveis
para trabalhar com o menor número de colunas possível.
Para continuar o trabalho seria necessário investir na parte preparação e
seleção das variáveis, pois não foram feitas muitas variações ou experimentos nesta
etapa. Seria possível testar outras formas de tratar variáveis faltantes, e
principalmente trabalhar na criação de novas variáveis, algo que não foi feito neste
projeto.
36
REFERÊNCIAS
[1] D. H. Wolpert, “The Lack of A Priori Distinctions Between Learning Algorithms,”
Neural Computation. , vol. 8, no. 7, pp. 1341–1390, 1996.
[2] G. Seni and J. Elder, Ensemble Methods in Data Mining: Improving Accuracy
Through Combining Predictions . Morgan & Claypool Publishers, 2010.
[3] L. Breiman and B. Leo, “Bagging predictors,” Machine Learning , vol. 24, no. 2,
pp. 123–140, 1996.
[4] R. E. Schapire, “The strength of weak learnability,” Machine Learning , vol. 5, no.
2, pp. 197–227, 1990.
[5] D. H. Wolpert, “Stacked generalization,” Neural Networks , vol. 5, no. 2, pp.
241–259, 1992.
[6] S. Blog, “SIGKDD : KDD Cup 2009 : Customer relationship prediction.” [Online].
Disponível em: http://www.kdd.org/kdd-cup/view/kdd-cup-2009/Intro. [Acessado
em: 02-Jun-2016].
[7] L. Yan, Y. Lian, D. J. Miller, M. C. Mozer, and R. Wolniewicz, “Improving
prediction of customer behavior in nonstationary environments,” in IJCNN’01.
International Joint Conference on Neural Networks.
[8] L. K. Hansen and P. Salamon, “Neural network ensembles,” IEEE Trans.
Pattern Anal. Mach. Intell. , vol. 12, no. 10, pp. 993–1001, 1990.
[9] Krogh A & Vedelsby, “Neural network ensembles, cross validation, and active
learning,” Advancements in Neural Information Processing Systems , vol. 7, pp.
231–238, 1995.
[10] T. G. Dietterich, “An Overview of MAXQ Hierarchical Reinforcement Learning,”
in Lecture Notes in Computer Science , 2000, pp. 26–44.
[11] Opitz D & Shavlik, “Generating accurate and diverse members of a neural
network ensemble,” In Touretsky, D., Mozer, M., & Hasselmo, M. (Eds.),
Advances in Neural Information Processing Systems , vol. 8, pp. 535–541, 1996.
[12] L. Breiman and B. Leo, “Stacked regressions,” Mach. Learn. , vol. 24, no. 1, pp.
49–64, 1996.
[13] S. Geman, G. Stuart, B. Elie, and D. René, “Neural Networks and the
Bias/Variance Dilemma,” Neural Computation , vol. 4, no. 1, pp. 1–58, 1992.
37
[14] L. Breiman, “Bias, variance, and arcing classifiers,” Tech , 1996.
[15] Bauer E & Kohavi, “An empirical comparison of voting classification algorithms:
Bagging, boosting, and variants,” Machine Learning , vol. 36, pp. 105–139, 1999.
[16] Z.-H. Zhou, Z. Zhi-Hua, W. Jianxin, and T. Wei, “Ensembling neural networks:
Many could be better than all,” Artificial Intelligence , vol. 137, no. 1–2, pp.
239–263, 2002.
[17] M. P. Perrone, L. N. Cooper, United States. Army Research Office, Brown
University. Institute for Brain and Neural Systems, United States. Office of Naval
Research, and National Science Foundation (U.S.), When Networks Disagree:
Ensemble Methods for Hybrid Neural Networks . 1992.
[18] K. A. Al-Ghoneim and B. V. Kumar, “Learning ranks with neural networks,” in
Applications and Science of Artificial Neural Networks , 1995.
[19] Guyon, Isabelle Lemaire, Vincent Boullé, Marc Dror, Gideon Vogel, David,
“Analysis of the KDD Cup 2009: Fast Scoring on a Large Orange Customer
Database,” Journal of Machine Learning Research Workshop and Conference
Proceedings , vol. 7, pp. 1–22, 2009.
[20] M. Boullé and B. Marc, “An Enhanced Selective Naïve Bayes Method with
Optimal Discretization,” in Studies in Fuzziness and Soft Computing , pp.
499–507.
[21] M. C. Mozer, R. Wolniewicz, D. B. Grimes, E. Johnson, and H. Kaushansky,
“Predicting subscriber dissatisfaction and improving retention in the wireless
telecommunications industry,” IEEE Trans. Neural Netw. , vol. 11, no. 3, pp.
690–696, 2000.
[22] J. Burez and D. Van den Poel, “Handling class imbalance in customer churn
prediction,” Expert Systems Applications , vol. 36, no. 3, pp. 4626–4636, 2009.
[23] “R: The R Project for Statistical Computing.” [Online]. Disponível em:
https://www.r-project.org/. [Acessado em: 03-Out-2016].
[24] “R: What is R?” [Online]. Disponível em: https://www.r-project.org/about.html.
[Acessado em: 17-Jun-2016].
[25] R. Ihaka, I. Ross, and G. Robert, “R: A Language for Data Analysis and
Graphics,” Journal of Computational and Graphical Statistics , vol. 5, no. 3, pp.
38
299–314, 1996.
[26] R. Caruana, C. Rich, N.-M. Alexandru, C. Geoff, and K. Alex, “Ensemble
selection from libraries of models,” in Twenty-first international conference on
Machine learning - ICML ’04 , 2004.
[27] J. H. Friedman, “Greedy function approximation: a gradient boosting machine,”
Annals of Statistics , pp. 1189–1232, 2001.
[28] “Introduction to Boosted Trees,” XGBoost . [Online]. Disponível em:
https://xgboost.readthedocs.io/en/latest/model.html. [Acessado em
15-Nov-2016].
[29] I. G. Maglogiannis, Emerging Artificial Intelligence Applications in Computer
Engineering: Real Word AI Systems with Applications in EHealth, HCI,
Information Retrieval and Pervasive Technologies . IOS Press, 2007.
ORIENTADOR
_____________________________ Prof. Dr. Leandro do Santos Coelho