时间序列是按时间顺序索引的一系列数据点,主要有如下两种分析方法:
或者
有观察序列 { 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
有观察序列 { 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
顾名思义带权重的方法[狗头],假设权重关系满足 ∑ 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
有观察数列 { 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
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 今天一定要多写一点。
控制图,用图形化来量化样本特征
假设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 σ控制图
假设 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是目标过程的平均值.
不同点
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
指数平滑(指数加权移动平均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