자습서: Stream Analytics를 사용하여 사기 전화 데이터를 분석하고 Power BI 대시보드에 결과 시각화
이 자습서에서는 Azure Stream Analytics를 사용하여 전화 통화 데이터를 분석하는 방법을 보여줍니다. 클라이언트 애플리케이션에서 생성한 전화 통화 데이터에는 사기 전화가 포함되며 이는 Stream Analytics 작업을 통해 검색됩니다. 신용 카드 사기 또는 ID 도용과 같은 다른 유형의 사기 감지에는 이 자습서의 기술을 사용할 수 있습니다.
이 자습서에서는 다음 작업을 수행합니다.
- 샘플 전화 통화 데이터를 생성하여 Azure Event Hubs로 보냅니다.
- Stream Analytics 작업을 만듭니다.
- 작업 입력 및 출력을 구성합니다.
- 사기 전화를 필터링하는 쿼리를 정의합니다.
- 작업을 테스트하고 시작합니다.
- Power BI에서 결과를 시각화합니다.
필수 조건
시작하기 전에 다음 단계를 완료해야 합니다.
- Azure 구독이 아직 없는 경우 무료 계정을 만듭니다.
- Microsoft 다운로드 센터에서 전화 통화 이벤트 생성기 앱 TelcoGenerator.zip을 다운로드하거나 GitHub에서 소스 코드를 가져옵니다.
- Power BI 계정이 필요합니다.
Azure에 로그인
Azure Portal에 로그인합니다.
이벤트 허브 만들기
Stream Analytics에서 사기성 호출 데이터 스트림을 분석하려면 몇 가지 샘플 데이터를 이벤트 허브로 보내야 합니다. 이 자습서에서는 Azure Event Hubs를 사용하여 Azure로 데이터를 보냅니다.
다음 단계에 따라 이벤트 허브를 만들고 해당 이벤트 허브로 호출 데이터를 전송합니다.
Azure Portal에 로그인합니다.
왼쪽 메뉴에서 모든 서비스를 선택하고, 사물 인터넷을 선택하고, Event Hubs 위로 마우스를 누른 다음, +(추가) 단추를 선택합니다.
네임스페이스 만들기 페이지에서 다음 단계를 수행합니다.
이벤트 허브를 만들 Azure 구독을 선택합니다.
리소스 그룹의 경우 새로 만들기를 선택하고 리소스 그룹의 이름을 입력합니다. Event Hubs 네임스페이스는 이 리소스 그룹에 만들어집니다.
네임스페이스 이름에 Event Hubs 네임스페이스의 고유한 이름을 입력합니다.
위치에서 네임스페이스를 만들려는 지역을 선택합니다.
가격 책정 계층으로 표준을 선택합니다.
페이지 아래쪽에서 검토 + 만들기를 선택합니다.
네임스페이스 만들기 마법사의 검토 + 만들기 페이지에서 모든 설정을 검토한 후 페이지 하단의 만들기를 선택합니다.
네임스페이스가 성공적으로 배포되면 리소스로 이동을 선택하여 Event Hubs 네임스페이스 페이지로 이동합니다.
Event Hubs 네임스페이스 페이지의 명령 모음에서 +이벤트 허브를 선택합니다.
이벤트 허브 만들기 페이지에서 이벤트 허브의 이름을 입력합니다. 파티션 수를 2로 설정합니다. 나머지 설정에서 기본 옵션을 사용하고 검토 + 만들기를 선택합니다.
검토 + 만들기 페이지의 맨 아래에서 만들기를 선택합니다. 배포가 성공할 때까지 기다립니다.
이벤트 허브에 대한 액세스 부여 및 연결 문자열 가져오기
애플리케이션에서 Event Hubs로 데이터를 보낼 수 있으려면 이벤트 허브에 액세스 권한을 허용하는 정책이 있어야 합니다. 액세스 정책은 권한 부여 정보를 포함하는 연결 문자열을 생성합니다.
Event Hubs 네임스페이스 페이지의 왼쪽 메뉴에서 공유 액세스 정책을 선택합니다.
정책 목록에서 RootManageSharedAccessKey를 선택합니다.
그런 다음 연결 문자열 - 기본 키 옆에 있는 복사 단추를 선택합니다.
연결 문자열을 텍스트 편집기에 붙여넣습니다. 그 다음 섹션에서 이 연결 문자열이 필요합니다.
연결 문자열은 다음과 비슷합니다.
Endpoint=sb://<Your event hub namespace>.servicebus.windows.net/;SharedAccessKeyName=<Your shared access policy name>;SharedAccessKey=<generated key>
연결 문자열 세미콜론으로 구분된 여러 키-값 쌍(엔드포인트, SharedAccessKeyName 및 SharedAccessKey)을 포함합니다.
이벤트 생성기 애플리케이션 시작
TelcoGenerator 앱을 시작하기 전에, 앞에서 만든 Azure Event Hubs로 데이터를 전송하도록 앱을 구성해야 합니다.
TelcoGenerator.zip 파일의 콘텐츠를 추출합니다.
원하는 텍스트 편집기에서
TelcoGenerator\TelcoGenerator\telcodatagen.exe.config
파일을 엽니다..config
파일이 여러 개 있으므로 올바른 파일을 열어야 합니다.구성 파일의
<appSettings>
요소를 다음 세부 정보로 업데이트합니다.- EventHubName 키 값을 연결 문자열 끝에 있는 EntityPath 값으로 설정합니다.
- Microsoft.ServiceBus.ConnectionString 키의 값을 네임스페이스에 대한 연결 문자열 설정합니다. 네임스페이스가 아닌 이벤트 허브에 대한 연결 문자열 사용하는 경우 마지막에 값(
;EntityPath=myeventhub
)을 제거EntityPath
합니다. EntityPath 값 앞에 오는 세미콜론은 제거해야 합니다.
파일을 저장합니다.
명령 창을 열고 TelcoGenerator 애플리케이션 압축을 푼 폴더로 변경합니다. 다음 명령을 입력합니다.
.\telcodatagen.exe 1000 0.2 2
이 명령은 다음 매개 변수를 사용합니다.
- 시간당 호출 데이터 레코드 수.
- 사기 확률 - 즉, 앱에서 사기성 호출을 시뮬레이션해야 하는 빈도. 값 0.2는 호출 레코드의 약 20%가 사기성으로 나타남을 의미합니다.
- 기간(시간) - 앱을 실행해야 하는 시간. 명령줄에서 프로세스(Ctrl+C)를 종료하여 언제든지 앱을 중지할 수도 있습니다.
몇 초 후 앱에서 이벤트 허브로 데이터를 전송함에 따라 화면에 전화 통화 레코드가 표시되기 시작합니다. 이 전화 통화 데이터에는 다음 필드가 포함되어 있습니다.
녹음 정의 CallrecTime 호출 시작 시간에 대한 타임스탬프 SwitchNum 호출 연결에 사용되는 전화 스위치. 이 예에서는 스위치는 발신 국가/지역(미국, 중국, 영국, 독일 또는 오스트레일리아)를 나타내는 문자열입니다. CallingNum 호출자의 전화번호. CallingIMSI 국제 모바일 구독자 ID(IMSI) 호출자의 고유 식별자. CalledNum 호출 수신자의 전화번호. CalledIMSI 국제 모바일 구독자 ID(IMSI) 호출 수신자의 고유 식별자.
Stream Analytics 작업 만들기
이제 호출 이벤트 스트림이 생겼으니, 이벤트 허브에서 데이터를 읽는 Stream Analytics 작업을 만들 수 있습니다.
- Stream Analytics 작업을 만들려면 Azure Portal로 이동합니다.
- 리소스 만들기를 선택하고 Stream Analytics 작업을 검색합니다. Stream Analytics 작업 타일을 선택하고 만들기를 선택합니다.
- 새 Stream Analytics 작업 페이지에서 다음 단계를 수행합니다.
구독에서 Event Hubs 네임스페이스가 포함된 구독을 선택합니다.
리소스 그룹에서 이전에 만든 리소스 그룹을 선택합니다.
인스턴스 세부 정보 섹션의 이름에 Stream Analytics 작업의 고유한 이름을 입력합니다.
지역에서 Stream Analytics 작업을 만들려는 지역을 선택합니다. 최상의 성능을 위해 동일한 지역에 작업과 이벤트 허브를 배치하여 지역 간 데이터 전송 비용을 지불하지 않는 것이 좋습니다.
호스팅 환경<에서 아직 선택하지 않은 경우 클라우드를 선택합니다. Stream Analytics 작업은 클라우드 또는 에지에 배포할 수 있습니다. 클라우드를 사용하면 Azure 클라우드에 배포할 수 있고, 에지를 사용하면 IoT Edge 디바이스에 배포할 수 있습니다.
스트리밍 단위의 경우 1을 선택합니다. 스트리밍 단위는 작업을 실행하는 데 필요한 컴퓨팅 리소스를 나타냅니다. 기본적으로 이 값은 1로 설정됩니다. 스트리밍 단위 크기를 조정하는 방법에 대한 자세한 내용은 스트리밍 단위의 이해 및 크기 조정 문서를 참조하세요.
페이지 아래쪽에서 검토 + 만들기를 선택합니다.
- 검토 + 만들기 페이지에서 설정을 검토한 다음 만들기를 선택하여 Stream Analytics 작업을 만듭니다.
- 작업이 배포된 후 리소스로 이동을 선택하여 Stream Analytics 작업 페이지로 이동합니다.
작업 입력 구성
다음 단계는 이전 섹션에서 만든 이벤트 허브를 사용하여 작업이 데이터를 읽을 입력 원본을 정의하는 것입니다.
Stream Analytics 작업 페이지의 왼쪽 메뉴에 있는 작업 토폴로지 섹션에서 입력을 선택합니다.
입력 페이지에서 + 입력 및 이벤트 허브 추가를 선택합니다.
이벤트 허브 페이지에서 다음 단계를 따릅니다.
입력 별칭에 CallStream을 입력합니다. 입력 별칭은 입력을 식별하기 위한 식별 이름입니다. 입력 별칭은 영숫자 문자, 하이픈, 밑줄만 사용할 수 있으며 길이가 3자에서 63자 사이여야 합니다.
구독에서 이벤트 허브를 만든 Azure 구독을 선택합니다. 이벤트 허브는 Stream Analytics 작업과 같은 구독일 수도 있고 다른 구독일 수도 있습니다.
Event Hubs 네임스페이스에서 이전 섹션에서 만든 Event Hubs 네임스페이스를 선택합니다. 현재 구독에서 사용할 수 있는 모든 네임스페이스가 드롭다운에 나열됩니다.
이벤트 허브 이름에서 이전 섹션에서 만든 이벤트 허브를 선택합니다. 선택한 네임스페이스에서 사용할 수 있는 모든 이벤트 허브가 드롭다운에 나열됩니다.
이벤트 허브 소비자 그룹의 경우 이벤트 허브에 새 소비자 그룹이 만들어지도록 새로 만들기 옵션을 선택한 상태로 유지합니다. 각 Stream Analytics 작업마다 고유한 소비자 그룹을 사용하는 것이 좋습니다. 소비자 그룹이 지정되지 않은 경우 Stream Analytics 작업은
$Default
소비자 그룹을 사용합니다. 작업에 셀프 조인이 포함되어 있거나 입력이 여러 개인 경우 나중에 둘 이상의 읽기 권한자가 일부 입력을 읽을 수 있습니다. 이러한 상황은 단일 소비자 그룹의 읽기 권한자 수에 영향을 줍니다.인증 모드에 대해 연결 문자열을 선택합니다. 이 옵션을 사용하면 자습서를 테스트하기가 더 쉽습니다.
이벤트 허브 정책 이름에서 기존 항목 사용을 선택한 다음 이전에 만든 정책을 선택합니다.
페이지 맨 아래에서 저장을 선택합니다.
작업 출력 구성
마지막 단계는 작업이 변환된 데이터를 쓸 수 있는 출력 싱크를 정의하는 것입니다. 이 자습서에서는 Power BI를 사용하여 데이터를 출력하고 시각화합니다.
Azure Portal에서 모든 리소스를 열고 ASATutorial Stream Analytics 작업을 선택합니다.
Stream Analytics 작업의 작업 토폴로지 섹션에서 출력 옵션을 선택합니다.
+ 출력>Power BI 추가를 선택합니다.
출력 양식을 다음 세부 정보로 채우세요.
설정 제안 값 출력 별칭 MyPBIoutput 그룹 작업 영역 내 작업 영역 데이터 세트 이름 ASAdataset 테이블 이름 ASATable 인증 모드 사용자 토큰 권한 부여를 선택하고 프롬프트에 따라 Power BI를 인증합니다.
Power BI 페이지 하단에서 저장을 선택합니다.
이 자습서에서는 사용자 토큰 인증 모드를 사용합니다. 관리 ID를 사용하려면 관리 ID를 사용하여 Power BI에 대한 Azure Stream Analytics 작업 인증을 참조하세요.
실시간 데이터를 변환하는 쿼리 만들기
이 시점에는 들어오는 데이터 스트림을 읽도록 설정된 Stream Analytics 작업이 있습니다. 다음 단계는 실시간으로 데이터를 분석하는 쿼리를 만드는 것입니다. 쿼리는 Stream Analytics와 관련된 일부 확장 기능을 포함한 SQL과 유사한 언어를 사용합니다.
자습서의 이 섹션에서는 분석을 위해 입력 스트림을 변환할 수 있는 몇 가지 방법에 대해 알아보기 위해 여러 쿼리를 작성 및 테스트합니다.
여기서 작성한 쿼리는 화면에 변환된 데이터를 표시하기만 합니다. 이후 섹션에서는 변환된 데이터를 Power BI에 기록합니다.
이 언어에 대한 자세한 내용은 Azure Stream Analytics 쿼리 언어 참조를 참조하세요.
통과 쿼리를 사용하여 테스트
모든 이벤트를 보관하려는 경우 통과 쿼리를 사용하여 이벤트의 페이로드에서 모든 필드를 읽을 수 있습니다.
Azure Portal에서 Stream Analytics 작업으로 이동하고 왼쪽 메뉴의 작업 토폴로지에서 쿼리를 선택합니다.
쿼리 창에서 다음 쿼리를 입력합니다.
SELECT * FROM CallStream
참고 항목
SQL처럼 키워드는 대/소문자를 구분하지 않고 공백은 중요하지 않습니다.
쿼리에서
CallStream
은 입력을 만들 때 지정한 별칭입니다. 다른 별칭을 사용하는 경우 대신 해당 이름을 사용합니다.테스트 쿼리를 선택합니다.
Stream Analytics 작업이 입력의 샘플 데이터에 대해 쿼리를 실행하고 창 아래쪽에 출력을 표시합니다. 결과에는 Event Hubs 및 Stream Analytics 작업이 올바르게 구성되었다고 표시됩니다.
표시되는 레코드의 정확한 수는 샘플에서 캡처된 레코드 수에 따라 달라집니다.
열 프로젝션을 사용하여 필드 수 줄이기
대부분의 경우 분석 시에 입력 스트림의 모든 열이 필요하지는 않습니다. 쿼리를 사용하여 통과 쿼리에서보다 더 작은 집합의 반환된 필드를 프로젝션할 수 있습니다.
다음 쿼리를 실행하고 출력을 확인합니다.
SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum
INTO
[MyPBIoutput]
FROM
CallStream
지역별로 들어오는 호출 수: 집계를 포함하는 연속 창
지역당 들어오는 호출의 수를 계산한다고 가정합니다. 스트리밍 데이터에서 개수와 같은 집계 함수를 수행하려는 경우 데이터 스트림 자체가 사실상 무한하므로 스트림을 시간 단위로 분할해야 합니다. Streaming Analytics window 함수를 사용하여 이 작업을 수행합니다. 그런 다음 해당 창 내에서 데이터를 단위로 작업할 수 있습니다.
이 변환의 경우 겹치지 않는 임시 창 시퀀스를 원합니다. 각 창에는 그룹화하고 집계할 수 있는 개별 데이터 집합이 있습니다. 이러한 형식의 창을 연속 창이라고 합니다. 연속 창 내에서 호출이 시작된 국가/지역을 나타내는 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
필드에 따라 데이터를 세그먼트로 나눕니다. (이 필드를 지정하지 않으면 창 작업에서 각 이벤트가 이벤트 허브에 도착한 시간을 사용합니다.) Stream Analytics 쿼리 언어 참조에서 “도착 시간과 애플리케이션 시간”을 참조하세요.프로젝션에는 각 창의 끝에 대한 타임스탬프를 반환하는
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))
이 쿼리는 조인에서
DATEDIFF
함수를 제외하고 SQL 조인과 유사합니다. 이DATEDIFF
버전은 Streaming Analytics에 국한되며ON...BETWEEN
절에 표시되어야 합니다. 매개 변수는 시간 단위(이 예제에서는 초)와 조인의 두 원본에 대한 별칭입니다. 이 함수는 표준 SQLDATEDIFF
함수와 다릅니다.WHERE
절에는 사기성 호출에 플래그를 지정하는 조건이 포함되며 발신 스위치는 동일하지 않습니다.테스트 쿼리를 선택합니다. 출력을 검토한 다음, 쿼리 저장을 선택합니다.
작업을 시작하고 출력을 시각화
작업을 시작하려면 작업 개요로 이동하여 시작을 선택합니다.
작업 출력 시작 시간으로 지금을 선택하고 시작을 선택합니다. 알림 표시줄에서 작업 상태를 볼 수 있습니다.
작업이 성공하면 Power BI로 이동하여 회사 또는 학교 계정으로 로그인합니다. Stream Analytics 작업 쿼리가 결과를 출력 중이면 앞에서 만든 ASAdataset 데이터 세트가 데이터 세트 탭에 있는 것입니다.
Power BI 작업 영역에서 + 만들기를 선택하여 사기성 호출이라는 새 대시보드를 만듭니다.
창 맨 위에서 편집 및 타일 추가를 선택합니다.
타일 추가 창에서 사용자 지정 스트리밍 데이터 및 다음을 선택합니다.
데이터 세트 아래에서 ASAdataset을 선택하고 다음을 선택합니다.
시각화 유형 드롭다운에서 카드를 선택하고, 필드에 사기성 호출을 추가한 다음, 다음을 선택합니다.
타일의 이름(예: 사기성 호출)을 입력한 다음 적용을 선택하여 타일을 만듭니다.
다음 옵션을 사용하여 5단계를 다시 수행합니다.
- 시각화 유형으로 이동하여 꺾은선형 차트를 선택합니다.
- 축을 추가하고 windowend를 선택합니다.
- 값을 추가하고 사기성 전화를 선택합니다.
- 표시할 시간 창에 지난 10분을 선택합니다.
두 타일이 모두 추가되면 대시보드는 다음 예제와 같이 표시됩니다. 이벤트 허브 발신자 애플리케이션 및 Stream Analytics 애플리케이션이 실행 중이면 새 데이터가 도착할 때마다 Power BI 대시보드가 주기적으로 업데이트됩니다.
웹 애플리케이션에 Power BI 대시보드 포함
자습서의 이 부분에서는 Power BI 팀에서 만든 샘플 ASP.NET 웹 애플리케이션을 사용하여 대시보드를 포함합니다. 대시보드를 포함하는 방법에 대한 자세한 내용은 Power BI를 통해 포함 문서를 참조하세요.
애플리케이션을 설정하려면 Power BI-Developer-Samples GitHub 리포지토리로 이동하고 사용자 소유 데이터 섹션의 지침을 따릅니다(integration-web-app 하위 섹션에서 리디렉션 및 홈페이지 URL 사용). 우리는 대시보드 예를 사용할 예정이므로 GitHub 리포지토리에 있는 통합-웹앱 샘플 코드를 사용합니다. 브라우저에서 애플리케이션을 실행한 후에는 다음 단계에 따라 이전에 만든 대시보드를 웹 페이지에 포함합니다.
Power BI에 로그인을 선택합니다. 그러면 Power BI 계정에 대시보드에 대한 애플리케이션 액세스 권한이 부여됩니다.
대시보드 가져오기 단추를 선택합니다. 그러면 계정의 대시보드가 테이블에 표시됩니다. 앞에서 만든 대시보드 이름(powerbi-embedded-dashboard)을 찾아서 해당 EmbedUrl을 복사합니다.
마지막으로 EmbedUrl을 해당 텍스트 필드에 붙여넣고 대시보드 포함을 선택합니다. 이제 웹 애플리케이션에 동일한 대시보드가 포함된 것을 볼 수 있습니다.
다음 단계
이 자습서에서는 간단한 Stream Analytics 작업을 만들고, 들어오는 데이터를 분석하고, 그 결과를 Power BI 대시보드에 표시했습니다. Stream Analytics 작업에 대해 자세히 알아보려면 그 다음 자습서를 계속 진행하세요.