Zelfstudie: Frauduleuze oproepgegevens analyseren met Stream Analytics en resultaten visualiseren in power BI-dashboard

In deze zelfstudie leert u hoe u telefoongesprekken kunt analyseren met Azure Stream Analytics. De telefoonoproepgegevens, gegenereerd door een clienttoepassing, bevatten frauduleuze oproepen die worden gedetecteerd door de Stream Analytics-taak. U kunt technieken uit deze zelfstudie gebruiken voor andere soorten fraudedetectie, zoals creditcardfraude of identiteitsdiefstal.

In deze zelfstudie voert u de volgende taken uit:

  • Gegevens van een voorbeeld van een telefoongesprek genereren en deze verzenden naar Azure Event Hubs.
  • Een Stream Analytics-taak maken.
  • Taakinvoer en -uitvoer configureren.
  • Query's definiëren om frauduleuze gesprekken eruit te filteren.
  • De taak testen en starten.
  • Resultaten visualiseren in Power BI.

Vereisten

Voordat u begint, moet u ervoor zorgen dat u de volgende stappen hebt uitgevoerd:

  • Als u geen Azure-abonnement hebt, maakt u een gratis account.
  • Download de gebeurtenisgenerator-app voor telefoongesprekken, TelcoGenerator.zip vanuit het Microsoft Downloadcentrum of haal de broncode op van GitHub.
  • U hebt een Power BI-account nodig.

Aanmelden bij Azure

Meld u aan bij het Azure-portaal.

Een Event Hub maken

U moet enkele voorbeeldgegevens verzenden naar een Event Hub voordat Stream Analytics de gegevensstroom voor frauduleuze gesprekken kan analyseren. In deze zelfstudie verzendt u gegevens naar Azure met behulp van Azure Event Hubs.

Gebruik de volgende stappen om een Event Hub te maken en oproepgegevens naar die Event Hub te verzenden:

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer Alle services in het linkermenu, selecteer Internet of Things, beweeg de muis over Event Hubs en selecteer vervolgens de knop + (Toevoegen).

    Schermopname van de pagina voor het maken van Event Hubs.

  3. Voer op de pagina Naamruimte maken de volgende stappen uit:

    1. Selecteer een Azure-abonnement waar u de Event Hub wilt maken.

    2. Voor de resourcegroep selecteert u Nieuwe maken en voert u een naam in voor de resourcegroep. De Event Hubs-naamruimte wordt gemaakt in deze resourcegroep.

    3. Voer voor naamruimtenaam een unieke naam in voor de Event Hubs-naamruimte.

    4. Selecteer voor Locatie de regio waarin u de naamruimte wilt maken.

    5. Selecteer Standard voor prijscategorie.

    6. Selecteer Controleren en maken onderaan de pagina.

      Schermopname van de pagina Naamruimte maken.

    7. Selecteer onder aan de pagina Controleren en maken van de wizard Naamruimte maken de optie Maken onder aan de pagina nadat u alle instellingen hebt bekeken.

  4. Nadat de naamruimte is geïmplementeerd, selecteert u Ga naar de resource om naar de pagina Event Hubs-naamruimte te navigeren.

  5. Selecteer +Event Hub op de opdrachtbalk op de pagina Event Hubs-naamruimte.

    Schermopname van de knop Event Hub toevoegen op de pagina Event Hubs-naamruimte.

  6. Voer op de pagina Event Hub maken een naam in voor de Event Hub. Stel Aantal partities in op 2. Gebruik de standaardopties in de overige instellingen en selecteer Beoordelen en maken.

    Schermopname van de pagina Event Hub maken.

  7. Selecteer onder aan de pagina Controleren en maken de optie Maken. Wacht tot de implementatie is voltooid.

Toegang verlenen tot de event hub en een verbindingsreeks ophalen

Voordat een toepassing gegevens naar Azure Event Hubs kan verzenden, moet de event hub een beleid hebben waarmee toegang wordt verleend. Het toegangsbeleid genereert een verbindingsreeks die autorisatiegegevens bevat.

  1. Selecteer op de pagina Event Hubs-naamruimte beleid voor gedeelde toegang in het linkermenu.

  2. Selecteer RootManageSharedAccessKey in de lijst met beleidsregels.

  3. Selecteer vervolgens de knop Kopiëren naast Verbinding maken iontekenreeks - primaire sleutel.

  4. Plak de verbindingsreeks in een teksteditor. U hebt deze verbindingsreeks nodig in de volgende sectie.

    De verbindingsreeks ziet er als volgt uit:

    Endpoint=sb://<Your event hub namespace>.servicebus.windows.net/;SharedAccessKeyName=<Your shared access policy name>;SharedAccessKey=<generated key>

    U ziet dat de verbindingsreeks meerdere sleutel-waardeparen bevat, gescheiden door puntkomma's: Eindpunt, SharedAccessKeyName en SharedAccessKey.

De app voor het genereren van gebeurtenissen starten

Voordat u de app TelcoGenerator start, moet u deze configureren voor het verzenden van gegevens naar de Azure Event Hubs die u eerder hebt gemaakt.

  1. Pak de inhoud van het bestand TelcoGenerator.zip uit.

  2. Open het TelcoGenerator\TelcoGenerator\telcodatagen.exe.config bestand in een teksteditor van uw keuze Er is meer dan één .config bestand, dus zorg ervoor dat u het juiste bestand opent.

  3. Update het <appSettings>-element in het configuratiebestand met de volgende details:

    • Stel de waarde van de EventHubName-sleutel in op de waarde van EntityPath aan het einde van de verbindingsreeks.
    • De waarde van Microsoft.ServiceBus.Verbinding maken instellenionString-toets naar de verbindingsreeks naar de naamruimte. Als u een verbindingsreeks gebruikt voor een Event Hub, niet een naamruimte, verwijdert EntityPath u de waarde (;EntityPath=myeventhub) aan het einde. Vergeet niet de puntkomma te verwijderen die voorafgaat aan de EntityPath-waarde.
  4. Sla het bestand op.

  5. Open vervolgens een opdrachtvenster en ga naar de map waar u de toepassing TelcoGenerator hebt uitgepakt. Voer vervolgens de volgende opdracht in:

    .\telcodatagen.exe 1000 0.2 2
    

    Voor deze opdracht worden de volgende parameters gebruikt:

    • Aantal records met gespreksgegevens per uur.
    • Percentage van fraudekans: hoe vaak de app een frauduleus gesprek moet simuleren. De waarde 0,2 betekent dat ongeveer 20% van de gespreksrecords frauduleus lijken.
    • Tijd in uren: het aantal uren dat de app moet worden uitgevoerd. U kunt de app ook op elk gewenst moment stoppen door het proces op de opdrachtregel te beëindigen (met Ctrl+C).

    Na enkele seconden begint de app met het weergeven van telefoongesprekrecords op het scherm wanneer deze naar de event hub worden gestuurd. De telefoongesprekgegevens bevatten de volgende velden:

    Record Definitie
    CallrecTime Het tijdstempel voor de begintijd van de oproep.
    SwitchNum Het schakelnummer van de oproep. In dit voorbeeld zijn de schakelnummers tekenreeksen die staan voor het land/de regio van herkomst (VS, China, UK, Duitsland of Australië).
    CallingNum Het telefoonnummer van de beller.
    CallingIMSI De International Mobile Subscriber Identity (IMSI). Dit is een unieke id van de beller.
    CalledNum Het telefoonnummer van de ontvanger.
    CalledIMSI De International Mobile Subscriber Identity (IMSI). Dit is een unieke id van de ontvanger.

Een Stream Analytics-taak maken

Nu u een stream van gesprekgebeurtenissen hebt, kunt u een Stream Analytics-taak maken die gegevens uit de event hub leest.

  1. Als u een Stream Analytics-taak wilt maken, gaat u naar de Azure-portal.
  2. Selecteer Een resource maken en zoek naar Stream Analytics-taak. Selecteer de tegel Stream Analytics-taak en selecteer Maken.
  3. Voer op de pagina Nieuwe Stream Analytics-taak de volgende stappen uit:
    1. Selecteer voor Abonnement het abonnement dat de Event Hubs-naamruimte bevat.

    2. Selecteer voor Resourcegroep de resourcegroep die u eerder hebt gemaakt.

    3. Voer in de sectie Instantiedetails voor Naam een unieke naam in voor de Stream Analytics-taak.

    4. Selecteer voor Regio de regio waarin u de Stream Analytics-taak wilt maken. We raden u aan om de taak en de Event Hub in dezelfde regio te plaatsen voor de beste prestaties en zodat u niet betaalt om gegevens over te dragen tussen regio's.

    5. Selecteer cloud als deze nog niet is geselecteerd voor hostingomgeving<. Stream Analytics-taken kunnen worden geïmplementeerd in Cloud of in Edge. Met cloud kunt u implementeren in Azure Cloud en Met Edge kunt u implementeren op een IoT Edge-apparaat.

    6. Selecteer 1 voor streaming-eenheden. Streaming-eenheden vertegenwoordigen de computerresources die nodig zijn om een taak uit te voeren. Deze waarde is standaard ingesteld op 1. Zie het artikel Streaming-eenheden begrijpen en aanpassen voor meer informatie over het schalen van streaming-eenheden.

    7. Selecteer Controleren en maken onderaan de pagina.

      Schermopname van de pagina Azure Stream Analytics-taak maken.

  4. Controleer de instellingen op de pagina Beoordelen en maken en selecteer Vervolgens Maken om de Stream Analytics-taak te maken.
  5. Nadat de taak is geïmplementeerd, selecteert u Ga naar de resource om naar de pagina van de Stream Analytics-taak te navigeren.

Taakinvoer configureren

In de volgende stap definieert u een invoerbron voor de taak om gegevens te kunnen lezen met de Event Hub die u in de vorige sectie hebt gemaakt.

  1. Selecteer Invoer in de sectie Taaktopologie in het linkermenu op de pagina Stream Analytics-taak.

  2. Selecteer + Invoer en Event Hub toevoegen op de pagina Invoer.

    Schermopname van de invoerpagina voor een Stream Analytics-taak.

  3. Voer de volgende stappen uit op de Event Hub-pagina :

    1. Voer Voor invoeralias CallStream in. Invoeralias is een beschrijvende naam om uw invoer te identificeren. De invoeralias mag alleen alfanumerieke tekens, afbreekstreepjes en onderstrepingstekens bevatten en moet 3 tot 63 tekens lang zijn.

    2. Selecteer voor Abonnement het Azure-abonnement waarin u de Event Hub hebt gemaakt. De event hub kan zich in dezelfde of een ander abonnement als de Stream Analytics-taak bevinden.

    3. Selecteer voor de Event Hubs-naamruimte de Event Hubs-naamruimte die u in de vorige sectie hebt gemaakt. Alle naamruimten die beschikbaar zijn in uw huidige abonnement, worden weergegeven in de vervolgkeuzelijst.

    4. Selecteer de Event Hub die u in de vorige sectie hebt gemaakt voor de naam van de Event Hub. Alle Event Hubs die beschikbaar zijn in de geselecteerde naamruimte, worden weergegeven in de vervolgkeuzelijst.

    5. Houd voor de Event Hub-consumentengroep de optie Nieuwe maken geselecteerd, zodat er een nieuwe consumentengroep wordt gemaakt op de Event Hub. U wordt aangeraden een afzonderlijke consumentengroep te gebruiken voor elke Stream Analytics-taak. Als er geen consumentengroep is opgegeven, gebruikt de Stream Analytics-taak de $Default consumentengroep. Wanneer een taak een self-join bevat of meerdere invoerwaarden heeft, kunnen sommige invoer later door meer dan één lezer worden gelezen. Deze situatie is van invloed op het aantal lezers in één consumentengroep.

    6. Selecteer voor de verificatiemodus Verbinding maken iontekenreeks. Het is eenvoudiger om de zelfstudie met deze optie te testen.

    7. Selecteer voor de naam van het Event Hub-beleid bestaande gebruiken en selecteer vervolgens het beleid dat u eerder hebt gemaakt.

    8. Selecteer Opslaan onder aan de pagina.

      Schermopname van de configuratiepagina van Event Hubs voor een invoer.

Taakuitvoer configureren

De laatste stap is bedoeld om een uitvoerlocatie te definiëren waar de taak de getransformeerde gegevens naartoe kan schrijven. In deze zelfstudie voert u met behulp van Power BI gegevens uit en maakt u deze zichtbaar.

  1. Open Alle resources vanuit Azure Portal en selecteer de Stream Analytics-taak ASATutorial.

  2. Selecteer in de sectie Taaktopologie van de Stream Analytics-taak de optie Uitvoer.

  3. Selecteer + Toevoegen>Power BI.

  4. Vul het uitvoerformulier in met de volgende details:

    Instelling Voorgestelde waarde
    Uitvoeralias MyPBIoutput
    Werkruimte Groep Mijn werkruimte
    Naam van de gegevensset ASAdataset
    Tabelnaam ASATable
    Verificatiemodus Gebruikerstoken
  5. Selecteer Autoriseren en volg de aanwijzingen om Power BI te verifiëren.

    Azure Stream Analytics-uitvoer configureren

  6. Selecteer Opslaan onder aan de Power BI-pagina .

    In deze zelfstudie wordt de verificatiemodus Gebruikerstoken gebruikt. Zie Beheerde identiteit gebruiken om uw Azure Stream Analytics-taak te verifiëren voor Power BI als u Beheerde identiteit wilt gebruiken.

Query's maken om realtime gegevens te transformeren

Op dit moment hebt u een Stream Analytics-taak ingesteld om een binnenkomende gegevensstroom te lezen. De volgende stap is om een query te maken die gegevens in realtime analyseert. De query's maken gebruik van een SQL-achtige taal die sommige extensies bevat die specifiek zijn voor Stream Analytics.

In dit gedeelte van de zelfstudie maakt en test u verschillende query's om een paar manieren te leren waarop u een invoerstroom voor analyse kunt maken.

De query's die u hier maakt, geven alleen de getransformeerde gegevens weer op het scherm. In een later gedeelte schrijft u de getransformeerde gegevens naar Power BI.

Raadpleeg Verwijzing voor Azure Stream Analytics-querytaal voor meer informatie over de taal.

Testen met behulp van een Pass Through-query

Als u elke gebeurtenis wilt archiveren, kunt u een Pass Through-query gebruiken om alle velden in de payload van een gebeurtenis te lezen.

  1. Navigeer naar uw Stream Analytics-taak in Azure Portal en selecteer Query onder Taaktopologie in het linkermenu.

  2. Voer deze query in het queryvenster in:

    SELECT 
        *
    FROM 
        CallStream
    

    Notitie

    Net als bij SQL zijn trefwoorden niet hoofdlettergevoelig en zijn spaties niet van belang.

    In deze query is CallStream de alias die u opgeeft wanneer u de invoer maakt. Als u een andere alias hebt gebruikt, gebruikt u die naam.

  3. Selecteer Query testen.

    De Stream Analytics-taal voert de query uit op de voorbeeldgegevens van de invoer en geeft de uitvoer onderaan het scherm weer. De resultaten geven aan dat de Event Hubs en de Streaming Analytics-taak correct zijn geconfigureerd.

    Voorbeelduitvoer van testquery.

    Het exacte aantal records dat u ziet, is afhankelijk van het aantal records dat in het voorbeeld is vastgelegd.

Het aantal velden verminderen met een kolomprojectie

In veel gevallen heeft uw analyse niet alle kolommen van de invoerstroom nodig. U kunt een query gebruiken om een kleinere set geretourneerde velden weer te geven dan in de Pass Through-query.

Voer de volgende query uit en bekijk de uitvoer.

SELECT CallRecTime, SwitchNum, CallingIMSI, CallingNum, CalledNum 
INTO
    [MyPBIoutput]
FROM 
    CallStream

Binnenkomende aanroepen per regio tellen: Tumblingvenster met aggregatie

Stel dat u het aantal binnenkomende aanroepen per regio wilt tellen. Wanneer u gegevens streamt en u setfuncties wilt uitvoeren zoals tellen, moet u de stream segmenteren in tijdelijke eenheden, omdat de gegevensstroom effectief oneindig is. U doet dit door een Stream Analytics-vensterfunctie te gebruiken. U kunt vervolgens met de gegevens als eenheid werken in dat venster.

Voor deze transformatie wilt u een reeks tijdelijke vensters die niet overlappen. Elk venster bevat een discrete set gegevens die u kunt groeperen en aggregeren. Dit type venster wordt Tumblingvenster genoemd. In het Tumblingvenster kunt u een telling krijgen van de binnenkomende aanroepen die gegroepeerd zijn op SwitchNum, wat het land/de regio vertegenwoordigt waar de oproep vandaan komt.

  1. Plak de volgende query in de query-editor:

    SELECT 
        System.Timestamp as WindowEnd, SwitchNum, COUNT(*) as CallCount 
    FROM
        CallStream TIMESTAMP BY CallRecTime 
    GROUP BY TUMBLINGWINDOW(s, 5), SwitchNum
    

    Deze query gebruikt het sleutelwoord Timestamp By in de clausule FROM om op te geven welk tijdsstempelveld in de invoerstroom moet worden gebruikt om het Tumblingvenster te definiëren. In dit gedeelte verdeelt het venster de gegevens in segment via het veld CallRecTime in elk record. Als er geen veld is opgegeven, gebruikt de vensterbewerking de tijd dat elke gebeurtenis bij de Event Hub arriveert. Zie 'Arrival Time vs Application Time' in Stream Analytics Query Language Reference.

    De projectie omvat System.Timestamp, dat een tijdsstempel voor het eind van elk venster retourneert.

    Als u wilt opgeven dat u een Tumblingvenster wilt gebruiken, gebruikt u de functie TUMBLINGWINDOW in het component GROUP BY. In de functie geeft u een tijdseenheid op (van een microseconde tot een dag) en een venstergrootte (hoeveel eenheden). In dit voorbeeld bestaat het Tumblingvenster uit intervallen van 5 seconden, zodat u een telling krijgt per land/regio voor elke 5 seconden aan oproepen.

  2. Selecteer Query testen. In de resultaten ziet u dat de tijdstempels onder WindowEnd in stappen van 5 seconden zijn.

SIM-kaartfraude detecteren met een self-join

Voor dit voorbeeld moet u frauduleus gebruik beschouwen als aanroepen die binnen vijf seconden van elkaar van dezelfde gebruiker komen, maar in verschillende locaties. Zo kan dezelfde gebruiker niet op rechtmatige wijze op hetzelfde moment een telefoongesprek vanuit de Verenigde Staten en Australië initiëren.

Als u deze gevallen wilt controleren, kunt u een self-join gebruiken van de streaminggegevens om de stream samen te voegen met zichzelf op basis van de waarde CallRecTime. U kunt vervolgens zoeken naar oproeprecords waarbij de CallingIMSI waarde (het oorspronkelijke nummer) hetzelfde is, maar de SwitchNum waarde (land/regio van herkomst) niet hetzelfde is.

Wanneer u een join-bewerking voor streaminggegevens gebruikt, moet de join enkele beperkingen bevatten met betrekking tot hoe ver de overeenkomende rijen in tijd kunnen worden gescheiden. Zoals eerder is vermeld, zijn de streaminggegevens in feite oneindig. De tijdslimieten voor de relatie worden opgegeven binnen het component ON van de join met behulp van de functie DATEDIFF. In dit geval is de join gebaseerd op een interval van vijf seconden van aanroepgegevens.

  1. Plak de volgende query in de query-editor:

    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))
    

    Deze query is dezelfde als elke SQL-join, behalve voor de functie DATEDIFF in de join. Deze versie van DATEDIFF is specifiek voor Stream Analytics en moet verschijnen in de component ON...BETWEEN. De parameters zijn een tijdseenheid (seconden in dit voorbeeld) en de aliassen van de twee bronnen in de join. Deze functie verschilt van de standaard SQL-functie DATEDIFF .

    De WHERE component bevat de voorwaarde die de frauduleuze aanroep markeert: de oorspronkelijke switches zijn niet hetzelfde.

  2. Selecteer Query testen. Controleer de uitvoer en selecteer Query opslaan.

De taak starten en uitvoer visualiseren

  1. Als u de taak wilt starten, gaat u naar Overzicht van de taak en selecteert u Starten.

  2. Selecteer Nu voor de starttijd van de taakuitvoer en selecteer Starten. U kunt de taakstatus bekijken in de meldingsbalk.

  3. Nadat de taak is voltooid, gaat u naar Power BI en meldt u zich aan met uw werk- of schoolaccount. Als de Stream Analytics-query resultaten uitvoert, wordt de gegevensset ASAdataset die u hebt gemaakt, weergegeven onder het tabblad Gegevenssets.

  4. Selecteer in de Power BI-werkruimte + Maken om een nieuw dashboard te maken met de naam Frauduleuze gesprekken.

  5. Selecteer boven in het venster de optie Bewerken en Tegel toevoegen. Selecteer Aangepaste streaminggegevens en Volgende. Kies ASAdataset onder Uw gegevenssets. Selecteer Kaart in de vervolgkeuzelijst Visualisatietype en voeg frauduleuze gesprekken toe aan Velden. Selecteer Volgende om een naam voor de tegel in te voeren en selecteer vervolgens Toepassen om het bestand te maken.

    Tegels in Power BI-dashboard maken

  6. Voer nogmaals stap 5 uit met de volgende opties:

    • Selecteer in Type visualisatie de optie Lijndiagram.
    • Voeg een as toe en selecteer windowend.
    • Voeg een waarde toe en selecteer frauduleuze gesprekken.
    • Selecteer bij Tijdvenster voor weergave de laatste 10 minuten.
  7. Uw dashboard moet eruitzien als in het volgende voorbeeld zodra beide tegels zijn toegevoegd. Als uw Event Hub-zendtoepassing en de Streaming Analytics-toepassing worden uitgevoerd, wordt uw Power BI-dashboard regelmatig bijgewerkt met nieuw ontvangen gegevens.

    Schermopname van de resultaten in het Power BI-dashboard.

Uw Power BI-dashboard insluiten in een webtoepassing

Voor dit deel van de zelfstudie gebruikt u een voorbeeld-ASP.NET webtoepassing die is gemaakt door het Power BI-team om uw dashboard in te sluiten. Zie het artikel Insluiten met Power BI voor meer informatie over het insluiten van dashboards.

Stel de toepassing in door naar de GitHub-opslagplaats Power BI-Developer-Samples te gaan en volg de instructies in de sectie Gebruiker is eigenaar van gegevens (gebruik de omleidings- en startpagina-URL in de subsectie integrate-web-app). Omdat we het dashboardvoorbeeld gebruiken, gebruikt u de voorbeeldcode van de integrate-web-app in de GitHub-opslagplaats. Zodra de toepassing in uw browser wordt uitgevoerd, volgt u deze stappen om het dashboard dat u eerder hebt gemaakt in te sluiten op de webpagina:

  1. Selecteer Aanmelden bij Power BI, waarmee de toepassing toegang wordt verleend tot de dashboards in uw Power BI-account.

  2. Selecteer de knop Dashboards ophalen, waardoor de dashboards van uw account in een tabel worden weergegeven. Zoek de naam van het dashboard dat u eerder hebt gemaakt, powerbi-embedded-dashboard en kopieer de bijbehorende EmbedUrl.

  3. Plak tot slot de EmbedUrl in het bijbehorende tekstveld en selecteer Dashboard insluiten. U kunt nu hetzelfde dashboard zien dat is ingesloten in een webtoepassing.

Volgende stappen

In deze zelfstudie hebt u een eenvoudige Stream Analytics-taak gemaakt, de binnenkomende gegevens geanalyseerd en de resultaten gepresenteerd in een Power BI-dashboard. Ga voor meer informatie over Stream Analytics-taken verder met de volgende zelfstudie: