Lantern

Meridian:从部门文件到有负责人的行动。

这是基于 Meridian Components 搭建的案例。Meridian Components 是一家虚构的制造商,在越南有四家工厂。下文的每个 SAS 界面都来自我们搭建时所用的 Viya 环境,截取于 2026 年 10 月。每个数字都由该环境产出。

个部门文件作为起点
19个部门文件作为起点
行数据由 40 条清洗规则修正
28,098行数据由 40 条清洗规则修正
个缺货模型参与比较
7个缺货模型参与比较
项行动,每项都经已发布的决策确认
306项行动,每项都经已发布的决策确认

四家工厂,每个部门各有一套真相。

Meridian 用各部门的工作簿管理四家工厂和四个仓库:按班次的生产记录、采购跟踪表、库存盘点和标准成本表。每个部门都保留自己的一套数字,所以每周例会一开始总是在核对数字,而不是据此采取行动。

我们没有要求任何人放弃自己的文件。SAS 按原样读入这些文件,项目分为五个阶段,每个阶段是一个程序文件夹,每个程序旁边都有一个流程。

决策
按原样读入文件,所有修正都在 SAS 中完成,用人人都能读懂的代码。
原因
大家继续使用自己信任的工具,每一处修正都看得见、可重复,而不是藏在某个人的副本里。
构建工具
SAS StudioSAS Content
SAS Studio 中的 GDA Meridian 文件夹,显示 05 Decide and Act 的程序和流程
图 1. SAS Content 中的项目:每个阶段一个文件夹(Collect、Clean、Insights、Visualize、Decide and Act),每个程序旁边都有一个流程。查看原图

只清洗一次,用可审计的规则。

19 个文件变成了 23 张原始表、12 张清洗后的表和 23 张可直接用于决策的 gold 表。40 条清洗规则修正了 28,098 行:以文本录入的金额、三种格式的日期、多种写法的班次代码。每条规则都会在数据质量日志中写入一行。

每个程序都有流程,因此 SAS Lineage 可以从任意一张表画出路径:向上追溯到生成它的程序,向下延伸到读取它的报表。

决策
一条规则,一行日志,每个程序都有流程。
原因
当经理问某个数字从哪里来,答案是在 SAS Lineage 里点一下,而不是开一次会。
构建工具
SAS Studio 流程DATA step 与 PROC SQLSAS Lineage
GOLD_ACTIONS 的 SAS Lineage 图,含 dec_01 流程和两个 Visual Analytics 报表
图 2. GOLD_ACTIONS 的 SAS Lineage:生成它的流程、CAS 中的表,以及读取它的两个 Visual Analytics 报表。查看原图

预测缺货,让模型相互竞争。

计划员的问题很简单:未来四周内,哪个仓库的哪种产品会跌破再订货点?Model Studio 用同一组特征(库存相对于再订货点的水平、在途库存、近期出货量、供应商延迟和季节)训练了七个候选模型,较晚的几周留作测试,不参与训练。

Forest 在预留的几周数据上排序表现最好,作为冠军模型注册到 Model Manager。梯度提升作为挑战者,每周用代码重新训练,一旦冠军模型表现下滑,数字上就会显现出来。

决策
Forest 是冠军模型;梯度提升保留为挑战者。
原因
Forest 在从未见过的数据上排序最好;保留一个挑战者,可以看出冠军模型是否开始下滑。
构建工具
Model StudioModel Manager
Model Studio 管道,包含缺失值填补、变量选择、七个模型、一个集成模型和模型比较
图 3. Model Studio 中的 Pipeline 1:缺失值填补和变量选择接入各候选模型和一个集成模型,之后进行模型比较。查看原图
模型比较表,Forest 被标记为冠军模型
图 4. 在测试分区上的模型比较。标星的冠军模型 Forest 拥有最高的 KS(0.80)和曲线下面积(0.94)。查看原图
Model Manager 中的项目 Meridian stockout risk,Forest 模型为冠军模型
图 5. 冠军模型保存在 Model Manager 的项目 Meridian stockout risk 中。查看原图

用业务负责人读得懂的规则做决策。

分数还不是行动。决策 Meridian_next_best_action 先运行冠军模型,再经过两个规则集。“选择行动”(6 条规则)判断某个库存位置是否需要补货、某张采购订单是否需要催货、某种产品是否需要毛利复核,或某条产线是否需要检查。“优先级、负责人和复核”(14 条规则)按涉及金额设定优先级,选定负责人,设定截止日期,并决定何时由第二个人复核。

该决策发布到 SAS Micro Analytic Service,任何能发出 Web 请求的系统都可以问它该做什么。

决策
把阈值放在规则集中,而不是程序代码里。
原因
供应链负责人无需开发人员,就能读懂并修改“供应商在近期 60% 的订单上延迟时催货”,而且 Intelligent Decisioning 会为每次修改保留版本。
构建工具
Intelligent DecisioningMicro Analytic Service
决策流程:Start、Forest 模型、规则集“选择行动”、规则集“优先级、负责人和复核”、End
图 6. 决策流程:先是冠军模型,然后是两个规则集。发布前已通过验证。查看原图
规则集 Meridian 1“选择行动”,包含 IF、AND、THEN 规则
图 7. 规则集“选择行动”:低于再订货点的库存位置即为补货;模型判断四周内很可能缺货的库存位置则为预警补货。查看原图
Intelligent Decisioning 的部署页面,显示一个已发布到 microAnalyticService 的决策
图 8. 已发布到 Micro Analytic Service 目标,模型包含在决策之中。查看原图

每周一运行,逻辑始终如一。

定时作业每周一 06:00 运行。它读回大家在 Lantern 中做出的决策和处理结果,生成本周的候选行动,把每一项送入已发布的决策,起草消息,衡量上周的结果,并把结果推送到 Lantern。

批处理作业调用的是与其他所有地方相同的已发布决策,因此报表中的行动和界面上的行动不会互相矛盾。如果无法连接决策服务,作业会停止,并保留上周的行动,而不是发布一份空清单。

  1. 1从 Lantern 读回决策和处理结果
  2. 2生成候选行动
  3. 3将每个候选送入 Meridian_next_best_action
  4. 4起草消息并检查
  5. 5衡量先前行动之后发生了什么
  6. 6将行动、结果和缺货风险推送到 Lantern
决策
由批处理作业调用已发布的决策,而不是把它的规则复制进代码。
原因
只有一个地方做决定。改一条规则,所有渠道同时生效,不会出现偏差。
构建工具
SAS Job ExecutionPROC HTTPMicro Analytic Service
作业如何调用已发布的决策
proc http url="&base./microanalyticScore/modules/meridian_next_best_action/steps/execute"
     method="POST" in=_nq out=_na ct="application/json" oauth_bearer=sas_services;
  headers "Accept"="application/json";
run;
摘自每周作业日志,2026 年 10 月 20 日
NOTE: Lantern decisions read into APP_ACTION_DECISIONS.
NOTE: Lantern resolutions read into APP_ACTION_RESOLUTIONS.
NOTE: Decision service answered all 306 rows (meridian_next_best_action).
ACT REORDER High 55 55 1,994,641,000
ACT EXPEDITE_PO High 47 47 181,319,000
ACT INVESTIGATE_LINE High 12 12 790,203,000
NOTE: Lantern gold_actions: {"rows": 306, "table": "gold_actions", "skipped": []}
NOTE: Lantern gold_stockout_risk: {"rows": 16800, "table": "gold_stockout_risk", "skipped": []}
NOTE: Lantern gold_model_metrics: {"rows": 11, "table": "gold_model_metrics", "skipped": []}

每项行动只有一位负责人,并说明理由。

Lantern 为每项行动指定一位负责人,并说明 SAS 为什么提出它:触发的规则、冠军模型对库存位置给出的概率,以及选定优先级、负责人和截止日期的规则集。负责人去完成工作(致电供应商、检查产线、下订单),记录做了什么,然后关闭行动。

每个人看到的内容取决于角色。采购员看到采购订单,班组长看到自己的产线,并由数据库逐行强制执行。

决策
构建和治理的人使用 Viya 席位;所有执行的人使用 Lantern。
原因
数百名一线人员无需 Viya 许可证就能根据 SAS 的决策采取行动,他们做出的每个决定都会在下周一流回 SAS。
构建工具
LanternPostgreSQL 行级安全
Lantern 行动列表,打开了一项补货行动,显示建议的下一步和 SAS 的决策
图 9. Lantern 中的一项行动:下一步、规则集选定的负责人和截止日期,以及一句话说明 SAS 为什么提出它。查看原图
SAS 如何决策:缺货模型、规则集“选择行动”、规则集“优先级、负责人和复核”
图 10. 同一项行动的推理过程,逐步展示,直接来自决策的返回结果。查看原图

衡量实际结果,让模型保持诚实。

作业每周把已处理的行动与之后发生的情况进行对照:库存是否用尽,采购订单是否按时到货,缺陷率是否回落。结果会推送到 Lantern,显示在行动旁边。

模型也以同样的方式评判。冠军模型、挑战者和一种单纯按库存水平排序的方法,都在同样的 1,100 行预留数据上评分,其中 138 行在四周内缺货。

决策
在同样的数据行上评判每个模型,并与简单的基线对比。
原因
模型只有胜过单纯按库存水平排序,才值得使用。在风险最高的 300 行中,冠军模型比基线多捕获 13 次缺货。
构建工具
SAS 程序Visual AnalyticsLantern

同一批预留数据上的缺货模型

模型AUC风险最高的 300 行中捕获的缺货
Forest,冠军模型0.939133 / 138
梯度提升,挑战者0.927129 / 138
仅看库存水平,基线0.918120 / 138

AUC:0.5 相当于抛硬币,1.0 为完美。由 ins_02 于 2026 年 10 月 20 日计算。

Lantern 面板,比较 Forest、梯度提升和仅看库存水平
图 11. Lantern 中的同一比较,以及从 Model Studio 到界面的路径。查看原图
SAS Visual Analytics 报表 Meridian Control Tower,页面名称为双语
图 12. Visual Analytics 中的 Meridian Control Tower,页面名称为英文和越南文。查看原图

决策记录

  1. 起点

    按原样读入文件,所有修正都在 SAS 中完成,用人人都能读懂的代码。

    SAS Studio, SAS Content

  2. 清洗与追溯

    一条规则,一行日志,每个程序都有流程。

    SAS Studio 流程, DATA step 与 PROC SQL, SAS Lineage

  3. 预测

    Forest 是冠军模型;梯度提升保留为挑战者。

    Model Studio, Model Manager

  4. 决策

    把阈值放在规则集中,而不是程序代码里。

    Intelligent Decisioning, Micro Analytic Service

  5. 每周运行

    由批处理作业调用已发布的决策,而不是把它的规则复制进代码。

    SAS Job Execution, PROC HTTP, Micro Analytic Service

  6. 在 Lantern 中行动

    构建和治理的人使用 Viya 席位;所有执行的人使用 Lantern。

    Lantern, PostgreSQL 行级安全

  7. 衡量

    在同样的数据行上评判每个模型,并与简单的基线对比。

    SAS 程序, Visual Analytics, Lantern

如何运行

Lantern 读取 Viya 每周作业发布的表,因此工作空间中的每个数字都是真实的 SAS 输出。上面的各部分展示了每个环节是在哪里构建的。

看看 Lantern 如何运作。

演示基于 Meridian 运行,这是一家用真实供应链数据集构建的虚构制造商。登录后,像它的团队一样处理本周的行动。