Executando verificação de segurança...
2

Machine Learning sem código (parte 2)

Preparação dos dados

Agora que exploramos nossos dados e encontramos relações interessantes, podemos começar a testar alguns algoritmos de Machine Learning para completar a nossa tarefa de predizer quando o empréstimo deve ser concedido ou não. Mas para isso, precisamos preparar os dados.

Nessa etapa vamos tratar valores ausentes, criar variáveis dummy para dados categóricos e normalizar as variáveis numéricas.

Podemos fazer isso tudo de uma única vez criando um pipeline de pre-processamento dos dados. Basta usarmos o widget “Preprocessing”. Essa ferramenta nos permite selecionar as transformações que serão aplicadas nos dados e em qual ordem.

Criando um pipeline de transformação dos dados.

Para cada tratamento ou transformação, a ferramenta permite escolher entre várias abordagens. No nosso caso o nosso pipeline fará as seguintes modificações:

  1. Imputar os valores de dados ausentes usando a média para dados numéricos e a moda para variáveis categóricas;
  2. Normaliza os dados usando a mediana para centralizá-los. Como vimos, o conjunto de dados possui alguns outliers e por isso, escolhemos centralizar os dados com base na mediana, que não é afetada por valores extremos.
  3. Por fim, transformamos as variáveis categóricas em variáveis dummies. Ou seja, variáveis binárias. Para cada valor de cada uma das variáveis categóricas, uma coluna é criada contendo valores apenas de 0 e 1. Um indica que a observação em questão possui o valor da variável. Olhando o conjunto de dados fica mais claro:

Dados transformados.

A linha em destaque indica que o cliente é do sexo masculino (coluna Gender=Male com valor 1). Para ficar mais claro, pense nisso como uma pergunta: O cliente do pedido 611 é do sexo masculino ? SIM(True, ou 1).

Parece que temos o conjunto de dados pronto para alimentar um algoritmo, mas ainda não. No exemplo acima, vimos que temos uma coluna para indicar se o cliente é do sexo masculino e outra para indicar se o cliente é do sexo feminino. Na verdade, só precisamos saber se o cliente é de um dos dois sexos, pois obviamente não será do outro. Portanto, podemos excluir uma das duas colunas(Gender=Male ou Gender=Female). O mesmo acontece para as variáveis Married, Credit_History, Education e Self_employed.

Vamos fazer isso usando o widget “Select Columns”:

A esquerda as variáveis que removemos do conjunto de dados e a direita, as que serão mantidas.

Agora sim nossos dados estão prontos para um algoritmo de ML. Então vamos para a etapa de modelagem.

Testando e avaliando alguns modelos

Para começar escolheremos um algoritmo amplamente utilizado em mineração de dados: a Árvore de Decisão. A lógica por trás desse algoritmo é extremamente simples o que de maneira alguma torna o algoritmo menos poderoso.

A ideia central é encontrar características no conjunto de dados que sejam discriminantes em relação a variável alvo. O modelo está sempre buscando grupos de dados agrupados com base em características que garantam o maior ganho de informação e pureza nos dados. Quando falamos em ganho de informação, isso significa literalmente encontrar características que nos deem informações para determinar se o empréstimo foi concedido.

Por exemplo, já percebemos que a variável Credit_History é informativa sobre a concessão do empréstimo ou não, pois a maioria dos empréstimos é concedido para quem tem histórico de crédito com o banco. Logo, essa característica nos dá uma informação importante sobre a concessão de empréstimos.

Para aplicar um algoritmo só precisamos escolher um deles na aba “Model” e conectar aos dados preparados:

Aplicando o algoritmo no conjunto de dados

Após aplicar o algoritmo, podemos ver a árvore de decisões que foi criada usando o widget “Tree Viewer”:

E aí está a nossa árvore de decisão, entendê-la também é muito simples. A árvore começa com a feature Credit_History, apenas confirmando nossa análise de que essa informação é muito importante para a concessão do crédito.

Seguindo as ramificações para a direita, vemos que ter uma propriedade semi-urbana também tem um alto impacto na variável alvo, em seguida percebemos que ter um Coapplicant com renda maior que 150 e um valor de empréstimo inferior a 7101 aumenta as chances de concessão do crédito.

Portanto, a lógica para concessão do empréstimo ficaria mais ou menos assim:

Cliente com histórico de crédito no banco → propriedade semi-urbana → coapplicant (co-solicitante) com renda superior a 150 → valor de empréstimo inferior a 7100 → Conceder empréstimo.

Para quantificar o quão bom é o nosso modelo podemos utilizar algumas métricas de avaliação, vamos começar com Acurácia. A acurácia é uma das métricas mais utilizadas para avaliação do desempenho de modelos de classificação, embora nem sempre seja a métrica mais recomendada.

Vamos ver o desempenho do nosso modelo usando o widget “Test & Score”. Esse widget, recebe como entrada os dados pre-processados e o modelo treinado. Então é aplicada a técnica de validação cruzada para avaliar o desempenho do modelo em vários conjuntos de dados diferentes.

Isso é feito dividindo o conjunto de testes em N grupos distintos, no nosso caso 5. Então o modelo é treinado em quatro grupos e é validade no quinto. Esse processo é repetido até que o modelo tenha sido validado em cada um dos agrupamentos.

Então, calcula-se a média de cada uma das métricas de avaliação com base no desempenho de cada validação.

Avaliando o modelo usando validação cruzada.

Acurácia média do modelo(CA) foi de 78%. Isso quer dizer que, de 10 previsões, o modelo acerta praticamente 8. Nada mal para começar !

Desempenho do modelo de árvore de decisão

Uma outra maneira de avaliar o desempenho do nosso classificador é observar a matriz de confusão. O nome pode assustar um pouco, mas na prática é bem intuitivo. A matriz de confusão pode ser criada com o widget “Confusion Matrix”:

Matriz de confusão

Vamos entender:

As linhas indicam os valores reais da nossa variável alvo, e as colunas indicam as previsões do nosso modelo. Se olharmos a primeira coluna vamos perceber que quando o modelo previu que o empréstimo não seria concedido acertou 85 vezes e errou 24 , totalizando 109 previsões negativas.

Já na segunda coluna vemos que o modelo previu que o empréstimo seria concedido 503 vezes e desse total, ele previu corretamente em 396 dos casos. Essa análise nos ajuda a entender onde o modelo está errando e nos dá insights sobre como ajustar nosso classificador.

O Orange ainda nos permite ainda comparar o desempenho de vários modelos diferentes.

Comparando modelos

Vamos usar um algoritmo mais poderoso: Floresta Aleatória.

Esse algoritmo se enquadra na categoria de classificadores que utilizam métodos de ensemble learning. De forma simples: algoritmos que empregam este método se baseiam nas previsões de vários outros classificadores para gerar uma classificação mais precisa.

Cada modelo vota em uma classe e a classe com mais votos é utilizada na previsão.

Como sempre, ver sempre facilita as coisas:

Método ensemble fonte: Hands-on Machine Learning with Scikt Learn and Tensor Flow

No caso da Floresta Aleatória, são criados vários modelos de Árvores de Decisão, daí o nome do algoritmo.

Vamos aplicar este modelo aos nossos dados e comparar com os resultados da árvore de decisão. O procedimento é exatamente igual à aplicação da árvore de decisão.

Resultados árvore de decisão Vs floresta aleatória

Realmente a Floresta Aleatória tem um desempenho muito superior. A acurácia saltou de 78 para 80%.

Para ficar mais claro, podemos ainda visualizar as previsões de cada um dos modelos para cada uma das instâncias(linhas) do nosso conjunto de dados. Como de costume, é só clicar, conectar e clicar duas vezes. O widget da vez é o “Predictions”.

Aqui, usamos os dados e cada um dos modelos como entrada:

Conhecendo as previsões de cada um dos modelos

Agora clicando duas vezes no ícone “Predictions”, temos a seguinte tabela:

As previsões de cada um dos modelos

Além de nos mostrar a previsão de cada um dos modelos, esse widget também nos mostra a probabilidade atribuída a cada uma das classes.

Por exemplo, na linha número 12, ambos classificadores previram que o empréstimo seria concedido e ambos acertaram. Repare que a Floresta Aleatória tinha uma confiança muito maior em sua previsão (85% de probabilidade de conceder o empréstimo, contra 75% da árvore de decisão).

Também podemos ver onde os classificadores erraram, na imagem acima, a linha 19.

Conclusão e informações adicionais

Neste artigo nós passamos por praticamente todo o fluxo de trabalho de um projeto de mineração de dados. Lembrando:

  1. Carregamos e visualizamos nosso dados em formato tabular;
  2. Exploramos os dados visualmente usando box-plots, gráficos de frequência e dispersão;
  3. Criamos um pipeline para limpar e transformar os dados para que ficassem prontos para o algoritmo ;
  4. Treinamos não apenas um, mas dois algoritmos de aprendizado de máquina supervisionado em nosso conjunto de dados;
  5. Avaliamos e comparamos o desempenho de cada um dos modelos;
  6. Visualizamos as previsões de algumas instâncias específicas bem como a probabilidade atribuída para cada classe.

Tudo isso foi feito de maneira simples e intuitiva utilizando o Orange uma ferramenta que facilita muito o processo de trabalho de mineração de dados. Vale ressaltar que a ideia aqui não é convencer ninguém a abandonar as linguagens de programação, mas sim apresentar mais uma opção para ter no seu arsenal de cientista de dados, o Orange pode ser utilizado para a extração de insights rápidos de forma prática, para testar novos métodos ou até mesmo como uma porta de entrada para o fascinante mundo do aprendizado de máquina.

Espero que tenha conseguido demonstrar pelo menos um pouco das técnicas de análises avançadas de dados que o Orange oferece e que a partir daqui você seja capaz de desbravar todas elas por si só e aprender cada vez mais sobre essa maravilhosa ferramenta.

Aqui vão alguns links para você continuar explorando seus dados usando Orange:

Para os leitores que querem entender mais a fundo alguns termos e técnicas abordadas, seguem alguns links interessantes:

Bom acho que é isso, espero que tenham gostado e qualquer dúvida comentário ou observação é mais do que bem vinda ! Não deixe de se manifestar, vamos aprender juntos !

Muito obrigado a todos e #keeplearning !

Carregando publicação patrocinada...
2

Muito bom o artigo ghostnetrn!!

Gostei muito como você abordou essa tema.

Somente tenho duas preocupações, que eu tinha mencionado no artigo anterior, para os que estão entrando na área:

  • Raras vezes a gente usa somente uma estratégia para colocar dados faltantes e colocar variáveis categóricas como dummies.
  • O dataset não é dividido em três para uma validação robusta do modelo.

O restante realmente tá muito bem explicado, obrigado pelo artigo!