基本思路:最近的過去態勢,在某種程度上會持續的未來。指數平滑法是移動平均法中的一種,其特點在于給過去的觀測值不一樣的權重,即較近期觀測值的權數比較遠期觀測值的權數要大。指數平滑法分為一次指數平滑法、二次指數平滑法和三次指數平滑法等等。
一次指數平滑法:
平滑值的基本公式:St = a * yt + (1-a) * St-1 式中,
St:時間t的平滑值;
yt:時間t的實際值;
St-1:時間t-1的平滑值;
假設以下數據:
如果僅有從y1開始的數據,那么確定初始值的方法有:
1)取S0等于y1;
2)待積累若干數據后,取S1等于前面若干數據的簡單算術平均數,如:S1=(y1+ y2+y3)/3等等。
這里取前三號的平均值,以*a *= 0.5的一次指數平滑值計算為例,有
構建的預測模型如下,
當時間數列無明顯的趨勢變化,可用一次指數平滑預測。其預測公式為:
yt+1'=a * yt+(1-a) * yt' 式中
那么,預測 S16 = 0.5 * 28.06 + 29 * 0.5 = 28.53
這里我我們嘗試不同的權重值a ,看看平滑曲線呈現什么樣的走勢。
當 權重值a 越小,曲線的平滑作用越強,對數據的起伏程度越小。
二次指數平滑預測
指數平滑值序列出現一定的滯后偏差的程度隨著權系數(平滑系數)的增大而減少;但當時間序列的變動出現直線趨勢時,用一次指數平滑法來進行預測仍將存在著明顯的滯后偏差。因此,也需要進行修正。
在一次指數平滑的基礎上得二次指數平滑 的計算公式為:
St(2) = a * St(1) + (1 - a) * St-1(2)
St(2): 第t周期的二次指數平滑值;
St(1): 第t周期的一次指數平滑值;
St-1(2): 第t-1周期的二次指數平滑值;
a: 加權系數(也稱為平滑系數)。
數學模型為
Y t+T : 預測曲線
T: 離間隔t 的數
二次平滑實驗 - 平滑函數
def func(data, a):
se = []
for i in range(len(data)):
pre = 0.;
if not i == 0:
pre = a * data[i] + (1-a) * se[i-1]
else:
pre = (1-a) * (data[0] + data[1] + data[2]) / 3 + a * data[i]
se.append(round(pre,2))
return se
三次指數平滑預測
若時間序列的變動呈現出二次曲線趨勢,則需要采用三次指數平滑法進行預測。
平滑公式為:
St(3) = a * St(2) + (1 - a) * St-1(3)
預測公式:
預測結果實驗如下
總結:
一次指數平滑預測: 時間數列無明顯的趨勢變化
二次指數平滑預測:適用于具線性趨勢的時間數列
三次指數平滑預測 :時間序列的變動呈現出二次曲線趨勢
參考資料:
1.http://wiki.mbalib.com/wiki/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95
2.https://baike.baidu.com/item/%E6%8C%87%E6%95%B0%E5%B9%B3%E6%BB%91%E6%B3%95/8726217?fr=aladdin
3.http://blog.csdn.net/nieson2012/article/details/51980943
jupyter實驗過程代碼:
鏈接: https://pan.baidu.com/s/1i6WLH6t 密碼: sbnb