Problema
> Utilizando apenas o Azure Machine Learning, não é possível realizar previsões usando uma escala temporal.
> Esta solução surgiu devido à necessidade de prever o número de reservas para o negócio aeronáutico, para n periodos no futuro. A solução ML apenas nos permitia prever o próximo período.
Os Dados
> Temos informação histórica de voos, e respetiva ocupação e pretende-se prever o número de reservas para n períodos.
A Solução
1.1.1. O que é a linguagem R?
> A linguagem R, é uma linguagem de programação para computação estatística e gráficos, suportada pela R Foundation for Statistical Computing.
1.1.2. O que é Exponential Triple Smoothing (ETS)?
> É um algoritmo para fazer previsões utilizando uma média ponderada de valores históricos, em que atribui aos dados mais recentes um peso maior na previsão do valor que se pretende, neste caso, na previsão de passageiros.
> Tem em conta tendências e variações sazonais dos dados introduzidos.
1.1.3. O código utilizado
> Abaixo apresentamos o código implementado e embutido no projeto de ML.
# Data input
• data <- maml.mapInputPort(1) # class: data.frame
• library(forecast) #Biblioteca forecast
# Pré-processamento / Inicialização
• colnames(data) <- c(“frequency”, “horizon”, “dates”, “values”) #Os nomes das colunas são o vetor
• dates <- strsplit(data$dates, “;”)[[1]] #chama a coluna dates que tem um vetor e separa por “;”, colocando no dates o primeiro valor que apanha
• values <- strsplit(data$values, “;”)[[1]]
• dates <- as.Date(dates, format = ‘Y%/m%’) #Converte chars em data
• values <- as.numeric(values)
• nrflights <- as.numeric(nrflights)
# Prepara o modelo temporal
• train_ts<- ts(values, frequency=data$frequency) #Função temporal que emparelha um valor por frequência
• fit1 <- ets(train_ts) #Algoritmo Exponential Smoothing (ETS) aplicado à função temporal
• train_model <- forecast(fit1, h = data$horizon) #função de forecast sobre a variável de ETS, tendo em conta o horizonte escolhido
• plot(train_model) #produz um gráfico 2D sobre o train_model
# Produção da previsão
• train_pred <- round(train_model$mean,2) #arredondamento a duas casas decimais da média de cada resultado do train_model
• data.forecast <- as.data.frame(t(train_pred)) #lista de vectores da transposição da matriz criada anteriormente
• colnames(data.forecast) <- paste(“Forecast”, 1:data$horizon, sep=””) #Concatenação dos resultados para apresentação final
# Resultado Final
• maml.mapOutputPort(“data.forecast”);
Conclusão
> Com o código acima, conseguiremos produzir previsões para os n períodos definidos.
.
.
..