You are on page 1of 51

Prctica 1 de Minera de Datos

Introduccin al Clementine

Curso de
Almacenes de Datos y Minera de Datos

Departamento de Sistemas Informticos y Computacin


Universidad Politcnica de Valencia

en colaboracin con

Universidad de El Salvador

Jos Hernndez Orallo. (jorallo@dsic.upv.es). Julio 2003


ndice

1. Introduccin al SPSS Clementine ......................................................................................................................... 3


1.1 Sources (Orgenes)......................................................................................................................................... 4
1.2 Record Ops. (Oper. con registros) ................................................................................................................ 5
1.3 Field Ops. (Oper. con campos) ..................................................................................................................... 5
1.4 Graph (Grficos) ............................................................................................................................................ 5
1.5 Modelling (Modelado)................................................................................................................................... 6
1.6 Output (Salida) ............................................................................................................................................... 7
2. Un Primer Ejemplo ................................................................................................................................................ 8
3. Visualizacin y Preparacin de Datos ................................................................................................................ 15
3.1 Enunciado de un Primer Problema. Seleccin de Frmaco....................................................................... 15
3.2 Resolucin del Problema de Seleccin de Frmaco .................................................................................. 15
3.3 Un Segundo Problema: Agrupacin de Empleados................................................................................... 23
3.4 Resolucin del Problema de Agrupacin de Empleados........................................................................... 23
3.5 Un Tercer Problema: Agrupacin de Empleados con Datos Errneos y Faltantes ................................. 26
3.6 Resolucin del Problema de Agrupacin de Empleados con Datos Imperfectos .................................... 27
3.7 Obtencin y Transformacin de Datos Relacionales (ODBC) ................................................................. 42

2
En esta primera prctica se van descubriendo paso a paso las posibilidades del Clementine.

1. Introduccin al SPSS Clementine


El SPSS Clementine es una herramienta integrada de minera de datos, inicialmente de Integral
Solutions Limited (ISL) y ahora de SPSS (www.spss.com).
La versin 5.2.1 en ingls o la 6.0.2 en castellano, que es con las que vamos a trabajar
1
indistintamente , incluye las siguientes caractersticas:
Diversas fuentes de datos (ASCII, XLS u ODBC).
Interfaz visual basado en procesos/flujos de datos (streams).
Distintas herramientas de minera de datos: correlacin, reglas de asociacin (GRI, a priori),
patrones secuenciales (regresin), segmentacin (Kohonen, Two-step y k-means), clasificacin
(redes neuronales, reglas y rboles de decisin).
Manipulacin de datos (pick & mix, muestreo, combinacin y separacin).
Combinacin de modelos.
Visualizacin anterior (datos).
Exportacin de modelos a distintos lenguajes (C, SPSS, SAS).
Exportacin de datos integrada a otros programas (XLS).
Generacin de informes.
El entorno del Clementine est basado en nodos que se van disponiendo y conectando para formar
un flujo (stream), traducido por Clementine tambin como ruta. Los streams pueden dejarse en
ficheros separados (.str) o se pueden organizar en proyectos (.cpj). De hecho, tanto los streams como
los proyectos de minera de datos se almacenan en ficheros separados que se puede abrir, modificar,
reejecutar o reorganizar, y que son independientes de las fuentes de datos.
La Figura 1 muestra un ejemplo de stream con cinco nodos interconectados:

Figura 1. Un stream en Clementine.

Como se puede ver en la parte inferior de la Figura 1, el Clementine clasifica los nodos en seis
categoras:

1
Debido a lo confuso de la traduccin en castellano de la versin 6.0.2 y que adems la ayuda slo est en
ingls, en lo sucesivo utilizaremos preferentemente la nomenclatura en ingls, indicando, inicialmente, tambin
la traduccin en castellano realizada por el Clementine 6.0.2.

3
Sources (Orgenes): nodos para obtener los datos de trabajo (fuentes de datos).
Record Ops (Oper. con registros): operadores para modificar o combinar registros (filas) de
distintas fuentes. Es decir, selecciones y combinaciones.
Field Ops (Oper. con campos): operadores para modificar o combinar campos (columnas).
Graphs (Grficos): grficas.
Modelling (Modelado): tipos de modelos/patrones que puede generar Clementine
Output (Salida): presentacin de tablas, anlisis de modelos, estadsticas, exportacin de datos.
Los nodos disponibles en la versin 5.2.1 se muestran en la Figura 2:

Figura 2. Nodos disponibles en Clementine 5.2.1

No existen variaciones importantes entre la versin 5.2.1 y 6.0.2 respecto a nodos disponibles. Se
clarificar dicha diferencia en la siguiente seccin. En cualquier caso, este boletn se puede
desarrollar indistintamente en ambas versiones.
Pasemos a describir los nodos ms importantes de las categoras anteriores:

1.1 Sources (Orgenes)


La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Var. File (Archivo Permiten leer datos de ficheros de texto que tengan un tamao de
variable) caracteres variable por registro pero un nmero fijo de campos.
Fixed File Permiten leer datos de ficheros de texto que tengan un tamao fijo de
(Archivo Fijo) caracteres por campo, con lo que su uso se limita a fuentes perfectamente
tabuladas.
ODBC Permite obtener los datos de una base de datos a travs de ODBC. A
partir de ah permite realizar consultas SQL y extraer tablas/vistas
particulares.
Cache File Para utilizar ficheros de cach creados por el propio Clementine utilizando
el nodo File de la categora Output.
SPSS Import Para importar datos de un fichero en formato SPSS (paquete estadstico).
(Import. SPSS)
SAS Import
Para importar datos de un fichero en formato SAS (paquete estadstico).
(Import. SAS)
User Input Nodo que no se puede insertar directamente y que sustituye a otro
previamente creado, permitiendo introducir los datos manualmente.

4
1.2 Record Ops. (Oper. con registros)
La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Select Permite imponer condiciones de inclusin o exclusin para las filas. Es
(Seleccionar) similar a un SELECT en SQL.
Merge Permite combinar los datos de dos fuentes (tablas) juntando las columnas de
(Combinar) aquellos registros que coincidan en un atributo comn de clave. Es similar a
una concatenacin relacional (JOIN de SQL).
Sample Permite hacer un muestreo de los datos, ya sean de los N primeros, ir
(Muestra) cogiendo salteados hasta N, o coger aleatoriamente un % de los registros.
Balance Permite aumentar o disminuir la proporcin de registros que cumplen unas
(Equilibrar) determinadas condiciones, lo que es til para sobremuestrar.
Sort (Ordenar) Ordena los registros de un stream (como un ORDER BY de SQL).

Distinct Elimina los registros repetidos (como el DISTINCT de SQL pero con alguna
(Distinguir) opcin ms)
Aggregate Permite aplicar funciones agregadas (como el SUM, AVG, COUNT del SQL)
(Agregar)
Append (Aadir) Permite unir (como UNION ALL de SQL) dos o ms fuentes de datos.

1.3 Field Ops. (Oper. con campos)


La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Filter (Filtrar) Permite eliminar campos no representativos o inservibles. Tambin permite
renombrar.
Derive (Derivar) Permite aadir nuevos campos derivados como combinacin de otros.

Type (Tipo) Permite tipar los campos (si son discretos o continuos, si son de entrada o
salida, etc.). Este paso suele ser necesario para poder aplicar modelos y
grficos. Tambin se puede utilizar para descartar datos anmalos.
Filler (Rellenar) Permite rellenar o sustituir campos faltantes o anmalos siguiendo unas
condiciones.
History Permite generar campos con memoria, especialmente en series (acumulados
(Histrico) parciales, etc.)
SetToFlag Permite generar nuevos campos como transformacin de un valor discreto
(Convertir a de n posibles valores a n nuevos campos booleanos (tipo flag).
marca)

1.4 Graph (Grficos)


La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Plot (Grfico) Permite representar la relacin entre dos valores numricos en dos
dimensiones.
Histogram Representa un histograma de la distribucin de los datos respecto a un valor
(Histograma) numrico.
Distribution Representa un histograma de la distribucin de los datos respecto a un valor
(Distribucin) no numrico.
Web (Malla) Representan la fuerza de asociaciones entre distintos valores de dos o ms
atributos simblicos (no numricos). Permite ver las asociaciones entre
campos.
Collect Similar al histograma, pero muestra la distribucin de un valor numrico
(Recolectar) respecto a otro.

5
Directd Web Genera un subconjunto de las asociaciones que muestra el nodo Web. En
(Malla este caso, muestra slo las conexiones entre uno o ms campos FROM a
direccional) un campo TO.
Multiplot (Grf. Es un derivado del nodo Plot. Permite definir varios campos Y respecto a
mltiple) un campo X
Evaluation Chart
Variantes de los grficos de respuesta, que permiten evaluar qu modelo se
(Evaluacin) va a comportar mejor dependiendo del contexto, como los ROI (return on
investment). Muy relacionado con el anlisis ROC (Receiver Operating
Characteristic).

1.5 Modelling (Modelado)


La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Train Net (Red) Red neuronal multicapa con backpropagation. Dispone de muchos
parmetros. Especialmente til para problemas de clasificacin e
interpolacin (tanto los campos de entrada como los de salida, la clase,
pueden ser simblicos o numricos). Requiere uno y slo un atributo OUT.
Build C5.0 (Crear rbol de decisin derivado del ID3 y el C4.5 de Quinlan. Dispone de
C5.0) diferentes opciones. Los campos de entrada pueden ser simblicos o
numricos, pero la clase ha de ser discreta. Requiere uno y slo un atributo
OUT.
Tr. Kohonen Redes Asociativas de Kohonen, conocidas tambin como Knets. Permite
realizar segmentaciones (clustering). El algoritmo acta slo sobre los
atributos definidos como IN (el resto se ignoran). El resultado es un conjunto
de condiciones que separan/segmentan las instancias en dos o ms grupos
(clusters).
Regression Construye un modelo de regresin lineal, es decir, una funcin lineal de un
(Reg. Lineal) valor numrico respecto uno o ms atributos numricos. Requiere uno y slo
un atributo OUT.
GRI Genera reglas de asociacin orientadas de uno o ms atributos (numricos
o simblicos) o un atributo simblico de ordenadas por support y accuracy.
Train Kmeans Mtodo basado en el movimiento de centros. Permite realizar
segmentaciones (clustering). El algoritmo acta slo sobre los atributos
definidos como IN (el resto se ignoran). El resultado es un conjunto de
condiciones que separan/segmentan las instancias en dos o ms grupos
(clusters).
A Priori Este nodo descubre reglas de asociacin en los datos, en la forma if
antecedent(s) then consequent(s). Se puede especificar confianza y
soporte.
Log. Regression
Tambin llamada regresin nominal. Es como la regresin lineal, pero para
(Reg. Logstica) clasificacin. Es decir, requiere uno y slo un atributo OUT y debe ser
discreto (nominal).
rbol C&R
Es un mtodo de clasificacin y regresin basado en rboles. La clase
puede ser discreta (clasificacin) o continua (regresin). Requiere uno y slo
un atributo OUT.
Factorial/PCA
Permite realizar Principal component analysis (PCA) o anlisis factorial.

TwoStep
Un mtodo para segmentacin (clustering). Al igual que el Kmeans, el
algoritmo acta slo sobre los atributos definidos como IN (el resto se
ignoran). El resultado es un conjunto de condiciones que
separan/segmentan las instancias en dos o ms grupos (clusters).
Build Rule Genera un conjunto de reglas de clasificacin. Los campos de entrada
pueden ser simblicos o numricos, pero la clase ha de ser discreta.
Requiere uno y slo un atributo OUT.

6
1.6 Output (Salida)
La siguiente tabla recoge una breve descripcin de cada uno de ellos:
NOMBRE V5.2 V6.0 DESCRIPCIN
Table (Tabla) Muestra los datos de un stream en una tabla.

Analysis Se aade a la salida de un modelo para analizar su validez.


(Anlisis)
Set Globals (Def. Permite calcular ciertos valores (medias, mximos, mnimos, desviaciones)
Globales) que al ejecutar el nodo estn disponibles para expresiones, condiciones en
cualquier nodo.
Matrix (Matriz) Genera una matriz de ocurrencias para los valores de dos campos. En
cada una de las celdas se muestra la cantidad o el porcentaje de
instancias con el para de valores de cada dimensin.
Statistics Genera estadsticas de distribuciones de los distintos atributos.
(Estadsticos) Especialmente til para calcular correlaciones.
Report (Informe) Permite realizar informes combinando los resultados de un stream.

File (Archivo) Permite exportar a fichero, tambin permite exportar a ficheros cachs.

SPSS Export Exporta a ficheros de datos con el formato SPSS.


(Export. SPSS)
Quality (Calidad) Proporciona un informe sobre la proporcin de datos faltantes por campo.

ODBC Output Permite exportar y enlazar un stream con una fuente ODBC, insertando el
(Salida ODBC) resultado del stream en una tabla.
SPSS Procedure Permite ejecutar in situ en el Clementine un procedimiento estadstico
(Proceso SPSS) generado en el paquete estadstico SPSS.
Excel Permite lanzar un stream al Excel.

Publisher Permite exportar un modelo/condicin para ser utilizado en C o a SQL.

Export. SAS
Exporta a ficheros de datos con el formato SAS.

7
Finalmente, la siguiente tabla resume los modelos que pueden usarse para diferentes tareas:

NOMBRE V5.2 V6.0 PREDICTIVO DESCRIPTIVO


Clasificacin Regresin Clustering Reglas asociacin Otros
Train Net
(Red)
Build C5.0
(Crear C5.0)
Tr. Kohonen
Regression
(Reg. Lineal)
GRI
Train Kmeans
A Priori
Log.

Regression
(Reg.
Logstica)
rbol C&R

Factorial/PCA

TwoStep

Build Rule
2
Statistics
(Estadsticos)

Para ms informacin sobre un nodo, pulsa en el men Help Point-


for-help Mode y pincha en el nodo del que requieras ms informacin.

Adems de los nodos anteriores, existen nodos para los modelos, que se
representan con la figura de un diamante. A partir de ahora denominaremos
a estos nodos, nodos diamante, para diferenciarlos del resto.

2. Un Primer Ejemplo
Vamos a construir el stream de la Figura 1. En primer lugar, aparte del Clementine, dispones de un
directorio llamado LabKDD con todos los ficheros de datos necesarios para realizar este boletn. En
particular, en este primer ejemplo, vamos a trabajar con los datos acerca de los das que se ha
podido jugar al tenis, dependiendo de diversos aspectos meteorlogicos. El objetivo es poder
determinar (predecir) si hoy podremos jugar al tenis. Los datos de que disponemos estn en el
fichero: ..\LabKDD\PlayTennis\playtennis-evidence.txt y son los siguientes:
Sky Temperature Humidity Wind PlayTennis
Sunny Hot High Weak No
Sunny Hot High Strong No
Overcast Hot High Weak Yes
Rain Mild High Weak Yes

2
Aunque no es un modelo propiamente dicho, permite calcular correlaciones.

8
Rain Cool Normal Weak Yes
Rain Cool Normal Strong No
Overcast Cool Normal Strong Yes
Sunny Mild High Weak No
Sunny Cool Normal Weak Yes
Rain Mild Normal Weak Yes
Sunny Mild Normal Strong Yes
Overcast Mild High Strong Yes
Overcast Hot Normal Weak Yes
Rain Mild High Strong No

Abrimos el Clementine (para ello, ve a Inicio Programas Clementine 5.2.1 Clementine). Al


abrir el programa, las dos reas de trabajo (izquierda superior y derecha superior) te aparecen en
blanco (mejor en dicho en azul y gris).
Lo primero que vamos a hacer es insertar un nodo fuente de datos al rea de trabajo. Para ello,
pincha dos veces (o pincha una vez en el nodo y despus otra vez en el rea de trabajo) en el nodo
Var. File que est en la categora Sources (abajo a la izquierda). Te aparecer el nodo en el rea
de trabajo, como se muestra en la Figura 3:

Figura 3. Insertando el primer nodo en el rea de trabajo

Para borrar un nodo, simplemente se selecciona y se pulsa la tecla Supr. Tambin se puede borrar
con el men de contexto asociado a un nodo, el cual se abre pulsando el botn derecho sobre un
nodo.
Ahora vamos a enganchar el nodo con una fuente de datos. Para ello, pincharemos con el botn
derecho sobre el nodo variable file de la zona de trabajo y seleccionaremos EDIT. En la pantalla
de edicin modificaremos el nombre del fichero, el directorio donde est y la forma de importarlo
(utilizando los tabuladores). Para seleccionar el fichero, simplemente pincha en Set File. Busca el
fichero ..\LabKDD\PlayTennis\playtennis-evidence.txt en la siguiente pantalla (Figura 4).

9
Figura 4. Buscando el fichero de datos

Pulsa Set. A continuacin pincha el CheckBox Tab, como aparece en la siguiente Figura 5:

Figura 5. Enganchando con la fuente de datos

Adems seleccionaremos Get field names from file para que nos coja el nombre de los atributos del
propio fichero:

Figura 6. Opciones de formato para leer correctamente el fichero de datos

Pincha en OK.
Para ver que carga bien los datos vamos a aadir un nodo Table (est en la ltima categora
Output). Una vez te aparezca en la zona de trabajo hay que enganchar los dos nodos. Aqu aparece
el nico gran misterio del Clementine: cmo enlazar nodos.

Para enlazar dos nodos en Clementine, se han de pulsar el botn


izquierdo y derecho a la vez sobre el nodo origen y arrastrar el ratn
hasta el nodo destino, soltando en este momento los dos botones.

10
(si el ratn tiene botn del medio, tambin se puede utilizar este botn)

Veamos paso a paso esta delicada operacin:

Figura 7. Enlazando dos nodos

El resultado es el siguiente:

Figura 8. Dos nodos enlazados

Para destruir un enlace, simplemente se pincha con el botn derecho en el enlace y aparece Destroy
Connection.
Si una vez conectados, pulsas el gran botn verde de EXECUTE te debern aparecer los datos
importados en una tabla:

Figura 9. Los datos se han enganchado correctamente

Como se muestra en la tabla, el problema que estbamos intentando tratar era el de ver si hoy
podemos jugar al tenis. Para poder abordar este problema, hemos de decir que los campos Sky,
Temperature, Humidity, Wind son predictores (es decir de entrada), mientras que el campo
Playtennis es la clase a predecir, el resultado (es decir la salida).
Para ello vamos a aadir un nodo Type, que se encuentra en la categora Field Ops. Ahora
enlazamos el nodo playtennis-evidence... con el nodo type. Vamos a editar el nodo type. Para
ello pinchamos con el botn derecho en type y pinchamos en EDIT. Como vemos todos los nodos
tienen direccin IN. Como la salida va a ser playtennis modificamos su direccin a OUT.

11
Figura 10. Tipando los atributos.

Una vez hecho esto ya estamos en disposicin de intentar aprender un modelo a partir de los datos,
en este caso, una funcin, que dados unos determinados valores de los atributos de entrada nos d
un valor para el valor de salida.
Para ello aadimos un nuevo nodo build C5.0 (est en la categora de Modelling) para construir
un rbol de decisin sobre los datos. Conectamos el nodo Type con el nodo build C5.0, que pasa a
llamarse Playtennis.

Figura 11. Stream resultante.

Ahora ya estamos en disposicin de aprender un modelo (en este caso un rbol de decisin). Para
ello, cogemos carrerilla y le damos bien fuerte al gran botn verde de EXECUTE y a minerizar!!!!
Como puedes observar, aparte de volver a mostrar la tabla con los datos de origen (pantalla que
puedes cerrar para que no moleste), se ha generado un nuevo icono en el rea de trabajo de la
derecha, con la forma de un diamante. Somos ricos?
No, de momento. Pinchamos dos veces en el diamante de la derecha y nos aparece en el rea de
trabajo de la izquierda.

Figura 12. Modelo generado y una copia en el rea de trabajo.

12
Ahora pinchamos con el botn derecho en el diamante que hemos copiado en el rea de trabajo (el
que aparece a la izquierda del todo en la Figura 12) y pinchamos en Browse. Se nos muestra una
ventana donde podemos ver el rbol de decisin creado. En el men View, pulsa Show
Instances/confidence. Ahora tienes el rbol etiquetado como se muestra en la siguiente figura:

Figura 13. rbol generado y su cobertura/confianza.

Cmo interpretramos el rbol anterior? La manera de verlo es la siguiente:

Figura 14. rbol representado grficamente.

Adems, la Figura 13 nos muestra para cada rama cuntos ejemplos de la evidencia son cubiertos y
con qu confianza (en este caso el 100% en todas las ramas).
La representacin lgica del rbol anterior sera:
(Outlook=Sunny AND Humidity=Normal) OR (Outlook=Overcast) OR (Outlook=Rain AND Wind=Weak)
Podemos verlo tambin en forma de reglas. Para ello, si le damos al botn derecho del ratn sobre el
nodo-diamante Playtennis y seleccionamos Browse, podemos, en el men Generate, generar las
reglas para ese rbol de decisin, como se muestra en la siguiente figura:

13
Figura 15. Generando las reglas del rbol.

Esto nos genera un nuevo nodo playtennisRS que si lo observamos (botn derecho y Browse)
veremos la expresin del rbol en forma de reglas. Dndole al menu Folding y despus a Show
More vemos:

Figura 16. Reglas del rbol

Finalmente, podemos utilizar el modelo para predecir si podemos jugar o no jugar al tenis hoy.
Supongamos que tenemos, p.ej., la instancia (Sky = rain, Temperature = cool, Humidity = high, Wind
= strong). Podemos ver en el rbol que la clase es NO, con lo que no jugaremos al tenis. No nos
haremos ricos pero nos ahorraremos un constipado o una rinitis alrgica.
Podemos grabar lo que hemos realizado en un fichero .str mediante File Save Stream.

14
3. Visualizacin y Preparacin de Datos
Vamos a abordar problemas ms complejos e interesantes a partir de ahora.

3.1 Enunciado de un Primer Problema. Seleccin de Frmaco


En este caso se trata de predecir el tipo de frmaco (drug) que se debe administrar a un paciente
afectado de rinitis alrgica segn distintos parmetros/variables. Las variables que se recogen en los
historiales clnicos de cada paciente son:
Age: Edad
Sex: Sexo
BP (Blood Pressure): Tensin sangunea.
Cholesterol: nivel de colesterol.
Na: Nivel de sodio en la sangre.
K: Nivel de potasio en la sangre.
Hay cinco frmacos posibles: DrugA, DrugB, DrugC, DrugX, DrugY. Se han recogido los datos del
medicamento idneo para muchos pacientes en cuatro hospitales (los ficheros estn en el directorio
..\LabKDD\drugs). Se pretende, para nuevos pacientes, determinar el mejor medicamento a probar a
cada uno.

3.2 Resolucin del Problema de Seleccin de Frmaco


En primer lugar vamos a coger los datos del primer hospital, ya que al ser el de menor tamao (200
registros), permite hacer ms pruebas inicialmente. Limpiamos la zona de trabajo (Edit Clear) o
botn derecho y Clear. Los datos del fichero drug1n tienen cabecera, con lo que aadiremos un
nodo fuente Var. File y al editar, indicaremos el nombre y directorio del fichero y marcaremos el
checkbox para que obtenga el nombre de los atributos a partir de la primera lnea del fichero:

Figura 17. Abriendo el fichero del primer hospital

Ahora aadiremos un nodo tabla y lo engancharemos con el nodo Var. File. Podemos ver los datos
ya cargados al ejecutar la tabla, como se ve en la siguiente figura:

15
Figura 18. Datos del primer hospital

La primera pregunta que nos podemos hacer es ver qu frmacos son ms comunes en general, para
ver si todos suelen ser igualmente efectivos en trminos generales. Para ello aadimos un nodo
Distribution en la categora Graph y lo enlazamos con la fuente de datos drug1n. La situacin
debe ser similar a la siguiente:

Figura 19. Primeros pasos analizando los frmacos

Si editamos el nodo distribution, podemos elegir el atributo por el cual vamos a representar el
grfico. Seleccionamos drug como el atributo para mostrar las distribuciones.

Figura 20. Pasos para visualizar la distribucin de los frmacos

Ahora ya podemos ejecutar el stream y ver la distribucin del uso de frmacos en el hospital 1.

16
Figura 21. Distribucin de los frmacos en el hospital 1

Vemos que el frmaco ms efectivo es el Y, que se administra con xito en casi la mitad de los
pacientes. Una regla vulgar sera aplicar el frmaco Y, en el caso que falle, el frmaco X, y as
sucesivamente siguiendo las frecuencias de uso con xito.
Con la herramienta Clementine, seguro que lo podemos hacer mucho mejor...
Apliquemos lo mismo que hemos realizado en el ejemplo anterior, intentemos generar un rbol de
decisin. Construyamos y ejecutemos un stream con un nodo Type (donde el atributo drug se ha
puesto como salida) y con un nodo C5.0. Aadamos el modelo generado al rea de trabajo como se
ve en la siguiente figura:

Figura 22. Realizacin de un modelo directamente sobre los datos

El modelo resultante es el siguiente:

17
Figura 23. rbol de decisin directamente sobre los datos

Como podemos observar, el rbol tiene bastante ramas (en concreto 13). Podemos ver cul es la
precisin (accuracy) de este rbol respecto a los datos de entrenamiento. Para ello, conectamos el
nodo Type al nodo diamante Drug y ste a un nuevo nodo Analysis de la categora Output,
como se ve en la siguiente figura:

Figura 24. Stream para analizar la calidad de un modelo

Si ejecutamos el nodo analysis (con el men contextual pulsando el botn derecho) obtenemos los
siguientes resultados:

Figura 25. Calidad del modelo generado para los datos de entrenamiento

18
Con lo que tenemos un 97,5% de precisin. Es decir un error de slo el 2,5% sobre los datos de
entrenamiento. Este modelo es muchsimo mejor que s slo nos guiamos por la distribucin, que nos
dara un error de ms del 50%.
De todas maneras, es posible hacerlo mejor... pero cmo? con otro tipo de algoritmo de
aprendizaje, una red neuronal, p.ej.?
Es posible que otros modelos (p.ej. las redes neuronales) dieran mejor resultado, pero el asunto
aqu es que igual no hemos examinado suficientemente los datos de entrada.
Vamos a analizar, con ms detenimiento, los atributos de entrada del problema. Es posible que se
puedan establecer mejores modelos si combinamos algunos atributos. Podemos analizar pares de
atributos utilizando diferentes grficos.
Para comparar los atributos discretos, el grfico Web suele ser conveniente. Creemos un nodo
web y enganchemos el nodo de fuentes de datos drug1n con l. Al editarlo, decimos que vamos a
examinar los campos (web fields) discretos (Sex, BP, Cho, Drug):

Figura 26. Relacin (asociaciones) entre los atributos discretos Sex x BP x Cho x Drug

Las lneas ms gruesas representan asociaciones ms fuertes. No parece ver ninguna relacin
especial entre los distintos valores de los atributos discretos, exceptuando la clase (valor de salida
drug), que va decreciendo la intensidad de una manera regular para los frmacos menos usuales.
Estudiemos la relacin que hay entre los atributos continuos y su influencia en la clase. Para ello
vamos a utilizar el grfico plot de la categora graph. Aadamos un nodo plot y lo enganchamos
con el node de entrada drug1n y comparemos el Na y el K. Para ello al editar el nodo plot
pondremos en el X field el campo Na, en el Y field el campo K y en el Overlay field la clase Drug. Lo
dems se deja por defecto, como se ve en la siguiente figura:

19
Figura 27. Editando un nodo Plot

El resultado al ejecutar el grfico es el siguiente:

Figura 28. Resultado de un Plot (Na x K x Drug)

En este grfico s que se ven algunas caractersticas muy significativas. Parece haber una clara
separacin lineal entre una relacin K/Na alta y una relacin K/Na baja. De hecho, para las
concentraciones K/Na bajas, el frmaco Y es el ms efectivo de una manera clara y parece mostrarse
que por encima de un cierto cociente K/Na ese medicamento deja de ser efectivo y se debe recurrir a
los otros cuatro.

20
Podemos utilizar este conocimiento que acabamos de extraer para mejorar nuestros modelos.
Hemos establecido que el medicamento a administrar depende en gran medida del cociente
entre K/Na. Por tanto, vamos a realizar un nuevo modelo que utilice este cociente. Para ello, vamos a
crear un nuevo atributo derivado (tambin llamados atributos pick & mix) mediante el nuevo nodo
Derive de la categora Field Ops, que engancharmos con el nodo drug1n.

Figura 29. Definiendo un atributo derivado

NOTA: El Clementine trabaja con el teclado americano. Las teclas


ms necesarias son las siguientes:
_: est en el ?
/, *, -, +: usa el teclado numrico
< > : estn en , y en .
& : est en el 7
| : est en el >
Ahora duplica (para duplicar un nodo, en el men contextual con el botn derecho pulsamos
Duplicate) los nodos Type y el nodo C5.0 Drug que tenamos de antes y engnchalos al stream que
sale del nodo Na_to_Ka. Cambia el nombre del nodo Drug (C5.0) a Drug2, para no liarte. Para ello
edita el nuevo nodo Drug y cambia el campo Output Name:

Figura 30. Cambiando el nombre del modelo a generar

Ahora ejecuta ese nodo y te generar un nuevo modelo Drug2. Adelo al rea de trabajo,
engnchalo con el nodo Copy of Type y aade un nodo de Analysis como hicimos con el primer
modelo. El grafo de streams resultante debe ser el de la siguiente figura:

21
Figura 31. Streams realizados para el problema del frmaco

Ahora, si examinamos el modelo Drug2 tenemos lo siguiente:

Figura 32. Segundo modelo que utiliza el atributo derivado Na_to_K

Modelo mucho ms simple y corto que el anterior, en el que se ve la importancia del atributo que
hemos creado Na_to_K.
Adems si analizamos su calidad con el nodo de anlisis, tenemos:

Figura 33. Calidad del segundo modelo que utilizar el atributo derivado Na_to_K

Tenemos con el nuevo modelo un 100% de precisin, con lo que el modelo es mucho ms fiable que
antes.
Ahora graba el stream en un fichero .str, p.ej. drug1.str, porque volveremos sobre este
problema.

22
3.3 Un Segundo Problema: Agrupacin de Empleados
La empresa de software para Internet Memolum Web quiere extraer tipologas de empleados, con el
objetivo de hacer una poltica de personal ms fundamentada y seleccionar a qu grupos incentivar.
Las variables que se recogen de las fichas de los 15 empleados de la empresa en 1999 son:
Sueldo: sueldo anual en euros.
Casado: si est casado o no.
Coche: si viene en coche a trabajar (o al menos si lo aparca en el parking de la empresa).
Hijos: si tiene hijos.
Alq/Prop: si vive en una casa alquilada o propia.
Sindic.: si pertenece al sindicato revolucionario de Internet
Bajas/Ao: media del n de bajas por ao
Antigedad: antigedad en la empresa
Sexo: H: hombre, M: mujer.
Los datos de los 15 empleados se encuentran en el directorio ..\LabKDD\empleados\empleados.txt).
Se intenta extraer grupos de entre estos quince empleados.

3.4 Resolucin del Problema de Agrupacin de Empleados


En primer lugar vamos a leer los datos de los empleados. Limpiamos la zona de trabajo (File Clear)
o (File Close). Los datos del fichero empleados tienen cabecera y estn tabulados, con lo que
aadiremos un nodo fuente Var. File y al editar, indicaremos el nombre y directorio del fichero y
marcaremos el checkbox para que obtenga el nombre de los atributos a partir de la primera lnea del
fichero y adems marcaremos el checkbox Tab:

Figura 34. Abriendo el fichero fuente empleados.txt

A continuacin aadimos un nodo Type y lo enganchamos. Todos los atributos deberan estar IN
exceptuando el nmero de ejemplo, que es irrelevante y pondremos NONE, como se muestra en la
siguiente figura:

23
Figura 35. Tipando los datos de los empleados

Ahora vamos a utilizar un algoritmo de clustering para obtener grupos sobre esta poblacin. En primer
lugar vamos a probar con tres grupos. Para ello aadimos un nodo Kmeans, lo enganchamos al nodo
Type y modificamos el campo Number of clusters a 3, como se ve en la siguiente figura:

Figura 36. Determinando el nmero de clusters

Ahora podemos ejecutar el stream, obteniendo un nodo diamante Kmeans. Lo podemos aadir y
enganchar al nodo Type, como se muestra en la siguiente figura:

24
Figura 37. Stream para el problema de los empleados

Si examinamos (Browse) el nodo diamante Kmeans vemos qu caractersticas tiene cada cluster:

cluster 1 cluster 2 cluster 3

5 examples 4 examples 6 examples


Sueldo : 226000 Sueldo : 225000 Sueldo : 188333
Casado : No -> 0.8 Casado : No -> 1.0 Casado : S -> 1.0
S -> 0.2 Coche : S -> 1.0 Coche : S -> 1.0
Coche : No -> 0.8 Hijos : 0 Hijos : 2
S -> 0.2 Alq/Prop : Alquiler -> 0.75 Alq/Prop : Alquiler -> 0.17
Hijos : 0 Prop -> 0.25 Prop -> 0.83
Alq/Prop : Alquiler -> 1.0 Sindic. : S -> 1.0 Sindic. : No -> 0.67
Sindic. : No -> 0.8 Bajas/Ao : 2 S -> 0.33
S -> 0.2 Antigedad : 8 Bajas/Ao : 5
Bajas/Ao : 8 Sexo : H -> 0.25 Antigedad : 8
Antigedad : 8 M -> 0.75 Sexo : H -> 0.83
Sexo : H -> 0.6 M -> 0.17

Si aadimos una tabla a la salida del nodo diamante Kmeans podemos observar qu ejemplos
exactamente han cado en qu clster.

25
Figura 38. Ejemplos agrupados por clusters.

Cmo interpretaras los tres grupos anteriores?


Vara el nmero de clusters (2, 4, 5, ...) y vuelve a ejecutar el stream para cada uno de estos
valores. qu se puede observar?
Ahora graba el stream en un fichero .str, p.ej. empleados.str, porque volvemos sobre este
problema a continaucn.

3.5 Un Tercer Problema: Agrupacin de Empleados con Datos Errneos y


Faltantes
La empresa de software para Internet Memolum Web ha aumentado vertiginosamente su plantilla en
los ltimos aos, debido principalmente a una absorcin de la compaa Intelligent Stones y quiere
ver si las tipologas de empleados existentes siguen valiendo. Las variables que se recogen de las
fichas de los 40 empleados actuales de la empresa son:
Sueldo: sueldo anual en euros.
Casado: si est casado o no.
Coche: si viene en coche a trabajar (o al menos si lo aparca en el parking de la empresa).
Hijos: si tiene hijos.
Alq/Prop: si vive en una casa alquilada o propia.
Sindic.: si pertenece al sindicato revolucionario de Internet
Bajas/Ao: media del n de bajas por ao
Antigedad: antigedad en la empresa
Sexo: H: hombre, M: mujer.
Estudios: Obl: obligatorios, Bac: bachillerato, FP: formacin profesional, Uni:
universitarios, Doc: doctorado/master
Los datos de los 40 empleados se encuentran en el directorio
..\LabKDD\empleados\empleados4.txt). El problema de estos datos es que, al haber crecido
vertiginosamente la compaa y debido a la conversin de datos en la fusin, pueden tener un
nmero significativo de datos faltantes o errneos. Se intenta extraer grupos de entre estos quince
empleados.

26
3.6 Resolucin del Problema de Agrupacin de Empleados con Datos
Imperfectos
(este ejercicio es largo as que cada cierto tiempo graba el stream en un fichero .str, p.ej.
empleados2.str).
En primer lugar vamos a leer los datos de los empleados. Limpiamos la zona de trabajo (File Clear)
o (File Close) y volvemos a conectar con el fichero empleados4.txt de manera similar al caso
anterior:

Figura 39. Leyendo del fichero de datos.

Si enganchamos un nodo Table a la salida de este nodo, podemos ver si los datos se leen
correctamente.

Figura 40. Mostrando los datos tabularmente.

Ya simplemente a primera vista vemos datos faltantes. Podemos analizar cuntos y para cuntos
atributos, de una manera automtica, con el nodo Quality. Si aadimos uno y lo conectamos con la
fuente de datos tenemos:

27
Figura 41. Porcentaje de datos faltantes por campo.

Vemos que faltan valores en el campo Alq/Prop y en el campo Estudios.


Ahora vamos a realizar ciertas grficas para detectar datos anmalos. Nos interesa ver los datos
numricos, ya que en estos casos es ms fcil detectar outliers. Para ello podemos aadir ciertos
nodos Plot para comparar diferentes valores. Por ejemplo, podemos querer visualizar la antigedad
respecto al sueldo y adems mostrando los estudios. Aadimos un nodo Plot y lo enganchamos con
la fuente de datos (ver Figura 46). Si lo editamos podemos especificar que el campo X ser Sueldo,
el campo Y ser Antigedad y el campo de overlay ser Estudios:

Figura 42. Configurando un nodo Plot.

Si lo ejecutamos tendremos la siguiente grfica:

28
Figura 43. Grfica Plot: Antigedad x Sueldo [Estudios].

Parece destacar un dato cerca de los 400000 de sueldo que parece ser un dato anmalo, dadas las
caractersticas de la empresa.
De modo similar podemos aadir y conectar otro nodo Plot para intentar relacionar el n de Hijos
con las Bajas mostrando el Sexo como overlay. El resultado es el siguiente.

Figura 44. Grfica Plot: Hijos x Bajas/Ao [Sexo].

Tambin destaca claramente el hecho de que existe un registro con el n de hijos negativo, lo cual es
claramente un dato errneo.
Podemos aadir ms Plots, por ejemplo, uno que combine Antigedad x Sueldo y de overlay
tenga el campo Casado

29
Figura 45. Grfica Plot: Antigedad x Sueldo [Casado].

Que, de momento, no nos aporta demasiada informacin, aparte que la antigedad parece estar
relacionada con estar casado. Elige una interpretacin para esta relacin:
a) Los jvenes van saltando de una empresa a otra, con lo que no obtienen antigedad.
b) La edad y el estado civil estn relacionados en el total de la poblacin por lo que esto no es
ms que una muestra de ello, ya que para estar ms de 10 aos en la empresa hay que tener
por lo menos 30 aos.
c) Casarse envejece.
d) Todas las anteriores.
El stream que llevamos hasta el momento es el que se muestra en la siguiente figura:

Figura 46. Stream de los empleados con datos imperfectos.

Siguiendo con nuestro problema, hemos identificado dos campos con valores faltantes y dos registros
anmalos. Ya que tenemos 40 empleados, lo ms conveniente en este caso es eliminar los dos
registros anmalos, pues los resultados con 38 empleados van a ser similares que con 40 (adems
ms fiables al haber eliminado registros dudosos).
Para eliminarlos, ejecutamos el nodo Table y pinchamos sobre los datos anmalos: en este caso
el sueldo del registro 16 y los hijos del registro 18, como se muestra en la siguiente figura.

30
Figura 47. Marcando los datos anmalos.

Pulsando en el men Generate, pulsamos la opcin Select Node (or):

Figura 48. Generando un nodo para eliminar estos registros anmalos.

Nos ha generado un nodo select con el nombre Generated. Enganchamos el nodo fuente con l y lo
editamos, para comprobar que las condiciones se han generado bien y para modificar el modo a
Discard (porque son los que queremos eliminar), como se muestra en la siguiente figura:

Figura 49. Modificando el nodo select para eliminar estos registros anmalos.

Podemos aadir un nodo Table y engancharlo con el nodo generated para comprobar que
realmente elimina esos dos registros, resultando en 38 registros de datos.
Una vez resuelto el tema de los datos anmalos vamos a ocuparnos de los datos faltantes. En
primer lugar vamos a abordar el campo Estudios. Segn se tiene conocimiento de la manera de
adquirir este dato (en el momento de contratacin en la empresa) es muy posible que la ausencia de
valor en este campo pueda significar que el contratado no tena estudios aparte de los elementales,
dejando en blanco este campo. Por tanto, vamos a suponer que aquellos registros sin estudios van a
ser realmente Estudios obligatorios. Para arreglarlo, y siguiendo este criterio, vamos a aadir un
nodo Filler. No obstante, previamente debemos aadir un nodo Type y conectarlo al nodo
generated (ver Figura 53).
Editamos el nodo Type y pinchamos en la columna Blanks del campo Estudios, y luego con el
botn derecho le damos a Edit, como se muestra en la siguiente figura:

31
Figura 50. Tipando los atributos blancos del campo Estudios.

Ahora pinchamos en el checkbox White Space, para que nos reconozca los valores en blanco, como
se muestra en la siguiente figura:

Figura 51. Tipando los atributos blancos del campo Estudios.

Ahora s que aadimos un nodo Filler y lo enganchamos con el nodo Type. Editamos el nodo
Filler como se muestra en la siguiente figura:

Figura 52. Modificando el nodo filler para rellenar blancos con valores.

32
Aadimos un nodo Table y tenemos el stream de la siguiente figura:

Figura 53. Estado del Stream.

Si ejecutamos el ltimo nodo Table podemos ver que ya no hay datos faltantes en la columna
Estudios y que los faltantes se han rellenado con Obl.

Figura 54. Datos con el campo Estudios rellenado.

Ahora ya slo nos queda abordar los blancos en Alq/Prop. Al haber tres casos con nulo en este
atributo, no parece aconsejable eliminar tres registros, ya que su informacin puede ser valiosa. La
idea es intentar rellenarlos con algn valor relativamente razonable. Una idea sera ver qu valor es
ms frecuente y rellenar con ese valor, pero en este caso prcticamente los dos valores tienen una
frecuencia similar. Otra opcin sera predecir ese valor faltante. Eso es lo que vamos a hacer.
Para ello vamos a crear un clasificador para obtener este valor. En primer lugar, vamos a eliminar
(momentneamente) los tres valores blancos. Para ello, ejecutamos el ltimo nodo table y
seleccionamos uno de los campos que estn en blanco. Pulsamos en el men Generate:

Figura 55. Generando un nodo para eliminar registros en blanco.

Nos ha generado un nodo Generated que enganchamos al nodo filler. Editamos el nodo
Generated para que excluya estos registros nulos:

33
Figura 56. Configurando el nodo para eliminar registros en blanco.

Ahora aadimos un nodo Type a este nodo generated y vamos a sealar el campo Alq/Prop
como campo de salida (OUT):

Figura 57. Tipando los datos para aprender un clasificador para el campo Alq/Prop.

Ahora aadimos un nodo de clasificacin, por ejemplo, un Build Rule y lo enganchamos al nodo
Type como se muestra en la siguiente figura:

Figura 58. Estado del Stream.

34
Ahora ejecutamos el stream y obtenemos un modelo en el rea de trabajo derecha del Clementine. Si
hacemos Browse en el nodo diamante Alq/Prop podemos ver cules son las reglas:

Figura 59. Modelo generado.

Aadimos el modelo a la zona de trabajo de la izquierda y lo enganchamos con el nodo Type de


abajo, donde aadimos un nodo analysis", como se muestra en la siguiente figura:

Figura 60. Estado del Stream.

Podemos evaluar la calidad del modelo ejecutando el nodo analysis":

35
Figura 61. Anlisis del modelo.

Este modelo es lo suficientemente aceptable para substituirnos los valores blancos que tenamos en
ese campo. Para ello, volvemos a copiar el modelo en la zona de trabajo de la izquierda y lo
enganchamos a travs de un nuevo nodo Type con el filler y aadimos un nodo Table:

Figura 62. Estado del Stream.

Si ejecutamos la tabla, vemos que el modelo genera valores para Alq/Prop en un nuevo campo R-
Alq/Prop:

Figura 63. Campos Generados.

36
Por ltimo, el campo Estudios sera interesante que fuera numrico en vez de simblico. Es decir,
que fuera una escala. Para ello aadimos un nodo Derive. Lo conectamos al nodo diamante
Alq/Prop de arriba y lo editamos, poniendo como nombre Vestudios y de tipo Set, como se
muestra en la figura:

Figura 64. Configurando un nodo Derive.

Ponemos el primer valor current 1 con la condicin (Estudios == Obl) y le damos al botn Add. As
lo vamos haciendo con todos los valores siguientes, como se muestra en la siguiente tabla:

CURRENT CONDITION

1 Estudios == Obl

2 Estudios == FP

3 Estudios == Bac

4 Estudios == Uni

5 Estudios == Doc

Resultando lo que se muestra en la siguiente figura:

37
Figura 65. Configurando un nodo Derive.

Podemos observar el resultado aadiendo un nodo Table:

Figura 66. Mostrando el campo derivado.

Por ltimo, ya slo nos falta quedarnos con las columnas vlidas. En este caso, se trata de quedarnos
con la columna Vestudios y no la vieja Estudios y en el caso de Alq/Prop con la derivada y no con la
original, que tiene blancos. Para eso simplemente aadimos un nodo Filter que enganchamos con el
nodo VEstudios" y lo editamos de la siguiente manera:

38
Figura 67. Filtrando los campos que ya no vamos a usar.

Por fin tenemos los datos preparados para trabajar con el stream que se muestra en la siguiente
figura:

Figura 68. Stream tras el proceso de limpieza de datos.

Ahora ya podemos examinar mejor los datos y realizar mltiples grficas y tablas para analizar los
datos, p.ej. los plots que ya vimos, nuevos histogramas, tablas Matriz, etc., como se muestra en la
siguiente figura:

39
Figura 69. Analizando los datos mediante grficas (slo se muestra a partir del nodo Filter).

Por ejemplo, ahora la grfica entre antigedad y sueldo se ve mejor sin el dato anmalo de Sueldo.
Tambin se ven mucho mejor todas las grfica que tienen en cuenta la edad.
Ahora vamos a aadir un nodo Type que lo enganchamos a continuacin de filter y ponemos la
direccin de todos los campos a IN menos el campo #Ej que ponemos NONE.
Adems, para pode utilizar bien los datos, vamos a cambiar el tipo de VEstudios, que lo habamos
generado como Set y vamos a cambiarlo a Integer Value utilizando un nodo Type adicional, como se
muestra en la siguiente figura:

Figura 70. Tipando los datos.

Como al VEstudios le hemos puesto el tipo manualmente, debemos indicar el rango:

Figura 71. Estableciendo el rango manualmente del campo VEstudios.

Ahora podramos, por ejemplo, aadir un nodo Plot entre el Sueldo y los Estudios, cosa que no
podamos hacer antes porque Estudios no era numrico. El resultado sera el siguiente:

40
Figura 72. Relacin entre Sueldo y Estudios.

Lo que muestra una correspondencia claramente lineal.


Ahora retomemos la grfica entre antigedad y sueldo, que ahora se ve mejor sin el dato anmalo
de Sueldo. Si la ejecutamos y observamos, con un poco de atencin se ven dos zonas
diferenciadas, una de bajo sueldo y antigedad, donde resulta que la mayora no estn casados, y
una zona de alto sueldo y antigedad, donde resulta que la mayora estn casados. Con el ratn
seleccionamos ambas regiones y con el botn derecho le podemos dar nombre. Una vez ya hayamos
seleccionado estas dos zonas con el ratn podemos ir al men Generate y pulsar Derive Node
(Set), como se muestra en la siguiente figura:

Figura 73. Generando atributos derivados utilizando regiones espaciales marcadas con el ratn.

Podemos ver que se nos genera un nuevo nodo region. Si lo conectamos con el ltimo nodo Type y
le aadimos un nodo Table podemos ver el siguiente resultado:

41
Figura 74. Se ha generado un nuevo campo segn la region.

La regin7 es la de bajo sueldo y antigedad mientras que la regin8 es la de alto sueldo y


antigedad.
Ahora lo que vamos a hacer es realizar un agrupamiento en tres clusters utilizando este nuevo
campo y sin utilizarlo, comparando los resultados. El stream que hay que hacer es el que se muestra
en la siguiente figura:

Figura 75. Stream definitivo.

Compara los clusters que salen por cada uno de las dos vas (sin las regiones o con ellas) y comenta
si los resultados son razonables.
Ahora graba el stream en un fichero .str, p.ej. empleados2.str,
Por ltimo, si te quedan ganas, intenta hacer un agrupamiento de tres clusters a partir de los datos
iniciales, sin la limpieza realizada y compara los resultados.

3.7 Obtencin y Transformacin de Datos Relacionales (ODBC)


Aunque en la mayora de ejemplos vamos a trabajar por comodidad a partir de datos que estn en
ficheros, en la mayora de aplicaciones reales los datos originales se encuentran en una base de
datos. Clementine permite enlazar a travs de ODBC con cualquier motor de un Sistema de Gestin
de Bases de Datos (SGBD).

42
Pasemos a trabajar con una base de datos clsica, el ejemplo Neptuno en MsAccess que versa
sobre una compaa de pedidos. La base de datos se encuentra en el directorio ..\LabKDD\Neptuno.
Si abres la base de datos Neptuno.mdb, la estructura de la base de datos es la siguiente:

Figura 76. Base de Datos Neptuno

Sin entrar en ms detalles en el esquema, el problema que vamos a tratar en este caso es el de
predecir el volumen de pedidos para el prximo cuatrimestre.
Para ello, se ha realizado una consulta especfica para esta cuestin que obtiene el total de los
cargos de los pedidos por cuatrimestre. Dicha consulta (en realidad es una vista) se llama
_VentasPorCuatrimestre:

Figura 77. Vistas de la Base de Datos

Si la ejecutamos, tenemos el siguiente resultado:

43
Figura 78. Ventas por Cuatrimestre

Nos interesa realizar una estimacin para los cuatrimestres 1996C y 1996D. Para ello, vamos a
utilizar el Clementine.
Antes debemos crear una fuente ODBC en el sistema. Para ello (en Windows) vamos al Panel de
3
Control y elegimos Fuentes de Datos ODBC (en los laboratorios es posible que no est el panel de
control disponible. Entonces busca y lnzalo desde Inicio Oracle Oracle para Windows 95
Ms ODBC Administrator):

Figura 79. Panel de Control

Pinchamos y, en la pestaa DSN de Usuario agregamos un origen Base de Datos de Ms Access:

3
En Windows 2000 est en Panel de Control Herramientas Administrativas Orgenes de datos (ODBC).

44
Figura 80. Panel de Control

En la siguiente pantalla Crear nuevo origen de datos, elige Controlador para Microsoft Access
(*.mdb) y pincha Finalizar. En la siguiente pantalla pincha en Seleccionar y selecciona el fichero
..\LabKDD\Neptuno\Neptuno.mdb. Le daremos el nombre del origen de datos Fuente_Neptuno y la
descripcin que quieras.

Figura 81. Panel de Control

Ahora volvemos al Clementine. Limpiamos el rea de trabajo y aadimos un nodo ODBC de la


categora SOURCE. Si lo editamos, y apretamos el botn Connect aparece otra pantalla donde
podemos seleccionar la fuente Fuente_Neptuno y pulsa Connect (no hace falta ni username ni
password):

Figura 82. Conectando el nodo ODBC con la Fuente ODBC

Ahora te permite seleccionar una tabla o realizar una consulta. Pulsa Select Table/View y selecciona
_VentasPorCuatrimestre. Te debe aparecer lo que se muestra en la siguiente figura:

45
Figura 83. Conectando el nodo ODBC con la Fuente ODBC

Dale a OK. Ahora aade un nodo Table al rea de trabajo y conctalo con la fuente de datos.
Ejecuta el STREAM. El resultado ser el que se ve en la siguiente figura:

Figura 84. Datos conectados a travs de ODBC

Ahora, en primer lugar debemos descartar los valores nulos, ya que no nos van a servir para predecir.
Esto se puede hacer con un nodo Type. Si lo enganchamos al nodo Fuente_Neptuno, podemos
indicar lo siguiente:

Figura 85. Tipando e indicando entrada y salida

Con la opcin DISCARD descartamos aquellos que no sean del tipo especificado, en este caso
reales. Adems hemos eliminado ANYO (direccin = NONE) porque utilizaremos ORD como valor
numrico para los aos.

46
En segundo lugar, parece observarse que los datos del trimestre 1996B pueden no estar
acabados y los datos del trimestre 1994C pueden ser incompletos. Lo mejor es ignorarlos. Para ello,
necesitamos aadir nodos select para quitarlos. Existe una manera muy cmoda de hacerlo. Sobre
los propios datos de la tabla que genera el nodo tabla cuando se ejecuta sealamos aquellas filas que
no nos interesan, como se ve en la siguiente figura:

Figura 86. Generando una condicin automticamente

Seleccionamos el men Generate Select Node (Records). Automticamente nos genera un


nodo Select. Lo conectamos al nodo Type. Si editamos el nodo Generate vemos que nos
aparecen justamente las condiciones para incluir esas dos filas. Modificamos el nodo Select de tal
manera que nos excluya los cuatrimestres que no queremos, quedando de la siguiente manera:

Figura 87. Modificando una condicin

Si conectamos un nuevo nodo Table a la salida del nodo Select y ste al nodo Type podremos
ver que ya slo tenemos los datos que nos interesan:

Figura 88. Resultado del filtro

47
Ahora es el momento de obtener un modelo. En primer lugar vamos a aadir un nodo Plot para ver
la curva de crecimiento. Lo conectamos al nodo Select (que se llama Generated). Editamos el
Nodo Plot y en X field ponemos ORD, en Y field TOTAL, y en Overlay Field nada.

Figura 89. Editando un Plot

El resultado del Plot se ve en la siguiente figura:

Figura 90. Resultado un Plot

Vemos que se aproxima bastante a la linealidad. Por ello, vamos a aplicar un nodo Regression de la
categora Modelling y lo conectamos al nodo Generated.
Ya podemos darle al botn verde de Execute. Nos aparece un nuevo modelo en la zona derecha
del Clementine. Pinchamos dos veces sobre el diamante y nos aparece en la zona de trabajo.
Tendremos una situacin como la que sigue:

48
Figura 91. Stream Resultante

Por ltimo, el modelo resultante se puede ver si se selecciona Browse en el nodo diamante:

Figura 92. Modelo Resultante (Ecuacin lineal)

Para evaluarlo vamos a utilizar el nodo diamante y lo enganchamos a la fuente a travs de un nodo
type, igual que el anterior. A continuacin del nodo diamante TOTAL aadimos un nodo multiplot,
como se muestra en la siguiente figura:

Figura 93. Evaluando el modelo grficamente

En el multiplot vamos a poner como variable X ORD y como variables Y vamos a poner TOTAL que
es el valor real y $E-TOTAL que es el valor generado.

49
Figura 94. Editando el multiplot

Si lo ejecutamos tenemos el siguiente resultado:

Figura 95. Comparando la curva real con el valor predicho

Donde podemos ver que el modelo se ajusta bastante bien a la curva real.
Ahora si queremos aplicarlo para cualquier valor, utilizamos un nodo User Input. Para ello cogemos
otro nodo diamante y lo enganchamos con el nodo generated. Pinchamos con el botn derecho en
el nodo diamante y all pinchamos en la opcin User Input Mode, como se ve en la siguiente figura:

50
Figura 96. Creando un nodo User Input Node

Nos ha aparecido un nuevo nodo User Input. Editamos el nodo User Input e insertamos los valores
que queremos predecir (trimestres 11 y 12) y le damos a OK. Por ejemplo, lo que aparece en la
siguiente figura (el 10 tambin lo ponemos para comparar con lo que tenamos):

Figura 97. Entrada de datos manual

Ahora desconectamos el nodo diamante Total del nodo generated (Recuerda, pinchando en el
enlace con el botn derecho: Destroy Connection). Conectamos el nodo User Input con el nodo
diamante Total y ste a su vez con un nuevo nodo Table. Ejecutamos el nodo Table y vemos lo que
tenemos en la figura siguiente:

Figura 98. Utilizando el modelo para predecir los datos

Como vemos, predecimos un valor de 13440,6 para el trimestre 10 (1996B), que supusimos no
terminado (y que es ligeramente superior al existente, 12495, lo que parece lgico), y unas
predicciones de 14945,3 para el trimestre 11 (1996C) y una prediccin de 16449.9 para el trimestre
12.
Ahora podemos grabar el stream.

51

You might also like