异常资金调度计划的检测方法、装置及服务器
技术领域
本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种异常资金调度计划的检测方法、装置及服务器。
背景技术
对于部分用户,其可能会拥有多个账户。对于该多个账户,可能需要定期地执行资金转入转出的操作。为了减少人工操作,可以设置自动的资金调度计划。如,设置的资金调度计划可以为:从A账号转出资金至B账号,从B账号转出资金至C账号,最后又从C账号转出资金至A账号。对于该资金调度计划,如果转账频率设置很小,那么资金调度计划就会出现异常,如,会导致大量的循环调用。因此,如何对异常资金调度计划进行检测就成为要解决的问题。
发明内容
本说明书一个或多个实施例描述了一种异常资金调度计划的检测方法、装置及服务器,可以准确地对异常的资金调度计划进行检测。
第一方面,提供了一种异常资金调度计划的检测方法,包括:
在用户的新的资金调度计划创建后,确定所述用户的多个账户;
获取与所述多个账户相关联的一个或多个资金调度计划;所述资金调度计划包括多个账户之间的资金调度关系;
根据所述资金调度计划,生成至少一个资金调度有向图;所述资金调度有向图中的节点与所述账户相对应,所述资金调度有向图中的有向边与账户之间的资金调度关系相对应;
根据预设的图遍历算法,检测所述资金调度有向图中是否存在环路;
如果存在环路,则获取所述环路中各个节点的资金调拨频率;
根据所述资金调拨频率,确定所述新的资金调度计划是否存在异常。
第二方面,提供了一种异常资金调度计划的检测装置,包括:
确定单元,用于在用户的新的资金调度计划创建后,确定所述用户的多个账户;
获取单元,用于获取与所述确定单元确定的所述多个账户相关联的一个或多个资金调度计划;所述资金调度计划包括多个账户之间的资金调度关系;
生成单元,用于根据所述获取单元获取的所述资金调度计划,生成至少一个资金调度有向图;所述资金调度有向图中的节点与所述账户相对应,所述资金调度有向图中的有向边与账户之间的资金调度关系相对应;
检测单元,用于根据预设的图遍历算法,检测所述生成单元生成的所述资金调度有向图中是否存在环路;
所述获取单元,还用于如果所述检测单元检测存在环路,则获取所述环路中各个节点的资金调拨频率;
所述确定单元,还用于根据所述获取单元获取的所述资金调拨频率,确定所述新的资金调度计划是否存在异常。
第三方面,提供了一种服务器,包括:
接收器,用于接收用户的新的资金调度计划;
至少一个处理器,用于在接收到所述新的资金调度计划后,确定所述用户的多个账户;获取与所述多个账户相关联的一个或多个资金调度计划;所述资金调度计划包括多个账户之间的资金调度关系;根据所述资金调度计划,生成至少一个资金调度有向图;所述资金调度有向图中的节点与所述账户相对应,所述资金调度有向图中的有向边与账户之间的资金调度关系相对应;根据预设的图遍历算法,检测所述资金调度有向图中是否存在环路;如果存在环路,则获取所述环路中各个节点的资金调拨频率;根据所述资金调拨频率,确定所述新的资金调度计划是否存在异常。
本说明书一个或多个实施例提供的异常资金调度计划的检测方法、装置及服务器,在某个用户的新的资金调度计划创建后,可以确定该用户的多个账户。获取与多个账户相关联的一个或多个资金调度计划。根据该一个或多个资金调度计划,生成至少一个资金调度有向图。其中,资金调度有向图中的节点与账户相对应,资金调度有向图中的有向边与账户之间的资金调度关系相对应。根据预设的图遍历算法,检测上述至少一个资金调度有向图中是否存在环路。如果存在环路,则获取环路中各个节点的资金调拨频率。根据资金调拨频率,确定新的资金调度计划是否存在异常。由此,可以准确地对异常的资金调度计划进行检测。
附图说明
为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本说明书提供的异常资金调度计划的检测方法的应用场景示意图;
图2为本说明书一个实施例提供的异常资金调度计划的检测方法流程图;
图3为本说明书提供的资金调度有向图示意图;
图4为本说明书提供的环路示意图;
图5为本说明书一个实施例提供的异常资金调度计划的检测装置示意图;
图6为本说明书提供的服务器示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
本说明书一个或多个实施例提供的异常资金调度计划的检测方法可以应用于如图1所示的场景中。图1中,A账户、B账户以及C账户为同一用户的三个不同的账户。该三个账户之间有如下的资金转入和转出关系:每隔15分钟将A账户的资金转出至B账户。具体的资金转出规则为:A账户只保留100元,剩余资金转出至B账户。每隔30分钟将B账户的资金转出至C账户。具体的资金转出规则为:B账户保留200元,剩余资金转出至C账户。每隔60分钟将C账户的资金转出至A账户。具体的资金转出规则为:将C账户的资金转出至A账户,直到A账户的资金补足到150元。
需要说明的是,当上述三个账户之间的资金转出操作按照先后顺序依次执行时,就可以构成一个资金调度计划。该资金调度计划可以简化表示为:A->B、B->C、C->A。由上可以得出,本说明书中的资金调度计划可以包括多个账户之间的资金调度关系。在该资金调度计划中,如果上述转出资金的频率(如,上述15分钟、30分钟以及60分钟)设置过小,那么上述资金调度计划就会被循环执行,在本说明中,将循环执行的资金调度计划称为异常资金调度计划。由于异常资金调度计划会大大耗费计算机资源,所以可以对其进行检测。以下将对如何检测异常资金调度计划进行说明。
图2为本说明书一个实施例提供的异常资金调度计划的检测方法流程图。所述方法的执行主体可以为具有处理能力的设备:服务器或者***或者装置。如图2所示,所述方法具体可以包括:
步骤202,在用户的新的资金调度计划创建后,确定用户的多个账户。
如,用户可以通过相应的接口创建新的资金调度计划。在新的资金调度计划创建后,可以确定与当前用户相关联的多个账户。此处的相关联可以理解为是多个账户对应的自然人均为当前用户。
步骤204,获取与多个账户相关联的一个或多个资金调度计划。
假设确定的用户的多个账户分别为:A账户、B账户、C账户以及D账户。此外,还假设用户已经创建的资金调度计划为:A->B、B->C、C->A。即该用户只创建了一个资金调度计划。则获取的与A账户相关联的资金调度计划可以为:A->B、B->C、C->A,与B账户或者C账户相关联的资金调度计划也可以为:A->B、B->C、C->A。需要说明的是,当获取到的资金调度计划重复时,可以进行去重处理等操作,以保证资金调度计划的唯一性,这可以提高异常资金调度计划检测的效率。
步骤206,根据资金调度计划,生成至少一个资金调度有向图。
其中,生成的资金调度有向图中的节点与账户相对应,资金调度有向图中的有向边与账户之间的资金调度关系相对应。以获取的资金调度计划为:A->B、B->C、C->A为例来说,生成的资金调度有向图可以如图1所示。
步骤208,根据预设的图遍历算法,检测资金调度有向图中是否存在环路。
上述预设的图遍历算法可以包括深度优先算法(Depth-First-Search,DFS)和拓扑排序算法等。
以深度优先算法为例来说,上述检测过程可以为:
1)选取资金调度有向图中的某个节点v,访问节点V并添加访问中标记。
2)判断节点v是否存在连接至下一节点的有向边(简称出边)。如果不存在,则执行步骤3);否则执行步骤4)。
3)将访问中标记更新为已放弃标记,并返回至上一节点。对上一节点执行上述是否存在出边的判断。
4)判断下一节点是否被访问过。如果未被访问过,则访问下一节点并添加访问中标记;对下一节点执行上述是否存在出边的判断。如果访问过,则判断下一节点的访问标记是否为已放弃标记。如果是,则判断当前节点是否存在连接至其它未访问节点的有向边,如果存在,则访问其它未访问节点并添加访问中标记;对其它未访问节点执行上述是否存在出边的判断。如果不存在,更新当前节点的访问标记为已放弃标记并返回至上一节点,对上一节点执行上述是否存在出边的判断。如果否,则从下一节点开始,按照与访问方向相反的方向,逐步返回到该节点本身。执行返回操作的过程中所经过的节点构成环路。
5)判断资金调度有向图中是否存在未访问过的节点,如果存在,则选取任一未访问过的节点,并跳转至步骤2),直至访问完成所有节点。
图3为本说明书提供的资金调度有向图示意图。图3中,假设节点1-8分别与用户的多个账户相对应,其环路的检测过程可以如下:
假设先选取节点1,可以访问节点1并添加访问中标记。因为节点1存在分别连接至节点2和3的有向边且节点2和3未被访问过,所以可以访问节点2或者节点3。以先访问节点2为例来说,可以为其添加访问中标记,之后再访问节点6并添加访问中标记。因为节点6不存在出边,所以可以将节点6的访问中标记更新为已放弃标记,并返回至节点2。因为节点2不存在除连接至节点6的有向边,所以将节点2的访问标记更新为已放弃标记,并返回至节点1。
因为节点1还存在连接至未访问节点:节点3的有向边。所以,可以访问节点3并添加访问中标记,同理可以访问节点4和5并添加访问标记。在到达节点5之后,因为节点5还存在连接至未访问节点:节点7的有向边,可以访问节点7并添加访问中标记,同理可以访问节点8并添加访问标记。需要说明的是,因为节点8存在连接至节点4的有向边,且节点4已经被访问过,访问标记为访问中标记。所以可以从节点4开始,按照与访问方向相反的方向,逐步返回到该节点本身。执行上述返回操作的过程中所经过的节点包括:节点4、节点8、节点7、节点5和节点4。因此,最终构成的环路可以为:节点4->节点5、节点5->节点7、节点7->节点8以及节点8->节点4。
需要说明的是,因为图3中所有的节点均访问完成,所以图3中资金调度有向图的环路检测过程结束。
在一种实现方式中,初始时,可以将资金调度有向图中的所有节点压栈。之后,可以通过调用向前递归的函数来实现上述环路检测的过程。在检测的过程中,当某个节点的访问标记更新为已放弃标记时,可以由函数来返回该节点,并将返回的节点从栈中删除。此外,在执行上述按照与访问方向相反的方向,逐步返回到该节点本身的操作时,可以通过数组来记录在返回过程中所经过的节点。之后,根据该数组中记录的节点来确定对应的环路。最后,可以通过布尔(boolean)类型的数组来记录资金调度有向图中各节点的访问标记。如,在某个节点的访问标记为访问中标记时,该节点在数组中对应的元素值可以为:TRUE;而在其访问标记为已放弃标记时,该节点在数组中对应的元素值可以为:FALSE。
需要说明的是,本说明书中,通过深度优先算法来检测环路的方式,可以提高环路检测的效率。
可以理解是,当生成多个资金调度有向图时,针对每个资金调度有向图,可以通过上述预设的图遍历算法,检测其是否存在环路。
步骤210,如果存在环路,则获取环路中各个节点的资金调拨频率。
可选地,在检测出环路之后,还可以执行如下的补足余额与保留余额的大小关系比较的步骤,以提高环路识别的准确性,进而提高异常资金调度计划检测的准确性。具体地,可以遍历环路中的各个节点,判断各个节点所对应的账户的补足余额是否大于保留余额。如果大于,则保留该环路,否则丢弃该环路。以节点所对应的账户为图1中的A账户为例来说,根据如上描述可知,A账户的补足余额为:150元,保留余额为:100元。因为,150>100,所以保留该环路。而当A账户的补足余额为:50元时,因为,50小于100,所以可以丢弃该环路。
需要说明的是,上述丢弃环路的原因是:在将A账户的资金转出至B账户时,A账户始终会保留100元。而C账户转出资金至A账户是为了补足50元,也即该转出操作的前提条件是A账户的资金不足50元。因为这个前提条件一直不会被满足,所以从C账户转出资金至A账户的操作是不会被执行的,也即此时的环路没有形成真正意义上的环路,所以丢弃。
在还执行上述大小关系比较的步骤时,步骤208中可以是获取保留的环路中各个节点的资金调拨频率。
以图1为例来说,与A账户对应的节点的资金调拨频率可以为:15分钟。同理与B账户或者C账户对应的节点的资金调拨频率分别为:30分钟和60分钟。
步骤212,根据资金调拨频率,确定新的资金调度计划是否存在异常。
在一种实现方式中,在获取到上述资金调拨频率之后,对环路中的每个节点,可以确定从当前节点开始,并回到该节点所需的最短时间。以图1为例来说,因为图1中只存在一个环路,所以与A账户对应的节点所需的最短时间为各资金调拨频率之和:15分钟+30分钟+60分钟=105分钟。同理,与B账户或者C账户对应的节点所需的最短时间也可以为:105分钟。
以下以存在多个环路为例,对最短时间进行说明。
图4为本说明书提供的环路示意图,其示出了与各个账户对应的节点之间的资金调拨频率,以确定从节点1开始,并回到节点1所需的最短时间为例来说。根据图中各节点之间的资金调拨频率,可以确定从节点1开始,并回到节点1的各条环路以及总的资金调拨频率可以如表1所示。
表1
节点 |
环路 |
总的资金调拨频率 |
节点1 |
A->C->B->A |
20+60+20=100分钟 |
节点1 |
A->C->D->B->A |
20+20+20+20=80分钟 |
节点1 |
A->C->D->E->B->A |
20+20+40+40+20=140分钟 |
从表1中可以得到,从节点1开始,并回到节点1所需的最短时间为:80分钟。
需要说明的是,上述最短时间的确定过程可以理解为是最短路径的确定过程。如,可以将资金调拨频率作为路径的权重值,确定各边上权值之和最小的一条路径(也称最短路径)。在实际应用中,可以根据最短路径算法(如,Dijkstra算法,Bellman-Ford算法,Floyd算法和SPFA算法等),来确定上述最短路径。
图4中,可以根据节点1所需的最短时间确定方法,确定其它节点所需的最短时间。在确定环路中各个节点所需的最短时间之后,可以判断最短时间是否小于阈值时间。若是,则确定新的资金调度计划存在异常;否则确定新的资金调度计划不存在异常。
上述阈值时间可以根据经验值设定。上述将节点的最短时间与阈值时间相比较,是因为在特定场景下,在间隔指定时间(如,1天)之后,确实需要在账户之间进行资金的循环调度。因此,本说明书只将最短时间小于阈值时间的资金调度计划识别为异常资金调度计划,这可以提高异常资金调度计划识别的准确性。
此外,还需要说明的是,在确定新的资金调度计划存在异常时,可以向用户发出预警。此外,还可以撤销上述已创建的新的资金调度计划,由此来确保***稳定性。
综上,本说明书一个或多个实施例提供的异常资金调度计划的检测方法,通过深度优先算法等图遍历算法在资金调度有向图中检测环路。之后,从检测到的环路中,确定从任一节点开始,并回到该节点所需的最短时间。当最短时间小于阈值时间时,将最新创建的资金调度有向图识别为异常资金调度有向图。由此,可以提高异常资金调度计划检测的准确性以及效率。
与上述异常资金调度计划的检测方法对应地,本说明书一个实施例还提供的一种异常资金调度计划的检测装置,如图5所示,该装置可以包括:
确定单元502,用于在用户的新的资金调度计划创建后,确定用户的多个账户。
获取单元504,用于获取与确定单元502确定的多个账户相关联的一个或多个资金调度计划。该资金调度计划包括多个账户之间的资金调度关系。
生成单元506,用于根据获取单元504获取的资金调度计划,生成至少一个资金调度有向图。该资金调度有向图中的节点与账户相对应,资金调度有向图中的有向边与账户之间的资金调度关系相对应。
检测单元508,用于根据预设的图遍历算法,检测生成单元506生成的资金调度有向图中是否存在环路。
此处,预设的图遍历算法包括深度优先算法和拓扑排序算法。
检测单元508具体可以用于:
选取资金调度有向图中的某个节点,访问该节点并添加访问中标记;
判断该节点是否存在连接至下一节点的有向边;
如果不存在,则将访问中标记更新为已放弃标记,并返回至上一节点;对上一节点执行上述是否存在有向边的判断。
如果存在,判断下一节点是否被访问过;如果未被访问过,则访问下一节点并添加访问中标记;对下一节点执行上述是否存在有向边的判断;如果访问过,则判断下一节点的访问标记是否为已放弃标记;如果是,则判断当前节点是否存在连接至其它未访问节点的有向边,如果存在,则访问其它未访问节点并添加访问中标记;对其它未访问节点执行上述是否存在有向边的判断;否则更新当前节点的访问标记为已放弃标记并返回至上一节点,对上一节点执行上述是否存在有向边的判断;如果否,则从下一节点开始,按照与访问方向相反的方向,逐步返回到下一节点本身;执行返回操作的过程中所经过的节点构成环路;
判断所述资金调度有向图中是否存在未访问过的节点,如果存在,则选取任一未访问过的节点,访问并执行是否存在有向边的判断,直至访问完成所有节点。
获取单元504,还用于如果检测单元508检测存在环路,则获取环路中各个节点的资金调拨频率。
获取单元504具体可以用于:
遍历环路中的各个节点,判断各个节点所对应的账户的补足余额是否大于保留余额。
如果是,则获取环路中各个节点的资金调拨频率。
确定单元502,还用于根据获取单元504获取的资金调拨频率,确定新的资金调度计划是否存在异常。
确定单元502具体可以用于:
对环路中的每个节点,根据资金调拨频率,确定从节点开始,并回到节点所需的最短时间。
判断最短时间是否小于阈值时间。
若是,则确定新的资金调度计划存在异常。否则确定新的资金调度计划不存在异常。
本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
本说明书一个实施例提供的异常资金调度计划的检测装置,确定单元502在用户的新的资金调度计划创建后,确定用户的多个账户。获取单元504获取与多个账户相关联的一个或多个资金调度计划。生成单元506根据资金调度计划,生成至少一个资金调度有向图。检测单元508根据预设的图遍历算法,检测资金调度有向图中是否存在环路。如果存在环路,则获取单元504获取环路中各个节点的资金调拨频率。确定单元502根据资金调拨频率,确定新的资金调度计划是否存在异常。由此,可以提高异常资金调度计划检测的准确性以及效率。
与上述异常资金调度计划的检测方法对应地,本说明书实施例还提供了一种服务器,如图6所示,该服务器可以包括:
接收器602,用于接收用户的新的资金调度计划。
至少一个处理器604,用于在接收到新的资金调度计划后,确定用户的多个账户。获取与多个账户相关联的一个或多个资金调度计划。该资金调度计划包括多个账户之间的资金调度关系。根据资金调度计划,生成至少一个资金调度有向图。该资金调度有向图中的节点与账户相对应,资金调度有向图中的有向边与账户之间的资金调度关系相对应。根据预设的图遍历算法,检测资金调度有向图中是否存在环路。如果存在环路,则获取环路中各个节点的资金调拨频率。根据资金调拨频率,确定新的资金调度计划是否存在异常。
本说明书一个实施例提供的服务器,可以提高异常资金调度计划检测的准确性以及效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
结合本说明书公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、移动硬盘、CD-ROM或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于ASIC中。另外,该ASIC可以位于服务器中。当然,处理器和存储介质也可以作为分立组件存在于服务器中。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。