曲线平滑方法

时间:2023-01-28 20:33:17

一次指数平滑

公式:s[i] = alpha*x[i] +(1-alpha)*s[i-1] 分析:alpha月接近1,平滑后的数据月接近当前时间的数据值,这种情况下数据越不平滑;当alpha越接近0,平滑后的数据s[i] 越接近前i-1个数据的平滑值,数据越平滑。 alpha取值标准:偏差平方的均值(MSE)最小,即各期实际值x[i]与平滑数据s[i]的差的平方和除以总数据数目最小。 适用:对无明显变化趋势的时间序列进行预测(处理) 缺点:指标上所呈现的上升或者下降趋势,将导致预测值滞后于真实的数据

二次指数平滑

公式:s[i] = alpha*x[i] +(1-alpha)*(s[i-1]+b[i-1]) 修正值b[i] = beta*(s[i]-s[i-1]) + (1-beta)*b[i-1] 分析:beta为趋势平滑系数,如何设定需要尝试,参考值0.05.R语言中可以使用holtwinters函数进行选择。 适用:指数平滑方法的选用,一般可根据原数列散点图呈现的趋势来确定。如呈现直线趋势,选用二次指数平滑法 初始值设定:初始值的确定,即第一期的预测值。一般原数列的项数较多时(大于15项),可以选用第一期的观察值或选用比第一期前一期的观察值作为初始值。如果原数列的项数较少时(小于15项),可以选取最初几期(一般为前三期)的平均数作为初始值。

三次指数平滑

指数平滑方法的选用,一般可根据原数列散点图呈现的趋势来确定。如呈现直线趋势,选用二次指数平滑法;如呈现抛物线趋势,选用三次指数平滑法。或者,当时间序列的数据经二次指数平滑处理后,仍有曲率时,应用三次指数平滑法

差分阈值滤波法

基本原理:采用一阶差分处理整个有序序列得出增量序列,再计算出原来序列的标准差sd,去掉增量序列中大于两倍sd的点 作用:去除毛刺或者突减的点 适用情况: 曲线平滑方法
R实现:

> vector
[1] 14764 14805 14066 13101 13121 11839 11698 11744 11463 10898 10682 10399 9748 9209 10001 9072 9012 8461 8210 8058 8369 7612 7587 7383 7180 6938 6896 6684 5940 6162 6077 5749 5499 5545
[35] 5346 5117 5003 4825 4428 4786 4787 4245 4783 4351 4666 4402 3961 4267 4129 3787 3979 3854 3732 3700 3735 3634 3566 3893 3508 3743 4081 4006 3697 4122 4256 4421 4476 4494
[69] 4486 4697 5120 5386 5594 5630 6010 6241 6576 6855 6920 7049 7092 7439 7684 8328 8418 8368 8841 8775 9279 9393 9380 9912 9712 10337 10477 10779 11812 12344 12844 12487 13014 13388
[103] 13490 14171 14072 14434 14468 15236 15402 14912 14778 15583 16313 16272 16092 16661 16018 16393 16719 16181 17089 17562 16748 17222 16191 16719 18162 18532 18740 19026 18149 17358 17301 18444 18755 18089
[137] 18297 18623 18825 18555 19308 20861 18908 18948 18862 15888 22859 19712 39013 19437 20025 19671 21019 20621 20669 20398 20085 19454 20744 19570 19244 19097 18450 18829 18313 19357 19158 19143 18487 18917
[171] 19223 19230 19840 19672 20295 19982 19486 19447 18574 20084 19515 18556 19468 19279 19244 19369 19602 19672 20046 20162 19385 19795 19513 18836 20478 19744 19360 19782 20106 20105 19722 19524 19442 20391
[205] 19576 18889 20259 20162 19498 19195 18948 19029 20403 20047 19700 19769 19928 19926 19024 19451 19910 19738 19436 19593 19979 19806 20164 19267 19308 20022 20010 21032 21341 20948 20148 21834 21950 22002
[239] 22205 21454 22370 21990 21748 22258 22957 23574 23017 23025 23534 21971 23571 24572 25289 25602 24900 22773 23873 23551 24005 23699 24022 24023 22459 23801 24083 23179 23158 21820 22998 22517 22068 21925
[273] 21743 21812 22376 21114 20930 20774 20634 20133 18820 19524 19223 18636 17389
> diff(vector)
[1] 41 -739 -965 20 -1282 -141 46 -281 -565 -216 -283 -651 -539 792 -929 -60 -551 -251 -152 311 -757 -25 -204 -203 -242 -42 -212 -744 222
[30] -85 -328 -250 46 -199 -229 -114 -178 -397 358 1 -542 538 -432 315 -264 -441 306 -138 -342 192 -125 -122 -32 35 -101 -68 327 -385
[59] 235 338 -75 -309 425 134 165 55 18 -8 211 423 266 208 36 380 231 335 279 65 129 43 347 245 644 90 -50 473 -66
[88] 504 114 -13 532 -200 625 140 302 1033 532 500 -357 527 374 102 681 -99 362 34 768 166 -490 -134 805 730 -41 -180 569 -643
[117] 375 326 -538 908 473 -814 474 -1031 528 1443 370 208 286 -877 -791 -57 1143 311 -666 208 326 202 -270 753 1553 -1953 40 -86 -2974
[146] 6971 -3147 19301 -19576 588 -354 1348 -398 48 -271 -313 -631 1290 -1174 -326 -147 -647 379 -516 1044 -199 -15 -656 430 306 7 610 -168 623
[175] -313 -496 -39 -873 1510 -569 -959 912 -189 -35 125 233 70 374 116 -777 410 -282 -677 1642 -734 -384 422 324 -1 -383 -198 -82 949
[204] -815 -687 1370 -97 -664 -303 -247 81 1374 -356 -347 69 159 -2 -902 427 459 -172 -302 157 386 -173 358 -897 41 714 -12 1022 309
[233] -393 -800 1686 116 52 203 -751 916 -380 -242 510 699 617 -557 8 509 -1563 1600 1001 717 313 -702 -2127 1100 -322 454 -306 323 1
[262] -1564 1342 282 -904 -21 -1338 1178 -481 -449 -143 -182 69 564 -1262 -184 -156 -140 -501 -1313 704 -301 -587 -1247
onetimeDiff = diff(vector)
sd(vector)
[1] 6668.911
which(onetimeDiff>2*sd(vector))
[1] 148

则应该被过滤的点应该为148+1=149


移动平均法

公式:Ft=(At-1+At-2+At-3+…+At-n)/n(普通移动平均,还有加权移动平均) 缺点:指标上所呈现的上升或者下降趋势,将导致预测值滞后于真实的数据