Professional Documents
Culture Documents
Introduccin al Clementine
Curso de
Almacenes de Datos y Minera de Datos
en colaboracin con
Universidad de El Salvador
2
En esta primera prctica se van descubriendo paso a paso las posibilidades del 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:
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:
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.
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)
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).
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.
File (Archivo) Permite exportar a fichero, tambin permite exportar a ficheros cachs.
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.
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:
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
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:
Adems seleccionaremos Get field names from file para que nos coja el nombre de los atributos del
propio fichero:
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.
10
(si el ratn tiene botn del medio, tambin se puede utilizar este botn)
El resultado es el siguiente:
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:
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.
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.
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:
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:
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.
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:
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.
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:
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:
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
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.
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
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.
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:
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:
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.
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:
Si enganchamos un nodo Table a la salida de este nodo, podemos ver si los datos se leen
correctamente.
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.
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.
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:
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.
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:
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:
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.
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:
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:
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:
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:
Si ejecutamos la tabla, vemos que el modelo genera valores para Alq/Prop en un nuevo campo R-
Alq/Prop:
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:
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
37
Figura 65. Configurando un nodo Derive.
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:
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:
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.
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.
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.
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:
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:
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):
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.
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:
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:
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:
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:
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.
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:
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:
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
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):
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:
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