library(readr)
   
library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(psych)
library(quantmod)
## Carregando pacotes exigidos: xts
## Carregando pacotes exigidos: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(forecast)
library(readr)
library(readxl)

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.