in afa/core.py [0:0]
def holt(y, horiz, **kwargs):
"""
"""
alpha = kwargs.get("alpha", 0.2)
beta = kwargs.get("beta", 0.2)
extra_periods = horiz-1
# Initialization
f = [np.nan] # First forecast is set to null value
a = [y[0]] # First level defined as the first demand point
b = [y[1]-y[0]] # First trend is computed as the difference between the two first demand poiny
# Create all the m+1 forecast
for t in range(1,len(y)):
# Update forecast based on last level (a) and trend (b)
f.append(a[t-1]+b[t-1])
# Update the level based on the new data point
a.append(alpha*y[t]+(1-alpha)*(a[t-1]+b[t-1]))
# Update the trend based on the new data point
b.append(beta*(a[t]-a[t-1])+(1-beta)*b[t-1])
# Forecast for all extra months
for t in range(extra_periods):
# Update the forecast as the most up-to-date level + trend
f.append(a[-1]+b[-1])
# the level equals the forecast
a.append(f[-1])
# Update the trend as the previous trend
b.append(b[-1])
# yp = np.clip(np.exp(f[-horiz:]), 0, None).round(0)
yp = np.array(f[-horiz:])
return yp