1. 半衰期与时间窗口
在加权计算当中,例如回归模型,当需要确定权重时,对于时间序列数据,由于时间远近不同,影响程度不同,因此要对不同时间的数据赋予不同权重。
指数衰减法是常用的确定权重的方法。在进行权重计算时,要给定数据所来自的时间段,即时间窗口,以及半衰期,即权重衰减到一半所需要的时间。例如,选择252天作为时间窗口,63天作为半衰期,则当前为
t
t
t天,第
t
−
63
t-63
t−63天的权重为0.5,并且距离
t
t
t越远,权重越小。
2. 指数衰减法确定权重
2.1 指数衰减公式
指数衰减的公式为:
w
i
=
e
−
λ
⋅
i
w_i = e^{-\lambda \cdot i}
wi=e−λ⋅i
其中
w
i
w_i
wi是第
i
i
i个数据点的权重,
λ
\lambda
λ 是衰减系数,
i
i
i 是时间间隔。
2.2 衰减系数与半衰期的关系
我们希望在半衰期
h
h
h之后,权重减为原来的一半,即:
w
h
=
e
−
λ
⋅
h
=
1
2
w_h = e^{-\lambda \cdot h} = \frac{1}{2}
wh=e−λ⋅h=21
对该公式取对数:
−
λ
⋅
h
=
ln
(
1
2
)
-\lambda \cdot h = \ln\left(\frac{1}{2}\right)
−λ⋅h=ln(21)
由于
ln
(
1
2
)
=
−
ln
(
2
)
\ln\left(\frac{1}{2}\right) = -\ln(2)
ln(21)=−ln(2),可以得到:
−
λ
⋅
h
=
−
ln
(
2
)
-\lambda \cdot h = -\ln(2)
−λ⋅h=−ln(2)
将负号消去,得到衰减系数:
λ
=
ln
(
2
)
h
\lambda = \frac{\ln(2)}{h}
λ=hln(2)
2.3 权重的计算
知道了衰减系数 λ \lambda λ后,可以使用指数衰减公式计算每个时间点的权重:
w i = e − λ ⋅ i w_i = e^{-\lambda \cdot i} wi=e−λ⋅i
并对权重进行归一化,使其总和为 1。即 w i ′ = w i / ∑ i = 1 n w i w_i ^ {'} = w_i / \sum_{i=1}^{n} w_i wi′=wi/∑i=1nwi
3. 代码实现
import numpy as np
def half_decay_weight(h, window):
lamda = np.log(2) / h
weight = np.exp(-lamda * range(window))
return weight / np.sum(weight)
此时返回值就是权重数组了。