Tutorial: Analisar os dados de uma chamada fraudulenta com o Stream Analytics e visualizar os resultados em um dashboard do Power BI

Este tutorial mostra como analisar dados de chamadas telefônicas usando o Azure Stream Analytics. Os dados de chamadas telefônicas, gerados por um aplicativo cliente, contêm chamadas fraudulentas, que serão detectadas pelo trabalho do Stream Analytics. Você pode usar as técnicas deste tutorial para outros tipos de detecção de fraudes, como fraude de cartão de crédito ou roubo de identidade.

Neste tutorial, você executa as seguintes tarefas:

  • Gerar dados de chamadas telefônicas de exemplo e enviá-los aos Hubs de Eventos do Azure.
  • Criar um trabalho do Stream Analytics.
  • Configurar entrada e saída do trabalho.
  • Definir consultas para filtrar chamadas fraudulentas.
  • Testar e iniciar o trabalho.
  • Visualizar os resultados no Power BI.

Pré-requisitos

Antes de começar, verifique se você concluiu as seguintes etapas:

  • Se você não tiver uma assinatura do Azure, crie uma conta gratuita.
  • Faça o download do aplicativo gerador de evento de chamada telefônicaTelcoGenerator.zip do Centro de Download da Microsoft ou obtenha o código-fonte no GitHub.
  • Você precisará ter uma conta do Power BI.

Entrar no Azure

Entre no portal do Azure.

Criar um Hub de Evento

Você deve enviar os dados de exemplo para um hub de eventos antes que o Stream Analytics possa analisar o fluxo de dados de chamadas fraudulentas. Neste tutorial, você envia dados ao Azure usando o Hubs de Eventos do Azure.

Use as seguintes etapas para criar um hub de eventos e enviar dados de chamada para ele:

  1. Entre no portal do Azure.

  2. Selecione Todos os serviços no menu à esquerda, selecione Internet das coisas, passe o mouse sobre Hubs de Eventos e, em seguida, selecione o botão + (Adicionar).

    Captura de tela mostrando a página de criação do Hubs de Eventos.

  3. Na página Criar Namespace, siga estas etapas:

    1. Selecione uma assinatura do Azure em que deseja criar o hub de eventos.

    2. Em Grupo de recursos, escolha Criar e insira um nome para o grupo de recursos. O namespace dos Hubs de Eventos é criado neste grupo de recursos.

    3. Em Nome do namespace, insira um nome exclusivo para o namespace dos Hubs de Eventos.

    4. Em Localização, selecione a região na qual deseja criar o namespace.

    5. Em Tipo de preço, selecione Standard.

    6. Selecione Revisar + criar na parte inferior da página.

      Captura de tela mostrando a página Criar namespace.

    7. Na página Revisar + criar do assistente de criação de namespace, selecione Criar na parte inferior da página depois de revisar todas as configurações.

  4. Depois que o namespace for implantado com êxito, selecione Ir para o recurso para navegar até a página Namespace dos Hubs de Eventos.

  5. Na página Namespace de Hubs de Eventos, selecione +Hub de Eventos na barra de comando.

    Captura de tela mostrando o botão Adicionar Hub de Eventos na página Namespace de Hubs de Eventos.

  6. Na página Criar Hub de Eventos, insira um nome para o Hub de Eventos. Defina a Contagem de Partições como 2. Use as opções padrão nas configurações restantes e escolha Revisar + criar.

    Captura de tela mostrando a página Criar Hub de Eventos.

  7. Na página Examinar + criar, selecione Criar na parte inferior da página. Aguarde até que a implantação tenha êxito.

Conceder acesso para o hub de eventos e obter uma cadeia de caracteres de conexão

Antes que um aplicativo possa enviar dados aos Hubs de Eventos do Azure, o hub de eventos deve ter uma política que permita o acesso. A política de acesso produz uma cadeia de conexão que inclui informações de autorização.

  1. Na página Namespace dos Hubs de Eventos, selecione Políticas de acesso compartilhado no menu à esquerda.

  2. Selecione RootManageSharedAccessKey na lista de políticas.

  3. Então, selecione o botão Copiar ao lado de Cadeia de conexão - chave primária.

  4. Cole a cadeia de conexão em um editor de texto. Você precisará dessa cadeia de conexão na próxima seção.

    A cadeia de conexão tem esta aparência:

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

    Observe que a cadeia de conexão contém vários pares de chave-valor separados por ponto e vírgula: Endpoint, SharedAccessKeyName e SharedAccessKey.

Iniciar o aplicativo gerador de evento

Antes de iniciar o aplicativo TelcoGenerator, configure-o para enviar dados para os Hubs de Eventos do Azure criados anteriormente.

  1. Extraia o conteúdo do arquivo TelcoGenerator.zip.

  2. Abra o arquivo TelcoGenerator\TelcoGenerator\telcodatagen.exe.config em um editor de texto de sua escolha Há mais de um arquivo .config, portanto verifique se abriu o arquivo correto.

  3. Atualize o elemento <appSettings> no arquivo de configuração com os seguintes detalhes:

    • Defina o valor da chave EventHubName como o valor de EntityPath no final da cadeia de conexão.
    • Defina o valor da chave Microsoft.ServiceBus.ConnectionString para a cadeia de conexão para o namespace. Se você usar uma cadeia de conexão para um hub de eventos, não um namespace, remova o valor EntityPath (;EntityPath=myeventhub) no final. Não se esqueça de remover o ponto e vírgula que precede o valor de EntityPath.
  4. Salve o arquivo.

  5. Em seguida, abra uma janela de comando e altere para a pasta onde o aplicativo TelcoGenerator foi descompactado. Em seguida, digite o seguinte comando:

    .\telcodatagen.exe 1000 0.2 2
    

    Esse comando usa os seguintes parâmetros:

    • Número de registros de dados de chamadas por hora.
    • Porcentagem de probabilidade de fraude, que é a frequência com que o aplicativo deve simular uma chamada fraudulenta. O valor 0,2 significa que cerca de 20% dos registros de chamada parecem ser fraudulentos.
    • Duração em horas, que é o número de horas em que o aplicativo deve ser executado. Também é possível interromper o aplicativo a qualquer momento encerrando o processo (Ctrl+C) na linha de comando.

    Depois de alguns segundos, o aplicativo é iniciado exibindo registros de chamada telefônica na tela, enquanto envia para o hub de eventos. Os dados de chamadas telefônicas contêm os seguintes campos:

    Registro Definição
    CallrecTime Carimbo de data/hora para a hora de início da chamada.
    SwitchNum Chave do telefone usada para se conectar à chamada. Neste exemplo, as opções são cadeias de caracteres que representam o país/região de origem (Estados Unidos, China, Reino Unido, Alemanha ou Austrália).
    CallingNum Número de telefone do autor da chamada.
    CallingIMSI A Identidade do Assinante Móvel Internacional (IMSI). É um identificador exclusivo do autor da chamada.
    CalledNum O número de telefone do destinatário da chamada.
    CalledIMSI Identidade do Assinante Móvel Internacional (IMSI). É um identificador exclusivo do destinatário da chamada.

Criar um trabalho de Stream Analytics

Agora que você tem um fluxo de eventos de chamada, pode criar um trabalho do Stream Analytics que lê dados do hub de eventos.

  1. Para criar um trabalho do Stream Analytics, navegue até o portal do Azure.
  2. Clique em Criar um recurso e pesquise um trabalho do Stream Analytics. Selecione o bloco Trabalho do Stream Analytics e selecione Criar.
  3. Na página Novo trabalho do Stream Analytics, siga estas etapas:
    1. Em Assinatura, selecione a assinatura que contém o namespace dos Hubs de Eventos.

    2. Em Grupo de recursos, escolha o grupo de recursos criados anteriormente.

    3. Na seção Detalhes da instância, em Nome, insira um nome exclusivo para o trabalho do Stream Analytics.

    4. Em Região, selecione a região na qual deseja criar o trabalho do Stream Analytics. Recomendamos colocar o trabalho e o hub de eventos na mesma região para melhor desempenho e para que você não precise pagar para transferir dados entre regiões.

    5. Em Ambiente de hospedagem<, selecione Nuvem, caso ainda não esteja selecionado. Os trabalhos do Stream Analytics podem ser implantados na nuvem ou na borda. O Cloud permite que você implante no Azure Cloud, e o Edge permite que você implante em um dispositivo IoT Edge.

    6. Em Unidades de streaming, selecione 1. As unidades de streaming representam os recursos de computação necessários para executar um trabalho. Por padrão, esse valor é definido como 1. Para saber mais sobre como dimensionar unidades de streaming, confira o artigo Entendendo e ajustando as unidades de streaming.

    7. Selecione Revisar + criar na parte inferior da página.

      Captura de tela que mostra a página Criar trabalho do Azure Stream Analytics.

  4. Na página Revisar + criar, revise as configurações e selecione Criar para criar um trabalho do Stream Analytics.
  5. Depois que o trabalho for implantado, selecione Acessar recurso para navegar até a página do trabalho do Stream Analytics.

Configurar entrada de trabalho

A próxima etapa é definir uma fonte de entrada para o trabalho ler os dados usando o hub de eventos criado na seção anterior.

  1. Na página do trabalho do Stream Analytics, na seção Topologia do Trabalho no menu à esquerda, selecione Entradas.

  2. Na página Entradas, selecione + Adicionar entrada e Hub de eventos.

    Captura de tela mostrando a página de entrada de um trabalho do Stream Analytics.

  3. Na página Hub de eventos, siga estas etapas:

    1. Em Alias de entrada, insira CallStream. O alias de entrada é um nome amigável para identificar a entrada. O alias de entrada pode conter somente caracteres alfanuméricos, hifens e sublinhados e deve ter entre 3 e 63 caracteres.

    2. Em Assinatura, selecione a assinatura do Azure em que você criou o hub de eventos. O hub de eventos pode estar na mesma assinatura ou em uma diferente da do trabalho do Stream Analytics.

    3. Em Namespace dos Hubs de Eventos, selecione o namespace dos Hubs de Eventos criado na seção anterior. Todos os namespaces disponíveis na sua assinatura atual são listados no menu suspenso.

    4. Em Nome do hub de eventos, selecione o hub de eventos criado na seção anterior. Todos os hubs de eventos disponíveis no namespace selecionado são listados no menu suspenso.

    5. Em Grupo de consumidores do hub de eventos, mantenha a opção Criar selecionada para que um grupo de consumidores seja criado no hub de eventos. É recomendável usar um grupo de consumidores distinto para cada trabalho do Stream Analytics. Se nenhum grupo de consumidores for especificado, o trabalho do Stream Analytics usará o grupo de consumidores $Default. Quando um trabalho contém uma autojunção ou várias entradas, no futuro, algumas entradas podem ser lidas por mais de um leitor. Essa situação afeta o número de leitores em um único grupo de consumidores.

    6. Em Modo de autenticação, selecione Cadeia de conexão. É mais fácil testar o tutorial com essa opção.

    7. Em Nome da política do hub de eventos, selecione Usar existente e escolha a política criada anteriormente.

    8. Escolha Salvar na parte inferior da página.

      Captura de tela mostrando a página de configuração dos Hubs de Eventos para uma entrada.

Configurar saída de trabalho

A última etapa é definir um coletor de saída no qual o trabalho poderá gravar os dados transformados. Neste tutorial, você gera e visualiza dados com o Power BI.

  1. No portal do Azure, abra Todos os recursos e selecione o trabalho ASATutorial do Stream Analytics.

  2. Na seção Topologia do Trabalho do trabalho do Stream Analytics, selecione a opção Saídas.

  3. Escolha + Adicionar>Power BI.

  4. Preencha o formulário de saída com os seguintes detalhes:

    Configuração Valor sugerido
    Alias de saída MyPBIoutput
    Agrupar o workspace Meu workspace
    Nome do conjunto de dados ASAdataset
    Nome da tabela ASATable
    Modo de autenticação Token de usuário
  5. Selecione Autorizar e siga os prompts para autenticar o Power BI.

    Configurar a saída do Stream Analytics

  6. Selecione Salvar na parte inferior da página Power BI.

    Este tutorial usará o modo de autenticação Token de usuário. Para usar a identidade gerenciada, confira Usar a identidade gerenciada para autenticar o trabalho do Azure Stream Analytics para o Power BI.

Criar consultas para transformar dados em tempo real

Neste ponto, você tem um trabalho do Stream Analytics configurado para ler um fluxo de dados de entrada. A próxima etapa é criar uma consulta que analisa os dados em tempo real. As consultas usam uma linguagem semelhante a SQL que tem algumas extensões específicas para o Stream Analytics.

Nesta seção do tutorial, você criar e testa várias consultas para saber algumas maneiras em que você pode transformar um fluxo de entrada para análise.

As consultas que você criar aqui exibirão apenas os dados transformados na tela. Em uma seção posterior, você gravará os dados transformados no Power BI.

Para saber mais sobre a linguagem, consulte a Referência de linguagem de consulta do Stream Analytics do Azure.

Teste usando uma consulta de passagem

Se deseja arquivar todos os eventos, você pode usar uma consulta de passagem para ler todos os campos na carga do evento.

  1. Navegue até o trabalho do Stream Analytics no portal do Azure e selecione Consulta em Topologia do Trabalho no menu à esquerda.

  2. Na janela de consulta, insira esta consulta:

    SELECT 
        *
    FROM 
        CallStream
    

    Observação

    Assim como acontece com SQL, as palavras-chave não diferenciam maiúsculas de minúsculas e espaço em branco não é significativo.

    Nesta consulta, CallStream é o alias que você especificou quando criou o servidor. Se você tiver usado um alias diferente, use esse nome.

  3. Selecione Testar consulta.

    O trabalho do Stream Analytics executa a consulta em relação aos dados de exemplo da entrada e exibe a saída na parte inferior da janela. Os resultados indicam que o Hub de Eventos e o trabalho do Streaming Analytics estão configurados corretamente.

    Saída de exemplo da consulta de teste.

    O número exato de registros que você vê depende de quantos registros foram capturados na amostra.

Reduza o número de campos usando uma projeção de coluna

Em muitos casos, a análise não precisa de todas as colunas do fluxo de entrada. Você pode usar uma consulta para um conjunto menor de campos retornados do que na consulta de passagem do projeto.

Execute a consulta a seguir e observe a saída.

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

Contagem de chamadas de entrada por região: Janela em cascata com agregação

Suponha que você deseja contar o número de chamadas de entrada por região. Nos dados de streaming, quando você deseja executar funções de agregação como contagem, você precisa segmentar o fluxo em unidades temporais, já que o fluxo de dados é efetivamente infinito. Você faz isso usando a função de janela do Streaming Analytics. Em seguida, você pode trabalhar com os dados dentro dessa janela como uma unidade.

Para essa transformação, você deseja uma sequência de janelas temporais que não se sobreponham - cada janela tem um conjunto discreto de dados que você pode agrupar e agregar. Esse tipo de janela é conhecido como uma janela em cascata. Dentro da janela em cascata, você pode obter uma contagem das chamadas de entrada agrupadas por SwitchNum, que representa o país/região em que a chamada foi originada.

  1. Cole a seguinte consulta no editor de consultas:

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

    Essa consulta usa a palavra-chave Timestamp By na cláusula FROM para especificar qual campo de carimbo de data/hora no fluxo de entrada a ser usado para definir a janela em cascata. Nesse caso, a janela divide os dados em segmentos pelo campo CallRecTime em cada registro. (Se nenhum campo for especificado, a operação em janela usará a hora em que cada evento chegou ao hub de eventos. Consulte "Hora de chegada versus hora do aplicativo" na Referência de linguagem de consulta de Stream Analytics.

    A projeção inclui System.Timestamp, que retorna um carimbo de data/hora para o final de cada janela.

    Para especificar que você deseja usar uma janela em cascata, use a função TUMBLINGWINDOW na cláusula GROUP BY. Na função, você especifica uma unidade de tempo (em qualquer lugar de um microssegundos a um dia) e um tamanho de janela (quantas unidades). Neste exemplo, a Janela em cascata consiste em intervalos de 5 segundos, de modo que você obtém uma contagem por país/região para cada 5 segundos de chamadas.

  2. Selecione Testar consulta. Nos resultados, observe que os carimbos de data/hora em WindowEnd estão em incrementos de 5 segundos.

Detectar fraudes SIM usando uma autojunção

Neste exemplo, considere o uso fraudulento como sendo chamadas que se originam do mesmo usuário, mas em diferentes locais dentro de 5 segundos uma da outra. Por exemplo, o mesmo usuário não pode legitimamente fazer uma chamada da Austrália e dos Estados Unidos ao mesmo tempo.

Para verificar nesses casos, você pode usar uma autojunção do fluxo de dados para associar o fluxo à mesma com base no valor CallRecTime. Em seguida, é possível procurar registros de chamada em que o valor CallingIMSI (o número de origem) é o mesmo, mas o valor SwitchNum (país/região de origem) não é.

Quando você usa uma associação com o fluxo de dados, a junção deve fornecer alguns limites sobre quão distante as linhas correspondentes podem ser separadas no tempo. Como observado anteriormente, os dados de streaming são efetivamente infinitos. Os limites de tempo para a relação são especificados dentro de cláusula ON da junção, usando a função DATEDIFF. Nesse caso, a junção é baseada em um intervalo de 5 segundos de dados de chamada.

  1. Cole a seguinte consulta no editor de consultas:

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

    Essa consulta é como qualquer junção SQL, exceto para a função DATEDIFF na junção. Esta versão de DATEDIFF é específica para Streaming Analytics, e ela deve aparecer na cláusula ON...BETWEEN. Os parâmetros são uma unidade de tempo (segundos neste exemplo) e os aliases de duas fontes para a junção. Essa função é diferente da função DATEDIFF padrão do SQL.

    A cláusula WHERE inclui a condição que sinaliza a chamada fraudulenta: as opções de origem não são iguais.

  2. Selecione Testar consulta. Examine a saída e, em seguida, selecione Salvar consulta.

Iniciar o trabalho e visualizar a saída

  1. Para iniciar o trabalho, acesse a Visão Geral do trabalho e clique em Iniciar.

  2. Selecione Agora para a hora de início da saída do trabalho e selecione Iniciar. Você pode exibir o status do trabalho na barra de notificação.

  3. Depois que o trabalho for concluído com êxito, navegue até o Power BI e entre com sua conta corporativa ou de estudante. Se a consulta do trabalho do Stream Analytics estiver gerando resultados, o conjunto de dados ASAdataset criado estará presente na guia Conjuntos de Dados.

  4. No workspace do Power BI, escolha + Criar para criar um painel novo chamado Chamadas Fraudulentas.

  5. Na parte superior da janela, clique em Editar e Adicionar bloco. Em seguida, escolha Fluxo de Dados Personalizado e Avançar. Escolha o ASAdataset em Seus Conjuntos de Dados. Escolha Cartão na lista suspensa Tipo de visualização e adicione chamadas fraudulentas a Campos. Escolha Avançar para inserir um nome para o bloco e escolha Aplicar para criar o bloco.

    Criar blocos de dashboard do Power BI

  6. Siga a etapa 5 novamente, com as seguintes opções:

    • Quando você chegar em Tipo de Visualização, selecione Gráfico de linhas.
    • Adicionar um eixo e selecione windowend.
    • Adicione um valor e selecione chamadas fraudulentas.
    • Para Janela de tempo para exibir, selecione os últimos 10 minutos.
  7. Seu painel deve se parecer com o exemplo a seguir depois que os dois blocos forem adicionados. Observe que, se você estiver executando o aplicativo de remetente do hub de eventos e o Stream Analytics, o dashboard do Power BI será atualizado periodicamente de acordo com a chegada de novos dados.

    Captura de tela dos resultados no dashboard do Power BI.

Como inserir seu painel do Power BI em um aplicativo Web

Para esta parte do tutorial, você usará um aplicativo Web ASP.NET de amostra criado pela equipe do Power BI para inserir seu painel. Para saber mais sobre a inserção de painéis, confira o artigo Inserindo com o Power BI.

Para configurar o aplicativo, acesse o repositório PowerBI-Developer-Samples do GitHub e siga as instruções na seção Usuário Tem Dados (use as URLs de redirecionamento e de página inicial da subseção integrate-web-app). Como estamos usando painel de exemplo, use o código de exemplo integrate-web-app localizado no repositório GitHub. Depois de executar o aplicativo no navegador, siga estas etapas para inserir o painel criado anteriormente à página da Web:

  1. Selecione Entrar no Power BI, que concede ao aplicativo acesso aos dashboards da sua conta do Power BI.

  2. Selecione o botão Obter Painéis, que exibe painéis da sua conta em uma tabela. Localize o nome do painel criado anteriormente, powerbi-embedded-dashboard, e copie a EmbedUrl correspondente.

  3. Por fim, cole a EmbedUrl no campo de texto correspondente e selecione Inserir Painel. Agora você pode exibir o mesmo painel inserido em um aplicativo Web.

Próximas etapas

Neste tutorial, você criou um trabalho simples do Stream Analytics, analisou os dados de entrada e apresentou resultados em um painel do Power BI. Para saber mais sobre trabalhos do Stream Analytics, prossiga para o seguinte tutorial: