一、前言
根据埃森哲最新一项调查,2023年67%的企业持续加大在技术方面的投入,其中数据和AI应用是重中之重。AI在企业内部应用这个话题已经保持了十多年的热度,随着ChatGPT为代表的生成式AI技术的出现,这一话题迎来又一波的高潮。
生成式AI展示出来的能量固然让人惊叹,企业也应该密切跟进,找到AI创造业务价值的新的结合点。与此同时,站在一个AI新时代(目前看起来是如此)的转折点,企业也有必要回顾一下,过去十多年在AI 应用方面的举措是否达到预期,投入产出是否还有提升空间。
二、问题提出
笔者最近亲历两个客户都在应用AI,在使用方式上却有不同。
客户1: 某外国银行客户,正在推进数字化银行的5年战略计划,拥有230+人的IT团队,另外有15人的数据科学团队隶属于运营部门。与IT团队沟通低代码同时,我们询问这15人的数据科学团队的具体工作,得知其主要是对银行C端B端客户的交易数据进行历史分析,建立机器学习模型并对将来业务进行预测,向运营VP和其它高管提供数据报表,有定期的也有临时的。而这个岗位的平均薪资是IT开发人员的2倍。
客户2: 某国内高科技客户,从事高分子材料的研究和产品开发。其研发团队(非IT)员工基本都有数据分析背景,使用Python进行数据处理是其日常工作,核心研究也涉及机器学习算法的训练。IT部门在向研发部门提供数字化服务时,有大量需要融合算法模型的应用开发需求,目前的做法是应用与Python算法服务独立运行,应用调用Python接口。
对比来看,客户1 的AI投入显著,但产出并未与业务流程强耦合,而是以离线报表的形式供决策者主观参考。这一现象可以称之为“未打通AI应用的最后一公里”,这种模式下ROI往往受限。客户2 业务类型决定了必然有懂算法和数据分析的研发人员,而非额外投入,但难点在于IT部门如何承接研发部门的产出。应用与算法服务独立部署、接口调用固然技术可行,但从应用开发、运维、同步扩展、迁移等角度,会存在效率低下的问题。
三、Mendix的答案
Mendix对于AI在企业应用构建中发挥作用的设想是完全嵌入式的,即在应用全生命周期都应该融入AI的能力。
-
应用开发阶段:Mendix IDE自带AI机器人,一方面可以实现基于微流上下文件推荐逻辑组件,另一方面可以扫描整个工程根据Mendix开发最佳实践推荐工程改进建议。预计年底推出的生成式AI能力,Mendix Chat 将最终实现与开发者基于自然语言交流,实现实体和微流的自动生成。
-
应用运行阶段:Mendix ML Kit 可以解析ONNX格式的机器学习算法模型,并通过Call ML Kit组件将算法模型按需内嵌到业务流程(微流)中。另外,Mendix 运行时环境中融入了ONNX模型运行时,确保在一套部署环境之下可以同时执行应用程序和算法模型。
四、示例应用
这里我们打算构建一个销售量预测的场景应用。这个应用核心是算法模型和数据,其次是应用体验。
算法模型和数据
Mendix本身不提供算法,而是在企业自有算法模型之上集成并运行算法。因此,本示例中我们借用Kaggle社区的一个竞赛方案,链接地址https://www.kaggle.com/code/konradb/ts-4-sales-and-demand-forecasting/notebook
历史数据是由沃尔玛提供的3家门店过去5年期间某些商品的销售记录。
算法目标是基于历史销售记录建立预测模型,对给定时刻起28天特定SKU的销量。
引用的竞赛方案选用的是LGBM模型的回归预测。该算法在150轮训练后RMSE趋于稳定。
下载竞赛方案 Pynote,通过阅读代码了解算法选取逻辑和数据处理逻辑。该方案中对于过去5年间的销售记录作了如下的特征提取:
-
对商品、门店、商品类别进行类别化(categorization)处理,即转化为整形数值
-
对销售数量进行时间序列的特征处理,选取了28天前销售、28天前时刻的最近一周平均销量、28天前时刻的最近四周平均销量
-
对销售日期分解为月份、季度、月度日期等3个整形数值
注意:以上的特征提取过程,也是后面在Mendix中构建应用时对业务数据预处理的过程。处理过的业务数据才能作为算法模型输入,获得预测输出。这个示例中,为了简化直接借助原始Python代码对预测数据集进行了特征提取。
模型转化
Mendix ML Kit接受ONNX格式的算法模型,这是一种主流的模型中间格式。Pytorch、TensorFlow、ScikitLearn、Caffee等框架下的模型都有转化ONNX格式的标准工具。更多关于ONNX格式和转换可参考知乎文章。
在原方案中训练好算法模型之后,加上以下Python代码将模型转化并保存为ONNX格式。
常见的ONNX转化工具包括以下Python 包:
-
onnxmltools
-
convert_sklearn
-
torch.onnx
-
tf2onnx
实际工程中根据算法模型的训练框架选取合适的工具即可。
模型可视化
对于ONNX格式的模型,我们可以借助可视化工具直观理解模型的输入、输出和中间算子(operator)。
这里我们用https://netron.app在线网站查看前面保存下来的ONNX算法模型。
从图可以清晰看出,该模型输入为长度为10的32位浮点型数组,输出为单个32位浮点型数值,中间算子是一个回归运算算子。输入和输出的-1表示Batch值,在这个算法模型中都为1.
注意:这里的算子是经转换后ONNX对应的实现算子,和原始算法有可能不一一对应,这部分内容不在Mendix主体范围,有兴趣可以阅读相关资料详细了解。
模型导入
ONNX格式算法模型有了,并通过可视化对模型有个直观理解之后,我们就可以开始在Mendix环境中的工作。
第一步就是将模型导入Mendix。在add others中找到ML model mapping.
选择前面保存的ONNX格式文件。
导入后得到如上图映射关系,并自动生成输入和输出两个实体。
注意观察:输入实体只有唯一属性,且是字符串类型,这和我们前面观察到的算法模型有长度为10的32位浮点型数组不一致。正因为如此,我们需要在Mendix中调用模型时,对数据进行预处理,将含有10个浮点型(Mendix中用Decimal)的特征字段转化为字符串类型。输出实体有一个Decimal类型属性,可以直接作为销量预测结果在应用中使用,无需额外处理。
模型调用并数据预处理
创建一个子微流,它可以在其它需要的地方被调用,实现模型调用的基础功能。
从IDE右侧的工具箱是选取 Call ML Model组件,配置已导入的模型名称、输入输出实体对象。
其中,输入实体对象需要通过一个JavaAction对原始业务数据进行预处理,该JavaAction输入为包含10个特征字段的实体对象,输出为模型映射指定的 ML_Input_Entity_LGBModel.
JavaAction的实现逻辑如下所示:
注意:对于不同业务数据类型如数值、文本、图片、音频、视频,数据预处理逻辑方式不同,但有固定做法。这是机器学习领域工程师应该掌握的技能,在此不详细展开。
至此,调用算法模型进行预测的子微流构建完毕。
应用设计
接下来我们要构建应用的用户交互层,这个示例中我们设计了以下模块:
-
主数据模块:用于维护门店、商品等主数据。
-
交易数据查看模块:用于查看历史销售记录、待预测记录等。
-
数据导入模块:用于数据从Excel数据集到Mendix的导入。
-
销售预测绘图模块:用于图形化展示门店/商品组合的历史销量和销量预测。
效果展示
主数据维护
数据导入
交易数据查看
未来销量预测
销量预测图表
当然,以上只是基础展示效果,在实际业务应用中,可以将销量预测结果融入采购、仓储、物流等计划执行中,在需要的地方调用Sub_Model_Call 子微流即可,实现算法模型嵌入式的业务流程,让最后一公里变得更为简单。
五、总结
Mendix 提供基于ML Kit的机器学习算法模型嵌入组件,支持Pytorch、Tensorflow、Scikitlearn、Caffee等主流训练框架下的算法模型转化为ONNX格式后导入应用,在所需要的业务流程中通过一个Call ML Model组件轻松被调用。这种方式下,算法模型和业务应用在一套运行时环境中,相比传统的算法服务独立运行并通过接口调用的方式,不仅构建更快,而且调用延时更低,还方便统一运维,打通应用最后一公里,实现算法模型对业务的赋能。
本示例提供了端到端的开发实现参考。如果您手头正有融合算法模型的应用开发需求,或者您已经在使用Mendix希望融合算法模型,可以在评论区留下联系方式,我们会与您沟通并提供所需帮助。
关于Mendix公司
在一个数字化先行的世界中,客户希望自己的每一项需求都得到满足,员工希望使用更好的工具来完成工作,而企业意识到自己只有通过全面数字化转型才能生存并取得成功。Mendix公司,a Siemens business正在迅速成为企业数字化转型的推动者。其业内领先的低代码平台和全方位的生态系统整合最先进的技术,帮助企业创造出提高互动性、简化操作和克服IT瓶颈的解决方案。Mendix公司以抽象化、自动化、云和协作为四大支柱,大幅提升开发者的生产力,并且依靠自己的工程协作能力和直观的可视化界面,帮助大量不熟悉技术的“公民”开发者在他们所擅长的领域创建应用程序。Mendix公司是权威行业分析师眼中的领导者和远见者,也是一个云原生、开放、可扩展、敏捷和饱经考验的平台。从人工智能和增强现实,到智能自动化和原生移动,Mendix公司已成为数字化先行企业的骨干。Mendix公司企业低代码平台已被全球4000多家领先的公司采用。