Lição 5: Executando previsão de consultas

Nesta lição, você usará o formulário.SELECT FROM <model>PREDICTION JOIN (DMX) da instrução SELECT para criar dois tipos diferentes de previsões baseadas no modelo de árvore de decisão criado na Lição 2: Adicionando modelos de mineração à estrutura de mineração de associação. Esses tipos de prognóstico estão definidos abaixo.

  • Consulta singleton
    Use uma consulta singleton para fornecer valores ad hoc ao fazer previsões. Por exemplo, você pode determinar se um único cliente tem probabilidade de ser um comprador de bicicleta, passando entradas à consulta, como a distância para o trabalho, o código de área ou o número de filhos do cliente. A consulta singleton retorna um valor que indica a probabilidade de a pessoa comprar uma bicicleta com base nessas entradas.

  • Consulta por lotes
    Use uma consulta por lotes para determinar que clientes em potencial em uma tabela possam vir a comprar uma bicicleta. Por exemplo, se seu departamento de marketing lhe fornecer uma lista de clientes e de atributos de cliente, então você poderá usar um prognóstico por lotes para determinar quais clientes da tabela são prováveis compradores de bicicleta.

O formulário SELECT FROM <model> PREDICTION JOIN (DMX) da instrução SELECT contém três partes:

  • Uma lista de colunas de modelo de mineração e funções de previsão retornadas nos resultados. Os resultados também podem conter colunas de entrada dos dados de origem.

  • A consulta de origem que define os dados usados para criar um prognóstico. Por exemplo, uma consulta por lotes poderia ser uma lista de clientes.

  • Um mapeamento entre as colunas de modelo de mineração e os dados de origem. Se esses nomes coincidirem, então você pode usar a sintaxe NATURAL e não incluir os mapeamentos de coluna.

É possível melhorar a consulta ainda mais, usando as funções de prognóstico. As funções de prognóstico fornecem informações adicionais, como a probabilidade de um prognóstico se confirmar, e dão suporte ao prognóstico no conjunto de dados de treinamento. Para obter mais informações sobre as funções de prognóstico, consulte Funções (DMX).

Os prognóstico neste tutorial se baseiam na tabela ProspectiveBuyer no banco de dados de exemplo AdventureWorksDW. A tabela ProspectiveBuyer contém uma lista de clientes em potencial e as características associadas a eles. Os clientes nesta tabela independem dos clientes usados para criar o modelo de mineração da árvore de decisão.

Ainda é possível criar prognósticos usando o construtor de consultas de prognóstico do Business Intelligence Development Studio. Para obter mais informações, consulte Usando o construtor de consultas de previsão para criar consultas de previsão DMX.

Tarefas da Lição

Você executará as seguintes tarefas nesta lição:

  • Crie uma consulta singleton para determinar a probabilidade de um determinado cliente vir a comprar uma bicicleta.

  • Crie uma consulta em lotes para determinar quais clientes, listados em uma tabela de clientes, têm probabilidade de comprar uma bicicleta.

Consulta singleton

O primeiro passo é usar o SELECT FROM <modelo> PREDICTION JOIN (DMX) em uma consulta de previsão singleton. Segue um exemplo genérico da instrução singleton:

SELECT <select list> FROM [<mining model name>] 
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]

A primeira linha do código define as colunas do modelo de mineração que a consulta deve retornar e especifica o nome do modelo de mineração usado para gerar a previsão:

SELECT <select list> FROM [<mining model name>] 

Nas linhas seguintes do código são definidas as características do cliente usadas para criar um prognóstico:

NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
ORDER BY <expression>

Se você especificar NATURAL PREDICTION JOIN, o servidor faz a correspondência entre cada coluna do modelo com uma coluna dos dados de entrada, com base em nomes de coluna. Se os nomes da coluna não coincidirem, as colunas serão ignoradas.

Para criar uma consulta de prognóstico singleton

  1. No Pesquisador de Objetos, clique com o botão direito do mouse na instância do Analysis Services, aponte para Nova Consulta e clique em DMX.

    O Editor de Consultas é exibido com uma consulta nova em branco.

  2. Copie o exemplo genérico da instrução singleton, no campo em branco da consulta.

  3. Substitua o seguinte:

    <select list> 
    

    por:

    [Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS Statistics
    

    A instrução AS é usada para designar um alias para as colunas que retornaram na consulta. A função PredictHistogram retorna estatísticas sobre o prognóstico, incluindo a probabilidade e o suporte. Para obter mais informações sobre as funções que podem ser usadas em uma instrução de prognóstico, consulte Funções (DMX).

  4. Substitua o seguinte:

    [<mining model>] 
    

    por:

    [Decision Tree]
    
  5. Substitua o seguinte:

    (SELECT '<value>' AS [<column name>], ...)  AS t
    

    por:

    (SELECT 35 AS [Age],
      '5-10 Miles' AS [Commute Distance],
      '1' AS [House Owner Flag],
      2 AS [Number Cars Owned],
      2 AS [Total Children]) AS t
    

    A instrução completa agora deve ser:

    SELECT
       [Bike Buyer] AS Buyer,
       PredictHistogram([Bike Buyer]) AS Statistics
    FROM
       [Decision Tree]
    NATURAL PREDICTION JOIN
    (SELECT 35 AS [Age],
       '5-10 Miles' AS [Commute Distance],
       '1' AS [House Owner Flag],
       2 AS [Number Cars Owned],
       2 AS [Total Children]) AS t
    
  6. No menu Arquivo, clique em Salvar DMXQuery1.dmx como.

  7. Na caixa de diálogo Salvar Como, procure a pasta apropriada e nomeie o arquivo Singleton_Query.dmx.

  8. Na barra de ferramentas, clique no botão Executar.

    A consulta retorna um prognóstico sobre a possibilidade de um cliente, com as características especificadas, comprar uma bicicleta, além de as estatísticas sobre tal prognóstico.

Consulta por lotes

O passo seguinte é usar SELECT FROM <modelo> PREDICTION JOIN (DMX) em uma consulta de previsão por lotes. Segue um exemplo genérico de uma instrução por lotes:

SELECT TOP <number> <select list> 
FROM [<mining model name>]
PREDICTION JOIN
OPENQUERY([<datasource>],'<SELECT statement>')
  AS [<input alias>]
ON <on clause, mapping,>
WHERE <where clause, boolean expression,>
ORDER BY <expression>

Assim como na consulta singleton, as primeiras duas linhas do código definem as colunas do modelo de mineração que a consulta retorna, assim como o nome do modelo de mineração usado para gerar o prognóstico: A instrução TOP <number> especifica que a consulta retornará só o número ou os resultados especificados por <number>.

As próximas linhas do código definem os dados de origem nos quais os prognóstico se baseiam:

OPENQUERY([<datasource>],'<SELECT statement>')
  AS [<input alias>]

Você dispõe de várias opções de métodos para recuperar os dados de origem; mas, neste tutorial, usará o OPENQUERY. Para obter mais informações sobre outras opções disponíveis, consulte <consulta de dados de origem>.

A linha seguinte define o mapeamento entre as colunas de origem do modelo de mineração e as colunas dos dados de origem.

ON <column mappings>

A cláusula WHERE filtra os resultados retornados pela consulta de prognóstico:

WHERE <where clause, boolean expression,>

A última e opcional linha do código especifica a coluna segundo a qual os resultados serão ordenados:

ORDER BY <expression> [DESC|ASC]

Use ORDER BY em combinação com a instrução TOP <number> para filtrar os resultados que retornarem. Por exemplo, neste prognóstico você devolverá os dez principais compradores de bicicleta, ordenados pela probabilidade de maior acerto. Use a sintaxe [DESC|ASC] para controlar a ordem de exibição dos resultados.

Para criar uma consulta de prognóstico por lotes

  1. Em Pesquisador de Objetos, clique com o botão direito do mouse na instância do Analysis Services, aponte para Nova Consulta e clique em DMX.

    O editor de consultas é exibido com uma consulta nova em branco.

  2. Copie o exemplo genérico da instrução por lotes, no campo em branco da consulta.

  3. Substitua o seguinte:

    <select list> 
    

    por:

    SELECT
      TOP 10
      t.[LastName],
      t.[FirstName],
      [Decision Tree].[Bike Buyer],
      PredictProbability([Bike Buyer])
    

    A instrução TOP 10 especifica que retornem apenas os dez primeiros resultados na consulta. Nesta consulta, a instrução ORDER BY ordena os resultados segundo a maior probabilidade de acerto do prognóstico, de forma que apenas os dez resultados mais prováveis retornem.

  4. Substitua o seguinte:

    [<mining model>] 
    

    por:

    [Decision Tree]
    
  5. Substitua o seguinte:

    OPENQUERY([<datasource>],'<SELECT statement>')
    

    por:

      OPENQUERY([Adventure Works DW],
        'SELECT
          [LastName],
          [FirstName],
          [MaritalStatus],
          [Gender],
          [YearlyIncome],
          [TotalChildren],
          [NumberChildrenAtHome],
          [Education],
          [Occupation],
          [HouseOwnerFlag],
          [NumberCarsOwned]
        FROM
          [dbo].[ProspectiveBuyer]
        ') AS t
    
  6. Substitua o seguinte:

    <ON clause, mapping,> 
    WHERE <where clause, boolean expression,>
    ORDER BY <expression>
    

    por:

    [Decision Tree].[Marital Status] = t.[MaritalStatus] AND
      [Decision Tree].[Gender] = t.[Gender] AND
      [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
      [Decision Tree].[Total Children] = t.[TotalChildren] AND
      [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
      [Decision Tree].[Education] = t.[Education] AND
      [Decision Tree].[Occupation] = t.[Occupation] AND
      [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
      [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
    WHERE [Decision Tree].[Bike Buyer] =1
    ORDER BY PredictProbability([Bike Buyer]) DESC
    

    Especifique DESC para listar os resultados mais prováveis primeiro.

    A instrução completa agora deve ser:

    SELECT
      TOP 10
      t.[LastName],
      t.[FirstName],
      [Decision Tree].[Bike Buyer],
      PredictProbability([Bike Buyer])
    FROM
      [Decision Tree]
    PREDICTION JOIN
      OPENQUERY([Adventure Works DW],
        'SELECT
          [LastName],
          [FirstName],
          [MaritalStatus],
          [Gender],
          [YearlyIncome],
          [TotalChildren],
          [NumberChildrenAtHome],
          [Education],
          [Occupation],
          [HouseOwnerFlag],
          [NumberCarsOwned]
        FROM
          [dbo].[ProspectiveBuyer]
        ') AS t
    ON
      [Decision Tree].[Marital Status] = t.[MaritalStatus] AND
      [Decision Tree].[Gender] = t.[Gender] AND
      [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
      [Decision Tree].[Total Children] = t.[TotalChildren] AND
      [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
      [Decision Tree].[Education] = t.[Education] AND
      [Decision Tree].[Occupation] = t.[Occupation] AND
      [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
      [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
    WHERE [Decision Tree].[Bike Buyer] =1
    ORDER BY PredictProbability([Bike Buyer]) DESC
    
  7. No menu Arquivo, clique em Salvar DMXQuery1.dmx como.

  8. Na caixa de diálogo Salvar Como, procure a pasta apropriada e nomeie o arquivo Batch_Prediction.dmx.

  9. Na barra de ferramentas, clique no botão Executar.

    A consulta retorna uma tabela contendo nomes de cliente, um prognóstico sobre a possibilidade de cada cliente comprar uma bicicleta e a probabilidade deste prognóstico.

Este é o último passo no tutorial Comprador de Bicicleta. Você tem um conjunto de modelos de mineração que lhe permite explorar as semelhanças entre seus clientes e prever se os clientes em potencial comprarão uma bicicleta.

Para aprender a usar DMX (Data Mining Extensions) em um cenário de Market Basket, consulte Tutorial de DMX do Market Basket.