时间序列算法
时间序列是按时间顺序索引的一系列数据点,主要有如下两种分析方法:
- 频域法:频谱分析和小波法
- 时域法:自相关和互相关法
或者
- 参数法
- 非参数法
1.移动平均法
1.1 简易移动平均法
有观察序列 { x i : i > = 1 } \{x_i:i>= 1\} {xi:i>=1} ,简易移动平均法(simple moving average, SMA)是对指定步长w的无权重取均值.若w步长内的值为 x i , x i − 1 , . . . , x i − ( w − 1 ) x_i, x_{i-1}, ... , x_{i-(w-1)} xi,xi−1,...,xi−(w−1),有:
M i = 1 W ∑ j = 0 W − 1 x i − j = x i + x i − 1 + . . . + x i − ( W − 1 ) W M_i = {1 \over W} \sum_{j=0}^{W-1}x_{i-j} = {x_i + x_{i-1}+...+x_{i-(W -1)} \over W} Mi=W1j=0∑W−1xi−j=Wxi+xi−1+...+xi−(W−1)
若计算的是连续变化的值(新值进来,老值出去),上面公式可以写为:
M i = M i − 1 + X i W − X i − W W M_i = M_{i-1}+ {X_i \over W } - {X_i-W \over W} Mi=Mi−1+WXi−WXi−W
1.2 移动平均法
有观察序列 { x i : i > = 1 } \{x_i:i>= 1\} {xi:i>=1} ,一种累积的移动平均法是无权重取均值.若w步长内的值为 x i , x i − 1 , . . . , x i − ( w − 1 ) x_i, x_{i-1}, ... , x_{i-(w-1)} xi,xi−1,...,xi−(w−1),有:
C M A i = x 1 + . . . + x i i CMA_i = {x_1 + ...+ x_i \over i} CMAi=ix1+...+xi
若我们有新值 x i + 1 x_{i+1} xi+1,那么该累积的移动平均值为:
C M A i + 1 = x 1 + . . . + x i + x i + 1 i + 1 = x i + 1 + n ∗ C M A i i + 1 = C M A i + X i + 1 − C M A i i + 1 \begin {aligned} CMA_{i+1} =& {x_1 +...+x_i+x_{i+1}\over {i+1}} \\ =& {x_ {i+1}+n*CMA_i \over {i+1}} \\ =&{CMA_i + {X_{i+1} - CMA_i} \over {i+1}} \end {aligned} CMAi+1===i+1x1+...+xi+xi+1i+1xi+1+n∗CMAii+1CMAi+Xi+1−CMAi
1.3加权平均法
顾名思义带权重的方法[狗头],假设权重关系满足 ∑ j = 0 w − 1 w e i g h t j = 1 \sum_{j=0}^{w-1} weight_j = 1 ∑j=0w−1weightj=1 , 并且 w e i g h t j ≥ 0 weight_j \geq 0 weightj≥0 ,有:
W M A i = ∑ j = 0 w − 1 w e i g h t j ∗ x i − j WMA_i = \sum_{j=0}^{w-1} weight_j*x_{i-j} WMAi=j=0∑w−1weightj∗xi−j
特别地,如果让权重 { w e i g h t j : 0 < = j < = w − 1 } \{weight_j : 0<=j< =w-1\} {weightj:0<=j<=w−1}满足 :
w
e
i
g
h
t
j
=
w
−
j
w
+
(
w
−
1
)
+
.
.
+
1
,
f
o
r
:
0
<
=
j
<
=
w
−
1
weight_j = {w-j \over w+(w-1) +..+1} ,for:~ 0 <=j<=w-1
weightj=w+(w−1)+..+1w−j,for: 0<=j<=w−1
此时
W
M
A
i
=
w
x
i
+
(
w
−
1
)
x
i
−
1
+
.
.
.
+
2
x
i
−
w
+
2
+
x
i
−
w
+
1
w
+
(
w
−
1
)
+
.
.
.
+
1
WMA_i = {wx_i + (w-1)x_{i-1}+ ...+ 2x_{i-w+2}+ x_{i-w+1} \over w+(w-1)+...+1}
WMAi=w+(w−1)+...+1wxi+(w−1)xi−1+...+2xi−w+2+xi−w+1
简单的说就是近的权重大,远的权重小,权重分子为位置,分母为位置累加
假设:
T
o
t
a
l
i
=
x
i
+
.
.
.
+
x
i
−
w
+
1
N
u
m
e
r
a
t
o
r
i
=
w
x
i
+
(
w
−
1
)
x
i
−
1
+
.
.
.
+
x
i
−
w
+
1
\begin {aligned} Total_i =& x_i +...+ x_{i-w+1} \\ Numerator_i =& wx_i +(w -1)x_{i-1}+...+x_{i-w+1} \end {aligned}
Totali=Numeratori=xi+...+xi−w+1wxi+(w−1)xi−1+...+xi−w+1
那么对于有新值来说公式变形为:
T
o
t
a
l
i
+
1
=
T
o
t
a
l
i
+
x
i
+
1
−
x
i
−
w
+
1
N
u
m
e
r
a
t
o
r
i
+
1
=
N
u
m
e
r
a
t
o
r
i
+
w
x
i
+
1
−
T
o
t
a
l
i
W
M
A
i
+
1
=
N
u
m
e
r
a
t
o
r
i
+
1
w
+
(
w
−
1
)
+
.
.
.
+
1
\begin {aligned} Total_{i+1} =& Total_i + x_{i+1}- x_{i-w+1} \\ Numerator_{i+1} =& Numerator_i + wx_{i+1} - Total_i \\ WMA_{i+1} =& {Numerator_{i+1} \over w+(w-1)+...+1} \end {aligned}
Totali+1=Numeratori+1=WMAi+1=Totali+xi+1−xi−w+1Numeratori+wxi+1−Totaliw+(w−1)+...+1Numeratori+1
2.指数平滑法
2.1 指数加权移动平均法
有观察数列 { Y t : t > = 1 } \{Y_t: t>=1\} {Yt:t>=1},指数加权移动平均数列 { S t : t ≥ 1 } \{S_t: t\ge1\} {St:t≥1}定义为:
S t = { Y 1 , t=1 α ⋅ Y t − 1 + ( 1 − α ) ∗ S t − 1 t ≥ 2 S_t= \begin{cases} Y_1,& \text{t=1}\\ \alpha \cdot Y_{t-1}+(1-\alpha)*S_{t-1}& \text{t$\geq$ 2} \end{cases} St={Y1,α⋅Yt−1+(1−α)∗St−1t=1t≥ 2
-
α ϵ [ 0 , 1 ] \alpha \epsilon [0 ,1] αϵ[0,1] 是恒定平滑因子
-
Y t Y_t Yt为在时刻t观察到的值
-
S t S_t St 是EWMA在任意t时刻的值
从上面的定义有:
S
t
=
α
[
Y
t
−
1
+
(
1
−
α
)
Y
t
−
2
+
.
.
.
+
(
1
−
α
)
k
Y
t
−
(
k
+
1
)
]
+
(
1
−
α
)
k
+
1
S
t
−
(
k
+
1
)
S_t = \alpha [Y_{t-1}+ ( 1-\alpha)Y_{t-2}+...+ (1-\alpha)^kY_{t-(k+1)}] + (1-\alpha)^{k+1}S_{t-(k+1)}
St=α[Yt−1+(1−α)Yt−2+...+(1−α)kYt−(k+1)]+(1−α)k+1St−(k+1)
对于任意合适的k
ϵ
\epsilon
ϵ{0, 1,2,…},权重
Y
t
−
i
Y_{t-i}
Yt−i为
α
(
1
−
α
)
i
−
i
\alpha( 1-\alpha)^{i-i}
α(1−α)i−i
假设有观察数列
{
Y
t
:
t
>
=
1
}
\{Y_t: t>=1\}
{Yt:t>=1},交替指数加权移动平均序列
{
S
t
:
t
≥
1
}
\{S_t: t\ge1\}
{St:t≥1}被定义为:
S
t
,
a
l
t
e
r
n
a
t
e
=
{
Y
1
,
t=1
α
⋅
Y
t
+
(
1
−
α
)
∗
S
t
−
1
,
a
l
t
e
r
n
a
t
e
,
t
≥
2
S_{t,alternate}= \begin{cases} Y_1,& \text{t=1}\\ \alpha \cdot Y_{t}+(1-\alpha)*S_{t-1,alternate,}& \text{t$\geq$ 2} \end{cases}
St,alternate={Y1,α⋅Yt+(1−α)∗St−1,alternate,t=1t≥ 2
这里,我们使用
Y
t
Y_t
Yt 替代
Y
t
−
1
Y_{ t-1}
Yt−1
2.2双指数平滑
Suppose { Y t : t ≥ 1 } \{Y_t:t \ge1\} {Yt:t≥1} is an observed data sequence, there are two equations associated with double exponential smoothing:
S t = α Y t + ( 1 − α ) ( S t − 1 + b t − 1 ) S_t = \alpha Y_t + (1-\alpha)(S_{t-1}+ b_{t-1}) St=αYt+(1−α)(St−1+bt−1)
b t = β ( S t − S t − 1 ) + ( 1 − β ) b t − 1 ) b_t = \beta (S_t - S_{t-1}) + (1-\beta)b_{t-1}) bt=β(St−St−1)+(1−β)bt−1)
where α ϵ [ 0 , 1 ] \alpha \epsilon [0,1] αϵ[0,1] is the data smoothing factor and β ϵ [ 0 , 1 ] \beta \epsilon [0,1] βϵ[0,1] is the trend smoothing factor
Here, the initial values are S 1 = Y 1 S_1 = Y_1 S1=Y1 and b 1 b_1 b1 has three possibilities:
b 1 = Y 2 − Y 1 b_1 = Y_2 - Y_1 b1=Y2−Y1
b 1 = ( Y 2 − Y 1 ) + ( Y 3 − Y 2 ) + ( Y 4 − Y 3 ) 3 = Y 4 − Y 1 3 b_1 = {(Y_2 - Y_1) + (Y_3 - Y_2)+ (Y_4 - Y_3) \over 3} = {Y_4 - Y1 \over 3} b1=3(Y2−Y1)+(Y3−Y2)+(Y4−Y3)=3Y4−Y1
b 1 = Y n − Y 1 n − 1 b_1 = {Y_n-Y_1 \over n-1} b1=n−1Yn−Y1
不想改了自己看吧[这些公式编辑起来是真的麻烦]
-------------20200724要准备下班了,不写了,下次继续
-------------我去一晃七月就要过去了,又特么摸了一周的鱼,平安平安
-------------20200814哦草一晃就来到了八月中旬,这里补一个常见的一次二次三次指数平滑。其实指数平滑可以拿来做信号平滑也可以拿来做预测,当然做预测有更好的工具就是了。
# 平滑指数
def calc_next_s(alpha, x):
s = [0 for i in range(len(x))]
s[0] = np.sum(x[0:3]) / float(3)
for i in range(1, len(s)):
s[i] = alpha*x[i] + (1-alpha)*s[i-1]
return s
# 基于平滑指数预测
def time_predict(alpha, x):
s1 = calc_next_s(alpha, x)# 一次
s2 = calc_next_s(alpha,s1)# 二次
s3 = calc_next_s(alpha, s2)# 三次
a3 = [(3 * s1[i] - 3 * s2[i] + s3[i]) for i in range(len(s3))]
b3 = [((alpha / (2 * (1 - alpha) ** 2)) * ((6 - 5 * alpha) * s1[i] - 2 * (5 - 4 * alpha) * s2[i] + (4 - 3 * alpha) * s3[i])) for i in range(len(s3))]
c3 = [(alpha ** 2 / (2 * (1 - alpha) ** 2) * (s1[i] - 2 * s2[i] + s3[i])) for i in range(len(s3))]
pred = a3[-1]+b3[-1]*1+c3[-1]*(1**2)
print(pred))
上图移动平均和指数平滑效果的对比,移动平均的步长是5,指数平滑的
α
\alpha
α是0.1,个人感觉指数平滑去毛刺效果更好。
这里抄一个关于指数平滑
α
\alpha
α的判断方法:
经验判断
1、当时间序列呈现较稳定的水平趋势时,应选较小的α,一般可在0.05~0.20之间取值‘
2、当时间序列有波动,但长期趋势变化不大时,可选稍大的α值,常在0.1~0.4之间取值;
3、当时间序列波动很大,长期趋势变化幅度较大,呈现明显且迅速的上升或下降趋势时,宜选择较大的α值,如可在0.6~0.8间选值。以使预测模型灵敏度高些,能迅速跟上数据的变化。
4、当时间序列数据是上升(或下降)的发展趋势类型,α应取较大的值,在0.6~1之间。
--------------------------------------------20200814 今天一定要多写一点。
3.控制图理论
控制图,用图形化来量化样本特征
- 中心线(CL, Center Line):质量特征的均值
- 上控制限(UCL, Upper Control Limit)和下控制限(LCL, Lower Control Limit):两条水平线
3.1 3 σ \sigma σ控制图
假设w是一个特征序列,w的均值为
μ
w
\mu_w
μw,标准差为
σ
w
\sigma_w
σw.那么有:
UCL =
μ
w
\mu_w
μw + L
σ
w
\sigma_w
σw
CL =
μ
w
\mu_w
μw
LCL =
μ
w
\mu_w
μw - L
σ
w
\sigma_w
σw
这里L是相对中心线的控制距离,用标准差为单位,比如说L=3,那么它就是3 σ \sigma σ控制图
3.2 累计和控制图
假设
x
i
x_i
xi是序列{
x
i
:
1
≤
i
≤
n
x_i:1\leq i\leq n
xi:1≤i≤n}的第i个值,该序列满足正态分布,均值为
μ
\mu
μ,标准差为
σ
\sigma
σ,累计和控制图(CUSUM, cumulative sum control chart )计算方法为:
C
i
=
∑
j
=
1
i
(
x
j
−
μ
0
)
=
C
i
−
1
+
(
x
i
−
μ
0
)
C_i= \sum_{j=1}^i (x_j - \mu_0)= C_{i-1} + (x_i- \mu_0)
Ci=∑j=1i(xj−μ0)=Ci−1+(xi−μ0)
这里
C
0
=
0
C_0=0
C0=0,
μ
0
\mu_0
μ0是目标过程的平均值.
- 若 ∣ C i ∣ |C_i| ∣Ci∣超出决策间隔H,那么该过程就被认为失去控制.
- 决策间隔H为3 σ \sigma σ或者5 σ \sigma σ
不同点
- 3 σ \sigma σ控制:超出3 σ \sigma σ控制限值的一个或多个点
- CUSUM控制:当小位移很重要时,这是一个很好的选择
3.3 表或者算法形式的CUSUM
x
i
x_i
xi满足观察序列{
x
i
:
1
≤
i
≤
n
x_i : 1 \leq i \leq n
xi:1≤i≤n},序列均值为
μ
0
\mu_0
μ0,标准差为
σ
\sigma
σ.统计学
C
+
C^+
C+和
C
−
C^-
C−计算公式如下:
C
i
+
=
m
a
x
[
0
,
x
i
−
(
μ
0
+
K
)
+
C
i
−
1
+
]
C
i
−
=
m
a
x
[
0
,
(
μ
0
−
K
)
−
x
i
+
C
i
−
1
−
]
C_i^+ = max[0, x_i - (\mu_0 + K) + C_{i-1}^+] \\ C_i^- = max[0,(\mu_0 - K) - x_i + C_{i-1}^- ]
Ci+=max[0,xi−(μ0+K)+Ci−1+]Ci−=max[0,(μ0−K)−xi+Ci−1−]
C
0
+
=
C
0
−
=
0
C_0^+ = C_0^- = 0
C0+=C0−=0.K为参考值,计算公式为
K
=
∣
μ
1
−
μ
0
∣
2
K={|\mu_1 - \mu_0| \over 2}
K=2∣μ1−μ0∣,
μ
1
=
μ
0
+
δ
σ
\mu_1 = \mu_0 + \delta\sigma
μ1=μ0+δσ,并且
δ
=
1
\delta=1
δ=1
3.4 指数平滑控制图
指数平滑(指数加权移动平均expoentially weighted moving average )定义如下:
z
i
=
λ
x
i
+
(
1
−
λ
)
z
i
−
1
z_i = \lambda x_i + (1 - \lambda )z_{i-1}
zi=λxi+(1−λ)zi−1