重要
自 2025 年 2 月 3 日起,Dynamics 365 欺诈保护不再可供购买。 对欺诈保护的支持将于 2026 年 2 月 3 日结束。 有关详细信息,请参阅 终止支持 Dynamics 365 欺诈保护 文章。
来自用户或实体(如信用卡)的事件频率可能表示可疑活动和潜在的欺诈行为。 例如,在欺诈者尝试几个单个订单后,他们经常使用单个信用卡从单个 IP 地址或设备快速下达多个订单。 他们还可能使用许多不同的信用卡快速下单。 速度检查有助于识别这些类型的事件模式。 通过定义速度,可以监视这些类型的模式的传入事件,并使用规则来定义要将模式视为可疑的阈值。
如果 Microsoft Dynamics 365 欺诈保护的实例有多个环境,则可以使用环境切换器定义在特定环境中设置的速度。 只能在相应环境中定义的规则中引用速度。 如果在父环境中创建了速度,并且规则在同一环境中定义,则子环境中的事务将包含在父级规则运行时的速度中。
定义速度
速度集由各个速度组成。 使用以下结构中的 SELECT、 FROM、 WHEN 和 GROUPBY 关键字在 Dynamics 365 欺诈防护中定义速度。
SELECT <aggregation method> AS <velocity name>
FROM <event type>
WHEN <condition>
GROUPBY <attribute name>
注释
数组不能在速度定义中使用 GROUPBY。
SELECT 后,指定聚合方法:Count、DistinctCount 或 Sum。 然后使用 AS 关键字来命名速度。 然后,可以使用此名称来引用规则中的速度。
下面是聚合方法的说明。
聚合方法 DESCRIPTION 示例: 计数 此方法返回事件发生的次数。 SELECT Count() AS 购买次数 DistinctCount 此方法返回指定属性的非重复值数。 如果传入事件的指定属性为 null 或为空,则该事件不会导致聚合。 SELECT DistinctCount(@“device.ipAddress”) AS distinctIPaddresses 总和 此方法返回指定数值属性的值之和。 SELECT Sum(@“totalAmount”) AS totalSpending FROM 后,指定一个评估或观察事件以观察速度。 您想要观察速度或分组依据的字段必须是 API 调用的一部分。 若要观察跨事件速度,请跨评估或观察事件指定多个事件。
WHEN 语句是可选的。 在 WHEN 之后,可以键入布尔表达式。 聚合中仅考虑与条件匹配的事件。 忽略其他事件。 该表达式用于筛选在速度中考虑的事件。
在 GROUPBY 之后,指定属性或表达式。 然后,将为处理的每个事件计算属性或表达式。 在 GROUPBY 语句中被评估为相同值的所有事件被合并在一起,以计算 SELECT 语句中指定的聚合计算。 如果 传入事件的 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"
创建速度集
在 欺诈保护门户中的左侧导航栏中,选择 “速度”,然后选择“ 新建速度集”。
欺诈保护会创建一个草稿速度集,该集仅对你可见(创建者)。 请注意,对草稿所做的所有更改都会自动保存。
可选:在 “条件” 字段中,输入布尔条件。 或者,将字段留空。
聚合中仅考虑与此条件匹配的事件。 忽略其他事件。 例如,如果希望在速度集中仅汇总美国发生的事件,请定义以下条件:
当 @"user.countryRegion" == “US”
若要从头开始定义新速度,请选择 “新建速度”。 有关如何定义速度的信息,请参阅本文前面的“ 定义速度 ”部分。
若要从现有速度模板开始,请选择 新速度右侧的箭头。 若要查看现有模板及其内容的完整列表,请选择“ 查看所有”。
您可以在一组中添加最多 10 个速度。
若要发布速度,请选择“ 发布”。
在确认对话框中,可以更改速度的名称、说明或状态。 准备就绪后,选择“ 发布”。
发布速度后,速度集中所有速度值对所有用户可见。 随着事件流经欺诈保护,流速将开始汇总数据。
注释
发布速度后,它将开始从该点向前聚合数据。 不考虑历史数据。
有关如何使用速度值来做决策的信息,请参阅本文后面规则部分中的“使用速度值”。
了解“示例”窗格
创建或编辑速度集时, 示例 窗格将显示在页面右侧。
示例窗格显示可在速率中引用的所有事件属性。 这些属性因速度观察到的事件类型而异。 在窗格顶部的 “事件 ”字段中选择事件类型。
有效负载示例部分包含可在请求 API 中发送评估的属性示例。
扩充示例部分包含欺诈保护在发送初始请求后添加到事件的属性示例。 例如,这些属性包括欺诈保护 设备指纹 解决方案中的信息,以及机器学习模型的风险和机器人分数。
扩充示例还包括规则评估中的信息,例如决策、规则名称和触发的子句的名称。 您可以在您的速度设置中使用这些属性中的任何一个。 使用符号“@”来引用他们(例如 @“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]米
- [1–23]小时
- [1–90]d
注释
时间范围从上一度量单位的开头开始。 例如,如果当前日期和时间是 2021 年 4 月 1 日上午 11:04,并且检查两小时(2h)时间范围内的速度,则会看到自上午 9:00 以来的数据,而不是从上午 9:04 开始。
如果速度因错误而无法返回值,则返回默认值 0 ,并且规则继续运行。
在规则评估后,速度会随当前事件一起更新。 因此,如果在规则中引用速度,则它不包括正在处理的当前事件。
从函数中也可以调用速度。 有关详细信息,请参阅函数。
使用规则查看速度值
除了返回决策之外,规则还可以使用 观察函数 (如 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
}