Regressão Linear com Keras

O inverno está chegando. Você é o responsável pelo setor de compras de uma grande empresa de roupas e a sua tarefa é maximizar os lucros, ou seja, comprar a maior quantidade necessária de casacos pelo melhor preço. A única informação confiável que você tem é de que a temperatura média da estação está ligada diretamente ao número de casacos vendidos. E agora?

Prever ou ao menos, estimar o futuro com boa qualidade certamente é uma grande vantagem. Em alguns casos a regressão linear pode ser a solução. Com a crescente popularidade do deep learning vamos modelar a nossa solução usando o Keras. Caso você tenha dúvidas sobre o que é Machine Learning ou Deep Learning, recomendo esse post no blog da Nvidia e caso queira uma visão mais ampla sobre o que é o Keras você pode encontrar neste link .

Idealmente antes de implementarmos uma regressão linear podemos fazer uso da técnica chamada coeficiente de correlação de Pearson, com ela é possível verificar se existe relação entre duas variáveis independentes.

Não tenha medo, é mais simples do que parece.

Entretanto, visualizar os dados em um gráfico pode dar uma boa ideia se é possível fazer uma regressão linear ou não.

Basicamente a regressão linear visa traçar uma reta que passe mais próximo possível de todos os pontos, e para isso usamos a seguinte equação Y=w+bX.

Onde “w” é a interceptação, isto é, o ponto Y correspondente a X=0 e “b” a inclinação da reta. Por exemplo, na equação (Y=1.5+2X) temos que, para cada aumento de uma unidade em X, há um aumento de duas unidades em Y.

Para encontrarmos essa inclinação vamos fazer uso do perceptron . A ilustração abaixo dá uma boa ideia de como um perceptron funciona. Caso queira mergulhar em uma explicação mais complexa sobre seu funcionamento, recomendo este excelente artigo sobre o tema.

Pronto, já temos uma boa ideia da teoria. Vamos dar uma olhada em nosso dataset:

Média de Temperatura x Casacos Vendidos

Agora vamos plotar o nosso gráfico e observar o comportamento dos dados:

Aparentemente temos uma forte relação entre as variáveis. É a hora da regressão.

A linha laranja indica o valor de nosso modelo antes do treinamento e a linha vermelha o valor após o treinamento

Nada mal! Com a regressão feita é possível estimar quantos casacos serão vendidos no próximo inverno se soubermos a temperatura média da próxima estação. Por exemplo, caso a temperatura média prevista para o próximo inverno seja de -8 graus, podemos estimar a compra de 2319 casacos com certa dose de segurança .

next_winter = np.array([-8])
print(model.predict(next_winter))

Muito bem, tudo muito legal até agora, mas como fazemos isso?

No próximo exemplo, vamos trabalhar com dados reais. Esse exemplo nasceu de um programa de rádio que ouvi por acidente, nele um dos especialistas afirmava que a quantidade de carros 0 km vendidos por ano é diretamente ligado ao PIB do país, vamos verificar.

Trabalhar com dados reais é bem mais complexo do que trabalhar com dados de documentações das bibliotecas ou da maioria dos tutorias que encontramos por aí. A primeira tarefa é organizar os dados. Existem técnicas de normalização e serialização que não vou abordar com profundidade nesse post(este tema merece um post exclusivo). Tenha em mente que tão importante quanto o algoritmo é a preparação dos dados.

O dataset do PIB(em inglês a sigla é GDP)foi obtido no site do worldbank e o dataset da venda de carros 0km foi obtido no Portal Brasileiro de dados abertos. Vamos dar uma olhada preliminar em nossos dados.

Nosso dataset visto por dentro

Primeiro importamos as bibliotecas que vamos utilizar, depois fazemos a leitura dos arquivos e imprimimos o mesmo. Como é possível verificar, temos dois grandes problemas aqui. O primeiro é o tamanho dos nossos arrays. Os dados do PIB vão de 1960 até 2016 e os dados de carros vendidos vão de 1990 até 2017. O segundo problema são os valores, eles são números muito grandes, certamente se colocarmos eles em nosso modelo sem nenhum tratamento o desempenho do nosso algoritmo vai ser muito ruim. Vamos dar um jeito nisso.

Para resolvermos o primeiro problema precisamos apenas organizar o tamanho dos nossos arrays.

Para o segundo problema, usamos a biblioteca humanize para facilitar a leitura do maior valor contido nos arrays e após isso vamos transformar os valores dos arrays em função da maior unidade encontrada em cada um deles.

Dados limpos! Vamos visualizar o que temos em mãos.

Promissor! Vamos agora ver a distribuição dos dados relacionando a venda de carros 0km ao PIB.

Visualmente podemos afirmar que os dados possuem uma boa correlação, então vamos usar o Keras para construir o nosso modelo para a regressão linear.

Modelo de Regressão linear com Keras

Após isso, vamos plotar nosso gráfico com a regressão linear.

Como podemos verificar o número de vendas de carros tem uma boa correlação com o PIB, entretanto, outras variáveis certamente influenciam no montante final. Geralmente, em problemas complexos, temos que avaliar várias variáveis se quisermos a melhor regressão possível.

Com uma boa quantidade de dados podemos modelar soluções que antecipem os acontecimentos. Por exemplo, podemos detectar evasão de alunos de um curso baseado no histórico das turmas anteriores ou avaliar com boa dose de certeza quando é a melhor hora para comprar/vender uma determinada ação ou cripto moeda.

Nos próximos posts, vou abordar a regressão com várias variáveis e também demonstrar como usar aprendizado não supervisionado para encontrar padrões em uma determinada área de domínio.

Todo o código deste post está disponível em meu github. Bons Estudos!

View at Medium.com