设为首页 | 收藏本站
185 1521 8668

决策表命中策略解释

发表时间:2025-04-03 10:24作者:Together规则引擎
文章附图

DMN 使用最广泛的盒装表达式类型是决策表。它之所以受欢迎,是因为它的含义很直观,并且无需培训即可理解。DMN 规范对格式施加了某些约束——例如,条件单元格中允许哪些表达式。即使这些被遗留规则引擎供应商忽略,在大多数情况下,逻辑的意图也是可以理解的。但是,如果没有一些培训DMN 决策表有一个元素是无法很好地理解的比如:左上角的命中策略代码。在这篇文章中,我们将看到它的作用。

决策表的工作原理

请考虑此决策表,该决策表根据输入确定贷款审批是“已批准”还是“已拒绝” 信用风险类别和负担能力类别。在没有任何DMN知识的情况下,大多数用户直观地理解双线左侧的列是输入,双行右侧的列是输出,编号行是规则。请注意,这里我们还看到了输入和输出的数据类型,在本例中为枚举的允许值。

命中策略1.png

在规则中,每个输入单元格(称为输入条目)与输入值组合时会创建一个布尔条件,即 true 或 false。例如,在规则 1 中,如果信用风险类别为“高”,则第1列单元格为 true。在规则2中,如果信用风险类别为“中”或“低”,则第1列单元格为真。条件单元格中的连字符表示默认情况下该单元格为true,即输入在此规则中无关紧要。例如,在规则1中,第 2 列单元格始终为真,这意味着此规则中不使用可负担性类别。

对于每个规则,如果所有条件单元格的计算结果都为 true,则称该规则匹配,并且选择输出单元格中的表达式作为决策表输出。 对输入的约束(例如枚举值)可让您确保表完整,这意味着对于输入值的任何组合,至少有一个规则匹配。 该规范不要求表格完整,但这通常是最佳实践。 如果对于某种输入值组合可能有多个规则匹配,则称这些规则重叠。 命中策略,左上角的代码,用于处理重叠规则。

命中策略

上表命中了策略 U 或唯一,这意味着规则不重叠。如果创建具有重叠规则的决策表并使用命中策略 U,则会出现错误。一些专家认为,您应该始终努力创建 U 表,但通常其他命中策略更简单,要么更容易构建,要么需要更少的规则。例如,考虑表示相同决策逻辑的下表:

命中策略2.png

现在规则 2 更简单,因为第 1 列条件是连字符。但请注意,如果信用风险类别为“高”,负担能力类别为“负担不起”,则规则 1 和 2 都匹配。这些规则是重叠的。在这里,命中策略 A(对于 Any)警告我们规则可能重叠,但与 A 表重叠的规则必须具有相同的输出值。在这里,他们做到了:“拒绝”。对我来说,这个表比U表更清楚地表达了逻辑:如果信用风险类别为“高”或负担能力类别为“负担不起”,则贷款批准为“拒绝”,否则为“已批准”。

实际上,我们可以使这个逻辑更清晰。请考虑下表:

命中策略3.png


在此表中,规则3的所有列中都有连字符,因此它与输入值的任意组合匹配。我称之为“else 规则”,因为它用于逻辑中的“否则”或“else”条件。这里有命中策略 P或优先级。一个P表告诉我们,重叠的规则可能有不同的输出值,我们应该选择优先级最高的一个。输出的优先级基于其在枚举输出值列表中的顺序,因此 P 表只能与枚举输出值一起使用。此外,else规则的输出必须是最低优先级值,因为永远无法选择任何具有较低优先级输出的规则。请注意,这里我们必须修改贷款审批输出类型,使“批准”成为最低优先级值。

实际上,我们可以使用P表来建模只有 2 条规则的相同决策逻辑,如下所示:

命中策略4.png

这表示,如果信用风险类别为“中等”或“低”,负担能力类别为“负担得起”或“盈利有限”,则贷款批准为“批准”,否则为“拒绝”。现在“拒绝”是优先级最低的输出。根据允许的输入值,逻辑与前面的表相同。第二个P表的规则比第一个少,但它更好吗?这很难说。我倾向于第一个,因为如果您报告选择了哪个规则,它会揭示贷款批准“被拒绝”的具体原因,而第二个则没有。

虽然一些决策表专家非常不喜欢P表,但我发现它们非常有用。逻辑通常至少与等效的 A 表一样简单明了,并且比等效的 U 表简单。

命中策略 F(对于第一个)还允许具有不同输出值的重叠规则,并且不需要枚举输出。它说选择表中的第一个匹配规则。尽管规范允许,但它违反了决策表逻辑应该是声明性的一般原则,独立于规则的顺序。因此,它是半弃用的,我总是使用 P 表代替。

命中策略 C(用于收集)假定规则重叠,并表示输出是其输出的集合或列表。由于该列表中的顺序未指定,因此规范还定义了命中策略 O(表示按优先级顺序收集)和 R(表示按规则顺序收集)(如 First)。我从未见过盲目的使用命中策略 O 或 R。

误导性规则

P 表不需要else规则,但没有else规则,P 表可能包含“误导性”规则。我怀疑这就是为什么一些专家鄙视他们的原因。下面是一个示例:

命中策略5.png

看看这个表,告诉我,在什么条件下批准状态是“推荐”的?你说风险类别什么时候是“中等”吗?这是不正确的。正确的答案是,当风险类别为“中等”并且“负担得起”为真时。当风险类别为“中等” 且是负担得起的为false时,输出为“拒绝”,因为“拒绝”的优先级高于“推荐”。规则3和4具有“误导性”,因为它们是在某些输入中带有连字符的非 else 规则,并且其中一个规则(规则 4)的输出不是最低优先级。是的,这有点令人困惑。

决策表分析

命中策略代码由建模器分配,正如我们所看到的,可能会犯错误:

l U 表不得具有重叠规则。

l 在 A 表中,重叠规则必须具有相同的输出值。

l 在 P 表中,输出必须具有枚举的输出值。

l 在 P 表中,else规则输出必须是最低优先级值。

此外,根据规范,一些技术上合法的事情也应该被视为错误:

l 不完整的表,规则中有空白,这意味着某些允许的输入值组合与任何规则不匹配。

l 包含,可以组合成单个规则的多个规则。最佳做法是表应完全收缩。

l 没有分配重叠规则以命中策略 A 或 P 的表。

l 具有误导性规则的 P 表。

下表包含三个错误:规则中的空白(表格不完整)、匹配政策不正确和包含。你能找到他们吗?

命中策略6.png


Together决策建模器中,该工具可以使用称为方法和样式决策表分析的功能检查此类错误。对于此表,它生成以下错误列表,使用此功能可确保决策表格式正确且符合最佳实践。

命中策略7png.png





精选文章
公众号
关于我们
联系方式
让您的业务更自动化、智能化!
联系邮箱:   zhangy@jee-soft.cn       wangyl@jee-soft.cn
185 1521 8668
183 3562 2627
联系电话: