决策规则与阈值

每项检查都会产生警告,而如何处理每个警告由你决定:通过、审核,还是拒绝。这个映射关系,才是你风险偏好真正落地的地方。

Short answer

每个步骤都会把自己的警告映射到一个动作:通过、审核或拒绝。 被配置为拒绝的步骤会中止整个工作流,后续步骤永远不会运行,你也不会为它们付费。 这使得规则顺序既是一个风险决策,也是一个成本决策。

#决策实际发生在哪里

很容易把工作流理解成"我要运行的这些检查"。 但检查只是其中一半。 另一半,也就是真正决定你通过率的那一半,是每项检查的警告被配置成了什么动作。

Didit 工作流构建器,包含功能节点和发布按钮
  1. 每个功能节点都带有自己的阈值和自己的决策。
  2. 一项检查可以是必选或可选,这本身就是一个关于谁能通过的决策。
  3. 保存工作流之后,修改过的规则会应用到新会话上。
每个节点决定自己的结果;工作流决定这个结果意味着什么。

对每个步骤而言,它能产生的每个警告都会映射到以下三种动作之一:

动作效果
批准(或忽略)警告会被记录下来,但不会改变结果
审核会话进入审核中,交由人工判断
拒绝会话被拒绝,工作流中止

这个映射关系,就是以配置形式表达出来的你的政策。

#拒绝会中止工作流

这是最让人意外的行为,值得明确说清楚:当某个步骤拒绝时,执行会在那里中止。 之后的步骤永远不会运行

有两个后果:

  1. 结果里会缺少你原本预期的检查项。 它们不是失败了,而是根本没有执行。一个在身份证件验证阶段被拒绝的会话,不会有活体检测、人脸比对或 AML 的结果。
  2. 你不会为它们付费。 计费是按已完成的功能计算的,一个从未运行的步骤不产生任何费用。

#用规则顺序控制成本

因为拒绝会中止流程,步骤顺序就成了一个花费上的杠杆。 把便宜的风险检查放在昂贵检查组合的前面,意味着本来就通不过的流量会在你为昂贵部分付费之前就被拦下。

设备与 IP 分析(0.03 美元)放在完整 KYC 流程前面,是标准做法:它能便宜地过滤掉你本来也会拒绝的流量。

Important

这里的权衡是用户体验和误判率。 设备与 IP 信号是 Didit 提供的检查中噪音最大的一类,企业网络、运营商 NAT 和云端浏览器都会让真实用户共享同一个地址。 把整个流程的通过与否都押在它们上面会拦下真实客户,因此除非你已经测量过自己的真实流量,否则应该把它们导向审核,而不是直接拒绝。

#需要判断力,而不是自动化的规则

有些警告是明确无误的,应该直接拒绝:MRZ 校验和失败、芯片签名无法链接到签发机构、命中你自己黑名单上的人脸。这些属于完整性失败。

另一些几乎总是更适合走审核:

  • 地址证明上的部分地址匹配,各国的格式差异很大。
  • 数据库验证中的部分姓名匹配,权威数据源记录姓名的方式各不相同。
  • 低置信度的 AML 候选命中,常见姓名会持续产生这类命中。
  • 临界值附近的人脸比对结果,参见人脸比对分数与阈值
  • 重复人脸标记,对新账户来说是欺诈信号,对回访客户来说则是正常情况。

还有一些属于可用性失败,值得给一次重试,而不是直接下结论:未读取到的 NFC 芯片、模糊的拍摄、丢帧的摄像头画面。

#年龄策略

最小和最大年龄是按工作流配置的,违反时采取什么动作也由你选择。 MINIMUM_AGE_NOT_MET 既可以直接拒绝,也可以在你的政策允许凭证据例外时导向审核。 两种做法都是合理的,请刻意做出选择。

#针对提取数据的自定义规则

除了按警告映射之外,你还可以针对某个步骤提取出的数据编写规则,例如当提取字段取某个特定值时拒绝。 有两点需要留意:

  • 规则只能作用于该步骤实际产出的数据。如果 OCR 没有提取出该字段,规则就没有可评估的对象。
  • 一条导致拒绝的规则仍然会中止工作流,后果与前文相同。

如果你要编写一条基于受保护特征触发的规则,请先把它当作合规团队要解答的法律问题,而不是工程问题。

#测试规则,而不只是测试步骤

工作流的步骤用肉眼很容易验证,但它的规则不行,唯一能确认某个警告是否按你预期路由的方法,就是真的触发那个警告。

沙盒正是为此存在的。 每个场景都会强制触发一个特定的警告,让你可以端到端地确认每条规则的动作:decline_document_expiredreview_face_match_borderlinedecline_aml_hitreview_poa_partial_match 等等。 参见在沙盒中测试

Tip

测试审核路径要和测试拒绝路径一样仔细。 一条导向审核的规则,只有在真的有人处理这个队列时才有意义,而要知道你的审核流程是否真的能运作,唯一方法就是在真实客户等待之前,先让一个模拟会话走一遍这个流程。

#修改只应用于新会话

编辑工作流不会追溯改变已经创建的会话。 会话携带的是它创建时的配置,因此在修改规则之后,请用一个会话测试,而不是重新检查一个旧会话。