现货业务目前基于算法模型+运营配置得出订单预计履约时长,由于时效策略调整需求且现货订单数据回收周期较长,因此需要建设时效仿真平台能力,产品自行根据业务需要进行时效仿真实验并得到对应结果。
1.1 目标
- 缩短决策周期,分钟级获取时效仿真实验结果;
- 搭建自助时效仿真平台,节约开发人力;
- 固化时效仿真能力,提升时效预估模型优化效率;
1.2 难点
- 每次圈定的时效仿真订单数据超过百万,分钟级获取结果性能要求较高;
- 需要考虑多业务类型的扩展;
- 需要考虑预估模型的扩展;
1.3 拆解
算法预估模型解决问题的步骤一般可以拆解为数据采集、特征工程、模型训练、模型预估与评估函数。基于时效预估项目,现货订单履约时长预估能力已经搭建完成,详细内容会在另一篇blog中分享,这里不在赘述直接贴结果。
图1.1 现货算法模型
这里不需要完全理解图1.1的含义,只要了解因为特征因子的不同,现货履约流程会被拆解成为卖家到仓、仓内作业以及仓到买家三段分别进行特征分析与模型训练,最后根据聚合结果进行结果评估。
时效仿真平台需要固化建模过程,通过时效仿真任务对圈定的订单数据进行履约时效预估,并根据业务指标对预估结果进行统计输出。
图1.2 时效仿真平台模型
如图1.2所示,时效仿真平台能力可以拆解为:
- 对照组采集,满足根据任意时间与业务属性圈定实验数据的需求;
- 预估方式,支持算法模型与组线系统多种组合方式;
- 结果(后)处理,超时率差异表达以及大促、疫情加时策略;
- 结果统计,统一业务与技术关注的评估指标;
2.1 系统架构图
图2.1 系统架构图
从图2.1可以看出时效仿真平台核心功能都是基于DataWorks大数据开发平台开发的,感兴趣的同学可以了解一下阿里云DataWorks【1】。
使用DataWorks的原因主要有以下几点:
- 离线数仓,不会对生产数据产生影响;
- 分布式任务,分钟级处理千万级复杂SQL;
- 屏蔽资源层不同数据源的差异,统一从DataWorks中取数;
2.2 核心流程
2.2.1 时效仿真任务流程图
图2.2 时效仿真任务流程图
如图2.2所示,时效仿真任务执行时会根据任务模板拆解为运行节点,并通过预置实例节点、预置任务模板以及任务配置接口保证了时效仿真任务的扩展性。
2.2.2 现货时效仿真模板
图2.3 现货时效仿真模板
如图2.3所示,对照组采集节点可以根据订单支付时间、订单类型圈定实验数据,支持业务字段的扩展,包括卖家类型、卖家城市、买家城市等;
现货算法模型节点支持与对照组节点类似的模型训练数据圈定功能,考虑到模型的准确性与覆盖率每个履约段可以使用不同的特征组合进行训练;
结果处理节点可以根据业务需求对订单维度的预估结果执行等比、超时率映射与线路加时等处理策略;
结果统计节点会根据业务关心的指标对结果集进行统计。
节点经过转换后可以直接由DataWorks执行,执行流程如下图。
图2.4 现货节点DAG图
2.2.2.1 数据采集节点
图2.5 数据采集
输入:任务编号、支付时间范围、业务类型
输出:任务编号为分区的对照组数据
2.2.2.2 模型节点
图2.6 模型训练节点
输入:任务编号、支付事件范围、业务类型
输出:分区为任务编号的预估模型
图2.7 模型预估节点
输入:任务编号、对照组数据、预估模型
输出:分区为任务编号的预估结果
2.2.2.3 结果处理节点
图2.8 结果处理节点
输入:任务编号、预估结果、后处理类型
输出:分区为任务编号的后处理结果
2.2.2.4 结果统计节点
图2.9 结果统计节点
输入:任务编号、后处理结果
输出:分区为任务编号的统计结果
以上为现货时效仿真的所有工作节点,各节点之间通过唯一的任务编号生成分区,在分布式场景下保证多个任务之间互不干扰,下游节点依赖上游节点输出,最终输出时效仿真统计结果。
图3.1 领域模型
模板节点,由DataWorks映射、模板参数组成的值对象。
任务模板,由模板ID、模板节点列表组成的实体。
时效仿真任务,由时效仿真任务ID、业务类型、任务模板、执行节点列表、执行状态、创建者组成的聚合根。
时效仿真模板节点与时效仿真执行节点的区别,执行节点类似于模板节点的实例。
4.1 时效仿真模板实例
4.1.1 时效仿真任务模板
{
"templateId":"xh_01",
"bizType":"xh",
"tempOps":[
{
"node":"1003843531",
"type":"SCOPE",
"params":"orderPayTime,bizType"
},
{
"node":"1003864245",
"type":"MODEL_SCOPE",
"params":"orderPayTime,bizType"
},
{
"node":"1003864250",
"type":"MODEL"
},
{
"node":"1003864248",
"type":"MODEL"
},
{
"node":"1003864251",
"type":"MODEL"
},
{
"node":"1003864249",
"type":"MODEL"
},
{
"node":"1003864246",
"type":"MODEL"
},
{
"node":"1003843532",
"type":"ESTIMATE"
},
{
"node":"1003843533",
"type":"AFTER_PROCESS",
"params":"afterProcessType,afterProcessRatio"
},
{
"node":"1003843534",
"type":"STATISTICS"
}
]
}
4.1.2 时效仿真任务
使用2021年10月1日至12月30日的现货订单数据训练模型,预估2022年1月1日至2022年1月7日的履约时长,后处理类型为等比80%,统计覆盖率、超时率与准确率。
{
"emulateNo":"1000223101",
"templateId":"xh_01",
"bizType":"xh",
"status":"RUNNING",
"operator":[
{
"node":"1003843531",
"orderPayStartTime":"2022-01-01 00:00:00",
"orderPayEndTime":"2022-01-07 23:59:59",
"type":"SCOPE",
"bizType":"1"
},
{
"node":"1003864245",
"orderPayStartTime":"2021-10-01 00:00:00",
"orderPayEndTime":"2022-12-30 00:00:00",
"type":"MODEL_SCOPE", "bizType":"1"
},
{
"node":"1003864250",
"type":"MODEL"
},
{
"node":"1003864248",
"type":"MODEL"
},
{
"node":"1003864251",
"type":"MODEL"
},
{
"node":"1003864249",
"type":"MODEL"
},
{
"node":"1003864246",
"type":"MODEL"
},
{
"node":"1003843532",
"type":"ESTIMATE"
},
{
"node":"1003843533",
"type":"AFTER_PROCESS",
"afterProcessType":"1",
"afterProcessRatio":"0.8"
},
{
"node":"1003843534",
"type":"STATISTICS"
}
],
"creator":"xxx@shizhuang-inc.com",
"createTime":"2022-05-01 12:30:00"}
4.1.3 时效仿真任务记录
时效仿真结果为总量xx现货订单,覆盖率xx.xx%、超时率xx.xx%、T±1准确率xx.xx%。
{
"emulateNo":"1000223101",
"res":{
"total":"xxxxx",
"hitRatio":"xx.xx%",
"accuracyRatio":"xx.xx%",
"overtimeRatio":"xx.xx%",
"distribution":{
"2":"xxxx",
"3":"xxxx",
"4":"xxxx",
"5":"xxxx",
"6":"xxxx",
"7":"xxxx",
"8":"xxxx"
}
},
"executor":"xxx@shizhuang-inc.com",
"createTime":"2022-05-01 12:35:00"
}
目前,供应链正在建设组网系统,通过班次时间、仓库鉴别能力、仓库产能、线路能力的咬合构建得物供应链履约网络。基于组线网络的能力,可以根据截单时间给出订单预估送达时间,由于组线数据来源于人工配置+数据清洗,因此同样需要时效仿真能力。
图5.1 组线模型预估模板
如图5.1所示,由于业务方没有发生改变,因此结果处理与结果统计节点不需要做调整。需要做的工作有以下几点:
- 接入组网数据
- 新增寄售模板
- 开发组线模型DataWorks实例节点
目前,a和c依赖DataWorks,b依赖Ark配置,因此无需发布系统就可以扩展组线时效仿真能力。
参考链接:
【1】阿里云DataWorks
https://www.aliyun.com/product/bigdata/ide
*文/魏巍