Time2Graph: Revisiting Time Series Modeling with Dynamic Shapelets(使用动态shapelets重新建模时间序列)
时间序列建模的目的是为了发现按时间排序的数据中的关系。关键问题是如何从一个时间序列中提取关键特征,以前的大部分框架从经典的特性工程和表示学习到基于深度学习的模型。虽然这些方法都取得了很好的效果,但是也因为缺乏可解释性被人诟病。而本文关注的对象shapelet(代表一个类的时间序列子序列)能在分类场景中提供直接的可解释的和解释性的见解,并且基于形状的模型已经被证明在各种实际领域中很有前途。
简介
现有的工作都是将shapelets视作静态的,但是在现实生活中shapelets是动态的。首先,相同的shapelet出现在不同的时间片可能会产生一系列不同的影响。例如,在检测电力盗窃的情况下,夏季或冬季的低耗电量比春季更令人怀疑,因为制冷或供暖设备需要耗费更多的电力。其次,确定shapelets发展的方式对于充分理解时间序列至关重要。事实上,在特定时间具有小值的shapelets很难将一个偷电贼与一个确实经常消耗低电量的普通用户区分开来。另一种方法将涉及到识别那些曾经拥有高耗电量形状但突然间耗电量很少的用户。换句话说,这里的一个重要线索是shapelets是如何随时间发展的。时间序列中能够反映其在不同时间片上代表性的子序列称为时间感知shapelets。
挑战
- 如何定义和提取出时间感知shapelets
- 如何捕捉shapelets的演进
- 如何利用shapelets的演化模式对时间序列进行建模
IDEA
提出了一种新的方法来学习时间序列的表示,通过提取时间感知的shapelets并构造一个shapelets演化图。我们首先定义了一个两层的时间因子来量化shapelets在不同时间的判别能力,然后构造一个图来表示shapelets的演化模式,最后,将shapelets和时间序列表示的学习问题转化为图嵌入问题。
每个月都可以被一个shapelets所表示(即图a中的数字),shapelets形状如图b第一行所示,图b第二行代表该shapelets和各个月份之间的相关性,图c代表shapelets演进图,其中每个节点代表一个shapelets,边代表从一个shapelets演化到另一个shapelets的概率(边越粗代表演化的概率越大)
预先知识
一组时间序列:
T
=
{
t
1
,
t
2
.
.
.
t
∣
T
∣
}
T=\left \{t_1,t_2...t_{|T|} \right \}
T={t1,t2...t∣T∣}
每个时间序列都包含
t
=
{
x
1
,
x
2
,
.
.
.
x
n
}
t=\left \{ x_1,x_2,...x_n\right \}
t={x1,x2,...xn}按时间排序的元素
t
t
t可以被分为长度为
l
l
l的
m
m
m个片段 所以
t
t
t可以表示为
t
=
{
{
x
l
∗
k
+
1
,
.
.
.
,
x
l
∗
k
+
l
}
}
,
0
≤
k
≤
m
−
1
t=\left \{\{ x_{l*k+1},...,x_{l*k+l}\right \}\},0 \leq k \leq m-1
t={{xl∗k+1,...,xl∗k+l}},0≤k≤m−1
两个分片距离度量 d ( s i , s j ) d(s_i,s_j) d(si,sj),如果两个分片的长度不相同那么不能使用欧氏距离,而应该使用DTW(动态规整)来寻找对齐
定义1:对齐
两个片段 s i s_i si和 s j s_j sj可以用DTW来计算最小距离的对齐,一个对齐 a = ( a 1 , a 2 ) a=(a_1,a_2) a=(a1,a2)可以定义为这样的一对坐标序列:
对于一个时间序列来说,片段对于时间序列的距离可以定义为
定义2:shapelets
shapelets v v v是代表某个类的片段。更准确地说,它可以通过一些特定的标准将 T T T分成两个更小的集合,一个接近 v v v,另一个远离 v v v,这样对于一个时间序列分类任务,正样本和负样本可以分成不同的组。该标准可以形式化为
L
L
L度量了正样本和负样本之间的不同,
S
∗
(
v
,
T
)
S_*(v,T)
S∗(v,T)表示相对于特定组
T
∗
T_*
T∗的距离集合,例如正负样本,而
g
g
g用来衡量两个集合间的距离(例如信息增益或KL散度)
Time2Graph Framework
时间感知shapelets提取
局部因子
w
n
w_n
wn表示某一特定shapelet的第n个元素的内部重要性,则将shapelet
v
v
v与片段
s
s
s之间的距离重新定义为
直观解释是将权重w投影到最优DTW路径上
全局因子 目的是测量跨片段间对shapelets的识别能力的影响
通过有监督学习来得到最重要的时间感知shapelets以及对应的
w
i
w_i
wi和
u
i
u_i
ui
具体算法图如下:
- 首先是shapelets候选集的生成算法
- 时间感知shapelet提取算法
shapelets进化图
想法:得到shapelets之后,很多工作直接运用于表示时间序列,但是都忽略shapelets之间的相关性(这里包括同时出现以及出现的顺序等等相关性),所以文章提出使用图来表示这种shapelets之间的相关性
shapelets进化图:定义一个有向带权图, G = ( V , E ) G=(V,E) G=(V,E),每个顶点代表一个shapelets,有向带权边的权重 w i j w_{ij} wij代表shapelet i i i出现在shapelet j j j之后的概率
图的构建:
这里
d
^
i
,
∗
(
v
i
,
∗
,
s
i
)
=
u
∗
[
i
]
∗
d
^
(
v
i
,
∗
,
s
i
∣
w
∗
)
\hat d_{i,*}(v_{i,*},s_i)=u_*[i]*\hat d(v_{i,*},s_i|w_*)
d^i,∗(vi,∗,si)=u∗[i]∗d^(vi,∗,si∣w∗),限制条件
d
^
i
,
∗
≤
δ
\hat d_{i,*} \leq \delta
d^i,∗≤δ,所以shapelet
v
i
,
∗
v_{i,*}
vi,∗以
p
i
,
∗
p_{i,*}
pi,∗的概率被指定给片段
s
i
s_i
si,最后我们将重复边通过把权重相加合并,具体算法见下图:
表示学习
使用DeepWalk对我的shapelets进化图进行embedding,得到了顶点表示向量
μ
∈
R
B
\mu \in \mathbb{R}^B
μ∈RB,B是嵌入空间维数,然后对于每个时间片段
t
=
{
s
1
,
s
2
,
.
.
.
,
s
m
}
t=\{s_1,s_2,...,s_m\}
t={s1,s2,...,sm}相对应的shapelets
{
v
1
,
∗
,
v
2
,
∗
.
.
.
v
m
,
∗
}
\{v_{1,*},v_{2,*}...v_{m,*}\}
{v1,∗,v2,∗...vm,∗},以及他们被赋予的概率
{
p
1
,
∗
,
p
2
,
∗
.
.
.
p
m
,
∗
}
\{p_{1,*},p_{2,*}...p_{m,*}\}
{p1,∗,p2,∗...pm,∗},将每个片段赋予的shapelets向量
μ
(
v
i
,
j
)
\mu(v_{i,j})
μ(vi,j)乘以概率后相加,就得到了每个时间片段的表示如下:
这个时间片段表示可以被应用到下游的分类任务中,比如判断某个时间片是否有偷电的现象
实验部分
五个数据集,对比了不同的方法
启发:这篇文章所提出的时间感知的shapelets相当于是整个时间序列中的一些代表性子序列,这些子序列能够很好地将时间片段划分为正样本和负样本,然后通过赋予内部权重以及全局权重来衡量shapelets对于整个时间序列的分类效果,得到时间感知的shapelets,最后利用shapelets具有演化性的特点,将时间序列建模成shapelets间的演化过程构建图,通过图嵌入来学习shapelets之间的演化,从而能够将时间序列片段表示为shapelets之间的演化过程,从而利用顶点向量进行分类。重点在于对数据的表征学习,不是通过直接将时间片段直接用shapelets来代表,而是通过捕捉shapelets之间的进化关系,这种基于案例的推理也有一定的解释性,可以看出要做解释性还要从数据建模开始,对于特定的数据进行一定的建模(和prototype很相似)。