Escolar Documentos
Profissional Documentos
Cultura Documentos
https://www.kdnuggets.com/wp-content/uploads/ensemble-framework-packt.jpg
02
PARTE I - Métodos de Ensemble Learning
Quando você conduz uma pesquisa de opinião, você não aceita apenas uma
“melhor” resposta. Você considera uma resposta combinada de todos os
participantes e usa estatísticas como a moda ou a média para representar as
respostas. As respostas combinadas provavelmente vão levar a uma decisão
melhor do que confiar em apenas uma resposta. É o princípio da wisdom of the
crown (sabedoria das multidões) entrando em prática.
03
PARTE I - Métodos de Ensemble Learning
Bagging
Antes de entendermos Bagging, precisamos primeiro entender o que é
Bootstrapping. Essa técnica consiste em subdividir nosso dataset, tomando
elementos de forma aleatória e com reposição.
O bagging treina modelos individuais usando uma amostra aleatória para cada.
Depois dos modelos individuais serem treinados com suas respectivas amostras,
eles são agregados usando uma média nos problemas de regressão ou uma
votação nos problemas de classificação.
Fonte: https://www.datacamp.com 04
PARTE I - Métodos de Ensemble Learning
Por outro lado, realizar o bagging tem um custo computacional alto, em termos
de espaço e tempo, pois a cada nova iteração é criada uma amostra diferente.
Além disso, essa técnica só funciona se o modelo base tiver uma boa
performance. Usar o bagging em um modelo base ruim pode fazer com que o
modelo final fique ainda pior. Por último, por se tratar de um preditor
homogêneo, ou seja, os modelos individuais usam o mesmo algoritmo, o
bagging pode não reconhecer alguns padrões de decisão da base.
Boosting
Os métodos de boosting formam uma outra categoria de Ensemble Learning,
com foco principalmente em diminuir o viés dos modelos iniciais. Esse tipo de
aprendizado se tornou muito conhecido no meio de Data Science nos últimos
anos, por obter ótimos resultados em competições de Machine Learning, devido
a sua grande adaptabilidade.
Como o principal foco dos métodos de Boosting é de reduzir o viés dos “weak
learners (modelos simples)”, é ideal escolher como base para a agregação um
tipo simples com alto viés e baixa variância. Decorrente disso, geralmente
escolhemos árvores de decisão de baixa profundidade para compor o preditor
final.
05
PARTE I - Métodos de Ensemble Learning
AdaBoost
Adaptive Boosting é um algoritmo que consiste em combinar de forma
sequencial vários modelos mais fracos. Sendo assim, o weak learner
subsequente leva em consideração as predições do anterior, para formar um
preditor mais conciso. O diferencial desse algoritmo é que as predições mais
difíceis (aquelas em que o weak learner da iteração atual mal previu) recebem
um peso maior no preditor seguinte, buscando assim uma maior otimização do
algoritmo final.
Noutros termos, cada modelo é inicializado com um peso padrão, que define seu
poder de decisão no protótipo final. A partir disso, conforme vamos treinando
esses modelos mais simples, cada weak learner ganha um peso maior para as
observações em que ele previu corretamente, e um peso menor para as
observações em que ele possui um alto índice de erro.
Repare aqui que existem dois pesos. O primeiro é o peso para cada observação
que representa o grau de foco que a iteração em questão deve dar para aquela
observação. A cada novo modelo treinado, esses pesos das amostras são
atualizados. Já o segundo é um peso para cada modelo que representa seu
poder de decisão quando são combinados. Eles atribuem apenas uma vez para
cada estimador.
Dessa forma, os weak learners com maior precisão terão maior poder de
decisão no modelo final.
Fonte: https://towardsdatascience.com/understanding-adaboost-2f94f22d5bfe
06
PARTE I - Métodos de Ensemble Learning
Gradient Boosting
O gradient boosting é um outro tipo de algoritmo de boosting, que difere do
adaboost quanto à maneira com a qual os modelos são treinados com relação
aos anteriores.
Fonte:: https://medium.com/mlreview/gradient-boosting-from-scratch-1e317ae4587d
07
PARTE I - Métodos de Ensemble Learning
Repetimos esse processo por várias iterações, obtendo erros residuais cada vez
menores.
Fonte: https://medium.com/mlreview/gradient-boosting-from-scratch-1e317ae4587d
Stacking
Para explicar como o stacking funciona, vamos usar uma analogia
esportiva.
Considere uma corrida em grupo, onde os corredores correm até passar o bastão
para o próximo no caminho. Este é um bom exemplo de trabalho em equipe.
Enquanto todos os membros do time devem ser competidores fortes, cada
indivíduo tem um papel especial baseado em suas habilidades. Por exemplo, o
âncora é o último membro a receber o bastão e aquele que completa a corrida.
Em algum nível, ele é como o líder do time.
08
PARTE I - Métodos de Ensemble Learning
Para ser efetivo nessas corridas, o âncora deve: saber as forças e fraquezas de
cada membro do time, definir responsabilidades para cada membro e, por fim,
participar da corrida.
Métodos de stacking levam esta ideia das corridas em grupo. Ao invés de passar
um bastão, modelos individuais passam suas predições para o próximo modelo.
Abaixo, temos um diagrama ilustrando a arquitetura de ensembles de stacking.
Fonte: https://www.datacamp.com
Cada modelo individual usa o mesmo dataset e input features. Esses são os
estimadores da primeira camada. Então, os estimadores passam suas predições
como features adicionais para a segunda camada.
Até agora, vimos métodos de ensemble que usam simples operações aritméticas
como, por exemplo, a média ou a moda para combinar os seus tipos. No entanto,
no stacking, o combinador é por si só um modelo passível de ser treinado. Além
disso, a espécie combinadora não tem apenas as predições como features, mas
também o dataset original. Isto permite determinar qual estimador é mais
acurado dependendo das features de input.
09
PARTE II
XGBoost
Fonte: https://www.discoverbits.in/post/wp-content/uploads/2018/08/xgboost.png
Fonte: StatsQuest
10
PARTE II - XGBoost
Fonte: StatsQuest
A predição 0.5, corresponde a esta linha preta contínua na imagem acima. Para
cada amostra, temos um resíduo, isto é, a diferença entre o valor observado e o
predito, que nos mostra o quão boa a inicial é. Na imagem eles estão
representados pelas linhas pretas pontilhadas. Agora, assim como o gradient
boosting, o XGBoost treina uma árvore de decisão para os resíduos.
Então vamos falar sobre como construir uma árvore para regressão. Note que
existem várias maneiras de construir essas árvores. Nesta parte, falaremos da
maneira mais comum de construí-las para regressão.
Cada árvore começa com uma única folha, e todos os resíduos vão para essa
folha:
Fonte: StatsQuest
11
PARTE II - XGBoost
Fonte: StatsQuest
Para responder isso, primeiro focamos nas duas observações com as dosagens
mais baixas:
Fonte: StatsQuest
Digamos que a média entre elas é 15 - representada acima pela linha vermelha.
Então, dividimos as observações em dois grupos, baseado em quando uma
amostra tem “dosagem < 15” ou não.
12
PARTE II - XGBoost
A observação mais a esquerda é a única com dosagem menor do que 15, então
seu resíduo vai na folha da esquerda e todos os outros vão para a folha da direita.
Agora calculamos os scores de similaridade para as duas folhas, seguindo o
mesmo procedimento mostrado antes, obtendo 110.25 para a folha da esquerda
e 14.08 para a folha da direita.
Fonte: StatsQuest
Então, deslocamos o threshold para que agora ele seja a média entre as próximas
duas observações e construímos uma árvore que divide as observações para o
novo threshold, que é “dosagem < 22.5”:
13
PARTE II - XGBoost
Fonte: StatsQuest
Nesse caso, o ganho é igual a 4. Como esse ganho para “dosagem < 22.5”
(ganho = 4) é menor que a “dosagem < 15” (ganho = 120.33), “dosagem < 15” é
melhor dividindo os resíduos em clusters com valores similares.
Então, novamente deslocamos o threshold para que seja a média das próximas
duas observações, e construímos uma árvore que divide as observações para o
novo threshold, que é “dosagem < 30”.
Fonte: StatsQuest
14
PARTE II - XGBoost
Nesse caso, o ganho é igual a 56.33. Novamente, como o ganho para “dosagem
< 30” (ganho = 56.33) é menor que o da “dosagem < 15” (ganho = 120.33), “dosagem
< 15” é melhor em dividir as observações. Como não podemos deslocar mais o
threshold para a direita, já comparamos todos os thresholds diferentes possíveis
e usaremos, desta maneira, o threshold que nos dá o maior ganho, “dosagem
< 15”, para o primeiro ramo na árvore.
Fonte: StatsQuest
Fonte: StatsQuest
Note que todos esses parâmetros comentados até aqui são customizáveis.
Normalmente, controlamos a profundidade das árvores, os parâmetros de
regularização, o número de estimadores, etc. Além disso, usamos algum critério
de otimização de hiperparâmetros como o grid search ou o random search, por
exemplo, de modo a maximizar a escolher os parâmetros que levam a um
modelo com a maior performance possível no final.
15
PARTE II - XGBoost
Nós podamos uma árvore do XGBoost nos baseando em seus ganhos. Iniciamos
tomando um valor, digamos, por exemplo, 130. Este será mais um parâmetro de
regularização, e o XGBoost chama este número de γ (gamma). Calculamos,
assim, a diferença entre o ganho associado ao ramo mais baixo na árvore e o valor
γ. Se a diferença entre o ganho e o γ for negativa, removemos o ramo. Se for
positiva, não o removemos.
Fonte: StatsQuest
Fonte: StatsQuest
Note que o ganho para o primeiro ramo, 120.33, é menor que 130, o valor de
gamma, então a diferença será negativa. Mas como não removemos o primeiro
ramo, não removeremos a raíz. Caso configurarmos γ= 150, removeremos os dois
ramos e tudo o que teríamos é a predição original - o que é um caso extremo de
podagem.
16
PARTE II - XGBoost
Agora vamos voltar aos resíduos iniciais, mas desta vez, quando calcularmos os
scores de similaridade, vamos configurar λ=1. Lembre-se que o lambda é um
parâmetro de regularização, o que significa que a intenção dele é reduzir a
sensitividade das predições a observações individuais. O score de similaridade
para a raíz é então:
Ou seja, obtemos um score de 3.2, o que é 80% do que tínhamos quando λ=0.
Fonte: StatsQuest
Quando nós calculamos o ganho, obtemos 62.48, o que é bem menor do que o
ganho de 120.33 de quando λ=0. Similarmente, o ganho do próximo ramo
“dosagem < 30” também é menor do que antes.
Para efeitos de comparação, esses são os valores dos ganhos quando λ=0.
Fonte: StatsQuest
17
PARTE II - XGBoost
Quando falamos sobre podas, configuramos primeiro γ=130, e como para o ramo
mais profundo na primeira árvore, a diferença entre o ganho e a gamma era
positiva, não podamos a árvore em nenhum momento.
Fonte: StatsQuest
Com λ=1, os valores para o ganho dos dois ramos são menores que 130, o que nos
faria podar a árvore inteira.
Então, quando λ>0, é mais fácil podar as folhas porque os valores para o ganho
são menores.
Fonte: StatsQuest
Note que o valor é como o score de similaridade, exceto que nós não elevamos ao
quadrado a soma dos resíduos.
18
PARTE II - XGBoost
Tomando como exemplo a folha com o resíduo -10.5, se λ=0, o output será igual a
-10.5, mas se λ=1. Em outras palavras, quando obtivermos λ>0, irá reduzir a
quantidade que uma folha individual adiciona na predição total. Então, λ (o
parâmetro de regularização) vai reduzir a sensitividade da predição a observação
individual. Por agora, vamos manter as coisas simples e deixar λ=0, porque esse é
o valor padrão. Calculando os valores de output para cada uma das folhas, temos:
Fonte: StatsQuest
Repare que quando λ=0, o output de uma folha é simplesmente a média de seus
resíduos.
Fonte: StatsQuest
19
PARTE II - XGBoost
Se você não sabe porque usamos essa learning rate, aqui vai uma
explicação rápida:
O XGBoost chama a learning rate de ε(eta) e seu valor padrão é 0.3, então é esse
que iremos utilizar.
Para a observação mais à esquerda no eixo x, com dosagem = 10, a nova predição
será igual a inicial (0.5) mais a learning rate, ε(eta) 0.3, vezes o output da folha
(-10.5). Logo, 0.5 + (0.3 * -10.5) = -2.65.
20
PARTE II - XGBoost
Fonte: StatsQuest
Podemos observar que o novo resíduo é menor do que antes, então acabamos
de dar um pequeno passo na direção certa.
Fonte: StatsQuest
Construímos uma nova árvore baseada nos novos resíduos e fizemos novas
predições que nos deram resíduos menores:
21
PARTE II - XGBoost
Fonte: StatsQuest
Nesse caso, i representa cada resíduo de uma folha. Aqui vale lembrar que
em problemas de classificação, cada predição é a probabilidade daquela
observação pertencer à classe positiva. Então, quando construímos a
árvore, usamos a probabilidade da predição anterior daquela amostra.
22
PARTE II - XGBoost
Dessa forma, concluímos que a função logit está intimamente relacionada com a
chance de um evento ocorrer.
23
PARTE II - XGBoost
Essa função é definida para todos os números reais, e sua imagem, isto é, os
valores que ela pode assumir, ficam entre 0 e 1.
Cabe ressaltar que existe uma justificativa matemática por trás de cada cálculo
de ganho e de score de similaridade.
24
PARTE III - XGBoost vs LightGBM vs CatBoost
Introdução
Abaixo temos uma linha cronológica de quando cada algoritmo foi lançado:
https://towardsdatascience.com/catboost-vs-light-gbm-vs-xgboost-5f93620723db
O XGBoost é o mais antigo deles, sendo, talvez por isso, o mais conhecido entre
eles. Começou como um projeto de pesquisa de Tianqi Chen e do brasileiro
Carlos Guestrin, que publicaram juntos um artigo descrevendo o algoritmo.
Caso queira conferir o artigo original, basta clicar aqui. Apesar disso, seu uso só
ficou popular em 2016, quando começou a ser muito usado nas competições de
Machine Learning, superando a performance de quase todos os outros
algoritmos facilmente.
Dada a disponibilidade de artigos internet afora sobre o assunto, hoje o foco será
no LightGBM e no CatBoost. Falaremos sobre: as diferenças estruturais destes
em relação ao XGBoost, o propósito de cada algoritmo, como eles lidam com
variáveis categóricas, a semelhança nos hiperparâmetros e mostraremos
algumas comparações de performance.
25
PARTE III - XGBoost vs LightGBM vs CatBoost
LightGBM
O principal objetivo do LightGBM é acelerar o treinamento, mantendo a
mesma performance do XGBoost. Para isso, ele tem três grandes
otimizações durante o processo de construção das árvores.
26
PARTE III - XGBoost vs LightGBM vs CatBoost
Por último, temos uma diferença no modo como as árvores de decisão crescem.
O XGBoost usa uma abordagem chamada de “level-wise tree growth”,
enquanto o LightGBM usa a abordagem denominada “leaf-wise tree growth”.
Abaixo temos duas imagens ilustrando como cada árvore fica mais profunda:
https://datascience.stackexchange.com/questions/26699/decision-trees-leaf-wise-best-first-and-level-wise-tree-traverse
CatBoost
O CatBoost, por sua vez, tem dois grandes objetivos: evitar o overfitting e
fornecer bons hiperparâmetros. Seu nome é uma abreviação de Categorical
Boosting, devido a sua maneira especial de lidar com variáveis categóricas.
27
PARTE III - XGBoost vs LightGBM vs CatBoost
https://medium.com/@hanishsidhu/whats-so-special-about-catboost-335d64d754ae
Esse tipo de estrutura leva a um tempo de predição muito baixo, visto que o
número de splits distintos cresce linearmente com a profundidade da árvore e
não exponencialmente como o XGBoost.
I) Considere todos (ou uma amostra ) dos dados para treinar um modelo com
alto bias;
28
PARTE III - XGBoost vs LightGBM vs CatBoost
Tendo em vista esse problema, o CatBoost faz o boosting de uma maneira muito
elegante. Vamos explicá-la usando um exemplo simples.
Se os dados não tem uma ordenação, a cada iteração o algoritmo seleciona uma
ordenação aleatória, como se criasse um tempo artificial para cada ponto.
II) Treinar o modelo usando os resíduos de cada ponto como variável resposta;
29
PARTE III - XGBoost vs LightGBM vs CatBoost
Ou seja, um modelo que foi treinado no primeiro ponto é usado para calcular o
resíduo do segundo ponto. Outro modelo que foi treinado nos dois primeiros
pontos é usado para calcular resíduos do terceiro e quarto pontos, e assim por
diante.
A última característica que iremos mostrar do CatBoost é a forma com o qual ele
lida com features categóricas.
30
PARTE III - XGBoost vs LightGBM vs CatBoost
Nós temos a Feature 1, uma feature categórica com 3 diferentes categorias. Com
o response coding, nós representaremos nublado = (15 +14 +20+25) / 4 = 18.5. Isso
realmente leva ao data leakage, porque estamos construindo uma feature de
um ponto usando o target do mesmo ponto.
Aqui temos:
31
PARTE III - XGBoost vs LightGBM vs CatBoost
Hiperparâmetros
Todos esses três algoritmos têm muitos parâmetros para ajustar, mas
abordaremos apenas os importantes. Abaixo, temos uma tabela com esses
parâmetros de acordo com sua função e suas contrapartes nos diferentes
modelos. Cabe ressaltar que os parâmetros mais importantes são bem similares
nos três, com leves alterações no nome, por exemplo, mas com a mesma
funcionalidade.
https://towardsdatascience.com/catboost-vs-light-gbm-vs-xgboost-5f93620723db
Benchmarks
Em seguida, mostraremos os resultados de alguns testes feitos para comparar a
performance e o tempo de cada um dos algoritmos. Aqui vale ressaltar que os
dois últimos exemplos foram executados em bases de dados que utilizamos na
prática aqui na Datarisk.
32
PARTE III - XGBoost vs LightGBM vs CatBoost
Exemplo 1
Eis os resultados:
Exemplo 2
33
PARTE III - XGBoost vs LightGBM vs CatBoost
Eis os resultados:
Exemplo 3
34
PARTE III - XGBoost vs LightGBM vs CatBoost
Por fim, devo dizer que essas observações são verdadeiras para esses conjuntos
de dados específicos, e podem ou não permanecer válidas para outros
conjuntos. No entanto, uma coisa é verdade: em geral, o XGBoost é mais lento
que os outros dois algoritmos e o LightGBM é o mais rápido entre eles.
Deixamos aqui algumas dicas de como usufruir da melhor forma dos três
modelos:
35
PARTE III - XGBoost vs LightGBM vs CatBoost
36