Apuntes sobre minería de datos de SQL Server DMX


El presente documento contiene solamente apuntes basados en el siguiente link de Microsoft sobre DMX (Data Mining Expressions):

Tutorial DMX de Bike Buyer


http://technet.microsoft.com/es-es/library/ms345287(SQL.90).aspx


Existe muy poca documentación clara sobre Expresiones para obtener información de Minería de datos.
El mayor problema es que toma mucho tiempo simular datos.


Para el ejemplo del tutorial es necesario tener la base de datos AdventureWorks instalada ya sea en SQL 2005 o 2008 o superior.


El tutorial utiliza 1 vista y 1 tabla muy importantes para generar los ejemplos:


La vista dbo.vtargetmail que está dentro de la base de datos AdvenutureWorksDW o AdventureWorksDW2008. También la tabla dbo.prospectivebuyer está incluida en este ejemplo.


Este ejemplo nos mostrará la probabilidad de que nuevos clientes quieran o no comprar bicicletas.
  1. Primero se debe tener un proyecto de Analysis Services que ya contenga un datasource.
  2. Luego, se puede crear una Estructura de minería de datos (es más fácil hacer esto visualmente que con DMX):
CREATE MINING STRUCTURE [Bike Buyer]
(
   [Customer Key] LONG KEY,
   [Age]LONG DISCRETIZED(Automatic,10),
   [Bike Buyer] LONG DISCRETE,
   [Commute Distance] TEXT DISCRETE,
   [Education] TEXT DISCRETE,
   [Gender] TEXT DISCRETE,
   [House Owner Flag] TEXT DISCRETE,
   [Marital Status] TEXT DISCRETE,
   [Number Cars Owned]LONG DISCRETE,
   [Number Children At Home]LONG DISCRETE,
   [Occupation] TEXT DISCRETE,
   [Region] TEXT DISCRETE,
   [Total Children]LONG DISCRETE,
   [Yearly Income] DOUBLE CONTINUOUS
)

La estructura, permite definir los tipos de datos de la información.

Una vez que se tiene la estructura, se puede agregar el algoritmo que se va a utilizar para la predicción. En este caso son árboles de decisión:

ALTER MINING STRUCTURE [Bike Buyer]

ADD MINING MODEL [Decision Tree]
(
   [Customer Key],
   [Age],
   [Bike Buyer] PREDICT,
   [Commute Distance],
   [Education],
   [Gender],
   [House Owner Flag],
   [Marital Status],
   [Number Cars Owned],
   [Number Children At Home],
   [Occupation],
   [Region],
   [Total Children],
   [Yearly Income]
) USING Microsoft_Decision_Trees
WITH DRILLTHROUGH

3 aspectos importantes acá que valen la pena resaltar.
Vamos a predecir si la gente va a comprar o no bicicletas. Bike Buyer es un campo que retorna el valor de 0 si el cliente no compra bicicletas y 1 si compra. Ese valor es el que queremos predecir en base a la información que tenemos.

USING Microsoft_Decision_Trees nos indica con qué algoritmos vamos a trabajar.  Podría ser arboles de decisión, Naive, Cluster u otro criterio.

Finalmente with drillthrough nos permite mostrar información de los usuarios del cubo.

Bueno, ya tenemos la estructura de minería de datos y el modelo (que es mejor crear visualmente).

Pero son estructuras vacías !!. Sin datos. Para llenar de datos a nuestra estructura, hay que usar la siguiente sentencia:

INSERT INTO MINING STRUCTURE [Bike Buyer]

(
   [Customer Key],
   [Age],
   [Bike Buyer],
   [Commute Distance],
   [Education],
   [Gender],
   [House Owner Flag],
   [Marital Status],
   [Number Cars Owned],
   [Number Children At Home],
   [Occupation],
   [Region],
   [Total Children],
   [Yearly Income]  
)
OPENQUERY([Adventure Works DW2008],
   'SELECT CustomerKey, Age, BikeBuyer,
         CommuteDistance,EnglishEducation,
         Gender,HouseOwnerFlag,MaritalStatus,
         NumberCarsOwned,NumberChildrenAtHome,
         EnglishOccupation,Region,TotalChildren,
         YearlyIncome
    FROM dbo.vTargetMail')

Acá simplemente estamos llenando a la estructura creada anteriormente con los datos de la vista dbo.vTargetMail que existe por defecto en la tabla AdventureWorksDW.

Ahora sí,podemos consultar la probabilidad de que un cliente con características X, nos compre un producto.
Estamos prediciento el futuro con una computadora !!. Usando algoritmos inteligentes, podemos ver la probabilidad de que una persona x compre nuestros productos:

SELECT
   [Decision Tree].[Bike Buyer] AS Buyer,
   PredictHistogram([Bike Buyer]) AS Statistics
FROM
   [Decision Tree]
NATURAL PREDICTION JOIN
(SELECT 43 AS [Age],
   '1-2 Miles' AS [Commute Distance],
   '0' AS [House Owner Flag],
   1 AS [Number Cars Owned],
   3 AS [Total Children]) AS t

La siguiente consulta, está preguntando. Cuál es la probabilidad de que alguien de 43 años que vive de 1 a 2 millas de mi tienda, que tenga una casa y que tenga 3 hijos me compre una bicicleta ?.

Al correr la consulta, se obtiene la siguiente información:


Entonces, la respuesta nos muestra Buyer 1. Significa que el usuario si va a comprar nuestros productos.
La probabilidad es de 0.6609468 de que compre los productos (66 %), mientras la probabilidad de que no compre es de 0.3390 (34 %). La conclusión de nuestro algoritmo es que una persona de 43 años, con casa que vive de 1 a 2 millas de acá probablemente si compre una bicicleta.

Finalmente, si son varios usuarios y queremos hallar la probabilidad de cada uno de los usuarios de una tabla de que compren los productos, la consulta es la siguiente:

SELECT
  TOP 10
  t.[LastName],
  t.[FirstName],
  [Decision Tree].[Bike Buyer],
  PredictProbability([Bike Buyer])
From
  [Decision Tree]
PREDICTION JOIN
  OPENQUERY([Adventure Works DW2008],
    '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

Lo que hace esta consulta es mostrar en orden de probabilidad a los usuarios de la tabla dbo.ProspectiveBuyer que se encuentra en la base de datos adventureworksDW que probablemente comprarán una bicicleta:


La consulta muestra que los compradores son Morris Riley, Pal Carly, etc. 
Con esta información, los encargados de Marketing ya saben en qué clientes enfocar sus esfuerzos. Las probabilidades de que compren bicis es de 84 % de todos estos clientes con excepción de Jesús Jimenez cuya probabilidad es de 76 % (0.76).

Con estos apuntes muestro cómo crear un modelo de Minería de datos que contiene la información sobre compradores de bicicleta y en base a esa información, detecto la probabilidad de que otros clientes nuevos compren o no bicicletas. 


Para mayor información, tomar el curso de la fundación Jala de Business Intelligence, IT Academy:


http://itacademy.fundacion-jala.org




Comentarios

  1. As informações são muito preciosas...sempre muito didáticas.O curso deve ser muito interessante (lamento no momento não viver na Bolívia). Apesar de ser historiadora,e que possa parecer estranho, minha profissão está intimamente relacionado com as TI, Tenho lido as orientações que você tem nos concedido, mesmo que sejam técnicas e próprias para quem é da área do conhecimento. Mas vivemos a Idade do Silício..portanto, colho as informações. Obrigada!

    ResponderEliminar
  2. Obrigado.
    Se, contudo, a questão é técnica e complicada. Exixten estudantes de sistemas que não conseguem entender o assunto.

    ResponderEliminar
  3. Os conhecimentos são importantes para mim...estou pesquisando muito sobre tecnologias de informação,acredite,procuro entender. Tudo o que escreve,faço a tradução para o português,depois visito sites..se trabalho com inclusão digital, então,tenho que me esforçar o máximo possível...hoje,nada acontece no mundo globalizado,sem que haja a interferência das TI. Meu blog é bem simples,está voltado para a disciplina história e, ao mesmo tempo, tem o objetivo de ensinar os estudantes a trabalhar em laboratórios de informática,então, eu o utilizo como ferramenta. Já pensou em escrever sobre a impressão 3D, que é a grande novidade e vai desencadear um novo salto tecnológico na Revolução Industrial? Tenho muita curiosidade sobre esse assunto. Obrigada!

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

The Deep Sea: una web interactiva para explorar las profundidades el mar y descubrir las extrañas criaturas que viven en él

Detectar el usuario de Windows utilizando C#

Lo nuevo de SQL Server 2008 respecto a SQL Server 2005