执行速度检查

来自用户或实体(如信用卡)的事件频率可能表示可疑活动和潜在的欺诈行为。 例如,在欺诈者尝试几个单个订单后,他们通常使用单个信用额度卡从单个 IP 地址或设备快速下达许多订单。 他们还可能使用许多不同的信用卡来快速下单。 速度检查有助于识别这些类型的事件模式。 通过定义速度,可以监视这些类型的模式的传入事件,并使用规则来定义要将模式视为可疑的阈值。

如果你的 Microsoft Dynamics 365 欺诈保护实例具有多个环境,则可以使用环境切换器定义在特定环境中设置的速度。 只能在相应环境中定义的规则中引用速度。 如果在父环境中创建了速度,并且规则在同一环境中定义,则子环境中的事务将包含在父级规则运行时的速度中。

定义速度

速度集由各个速度组成。 使用以下结构中的 标准版LECT、FROMWHENGROUPBY 关键字 (keyword),在 Dynamics 365 欺诈防护中定义速度。

SELECT <aggregation method> AS <velocity name>
FROM <event type>
WHEN <condition>
GROUPBY <attribute name>

注意

数组不能在速度定义中使用 GROUPBY。

  • 标准版LECT 后,指定聚合方法:CountDistinctCountSum 然后使用 AS 关键字 (keyword)来命名速度。 然后,可以使用此名称来引用规则中的速度。

    下面是聚合方法的说明。

    聚合方法 说明 示例
    计数 此方法返回事件发生的次数。 标准版LECT Count() AS numPurchases
    DistinctCount 此方法返回指定属性的非重复值数。 如果传入事件的指定属性为 null 或为空,则该事件不会导致聚合。 标准版LECT DistinctCount(@“device.ipAddress”) AS distinctIPaddresses
    Sum 此方法返回指定数值属性的值之和。 标准版LECT Sum(@“totalAmount”) AS totalSpending
  • FROM,指定要观察速度的评估或观察事件。 要观察其速度或分组依据的字段必须是 API 调用的一部分。 若要观察跨事件速度,请跨评估或观察事件指定多个事件。

  • WHEN 语句是可选的。 在 WHEN 之后,可以键入布尔表达式。 聚合中仅考虑与条件匹配的事件。 忽略其他事件。 该表达式用于筛选在速度中考虑的事件。

  • 在 GROUPBY 之后,指定属性或表达式。 然后,将为处理的每个事件计算属性或表达式。 将所有计算结果为 GROUPBY 语句中的相同值的事件组合在一起,以计算在 标准版LECT 语句中指定的聚合。 如果传入事件的 GROUPBY 表达式为 null 或为空,则该事件不会参与聚合。

提示

可以在规则中使用的任何表达式也可以在速度中使用。 这些表达式包括列表和外部调用。 有关可用函数的完整列表,请参阅 语言参考指南

注意

要观察速度超过的时间范围未在速度定义本身中指定。 而是在引用规则的速度时指定它。

速度示例

使用以下示例创建自己的速度。

每个用户花费的资金量

SELECT Sum(@"totalAmount") AS totalSpending_perUser
FROM Purchase
GROUPBY @"user.userId"

每个 IP 地址用于创建新帐户的次数

SELECT Count() AS NewAccounts_perIP
FROM AccountCreation
GROUPBY @"device.ipAddress"

对于每个设备,已登录的唯一用户数

SELECT DistinctCount(@"user.userId") AS uniqueUserLogins_perDevice
FROM AccountLogin
GROUPBY @"deviceAttributes.deviceId"

对于每个用户,欺诈保护拒绝的登录尝试次数或收到高风险分数

SELECT Count() AS loginRejections_perUser
FROM AccountLogin
WHEN @"ruleEvaluation.decision" == "Reject" or @"riskScore" > 900
GROUPBY @"user.userId"

对于每个用户,在美国以外进行的购买次数,并且还包含高风险列表中的产品

SELECT Count() AS intlHighRiskTxns_perUser
FROM Purchase
WHEN @"user.country" != "US" and ContainsKey("Risky Products", "Product ID", @"ProductList.productId")
GROUPBY @"user.userId

对于每个用户,在评估和观察事件中使用的唯一自定义电子邮件数

SELECT DistinctCount(@"custom.email") AS uniqueEmails_perUser
FROM Assessment_A1, Assessment_A1:status
GROUPBY @"custom.userId"

创建速度集

  1. 欺诈保护门户中的左侧导航栏中,选择“速度,然后选择“新建速度集”。

    欺诈保护会创建一个草稿速度集,该集仅对你可见(创建者)。 请注意,对草稿所做的所有更改都会自动保存。

  2. 可选:在 “条件” 字段中,输入布尔条件。 或者,将字段留空。

    聚合中仅考虑与此条件匹配的事件。 忽略其他事件。 例如,如果希望速度集中的速度仅聚合美国中发生的事件,请定义以下条件:

    WHEN @"user.countryRegion" == “US”

  3. 若要从头开始定义新速度,请选择 “新建速度”。 有关如何定义速度的信息,请参阅本文前面的“ 定义速度 ”部分。

    若要从现有速度模板开始,请选择新速度右侧的箭头。 若要查看现有模板及其内容的完整列表,请选择“ 查看所有”。

    一组最多可以添加 10 个速度。

  4. 若要发布速度,请选择“ 发布”。

  5. 在确认对话框中,可以更改速度的名称、说明或状态。 准备就绪后,选择“ 发布”。

发布速度后,速度集中的速度对所有用户可见。 随着事件流经欺诈保护,速度将开始聚合数据。

注意

发布速度后,它将开始从该点向前聚合数据。 不考虑历史数据。

有关如何使用速度做出决策的信息,请参阅本文后面的规则部分中的“使用速度”。

了解“示例”窗格

创建或编辑速度集时,示例窗格将显示在页面右侧。

  • 示例 ”窗格显示可在速度中引用的所有事件属性。 这些属性因速度观察到的事件类型而异。 在窗格顶部的“事件”字段中选择事件类型

  • 有效负载示例部分包含可在请求 API 中发送评估的属性示例。

  • 扩充示例部分包含欺诈保护在发送初始请求后添加到事件的属性示例。 例如,这些属性包括欺诈保护 设备指纹 解决方案中的信息,以及机器学习模型的风险和机器人分数。

    扩充示例还包括规则评估中的信息,例如决策、规则名称和触发的子句的名称。 可以在速度中使用这些属性中的任何一个。 使用 at sign (@) 引用它们(例如 @“user.firstName”)。

系统定义的(默认)速度

欺诈保护为每个环境创建多个系统定义的速度。 例如,可以添加以下默认速度。

  • 默认值 - 电子邮件速度
  • 默认值 - 付款方式速度
  • 默认值 - IP 速度
  • 默认值 - 设备 ID 速度

某些欺诈保护功能依赖于默认速度,例如用于购买保护的 搜索结果 页。

无法编辑或删除系统定义的速度。 但是,可以克隆它们,然后编辑或删除克隆。

管理速度集

  • 若要编辑现有的已发布速度集,请选择速度,然后选择“ 编辑”。

    已发布速度的草稿已创建,仅对你可见。 将自动保存对草稿所做的所有更改。

    准备好将更改推送到生产环境时,请选择“ 发布”。 先前发布的速度集将用更改覆盖。

    注意

    对速度所做的任何更改仅影响从该点向前计算的值。 它们不会影响以前的事件数据。

  • 若要删除现有速度集,请选择省略号 (...),然后选择“ 删除”。

    注意

    如果在已发布的规则中引用了任何速度,则无法删除其速度集。

  • 若要更新速度集的名称或说明,请选择省略号(...),然后选择“ 重命名”。

  • 若要更改速度集的状态,请选择“激活”或停用”。

    • 标记为 “活动 ”的速度集中的速度会随着新事件流入欺诈保护而不断更新。
    • 标记为 “非活动 ”的速度集中的速度永远不会更新。

在规则中使用速度

若要使用速度来决定传入评估事件,必须在规则中引用它们。 例如,以下速度定义为速度集的一部分。

SELECT Sum(@"totalAmount") AS totalSpending_perUser
FROM Purchase 
GROUPBY @"user.userId"
WHEN Velocity.totalSpending_perUser(@"user.userid", 7d) > 1000

在规则中,可以使用以下语法检查速度。

WHEN Velocity.totalSpending_perUser(@"user.userid", 7d) > 1000

第一个参数是 。 此参数用于查找速度。 在前面的 totalSpending 速度定义中,GROUPBY\ @"user.userId" 语句指示将针对遇到的每个用户 ID 聚合值。 从规则引用速度时, 参数指定要检索其速度值的用户 ID。 如果密钥参数为 null 或为空,则欺诈保护返回 0

第二个参数是 timeWindow。 此参数指定要观察速度超过的时间范围。 可以选择一个时间范围,介于 1 秒到 90 天之间。 目前,以下是所有有效的时间窗口:

  • [1–59]s
  • [1–59]m
  • [1–23]h
  • [1–90]d

注意

时间范围从上一度量单位的开头开始。 例如,如果当前日期和时间是 2021 年 4 月 1 日上午 11:04,并且检查两小时(2 小时)时间范围内的速度,则会看到自上午 9:00 以来的数据,而不是从上午 9:04 开始。

如果速度因错误而无法返回值,则返回默认值 0 ,并且规则继续运行。

在规则评估后,速度会随当前事件一起更新。 因此,如果在规则中引用速度,则它不包括正在处理的当前事件。

还可以从 Functions 调用速度。 有关详细信息,请参阅函数

使用规则查看速度值

除了返回决策之外,规则还可以使用 观察函数 (如 Output() 将某些值输出到 API 响应。 例如,用户可以编写以下子句,该子句不做出决定,但只会在 API 响应中输出多个速度的值。

OBSERVE Output(
    totalSpending_7d = Velocity.totalSpending_perUser(@"user.userid", 7d),
    loginsPerDevice_1m = Velocity.loginCount_perDevice(@"deviceAttributes.deviceId", 1m)
)

然后,触发此规则的每个评估事件都将在 API 响应中打印以下部分:

"MerchantRuleOutput": {
    "clause1": {
        "totalSpending_7d": "523.99",
        "loginsPerDevice_1m": "1"
    }
},

可以使用事件跟踪将值发送到自己的Azure 事件中心或Azure Blob 存储实例,而不是将速度值直接打印到 API 响应。 例如,创建以下规则。

RETURN Approve(), Trace(
    totalSpending_7d = Velocity.totalSpending_perUser(@"user.userid", 7d),
    loginsPerDevice_1m = Velocity.loginCount_perDevice(@"deviceAttributes.deviceId", 1m)
)

如果订阅 FraudProtection.Trace.Rule 事件,则以下信息将作为每个事件的一部分发送。

"attributes": {
    "totalSpending_7d": 523.99
    "loginsPerDevice_1m": 1
}

其他资源