holtwinter报告分享

LBFGS

1 LBFGS是解决非线性优化问题的方法,应用到我们的工程中,就是在于αβγ取何值,与实际预测误差最小。


2 在python程序的应用中,用到了MSE(均方差)的方法判定参数的标准,方差越小,估计值越好。


3 在试用python程序时,参数含义,x[]表示提供的数据,m表示周期(几个点数为一个周期),fc要预测的未来的点数。


4 考虑到未来使用时可能会消除异常点,这就会有一个问题,现在的周期数为表示的点数,即去除异常点后,会影响周期性,所以异常点必须要被替代。我的想法是找周边两点,先判断周边两点不是异常值,那么取平均值替代异常点。


三次平滑预测(Holt-Winters)

1 三次平滑针对有趋势和季节性的预测:αβγ分别有其对应的意义。α对应周期内各个数据的权重,α越接近0,平滑后的值越接近前i个数据的平滑值;β对应数据的趋势性;γ对应数据的周期性。


2 在找到αβγ后,数据的迭代方式为,明确αβγ后经过迭代求出预测值。


* St[i] = alpha * y[i] / It[i - period] + (1.0 - alpha) *

(St[i - 1] + Bt[i - 1])

 

* Bt[i] = gamma * (St[i] - St[i - 1]) + (1 - gamma) *

Bt[i - 1]

 

* It[i] = beta * y[i] / St[i] + (1.0 - beta) * It[i -

period]

 

* Ft[i + m] = (St[i] + (m * Bt[i])) * It[i - period + m]

3 相应的在java程序中相应的初始值,其中y[0]的初始值,java程序给了两种选定方式,一种是完整周期点书的平均值,一种是y[0],初始值的选项只对预测的开始阶段有作用,经过迭代后预测效果差异不明显。

4       采样数据

         1)testjson.json为一周的实际数据,getJson类采样的json文件的程序。共11252个点,将近一周采样数值,我取点放入data.txt文件中。

         2)test2得到采用数据data.txt后,进行Holt-Winters数据预测。alpha、beta、gamma为python数据取得的参数。period为一个周期点,因为假设为每天一个周期,每分钟采点一次,所以period取60*24=1440。m为预测未来点数,我采用1440。(此处m我需要继续研究,因为程序中用到m迭代取1440即周期数预测是相对准确的。)

         3)如图,Holt-Winters预测有范围,当我预测未来的点数过多(预测超过一个周期),会出现“断崖式”的下跌。我分析原因,是因为程序的预测是建立在上一个周期的样本点的基础上,当预测到第二个周期时,第一个周期的实际值已经不存在了,就无法预测。另外,图三per为误差百分比图。


holtwinter报告分享_第1张图片
图一


holtwinter报告分享_第2张图片
图二



holtwinter报告分享_第3张图片
图三


 消去异常点算法(IsolationForest)

1)IsolationForest算法的思想就是不断对数据进行随机切割,异常点有较大的概率在早期被切割出去。

2)查阅pyhon有相应的库可用,java在git上也有相应代码。

3)根据Holt-Winters算法预测效果,判断暂时还不需要使用IsolationForest排除异常点,故不细述。

                 以上

你可能感兴趣的:(holtwinter报告分享)