Histórico de preços das ações das lojas Magazine Luiza
magazine_luiza <- read.table("C:/Users/Carlos Fábio/OneDrive/Documentos/magazine_luiza.csv", sep = ",", header = TRUE, col.names = c("Dados", "Aberto", "Alto", "Baixo", "AdjPerto", "Adj", "Volume"))
library(ggplot2)
##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
# Histograma
ggplot(magazine_luiza, aes(x = Aberto)) +
geom_bar(stat = "count") +
labs(x = "Data", y = "Contagem", title = "Histograma da série temporal")

magazine_luiza$Dados <- as.Date(magazine_luiza$Dados)
magazine_luiza_ts <- ts(magazine_luiza$Aberto, start = c(2022, 06, 24), frequency = 12)
library(forecast)
forecast_magazine_luiza <- forecast(magazine_luiza_ts, 10, 80)
plot(forecast_magazine_luiza)

# Método Naive
naive_forecast <- forecast::naive(magazine_luiza_ts, 10, 80)
plot(naive_forecast, main = "Naive Forecast")

# Método sazonal
snaive_forecast <- forecast::snaive(magazine_luiza_ts, h = 10, level = 80)
plot(snaive_forecast, main = "Seasonal Naive Forecast")

# Método Mean Forecast (previsão média):
meanf_forecast <- forecast::meanf(magazine_luiza_ts, 10, 80)
plot(meanf_forecast, main = "Mean Forecast")

# Método suavização exponencial simples:
ses_forecast <- forecast::ses(magazine_luiza_ts, 10, 80)
plot(ses_forecast, main = "Simple Exponential Smoothing Forecast")

library(fpp)
## Carregando pacotes exigidos: fma
## Carregando pacotes exigidos: expsmooth
## Carregando pacotes exigidos: lmtest
## Carregando pacotes exigidos: tseries
data("magazine_luiza")
## Warning in data("magazine_luiza"): data set 'magazine_luiza' not found
plot(magazine_luiza)

forecast(magazine_luiza$Alto, 7, 80)
## Point Forecast Lo 80 Hi 80
## 251 3.630005 3.422435 3.837575
## 252 3.630005 3.336325 3.923685
## 253 3.630005 3.270150 3.989860
## 254 3.630005 3.214276 4.045734
## 255 3.630005 3.164977 4.095033
## 256 3.630005 3.120340 4.139670
## 257 3.630005 3.079231 4.180779
plot(forecast(magazine_luiza$Alto, 7, 80))

str(magazine_luiza)
## 'data.frame': 250 obs. of 7 variables:
## $ Dados : Date, format: "2022-06-24" "2022-06-27" ...
## $ Aberto : num 2.63 2.48 2.46 2.4 2.38 2.34 2.18 2.1 2.38 2.56 ...
## $ Alto : num 2.65 2.55 2.48 2.49 2.42 2.34 2.22 2.42 2.61 2.65 ...
## $ Baixo : num 2.44 2.4 2.34 2.37 2.31 2.2 2.11 2.03 2.38 2.43 ...
## $ AdjPerto: num 2.47 2.43 2.38 2.41 2.34 2.2 2.13 2.38 2.5 2.56 ...
## $ Adj : num 2.47 2.43 2.38 2.41 2.34 2.2 2.13 2.38 2.5 2.56 ...
## $ Volume : int 141491300 105534800 130244600 113299200 231980300 114418200 103383200 271736400 263127600 196227300 ...
# Série temporal
serie_temporal <- ts(magazine_luiza$Alto, start = c(2022, 06, 24), frequency = 12)
# Decomposição usando o algoritmo STL
decomposed <- stl(serie_temporal, s.window = "periodic")
# Plot dos componentes da decomposição
plot(decomposed)

data("magazine_luiza")
## Warning in data("magazine_luiza"): data set 'magazine_luiza' not found
# Série temporal
serie_temporal <- ts(magazine_luiza$Alto, start = c(2022, 06, 24), frequency = 12)
# Decomposição usando o algoritmo STL
decomposed <- stl(serie_temporal, s.window = "periodic")
# Extração dos componentes da decomposição
trend <- decomposed$time.series[, "trend"]
seasonal <- decomposed$time.series[, "seasonal"]
remainder <- decomposed$time.series[, "remainder"]
# Plot dos componentes da decomposição
plot(serie_temporal, main = "Série Temporal Original", ylab = "Alto")

plot(trend, main = "Tendência", ylab = "Tendência")

plot(seasonal, main = "Sazonalidade", ylab = "Sazonalidade")

plot(remainder, main = "Ruído", ylab = "Ruído")

# Aplicação a decomposição aditiva
decomposed_additive <- decompose(serie_temporal, type = "additive")
# Extração ds componentes da decomposição aditiva
trend_additive <- decomposed_additive$trend
seasonal_additive <- decomposed_additive$seasonal
remainder_additive <- decomposed_additive$random
# Plot dos componentes da decomposição aditiva
plot(trend_additive, main = "Tendência (Aditiva)", ylab = "Tendência")

plot(seasonal_additive, main = "Sazonalidade (Aditiva)", ylab = "Sazonalidade")

plot(remainder_additive, main = "Ruído (Aditivo)", ylab = "Ruído")

data("magazine_luiza")
## Warning in data("magazine_luiza"): data set 'magazine_luiza' not found
# Série temporal
serie_temporal <- ts(magazine_luiza$Alto, start = c(2022, 06, 24), frequency = 12)
# Aplicação da decomposição usando o algoritmo STL
decomposed <- stl(serie_temporal, s.window = "periodic")
# Plot da série temporal original
plot(magazine_luiza$Alto, xlab = "Tempo", ylab = "Índice de novas ordens")

# Calculo do componente de ajuste sazonal
ajuste_sazonal <- magazine_luiza$Alto - decomposed$time.series[, "seasonal"]
# Plot dos componente de ajuste sazonal
plot(ajuste_sazonal, main = "Componente de Ajuste Sazonal", ylab = "Ajuste Sazonal")

library(mFilter)
# Série temporal
serie_temporal <- ts(magazine_luiza$Alto, start = c(2022, 06, 24), frequency = 12)
# Aplicação do filtro de Hodrick-Prescott
filtro_hp <- hpfilter(serie_temporal)
# Extração da tendência e as flutuações cíclicas
tendencia <- filtro_hp$trend
ciclo <- filtro_hp$cycle
# Plot da série original, a tendência e as flutuações cíclicas
plot(serie_temporal, main = "Série Temporal Original", ylab = "Valor")
lines(tendencia, col = "red", lwd = 2, main = "Tendência")
lines(ciclo, col = "blue", lwd = 2, main = "Flutuações Cíclicas")

library(caret)
## Carregando pacotes exigidos: lattice
# Conjunto de dados magazine_luiza (copia)
dados_magazine <- magazine_luiza
# Normalização dos dados
max_value <- max(dados_magazine$Alto)
min_value <- min(dados_magazine$Alto)
dados_magazine$Alto_norm <- (dados_magazine$Alto - min_value) / (max_value - min_value)
# Divisão dos dados de treinamento e teste
n <- nrow(dados_magazine)
proporcao_treinamento <- 0.8
indice_treinamento <- 1:round(n * proporcao_treinamento)
# Criação do conjunto de controle do modelo
controle <- trainControl(method = "none")
# Definindo a fórmula do modelo
formula <- Alto_norm ~ Alto + Baixo + AdjPerto + Volume
# Criação o modelo MLP com caret
modelo_mlp <- train(formula,
data = dados_magazine[indice_treinamento, ],
method = "mlp",
trControl = controle,
tuneLength = 1,
preProcess = c("center", "scale"),
linout = TRUE,
trace = FALSE)
# Previsões dos dados
previsoes <- predict(modelo_mlp, newdata = dados_magazine[-indice_treinamento, ])
# Reverção da normalização nas previsões
previsoes_reais <- previsoes * (max_value - min_value) + min_value
# Plotamento das previsões
plot(dados_magazine$Dados, dados_magazine$Alto, type = "l", xlab = "Data", ylab = "Valor")
lines(dados_magazine[-indice_treinamento, "Dados"], previsoes_reais, col = "red")

Explicação dos significados dos parâmetros utilizados nas previsões
(de st e IA):
Método Naive:
Ele utiliza apenas o último valor observado como a previsão para o
próximo período.O sombreado azul sobre essa linha representa o intervalo
de confiança associado às previsões para esse período.
Método sazonal:
Ele leva em consideração a sazonalidade da série, prevendo que o
valor futuro será igual ao valor observado no mesmo período sazonal do
ano anterior.A previsão sazonal é representada pela linha azul que
destaca o perído apresentado no gráfico.
Método Mean Forecast:
Ele calcula a média dos valores históricos e assume que o valor
futuro será igual a essa média.A previsão média é representada pela
linha contínua no gráfico.
Método de IA:
Para aplicar uma abordagem de IA na previsão de séries temporais,
foi necessário utilizar redes neurais, árvores de decisão, entre outros.
Um gráfico foi gerado para visualizar as previsões. O eixo x representa
a variável “Dados” no conjunto de dados e o eixo y representa os valores
reais da variável “Alto”. As previsões são representadas por uma linha
vermelha.No caso estudado das lojas Magazine Luiza a linha vermelha das
previsões está bastante próxima da linha preta que representa os valores
reais da variável “Alto”. Isso indica que o modelo conseguiu capturar de
forma satisfatória os padrões e tendências dos dados durante o período
de março a julho, com pequenas variações em relação aos valores
reais.
Em resumo, enquanto os métodos tradicionais (Naive, Seasonal Naive e
Mean Forecast) não requerem parâmetros de IA específicos, a aplicação de
IA na previsão de séries temporais envolve a seleção e o ajuste de
parâmetros relacionados a algoritmos e modelos específicos de IA. Esses
parâmetros podem variar de acordo com o algoritmo escolhido e devem ser
definidos de forma a otimizar a precisão das previsões.