数学建模社区-数学中国
标题:
时间序列模型 (二):移动平均法
[打印本页]
作者:
浅夏110
时间:
2020-5-30 15:04
标题:
时间序列模型 (二):移动平均法
移动平均法 可以作为一种数据平滑的方式 ,以每天的气温数据为例,今天的天气可能与过去的十天的气温有线性关系;或者有的人对食物有一种节俭的美德,他们做的饭菜能看出有些是上一顿的,当然也有一部分是今天的做的,再假设隔两顿的都被倒掉了,并且每天都是这样的,那么这碗饭菜可能就是一部分上一顿的再加上一部分今天现做的,这就是一个一阶的移动平均。
+ l) G' b2 [& S6 d
) y. a% z- f k
移动平均法
4 N( x0 {+ P' G' C
移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏 较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。 移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等。
- e7 L) o4 H m, S$ w6 A- D
! O# B( A, o1 u& W: Q/ w
简单移动平均法
8 H0 R$ _: M- l0 S, W
4 O$ \8 Y) |. O* Z4 C/ Z: Y
% f# P {8 j% i) b. |
# U, r: p/ d9 X- }3 X
近N 期序列值的平均值作为未来各期的预测结果。一般 N 的取值范围: 5≤N≤ 200。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,N 的 取值应较大一些。否则 N 的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择佳 N 值的一个有效方法是,比较若干模型的预测误 差。预测标准误差小者为好。
* L" U0 ~& y* t5 Q+ S# C
5 I% |0 k# L9 [ R+ X: u
简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。 如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。
( K8 P; ~8 q- r1 j( T f
8 v; e0 Z! n8 i! V9 A( L! [
例 1 某企业 1 月~11 月份的销售收入时间序列如表 1 示。试用一次简单滑动平 均法预测第 12 月份的销售收入。
% i3 t( w& ~% t9 u
" a- L, T- w( h Q" @- ]; F
. F7 t: j5 K0 G
- Q1 ?5 @0 p$ M
' A) N+ g6 z) Q$ s* B& J
" j% H( G1 P7 k: a
计算的 Matlab 程序如下:
" Y2 w- s+ e- T
- x; K: `7 H& I0 S- d$ d5 L# E
clc,clear
8 J7 N. C# ]& G! ~4 h2 J# a
y=[533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7]; m=length(y);
" P9 U7 U1 {' F2 h3 ?
n=[4,5]; %n 为移动平均的项数
" q- T8 Z6 q) |; r7 o& J
for i=1:length(n)
! D# R, h7 n% N! \, p. k
%由于 n 的取值不同,yhat 的长度不一致,下面使用了细胞数组
7 R7 b; N4 J H b/ u2 ^+ {( d
for j=1:m-n(i)+1
/ J6 I6 J. E2 w9 u0 U, l3 i
yhat{i}(j)=sum(y(j:j+n(i)-1))/n(i);
3 Y( Z. b# R# ^; W' g6 z
end
2 U6 U$ m' m" G2 h" e6 f
y12(i)=yhat{i}(end);
. H% O/ R1 L: C; t' Y" b8 A- G! S- t
s(i)=sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
4 {: N7 C! q! a0 Z1 x
end
4 F5 C* O+ w- C2 v" e! l% a* g
y12,s
1 f/ h0 L! ]; e+ s) l9 B+ a% k, B
3 L7 e/ b2 G2 I/ c) V
加权移动平均法
1 y3 k* w2 r! e5 r
在简单移动平均公式中,每期数据在求平均时的作用是等同的。但是,每期数据所包含的信息量不一样,近期数据包含着更多关于未来情况的信心。因此,把各期数据等同看待是不尽合理的,应考虑各期数据的重要性,对近期数据给予较大的权重,这就 是加权移动平均法的基本思想。
' d. T5 b* A$ N( H
2 `2 E9 O, l$ z, H9 T$ L
- G8 r/ t1 ~2 H1 F9 m/ ?
4 l6 n* [; `+ P
例 2 我国 1979~1988 年原煤产量如表 2 所示,试用加权移动平均法预测 1989 年 的产量
" m# `& K" K. V. x) L) v
( Q9 U& z5 M' c. E$ a0 Y' g, t7 s
9 w3 q& t; I" ~6 v% T+ X# Y- x# L. B i
9 E' H: ~' z( e) c- y& B
* Q9 o1 d* o) J$ ?
K& J7 `# O! g$ s0 G! t5 A/ Y; [' @
, I: S7 k" Y& W# [! A7 C2 U) k
: w8 h% ~* ^5 a
3 J X8 M Z3 D3 I
计算的 MATLAB 程序如下:
2 x% f9 D2 F. a3 I* Y2 k
4 R+ K6 |: h# v; N5 k3 V% D w
y=[6.35 6.20 6.22 6.66 7.15 7.89 8.72 8.94 9.28 9.8];
7 ?& x0 t8 n7 ?% F# s
w=[1/6;2/6;3/6];
8 N. b9 X6 G$ e
m=length(y);n=3;
+ {. i& o! H5 }5 O3 ]; f, H1 g
for i=1:m-n+1
5 ~: }+ |% H0 @
yhat(i)=y(i:i+n-1)*w;
: i% p3 t6 m u8 [8 Z/ W+ E
end
3 r' H: S" x4 j& e' [/ L u: N% ^* u
yhat
3 o! p$ w% G8 E" c3 D3 a
err=abs(y(n+1:m)-yhat(1:end-1))./y(n+1:m)
, m' A# M0 J8 L
T_err=1-sum(yhat(1:end-1))/sum(y(n+1:m))
: h: U& z# d* I! C; r2 @) M
y1989=yhat(end)/(1-T_err)
- O9 @8 s8 g1 u; R% _& E
$ ^: _& S& P J1 N! Z9 C, i% q" t
在加权移动平均法中,
的选择,同样具有一定的经验性。一般的原则是:近期 数据的权数大,远期数据的权数小。至于大到什么程度和小到什么程度,则需要按照预 测者对序列的了解和分析来确定。
, M0 \! z' y6 ?4 h- \% t
( T& r' M3 d: x H5 ]' l
趋势移动平均法
/ Q. p B4 d: q* `8 w8 s
简单移动平均法和加权移动平均法,在时间序列没有明显的趋势变动时,能够准确 反映实际情况。但当时间序列出现直线增加或减少的变动趋势时,用简单移动平均法和 加权移动平均法来预测就会出现滞后偏差。因此,需要进行修正,修正的方法是作二次 移动平均,利用移动平均滞后偏差的规律来建立直线趋势的预测模型。这就是趋势移动平均法。 一次移动的平均数为
% A" i7 N$ F; T" B7 s. x2 I
7 a% ]! B& X9 |2 d9 w6 D1 ]
9 ^4 R! M7 h" I
( e& M, r4 z; J" e2 }
3 G; e8 v7 Y6 x- |& o Y$ A
, ~- L* R: F" a4 {. z/ ~$ ^' v" ]& S
: S8 K, j8 Z# J: t! b+ b' ~
# a `/ g6 p! w6 d2 C: P" y0 J% F
例 3 我国 1965~1985 年的发电总量如表 3 所示,试预测 1986 年和 1987 年的发 电总量。
3 i9 [2 h, G' O5 Q R3 [
- I' y: G- N8 L; B
2 j2 N" ^5 Y3 D& @
' @' j- [9 w0 f# T+ N# y
解 由散点图 1 可以看出,发电总量基本呈直线上升趋势,可用趋势移动平均法 来预测。
1 p( n# [* C u) `
1 N. p& T3 ?0 r; k
4 t8 |/ j+ @& d3 T5 \: F
# ~& c/ [+ l9 T8 \# `% ~+ K
计算的 MATLAB 程序如下:
% u* C! b, h0 u7 ~% z2 S# X
1 s& {0 [" l9 W; H4 S% k
clc,clear
* \8 x( }6 K8 Z% M( U9 H
load y.txt %把原始数据保存在纯文本文件 y.txt 中
: f8 `8 O5 B# o! K8 L: B8 Y9 q3 t
m1=length(y);
& l6 M9 e2 m# v8 I$ v
n=6; %n 为移动平均的项数
. u/ w1 g9 |/ G0 |8 E
for i=1:m1-n+1
. b8 {( d9 b2 u8 @5 v
yhat1(i)=sum(y(i:i+n-1))/n;
% ~9 [$ N, F4 {# Q0 v& T3 B5 G
end
* s' ^& s7 g0 t N
yhat1
3 ?: s; L! c. [$ {, y% _6 `; p) I
m2=length(yhat1);
$ w% H3 z# ^4 R2 F3 E" O
for i=1:m2-n+1
: z! Y7 L) T+ l, T3 i; [
yhat2(i)=sum(yhat1(i:i+n-1))/n;
7 B3 S# {% \3 c: `
end
8 j) A, Z# Y3 Z' f8 g- e7 }
yhat2
: `! ?+ ~, p2 s2 K
plot(1:21,y,'*')
5 H1 K: a4 S/ v( G- b! p
a21=2*yhat1(end)-yhat2(end)
' G# _6 {; y+ }2 I
b21=2*(yhat1(end)-yhat2(end))/(n-1)
+ v' A `+ f) Z* E
y1986=a21+b21
5 c& U; y; n; z; N
y1987=a21+2*b21
. c3 h' c, h% G; M5 `9 ~9 y
" |- }( T( B( K6 P
# _4 i2 V- a- Z% p7 a! x
5 F% I! C; `. Y# y$ w& V$ R* |
趋势移动平均法对于
同时存在直线趋势与周期波动
的序列,是一种既能反映趋势变 化,又可以有效地分离出来周期变动的方法。
; Z; i: z# Q7 M" y
) w( ~# I* q: K
6 P5 t. p6 I" d2 n4 b7 x
2 ~: `4 z4 d) R0 z2 ]8 j) }3 B
————————————————
1 j6 |3 i, b, R# V% ^( [- @0 V
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
6 x& V5 H' [5 k
原文链接:https://blog.csdn.net/qq_29831163/article/details/89440426
, a2 K5 s0 y7 h# o+ ~+ W
# X6 O2 U+ }* f9 I+ P6 W+ n1 _
/ S2 F0 x9 }$ u- D
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5