Lezione 5: Esecuzione di query di stima

In questa lezione verrà utilizzata la forma SELECT FROM <model> PREDICTION JOIN (DMX) dell'istruzione SELECT per creare due tipi di stime basate sul modello di albero delle decisioni creato in Lezione 2: Aggiunta di modelli di data mining alla struttura di data mining di associazione. Di seguito è riportata la definizione di questi tipi di stima.

  • Query singleton
    Utilizzare una query singleton per fornire valori ad hoc in caso di esecuzione di stime. È ad esempio possibile determinare se un cliente sia il probabile acquirente di una bicicletta passando alla query input come la distanza dal luogo di lavoro, il prefisso telefonico o il numero di figli del cliente. La query singleton restituisce un valore che indica con quale probabilità il cliente acquisterà una bicicletta in base agli input forniti.

  • Query batch
    Una query batch consente di determinare quali clienti, all'interno di una tabella di potenziali clienti, è probabile che acquistino una bicicletta. Ad esempio, se il reparto marketing fornisce un elenco di clienti con i relativi attributi, è possibile utilizzare una stima batch per stabilire quali di essi è probabile che acquistino una bicicletta.

Nella forma SELECT FROM <model> PREDICTION JOIN (DMX) dell'istruzione SELECT sono incluse tre parti:

  • Un elenco di funzioni di stima e di colonne del modello di data mining restituite nei risultati. I risultati possono anche includere le colonne di input provenienti dall'origine dati.

  • La query di origine che definisce i dati utilizzati per la creazione di una stima, ad esempio un elenco di clienti in una query batch.

  • Un mapping tra le colonne del modello di data mining e i dati di origine. Se i nomi corrispondono, è possibile utilizzare la sintassi NATURAL e tralasciare i mapping delle colonne.

Per migliorare ulteriormente la query, è possibile utilizzare le funzioni di stima che forniscono informazioni aggiuntive, quali la probabilità che una stima sia confermata dai fatti, e supporto per la stima nel set di dati di training. Per ulteriori informazioni sulle funzioni di stima, vedere Funzioni (DMX).

Le stime in questa esercitazione sono basate sulla tabella ProspectiveBuyer nel database di esempio AdventureWorksDW2012 . La tabella ProspectiveBuyer contiene un elenco di potenziali clienti con le relative caratteristiche. I clienti in questa tabella sono indipendenti dai clienti utilizzati per creare il modello di data mining dell'albero delle decisioni.

È inoltre possibile creare stime utilizzando il generatore delle query di stima in SQL Server Data Tools (SSDT). Per ulteriori informazioni, vedere Compilazione di query di stima DMX.

Argomenti della lezione

In questa lezione verranno eseguite le attività seguenti:

  • Creazione di una query singleton per determinare la probabilità che un particolare cliente acquisti una bicicletta.

  • Creazione di una query batch per determinare quali clienti, all'interno di una tabella di clienti, è probabile che acquistino una bicicletta.

Query singleton

Il primo passaggio consiste nell'utilizzare SELECT FROM <model> PREDICTION JOIN (DMX) in una query di stima singleton. Di seguito è riportato un esempio generico dell'istruzione singleton:

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

La prima riga del codice definisce le colonne del modello di data mining restituite dalla query e specifica il modello di data mining utilizzato per generare la stima:

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

Le successive righe del codice definiscono le caratteristiche del cliente utilizzate per creare una stima:

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

Se si specifica NATURAL PREDICTION JOIN, il server ricercherà la corrispondenza tra ogni colonna del modello e una colonna dell'input, in base ai nomi delle colonne. Se i nomi di colonna non corrispondono, le colonne vengono ignorate.

Per creare una query di stima singleton

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sull'istanza di Analysis Services, scegliere Nuova query e quindi DMX.

    Verrà avviato l'editor di query con una nuova query vuota.

  2. Copiare l'esempio generico dell'istruzione singleton nella query vuota.

  3. Sostituire quanto segue:

    <select list> 
    

    con:

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

    L'istruzione AS viene utilizzata per creare un alias delle colonne restituite dalla query. La funzione PredictHistogram restituisce le statistiche relative alla stima, compresa la probabilità e il supporto. Per ulteriori informazioni sulle funzioni che possono essere utilizzate in un'istruzione di stima, vedere Funzioni (DMX).

  4. Sostituire quanto segue:

    [<mining model>] 
    

    con:

    [Decision Tree]
    
  5. Sostituire quanto segue:

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

    con:

    (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
    

    L'istruzione completa dovrebbe risultare analoga alla seguente:

    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. Scegliere Salva DMXQuery1.dmx con nome dal menu File.

  7. Nella finestra di dialogo Salva con nome individuare la cartella appropriata e assegnare al file il nome Singleton_Query.dmx.

  8. Fare clic sul pulsante Esegui sulla barra degli strumenti.

    La query restituisce una stima sulla probabilità che un cliente con le caratteristiche specificate acquisti una bicicletta, nonché le statistiche relative a tale stima.

Query batch

Il passaggio successivo consiste nell'utilizzare SELECT FROM <model> PREDICTION JOIN (DMX) in una query di stima batch. Di seguito è riportato un esempio generico di istruzione batch:

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>

Come nella query singleton, le prime due righe del codice definiscono le colonne del modello di data mining restituite dalla query, nonché il nome del modello di data mining utilizzato per generare la stima. L'istruzione TOP <number> consente di specificare che tramite la query verrà restituito solo il numero o i risultati specificati da <number>.

Le successive righe del codice definiscono i dati di origine su cui si basano le stime:

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

Sebbene siano disponibili diverse opzioni per il recupero dei dati di origine, in questa esercitazione si utilizzerà OPENQUERY. Per ulteriori informazioni sulle opzioni disponibili, vedere <source data query>.

La riga successiva definisce il mapping tra le colonne di origine nel modello di data mining e le colonne nei dati di origine:

ON <column mappings>

La clausola WHERE filtra i risultati restituiti dalla query di stima:

WHERE <where clause, boolean expression,>

L'ultima riga (facoltativa) del codice specifica la colonna in base alla quale verranno ordinati i risultati:

ORDER BY <expression> [DESC|ASC]

Utilizzare ORDER BY in combinazione con l'istruzione TOP <number> per filtrare i risultati restituiti. In questa stima, ad esempio, verranno restituiti i primi dieci acquirenti di biciclette, ordinati in base alla probabilità che la stima si riveli corretta. È possibile utilizzare la sintassi [DESC|ASC] per controllare l'ordine di visualizzazione dei risultati.

Per creare una query di stima batch

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sull'istanza di Analysis Services, scegliere Nuova query e quindi DMX.

    Verrà avviato l'editor di query con una nuova query vuota.

  2. Copiare l'esempio generico di istruzione batch nella query vuota.

  3. Sostituire quanto segue:

    <select list> 
    

    con:

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

    TOP 10 specifica che la query restituirà solo i primi dieci risultati. L'istruzione ORDER BY nella query consente di ordinare i risultati in base alla probabilità che la stima si riveli corretta. Verranno quindi restituiti solo i dieci risultati con un grado di probabilità maggiore.

  4. Sostituire quanto segue:

    [<mining model>] 
    

    con:

    [Decision Tree]
    
  5. Sostituire quanto segue:

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

    con:

      OPENQUERY([Adventure Works DW2008R2],
        'SELECT
          [LastName],
          [FirstName],
          [MaritalStatus],
          [Gender],
          [YearlyIncome],
          [TotalChildren],
          [NumberChildrenAtHome],
          [Education],
          [Occupation],
          [HouseOwnerFlag],
          [NumberCarsOwned]
        FROM
          [dbo].[ProspectiveBuyer]
        ') AS t
    
  6. Sostituire quanto segue:

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

    con:

    [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
    

    Specificare DESC per fare in modo che l'elenco dei risultati inizi dalla probabilità più alta.

    L'istruzione completa dovrebbe risultare analoga alla seguente:

    SELECT
      TOP 10
      t.[LastName],
      t.[FirstName],
      [Decision Tree].[Bike Buyer],
      PredictProbability([Bike Buyer])
    FROM
      [Decision Tree]
    PREDICTION JOIN
      OPENQUERY([Adventure Works DW2008R2],
        '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. Scegliere Salva DMXQuery1.dmx con nome dal menu File.

  8. Nella finestra di dialogo Salva con nome individuare la cartella appropriata e assegnare al file il nome Batch_Prediction.dmx.

  9. Fare clic sul pulsante Esegui sulla barra degli strumenti.

    La query restituisce una tabella con i nomi dei clienti, una stima relativa all'acquisto di una bicicletta da parte di ogni cliente e la probabilità che la stima si riveli corretta.

Si conclude così l'esercitazione Bike Buyer. A questo punto si dispone di un set di modelli di data mining che è possibile utilizzare per valutare le analogie tra i propri clienti e stimare se i potenziali clienti acquisteranno una bicicletta.

Per informazioni sull'utilizzo di DMX in uno scenario Market Basket, vedere Esercitazione su DMX per Market Basket.