Machine Learning sem código

Usando Orange Data Mining para criar um modelo preditivo sem usar uma linha de código!

Bruno Batista
Ensina.AI
14 min readJul 10, 2019

--

O Orange, os dados e seus amiguinhos(widgets)!

Orange Data Mining é uma ferramenta open source que permite criar todo fluxo de trabalho de um projeto de data mining, sem necessidade de código. Ideal para quem quer praticar machine learning mas não pretende aprender a codificar ou para iniciantes que pretendem aplicar alguns conceitos, bem como para experts no assunto.

O Orange Data Mining possui uma interface drag and drop. Similar a algumas ferramentas como SPSS Modeler e Azure ML da IBM e Microsoft, respectivamente. Particularmente me parece que os tutoriais sobre o Orange são muito mais escassos e essa ferramenta embora muito boa, ainda é pouco conhecida. Em geral, não vemos muitos tutoriais de ferramentas mais acessíveis para praticar machine learning e com a popularização da mineração de dados tudo indica que a demanda por esse tipo de ferramenta tende a crescer mais e mais.

Não tenho a intenção de dizer que R e Python não são bons para o uso em mineração de dados. Na verdade ao meu ver são as ferramentas ideais para essa finalidade, por darem grande poder de processamento e customização para o usuário, mas como é de se esperar exige muito mais dedicação. Inclusive é possível usar scripts Python no próprio Orange.

A ideia desse artigo, é mostrar que ML não é um bicho de sete cabeças e muito menos é necessário ser um gênio da informática ou da matemática para aplicar essas técnicas.

Na verdade, com algum conhecimento das principais técnicas e conceitos e um pouco de curiosidade, arrisco dizer que qualquer pessoa pode realizar uma análise realmente poderosa usando machine learning.

Vamos em frente e conhecer um pouco mais dessa grande ferramenta que pode ser útil até para aqueles que preferem usar código para suas análises(como é o meu caso..rsrs).

Conhecendo o Orange

Interface do Orange

Essa é a interface do Orange. A esquerda temos 5 abas e cada uma agrupa uma gama de funcionalidades e técnicas de mineração de dados. Vamos dar uma rápida olhada:

  • Data: Cada ícone(ou widget) representa uma ferramenta ou técnica para ser utilizado no processo de carga e preparo dos dados. É possível desde incluir dados ausentes, criar features, discretizar variáveis contínuas entre tantas outras técnicas comumente aplicadas;
  • Visualize: Como o nome sugere, trata-se do grupo de ferramentas para visualização de dados. É possível fazer gráficos de dispersão, box-plots, gráficos de linha e etc.
  • Model: Essa aba contém os principais modelos que podemos utilizar em data mining. Todos eles são modelos supervisionados. Temos desde os modelos mais simples, como a Regressão Linear, até modelos mais complexos, como Redes Neurais;
  • Evaluate: Aqui podemos contar com as técnicas para avaliar o desempenho dos modelos criados. Matriz de confusão, análise AUC e validação cruzada estão disponíveis aqui;
  • Unsupervised: Por fim, temos os modelos de aprendizado não supervisionado como K-means e alguns algoritmos comumente utilizados para transformação dos dados, como por exemplo a PCA.

Conhecendo o projeto

Agora que temos uma visão geral das ferramentas disponíveis dentro do Orange, podemos começar o nosso projeto.

O conjunto de dados que será utilizado, simula as características de clientes que pediram empréstimo para um banco e tiveram ou não a solicitação aprovada. Nossa missão é criar um modelo preditivo que determine quando um empréstimo deve ser concedido ou não.

De acordo com o site essa é a descrição das variáveis que compõem o conjunto de dados:

Variáveis do conjunto de dados

Como temos a variável resposta(empréstimo concedido: S ou N), estamos lidando com um problema de classificação binária, logo, teremos que usar os algoritmos que se enquadram na categoria de aprendizado supervisionado.

A seguir, vamos passar pelas principais etapas de um projeto de mineração de dados e ver como o Orange pode nos ajudar em cada uma delas.

Carregando os dados

Para carregar um conjunto de dados no Orange é muito simples. Basta clicar no widget “File” e selecionar o conjunto de dados na pasta onde ele está salvo. Simples como abrir um arquivo no Excel.

Além disso, como de praxe em ferramentas como Power Bi e Tableau, já temos uma visão geral dos dados e os tipos de features do dataset. Temos 612 linhas, 11 features(colunas) e cerca de 2% de dados ausentes.

Aqui é possível classificar cada uma das variáveis do conjunto de dados como numérica ou categórica, bem como determinar qual é a nossa variável alvo. Também podemos selecionar quais colunas queremos importar, no caso, não queremos usar a coluna Loan_Id e a nossa variável alvo é Loan_Status.

Após importar os dados, podemos visualizá-los de forma tabular. Isso também é muito simples. Basta clicar no ícone “Data Table”, e em seguida conectá-lo com “File”, então, clicamos duas vezes em “Data Table” e pronto:

Ao clicar em qualquer um dos widgets nas abas da esquerda, uma cópia surge no work space
Nosso conjunto de dados

Análise Exploratória

Dados carregados, agora podemos conhecê-los um pouco melhor. Um ótimo começo é avaliar algumas estatísticas básicas das colunas do conjunto de dados. Podemos fazer isso usando “Feature Statistics”:

Clicando duas vezes no ícone temos:

Similar a função describe() do Pandas.

Podemos ver a média, valor máximo e mínimo de cada variável numérica, além da moda das variáveis categóricas. Também podemos ver o percentual de valores nulos em cada variável.

Outra ótima opção disponível nessa ferramenta, é que podemos visualizar a distribuição dos dados agrupada pela variável alvo(ou por qualquer outra que você prefira). Com isso, conseguimos descobrir que pessoas com histórico de crédito tem uma chance muito maior de ter o empréstimo aprovado do que pessoas sem histórico. Vejam:

Azul: empréstimo negado / vermelho: empréstimo concedido

Também descobrimos que o valor médio do empréstimo é de $146 mil e o valor médio de renda dos solicitantes é de $5412. A maior parte dos solicitantes são casados, não tem dependentes e possuem graduação.

Visualizando os dados

Tá legal, eu admito. Os gráficos acima não estão tão convidativos. Sabemos que usar gráficos durante no processo de exploração dos dados é uma poderosa técnica que permite encontrar padrões importantes e entender melhor as relações nos dados. O ideal é que essas visualizações sejam claras e informativas.

Mais uma vez, só precisamos selecionar o ícone do gráfico desejado na aba “Visualize”, conectar aos nossos dados e clicar duas vezes no ícone.

Vamos começar usando um box-plot para ver a distribuição da variável ApplicantIncome.

Box-plot da renda do solicitante do empréstimo.

Agora podemos ver com clareza as principais medidas de distribuição dos dados. A renda média é de $5412 enquanto que a mediana é de $3813, indicando que essa variável tem uma distribuição com uma longa calda para a direita.

A média possivelmente está sendo distorcida pela presença de outliers, no caso, temos um solicitante com renda de mais de $80 mil.

Também podemos plotar gráficos agrupados por variáveis categóricas. Por exemplo, podemos ver a distribuição do valor do empréstimo entre homens e mulheres:

Distribuição do valor do empréstimo entre homens e mulheres.

Com base neste gráfico, podemos ver que homens geralmente pedem empréstimos com valores mais altos. O valor mediano do empréstimo para os homens é de 130 mil, enquanto que para as mulheres é de $113mil.

A seguir vamos explorar as distribuições dos dados numéricos usando o widget “Distribuitions”:

Gráfico de densidade do valor de empréstimo solicitado.

Mais uma vez, podemos fazer agrupamentos pelas variáveis categóricas. E conforme vemos abaixo, parece que a variável Property_Area influencia na decisão da concessão do empréstimo. De todos empréstimos concedidos, 42% são de clientes cujo valor de Property_Area era Semiurban. Já dos que não conseguiram, 70% eram das áreas Rural ou Urban.

Frequência relativa do status de empréstimos de acordo com a área da propriedade

Outra maneira de explorar os dados visualmente é usando gráficos de dispersão. Esses gráficos nos permitem entender relações entre variáveis numéricas contínuas. No gráfico abaixo, vemos que há uma correlação positiva entre o valor da renda do solicitante do empréstimo e o valor solicitado. Sugerindo que pessoas com maior valor de renda, pedem empréstimos maiores.

Relação entre renda e valor do empréstimo.

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 !

--

--

Bruno Batista
Ensina.AI

A brazilian guy trying to become a data scientist. Tech lover, self learner and a nerd by nature, i want to share my work and my craziest thoughts here !