In previous posts I introduced very simple (and naive) forecasting methods, namely CAGR-based forecasting and simple moving average forecasting. I implemented such forecasting methods in R and demonstrated basic use cases.
In this post I want to introduce another simple forecasting method: Random walk forecasting. I will implement an example using Python.
Random walk forecasting can e.g. be used for creating a simple baseline model against which other forecasts can be compared. A random walk can be a good benchmark. Here I am e.g. thinking of financial market analysis where many financial engineers try to create trading strategies and forecasting models that can be tested against random walks.
Below I implement a random walk forecasting function in Python. The function requires the random module.
import random # function for simulating a random walk; parameters include annual growth rate, starting point etc. def random_walk_forecast(annualGrowth, startPoint, forecastLength, productiveDaysPerYear, standardDeviationRelativeToMeanGrowth): # declare empty prediction return list prediction =  # convert annual growth into daily growth, assuming defined number of productive days per year g = (1+annualGrowth)**(1/productiveDaysPerYear)-1 # calculate all prediction values for i in range(0,forecastLength): # if first prediction then list is still empty 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 the list of predicted values return prediction
Using the random_walk_forecast we can visualize a random walk forecast using pyplot, as part of the matplotlib library in Python:
# list with historical data historicals = [800,1000,874,945,1121,1245,1020] # assumed annual growth rate growth_rate = 0.03 # prediction, assuming 220 productive days per year; forecasting for 10 work day horizon predictions = random_walk_forecast(annualGrowth = growth_rate, startPoint = historicals[-1], forecastLength=10, productiveDaysPerYear=220, standardDeviationRelativeToMeanGrowth = 500) # import matplotlib.pyplot for being able to create plots import matplotlib.pyplot as plt # set figure size plt.figure(figsize = (20,5)) # merge historicals and predictions; lets extend predictions onto historicals historicals.extend(predictions) # create a simple bar plot plt.bar(range(1,len(historicals)+1), historicals, color = "#229900") # add a title to the graph plt.title("time series wrandom walk: result of simple forecasting appraoch",size=20) # add axis labels plt.xlabel("days",size=14) plt.ylabel("values of interest",size=14) # show the plot plt.show()
This concludes my simple example.
Data scientist focusing on simulation, optimization and modeling in R, SQL, VBA and Python