时间序列一些相关算法

时间序列算法

时间序列是按时间顺序索引的一系列数据点,主要有如下两种分析方法:

  • 频域法:频谱分析和小波法
  • 时域法:自相关和互相关法

或者

  • 参数法
  • 非参数法

 

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,xi1,...,xi(w1),有:

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=0W1xij=Wxi+xi1+...+xi(W1)

若计算的是连续变化的值(新值进来,老值出去),上面公式可以写为:

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=Mi1+WXiWXiW

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,xi1,...,xi(w1),有:

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+nCMAii+1CMAi+Xi+1CMAi

 

1.3加权平均法

顾名思义带权重的方法[狗头],假设权重关系满足 ∑ j = 0 w − 1 w e i g h t j = 1 \sum_{j=0}^{w-1} weight_j = 1 j=0w1weightj=1 , 并且 w e i g h t j ≥ 0 weight_j \geq 0 weightj0 ,有:

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=0w1weightjxij

特别地,如果让权重 { w e i g h t j : 0 < = j < = w − 1 } \{weight_j : 0<=j< =w-1\} {weightj:0<=j<=w1}满足 :

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+(w1)+..+1wj,for: 0<=j<=w1
此时
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+(w1)+...+1wxi+(w1)xi1+...+2xiw+2+xiw+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+...+xiw+1wxi+(w1)xi1+...+xiw+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+1xiw+1Numeratori+wxi+1Totaliw+(w1)+...+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:t1}定义为:

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,αYt1+(1α)St1t=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=α[Yt1+(1α)Yt2+...+(1α)kYt(k+1)]+(1α)k+1St(k+1)
对于任意合适的k ϵ \epsilon ϵ{0, 1,2,…},权重 Y t − i Y_{t-i} Yti α ( 1 − α ) i − i \alpha( 1-\alpha)^{i-i} α(1α)ii

假设有观察数列 { Y t : t > = 1 } \{Y_t: t>=1\} {Yt:t>=1},交替指数加权移动平均序列 { S t : t ≥ 1 } \{S_t: t\ge1\} {St:t1}被定义为:
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α)St1,alternate,t=1t 2
这里,我们使用 Y t Y_t Yt 替代 Y t − 1 Y_{ t-1} Yt1

 

2.2双指数平滑

Suppose { Y t : t ≥ 1 } \{Y_t:t \ge1\} {Yt:t1} 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α)(St1+bt1)

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=β(StSt1)+(1β)bt1)

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=Y2Y1

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(Y2Y1)+(Y3Y2)+(Y4Y3)=3Y4Y1

b 1 = Y n − Y 1 n − 1 b_1 = {Y_n-Y_1 \over n-1} b1=n1YnY1

不想改了自己看吧[这些公式编辑起来是真的麻烦]

-------------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))

  时间序列一些相关算法_第1张图片
上图移动平均和指数平滑效果的对比,移动平均的步长是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:1in}的第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)=Ci1+(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:1in},序列均值为 μ 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)+Ci1+]Ci=max[0,(μ0K)xi+Ci1]
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λ)zi1

你可能感兴趣的:(时间序列)