Random-walk prognose i Python

I tidligere indlæg introducerede jeg meget simple (og naive) prognosemetoder, nemlig CAGR-baseret prognose og simpel glidende gennemsnitsprognose . Jeg implementerede sådanne prognosemetoder i R og demonstrerede grundlæggende use cases.

I dette indlæg vil jeg introducere en anden simpel prognosemetode: Random walk forecasting. Jeg vil implementere et eksempel ved hjælp af Python.

Random walk forecasting kan fx bruges til at skabe en simpel basismodel, som andre prognoser kan sammenlignes med. En tilfældig gåtur kan være et godt benchmark. Her tænker jeg fx på finansmarkedsanalyse, hvor mange finansielle ingeniører forsøger at skabe handelsstrategier og prognosemodeller, der kan testes mod tilfældige vandringer.

Nedenfor implementerer jeg en tilfældig gang-forudsigelsesfunktion i Python. Funktionen kræver det tilfældige modul.

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

Ved at bruge random_walk_forecast kan vi visualisere en tilfældig gangprognose ved hjælp af pyplot, som en del af matplotlib- biblioteket i 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()

Dette afslutter mit simple eksempel.

Leave a Reply

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close

Meta