Projeto de Data Science - Previsão de ações da bolsa de valores - Parte 2 - Entendendo a nossa base!
- 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