Em postagens anteriores, apresentei métodos de previsão muito simples (e ingênuos), ou seja, previsão baseada em CAGR e previsão de média móvel simples . Implementei esses métodos de previsão em R e demonstrei casos de uso básicos.
Neste post, quero apresentar outro método simples de previsão: a previsão de passeio aleatório. Vou implementar um exemplo usando Python.
A previsão de caminhada aleatória pode, por exemplo, ser usada para criar um modelo de linha de base simples com o qual outras previsões podem ser comparadas. Um passeio aleatório pode ser uma boa referência. Aqui estou, por exemplo, pensando na análise do mercado financeiro, onde muitos engenheiros financeiros tentam criar estratégias de negociação e modelos de previsão que podem ser testados em passeios aleatórios.
Abaixo, implemento uma função de previsão de passeio aleatório em Python. A função requer o módulo aleatório.
import random
def random_walk_forecast(annualGrowth,
startPoint,
forecastLength,
productiveDaysPerYear,
standardDeviationRelativeToMeanGrowth):
prediction = []
g = (1+annualGrowth)**(1/productiveDaysPerYear)-1
for i in range(0,forecastLength):
if i == 0:
prediction.append(startPoint*random.normalvariate(mu=1+g,
sigma=g*standardDeviationRelativeToMeanGrowth))
else:
prediction.append(prediction[i-1]*random.normalvariate(mu=1+g,
sigma=g*standardDeviationRelativeToMeanGrowth))
return prediction
Usando o random_walk_forecast podemos visualizar uma previsão de passeio aleatório usando pyplot, como parte da biblioteca matplotlib em Python:
historicals = [800,1000,874,945,1121,1245,1020]
growth_rate = 0.03
predictions = random_walk_forecast(annualGrowth = growth_rate,
startPoint = historicals[-1],
forecastLength=10,
productiveDaysPerYear=220,
standardDeviationRelativeToMeanGrowth = 500)
import matplotlib.pyplot as plt
plt.figure(figsize = (20,5))
historicals.extend(predictions)
plt.bar(range(1,len(historicals)+1),
historicals,
color = "#229900")
plt.title("time series wrandom walk: result of simple forecasting appraoch",size=20)
plt.xlabel("days",size=14)
plt.ylabel("values of interest",size=14)
plt.show()
Isso conclui meu exemplo simples.
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply