Tutorial: Análisis de los datos de llamadas fraudulentas mediante Stream Analytics y visualización de los resultados en el panel de Power BI

En este tutorial se muestra cómo analizar los datos de llamadas de teléfono mediante Azure Stream Analytics. Los datos de llamadas de teléfono, generadas por una aplicación cliente, contienen llamadas fraudulentas que el trabajo de Stream Analytics detectará. Puede usar técnicas de este tutorial para otros tipos de detección de fraudes, como el fraude de tarjetas de crédito o el robo de identidad.

En este tutorial se realizan las siguientes tareas:

  • Generar datos de llamadas de teléfono de ejemplo y enviarlos a Azure Event Hubs.
  • Cree un trabajo de Stream Analytics.
  • Configurar la entrada y salida del trabajo.
  • Definir consultas para filtrar las llamadas fraudulentas.
  • Probar e iniciar el trabajo.
  • Visualizar los resultados en Power BI.

Requisitos previos

Antes de empezar, asegúrese de que ha completado los pasos siguientes:

  • Si no tiene una suscripción a Azure, cree una cuenta gratuita.
  • Descargue la aplicación de generación de eventos de llamada telefónica, TelcoGenerator.zip del Centro de descarga de Microsoft u obtenga el código fuente de GitHub.
  • Necesita una cuenta de Power BI.

Inicio de sesión en Azure

Inicie sesión en Azure Portal.

Creación de un centro de eventos

Debe enviar algunos datos de ejemplo a un centro de eventos para que Stream Analytics pueda analizar el flujo de datos de llamadas fraudulentas. En este tutorial, enviará los datos a Azure mediante Azure Event Hubs.

Siga estos pasos para crear un centro de eventos y enviarle datos de llamada:

  1. Inicie sesión en Azure Portal.

  2. Seleccione Todos los servicios en el menú de la izquierda. Después, seleccione Internet de las cosas. Luego, coloque el mouse sobre Event Hubs y, a continuación, seleccione el botón + (Agregar).

    Screenshot showing the Event Hubs creation page.

  3. En la página Crear espacio de nombres, siga estos pasos:

    1. Seleccione una suscripción de Azure donde quiere crear el centro de eventos.

    2. En Grupo de recursos, seleccione Crear nuevo y escriba un nombre para el grupo de recursos. En este grupo de recursos, se crea el espacio de nombres de Event Hubs.

    3. En Nombre de espacio de nombres, escriba un nombre único para el espacio de nombres de Event Hubs.

    4. En Ubicación, seleccione la región en la que desea crear el espacio de nombres.

    5. En Plan de tarifa, seleccione Estándar.

    6. En la parte inferior de la página, seleccione Revisar y crear.

      Screenshot showing the Create Namespace page.

    7. En la página Revisar y crear del Asistente para la creación de espacios de nombres, seleccione Crear en la parte inferior de la página después de revisar todos los valores.

  4. Una vez implementado correctamente el espacio de nombres, seleccione Ir al recurso para ir a la página Espacio de nombres de Event Hubs.

  5. En la página Espacio de nombres de Event Hubs, seleccione +Event Hubs en la barra de comandos.

    Screenshot showing the Add event hub button on the Event Hubs Namespace page.

  6. En la página Crear centro de eventos, escriba unNombre para el centro de eventos. En Recuento de particiones, seleccione el valor 2. Use las opciones predeterminadas en el resto de los valores y seleccione Revisar y crear.

    Screenshot showing the Create event hub page.

  7. En la página Revisar y crear, seleccione Crear en la parte inferior de la página. Espere a que la implementación se realice correctamente.

Concesión de acceso al centro de eventos y obtención de una cadena de conexión

Para que una aplicación pueda enviar datos a Azure Event Hubs, el centro de eventos debe tener una directiva que permita el acceso. La directiva de acceso genera una cadena de conexión que incluye la información de autorización.

  1. En la página Espacio de nombres de Event Hubs, seleccione Directivas de acceso compartido en el menú de la izquierda.

  2. Seleccione RootManageSharedAccessKey de la lista de directivas.

  3. Después, seleccione el botón Copiar a lado de Cadena de conexión: clave principal.

  4. Pegue la cadena de conexión en un editor de texto. Necesitará esta cadena de conexión en la sección siguiente.

    La cadena de conexión tiene el siguiente aspecto:

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

    Tenga en cuenta que la cadena de conexión contiene varios pares clave-valor separados por punto y coma: Endpoint, SharedAccessKeyName y SharedAccessKey.

Inicio de la aplicación de generación de eventos

Antes de iniciar la aplicación TelcoGenerator, debe configurarla para enviar datos a los centros de eventos de Azure que creó anteriormente.

  1. Extraiga el contenido del archivo TelcoGenerator.zip.

  2. Abra el archivo TelcoGenerator\TelcoGenerator\telcodatagen.exe.config en el editor de texto de su elección. Hay más de un archivo .config, por lo que debe asegurarse de abrir el correcto.

  3. Actualice el elemento <appSettings> en el archivo de configuración con los detalles siguientes:

    • Establezca el valor de la clave EventHubName en el valor de EntityPath al final de la cadena de conexión.
    • Establezca el valor de la clave Microsoft.ServiceBus.ConnectionString en la cadena de conexión sin el valor EntityPath (;EntityPath=myeventhub) al final. No olvide eliminar el punto y coma que precede al valor EntityPath.
  4. Guarde el archivo.

  5. A continuación abra una ventana de comandos y cambie a la carpeta en la que ha descomprimido la aplicación TelcoGenerator. Después, escriba el comando siguiente:

    .\telcodatagen.exe 1000 0.2 2
    

    Este comando toma los parámetros siguientes:

    • Número de registros de datos de llamada por hora.
    • Porcentaje de probabilidad de fraude, que es la frecuencia con la que la aplicación debe simular una llamada fraudulenta. El valor 0,2 indica que aproximadamente el 20 % de los registros de llamada tienen un aspecto fraudulento.
    • Duración en horas, que es el número de horas que debe ejecutarse la aplicación. La aplicación se puede detener en cualquier momento. Para ello, solo hay que finalizar el proceso (Ctrl+C) en la línea de comandos.

    Después de unos segundos, la aplicación comienza a mostrar los registros de llamada telefónica en la pantalla tal y como los envía al centro de eventos. Los datos de llamada de teléfono contienen los siguientes campos:

    Registro Definición
    CallrecTime Marca de tiempo para la hora de inicio de la llamada.
    SwitchNum Conmutador de teléfono que se usa para conectar la llamada. En este ejemplo, los conmutadores son cadenas que representan el país o la región de origen (Estados Unidos, China, Reino Unido, Alemania o Australia).
    CallingNum Número de teléfono del autor de la llamada.
    CallingIMSI Identidad del suscriptor móvil internacional (IMSI). Identificador único del autor de la llamada.
    CalledNum Número de teléfono del destinatario de la llamada.
    CalledIMSI Identidad del suscriptor móvil internacional (IMSI). Identificador único del destinatario de la llamada.

Creación de un trabajo de Stream Analytics

Ahora que tiene un flujo de eventos de llamada, puede crear un trabajo de Stream Analytics que lea los datos desde el centro de eventos.

  1. Para crear un trabajo de Stream Analytics, vaya a Azure Portal.
  2. Seleccione Crear un recurso y busque Trabajo de Stream Analytics. Seleccione el icono Trabajo de Stream Analytics y haga clic en Crear.
  3. En la página Nuevo trabajo de Stream Analytics, siga estos pasos:
    1. En Suscripción, seleccione la suscripción que contiene el espacio de nombres de Event Hubs.

    2. En Grupo de recursos, seleccione el grupo de recursos que ha creado anteriormente.

    3. En el campo Nombre de la sección Detalles de la instancia, escriba un nombre único para el trabajo de Stream Analytics.

    4. En Región, seleccione la región en la que desea crear el trabajo de Stream Analytics. Para obtener un rendimiento óptimo, recomendamos ubicar el trabajo y el centro de eventos en la misma región de modo que no deba pagar por transferir datos de una región a otra.

    5. En Entorno de hospedaje<, seleccione la opción Nube si aún no está seleccionada. Los trabajos de Stream Analytics se pueden implementar en la nube o en dispositivos perimetrales. Nube le permite implementar en Azure Cloud y Edge le permite implementar en un dispositivo IoT Edge.

    6. En Unidades de streaming, seleccione 1. Las unidades de streaming representan los recursos informáticos que se necesitan para ejecutar un trabajo. De forma predeterminada, este valor se establece en 1. Para información sobre el escalado de unidades de streaming, consulte el artículo Descripción y ajuste de las unidades de streaming.

    7. En la parte inferior de la página, seleccione Revisar y crear.

      Screenshot that shows the Create Azure Stream Analytics job page.

  4. En la página Revisar y crear, revise los valores y seleccione Crear para crear un trabajo de Stream Analytics.
  5. Tras la implementación del trabajo, seleccione Ir al recurso para ir a la página Trabajo de Stream Analytics.

Configuración de la entrada del trabajo

El siguiente paso es definir un origen de entrada para que el trabajo lea los datos mediante el centro de eventos que creó en la sección anterior.

  1. En la página Trabajo de Stream Analytics, en la sección Topología de trabajo del menú izquierdo, seleccione Entradas.

  2. En la página Entradas, seleccione +Agregar entrada y Centro de eventos.

    Screenshot showing the Input page for a Stream Analytics job.

  3. En la página Centro de eventos, siga estos pasos:

    1. En Alias de entrada, escriba Transmisión_de_llamada. El alias de entrada es un nombre descriptivo para identificar la entrada. El alias de entrada debe tener una longitud de entre 3 y 63 caracteres, y solo puede incluir caracteres alfanuméricos, guiones y guiones bajos.

    2. En Suscripción, seleccione la suscripción de Azure en la que ha creado el centro de eventos. El centro de eventos puede estar en la misma suscripción que el trabajo de Stream Analytics, o en otra diferente.

    3. En Espacio de nombres de Event Hubs, seleccione el espacio de nombres de Event Hubs que ha creado en la sección anterior. Todos los espacios de nombres disponibles en su suscripción actual se muestran en la lista desplegable.

    4. En Nombre del centro de eventos, seleccione el centro de eventos que ha creado en la sección anterior. Todos los centros de eventos disponibles en el espacio de nombres seleccionado se muestran en la lista desplegable.

    5. Para el grupo de consumidores del centro de eventos, mantenga seleccionada la opción Crear para que se cree un grupo de consumidores en el centro de eventos. Se recomienda usar un grupo de consumidores distinto para cada trabajo de Stream Analytics. Si no se especifica ningún grupo de consumidores, el trabajo de Stream Analytics usa el grupo de consumidores $Default. Cuando un trabajo contiene una autocombinación o tiene varias entradas, es posible que algunas entradas se lean luego por más de un lector. Esta situación afecta al número de lectores de un solo grupo de consumidores.

    6. En Modo de autenticación, seleccione Cadena de conexión. Es más fácil probar el tutorial con esta opción.

    7. Para el nombre de directiva del centro de eventos, seleccione Usar existente y, después, seleccione la directiva que ha creado antes.

    8. Seleccione Guardar en la parte inferior de la página.

      Screenshot showing the Event Hubs configuration page for an input.

Configuración de la salida del trabajo

El último paso consiste en definir un receptor de salida en el que el trabajo pueda escribir los datos transformados. En este tutorial, los datos se generan y se visualizan con Power BI.

  1. En Azure Portal, abra Todos los recursos y seleccione el trabajo de Stream Analytics ASATutorial.

  2. En la sección Topología de trabajo del trabajo de Stream Analytics, seleccione la opción Salidas.

  3. Seleccione + Agregar>Power BI.

  4. Rellene el formulario de salida con los siguientes datos:

    Configuración Valor sugerido
    Alias de salida MyPBIoutput
    Área de trabajo de grupo Mi área de trabajo
    Nombre del conjunto de datos ASAdataset
    Nombre de la tabla ASATable
    Modo de autenticación Token de usuario
  5. Seleccione Autorizar y siga las indicaciones para autenticar Power BI.

    Configure Stream Analytics output

  6. Seleccione Guardar en la parte inferior de la página de Power BI.

    En este tutorial se utiliza el modo de autenticación Token de usuario. Para utilizar la identidad administrada, consulte Uso de la identidad administrada para autenticar el trabajo de Azure Stream Analytics en Power BI.

Creación de consultas para transformar datos en tiempo real

En este momento, tiene un trabajo de Stream Analytics configurado para leer un flujo de datos entrantes. El siguiente paso consiste en crear una consulta que analice los datos en tiempo real. Las consultas usan un lenguaje de tipo SQL que tiene algunas extensiones específicas para Stream Analytics.

En esta sección del tutorial, crea y prueba varias consultas para aprender algunas formas en las que puede transformar un flujo de entrada para su análisis.

Las consultas que se creen aquí solo mostrarán los datos transformados en la pantalla. En una sección posterior, escribirá los datos transformados en Power BI.

Para más información sobre el lenguaje, consulte la Referencia de lenguaje de consulta de Azure Stream Analytics.

Prueba con una consulta de paso a través

Si quiere archivar todos los eventos, puede usar una consulta de paso a través para leer todos los campos de la carga útil del evento.

  1. Acceda al trabajo de Stream Analytics en Azure Portal y seleccione Consulta en Topología de trabajo en el menú de la izquierda.

  2. En la ventana Consulta, escriba la consulta siguiente:

    SELECT 
        *
    FROM 
        CallStream
    

    Nota

    Al igual que con SQL, las palabras clave no distinguen entre mayúsculas y minúsculas y un espacio en blanco no es significativo.

    En esta consulta, CallStream es el alias que especificó al crear la entrada. Si ha usado otro alias, use ese nombre en su lugar.

  3. Seleccione Consulta de prueba.

    El trabajo de Stream Analytics ejecuta la consulta en los datos de muestra de la entrada y presenta la salida en la parte inferior de la ventana. Los resultados indican que tanto Event Hubs como el trabajo de Stream Analytics están configurados correctamente.

    Sample output from test query.

    El número exacto de registros que ve depende del número de registros capturados en el ejemplo.

Reducción del número de campos mediante una proyección de columna

En muchos casos, el análisis no necesita todas las columnas del flujo de entrada. Puede usar una consulta que proyecte un conjunto de campos devueltos más pequeño que la consulta de paso a través.

Ejecute la consulta siguiente y observe la salida.

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

Recuento de llamadas entrantes por región: Ventana de saltos de tamaño constante con agregación

Suponga que quiere saber el número de llamadas entrantes por región. En los datos de streaming, si desea ejecutar funciones de agregado, como obtener el recuento, tiene que segmentar el flujo en unidades temporales, ya que el flujo de datos es ilimitado. Para ello, use una función de ventana de Stream Analytics. Luego puede trabajar con los datos contenidos en esa ventana como unidad.

Para esta transformación, quiere una secuencia de ventanas temporales que no se superpongan; cada ventana tiene un conjunto discreto de datos que puede agrupar y agregar. Este tipo de ventana se denomina ventana de saltos de tamaño constante. En la ventana de saltos de tamaño constante, puede ver el número de llamadas entrantes agrupadas por SwitchNum, que representa el país o la región en los que se realizó la llamada.

  1. Pegue la siguiente consulta en el editor:

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

    En esta consulta se usa la palabra clave Timestamp By en la cláusula FROM para especificar el campo de marca de tiempo del flujo de entrada que se usa para definir la ventana de saltos de tamaño constante. En este caso, la ventana divide los datos en segmentos por el campo CallRecTime de cada registro. Si no se ha especificado este campo, la operación de ventana usa la hora en la que cada evento llega al centro de eventos. Vea "Tiempo de llegada frente a tiempo de aplicación" en Referencia de lenguaje de consulta de Stream Analytics.

    La proyección incluye System.Timestamp, que devuelve una marca de tiempo para el final de cada ventana.

    Para especificar que desea usar una ventana de saltos de tamaño constante, use la función TUMBLINGWINDOW en la cláusula GROUP BY. En la función, especifique una unidad de tiempo (entre un microsegundo y un día) y un tamaño de ventana (el número de unidades). En este ejemplo, la ventana de saltos de tamaño constante se compone de intervalos de 5 segundos, por lo que obtendrá un recuento por país o región por cada 5 segundos de llamadas.

  2. Seleccione Consulta de prueba. En los resultados, observe que las marcas de tiempo que aparecen en WindowEnd reflejan incrementos de cinco segundos.

Detección de fraudes de SIM mediante una autocombinación

Para este ejemplo, se considera uso fraudulento aquellas llamadas cuyo origen sea un solo usuario, pero que se realicen en ubicaciones diferentes en intervalos inferiores a cinco segundos entre una y otra. Por ejemplo, el mismo usuario no puede legítimamente realizar una llamada desde Estados Unidos y Australia al mismo tiempo.

Para comprobar estos casos, puede usar una autocombinación de los datos de streaming que combine el flujo consigo mismo en función del valor CallRecTime. Luego puede buscar los registros de llamada en los que el valor CallingIMSI (el número donde se origina) sea el mismo, pero el valor SwitchNum (país o región de origen) no lo sea.

Cuando use una combinación con datos de streaming, la combinación debe especificar algunos límites en la diferencia de tiempo que puede haber entre filas coincidentes. Como ya se ha señalado, los datos de streaming son de ilimitados. Los límites de tiempo de la relación se especifican en la cláusula ON de la combinación, con la función DATEDIFF. En este caso, la combinación se basa en un intervalo de cinco segundos entre datos de llamada.

  1. Pegue la siguiente consulta en el 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))
    

    Esta consulta es similar a cualquier instrucción SQL JOIN, salvo por la función DATEDIFF en la combinación. Esta versión de DATEDIFF es específica de Stream Analytics y debe aparecer en la cláusula ON...BETWEEN. Los parámetros son una unidad de tiempo (segundos en este ejemplo) y los alias de los dos orígenes de la combinación. Esta función no es la misma que la función DATEDIFF estándar de SQL.

    La cláusula WHERE incluye la condición que marca la llamada fraudulenta: los conmutadores de origen no son iguales.

  2. Seleccione Consulta de prueba. Revise la salida y, a continuación, seleccione Guardar consulta.

Inicio del trabajo y visualización de la salida

  1. Para iniciar el trabajo, vaya a Información general del trabajo y seleccione Iniciar.

  2. Seleccione Ahora como la hora de inicio de la salida del trabajo y seleccione Iniciar. El estado del trabajo se puede ver en la barra de notificación.

  3. Una vez que el trabajo se inicia correctamente, vaya a Power BI e inicie sesión con su cuenta profesional o educativa. Si la consulta del trabajo de Stream Analytics genera resultados, el conjunto de datos ASAdataset que creó existe en la pestaña Conjuntos de datos.

  4. En el área de trabajo de Power BI, seleccione + Crear para crear un panel denominado Fraudulent Calls (Llamadas fraudulentas).

  5. En la parte superior de la ventana, seleccione Editar y Agregar icono. Luego, seleccione Datos de transmisión personalizados y Siguiente. Elija ASAdataset en Sus conjuntos de datos. Seleccione Tarjeta en la lista desplegable Tipo de visualización y agregue fraudulentcalls a Campos. Seleccione Siguiente para escribir el nombre del icono y, después, seleccione Aplicar para crear el icono.

    Create Power BI dashboard tiles

  6. Siga de nuevo el paso 5, con las siguientes opciones:

    • Cuando llegue a Tipo de visualización, elija Gráfico de líneas.
    • Agregue un eje y seleccione windowend.
    • Agregue un valor y seleccione fraudulent calls.
    • En Período de tiempo para mostrar, seleccione los últimos 10 minutos.
  7. El panel debe tener un aspecto similar al del ejemplo siguiente una vez que se agregan ambos iconos. Observe que, si se ejecutan la aplicación del remitente del centro de eventos y la aplicación de Stream Analytics, el panel de Power BI se actualiza periódicamente cuando llegan nuevos datos.

    Screenshot of results in Power BI dashboard.

Inserción del panel de Power BI en una aplicación web

Para esta parte del tutorial, usará una aplicación web de ejemplo ASP.NET creada por el equipo de Power BI para insertar el panel. Para más información sobre cómo insertar paneles, consulte el artículo Inserción con Power BI.

Para configurar la aplicación, vaya al repositorio de GitHub PowerBI-Developer-Samples y siga las instrucciones de la sección User Owns Data (El usuario es propietario de los datos) (use las direcciones URL de redireccionamiento y de la página principal en el subapartado integrate-web-app). Como se va a usar el ejemplo del panel, use el código de ejemplo integrate-web-app que se encuentra en el repositorio de GitHub. Una vez que la aplicación se ejecute en el explorador, siga estos pasos para insertar el panel que creó anteriormente en la página web:

  1. Seleccione Sign in to Power BI (Iniciar sesión en Power BI). Mediante esta acción se concede a la aplicación acceso a los paneles de la cuenta de Power BI.

  2. Seleccione el botón Get Dashboards (Obtener paneles), que muestra los paneles de su cuenta en una tabla. Busque el nombre del panel que creó anteriormente powerbi-embedded-dashboard y copie el valor de EmbedUrl correspondiente.

  3. Por último, pegue el valor de EmbedUrl en el campo de texto correspondiente y seleccione Embed Dashboard (Insertar panel). Ahora puede ver el mismo panel insertado en una aplicación web.

Pasos siguientes

En este tutorial, ha creado un trabajo sencillo de Stream Analytics, ha analizado los datos de entrada y ha presentado los resultados en un panel de Power BI. Para más información sobre los trabajos de Stream Analytics, continúe con el tutorial siguiente: