top of page

Projeto de Data Science - Previsão de ações da bolsa de valores - Parte 2 - Entendendo a nossa base!

  • Foto do escritor: Andressa Siqueira
    Andressa Siqueira
  • 26 de jul. de 2021
  • 3 min de leitura

Atualizado: 23 de set. de 2021


Se você chegou aqui agora de repente de paraquedas.... antes de continuar sugiro você ler a primeira parte desse projeto clicando nesse link!


Se você já leu a primeira parte, bora continuar!


Nossa primeira tarefa agora é conhecer a fundo a nossa base!


A primeira coisa é verificarmos os tipos de dados que temos através da função dtypes. Isso é necessário porque as datas presente na nossa base são os nossos índices!

Na nossa base as datas são do tipo object (string), então será necessário transforma-las em um tipo de dados mais apropriado, o datetime.

dados['mes'] = pd.to_datetime(dados['mes'], format = '%Y-%m')

Com a nossa base com os tipos corretos, vamos agora limpar as linhas que possuem dados faltantes... Isso é necessário para as nossas análises mais a frente.

dados=dados.fillna(method='ffill')

Agora podemos transformar a nossa coluna de datas em index da nossa base.

dados_serie = df.set_index('Date')

E assim ficará a nossa base:

Também tiramos a coluna Volume, já que ela não importa para a nossa análise atualmente.



Vamos gerar um gráfico da nossa base!

dados_serie.plot(figsize = (15, 6))
plt.show()

O gráfico acima mostra 2 componentes da série: Sazonalidade e Tendência. Podemos ver que s valores das ações na abertura, o máximo valor alcançado, o mínimo valor alcançado e os valores de fechamento possuem o mesmo padrão!


Analisar o gráfico da densidade de observações pode fornecer mais informações sobre a estrutura dos dados através da estrutura abaixo:

dados_serie.Open.hist()
dados_serie.Open.plot(kind = 'kde')
dados_serie.High.hist()
dados_serie.High.plot(kind = 'kde')
dados_serie.Low.hist()
dados_serie.Low.plot(kind = 'kde')
dados_serie.Close.hist()
dados_serie.Close.plot(kind = 'kde')


Podemos perceber que não temos uma gaussiana perfeita, ou seja, não temos a distribuição normal e que a distribuição está inclinada para a esquerda


Agora vamos criar Box Plots para cada no da série!

sns.boxplot(dados_serie.Open.index.year, dados_serie.Open, ax = axes[0])
sns.boxplot(dados_serie.Low.index.year, dados_serie.Low, ax = axes[1])
sns.boxplot(dados_serie.High.index.year, dados_serie.High, ax = axes[2])
sns.boxplot(dados_serie.Close.index.year, dados_serie.Close, ax = axes[3])

Podemos perceber que:

  • Os valores são flutuantes, ou seja, ora estão com tendência ascendente e outras descendente;

  • Que não há um padrão em relação a dispersão da mediana

E pra que tudo isso?


Pra conhecermos a nossa base!


Agora que já conhecemos a nossa base podemos determinar se a nossa série temporal é estacionária ou não estacionária. A estacionariedade é um importante conceito na modelagem de séries temporais e é caracterizada por uma variável que se comporta de forma aleatória ao longo do tempo ao redor de uma média constante.


Verificando a Estacionariedade


Podemos verificar a estacionariedade de uma série temporal da seguinte forma:

  • Plot das Rolling Statistics (Estatísticas Móveis);

  • Autocorrelação com Gráficos ACF e PACF;

  • Teste Dickey-Fuller.

Usaremos os 3 métodos para checar se a nossa série é estacionária ou não.


Plot das Rolling Statistics

Vamos criar um plot da média móvel e do desvio padrão pra verificar se as estatísticas móveis são ou não constantes ao longo da série temporal.




Podemos observar que a média móvel não é constante em relação ao tempo.


Autocorrelação com Gráficos ACF e PACF


Vamos criar os gráficos da função de autocorrelação (ACF) e da função de autocorrelação parcial (PACF).




Nos gráficos representam a autocorrelação (eixo vertical) X defasagem (eixo horizontal) . A área sombreada em azul aponta a significância entre nível de correlação entre a série e cada atraso. Se a barra ultrapassa é porque tem correlação.


Testando a hipótese nula de que a correlação do atraso com a série é igual a zero, podemos rejeitá-la sempre que o nível de correlação estiver acima ou abaixo da área sombreada em azul com um nível de significância de 5%.

Caso contrário, sempre que a correlação estiver dentro da área sombreada em azul, deixamos de rejeitar a hipótese nula e, portanto, podemos ignorar esses atrasos (ou assumir que não há correlação significativa entre eles e a série).


Podemos perceber que:

  • A queda lenda (redução do tamanho das barras) no gráfico de Autocorrelation, indica que essa série não é estacionária.

  • Intervalos de confiança são desenhados na área azul clara. Por padrão, isso é definido como um intervalo de confiança de 95%, sugerindo que os valores de correlação fora desta área provavelmente são uma correlação e não um acaso estatístico.

  • Teremos que transformar essa série em estacionária antes de criar um modelo preditivo.


Teste Dickey-Fuller aumentado

Vamos verificar os resultados do teste de Dickey-Fuller levando em consideração que:

  • A intuição por trás do teste é que, se a série for integrada, o nível de atraso da série y (t-1) não fornecerá informações relevantes na previsão da mudança em y (t).

  • Hipótese nula: a série temporal não é estacionária.

  • Rejeitar a hipótese nula (ou seja, um valor-p abaixo de 0.05) indicará estacionaridade.



Podemos perceber que:

  • O Valor-p é maior que 0.05. Não temos evidências para rejeitar a hipótese nula de que a série não é estacionária.


Nos próximos post vamos verificar a Sazonalidade, Tendência, Ruído e transformar a nossa série em uma série estacionária.




Comments


Assine a newsletter e fique sempre por dentro dos artigos que escrevo 

Obrigado(a)!

CONTATO

Obrigado pelo envio!

© 2020 por Andressa Siqueira. Orgulhosamente criado com Wix.com

bottom of page