Tutoriel : Analyser les données d’appels frauduleux avec Stream Analytics et visualiser les résultats dans un tableau de bord Power BI

Ce tutoriel montre comment analyser les données d’appel téléphonique à l’aide d’Azure Stream Analytics. Les données d’appel téléphonique, générées par une application cliente, contiennent des appels frauduleux qui sont détectés par le travail Stream Analytics. Vous pouvez appliquer les techniques décrites dans ce tutoriel pour d’autres types de détection de fraude, tels que la fraude à la carte de crédit ou l’usurpation d’identité.

Dans ce didacticiel, vous allez effectuer les tâches suivantes :

  • Générer des exemples de données d’appel téléphonique et les envoyer à Azure Event Hubs.
  • Créez une tâche Stream Analytics.
  • Configurer les entrées et sorties de travail.
  • Définir une requête pour filtrer les appels frauduleux.
  • Tester et démarrer le travail.
  • Visualiser les résultats dans Power BI.

Prérequis

Avant de commencer, vous devez avoir suivi les étapes ci-dessous :

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit.
  • Téléchargez l’application de génération d’événements d’appel téléphonique, TelcoGenerator.zip à partir du Centre de téléchargement Microsoft, ou obtenez le code source à partir de GitHub.
  • Vous avez besoin d’un compte Power BI.

Connexion à Azure

Connectez-vous au portail Azure.

Créer un hub d’événements

Vous devez envoyer des exemples de données à un hub d’événements avant l’analyse par Stream Analytics du flux de données d’appels frauduleux. Dans ce didacticiel, vous envoyez des données à Azure à l’aide d’Azure Event Hubs.

Suivez les étapes ci-dessous pour créer un hub d’événements et envoyer les données d’appel à celui-ci :

  1. Connectez-vous au portail Azure.

  2. Sélectionnez Tous les services dans le menu de gauche, sélectionnez Internet des objets, pointez le curseur de la souris sur Event Hubs, puis sélectionnez le bouton + (Ajouter).

    Capture d’écran montrant la page de création d’Event Hubs.

  3. Dans la page Créer un espace de noms, suivez ces étapes :

    1. Sélectionnez un abonnement Azure dans lequel vous souhaitez créer le hub d’événements.

    2. Pour Groupe de ressources, sélectionnez Créer un nouveau et entrez un nom pour le groupe de ressources. L’espace de noms Event Hubs est créé dans ce groupe de ressources.

    3. Pour le Nom de l’espace de noms, entrez un nom unique pour l’espace de noms Event Hubs.

    4. Pour Emplacement, sélectionnez la région dans laquelle vous souhaitez créer l’espace de noms.

    5. Pour Niveau tarifaire, sélectionnez Standard.

    6. Au bas de la page, sélectionnez Examiner et créer.

      Capture d’écran montrant la page Créer un espace de noms.

    7. Dans la page Vérifier et créer de l’Assistant Création d’espace de noms, sélectionnez Créer en bas de la page après avoir examiné tous les paramètres.

  4. Une fois l’espace de noms correctement déployé, sélectionnez Accéder à la ressource pour aller à la page Espace de noms Event Hubs.

  5. Dans la page Espace de noms Event Hubs, sélectionnez +Event Hub dans la barre de commandes.

    Capture d’écran montrant le bouton +Event Hub dans la page Espace de noms Event Hubs.

  6. Dans la page Créer un Event Hub, entrez un Nom pour le hub d’événements. Affectez la valeur 2 au Nombre de partitions. Utilisez les options par défaut pour les autres paramètres, puis sélectionnez Vérifier et créer.

    Capture d’écran montrant la page Créer un Event Hub.

  7. En bas de la page Vérifier + créer, sélectionnez Créer. Ensuite, attendez que le déploiement se termine.

Accorder l’accès au concentrateur Event Hub et obtenir une chaîne de connexion

Pour qu’une application puisse envoyer des données à Azure Event Hubs, le hub d’événements doit disposer d’une stratégie autorisant l’accès. La stratégie d’accès génère une chaîne de connexion qui inclut des informations d’autorisation.

  1. Dans la page Espace de noms Event Hubs, sélectionnez Stratégies d’accès partagé dans le menu de gauche.

  2. Sélectionnez RootManageSharedAccessKey dans la liste des stratégies.

  3. Ensuite, sélectionnez le bouton Copier à côté de Chaîne de connexion – Clé primaire.

  4. Collez la chaîne de connexion dans un éditeur de texte. Vous avez besoin de cette chaîne de connexion dans la section suivante.

    La chaîne de connexion ressemble à ceci :

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

    Notez que la chaîne de connexion contient plusieurs paires clé-valeur séparées par des points-virgules : Endpoint, SharedAccessKeyName et SharedAccessKey.

Démarrer l’application de génération d’événements

Avant de démarrer l’application TelcoGenerator, vous devez la configurer pour envoyer des données aux Azure Event Hubs que vous avez créés précédemment.

  1. Extrayez le contenu du fichier TelcoGenerator.zip.

  2. Ouvrez le fichier TelcoGenerator\TelcoGenerator\telcodatagen.exe.config dans l’éditeur de texte de votre choix (comme il existe plusieurs fichiers .config, veillez à ouvrir celui qui convient).

  3. Mettez à jour l’élément <appSettings> dans le fichier de configuration avec les détails suivants :

    • Définissez la valeur de la clé EventHubName sur la valeur d’EntityPath à la fin de la chaîne de connexion.
    • Définissez la valeur de la clé Microsoft.ServiceBus.ConnectionString sur la chaîne de connexion à l’espace de noms. Si vous utilisez une chaîne de connexion à un hub d’événements, et non à un espace de noms, supprimez la valeur EntityPath (;EntityPath=myeventhub) à la fin. N’oubliez pas de supprimer le point-virgule qui précède la valeur d’EntityPath.
  4. Enregistrez le fichier .

  5. Ensuite, ouvrez une fenêtre de commandes et accédez au dossier dans lequel l’application TelcoGenerator est décompressée. Puis, entrez la commande suivante :

    .\telcodatagen.exe 1000 0.2 2
    

    Cette commande utilise les paramètres suivants :

    • Nombre d’enregistrements de données d’appel par heure.
    • Pourcentage de probabilité de fraude, qui correspond à la fréquence à laquelle l’application doit simuler un appel frauduleux. La valeur 0,2 signifie qu’environ 20 % des enregistrements d’appels semblent frauduleux.
    • Durée en heures, qui correspond au nombre d’heures pendant lesquelles l’application doit s’exécuter. Vous pouvez également arrêter l’application à tout moment en terminant le processus (Ctrl+C) sur la ligne de commande.

    Après quelques secondes, l’application commence à afficher des enregistrements des appels téléphoniques à l’écran à mesure qu’elle les envoie au concentrateur Event Hub. Les données d’appel téléphonique contiennent les champs suivants :

    Enregistrement Définition
    CallrecTime Horodatage de l’heure de début d’appel.
    SwitchNum Commutateur téléphonique utilisé pour connecter l’appel. Pour cet exemple, les commutateurs sont des chaînes qui représentent le pays/la région d’origine (États-Unis, Chine, Royaume-Uni, Allemagne ou Australie).
    CallingNum Numéro de téléphone de l’appelant.
    CallingIMSI Identité de l’abonné mobile international (IMSI). Il s’agit d’un identificateur unique de l’appelant.
    CalledNum Numéro de téléphone du destinataire de l’appel.
    CalledIMSI Identité de l'abonné mobile international (IMSI). Il s’agit d’un identificateur unique du destinataire de l’appel.

Création d’un travail Stream Analytics

Maintenant que vous disposez d’un flux d’événements d’appel, vous pouvez créer un travail Stream Analytics qui lit des données à partir du hub d’événements.

  1. Pour créer un travail Stream Analytics, accédez au portail Azure.
  2. Sélectionnez Créer une ressource, puis recherchez Tâche Stream Analytics. Sélectionnez la vignette Tâche Stream Analytics et sélectionnez Créer.
  3. Sur la page Nouveau travail Stream Analytics, procédez comme suit :
    1. Pour Abonnement, sélectionnez l’abonnement qui contient l’espace de noms Event Hubs.

    2. Pour Groupe de ressources, sélectionnez le groupe de ressources que vous avez créé précédemment.

    3. Dans la section Détails de l’instance , pour Nom, entrez un nom unique pour le travail Stream Analytics.

    4. Pour Région, sélectionnez la région dans laquelle vous souhaitez créer le travail Stream Analytics. Nous vous recommandons de placer le travail et le concentrateur Event Hub dans la même région afin d’optimiser les performances. Ce faisant, vous ne payez pas pour transférer des données entre les régions.

    5. Pour Environnement d’hébergement<, sélectionnez Cloud s’il n’est pas déjà sélectionné. Les travaux Stream Analytics peuvent être déployés dans le cloud ou sur des appareils Edge. L’option Cloud vous permet de déployer votre travail dans le cloud Azure, et l’option Edge sur un appareil IoT Edge.

    6. Dans le champ Unités de streaming, sélectionnez 1. Les unités de streaming sont les ressources de calcul requises pour exécuter un travail. Par défaut, cette valeur est définie sur 1. Pour en savoir plus sur la mise à l’échelle des unités de streaming, consultez Understanding and adjusting streaming units (Présentation et réglage des unités de streaming).

    7. Au bas de la page, sélectionnez Examiner et créer.

      Capture d’écran de la page Créer un travail Stream Analytics.

  4. Sur la page Examiner et créer, examinez les paramètres, puis sélectionnez Créer pour créer une tâche Stream Analytics.
  5. Une fois le travail déployé, sélectionnez Accéder à la ressource pour accéder à la page Tâche Stream Analytics.

Configurer les entrées du travail

L’étape suivante consiste à définir une source d’entrée pour le travail, afin de pouvoir lire les données à l’aide de l’Event Hub que vous avez créé dans la section précédente.

  1. Sur la page Tâche Stream Analytics, dans la section Topologie de la tâche dans le menu de gauche, sélectionnez Entrées.

  2. Dans la page Entrées, sélectionnez + Ajouter une entrée et Event Hub.

    Capture d’écran montrant la page Entrée pour une tâche Stream Analytics.

  3. Sur la page Event Hub, procédez comme suit :

    1. Pour Alias d’entrée, entrez CallStream. L’Alias d’entrée est un nom convivial pour identifier votre entrée. L’alias d’entrée peut contenir uniquement des caractères alphanumériques, des traits d’union et des traits de soulignement, et doit avoir entre 3 et 63 caractères.

    2. Pour Abonnement, sélectionnez l’abonnement Azure dans lequel vous avez créé le Event Hub. Le hub d’événements peut se trouver dans le même abonnement ou dans un autre abonnement que le travail Stream Analytics.

    3. Pour Espace de noms Event Hubs, sélectionnez l’espace de noms du Event Hubs que vous avez créé dans la section précédente. Tous les espaces de noms disponibles dans votre abonnement actuel sont répertoriés dans la liste déroulante.

    4. Pour le nom Event Hub, sélectionnez l’Event Hub que vous avez créé dans la section précédente. Tous les Event Hubs disponibles dans l’espace de noms sont répertoriés dans la liste déroulante.

    5. Pour le groupe de consommateurs Event Hub, conservez l’option Créer un nouveau sélectionnée afin qu’un nouveau groupe de consommateurs soit créé sur l’Event Hub. Nous vous recommandons d’utiliser un groupe de consommateurs différent pour chaque travail Stream Analytics. Si aucun groupe de consommateurs n’est spécifié, le travail Stream Analytics utilise le groupe de consommateurs $Default. Lorsqu’un travail contient une jointure réflexive ou plusieurs entrées, certaines entrées peuvent être lues ultérieurement par plusieurs lecteurs. Cette situation a une incidence sur le nombre de lecteurs dans un groupe de consommateurs unique.

    6. Dans le champ Mode d’authentification, sélectionnez Chaîne de connexion. Il est plus facile de tester le tutoriel avec cette option.

    7. Pour Nom de la stratégie du Event Hub, sélectionnez Utiliser existant, puis sélectionnez la stratégie que vous avez créée précédemment.

    8. Sélectionnez Enregistrer au bas de la page.

      Capture d’écran montrant la page de configuration d’Event Hubs pour une entrée.

Configurer la sortie du travail

La dernière étape consiste à définir un récepteur de sortie dans lequel la tâche peut écrire les données transformées. Dans ce didacticiel, vous générez et visualisez des données avec Power BI.

  1. Dans le portail Azure, ouvrez Toutes les ressources, puis sélectionnez la tâche Stream Analytics ASATutorial.

  2. Dans la section Topologie de la tâche de la tâche Stream Analytics, sélectionnez l’option Sorties.

  3. Sélectionnez + Ajouter>Power BI.

  4. Renseignez le formulaire de sortie avec les détails suivants :

    Paramètre Valeur suggérée
    Alias de sortie MyPBIoutput
    Espace de travail de groupe Mon espace de travail
    Nom du jeu de données ASAdataset
    Nom de la table ASATable
    Mode d'authentification Jeton utilisateur
  5. Sélectionnez Autoriser et suivez les invites pour authentifier Power BI.

    Configurer une sortie Stream Analytics

  6. Sélectionnez Enregistrer au bas de la page Power BI.

    Ce tutoriel utilise le mode d’authentification par jeton utilisateur. Pour utiliser l’identité managée, consultez Utiliser une identité managée pour authentifier votre tâche Azure Stream Analytics dans Power BI.

Créer des requêtes pour transformer des données en temps réel

À ce stade, vous disposez d’un travail Stream Analytics configuré pour lire un flux de données entrantes. L’étape suivante consiste à créer une requête qui analysera les données en temps réel. Les requêtes utilisent un langage de type SQL dont certaines extensions sont propres à Stream Analytics.

Dans cette section du didacticiel, vous allez créer et tester plusieurs requêtes pour découvrir quelques méthodes via lesquelles vous pouvez transformer un flux d’entrée pour l’analyse.

Les requêtes que vous créez ici affichent uniquement les données transformées à l’écran. Dans une section ultérieure, vous écrirez les données transformées dans Power BI.

Pour plus d’informations sur ce langage, consultez la page Références sur le langage des requêtes d’Azure Stream Analytics.

Procéder à un test à l’aide d’une requête directe

Si vous voulez archiver tous les événements, vous pouvez utiliser une requête directe pour lire tous les champs dans la charge utile de l’événement.

  1. Accédez à votre travail Stream Analytics dans le portail Azure, puis, dans le menu de gauche, sélectionnez Requête sous Topologie de la tâche.

  2. Dans la fenêtre de requête, entrez la requête suivante :

    SELECT 
        *
    FROM 
        CallStream
    

    Notes

    Comme dans SQL, les mots clés ne respectent pas la casse, et les espaces blancs ne sont pas significatifs.

    Dans cette requête, CallStream est l’alias que vous avez spécifié lorsque vous avez créé l’entrée. Si vous en avez utilisé un autre, utilisez plutôt ce nom.

  3. Sélectionnez Tester la requête.

    Le travail Stream Analytics exécute la requête par rapport à l’exemple de données fourni en entrée, et affiche la sortie au bas de la fenêtre. Les résultats indiquent que les hubs d’événements et le travail Stream Analytics sont correctement configurés.

    Exemple de sortie d’une requête de test.

    Le nombre exact d’enregistrements que vous pouvez observer dépend du nombre d’enregistrements qui ont été capturés dans l’échantillon.

Réduire le nombre de champs à l’aide d’une projection de colonne

Dans de nombreux cas, il n’est pas nécessaire d’insérer toutes les colonnes du flux d’entrée pour l’analyse. Vous pouvez utiliser une requête pour projeter moins de champs retournés que dans la requête directe.

Exécutez la requête suivante et observez la sortie.

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

Nombre d’appels entrants par région : Fenêtre bascule avec agrégation

Supposons que vous souhaitiez compter le nombre d’appels entrants par région. Dans les données de flux, lorsque vous souhaitez effectuer des fonctions d’agrégation telles que le comptage, vous devez segmenter le flux en unités temporelles, puisque le flux de données proprement dit est en réalité un nombre infini. Pour ce faire, utilisez une fonction de fenêtre Stream Analytics. Vous pouvez alors utiliser les données contenues dans cette fenêtre comme unité.

Pour cette transformation, vous souhaitez une séquence de fenêtres temporelles ne se chevauchant pas ; chaque fenêtre contient un ensemble distinct de données que vous pouvez regrouper et agréger. Ce type de fenêtre est appelé fenêtre bascule. Dans la fenêtre bascule, vous pouvez obtenir le nombre des appels entrants, regroupés par SwitchNum, qui représente le pays/région d’origine de l’appel.

  1. Collez la requête ci-après dans l’éditeur de requête :

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

    Cette requête utilise le mot-clé Timestamp By dans la clause FROM pour spécifier le champ d’horodatage à utiliser dans le flux d’entrée pour définir la fenêtre bascule. Dans ce cas, la fenêtre divise les données en segments en fonction du champ CallRecTime dans chaque enregistrement. (Si aucun champ n’est spécifié, l’opération de fenêtrage utilise l’heure d’arrivée de chaque événement dans le concentrateur Event Hub.) Voir « Heure d’arrivée par rapport à l’heure de l’application » dans Informations de référence sur le langage de requête Stream Analytics.

    La projection inclut System.Timestamp, qui retourne un horodatage pour la fin de chaque fenêtre.

    Pour spécifier que vous voulez utiliser une fenêtre bascule, vous utilisez la fonction TUMBLINGWINDOW dans la clause GROUP BY. Dans la fonction, indiquez une unité de temps (d’une microseconde à un jour) et une taille de fenêtre (nombre d’unités). Dans cet exemple, comme la fenêtre bascule consiste en intervalles de 5 secondes, vous obtenez un nombre d’appels par pays/région pour chaque période de 5 secondes.

  2. Sélectionnez Tester la requête. Dans les résultats, notez que les horodatages indiqués sous WindowEnd sont exprimés par incréments de 5 secondes.

Détecter une fraude à la carte SIM à l’aide d’une jointure réflexive

Pour cet exemple, envisagez l’utilisation frauduleuse suivante : appels provenant d’un même utilisateur, mais à différents lieux, espacés de 5 secondes à chaque fois. Par exemple, un même utilisateur ne peut pas légitimement passer simultanément un appel depuis les États-Unis et l’Australie.

Pour ces cas, vous pouvez utiliser une jointure réflexive des données de flux pour joindre le flux à lui-même en fonction de la valeur CallRecTime. Vous pouvez ensuite rechercher des enregistrements d’appels où la valeur CallingIMSI (numéro d’origine) est identique, mais où la valeur SwitchNum (pays/région d’origine) est différente.

Si vous utilisez une jointure avec des données de flux, la jointure doit indiquer certaines limites relatives à l’intervalle pouvant séparer des lignes correspondantes dans le temps. Comme indiqué précédemment, les données de flux sont effectivement sans fin. Les limites temporelles de la relation sont spécifiées dans la clause ON de la jointure, à l’aide de la fonction DATEDIFF. Dans ce cas, la jointure est basée sur un intervalle de 5 secondes des données d’appels.

  1. Collez la requête ci-après dans l’éditeur de requête :

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

    Cette requête est semblable aux jointures SQL excepté pour la fonction DATEDIFF de la jointure. Cette version de DATEDIFF est propre à Stream Analytics et doit apparaître dans la clause ON...BETWEEN. Les paramètres sont une unité de temps (des secondes dans cet exemple) et les alias des deux sources pour la jointure. Cette fonction diffère de la fonction SQL DATEDIFF standard.

    La clause WHERE inclut la condition qui marque l’appel frauduleux : les commutateurs d’origine ne sont pas identiques.

  2. Sélectionnez Tester la requête. Passez en revue la sortie, puis sélectionnez Enregistrer la requête.

Démarrer le travail et visualiser la sortie

  1. Pour démarrer la tâche, accédez à la tâche Vue d’ensemble, puis sélectionnez Démarrer.

  2. Sélectionnez Maintenant pour l’heure de début de sortie du travail, puis sélectionnez Démarrer. Vous pouvez voir l’état du travail dans la barre de notification.

  3. Lorsque le travail est terminé, accédez à Power BI, puis connectez-vous avec votre compte professionnel ou scolaire. Si la requête du travail Stream Analytics génère des résultats, le jeu de données ASAdataset que vous avez créé doit s’afficher dans l’onglet Jeux de données.

  4. À partir de votre espace de travail Power BI, sélectionnez + Créer pour créer un nouveau tableau de bord intitulé Appels frauduleux.

  5. En haut de la fenêtre, sélectionnez Modifier puis Ajouter une vignette. Ensuite, sélectionnez Données de streaming personnalisées, puis Suivant. Choisissez ASAdataset dans Vos jeux de données. Sélectionnez Carte dans la liste déroulante Type de visualisation, puis ajoutez fraudulentcalls à Champs. Sélectionnez Suivant afin de saisir un nom pour la vignette, puis Appliquer pour créer la vignette.

    Créer des vignettes de tableau de bord Power BI

  6. Effectuez à nouveau l’étape 5, avec les options suivantes :

    • Lorsque vous accédez à Type de visualisation, sélectionnez Graphique en courbes.
    • Ajoutez un axe, puis sélectionnez windowend.
    • Ajoutez une valeur, puis sélectionnez appels frauduleux.
    • Pour Fenêtre de temps à afficher, sélectionnez les 10 dernières minutes.
  7. Une fois que les deux vignettes ont été ajoutées, votre tableau de bord devrait ressembler à l’exemple suivant. Si l’application émettrice Event Hub et l’application Stream Analytics sont en cours d’exécution, vous verrez que votre tableau de bord Power BI est régulièrement mis à jour avec l’arrivée de nouvelles données.

    Capture d’écran des résultats dans le tableau de bord Power BI.

Incorporer votre tableau de bord Power BI dans une application web

Pour cette partie du tutoriel, vous utilisez un exemple d’application web ASP.NET créé par l’équipe Power BI pour intégrer votre tableau de bord. Pour plus d’informations sur l’intégration de tableaux de bord, consultez l’article Power BI en mode intégration.

Pour configurer l’application, accédez au dépôt GitHub PowerBI-Developer-Samples et suivez les instructions situées sous la section User Owns Data (L’utilisateur est propriétaire des données) (utilisez les URL de redirection et de page d’accueil de la sous-section integrate-web-app). Étant donné que nous utilisons l’exemple Dashboard (tableau de bord), utilisez l’exemple de code integrate-web-app qui se trouve dans le dépôt GitHub. Une fois l’application en cours d’exécution dans votre navigateur, effectuez les étapes suivantes pour intégrer le tableau de bord créé précédemment à la page web :

  1. Sélectionnez Se connecter à Power BI, pour accorder à l’application un accès aux tableaux de bord dans votre compte Power BI.

  2. Sélectionnez le bouton Get Dashboards (Obtenir les tableaux de bord) qui affiche dans un tableau les tableaux de bord de votre compte. Recherchez le nom du tableau de bord vous avez créé précédemment (powerbi-embedded-dashboard) et copiez la EmbedUrl correspondante.

  3. Pour finir, collez la EmbedUrl dans le champ de texte correspondant et sélectionnez Embed Dashboard (Intégrer le tableau de bord). Vous pouvez maintenant voir ce tableau de bord intégré dans une application web.

Étapes suivantes

Dans ce didacticiel, vous avez créé un travail Stream Analytics simple, analysé les données entrantes et affiché les résultats dans un tableau de bord Power BI. Pour en savoir plus sur les travaux Stream Analytics, passez au didacticiel suivant :