Lección 5: Ejecutar consultas de predicción
En esta lección utilizará el formato SELECT FROM <model> PREDICTION JOIN (DMX) de la instrucción SELECT para crear dos tipos distintos de predicciones basados en el modelo del árbol de decisión creado en Lección 2: agregar modelos de minería de datos a la estructura de minería de datos. Estos tipos de predicciones se definen a continuación.
Consulta singleton
Use una consulta singleton para proporcionar valores ad hoc al realizar predicciones. Por ejemplo, puede determinar si es probable que un cliente sea un comprador de bicicletas pasando entradas a la consulta, como la distancia al lugar de trabajo, el prefijo telefónico o el número de hijos del cliente. La consulta singleton devuelve un valor que indica la probabilidad de que la persona compre una bicicleta basándose en esas entradas.Consulta por lotes
Utilice una consulta por lotes para determinar qué clientes potenciales incluidos en una tabla es probable que adquieran una bicicleta. Por ejemplo, si el departamento de marketing le proporciona una lista de clientes y atributos de clientes, puede utilizar una predicción por lotes para determinar qué clientes de la tabla es probable que adquieran una bicicleta.
El formato SELECT FROM <model> PREDICTION JOIN (DMX) de la instrucción SELECT consta de tres partes:
Una lista de las funciones de predicción y las columnas del modelo de minería de datos devueltas en los resultados. Los resultados también pueden incluir columnas de entrada de los datos de origen.
La consulta de origen que define los datos que se utilizan para crear una predicción. Por ejemplo, en una consulta por lotes, podría ser una lista de clientes.
Una asignación entre las columnas del modelo de minería de datos y los datos de origen. Si los nombres coinciden, puede utilizar la sintaxis NATURAL y no incluir las asignaciones de columnas.
La consulta se puede mejorar aún más si se utilizan funciones de predicción. Las funciones de predicción proporcionan información adicional como, por ejemplo, la probabilidad de que se produzca una predicción, y ofrecen compatibilidad con la predicción en el conjunto de datos de entrenamiento. Para obtener más información acerca de las funciones de predicción, vea Funciones (DMX).
Las predicciones de este tutorial se basan en la tabla ProspectiveBuyer de la base de datos de ejemplo AdventureWorksDW2012 . La tabla ProspectiveBuyer contiene una lista de clientes potenciales y de sus características asociadas. Los clientes de esta tabla son independientes de los clientes utilizados para crear el modelo de minería de datos del árbol de decisión.
También se pueden crear predicciones usando el generador de consultas de predicción de SQL Server Data Tools (SSDT). Para obtener más información, vea Usar el Generador de consultas de predicción para crear consultas de predicción DMX.
Tareas de la lección
En esta lección realizará las tareas siguientes:
Crear una consulta singleton para determinar si es probable que un cliente específico adquiera una bicicleta.
Crear una consulta por lotes para determinar qué clientes de los incluidos en una tabla es probable que adquieran una bicicleta.
Consulta singleton
El primer paso es usar SELECT FROM <modelo> PREDICTION JOIN (DMX) en una consulta de predicción singleton. A continuación, se incluye un ejemplo genérico de la instrucción singleton:
SELECT <select list> FROM [<mining model name>]
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
En la primera línea del código se definen las columnas del modelo de minería de datos que debe devolver la consulta y se especifica el modelo de minería de datos usado para generar la predicción:
SELECT <select list> FROM [<mining model name>]
En las líneas siguientes del código se definen las características del cliente que se utilizan para crear una predicción:
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
ORDER BY <expression>
Si especifica NATURAL PREDICTION JOIN, el servidor compara los nombres de cada columna del modelo con los nombres de las columnas de los datos de entrada. Si los nombres de columna no coinciden, las columnas se omiten.
Para crear una consulta de predicción singleton
En el Explorador de objetos, haga clic con el botón secundario en la instancia de Analysis Services, seleccione Nueva consulta y haga clic en DMX.
Se abre el Editor de consultas, que contiene una consulta nueva en blanco.
Copie el ejemplo genérico de la instrucción singleton en la consulta en blanco.
Reemplace lo siguiente:
<select list>
por:
[Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS Statistics
La instrucción AS se utiliza para asignar un alias a las columnas devueltas por la consulta. La función PredictHistogram devuelve estadísticas acerca de la predicción, incluidas la probabilidad y la compatibilidad. Para obtener más información acerca de las funciones que se pueden utilizar en una instrucción de predicción, vea Funciones (DMX).
Reemplace lo siguiente:
[<mining model>]
por:
[Decision Tree]
Reemplace lo siguiente:
(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
Ahora, la instrucción completa debería ser como sigue:
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
En el menú Archivo, haga clic en Guardar DMXQuery1.dmx como.
En el cuadro de diálogo Guardar como, desplácese a la carpeta correspondiente y asigne el nombre Singleton_Query.dmx al archivo.
En la barra de herramientas, haga clic en el botón Ejecutar.
La consulta devuelve una predicción acerca de si un cliente con las características especificadas adquirirá una bicicleta, así como estadísticas acerca de la predicción.
Consulta por lotes
El paso siguiente es utilizar SELECT FROM <modelo> PREDICTION JOIN (DMX) en una consulta de predicción por lotes. A continuación, se incluye un ejemplo genérico de una instrucción 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>
Como en la consulta singleton, en las dos primeras líneas del código se definen las columnas del modelo de minería de datos devueltas por la consulta, así como el nombre del modelo de minería de datos utilizado para generar la predicción. La instrucción TOP <number> especifica que la consulta solo devolverá el número o los resultados especificados por <number>.
En las líneas siguientes del código se definen los datos de origen en los que se basan las predicciones:
OPENQUERY([<datasource>],'<SELECT statement>')
AS [<input alias>]
En cuanto al método utilizado para recuperar los datos de origen, hay varias opciones, pero en este tutorial se usará OPENQUERY. Para obtener más información acerca de las opciones disponibles, vea <source data query>.
En la línea siguiente se definen la asignación entre las columnas de origen del modelo de minería de datos y las columnas de los datos de origen:
ON <column mappings>
La cláusula WHERE filtra los resultados devueltos por la consulta de predicción:
WHERE <where clause, boolean expression,>
En la última línea del código, que es opcional, se especifica la columna por la cual se ordenarán los resultados:
ORDER BY <expression> [DESC|ASC]
Utilice ORDER BY en combinación con la instrucción TOP <number> para filtrar los resultados devueltos. Por ejemplo, en esta predicción se devolverán los diez principales compradores de bicicletas, ordenados por la probabilidad de que la predicción sea correcta. Puede utilizar la sintaxis [DESC|ASC] para controlar el orden en el que aparecen los resultados.
Para crear una consulta de predicción por lotes
En el Explorador de objetos, haga clic con el botón secundario en la instancia de Analysis Services, seleccione Nueva consulta y haga clic en DMX.
Se abre el Editor de consultas, que contiene una consulta nueva en blanco.
Copie el ejemplo genérico de la instrucción por lotes en la consulta en blanco.
Reemplace lo siguiente:
<select list>
por:
SELECT TOP 10 t.[LastName], t.[FirstName], [Decision Tree].[Bike Buyer], PredictProbability([Bike Buyer])
TOP 10 especifica que la consulta solo devolverá los diez primeros resultados. La instrucción ORDER BY de esta consulta ordena los resultados según la probabilidad de que la predicción sea correcta, por lo que solo se devolverán los diez resultados más probables.
Reemplace lo siguiente:
[<mining model>]
por:
[Decision Tree]
Reemplace lo siguiente:
OPENQUERY([<datasource>],'<SELECT statement>')
por:
OPENQUERY([Adventure Works DW2008R2], 'SELECT [LastName], [FirstName], [MaritalStatus], [Gender], [YearlyIncome], [TotalChildren], [NumberChildrenAtHome], [Education], [Occupation], [HouseOwnerFlag], [NumberCarsOwned] FROM [dbo].[ProspectiveBuyer] ') AS t
Reemplace lo siguiente:
<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 que los resultados con la probabilidad más alta aparezcan primero en la lista.
Ahora, la instrucción completa debería ser como sigue:
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
En el menú Archivo, haga clic en Guardar DMXQuery1.dmx como.
En el cuadro de diálogo Guardar como, desplácese a la carpeta correspondiente y asigne el nombre Batch_Prediction.dmx al archivo.
En la barra de herramientas, haga clic en el botón Ejecutar.
La consulta devuelve una tabla que contiene nombres de cliente, una predicción acerca de si cada cliente adquirirá una bicicleta y la probabilidad de la predicción.
Éste es el último paso del tutorial de Bike Buyer. Ahora dispone de un conjunto de modelos de minería de datos que puede utilizar para explorar las similitudes entre sus clientes y predecir si los clientes potenciales adquirirán una bicicleta.
Para aprender a utilizar DMX en un escenario de Market Basket, vea Tutorial DMX de Market Basket.