Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本教程介绍如何使用 Azure 流分析来分析电话呼叫数据。 客户端应用程序生成的电话呼叫数据包含流分析作业检测到的欺诈性呼叫。 本教程中的技术也适用于其他类型的欺诈检测,如信用卡欺诈或身份盗用。
将在本教程中执行以下任务:
- 生成示例性的电话呼叫数据并将其发送到 Azure 事件中心。
- 创建流分析作业。
- 配置作业输入和输出。
- 定义用于筛选欺诈性呼叫的查询。
- 测试并启动任务。
- 在 Power BI 中可视化结果。
先决条件
在开始之前,请确保完成以下步骤:
- 如果没有 Azure 订阅,请创建试用版。
- 请从 Microsoft 下载中心下载电话呼叫事件生成器应用 TelcoGenerator.zip,或者从 GitHub 获取源代码。
- 需要一个 Power BI 帐户。
登录 Azure
登录到 Azure 门户。
创建事件中心
需要先将一些示例数据发送到事件中心,然后流分析才能分析欺诈性呼叫数据流。 在本教程中,你将使用 Azure 事件中心将数据发送到 Azure。
请按以下步骤创建一个事件中心,然后向该事件中心发送调用数据:
登录到 Azure 门户。
选择左侧菜单中的“所有服务”,选择“物联网”,将鼠标悬停在“事件中心”上,然后选择“+ (添加)”按钮。
在“创建命名空间”页上执行以下步骤:
选择用于创建事件中心的 Azure 订阅。
对于“资源组”,请选择“新建”,然后输入资源组的名称。 事件中心命名空间将在此资源组中创建。
对于“命名空间名称”,请输入事件中心命名空间的唯一名称。
对于“位置”,请选择要在其中创建命名空间的区域。
对于“定价层”,请选择“标准”。
在页面底部选择“查看 + 创建”。
在命名空间创建向导的“查看 + 创建”页上,在查看所有设置后,选择页面底部的“创建”。
成功部署命名空间后,选择“转到资源”以导航到“事件中心命名空间”页。
在 “事件中心命名空间 ”页上,选择命令栏上的 “+事件中心 ”。
在“创建事件中心”页上,为事件中心输入一个名称。 将分区计数设置为 2。 对其余设置使用默认选项,然后选择“查看 + 创建”。
在“查看 + 创建”页上,选择页面底部的“创建”。 然后,等待部署成功完成。
授予对事件中心的访问权限,并获取连接字符串
在应用程序可以将数据发送到 Azure 事件中心之前,事件中心必须具有允许访问的策略。 访问策略生成包含授权信息的连接字符串。
在 “事件中心命名空间 ”页上,选择左侧菜单中 的“共享访问策略 ”。
从策略列表中选择 RootManageSharedAccessKey。
然后选择“连接字符串 - 主密钥”旁边的复制按钮。
将连接字符串粘贴到文本编辑器中。 需要在下一部分使用此连接字符串。
连接字符串如下所示:
Endpoint=sb://<Your event hub namespace>.servicebus.chinacloudapi.cn/;SharedAccessKeyName=<Your shared access policy name>;SharedAccessKey=<generated key>请注意,连接字符串包含多个用分号隔开的键值对:Endpoint、SharedAccessKeyName 和 SharedAccessKey。
启动事件生成器应用程序
在启动 TelcoGenerator 应用之前,应该对其进行配置,以便将数据发送到此前创建的 Azure 事件中心。
提取 TelcoGenerator.zip 文件的内容。
在所选文本编辑器中打开
TelcoGenerator\TelcoGenerator\telcodatagen.exe.config文件。有多个.config文件,因此请确保打开正确的文件。使用以下详细信息更新配置文件中的
<appSettings>元素:- 将 EventHubName 键的值设置为在上一部分创建的事件中心的名称。
- 将 Microsoft.ServiceBus.ConnectionString 键的值设置为命名空间的连接字符串。 如果将连接字符串用于事件中心(而不是命名空间),请移除末尾的
EntityPath值(;EntityPath=myeventhub)。 别忘了删除 EntityPath 值前面的分号。
保存文件。
接下来打开命令窗口,转到解压缩 TelcoGenerator 应用程序的文件夹。 然后输入以下命令:
.\telcodatagen.exe 1000 0.2 2此命令采用以下参数:
- 每小时的呼叫数据记录数。
- 欺诈概率 (%),即应用模拟欺诈呼叫的频率。 值 0.2 表示大约有 20% 的通话记录似乎具有欺诈性。
- 持续时间(小时),即应用应运行的小时数。 还可以通过在命令行终止此过程 (Ctrl+C) 来随时停止该应用。
几秒钟后,当应用将电话通话记录发送到事件中心时,应用将开始在屏幕上显示通话记录。 这些电话呼叫数据包含以下字段:
记录 定义 CallrecTime 呼叫开始时间的时间戳。 SwitchNum 用于连接呼叫的电话交换机。 在此示例中,选项是表示来源国家/地区名称的字符串(例如美国、中国、英国、德国或者澳大利亚)。 CallingNum 呼叫方的电话号码。 CallingIMSI 国际移动用户标识 (IMSI)。 它是呼叫方的唯一标识符。 CalledNum 呼叫接收人的电话号码。 CalledIMSI 国际移动用户标识 (IMSI)。 它是呼叫接收人的唯一标识符。
创建流分析作业
有了呼叫事件流以后,即可创建流分析作业,以便从事件中心读取数据。
若要创建流分析作业,请导航到 Azure 门户。
在左侧菜单中选择 “所有服务 ”,搜索 流分析作业,将鼠标悬停在 “流分析作业 ”磁贴上,然后在 + 弹出窗口中选择按钮或选择“ 创建 ”。
在 “新建流分析作业 ”页上,执行以下步骤:
对于“订阅”,请选择包含该事件中心命名空间的订阅。
对于“资源组”,请选择先前创建的资源组。
在“实例详细信息”部分,对于“名称”,请输入流分析任务的唯一名称。
在“区域”中,选择您想要在其中创建流分析作业的区域。 我们建议将作业和事件中心放在同一区域以获得最佳性能,这样还无需为不同区域之间的数据传输付费。
对于“托管环境 ”,请选择“云”(如果尚未选择)。 流分析作业可以部署到云或边缘设备。 你可以通过
功能部署到 Azure 云,使用 功能部署到 IoT Edge 设备。 对于“流媒体单元”,请选择“1”。 流处理单元代表执行作业所需的计算资源。 默认情况下,此值设置为 1。 若要了解如何缩放流单元,请参阅了解和调整流单元一文。
在页面底部选择“查看 + 创建”。
在“查看 + 创建”页上查看设置,然后选择“创建”以创建流分析作业。
部署作业后,选择“转至资源”以进入“流分析作业”页。
配置作业输入
下一步是使用在上一部分创建的事件中心,为用于读取数据的作业定义输入源。
在“流分析作业”页上,在左侧菜单中的“作业拓扑”部分选择“输入”。
在“输入”页上,选择“+ 添加输入”和“事件中心”。
在“事件中心”页上执行以下步骤:
对于输入别名,请输入CallStream。 输入别名是用于标识输入的易记名称。 输入别名只能包含字母数字字符和连字符,并且长度必须介于 3-63 个字符之间。
对于“订阅”,请选择您创建事件中心所在的 Azure 订阅。 事件中心可以位于与流分析作业相同的订阅计划中,也可以位于不同的订阅计划中。
对于“事件中心命名空间”,请选择在上一部分创建的事件中心命名空间。 当前订阅中可用的所有命名空间均列在下拉列表中。
对于“事件中心名称”,请选择您在上一部分创建的事件中心。 所选命名空间中可用的所有事件中心均列在下拉列表中。
对于“事件中心使用者组”,请保持选中“新建”选项,以便在事件中心上创建新的使用者组。 建议对每个流分析作业使用不同的使用者组。 如果未指定任何使用者组,流分析作业将使用
$Default使用者组。 如果作业包含自联接或具有多个输入,则稍后的某些输入可能会由多个读取器读取。 这种情况会影响单个使用者组中的读取器数量。对于身份验证模式,请选择连接字符串。 使用此选项可以更轻松地测试本教程。
对于 事件中心策略名称,请选择 “使用现有”,然后选择默认策略: RootManageSharedAccessKey。
选择页面底部的“保存” 。
配置作业输出
最后一步是定义作业的输出接收器,以便在其中写入转换后的数据。 在本教程中,你将使用 Power BI 输出和可视化数据。
从 Azure 门户打开“所有资源”,然后选择 ASATutorial 流分析作业。
在“流分析作业”的“作业拓扑”部分,选择“输出”选项 。
选择“+ 添加输出”>“Power BI”。
在输出表单中填写以下详细信息:
设置 建议的值 输出别名 MyPBI输出 团队工作区 我的工作区 数据集名称 ASAdataset 表名称 ASATable 身份验证模式 用户令牌 选择“授权”并按提示向 Power BI 进行身份验证。
选择 Power BI 页面底部的“保存”。
本教程采用用户令牌身份验证模式。
创建查询以转换实时数据
在此阶段,设置流分析作业以读取传入的数据流。 接下来创建一个分析实时数据的查询。 这些查询使用类似 SQL 的语言,该语言具有特定于流分析的一些扩展。
在本教程的本节中,你将创建和测试多个查询,以了解转换输入流以进行分析的几种方法。
在此处创建的查询只显示已转换的数据到屏幕。 在后面的部分中,你将转换后的数据写入 Power BI。
有关语言的详细信息,请参阅 Azure 流分析查询语言参考。
使用直通查询进行测试
如果要存档每个事件,请使用传递查询读取事件有效负载中的所有字段。
在 Azure 门户中转到流分析作业,然后在左侧菜单中的“作业拓扑”下选择“查询”。
在查询窗口中输入以下查询:
SELECT * FROM CallStream注意
与 SQL 一样,关键字不区分大小写,空格并不重要。
在此查询中,
CallStream是创建输入时指定的别名。 如果使用了其他别名,请改为使用该名称。选择“测试查询”。
流分析作业对来自输入的示例数据运行查询,并在窗口底部显示输出。 结果表明事件中心和流分析作业配置正确。
你看到的确切记录数取决于你在采样中捕获的记录数。
使用列投影减少字段数
在许多情况下,分析并不需要输入流中的所有列。 使用查询投影一个比直通查询返回字段集更小的字段集。
运行以下查询,并注意输出。
SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum
INTO
[MyPBIoutput]
FROM
CallStream
按区域统计传入呼叫数:带聚合功能的滚动窗口
假设要计算每个区域的传入呼叫数。 在流数据中,当要执行聚合函数(如计数)时,需要将流划分为临时单位,因为数据流本身实际上是无限的。 您可以使用流分析 窗口函数来执行此分段。 然后,可以使用该窗口中的数据作为一个单元。
对于此转换,需要一系列不重叠的临时窗口 - 每个窗口都有一组可以分组和聚合的离散数据。 这种类型的窗口称为‘滚动窗口’。 在滚动窗口中,可以获取按SwitchNum分组的传入呼叫计数,其中SwitchNum表示呼叫发起的区域。
将以下查询粘贴到查询编辑器中:
SELECT System.Timestamp as WindowEnd, SwitchNum, COUNT(*) as CallCount FROM CallStream TIMESTAMP BY CallRecTime GROUP BY TUMBLINGWINDOW(s, 5), SwitchNum此查询在
Timestamp By子句中使用FROM关键字来指定输入流中要用于定义翻转窗口的时间戳字段。 在这种情况下,窗口按每条记录中的CallRecTime字段将数据划分为段。 如果未指定字段,窗口操作将使用每个事件到达事件中心时的时间。 有关详细信息,请参阅 流分析查询语言参考中的“到达时间与应用程序时间”。投影包括
System.Timestamp,后者将返回每个窗口结束时的时间戳。若要指定要使用翻滚窗口,请在
子句中使用 TUMBLINGWINDOW 函数。 在函数中,可以指定时间单位(从微秒到一天的任意时间)和窗口大小(单位数)。 在此示例中,滚动窗口由 5 秒间隔组成,因此每 5 秒的通话次数按区域统计。选择“测试查询”。 在结果中,请注意“WindowEnd”下的时间戳以 5 秒为增量。
使用自联接方法检测 SIM 卡欺诈
在此示例中,认为欺诈性使用指的是来自同一用户的呼叫,但这些呼叫在相隔不超过五秒钟的时间内来自不同位置。 例如,同一用户不能合法地同时从美国和澳大利亚发起呼叫。
若要检查这些情况,请对流数据进行自联接,根据 CallRecTime 值将数据流与自身进行联接。 然后,可以查找CallingIMSI值(原始号码)相同但SwitchNum值(来源地区)不一样的呼叫记录。
在将流数据与联接结合使用时,您必须设定匹配行在时间上的分隔范围限制。 如前所述,流数据实际上是无限的。 使用ON函数指定联接子句内DATEDIFF关系的时间边界。 在这种情况下,联接基于 5 秒的调用数据间隔。
将以下查询粘贴到查询编辑器中:
SELECT System.Timestamp AS WindowEnd, COUNT(*) AS FraudulentCalls INTO "MyPBIoutput" FROM "CallStream" CS1 TIMESTAMP BY CallRecTime JOIN "CallStream" CS2 TIMESTAMP BY CallRecTime ON CS1.CallingIMSI = CS2.CallingIMSI AND DATEDIFF(ss, CS1, CS2) BETWEEN 1 AND 5 WHERE CS1.SwitchNum != CS2.SwitchNum GROUP BY TumblingWindow(Duration(second, 1))除了联接中的
DATEDIFF函数以外,此查询与任何 SQL 联接类似。 此DATEDIFF版本专用于流分析,必须出现在ON...BETWEEN子句中。 参数为时间单位(此示例中为秒)和联接的两个源的别名。 此函数与标准 SQLDATEDIFF函数不同。WHERE子句包含标志欺诈呼叫的条件:始发交换机不同。选择“测试查询”。 查看输出,然后选择“保存查询”。
启动作业并可视化输出
若要启动作业,请转到作业 概述 ,然后选择“ 开始”。
选择“现在”作为作业输出启动时间,然后选择“启动”。 可以在通知栏中查看作业状态。
作业成功后,转到 Power BI 并使用工作或学校帐户登录。 如果流分析作业查询输出结果,则创建的 ASAdataset 数据集将显示在 “数据集 ”选项卡下。
从 Power BI 工作区选择“+ 创建”,创建名为“欺诈性呼叫”的新仪表板。
在窗口顶部,选择“编辑”和“添加磁贴” 。
在“添加磁贴”窗口中,选择“自定义流式处理数据”和“下一步”。
在“你的数据集”下选择“ASAdataset”,然后选择“下一步”。
从“可视化效果类型”下拉列表中选择“卡片”,向“字段”添加“欺诈电话”,然后选择“下一步”。
输入磁贴的名称(例如“欺诈性呼叫”),然后选择“应用”以创建该磁贴。
使用以下选项再次遵循步骤 5:
- 转到“可视化效果类型”后,选择“折线图”。
- 添加一个轴,然后选择windowend。
- 添加一个值并选择欺诈性电话。
- 对于“要显示的时间窗口”,请选择最近 10 分钟。
添加两个磁贴后,仪表板将如以下示例所示。 如果事件中心发送方应用程序和流分析应用程序正在运行,Power BI 仪表板会随着新数据到达而定期更新。
将 Power BI 仪表板嵌入到 Web 应用中
对于本教程的这一部分,请使用 Power BI 团队创建的示例 ASP.NET Web 应用程序来嵌入仪表板。 有关嵌入仪表板的详细信息,请参阅 使用 Power BI 进行嵌入的文章。
若要设置应用程序,请访问 Power BI-Developer-Samples GitHub 存储库,然后按照“用户拥有数据”部分的说明操作(请使用 integrate-web-app 子部分下的重定向 URL 和主页 URL)。 由于使用的是仪表板示例,请使用 integrate-web-app 示例代码,该代码位于 GitHub 存储库。 在浏览器中运行应用程序后,请按照以下步骤将之前创建的仪表板嵌入到网页中:
选择“登录到 Power BI”,以便授予应用程序访问 Power BI 帐户中的仪表板的权限。
选择名为“获取仪表板”的按钮,您的帐户的仪表板会以表格形式显示。 找到此前创建的仪表板的名称 powerbi-embedded-dashboard,然后复制相应的 EmbedUrl。
最后,将 EmbedUrl 粘贴到相应的文本字段中,然后选择“嵌入仪表板”。 现在可以查看嵌入 Web 应用程序中的同一仪表板了。
后续步骤
本教程介绍了如何创建简单的流分析作业、如何分析传入数据,以及如何在 Power BI 仪表板中展示结果。 若要详细了解流分析作业,请继续阅读下一教程: