教學課程:使用串流分析來分析詐騙通話資料,並在 Power BI 儀表板中以視覺方式呈現結果
本教學課程說明如何使用 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.windows.net/;SharedAccessKeyName=<Your shared access policy name>;SharedAccessKey=<generated key>
請注意,連接字串包含多個以分號分隔的索引鍵/值組:Endpoint、SharedAccessKeyName 和 SharedAccessKey。
啟動事件產生器應用程式
啟動 TelcoGenerator 應用程式之前,您應該先將它設定為將資料傳送到您先前建立的事件中樞。
將 TelcoGenerator.zip 檔案的內容解壓縮。
在您選擇的文字編輯器中開啟
TelcoGenerator\TelcoGenerator\telcodatagen.exe.config
檔案。有一個以上的.config
檔案,請確實開啟正確的檔案。使用下列詳細資料更新組態檔中的
<appSettings>
元素:- 將 EventHubName 索引鍵的值設為連接字串結尾的 EntityPath 值。
- 將 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
取用者群組。 當作業包含自我聯結或有多個輸入時,某些輸入稍後可能由多個讀取器所讀取。 這種情況會影響單一取用者群組中的讀取器數目。針對 [驗證模式],選取 [連接字串]。 使用此選項更容易測試教學課程。
針對 [事件中樞原則名稱],選取 [使用現有項目],然後選取您先前建立的原則。
選取頁面底部的 [儲存]。
設定作業輸出
最後一個步驟是定義作業的輸出接收,也就是可以寫入轉換後資料的位置。 在本教學課程中,您可以使用 Power BI 輸出及視覺化資料。
從 Azure 入口網站開啟 [所有資源],然後選取 ASATutorial 串流分析作業。
在串流分析作業的 [作業拓撲] 區段中,選取 [輸出] 選項。
選取 [+ 新增輸出>Power BI]。
在輸出表單中填寫下列詳細資料:
設定 建議的值 輸出別名 MyPBIoutput 群組工作區 我的工作區 資料集名稱 ASAdataset 資料表名稱 ASATable 驗證模式 使用者權杖 選取 [授權],並依照提示驗證 Power BI。
選取 [Power BI] 頁面底部的 [儲存]。
本教學課程使用使用者權杖驗證模式。 若要使用受控識別,請參閱使用受控識別來驗證您的 Power BI Azure 串流分析作業。
建立查詢來轉換即時資料
目前,您已設定串流分析作業來讀取傳入資料流。 下一步是建立即時分析資料的查詢。 查詢使用類似 SQL 的語言,可針對串流分析來擴充一些功能。
在這一節的教學課程中,您會建立並測試數個查詢來學習幾種方法,以轉換輸入資料流來分析。
您在此處建立的查詢只是在螢幕上顯示轉換後的資料。 在稍後的章節中,您會將已轉換的資料寫入 Power BI。
若要深入了解語言,請參閱 Azure Stream Analytics 查詢語言參考。
使用傳遞查詢來測試
如果您想要封存每一個事件,您可以使用傳遞查詢,讀取事件承載中的所有欄位。
在 Azure 入口網站中瀏覽至您的串流分析作業,然後選取左側功能表 [作業拓撲] 底下的 [查詢]。
在查詢視窗中,輸入此查詢︰
SELECT * FROM CallStream
注意
如同 SQL,關鍵字不區分大小寫,空白字元也不重要。
在此查詢中,
CallStream
是您建立輸入時所指定的別名。 如果您使用不同的別名,請改為使用該名稱。選取 [測試查詢]。
串流分析作業會查詢來自輸入的範例資料,然後在視窗底部顯示輸出。 結果指出事件中樞和串流分析作業都正確設定。
您確實會看到的記錄數目取決於範例中所擷取的記錄數目。
使用資料行投影來減少欄位數目
在許多情況下,您的分析不需要輸入資料流的所有資料行。 您可以使用查詢來投影更小的一組傳回欄位,比傳遞查詢傳回的欄位更少。
執行下列查詢並注意輸出。
SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum
INTO
[MyPBIoutput]
FROM
CallStream
各區域的來電計數:含彙總的輪轉視窗
假設您想要計算每個區域的來電數目。 在串流資料中,當您想要執行彙總函式時 (例如計數),您需要將資料流分割成時態單位 (因為資料流本身實際上是沒有止境的)。 做法是使用串流分析視窗函式。 然後,您就可以將該視窗內的資料當作一個單位來使用。
在這個轉換過程中,您需要有一連串不重疊的時態性視窗,每個視窗會有一組特定的資料讓您分組和彙總。 這種視窗稱為「輪轉視窗」。 在輪轉視窗中,您可取得依 SwitchNum
(代表發話國家/地區) 分組的來電計數。
將下列查詢貼到查詢編輯器:
SELECT System.Timestamp as WindowEnd, SwitchNum, COUNT(*) as CallCount FROM CallStream TIMESTAMP BY CallRecTime GROUP BY TUMBLINGWINDOW(s, 5), SwitchNum
此查詢在
FROM
子句中使用Timestamp By
關鍵字,以指定使用輸入資料流中的哪個時間戳記欄位來定義輪轉視窗。 在此案例中,視窗會將每一筆記錄的資料依CallRecTime
欄位分段。 (如果未指定欄位,則時間範圍作業會使用每個事件抵達事件中樞的時間。 請參閱串流分析查詢語言參考中的<抵達時間與應用時間的比較>。投影包含
System.Timestamp
,它會傳回每個視窗結尾的時間戳記。若要指定使用輪轉視窗,請在
GROUP BY
子句中使用 TUMBLINGWINDOW 函式。 在此函式中,您可以指定時間單位 (從一微秒到一天即可) 和視窗大小 (單位數量)。 在本範例中,輪轉視窗由 5 秒的間隔組成,所以會依國家/地區產生每 5 秒的來電計數。選取 [測試查詢]。 在結果中,可看見 WindowEnd 底下的時間戳記是以 5 秒為增量單位。
使用自我聯結來偵測 SIM 詐騙
在此範例中,請將詐騙手法想像成同一位使用者在 5 秒內從不同位置撥出多通電話。 例如,按照常理,同一位使用者不可能同時從美國和澳大利亞打電話。
若要檢查這些情況,您可以使用自我聯結的串流資料,根據 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))
此查詢就像任何 SQL 聯結一樣,差別在於聯結中的
DATEDIFF
函式。 這是串流分析專用的DATEDIFF
版本,必須出現在ON...BETWEEN
子句中。 參數是時間單位 (在此範例中為秒) 和兩個聯結來源的別名。 此函式不同於標準 SQLDATEDIFF
函式。WHERE
子句中的條件會標出詐騙電話:發話端交換機不相同。選取 [測試查詢]。 檢閱輸出,然後選取 [儲存查詢]。
啟動作業並將輸出視覺化
若要啟動作業,請瀏覽至作業的 [概觀],然後選取 [啟動]。
針對作業輸出開始時間選取 [現在] 並選取 [啟動]。 您可以在通知列中檢視作業狀態。
作業成功之後,請瀏覽至 Power BI,然後使用公司或學校帳戶登入。 如果串流分析作業查詢會輸出結果,您所建立的 ASAdataset 會存在於 [資料集] 索引標籤下。
從 Power BI 工作區中選取 [+ 建立],建立名為詐騙電話的新儀表板。
在視窗頂端選取 [編輯],然後選取 [新增圖格]。
在 [ 新增磚] 視窗中,選取 [自定義串流數據 ] 和 [ 下一步]。
選擇 [數據集] 底下的 ASAdataset,然後選取 [下一步]。
從 [視覺效果類型] 下拉式清單中選取 [卡片],將詐騙電話新增至 [欄位],然後選取 [下一步]。
輸入磚的名稱(例如 詐騙電話),然後選取 [ 套用 ] 以建立磚。
使用下列選項,再次依照步驟 5 操作:
- 在 [視覺效果類型] 中選取 [折線圖]。
- 新增軸並選取 [windowend]。
- 新增值並選取 [詐騙電話]。
- 在 [要顯示的時間範圍] 中,選取過去 10 分鐘。
兩個圖格都新增之後,儀表板應該會如下列範例所示。 請注意,如果您的事件中樞傳送者應用程式和串流分析應用程式正在執行,則 Power BI 儀表板會在新資料送達時定期更新。
在 Web 應用程式中內嵌 Power BI 儀表板
在這部分的教學課程中,您將使用 Power BI 團隊所建立的範例 ASP.NET Web 應用程式來內嵌您的儀表板。 如需內嵌儀表板的詳細資訊,請參閱內嵌 Power BI 一文。
若要設定應用程式,請移至 Power BI-Developer-Samples GitHub 存放庫,並遵循 [使用者擁有數據] 區段底下的指示(使用 integrate-web-app 子區段下的重新導向和首頁 URL)。 因為我們使用儀表板範例,所以請使用位於 GitHub 存放庫的 integrate-web-app 範例程式碼。 一旦在瀏覽器中執行應用程式,請遵循下列步驟將先前建立的儀表板內嵌到網頁中:
選取 [登入 Power BI],以將您的 Power BI 帳戶中儀表板的存取權授與應用程式。
選取 [取得儀表板] 按鈕,即可在資料表中顯示您的帳戶儀表板。 尋找您先前建立的儀表板名稱 (powerbi-embedded-dashboard),並且複製對應的 EmbedUrl。
最後,將 EmbedUrl 貼到對應的文字欄位中,然後選取 [內嵌儀表板]。 您現在可以檢視 Web 應用程式中內嵌的相同儀表板。
下一步
在本教學課程中,您已建立簡單的串流分析作業、分析傳入的資料,並且在 Power BI 儀表板中呈現結果。 若要深入了解串流分析作業,請繼續下一個教學課程: