Árvores de decisão: um apanhado geral

Objetivo

Um apanhado geral do uso de árvores de decisão no campo de aprendizado de máquina. Quais são os modelos que existem, como eles se diferenciam, vantagens e desvantagens de cada um deles, quais os mais populares.

Introdução

Uma árvore de decisão é uma estrutura muito similar a um fluxograma no qual você entra com um dado e sai com alguma predição do mesmo. Por exemplo, se quisermos decidir o meio de transporte para chegar no trabalho (a pé ou de ônibus), podemos utilizar a seguinte árvore de decisão:

Exemplo de árvore de decisão{ width=400px }

Em aprendizado de máquina, estamos interessados em como construir boas árvores de decisão. Uma árvore de decisão boa é uma que toma decisões corretamente: ela ao mesmo tempo se aproxima corretamente dos dados que viu, quanto generaliza bem o que aprendeu para acertar dados que não viu.

Existem muitos tipos de árvores de decisão, e não é óbvio o que isso significa. Quando falamos de "tipos diferentes de árvores de decisão", em geral estamos falando de:

Observação importante: o problema de construir a árvore de decisão que melhor particiona um conjunto de dados é um problema de otimização. Porém, esse problema é NP-completo, então em geral esses algoritmos de construção de árvores são heurísticas gulosas que tentam tomar decisões localmente ótimas (ao invés de globalmente ótimas).

Lista de modelos

Segue uma lista não-exaustiva dos modelos mais populares de aprendizado de máquina que constroem árvores de decisão únicas:

Em seguida, os algoritmos mais populares para construção de ensembles de árvores, ao invés de árvores únicas:

Alguns paradigmas alternativos:

Comparações

Em que dimensões os algoritmos variam entre si?

Regras de avaliação de variáveis

Grande parte das árvores são construídas de forma gulosa: ao criar um novo nó (um novo split), todas as variáveis são consideradas e escolhe-se aquela que melhor divide os dados observados de acordo com alguma métrica. Essa métrica usualmente varia de algoritmo pra algoritmo.

Pruning

Árvores isoladas sempre tiveram um problema com overfitting: quanto maior a árvore, maior a possibilidade de cada folha representar um único dado do conjunto de treinamento. Uma das técnicas utilizadas pra impedir que isso ocorra é o pruning, ou poda: basicamente, reduzir o tamanho da árvore.

Pruning é dividido em dois tipos: pre-pruning e post-pruning (também chamados de no pruning e pruning. Eu sei, é complicado). O pre-pruning tenta estabelecer algumas regras pra delimitar o tamanho da árvore: não cresça a árvore além de uma determinada altura, por exemplo. Já o post-pruning envolve deixar a árvore ficar bem grande, e depois aplicar algum algoritmo pra cortar sub-árvores que não contribuem significativamente pra acurácia de generalização.

A ideia é que o post-pruning é melhor do que o pre-pruning porque ele compensa a suboptimalidade da indução gulosa: é melhor deixar a árvore ser construída completamente e depois a gente corta ela do que tentar fazer isso de forma prematura. O pruning funciona, de certa forma, como um lookahead.

Variable selection bias

Diversos dos algoritmos de construção de árvores apresentados acima são enviesados em relação a seleção de variáveis. Em particular, na hora de escolher qual variável será empregada em um certo nó da árvore, elas tendem a escolher variáveis que apresentam muitas categorias diferentes (tanto variáveis categóricas quanto variáveis numéricas que possuem muitas possibilidades de cutoff). Isso é chamado de variable selection bias e é impactante devido à forma sequencial com a qual as decisões gulosas são tomadas.

Esse viés é problemático porque afeta não só a capacidade preditiva do modelo como também a interpretabilidade que podemos retirar dele: será que a árvore foi construída dessa forma porque ela enxergou algo nos dados, ou é apenas fruto dos tipos das variáveis? Esse viés se apresenta mesmo quando todas as variáveis são irrelevantes.

Na prática, isso pode não ser um problema. O viés de seleção pode aumentar a chance de divisões serem feitas em variáveis irrelevantes com maior quantidade de cutoffs, mas se o número de amostras for grande o suficiente isso não deve afetar muito o impacto do modelo - basta permitir que a árvore seja grande o suficiente a ponto de contar também com os splits importantes (Loh, 2014).

Certos algoritmos de construção de árvore são não-enviesados nesse aspecto, como por exemplo a família do FACT (GUIDE, QUEST, CRUISE). O C4.5, o CART e o CHAID são enviesados.

Árvores Binárias vs. Multiway

Imaginemos uma variável categórica "clima" que pode admitir os valores "ensolarado", "nublado" e "chuvoso". Em uma árvore de decisão, existem duas formas interessantes de criar um nó para essa variável:

  1. Um nó que checa se o dado possui um determinado valor pra variável (ex.: "clima == ensolarado?"), e apresenta dois filhos ("sim" e "não")
  2. Um nó que checa o valor da variável no dado, e possui um filho para cada um dos possíveis valores (como na figura da Introdução).

Essas não são as duas únicas formas (por exemplo, a primeira opção poderia ter "sim", "não" e "faltante"), mas são duas bastante intuitivas e comuns. O primeiro esquema cria apenas árvores binárias, e o segundo esquema cria árvores multiway (notavelmente mais largas).

Toda árvore multiway pode ser escrita como uma árvore binária, pois basta criar mais camadas pra representar o mesmo modelo. Portanto, elas não variam na questão de representabilidade. Contudo, elas variam na questão de interpretabilidade: por serem mais compactas, as árvores multiway são mais fáceis de serem compreendidas visualmente por um ser humano (Kim & Loh, 2001).

Segue uma relação de quais algoritmos produzem árvores binárias e quais produzem árvores multiway.

É intuitivo visualizar uma divisão multiway pra variáveis categóricas, mas alguns algoritmos também as apresentam pra variáveis contínuas (separando em diversos intervalos). O CHAID, por exemplo, separa toda variável contínua em 10 intervalos distintos.

Univariate vs. Multivariate

A maior parte das árvores de decisão fazem splits em apenas uma variável (univariate), no formato $X \geq c$. Essa abordagem é simples, mas incapaz de representar cutoffs que não sejam ortogonais ao eixo da variável. Basta pensar numa linha diagonal: para aproximá-la usando árvores univariate, precisamos de um número potencialmente infinito de nós.

Podemos imaginar um outro esquema no qual os splits consideram múltiplas variáveis (multivariate), como por exemplo em uma combinação linear $a X_1 + b X_2 \geq c$. Isso aumenta o espaço de hipóteses buscado pelo modelo, ao mesmo tempo que potencialmente gera árvores mais compactas (pois os nós são mais poderosos). Porém, há um custo associado: os nós em si podem ficar mais difíceis de serem interpretados.

Muitos métodos foram utilizados como testes lineares nos nós de árvores: LDA (linear discriminant analysis), programação linear, perceptrons, redes neurais, hill climbing, etc.

Ranqueamentos de importância

Uma das vantagens das árvores de decisão é a sua interpretabilidade: por conta da natureza de white box das árvores, um desses modelos pode fornecer intuições sobre o domínio no qual os dados foram retirados. Essa vantagem pode ser adicionalmente observada através do uso de importance scores, ou ranqueamentos de importância.

Basicamente, as variáveis são ranqueadas de acordo com o quanto elas contribuem pra tarefa de predição. Essa noção de "importância" é certamente não muito bem-definida (Loh, 2014), e por conta disso cada algoritmo inventa um jeito diferente.

Os únicos algoritmos de árvores de decisão single-tree que fornecem ranqueamento das variáveis são o CART (que usa surrogate splits pra isso) e o GUIDE (por meio de estatísticas $\chi^2$). Dentre os métodos de ensemble, pode-se utilizar o ranqueamento empregado pelo random forests (importância via permutação).

Vale observar que, independente de como a árvore foi construída, sempre podemos calcular a importância com base na "fração de amostras que ela afeta". Por exemplo, a variável no nó raiz afeta 100% das amostras vistas: se o seu filho a esquerda afetar apenas 5% das amostras vistas, é de se esperar que ele seja menos importante do que o filho à direita (que afeta 95% das amostras vistas). Portanto, essa noção de "fração de amostras" pode ser combinada com o decréscimo na impureza pra obter uma métrica de importância. O problema dessa abordagem é duplo: (1) não necessariamente diz algo sobre o ranqueamento das variáveis out-of-sample, e (2) está sujeito aos vieses de seleção de variáveis (ver seção Variable selection bias). Portanto, outras abordagens (como as que usam permutação) são preferíveis (scikit-learn, 1.11.2.5).

Tratamento de valores faltantes

No mundo real, frequentemente os dados que temos estão longe do ideal. Além deles terem algum ruído inerente ao processo de coleta, não é nada raro que certas amostras simplesmente não tenham certas features - isto é, elas possuem "valores faltantes" (missing values). Uma das abordagens mais diretas é simplesmente eliminar os dados que estão incompletos, mas dependendo do seu domínio (e do tamanho do seu conjunto de dados), isso não é uma opção.

Diversos algoritmos de árvore de decisão apresentam soluções pra esse problema (nem todos, contudo).

Árvores vs. Ensembles

Quando utilizamos árvores de decisão para solucionar um problema, existem dois objetivos que não são mutuamente excludentes: (1) produzir uma árvore que seja capaz de gerar boas previsões, e (2) inferir informações qualitativas sobre os dados de treinamento. O primeiro objetivo é compartilhado com diversos outros métodos de aprendizado de máquina, contudo o segundo objetivo é possível apenas para um conjunto restrito de modelos denominados interpretáveis, dentre os quais as árvores de decisão se destacam.

Nos últimos anos, árvores de decisão têm sido empregadas cada vez mais no contexto de ensemble learning (ou "aprendizados por comitê"). Nestes comitês, treinam-se dezenas ou centenas de classificadores de uma vez só, de forma que a resposta final do modelo é uma votação na qual todos os classificadores participam. Métodos de ensemble podem ser utilizados com quaisquer classificadores, mas suas versões mais populares frequentemente usam árvores de decisão: destacam-se o Random Forest e o XGBoost. Comparações baseadas em dados reais e simulados indicam que a acurácia do melhor algoritmo single-tree é em média 10% menor do que a de um ensemble de árvores (Loh, 2009).

Porém, o que se ganha em acurácia se perde em interpretabilidade. É difícil, senão impossível, extrair alguma interpretação de um conjunto de 500 árvores. Árvores de decisão isoladas continuam sendo um dos modelos mais interpretáveis, apesar de suas formas de ensemble terem se tornado mais populares. Para capitalizar em cima dessa vantagem, é essencial o uso de algoritmos que sejam não-enviesados e que produzam árvores compactas.

Perguntas em aberto

(Loh, 2011){ width=400px }