一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

实现时序特征抽取的方法及装置与流程

2021-12-17 19:19:00 来源:中国专利 TAG:


1.本发明总体说来涉及特征工程领域,更具体地说,涉及一种实现时序特征抽取的方法及装置。


背景技术:

2.在机器学习建模特征工程中,时序特征是指对某条样本进行特征抽取依赖于该条样本的时间戳所处一段时间范围内的历史样本数据,这一时间范围即为时序特征抽取的时间窗口。
3.时序特征是机器学习建模特征工程中非常重要的组成部分,它们能够更好地刻画样本在时间维度的整体特性,有效提升特征的表达能力和质量,增强后续的模型效果。但是在实际建模场景中,时序特征的抽取性能常常面临考验,原因就是时间窗口数据倾斜问题。
4.时间窗口数据倾斜问题是指,按照主键列分区导致不同的分区数据量不均衡或者只能产生少量分区:(1)分区数据量不均衡是指,每个分区数据量等于该分区的主键下数据量,如果不同主键下数据量不均衡,则会导致分区数据量不均衡;(2)分区太少是指,分区数目等于不同主键的数目,如果分区数目太少(比如主键=性别),则计算并行度太小(等价于有很多数据量为0的分区),同样会导致数据倾斜问题。
5.因此,需要一种能够解决数据倾斜问题的时序特征抽取方案。


技术实现要素:

6.本发明的示例性实施例旨在克服时序特征抽取过程中存在的数据倾斜问题。
7.根据本发明的第一个方面,提供了一种实现时序特征抽取的方法,包括:获取输入的数据表;若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值低于阈值,则将总时间范围拆分为多个时间片,时间窗口用于表征对单条数据进行时序特征抽取时需要依赖的数据的时间范围,时间片的时间宽度大于或等于2倍时间窗口长度;按照主键和时间片将数据表中的数据划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同;将多个区块分配给多个计算节点进行时序特征抽取处理。
8.可选地,若数据表中数据随时间均匀分布,则将总时间范围拆分为多个时间片的步骤包括:统计数据表中全量数据的时间字段对应的总时间范围;根据分片数、总时间范围,确定每个时间片的时间宽度,每个时间片的时间宽度等于总时间范围与分片数的比值;按照时间宽度将总时间范围拆分为多个时间片。
9.可选地,若数据表中数据不随时间均匀分布,则将总时间范围拆分为多个时间片的步骤包括:统计数据表中全量数据的直方图,直方图的横轴表示时间字段值,直方图的纵轴表示数据量;基于直方图将总时间范围拆分为多个时间片,其中,不同时间片对应的时间范围内的数据量相等或基本相等。
10.可选地,该方法还包括:判断数据表中数据是否随时间均匀分布。
11.可选地,该方法还包括:由用户指定分片数;或者通过启发式规则设置分片数。
12.可选地,该方法还包括:在将数据表中的每条数据划分到区块的过程中,判断该条数据是否为该条数据所在区块的下一区块中的数据进行时序特征抽取时需要依赖的边界数据;若判定该条数据是边界数据,则将该条数据标记为复制数据并添加到下一区块中,其中,计算节点忽略复制数据的时序特征抽取处理。
13.根据本发明的第二个方面,还提供了一种实现时序特征抽取的装置,包括:获取模块,用于获取输入的数据表;拆分模块,用于若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值低于阈值,则将总时间范围拆分为多个时间片,时间窗口用于表征对单条数据进行时序特征抽取时需要依赖的数据的时间范围,时间片的时间宽度大于或等于2倍时间窗口长度;划分模块,用于按照主键和时间片将数据表中的数据划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同;分配模块,用于将多个区块分配给多个计算节点进行时序特征抽取处理。
14.可选地,若数据表中数据随时间均匀分布,则拆分模块包括:统计模块,用于统计数据表中全量数据的时间字段对应的总时间范围;确定模块,用于根据分片数、总时间范围,确定每个时间片的时间宽度,每个时间片的时间宽度等于总时间范围与分片数的比值;拆分子模块,用于按照时间宽度将总时间范围拆分为多个时间片。
15.可选地,若数据表中数据不随时间均匀分布,则拆分模块包括:统计模块,用于统计数据表中全量数据的直方图,直方图的横轴表示时间字段值,直方图的纵轴表示数据量;拆分子模块,用于基于直方图将总时间范围拆分为多个时间片,其中,不同时间片对应的时间范围内的数据量相等或基本相等。
16.可选地,该装置还包括:第一判断模块,用于判断数据表中数据是否随时间均匀分布。
17.可选地,获取模块还用于获取用户指定的分片数;或者该装置还包括设置模块,用于通过启发式规则设置分片数。
18.可选地,该装置还包括:第二判断模块,用于在划分模块将数据表中的每条数据划分到区块的过程中,判断该条数据是否为该条数据所在区块的下一区块中的数据进行时序特征抽取时需要依赖的边界数据;复制模块,用于若第二判断模块判定该条数据是边界数据,则将该条数据标记为复制数据并添加到下一区块中,其中,计算节点忽略复制数据的时序特征抽取处理。
19.根据本发明的第三个方面,还提出了一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如本发明第一个方面所述的方法。
20.根据本发明的第四个方面,还提出了一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如本发明第一个方面所述的方法。
21.在根据本发明示例性实施例的实现时序特征抽取的方法及装置中,通过同时按照主键和时间片对数据表中的数据进行分区,使得原本倾斜的大数据量分区数据能够被拆分到多个均衡数据量的分区,并且还可以解决因主键数量较少而导致的数据倾斜问题。
附图说明
22.图1示出了根据本发明一个示例性实施例的实现时序特征抽取的方法的流程图;
23.图2示出了根据本发明另一个示例性实施例的实现时序特征抽取的方法的流程图;
24.图3示出了根据本发明示例性实施例的实现时序特征抽取的装置的结构框图。
具体实施方式
25.为了使本领域技术人员更好地理解本发明,下面结合附图和具体实施方式对本发明的示例性实施例作进一步详细说明。
26.图1示出了根据本发明一个示例性实施例的实现时序特征抽取的方法的流程图。图1所示的方法可完全通过计算机程序以软件方式实现,还可通过特定配置的计算装置来执行图1所示的方法。
27.在对数据表中的数据进行时序特征抽取时,如果仅按照主键对数据表中的数据进行分区,将会导致不同分区中的数据量不均衡或者只能产生少量分区,而这两种情况都会导致数据倾斜问题。
28.对数据表中单条数据进行时序特征抽取时需要依赖的数据(一般为时间字段值早于该条数据的历史数据)的时间范围可以称为时间窗口。一般来说,对数据表中不同行数据进行时序特征抽取依赖的数据的时间窗口长度相同。例如,若时序特征抽取为“计算每条交易记录三天内同用户交易总金额”,那么时间窗口长度为“三天”。
29.本实施例主要是针对短时间窗口场景提出的一种数据倾斜解决方案。短时间窗口是指时序特征抽取依赖的时间窗口长度与数据表中全量数据对应的总时间范围的时间长度相比差异较大,即时间窗口长度在总时间范围的时间长度中的占比较小,如时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值低于阈值(为了便于区分,此处的阈值可以称为第一阈值)。举例来说,若时序特征为“交易三天内同用户交易总金额”,全量数据的时间范围是2014年至2020年,时序特征依赖的时间窗口长度“三天”与总时间范围“2014年至2020年”的时间长度“六年”相比较小,此时时序特征依赖的时间窗口“三天”可以视为短时间窗口;相应地,若时序特征为“交易三年内同用户交易总金额”,全量数据的时间范围仍是2014年至2020年,那么时序特征依赖的时间窗口长度“三年”与总时间范围“2014年至2020年”的时间长度“六年”的比值较大,此时时序特征依赖的时间窗口“三年”不再视为短时间窗口,而可以视为长时间窗口。
30.参见图1,在步骤s110,获取输入的数据表。
31.数据表可以视为按行存储的多条数据的集合。数据表中的数据由多个字段值组成,这多个字段值中至少存在一个时间字段值。即,数据表中的每条数据具有一个用于指示时间戳的时间字段值。
32.数据表可以是在线产生的数据表、预先生成并存储的数据表、也可以是通过输入装置或传输媒介而从外部接收的数据表。关于数据表的来源本发明不做限定。
33.在步骤s120,若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值低于阈值,则将总时间范围拆分为多个时间片。其中,每个时间片的时间宽度大于或等于2倍时间窗口。
34.每个时间片对应一个时长范围,时间片的时间宽度也即时间片对应的时长范围的大小。通过将每个时间片的时间宽度设置为大于或等于2倍时间窗口长度,使得每个时间窗口最多落在两个连续的时间片中。
35.作为示例,本发明根据数据表中数据是否随时间均匀分布,提出了两种将时间片拆分方式。
36.方式1、等宽拆分
37.等宽拆分是指将数据表中全量数据的时间字段对应的总时长范围拆分为多个时间宽度相同的时间片。该拆分方式适用于数据表中数据随时间均匀分布的情况,数据表中数据随时间均匀分布也即相同时间间隔内数据量基本相等。在数据表中数据随时间均匀分布的情况下,通过等宽拆分可以保证不同时间片内数据量基本相等,以避免不同分区的数据量不均衡的情况发生。
38.作为示例,首先可以统计数据表中全量数据的时间字段对应的总时间范围。例如,可以扫描(scan)一遍数据表中的数据,统计数据表中全量数据的时间字段(即时间列)的最小值(min)和最大值(max),最小值和最大值之间的时间范围(min,max)即为总时间范围,总时间范围的时间长度可以表示为(max-min)。然后可以基于由用户指定或通过启发式规则设置的分片数n(也可以称为分桶数),确定时间片的时间宽度w,w=(max-min)/n,其中,分片数n应满足w>2
×
时间窗口长度的约束条件。由此,可以按照固定的时间宽度w将总时间范围均等地划分为n个时间片。
39.方式2、等频拆分
40.等频拆分是指以拆分得到的时间片内数据量相差不大为目的,将数据表中全量数据的时间字段对应的总时长范围拆分为多个时间宽不同的时间片。该拆分方式适用于数据表中数据不随时间均匀分布的情况,数据表中数据不随时间均匀分布也即相同时间间隔内数据量差异较大。在数据表中数据不随时间均匀分布的情况下,通过等频拆分可以保证不同时间片内数据量相差不大,以避免不同分区数据量不均衡的情况发生。
41.作为示例,首先可以统计数据表中全量数据的直方图,直方图的横轴表示时间字段值,直方图的纵轴表示数据量。即可以统计数据表中全部数据的时间列的直方图。然后可以基于直方图将总时间范围拆分为多个时间片,不同时间片对应的时间范围内的数据量相等或基本相等。其中,分片数n(即时间片的数量)可以由用户指定或通过启发式规则设置。由此,在数据表中数据不随时间均匀分布的情况下,可以根据数据表中全部数据的时间列的直方图,进行等频分桶,以使得不同时间片对应的时间范围内的数据量相差不大。在等频拆分方式中,不同时间片的时间宽度一般不同,并且时间片的个数n应小于直方图条数。
42.例如,可以以不同时间片内数据量相差不大(如差值低于某一阈值)为目的,将直方图合并为n个时间片,第k个时间片可以表示为(min[k],max[k]),第k个时间片的时间宽度为w[k],并且约束minimum(w[k])>2*窗口长度。其中,min[k]表示第k个时间片中最小的时间字段值,max[k]表示第k个时间片中最大的时间字段值,w[k]=max[k]-min[k]。
[0043]
在步骤s130,按照主键和时间片将数据表中的数据划分到多个区块中。
[0044]
每个区块对应一个时间片,并且同一区块中数据的主键相同。其中,主键是指时序特征抽取依赖的时间窗口范围内数据所共有的字段值,即目标字段值。以时序特征抽取为“计算交易三天内同用户交易总金额”为例,主键可以是指用户id这一目标字段值。
[0045]
区块可以视为主键和时间片这两个维度下的分区结果。作为示例,可以基于数据表中全量数据拥有的主键数、步骤s120得到的多个时间片,确定分区数量,即区块个数,每个区块对应一个“主键 时间片”组合,区块个数=主键数
×
时间片个数。以主键为用户id且用户id包括用户1、用户2以及用户3,时间片包括t1、t2、t3为例,可以设定如下9个区块:(用户1,t1)、(用户1,t2)、(用户1,t3)、(用户2,t1)、(用户2,t2)、(用户2,t3)、(用户3,t1)、(用户3,t2)、(用户3,t3)。
[0046]
按照主键和时间片将数据表中的数据划分到多个区块中,也即针对数据表中的每条数据,可以根据该条数据的时间字段值以及步骤s120拆分得到的多个时间片,确定该条数据的时间字段值所处的时间片,然后根据该条数据的主键值和该条数据的时间字段值所处的时间片,将该条数据划分到对应的分块中。
[0047]
考虑到按照主键和时间片将数据表中的数据划分到多个区块中时,在对区块中位于左侧边界附近的数据进行时序特征抽取处理时,该条数据的时间窗口会跨越时间边界,即需要从上一区块中拉取该条数据的时间窗口覆盖的历史数据,而不同区块的数据一般会分配给不同计算节点,使得跨节点拉取数据实现起来较为复杂。
[0048]
针对这一现象,本发明提出,在将数据表中的每条数据划分到区块的过程中,可以判断该条数据是否为该条数据所在区块的下一区块中的数据进行时序特征抽取时需要依赖的边界数据,若判定该条数据是边界数据,则将该条数据标记为复制数据并添加到下一区块中。其中,区块的下一区块是指与区块对应于相同主键且对应的时间片属于该区块对应的时间片的后一个时间片的区块。
[0049]
作为示例,数据表中的每条数据可以视为一条样本,对于每条样本,可以判断它是否为边界样本,也即判断其是否可能落在更晚时间片内其他样本的时间窗口中。作为示例,可以令bucketid=样本所在的时间片id,timebound=(bucketid,bucketid 1),用于表征bucketid的边界。如果某条样本的时间字段值≤timebound

时间窗口,那么可以判定该条样本是边界样本。如果样本是边界样本,则将样本行复制一份,重新设置其时间片id=bucketid 1,并标记它是被复制的样本。其中,判断样本是否为边界样本以及将属于边界样本的样本进行复制并重新设置其所处时间片的操作可以与步骤s120同时进行。即,边界样本会经过复制落到两个区块中,这样可以避免对数据表中数据的多次遍历,提高数据处理效率。
[0050]
通过将属于边界数据的数据标记为复制数据并添加到下一区块中,使得分配给计算节点的区块中的每条数据进行时序特征抽取处理时所需的时间窗口内的数据能够完全落在相同分区,计算节点无需再跨区块拉取数据即可完成对分配给其的区块中每条数据的时序特征抽取处理。
[0051]
区块中被标记为复制数据的数据无需进行时序特征抽取处理,即计算节点可以忽略区块中被标记为复制数据的数据的时序特征抽取处理。换言之,复制数据在区块中只作为其他非复制数据进行时序特征抽取处理时的时间窗口内容被处理,该复制数据本身的时序特征抽取处理会在其原始时间片所对应区块计算。
[0052]
在步骤s140,将多个区块分配给多个计算节点进行时序特征抽取处理。
[0053]
可以为单个计算节点分配一个或多个区块。计算节点在获取到为其分配的区块后,就可以对区块中的每条数据(非复制数据)进行时序特征抽取处理。其中,不同计算节点
可以并行执行。
[0054]
综上,本发明通过同时按照主键和时间片对数据表中的数据进行分区,使得原本倾斜的大数据量分区数据能够被拆分到多个均衡数据量的分区(即上文述及的区块)上,并且还可以解决因主键数量较少而导致的数据倾斜问题。例如,假设主键为包括“男”、“女”两个数量的性别字段,如果仅按照主键进行分区,只会得到两个分区数据,而这会使得并行度太小,造成很多计算节点闲置,而通过同时按照主键和时间片对数据表中的数据进行分区,则可以提高分区数量,进而解决因主键数量较少而导致的数据倾斜问题。另外,本发明在原则上无需判断数据表中是否存在倾斜数据,也无需对倾斜主键和不倾斜主键分情况处理。
[0055]
本发明图1所示方法的示例性实现过程如下所示。
[0056]
假设时序特征抽取处理操作为,计算下面数据表中每行交易的“交易三天内同用户交易总金额”。
[0057]
用户id交易时间交易金额02019.09.301$12019.09.272¥02019.09.243$12019.09.214¥02019.09.185$12019.09.156¥02019.09.127¥
[0058]
1、时间维度分桶
[0059]
以采用等宽分桶(对应于上文述及的等宽拆分)为例,桶数目(对应于上文述及的分片数)n=2,总时间范围(min=2019.09.12,max=2019.09.30),则桶宽度(对应于上文述及的时间片的时间宽度)w=(30

12)/2=9天,带桶id(也即时间片id)的表如下:
[0060]
用户id交易时间交易金额bucketid02019.09.301$202019.09.272¥102019.09.243$112019.09.214¥112019.09.185$012019.09.156¥002019.09.127¥0
[0061]
2、数据表分区
[0062]
a)边界行复制
[0063]
2019.09.21和2019.09.18这两个交易时间对应的数据行属于边界数据,需要复制,并重新设置复制数据所处的分桶(即时间片)。
[0064]
复制后结果为:
[0065]
用户id交易时间交易金额bucketid02019.09.301$2
02019.09.272¥202019.09.272¥102019.09.243$112019.09.214¥112019.09.185$112019.09.185$012019.09.156¥002019.09.127¥0
[0066]
b)按照用户id 桶id分区(也即分块)结果如下:
[0067]
分区(0,2)
[0068]
02019.09.301$202019.09.272¥2
[0069]
分区(0,1)
[0070]
02019.09.272¥102019.09.243$1
[0071]
分区(1,1)
[0072]
12019.09.214¥112019.09.185$1
[0073]
分区(1,0)
[0074]
12019.09.185$012019.09.156¥0
[0075]
分区(0,0)
[0076]
02019.09.127¥0
[0077]
c)分区分配
[0078]
上述多个分区可以分配给多个计算节点,如可以将分区(0,2)分配给计算节点1,将分区(0,1)分配给计算节点2,将分区(1,1)分配给计算节点3,分区(1,0)分配给计算节点4,将分区(0,0)分配给计算节点5。计算节点在接收到分配的分区(即区块)后,可以对分区中的数据进行排序,如可以按用户id 时间字段值排序,排序结果同上。
[0079]
d)特征计算
[0080]
除去被复制的数据,每条数据的时间窗口都在同一分区,总的时序特征抽取结果如下。
[0081][0082]
至此,结合图1就本发明针对短时间窗口情况下的时序特征抽取实现方案做了详细说明。本发明的实现时序特征抽取的方法可以依托于分布式计算框架,即可以利用分布式计算框架执行本发明的实现时序特征抽取的方法。其中,分布式计算框架可以是但不限于map-reduce计算框架,如spark框架。关于利用分布式计算框架(如map-reduce计算框架)的具体实现细节,本发明不再赘述。
[0083]
另外,本发明还提供了一种针对长时间窗口的实现时序特征抽取的方案。长时间窗口是指时序特征抽取依赖的时间窗口长度与数据表中全量数据对应的时间范围的时间长度相比差异不大,即时间窗口长度在总时间范围的时间长度中的占比较大,如时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值高于阈值。
[0084]
本本发明针对长时间窗口提出了一种时序特征抽取处理优化方案,该优化方案能够实施的前提是时序特征抽取操作为沿时间维度的可聚合计算。可聚合计算是指针对时间窗口内的时序特征抽取操作,可以将时间窗口拆分为不相交的子时间段,每个子时间段各自独立计算子时序特征抽取结果,通过聚合子时序特征抽取结果可以得到时间窗口内最终的时序特征抽取结果。其中,求和、求最大值/最小值等时序特征抽取操作均属于可聚合计算。
[0085]
本发明针对长时间窗口提出的时序特征抽取处理优化方案的原理是,将数据表中全量数据的时间字段对应的总时间范围拆分为多个时间片,将数据表中单条数据的时间窗口内的时序特征抽取处理拆分为:固定时间片(包括下文述及的前缀时间部分和后缀时间部分)的局部计算 不同时间片的归并计算。其中,时间片的特征计算可以仅执行一次,即时间片的特征计算可以一次计算到处使用。由此,通过充分复用时间片的计算结果,使得本发明具备有效均衡分区并行计算的优势,并且可以减少冗余计算。
[0086]
下面结合图2就本发明针对长时间窗口提出的时序特征抽取处理优化方案的具体实现细节做进一步说明。
[0087]
图2示出了根据本发明另一个示例性实施例的实现时序特征抽取的方法的流程图。图2所示的方法可完全通过计算机程序以软件方式实现,还可通过特定配置的计算装置来执行图2所示的方法。
[0088]
参见图2,在步骤s210,获取输入的数据表。关于步骤s210可以参见上文结合图1中步骤s110的描述,此处不再赘述。
[0089]
在步骤s220,若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围
的时间长度的比值高于阈值(为了便于区分,可以称为第二阈值),且时序特征抽取操作为沿时间维度的可聚合计算,则将总时间范围拆分为多个时间片,时间窗口能够整除时间片。
[0090]
在时序特征抽取操作满足可聚合计算的情况下,可以将数据表中全量数据的时间字段对应的总时间范围拆分为多个时间片,时间片的时间宽度(也即时间长度)应设置为能够被时间窗口整除,并且这多个时间片的时间宽度可以相同,即可以将总时间范围均等地拆分为多个时间片。例如,假设总时间范围为2014-2019(年),时间窗口为“三年”,那么可以将其拆分为2014-2015、2015-2016、2016-2017、2017-2018、2018-2019等多个短时间片。
[0091]
在步骤s230,按照主键和时间片将数据表中的数据划分到多个区块中。关于步骤s230可以参见上文结合图1中步骤s130的描述,此处不再赘述。
[0092]
在步骤s240,将多个区块分配给多个第一计算节点进行局部时序特征抽取处理。
[0093]
本实施例将单条数据在时间窗口内的时序特征抽取处理拆分为三部分局部时序特征抽取处理:前缀时间部分的特征计算、后缀时间部分的特征计算以及位于前缀时间部分和后缀时间部分之间的区块的特征计算。前缀时间部分对应于该条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围;后缀时间部分对应于该条数据的时间窗口内时间字段值最早的数据(为了便于区分可以称为第一条数据)到该数据(即第一条数据)所在区块与后一个区块的时间边界这一时间范围;位于前缀时间部分和后缀时间部分之间的区块,是指位于前缀时间部分和后缀时间部分之间的时间片所对应的区块中与该条数据对应于相同主键的区块。其中,区块的前一个区块是指与区块对应于相同主键且对应的时间片属于该区块对应的时间片的前一个时间片的区块,区块的后一个区块是指与区块对应于相同主键且对应的时间片属于该区块对应的时间片的后一个时间片的区块。
[0094]
为了便于描述,对某条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围内的数据进行特征计算(也即局部时序特征抽取)得到的特征可以称为该条数据的前缀聚合子特征,前缀聚合子特征用于表征某条数据所在区块与前一个区块的时间边界这一时间范围内的数据的局部时序特征抽取结果。对某条数据的时间字段值到该条数据所在区块与后一个区块的时间边界这一时间范围内的数据进行特征计算得到的特征可以称为该条数据的后缀聚合子特征,后缀聚合子特征用于表征某条数据所在区块与后一个区块的时间边界这一时间范围内的数据的局部时序特征抽取结果。对区块中全量数据进行特征计算得到的特征可以称为该区块的区块聚合子特征,区块聚合子特征用于表征区块中全量数据的局部时序特征抽取结果。
[0095]
举例来说,假设数据表为多个用户的交易记录表,数据表中全量数据对应的总时间范围为2014-2020(年),时序特征抽取处理为“计算交易三年内同用户交易总金额”,对2014

2020拆分得到2014

2015、2015-2016、2016

2017、2017

2018、2018

2019、2019

2020这6个时间片。对用户a的时间字段值为2019.05.04的这条交易数据的时序特征抽取处理可以拆分为:
[0096]
(2016.05.04

2017.01.01用户a交易总金额)
[0097]
(2017

2018用户a交易总金额)
[0098]
(2018

2019用户a交易总金额)
[0099]
(2019.01.01

2019.05.04用户a交易总金额)。
[0100]
其中,2019.01.01

2019.05.04为前缀时间部分,“2019.01.01

2019.05.04用户a
2020.01.01。按照主键(即用户id) 时间片对数据表中的数据进行分区,可以得到多个区块,区块数量=主键数
×
时间片个数。对每个区块中的全量数据进行聚合特征计算,可以得到每个区块的区块聚合子特征,此处每个区块的区块聚合子特征用于表示“同用户在每个时间片分桶范围内的交易总金额”。
[0107]
2、前缀聚合子特征的计算
[0108]
针对分配给第一计算节点的区块中的每条数据,第一计算节点可以对该区块中该条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的前缀聚合子特征。
[0109]
举例来说,假设时序特征抽取处理为“计算交易三年内同用户交易总金额”,分配给某个第一计算节点的区块数据为某个用户在2019.01.01-2020.01.01这一时间片内的交易金额数据,那么对于区块中一条时间字段值为2019.05.04的交易金额数据,该第一计算节点可以计算该用户在2019.01.01-2019.05.04这一时间范围内的交易总金额,以得到该条交易金额数据的前缀聚合子特征。
[0110]
作为示例,第一计算节点可以对分配给其的区块中的全量数据按照时间字段值进行增序排列,以得到第一序列数据,针对第一序列数据中的每条数据,计算节点可以根据该条数据以及第一序列数据中位于该条数据之前的数据进行特征计算,得到该条数据的前缀聚合子特征。
[0111]
作为示例,第一计算节点也可以对分配给其的区块中的全量数据按照时间字段值进行降序排列,以得到第二序列数据,针对第二序列数据中的每条数据,计算节点可以根据该条数据以及第二序列数据中位于该条数据之后的数据进行聚合特征计算,得到该条数据的前缀聚合子特征。
[0112]
由于计算某条数据的前缀聚合子特征所需的时间窗口数据均位于单个区块中,不存在跨区块拉取数据的问题,因此不同区块中数据的前缀聚合子特征的计算可以并行执行。
[0113]
3、后缀聚合子特征的计算
[0114]
针对分配给第一计算节点的区块中的单条数据,第一计算节点可以对该区块中该条数据的时间字段值到该条数据所在区块与后一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的后缀聚合子特征。
[0115]
举例来说,假设时序特征抽取处理为“计算交易三年内同用户交易总金额”,分配给某个第一计算节点的区块数据为某个用户在2016.01.01-2017.01.01这一时间片内的交易金额数据,那么对于区块中一条时间字段值为2016.05.04的交易金额数据,该第一计算节点可以计算该用户在2016.05.04-2017.01.01这一时间范围内的交易总金额,以得到该条交易金额数据的后缀聚合子特征。
[0116]
作为示例,第一计算节点可以对分配给其的区块中的全量数据按照时间字段值进行降序排列,以得到第二序列数据,针对第二序列数据中的每条数据,计算节点根据该条数据以及第二序列数据中位于该条数据之前的数据进行特征计算,得到该条数据的后缀聚合子特征。
[0117]
作为示例,第一计算节点也可以对分配给其的区块中的全量数据按照时间字段值进行增序排列,以得到第一序列数据,针对第一序列数据中的每条数据,计算节点根据该条
数据以及第一序列数据中位于该条数据之后的数据进行聚合特征计算,得到该条数据的后缀聚合子特征。
[0118]
由于计算某条数据的后缀聚合子特征所需的时间窗口数据均位于单个区块中,不存在跨区块拉取计算所需数据的问题,因此不同区块中数据的后缀聚合子特征的计算可以并行执行。
[0119]
如上文所述,数据表中单条数据在时间窗口内的时序特征抽取处理可以拆分为三部分局部时序特征抽取处理:前缀时间部分的特征计算(即前缀聚合子特征)、后缀时间部分的特征计算(即后缀聚合子特征)以及位于前缀时间部分和后缀时间部分之间的区块的特征计算(即区块聚合子特征)。
[0120]
而借助多个第一计算节点可以得到各个区块的区块聚合子特征、各个区块中每条数据的前缀聚合子特征和后缀聚合子特征。因此,在计算数据表中每条数据的时序特征抽取结果时,可以直接查找对应的前缀聚合子特征、后缀聚合子特征以及区块聚合子特征,基于查找到的前缀聚合子特征、后缀聚合子特征以及区块聚合子特征,确定该条数据的时序特征抽取结果。如可以将查找到的前缀聚合子特征、后缀聚合子特征以及区块聚合子特征进行聚合计算,以得到该条数据的时序特征抽取结果。
[0121]
具体来说,针对数据表中的单条数据,可以首先确定该条数据的前缀时间部分、后缀时间部分以及位于前缀时间部分和后缀时间部分之间的时间片;然后基于对前缀时间部分内数据进行特征计算得到的前缀聚合子特征、对后缀时间部分内数据进行特征计算得到的后缀聚合子特征以及对位于前缀时间部分和后缀时间部分之间的时间片所对应的区块中与该条数据对应于相同主键的区块中的全量数据进行特征计算得到的区块聚合子特征,确定该条数据的时序特征抽取结果。其中,对前缀时间部分内数据进行特征计算得到的前缀聚合子特征,也即该条数据的前缀聚合子特征,对后缀时间部分内数据进行特征计算得到的后缀聚合子特征,也即该条数据的时间窗口内时间字段值最早的第一条数据的后缀聚合子特征。
[0122]
在本发明中,可以由不同于第一计算节点的第二计算节点计算数据表中每条数据的时序特征抽取结果。为了便于第二计算节点确定每条数据的时间窗口内时间字段值最早的第一条数据,本发明提出,可以对输入表中的每条数据进行复制,将复制的数据标记为复制数据,并重置复制数据所处时间片,重置后复制数据所处时间片k

=k t/w,其中,k为重置前数据所处时间片的序号,t为时间窗口的时间长度,w为时间片的时间长度,然后按照主键和时间片将数据表中的数据重新划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同。由此,可以保证每条数据和其时间窗口内时间字段值最早的第一条数据处在同一区块,也即处于相同分区。最后可以将重新划分后得到的多个区块分配给多个第二计算节点,由第二计算节点计算分配给其的区块中每条非复制数据的时序特征抽取结果。
[0123]
针对分配给第二计算节点的区块中的每条非复制数据,由于该条数据的时间窗口内时间字段值最早的数据(即第一条数据)与该条数据处于同一分区,因此第二计算节点可以在该区块中查找该条数据的时间窗口内时间字段值最早的复制数据,作为该条非复制数据的时间窗口内时间字段值最早的第一条数据。在查找到第一条数据后,第二计算节点可以对由第一计算节点计算得到的该条非复制数据的前缀聚合子特征、第一条数据的后缀聚
合子特征,以及该条非复制数据的时间窗口覆盖的完整时间片所对应与该条非复制数据具有相同主键的区块的区块聚合子特征进行聚合处理,以得到该条数据的时序特征抽取结果。
[0124]
举例来说,本发明约束了时间窗口的窗口长度能够整除时间片的时间宽度w,因此假设某条数据所处时间片id为k,可以保证该条数据的时间窗口内最后一条数据r_last所处时间片id为(k-时间窗口长度/w),其中,最后一条数据r_last也即数据r的时间窗口内时间字段值最早的数据,即上文述及的第一条数据。在对数据表中每条数据进行复制后,对于每条复制数据,可以重置时间片k

=k 时间窗口长度/w,并标记复制数据。然后按照(主键,时间片id)对数据表中数据(包括复制数据和非复制数据)进行分区,对于每个区块内的每条数据r:
[0125]
(1)在区块内查找r_last;
[0126]
(2)计算r所属时间片k;
[0127]
(3)计算r_last所属时间片k_last;
[0128]
(4)获得区块聚合子特征的计算结果,r主键下第i个时间片的区块聚合子特征的计算结果表示为partial_sum(i)。
[0129]
那么数据r的时序特征抽取结果f(r)可以记为,
[0130]
f(r)=suffix_sum(r_last)
[0131]
partial_sum(k_last 1)
[0132]
partial_sum(k_last 2)


[0133]
partial_sum(k

1)
[0134]
prefix_sum(r)。
[0135]
其中,suffix_sum(r_last)表示数据r_last的后缀聚合子特征,prefix_sum(r)表示数据r的前缀聚合子特征。
[0136]
不同区块内数据的时序特征抽取结果的计算可以并行进行。并且同分区内无需遍历完整的时间窗口,而是直接利用由第一计算节点计算得到的局部时序特征抽取结果(即前缀聚合子特征、后缀聚合子特征以及区块聚合子特征),因此可以减少大量冗余计算。例如,如果一行样本交易时间为2019.05.04且用户id=1,其时间窗口最后一条交易发生在2016.09.04;则其时序特征可以直接计算如下:
[0137]
sum(至2019.05.04三年内用户1交易金额)=sum(2016.09.04

2019.05.04|用户id=1)=suffix_sum(2016.09.04

2017.01.01|用户id=1)
[0138]
partial_sum(2017.01.01

2018.01.01|用户id=1)
[0139]
partial_sum(2018.01.01

2019.01.01|用户id=1)
[0140]
prefix_sum(2019.01.01

2019.05.04|用户id=1)。
[0141]
至此,结合图2就本发明针对长时间窗口情况下的时序特征抽取实现方案做了详细说明。
[0142]
作为示例,在获取了输入的数据表后,可以根据具体的时序特征抽取逻辑,判断时间窗口属于短时间窗口还是长时间窗口,根据判断结果确定使用何种时序特征抽取方案(图1所示方案or图2所示方案)。其中,判断时间窗口属于短时间窗口还是长时间窗口的操作,可以人为实现,也可以通过设置相应的阈值自动判断。
[0143]
另外,还可以预先判断数据表中是否可能存在数据倾斜,在判定数据表中存在数据倾斜的情况下再判断具体使用本发明提供的何种方案。若判定数据表中不存在数据倾斜问题,则可以使用现有的分区方案,即按照主键对数据表中的数据进行分区。例如,可以通过预跑一遍对数据表进行降采样后的数据,统计记录下来的不同并行任务运行时间的分布比例,或者预先统计一遍数据表中不同主键下的数据量,来判断是否存在倾斜键。
[0144]
本发明的实现时序特征抽取的方法还可以实现为一种实现时序特征抽取的装置。图3示出了根据本发明示例性实施例的实现时序特征抽取的装置的结构框图。其中,实现时序特征抽取的装置的功能单元可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图3所描述的功能单元可以组合起来或者划分成子单元,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能单元的任何可能的组合、或者划分、或者更进一步的限定。
[0145]
下面就实现时序特征抽取的装置可以具有的功能单元以及各功能单元可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文相关描述,这里不再赘述。
[0146]
参见图3,实现时序特征抽取的装置300包括获取模块310、拆分模块320、划分模块330以及分配模块340。
[0147]
作为示例,实现时序特征抽取的装置300可以用于实现短时间窗口情况下的时序特征抽取处理。获取模块310用于获取输入的数据表;拆分模块320用于若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值低于阈值,则将总时间范围拆分为多个时间片,时间窗口用于表征对单条数据进行时序特征抽取时需要依赖的数据的时间范围,时间片的时间宽度大于或等于2倍时间窗口长度;划分模块330用于按照主键和时间片将数据表中的数据划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同;分配模块340用于将多个区块分配给多个计算节点进行时序特征抽取处理。
[0148]
若数据表中数据随时间均匀分布,则拆分模块320可以包括统计模块、确定模块以及拆分子模块。统计模块用于统计数据表中全量数据的时间字段对应的总时间范围;确定模块用于根据分片数、总时间范围,确定每个时间片的时间宽度,每个时间片的时间宽度等于总时间范围与分片数的比值;拆分子模块用于按照时间宽度将总时间范围拆分为多个时间片。
[0149]
若数据表中数据不随时间均匀分布,则拆分模块320可以包括统计模块和拆分子模块。统计模块,用于统计数据表中全量数据的直方图,直方图的横轴表示时间字段值,直方图的纵轴表示数据量;拆分子模块,用于基于直方图将总时间范围拆分为多个时间片,其中,不同时间片对应的时间范围内的数据量相等或基本相等。
[0150]
实现时序特征抽取的装置300还可以包括第一判断模块,用于判断数据表中数据是否随时间均匀分布。
[0151]
获取模块还可以用于获取用户指定的分片数;或者实现时序特征抽取的装置300还可以包括设置模块,用于通过启发式规则设置分片数。
[0152]
实现时序特征抽取的装置300还可以包括第二判断模块和复制模块。第二判断模块用于在划分模块将数据表中的每条数据划分到区块的过程中,判断该条数据是否为该条数据所在区块的下一区块中的数据进行时序特征抽取时需要依赖的边界数据;复制模块用
于若第二判断模块判定该条数据是边界数据,则将该条数据标记为复制数据并添加到下一区块中,其中,计算节点忽略复制数据的时序特征抽取处理。
[0153]
作为示例,实现时序特征抽取的装置300还用于实现长时间窗口情况下的时序特征抽取处理。其中,获取模块310用于获取输入的数据表。拆分模块320用于若时间窗口长度与数据表中全量数据的时间字段对应的总时间范围的时间长度的比值高于阈值,且时序特征抽取为沿时间维度的可聚合计算,则将总时间范围拆分为多个时间片,时间窗口用于表征对单条数据进行时序特征抽取时需要依赖的数据的时间范围,时间窗口能够整除时间片。划分模块330用于按照主键和时间片将数据表中的数据划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同。分配模块340用于将多个区块分配给多个第一计算节点进行局部时序特征抽取处理,以得到各个区块的区块聚合子特征、各个区块中每条数据的前缀聚合子特征和后缀聚合子特征,区块聚合子特征用于表征区块中全量数据的局部时序特征抽取结果,前缀聚合子特征用于表征某条数据所在区块与前一个区块的时间边界这一时间范围内的数据的局部时序特征抽取结果,后缀聚合子特征用于表征某条数据所在区块与后一个区块的时间边界这一时间范围内的数据的局部时序特征抽取结果。
[0154]
分配模块340可以将同一区块分配给单个第一计算节点,第一计算节点对分配到的区块中的全量数据进行特征计算,以得到该区块的区块聚合子特征,针对区块中的每条数据,第一计算节点对该区块中该条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的前缀聚合子特征,针对区块中的每条数据,第一计算节点对该区块中该条数据的时间字段值到该条数据所在区块与后一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的后缀聚合子特征。
[0155]
分配模块340还可以同一区块分别分配给三个第一计算节点,三个第一计算节点中的第一个计算节点用于对分配给该计算节点的区块中的全量数据进行特征计算,以得到该区块的区块聚合子特征,三个第一计算节点中的第二个计算节点用于针对分配给该计算节点的区块中的每条数据,对该区块中该条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的前缀聚合子特征,三个第一计算节点中的第三个计算节点用于针对分配给该计算节点的区块中的每条数据,对该区块中该条数据的时间字段值到该条数据所在区块与后一个区块的时间边界这一时间范围内的数据进行特征计算,以得到该条数据的后缀聚合子特征。
[0156]
实现时序特征抽取的装置300还可以包括第一确定模块和第二确定模块。第一确定模块用于针对数据表中的单条数据,确定该条数据的前缀时间部分、后缀时间部分以及位于前缀时间部分和后缀时间部分之间的时间片,前缀时间部分对应于该条数据的时间字段值到该条数据所在区块与前一个区块的时间边界这一时间范围,后缀时间部分对应于该条数据的时间窗口内时间字段值最早的第一条数据到该条第一条数据所在区块与后一个区块的时间边界这一时间范围。第二确定模块用于基于对前缀时间部分内数据进行特征计算得到的前缀聚合子特征、对后缀时间部分内数据进行特征计算得到的后缀聚合子特征以及对位于前缀时间部分和后缀时间部分之间的时间片所对应的区块中与该条数据对应于相同主键的区块中的全量数据进行特征计算得到的区块聚合子特征,确定该条数据的时序
特征抽取结果。
[0157]
实现时序特征抽取的装置300还可以包括复制模块。复制模块,用于对输入表中的每条数据进行复制,将复制的数据标记为复制数据,并重置复制数据所处时间片,重置后复制数据所处时间片k

=k t/w,其中,k为重置前数据所处时间片的序号,t为时间窗口的时间长度,w为时间片的时间长度,划分模块按照主键和时间片将数据表中的数据重新划分到多个区块中,其中,每个区块对应一个时间片,并且同一区块中数据的主键相同,分配模块将划分模块重新划分后得到的多个区块分配给多个第二计算节点,由第二计算节点计算分配给其的区块中每条非复制数据的时序特征抽取结果。
[0158]
针对分配给第二计算节点的区块中的每条非复制数据,第二计算节点在该区块中查找该条数据的时间窗口内时间字段值最早的复制数据,作为该条非复制数据的时间窗口内时间字段值最早的第一条数据,第二计算节点对由第一计算节点计算得到的该条非复制数据的前缀聚合子特征、第一条数据的后缀聚合子特征,以及该条非复制数据的时间窗口覆盖的完整时间片所对应与该条非复制数据具有相同主键的区块的区块聚合子特征进行聚合处理,以得到该条数据的时序特征抽取结果。
[0159]
应该理解,根据本发明示例性实施例的实现时序特征抽取的装置300的具体实现方式可参照结合图1、图2描述的相关具体实现方式来实现,在此不再赘述。
[0160]
以上参照图1、图2描述了根据本发明示例性实施例的实现时序特征抽取的方法、实现时序特征抽取的装置。应理解,上述方法可通过记录在计算可读介质上的程序来实现,例如,根据本发明的示例性实施例,可提供一种存储指令的计算机可读存储介质,其中,在所述计算机可读介质上记录有用于执行图1或图2示出的时序数据的处理方法的计算机程序。
[0161]
上述计算机可读介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序除了可用于执行除了图1或图2示出的步骤之外,还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经参照图1或图2进行了描述,这里为了避免重复将不再进行赘述。
[0162]
应注意,根据本发明示例性实施例的实现时序特征抽取的装置,可完全依赖计算机程序的运行来实现相应的功能,即,各个装置与计算机程序的功能架构中与各步骤相应,使得整个系统通过专门的软件包(例如,lib库)而被调用,以实现相应的功能。
[0163]
另一方面,图3所示的各个装置也可以通过硬件、软件、固件、中间件、微代码或其任意组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。
[0164]
例如,本发明的示例性实施例还可以实现为计算装置,该计算装置包括存储部件和处理器,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行实现时序特征抽取的方法。
[0165]
具体说来,所述计算装置可以部署在服务器或客户端中,也可以部署在分布式网络环境中的节点装置上。此外,所述计算装置可以是pc计算机、平板装置、个人数字助理、智能手机、web应用或其他能够执行上述指令集合的装置。
[0166]
这里,所述计算装置并非必须是单个的计算装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。计算装置还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。
[0167]
在所述计算装置中,处理器可包括中央处理器(cpu)、图形处理器(gpu)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
[0168]
根据本发明示例性实施例的实现时序特征抽取的方法中所描述的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。
[0169]
处理器可运行存储在存储部件之一中的指令或代码,其中,所述存储部件还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。
[0170]
存储部件可与处理器集成为一体,例如,将ram或闪存布置在集成电路微处理器等之内。此外,存储部件可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储部件和处理器可在操作上进行耦合,或者可例如通过i/o端口、网络连接等互相通信,使得处理器能够读取存储在存储部件中的文件。
[0171]
此外,所述计算装置还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。计算装置的所有组件可经由总线和/或网络而彼此连接。
[0172]
根据本发明示例性实施例的实现时序特征抽取的方法所涉及的操作可被描述为各种互联或耦合的功能块或功能示图。然而,这些功能块或功能示图可被均等地集成为单个的逻辑装置或按照非确切的边界进行操作。
[0173]
例如,如上所述,根据本发明示例性实施例的实现时序特征抽取的装置可包括存储部件和处理器,其中,存储部件中存储有计算机可执行指令集合,当所述计算机可执行指令集合被所述处理器执行时,执行上文述及的实现时序特征抽取的方法。
[0174]
以上描述了本发明的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本发明不限于所披露的各示例性实施例。在不偏离本发明的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献