Alura > Cursos de Data Science > Cursos de Machine Learning > Conteúdos de Machine Learning > Primeiras aulas do curso Deep Learning: previsão com Keras

Deep Learning: previsão com Keras

Pré-processamento - Introdução

Olá! Seja muito bem-vindo ao curso Deep Learning: Previsão com Keras da Alura, que é sobre séries temporais. Meu nome é Alan e serei seu instrutor nesse curso onde nós vamos ver como trabalhar com as séries temporais para fazer previsões do futuro.

Nós vamos começar trabalhando com essa base de dados de números de passageiros aéreos onde vamos querer prever o número de passageiros aéreos no futuro.

Veremos formas adequadas de dividir e trabalhar com essa base de dados, vamos aprender a construir uma rede neural com o que keras, trabalhando passo a passo, construindo primeiro uma regressão linear e refinando até conseguir fazer previsões melhores do que uma simples regressão linear.

Assim nós também vamos ver como que devemos passar os dados de forma adequada, de forma que o keras consiga perceber todas essas nuances presentes nos dados, e tudo isso através de um problema de regressão.

Nós não vamos trabalhar somente com a regressão - com a regressão nós já vamos conseguir um resultado bastante satisfatório - também trabalharemos com uma base de dados mais complexa onde nós utilizaremos as redes neurais recorrentes. Nelas, vamos escolher as lSTM’s, e com as lSTM’s faremos previsões bastante complexas, conseguindo prever efetivamente o futuro. Também vamos avaliar outro tipo de rede de corrente que são as GRU.

Por fim, vamos avaliar a qualidade dos resultados obtidos tanto com as lSTM’s, quanto com as GRU. É isso, eu espero ver você nos próximos vídeos do curso.

Pré-processamento - Entendendo a base de dados

Nesse curso a nossa empresa de Data Science está prestando serviço para empresas que querem fazer um planejamento futuro, para fazer isso nós vamos começar trabalhando com uma base de dados de passageiros aéreos, queremos prever o número de passageiros aéreos no futuro.

Eu vou carregar essa base de dados no Google colab que fica no lado esquerdo na aba “Files”, assim eu consigo fazer o upload do arquivo “passageiros.csv”. Feito o carregamento desse arquivo, eu posso ler ele usando a biblioteca pandas e eu vou colocar o resultado da leitura numa variável de nome passageiros então, passageiros = pd.read_csv(‘Passageiros.csv’).

Para conseguir ler o arquivo, eu preciso rodar esse comando e importar a biblioteca pandas então, import pandas as pd, “Shift + Enter” para importar biblioteca, e “Shift + Enter” para rodar o comando.

Agora eu quero visualizar as primeiras linhas do arquivo, então, passageiros.head(). Agora sim, “Shift + Enter”, e eu tenho as primeiras linhas do arquivo, tenho na tabela criada, o tempo na primeira coluna e na segunda coluna o número de passageiros o número de passageiros variando no decorrer do tempo, quer dizer nós temos um exemplo de série temporal mostrado na tabela, outro detalhe é que na coluna do tempo tem o ano ponto vários números o que são esses números.

Se olhar aqui em detalhe eu vejo que esse ponto e vários números é uma representação dos meses: .000000 é o mês de janeiro; .083333 é o mês de fevereiro. Estou somando 0.083333 a cada mês, isso porque 1 dividido por 12 - os 12 meses do ano- é igual a 0.083333

Sabendo disso podemos tentar visualizar essa série temporal, então eu vou visualizar essa série temporal com a lineplot um plot linear da biblioteca seaborn então vou digitar na linha de código sns.lineplot(x=’tempo’,y=’passageiros’,data=passageiros,label=’dado_completo’). Entre parênteses eu vou colocar as informações. O X eu quero que tenha a coluna de tempo, então ‘tempo’,y=passageiros’. Eu quero no eixo Y o número de passageiros, e agora eu vou passar os dados que tem essas informações que édata=passageiros`

Eu posso colocar também um label, uma legenda, que vai ser dado completo, não estou visualizando mais só 5 valor, estou visualizando dados completos.

Então tenho que importar a biblioteca seaborn e escrevo outra linha de código import seaborn as sns, “Shift + Enter”, importei a seaborn e vou gerar o gráfico com “Shift + Enter”, gerei o gráfico, tenho a minha série temporal, mas a figura ficou um pouco pequena.

Então quero aumentar ela, e eu também quero aumentar todas as figuras no decorrer do curso, para que eu não tenha que ficar repetindo isso daqui, então eu vou importar da biblioteca matplotlib então import matplotlib as mpl assim, eu vou passar o mpl, para o mpl eu vou passar uns parâmetros, mpl.rcParams[‘figure.figsize’] = (10, 6), então “Shift + Enter”, agora eu tenho os parâmetros dos tamanhos das figuras, então se eu der “Shift + Enter”, eu vou ter uma figura bem maior.

[05:08] Também quero aumentar o tamanho das letras, o tamanho da fonte do gráfico, além disso, eu tenho que passar o tamanho da fonte na linha de código que estávamos escrevendo, então vou fazer o mpl.rcParams[‘font.size’] = 22, então “Shift + Enter” e “Shift + Enter”, agora temos uma fonte bem maior, que vai ser usada para todas as figuras daqui para frente.

Então, esse gráfico é um exemplo clássico de série temporal com tendência, temos uma tendência quase que linear no gráfico de crescimento dos passageiros, com detalhe que temos uma sazonalidade dos dados, quer dizer o número de passageiros cresce durante alguns meses e diminui durante alguns outros meses, o número pode aumentar, por exemplo, durante as férias.

E com esse gráfico, temos que pensar agora como que vamos fazer uma previsão para o futuro, como vamos prever o número de passageiros para os anos seguintes, e passar essas informações para uma rede neural.

Pré-processamento - Pré-processamento

Uma boa prática que nós podemos seguir quando trabalhamos com redes neurais, é escalar os dados. A nossa rede neural vai aprender a receber uma data e prever o número de passageiros, com base em datas passadas. Nós vamos passar uma série de exemplos para rede neural de datas passadas e números de passageiros, para que a rede entenda, desta forma, quando passarmos uma data, ela vai retornar esse número de passageiros.

É bem mais fácil para rede neural aprender a fazer isso se os dados, as datas e o número de passageiros estiverem, mais ou menos, numa mesma escala. Se os dois estiverem razoavelmente próximos de zero, fica mais fácil para a rede neural aprender a fazer esse processo.

No código, nós temos que escalar os dados, e eu vou fazer isso daí com algo chamado de StandardScaler então eu vou criar uma linha de código, sc = StandardScaler(), esse StandardScaler vem da biblioteca sklearn, então from sklearn.preprocessing import StandardScaler ”Shift + Enter”, e ”Shift + Enter”, feito isso temos que fazer um ajuste nos dados para que o StandardScaler entenda como nossos dados estão dispostos.

Então vou fazer um sc.fit(passageiros) e “Shift + Enter” agora que eu fiz esse ajuste aos dados, eu consigo escalar efetivamente os dados. Então vou criar, dado_escalado = sc.transform(passageiros). Então, ”Shift + Enter”, temos nossos dados escalados. Esses dados escalados eu ainda vou dividir em x e y. O x vai entrar na rede neural e o y é o que queremos que saia da rede neural, o número de passageiros. E é comum quando trabalhamos com redes neurais chamar de x a entrada e o y a saída.

Então aqui eu vou criar o x = dado_escalado[:,0] e eu vou também criar o y, então, y = dado_escalado[:,1]. Passei a coluna 0 e a coluna 1 dos dados, então ”Shift + Enter”, temos o x e y, e agora eu quero gerar o gráfico. Para gerar o gráfico eu consigo fazer com a biblioteca seaborn. Novamente, eu faço sns.lineplot(x=x,y=y,label=‘dado_escalado’), então, se eu der ”Shift + Enter” eu tenho meu dado no gráfico escalado. O gráfico já está em um tamanho adequado.

Vou importar a bibliotecamatplotlib também, com import matplotlib.pyplot as plt, ”Shift + Enter”, porque eu quero adicionar o que é o eixo Y, e o que é o eixo x. Então plt.ylabel(‘Passageiros’) e plt.xlabel(‘Data’), ”Shift + Enter”. Agora sim, temos no gráfico a data e o número de passageiros só que repare que as escalas agora estão diferentes, data está entre -1.5 e 1.5 e o número de passageiros mais ou menos entre -1.5 e 3, e agora os dados estão bem mais próximos, vai ser mais fácil para rede neural aprender com esses dados.

Só que, como eu disse, temos que passar parte dos dados para que a rede neural aprenda. Eu vou dividir a parte para treinar na rede neural, a parte pro treino e parte para o teste. Agora eu vou fazer essa divisão, vou primeiro pegar o tamanho que eu quero para o treino, vou criar tamanho_treino = int(len(passageiros)*0.9) isso porque eu vou pegar 90% dos meus dados para ensinar a rede neural. Vou pegar um tamanho_teste = len(passageiros)-tamanho_treino, então o tamanho do teste vai ser 10% que é o tamanho dos passageiros menos o tamanho do treino.

Terminado, temos o tamanho treino e o tamanho teste agora podemos dividir X e Y com base nisso. Então vou criar aqui o xtreino = x[0:tamanho_treino] e eu também tenho ytreino = y[0:tamanho_treino]. Agora eu tenho que repetir o processo para o teste, vou fazer o xteste = x[tamanho_treino:len(passageiros)] então eu quero do tamanho treino até o comprimento total, pro y yteste = y[tamanho_treino:len(passageiros)] e “Shift + Enter” temos os dados de teste também, então agora vou gerar um gráfico para os dados de treino. Então sns.lineplot(x=xtreino,y=ytreino,label=’treino’). Agora temos aqui os dados de treino

E vamos plotar também os dados de teste então sns.lineplot(x=xteste,y=yteste,label=’teste’), assim nós temos no nosso gráfico, eu posso copiar da linha de código a legenda plt.ylabel(‘Passageiros’) e plt.xlabel(‘Data’) com “Ctrl + C” e um “Ctrl + V” depois “Shift + Enter”, temos mostrando no eixo x a data e no eixo y o número de passageiros, e temos no gráfico os dados que vamos utilizar para ensinar a rede neural a fazer a previsão que está no fim do gráfico em laranja, queremos tentar prever essa região em laranja passando uma série de datas para a rede neural

Único detalhe no gráfico é que ele não está ligando os pontos entre a linha do gráfico em azul e a laranja, porque estamos fazendo dois plots, dois gráficos e separados. Quando geramos um único gráfico, ele liga todos os pontos que formam o gráfico, esse é o único detalhe. Agora precisamos efetivamente passar os dados e fazer a previsão com uma rede neural.

Sobre o curso Deep Learning: previsão com Keras

O curso Deep Learning: previsão com Keras possui 137 minutos de vídeos, em um total de 42 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Machine Learning acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas