Predição de Saídas — Parte 3/4

Modelos preditivos, feature importance, oversampling e escolha de uma modelo para predição de saídas

Higor Gomes
20 min readAug 22, 2022
Figura 1 — Capa. Fonte: o autor.

Caso você já tenha lido este artigo, aqui você encontra as outras partes: análise básica, análise intermediária e análise expert.

Introdução

Nos artigos anteriores dessa série (Predição de Saídas — Parte 1 e Predição de Saídas — Parte 2) vimos toda a etapa de importação das bibliotecas, conexão e observação da base de dados, limpeza completa, análise exploratória, normalização e padronização dos dados, correlação, testes estatísticos e análise de sobrevivência. Caso você não tenha lido os artigos anterior, recomendo fortemente a leitura antes de seguirmos.

Recapitulando:

  • Estamos analisando uma base de dados fictícia disponibilizada aqui [1] cujo tema central é analisar as alavancas que impulsionam as saídas dos colaboradores
  • Contamos com 34 variáveis preditoras (features) e 1 variável target binária (binária, indicando se a pessoa saiu ou não)
  • A base é significantemente desbalanceada (84% de ativos, 16% de inativos)

Conforme o título diz, estamos no terceiro (e penúltimo) artigo da série chamada Predição de Saídas, e apenas agora iremos entrar análise preditiva. Não se trata de um clickbait, e sim do destaque de que existe muito trabalho interessante (e imprescindível) a ser feito antes de partir pra alguma técnica de predição. Reforçando: toda boa análise preditiva é precedida por uma excelente análise descritiva.

Neste artigo iremos cobrir os seguintes tópicos:

  • Machine Learning: iremos discorrer brevemente sobre a teoria por trás do que é um modelo preditivo
  • Preparação do dataset: transformações adicionais, divisão dos preditores e da classe, além da separação entre dados de treino e teste
  • Métricas de avaliação: falaremos sobre matriz de confusão, métricas de sucesso para problemas de classificação, curva ROC e AUC e pontos de atenção para problemas de identificação de anomalias
  • Criação e comparação dos modelos: serão criados diversos modelos preditivos, bem como uma análise de suas potencialidades, dificuldades e comparação de seus resultados
  • Oversampling: estudo de uma das maneiras de lidar com bases de dados desbalanceadas
  • Feature importance: entendendo quais são os atributos mais importantes no processo de predição, sendo uma poderosa ferramenta para aumentar a explicabilidade

Predição é a construção e uso de um modelo voltado para avaliar a classe (valor discreto) ou estimar um atributo (valor contínuo) de um objeto não rotulado na base de dados. Para isso, é necessário utilizar dados históricos para treinar o modelo, a fim de que ele possa avaliar um dado nunca visto e prever qual será o rótulo (ou etiqueta) que será atribuído a esse exemplo. Temos dois principais tipos de problemas quando falamos em predição no contexto de People Analytics: classificação e regressão.

A Figura 2 traz de forma esquemática (e resumida) a representação de quais são as etapas necessárias para a construção de um modelo preditivo.

Figura 2 — Esquema das etapas de construção de um modelo preditivo. Fonte: o autor.

Machine Learning

Antes de entrarmos na parte prática da construção de modelos preditivos, é importante falarmos um pouco sobre teoria. Quando falamos sobre modelos preditivos, estamos essencialmente nos referindo a um modelo de machine learning, de acordo com as possíveis definições:

“Capacidade de um sistema para interpretar corretamente dados externos, aprender a partir desses dados e utilizar essas aprendizagens para atingir objetivos e tarefas específicos através de adaptação flexível.” — KAPLAN & HAENLEIN, 2018

“Um programa de computador aprende a partir de uma experiência E com respeito a uma tarefa T e uma métrica de performance P, se a sua performance em T, medida por P, melhora com a experiência E.” — TOM MITCHELL, 1997

As Figuras 3 e 4 trazem de forma esquemática os tipos diferentes de aprendizado de máquina que conhecemos atualmente (ou pelo menos, a maioria deles).

Figura 3 — Tipos de aprendizados de máquina. Fonte: o autor.
Figura 4 — Tipos de aprendizados de máquina. Fonte: o autor.

Pela natureza do nosso problema ser binária (a pessoa saiu ou não saiu), o tipo de aprendizado de máquina que iremos utilizar é o supervisionado, voltado para variáveis alvo categóricas, com a técnica de classificação. A Figura 5 abaixo ilustra o ramo de interesse para o nosso problema, juntamente com exemplos de aplicações em People Analytics.

Figura 5 — Foco de aplicação do problema. Fonte: o autor.

Iremos explorar diversos tipos de algoritmos de classificação, indicando suas potencialidades e fraquezas, escolhendo apenas um deles para a construção completa do nosso modelo preditivo.

Acredita-se que haja uma compensação entre a interpretabilidade e a precisão de um modelo. Isso vem da observação de que os modelos mais elásticos geralmente têm maior precisão, mas, por sua vez, também são mais complexos, ou seja, um grande número de parâmetros do modelo que afetam a previsão final [2]. Assim, essa será também uma das diretrizes de escolha: modelos que podem ser explicados e desdobrados com diferentes tipos de públicos.

Preparação do Dataset

Antes de construirmos de fato um modelo preditivo, é necessário entendermos as 4 macro etapas desse processo, apresentadas a seguir.

Pré-processamento dos dados

  • Preparação do conjunto de dados para ser utilizado no modelo
  • Isto pode envolver todas as tarefas vistas nos artigos anteriores, como limpeza, tratamento, transformações, eliminações, entre outras
  • Cada algoritmo pede um tipo específico de transformação

Separação dos dados em treinamento e teste

  • Etapa em que é feita a separação do conjunto de dados em dois subconjuntos seguindo uma proporção adequada
  • O conjunto de treinamento é utilizado para ensinar o modelo e ajustar os parâmetros de predição
  • O conjunto de teste é utilizado para avaliar a qualidade do modelo

Realização de treinamento e teste

  • No treinamento, é realizada a construção do modelo e seleção dos hiperparâmetros
  • É necessário atenção ao tipo de saída esperada, a fim de criar um modelo que seja assertivo, porém genérico o suficiente
  • Aplicação do modelo aos dados de teste, a fim de avaliar os resultados

Avaliação dos resultados

  • Nesta etapa final, é avaliada a capacidade de generalização do modelo treinado, a partir de sua aplicação aos dados de teste
  • Por ser um treinamento supervisionado, sabemos as respostas esperadas para cada objeto no conjunto de teste
  • Cálculo das métricas de sucesso

Assim, como toda a limpeza inicial, investigação, tratamentos e transformações já foram executadas nos artigos 1 e 2 dessa série, nos resta apenas a separação do dataset em classes (o que vamos prever) e preditores (quem nos ajudará a prever as classes), juntamente com a divisão em porções de treino e teste.

O snippet de código a seguir apresenta como essa etapa é realizada.

Para o nosso caso, vamos escolher o valor de 70% dos dados para treino e 30% para teste. A Figura 6, apresentada a seguir, traz de forma esquemática a divisão do nosso dataset. Vale ressaltar que essa divisão precisa ser aleatória e representativa, de acordo com o número de classes.

Figura 6 — Representação esquemática da divisão do dataset. Fonte: o autor.

Aqui vale o lembrete de que é importante mantermos em mente que nossa busca deve ser por um modelo com boas métricas de sucesso, porém com boa capacidade de generalização. Isso se dá por conta do famoso bias-variance tradeoff (compensação do viés e variância). A Figura 7 traz de forma esquemática os possíveis resultados de acordo com as variações desses parâmetros.

Figura 7 — Representação do bias-variance tradeoff. Fonte: o autor.

Sobre cada um dos casos, temos:

  • Baixo viés e baixa variância: é o modelo ideal e o que desejamos obter, com uma boa acurácia e precisão nas previsões
  • Baixo viés e alta variância: o modelo está superestimando (overfitting) nos dados de treino e não generaliza bem com dados novos
  • Alto viés e baixa variância: o modelo está subestimando (underfitting) nos dados de treino e não captura a relação verdadeira entre as variáveis preditoras e a variável resposta
  • Alto viés e alta variância: O modelo está inconsistente e com um acurácia muito baixa nas previsões

A Figura 8 ilustra de forma mais tangível como essa compensação funciona na prática.

Figura 8 — Exemplo prático do bias-variance tradeoff. Fonte: o autor.

Definindo Funções de Avaliação

A fim de determinar se nossos modelos estão com uma assertividade aceitável, iremos utilizar algumas métricas de sucesso para nos orientar. Todas essas métricas serão construídas com base na matriz de confusão, que consiste em uma ferramenta para avaliação de modelos de classificação.

A Figura 9 traz uma representação esquemática de uma matriz de confusão.

Figura 9 — Matriz de Confusão. Fonte: o autor.

Considerando uma saída de um colaborador como a classe positiva e a permanência de um colaborador como a classe negativa, temos:

  • TP (true positive): acerto na identificação, pessoa que saiu classificada como inativa
  • TN (true negative): acerto na rejeição, pessoa que ficou identificada como ativa
  • FP (false positive): erro na identificação, pessoa que ficou identificada como inativa
  • FN (false negative): erro na rejeição, pessoa que saiu identificada como ativa

Aqui, podemos estabelecer uma provocação: qual dos erros é o mais crítico quando estamos analisando um problema de saída dos colaboradores? Retomamos em alguns parágrafos com a resposta.

Observação: no caso de mais classes, basta aumentar o número de linhas e colunas da matriz.

O snippet de código abaixo traz uma função para criarmos a matriz de confusão dos modelos.

Após a construção da matriz de confusão, podemos calcular as nossas métricas de sucesso. Existem diversas possíveis métricas para calcularmos quando o assunto é classificação binária. Aqui, iremos olhar para as quatro métricas apresentadas a seguir.

  • Acurácia (Accuracy): é uma métrica para avaliar modelos de classificação. Informalmente, a acurácia é a fração de previsões que nosso modelo acertou
  • Precisão (Precision): é uma métrica que responde qual a proporção de classificações positivas que estavam realmente corretas
  • Revocação (Recall): é uma métrica que responde qual a proporção de classes positivas reais foram identificadas corretamente
  • F1-Score: combina a precisão e a revocação de um classificador em uma única métrica, utilizando sua média harmônica

A Figura 10 a seguir traz a fórmula de cálculo dessas métricas.

Figura 10 — Cálculo das métricas de sucesso. Fonte: o autor.

O snippet de código a seguir traz a função para cálculo de plotagem das métricas.

Além das métricas apresentadas, iremos adicionalmente olhar para uma poderosa ferramenta chamada Curva ROC (receiver operating characteristic) que consiste em um um gráfico que mostra o desempenho de um modelo de classificação em todos os limites de classificação [3].

Essa curva plota dois parâmetros: a taxa de verdadeiros positivos (true positive rate, ou TPR) e a taxa de falsos positivos (false positive rate, ou FPR). O cálculo dessas duas métricas está ilustrado na Figura 11.

Figura 11 — Cálculo da TPR e FPR. Fonte: o autor.

Uma curva ROC plota TPR vs. FPR em diferentes limites de classificação. A redução do limite de classificação classifica mais itens como positivos, aumentando assim tanto os falsos positivos quanto os verdadeiros positivos.

Juntamente com a curva ROC, iremos olhar também a AUC (area under the ROC curve), ou seja, a área sob a curva, fornecendo uma medida agregada de desempenho em todos os limites de classificação possíveis. Uma maneira de interpretar a AUC é como a probabilidade de que o modelo classifique um exemplo positivo aleatório mais alto do que um exemplo negativo aleatório.

A Figura 12 a seguir traz 5 possíveis casos para a curva ROC.

Figura 12 — Casos possíveis para a curva ROC.

Para cada um dos casos, temos:

  • Caso 1: essa curva ROC tem uma AUC entre 0,5 e 1,0, o que significa que classifica um exemplo positivo aleatório mais alto do que um exemplo negativo aleatório em mais de 50% das vezes. Os valores de AUC de classificação binária do mundo real geralmente caem nesse intervalo
  • Caso 2: essa curva ROC tem uma AUC de 0,5, o que significa que classifica um exemplo positivo aleatório mais alto do que um exemplo negativo aleatório 50% das vezes. Como tal, o modelo de classificação correspondente é basicamente inútil, pois sua capacidade preditiva não é melhor do que adivinhação aleatória
  • Caso 3: essa curva ROC tem uma AUC entre 0 e 0,5, o que significa que classifica um exemplo positivo aleatório mais alto do que um exemplo negativo aleatório em menos de 50% das vezes. O modelo correspondente realmente tem um desempenho pior do que a adivinhação aleatória! Se você vir uma curva ROC como essa, provavelmente indica que há um bug em seus dados
  • Caso 4: essa é a melhor curva ROC possível, pois classifica todos os positivos acima de todos os negativos. Tem uma AUC de 1,0. Na prática, se você tiver um classificador “perfeito” com AUC de 1,0, deve desconfiar, pois provavelmente indica um bug no seu modelo. Por exemplo, você pode ter um overfit em seus dados de treinamento ou os dados do rótulo podem ser replicados em uma de suas features
  • Caso 5: essa é a pior curva ROC possível; ele classifica todos os negativos acima de todos os positivos e tem uma AUC de 0,0. Se você invertesse todas as previsões (virar negativos para positivos e positivos para negativos), você teria um classificador perfeito

O snippet de código a seguir traz a função para plotagem da curva ROC e AUC.

Por fim, o último snippet de código dessa etapa traz uma função para plotagem de todas as métricas, incluindo a matriz de confusão e um gráfico de precisão versus revocação, a fim de ter em uma mesma tela todas as ferramentas necessárias para avaliação do modelo.

Criando os Modelos Preditivos

Por fim, chegamos à etapa de criação dos modelos preditivos. Se você está vendo isso pela primeira vez (e leu os dois primeiros artigos dessa série, análise básica e intermediária), tenho uma boa notícia: essa é a parte mais fácil do processo!

Até chegarmos aqui, tivemos todo um trabalho de entendimento dos dados, limpeza, análise exploratória simples e avançada, testes estatísticos e preparação da base. Agora, assumindo que todas as etapas anteriores foram feitas com cuidado e exploradas ao máximo, nos resta apenas dois passos: ensinar um modelo com a base de treino e prever os resultados com a base de testes.

Conforme indicado no primeiro passo deste artigo (Preparação do Dataset), já temos separados os dados de treino e teste. As Figuras 13 e 14 trazem de forma esquemática essas divisões feitas anteriormente.

Figura 13 — Divisões do dataset de treino. Fonte: o autor.
Figura 14 — Divisões do dataset de teste. Fonte: o autor.

Assim, tendo todas as bases devidamente criadas, o próximo passo é o treinamento. Essa etapa consiste em mostrar uma instância (ou linha) da base de dados para o nosso modelo e informar qual é a classe associada, para todas as instâncias da base de treino. Por exemplo, para uma pessoa da área de RH, com salário de 5000, 32 anos de idade e 4.5 pontos de satisfação, sua classe real associada é Inativo. Assim, o modelo será capaz de fazer os cálculos internos necessários para conseguir inferir uma classe quando receber uma nova observação. Um esquema da etapa de treinamento está representado na Figura 15 a seguir.

Figura 15 — Esquema do treinamento de um modelo preditivo. Fonte: o autor.

E pronto! Temos um modelo capaz de prever se uma pessoa irá sair ou ficar. A próxima etapa é realizar as predições. Para isso, temos primeira parte da etapa de teste, que consiste em mostrar uma instância para o modelo, armazenar o resultado que ele irá prever, e comparar com o resultado real, para todas as instâncias da base de teste. Por exemplo, se um modelo se deparar com uma pessoa da área de Vendas com um salário de 2578, 25 anos de idade e 4.8 pontos de satisfação, a classe prevista será Ativo. A Figura 16 traz uma representação da etapa de predição das classes.

Figura 16 — Esquema da etapa de predição das classes. Fonte: o autor.

Assim, nos resta ir para a segunda parta da etapa de teste, concluindo nossa criação de um modelo preditivo: a comparação dos resultados. Aqui, o objetivo é comparar a classe predita com a classe real de cada uma das instâncias da base de teste. Por exemplo, para o mesmo caso da pessoa da área de Vendas com um salário de 2578, 25 anos de idade e 4.8 pontos de satisfação, temos que a classe real (informada na base de teste) é Ativo, assim como a classe predita, indicando que o modelo acertou essa previsão. Daqui, teremos a nossa matriz de confusão, comparando as classes preditas com as classes reais. A Figura 17 traz de forma esquemática essa etapa.

Figura 17 — Esquema da etapa de avaliação do modelo. Fonte: o autor.

Como vimos anteriormente, a partir da matriz de confusão é possível calcular todas as nossas métricas de avaliação, o que nos diz o quão bom é o modelo de acordo com a tarefa a ser executada (no nosso caso, prever saídas). Para fixarmos, a etapa de construção de um modelo preditivo utiliza, essencialmente as duas linhas de código abaixo:

modelo.fit(x_treino, y_treino)
modelo.predict(x_teste)

Sobre o modelo, não entraremos em detalhes sobre todos (aconselho fortemente um profundo entendimento sobre cada algoritmo antes de utilizá-lo), mas pincelaremos um pouco da parte teórica dos escolhidos (próximo tópico deste artigo).

Existem diversas possibilidades quando o assunto é classificação, e cada modelo vai ter potencialidades e fraquezas diferentes. Quando estamos lidando com predição de saídas, é importante termos em mente que quase sempre estaremos lidando com uma base desbalanceada, ou seja, muito mais observações de pessoas ativas do que inativas. Assim, é importante escolhermos e criarmos nossos modelos sabendo que eles precisarão ser bons em lidar com esse tipo de situação.

Outra diretriz importante no momento de escolha de modelos preditivos é a explicabilidade, principalmente dentro da área de People Analytics. Muitas vezes precisaremos desdobrar os resultados de um modelo preditivo com diversos tipos de públicos, técnicos ou não, e quebrar o efeito caixa preta do aprendizado de máquina é muito importante, a fim de aumentar a confiabilidade nos resultados e provar que o que está sendo apresentado foi feito com consciência e embasamento.

Por fim, é imprescindível que estejamos no controle da construção dos modelos e saibamos exatamente quais variáveis os compõe e como otimizá-las. Temos muitas técnicas avançadas e interessantes atualmente como redes neurais e deep learning, mas a complexidade matemática por trás de alguns algoritmos é tamanha que, caso não seja bem compreendida, o modelo resultante não vai ter sucesso em relação a uma regressão logística, por exemplo. Assim, sempre lembre que o mais simples pode ser mais eficiente.

A seguir, temos os snippets de código para a criação dos modelos preditivos que avaliaremos aqui, seguidos de seus resultados representados nas Figuras 18 a 26. Iremos testar modelos de árvores, florestas, redes neuras, e mais alguns.

Figura 18 — Métricas de avaliação do modelo LogisticRegression. Fonte: o autor.
Figura 19 — Métricas de avaliação do modelo DecisionTreeClassifier. Fonte: o autor.
Figura 20 — Métricas de avaliação do modelo RandomForrestClassifier. Fonte: o autor.
Figura 21 — Métricas de avaliação do modelo ExtraTreesClassifier. Fonte: o autor.
Figura 22 — Métricas de avaliação do modelo KNeighborsClassifier. Fonte: o autor.
Figura 23 — Métricas de avaliação do modelo GaussianNB. Fonte: o autor.
Figura 24 — Métricas de avaliação do modelo SVC. Fonte: o autor.
Figura 25 — Métricas de avaliação do modelo XGBClassifier. Fonte: o autor.
Figura 26 — Métricas de avaliação do modelo MLPClassifier. Fonte: o autor.

Conforme observado, todos os modelos foram criados sem nenhuma alteração nos hiperparâmetros, ou seja, utilizando os valores default. Esses parâmetros utilizados pelo modelo são responsáveis por determinar qual será a estratégia de resolução, limites, agrupamentos, cálculos, e outros aspectos do modelo. Assim, conforme dito anteriormente, é fundamental ter um profundo entendimento de como cada modelo funciona, a fim de saber quais hiperparâmetros necessitarão de ajustes, obtendo um modelo confiável.

Um exemplo de hiperparâmetro numa floresta de árvores de decisão é a profundidade da árvore. Ele determina o quanto essa árvore irá crescer, e limitar é essencial para evitar que o modelo fique demasiadamente específico (gerando overfitting). A Figura 27 abaixo traz de forma exemplificada o efeito da profundidade máxima.

Figura 27 — Exemplificação do efeito da profundidade máxima. Fonte: o autor.

Apesar de ainda não termos otimizados os hiperparâmetros, existem duas diretrizes já supracitadas que nos permitem escolher alguns modelos: a explicabilidade e o resultado das métricas de sucesso, especialmente o recall.

Retomando a provocação feita há alguns parágrafos, o erro mais crítico nesse tipo de problema é falso negativo, ou seja, o caso em que o modelo prevê que a pessoa irá ficar, mas na verdade ela sai. Assim, teremos como principal métrica de avaliação do modelo a revocação, pois é a métrica sensível aos falsos negativos. Quanto maior o recall, melhor o nosso modelo.

A métrica de precisão irá nos dizer a proporção de falsos positivos, ou seja, pessoas que ficam e o modelo prevê que irão sair. Apesar de soar como um “falso alarme”, esse tipo de erro não custa tão caro quanto o primeiro, além de ser passível de amenização observando a probabilidade de ocorrência de cada evento (exploraremos mais adiante).

Assim, seguiremos com 3 modelos com boa explicabilidade (e com possibilidade de atingir altos níveis de recall, de acordo com sua natureza) e 1 modelo com alta assertividade (e com uma certa complexidade envolvida), sendo eles a Regressão Logística, Floresta de Árvores de Decisão, Classificador Bayesiano e Redes Neurais.

Comparação Entre os Modelos Escolhidos

Tendo nossos modelos escolhidos para uma maior investigação, iremos agora avaliá-los de forma comparativa com todas as ferramentas definidas anteriormente. O snippet de código dessa etapa está representado abaixo, seguido do Gráficos 1, Gráfico 2 e Figura 28 que ilustram os resultados obtidos. Nota: é possível interagir com os gráficos gerados neste artigo.

Gráfico 1 — Métricas de sucesso dos modelos escolhidos. Fonte: o autor.
Gráfico 2 — Curvas ROC e AUC dos modelos escolhidos. Fonte: o autor.
Figura 28 — Matriz de confusão dos modelos escolhidos. Fonte: o autor.

Sobre cada um dos modelos, temos:

  • Regressão Logística: é utilizada para estimar a probabilidade associada à ocorrência de determinado evento em face de um conjunto de variáveis explanatórias, em que a variável dependente é de natureza binária. É uma técnica que fornece alto grau de confiabilidade, além de requerer um pequeno número de suposições, tornando-se uma escolha confortável para problemas de classificação [2]
  • Florestas de Árvore de Decisão: a estrutura de uma árvore consiste em, basicamente, três elementos: nós internos, que correspondem às verificações a serem feitas (testes) nos atributos; arestas, que representam o resultado dos testes feitos; as folhas (ou nós terminais), que contêm os rótulos a serem atribuídos a cada amostra. O processo de aprendizagem e aplicação de árvores de decisão são rápidos e simples, e apresentam (de modo geral) boa acurácia, além de serem modelos que conseguem trabalhar com dados de alta dimensão, ou seja, grande número de atributos [2]. Aqui vale ressaltar que, quando utilizamos florestas (técnica de ensemble), existem algumas complexidades/componentes adicionais a serem analisadas, como o número de estimadores, a aleatoriedade na escolha, entre outros
  • Classificador Bayesiano: esse algoritmo é capaz de prever a probabilidade de uma amostra pertencer a uma dada classe, baseando-se no Teorema de Bayes. Os classificadores do tipo Naïve Bayes supõem que o efeito que um atributo tem na determinação da classe da amostra é independente dos demais. Alguns estudos mostram que classificadores Bayesianos Ingênuos (Naïve Bayes) apresentam desempenho equivalente ao de árvores de decisão e de alguns tipos de redes neurais artificiais em alguns problemas [2]
  • Redes Neurais Artificiais (RNA): aqui, utilizaremos o Multilayer Perceptron (MLP). De forma geral, a utilização de RNA exige um maior cuidado com escolhas de atributos e hiperparâmetros, que podem resultar em resultados muito acurados ou muito longe da realidade. No caso do MLP, quando utilizado em problemas de classificação, é necessário ajustar a camada de saída de acordo com o problema em questão. No caso do turnover, uma saída binária (“fica” ou “sai”) pode ser ajustada pela utilização de uma função sigmoide no neurônio de saída [2]

Notamos que, entre todos os classificadores selecionados, o GaussianNB apresentou o maior valor para nossa métrica de sucesso (recall), enquanto que o LogisticRegression apresentou o maior F1-Score (balanço entre precisão e revocação). Porém, retomando a premissa da explicabilidade, iremos avançar com o ExtraTreesClassifier justamente pelo fato de ser um modelo com boa margem para otimização, hiperparâmetros de (relativamente) fácil entendimento e boa assertividade. Além disso, é possível obter as importâncias de cada um dos atributos nesse modelo, utilizando a propriedade feature_importance, que será melhor analisada daqui alguns parágrafos. A Figura 29 a seguir traz uma prévia de como ficam os resultados desse algoritmo com alguns hiperparâmetros ajustados.

Figura 29 — ExtraTreesClassifier com alguns hiperparâmetros otimizados. Fonte: o autor.

Notamos que ao mexer em alguns hiperparâmetros desse algoritmo já conseguimos um valor de recall bastante interessante.

Oversampling

Essa sessão visa lidar com o problema do desbalanceamento de classes. E já adiantamos que isso é um problema justamente pelo fato do classificador tender a ter melhores respostas para as classes majoritárias, em detrimento das minoritárias.

Fazendo um exercício mental, se tivermos uma base com 100 pessoas em uma empresa, sendo que 97 delas ficaram apenas 3 saíram, é extremamente mais confortável para um classificador entender que todas as pessoas ficaram (e ter uma acurácia impressionante de 97%) do que se esforçar para identificar as 3 saídas (que são encaradas como anomalias, ou outliers). Outras duas classes de casos que enfrentam um problema similar é a detecção de fraude e identificação de doenças.

Assim, quando lidamos com uma base desbalanceada, existem três possíveis caminhos: coletar mais dados (nem sempre é possível); alterar a métrica de avaliação; balancear a base de dados (foco desse tópico).

A primeira estratégia utilizada será o balanceamento da classe por meio do hiperparâmetro class_weight, que está disponível no algoritmo escolhido (ExtraTreesClassifier). Por meio dele, será capaz de informar ao modelo que existe um desbalanceamento das classes, fazendo com que as classes minoritárias não sejam encaradas como outliers.

Uma segunda possível estratégia (que não será implementada) é o undersampling, que consiste na redução dos dados da classe majoritária por meio de técnicas de agrupamento, em que grupos de amostras são substituídos por centroides de grupos calculados pelo algoritmo K-means. Um dos problemas dessa técnica é a possível perda de informação, podendo ser um problema em bases com baixo volume de dados.

A terceira estratégia, que será utilizada juntamente com a primeira, é o oversampling, em que dados da classe minoritária são replicados por meio de alguma técnica como a SMOTE (Synthetic Minority Over-sampling Technique), que consiste em gerar novos exemplos da classe minoritária através de interpolação entre os pontos mais próximos.

O snippet de código a seguir traz o passos de criação do oversampling.

O Gráfico 3 e a Figura 30 ilustram os resultados obtidos.

Gráfico 3 — Métricas de sucesso dos modelos escolhidos com oversampling. Fonte: o autor.
Figura 30 — Matriz de confusão dos modelos escolhidos. Fonte: o autor.

Nota-se que o oversampling teve um impacto significativo no MLPClassifier e LogisticRegression, porém os ganhos para o ExtraTreesClassifier e GaussianNB não foram tão interessantes (lembrando que todos os classificadores estão sem nenhuma otimização de hiperparâmetros). Recomendação de expansão do estudo: testar outras técnicas de oversampling, além de testar o undersampling.

Feature Importance

Feature Importance refere-se a técnica que calcula uma pontuação para todas as features de entrada de um determinado modelo — as pontuações simplesmente representam a “importância” de cada atributo. Uma pontuação mais alta significa que o atributo específico terá um efeito maior no modelo que está sendo usado para prever uma determinada variável.

Existem três grandes vantagens na utilização dessa ferramenta:

  • Compreensão dos dados: acima de qualquer coisa, é fundamental entendermos o modelo que está sendo aplicado e saber interpretar seus resultados (buscamos sempre mitigar o efeito caixa-preta). Assim, entender a relação entre as features e a variável alvo é importante para saber quais alavancas impactam diretamente no resultado observado, assim como quais são irrelevantes para o problema
  • Melhoria do modelo: é possível utilizar as importâncias dos atributos na etapa de feature selection, mantendo os atributos com alta relevância e eliminando os que não impactam no resultado final (redução de dimensionalidade), tornando o modelo mais simples, otimizado e, em muitas vezes, mais assertivo
  • Interpretabilidade do modelo: aqui temos uma importante função da utilização de feature importance, que é justamente um ponto trazido anteriormente. Informar quais são as principais características que estão impulsionando uma predição é essencial para tangibilizar os resultados e impulsionar a criação de planos de ação para lidar com o problema

O snippet de código a seguir traz a função de plotagem das importâncias dos atributos, bem como sua aplicação a alguns modelos que possuem esse atributo.

Os Gráficos 4 a 6 trazem os resultados dessa etapa.

Gráfico 4 — Feature importance para o modelo ExtraTreesClassifier. Fonte: o autor.
Gráfico 5 — Feature importance para o modelo RandomForrestClassifier. Fonte: o autor.
Gráfico 6 — Feature importance para o modelo XGBClassifier. Fonte: o autor.

Com isso, o nosso modelo escolhido (ExtraTreesClassifier) vem acompanhado da um importante artefato para explicar seus resultados. Vale ressaltar que iremos observar a importância das features novamente com o modelo otimizado, pois elas podem mudar (spoiler: elas mudam).

Conclusão

Quando se fala em People Analytics, é comum encontrar o termo análise preditiva associado. E, de fato, é uma grande vantagem estratégica ter dados estatísticos sobre o que pode acontecer e poder se preparar para isso. Entretanto, é necessário sempre utilizar algoritmos de previsão com parcimônia. Falta de conhecimento do problema de negócio, base de dados não tratada e pouco entendimento dos modelos utilizados podem resultar em conclusões fora da realidade, além de reproduzirem vieses e sugerirem padrões indesejados [2].

Após passarmos por uma extensa e completa análise descritiva (básica e intermediária), foi possível construir aqui modelos preditivos para dizer quais pessoas irão sair na nossa base de dados. Mas o trabalho não termina aqui: seguiremos agora para a análise expert, onde faremos a otimização dos hiperparâmetros do nosso modelo escolhido, engenharia e seleção de atributos, e conclusão do projeto.

O código completo do projeto está disponível aqui.

Caso você já tenha lido este artigo, fique à vontade para conferir as outras partes: análise básica, análise intermediária e análise expert.

--

--