Quantcast
Channel: data mining
Viewing all 29 articles
Browse latest View live

Analisis predictivo en SAS: árboles de decisión

$
0
0

Una de las técnicas más utilizadas dentro del análisis predictivo son los árboles de decisión. Esta técnica tiene múltiples aplicaciones en el campo de la estadística, pero nos vamos a centrar en su uso para realizar predicciones, concretamente obtener probabilidades de eventos. En este post revisamos una posible forma de hacerlo con el software de uno de los principales fabricantes del software de business analytics: SAS (www.sas.com) 

Arboles de decision con SAS
  
Existen diferentes formas de implementar árboles de decisión en SAS. En base a los módulos SAS existentes actualmente en el mercado, tenemos las siguientes opciones:
  • Proceso predictivo guiado en SAS/Visual Analytics
  • Construir modelo de forma guiada en SAS/Enterprise Miner
  • Realizarlo con el módulo SAS/IML (macro treedisc)
  • Realizarlo con el módulo SAS/OR (proc dtree)
  • Realizarlo en código BASE con procedimientos SAS/STAT (Entorno Enterprise Guide)

 
En caso de hacerlo en Miner el modelo generado en Miner podría ser posteriormente ejecutado en Enterprise Guide utilizando la tarea de Data Mining -> Model Scoring.

 
En este post vamos a realizar el árbol de decisión en SAS/BASE que es un módulo más extendido y que requiere menor inversión económica. Hacerlo en SAS/EM (proc arboretum) o SAS/VA supondría un proceso guiado, en principio más sencillo.
 
Para realizar el árbol de decisión vamos a emplear el procedimiento proc hpsplit (disponible en SAS/STAT 12.3 en SAS 9.4), es un procedimiento de la familia hp (high performance) orientados a alto rendimiento y que pueden ser ejecutados en una única máquina o en múltiples nodos. En este caso hpsplit nos va a permitir crear y ejecutar un arbol de decisión.
 
El ejemplo sobre el que vamos a trabajar es un caso de analítica predictiva aplicada a las campañas de marketing. Nuestra situación de partida es un dataset que contiene el target de clientes sobre el que pensamos ejecutar una campaña de marketing por el  canal que corresponda (e-mail, correos postal, llamada, SMS, etc..). Este target es un filtro determinado del total de nuestra cartera de clientes en base al producto o servicio objeto de la campaña. Con objeto de ajustar los costes de la campaña nos interesa obtener la probabilidad de respuesta a la campaña y aquí es donde entra la analítica predictiva. Los clientes cuya probabilidad de respuesta fuera muy baja serían eliminados del target, para no caer en costos que van a producir muy bajo retorno. Contamos con un fichero histórico de datos de campañas ejecutadas. En este histórico tenemos un campo que nos indica si hubo o no respuesta a la campaña (1 o 0) y una seríe de variables que caracterizan el cliente sobre el que se realizó la campaña.

res: respuesta a la campaña (1: redención, 0: sin redención)
id_cliente: código de cliente
edad: edad del cliente
compras_3m: número de compras realizadas en los últimos 3 meses
compras_12m: número de compras realizadas en los últimos 12 meses
tipo_cliente: Tipo cliente por canal principal de compra (W: web, T: tienda)

Para obtener el modelo dividimos la tabla que contiene el histórico de campañas (100k) en dos tablas una para entrenar el modelo (test) y otra para validarlo (validar).
data test validar;
set campañas_hist;
if _N_ < 70000 then output test; else output validar;
run;

Aplicamos el procedimiento hpsplit, la variable a predecir es res (respuesta a la campaña) y las variables predictoras son: tipo_cliente edad compras_3m compras_12m
proc hpsplit data=test maxdepth=4 maxbranch=2 nodestats=arbol; /* nodestats guarda el arbol */
  target res_campaña; /* variable a predecir */
  input tipo_cliente edad compras_3m compras_12m; /* variables en base a las q predecimos */
  code file="%sysfunc(pathname(work))/model_dtree.sas"; /* guarda el modelo construido */
  rules file="/home/juanvg1972/ficheros/rules_dtree.txt"; /* reglas aplicadas */
  output importance=imporvar;  /* importancia de cada variable */
run;

En la tabla arbol guardamos el arbol de decisión obtenida: 

  

Podemos ver la importancia de cada variable que hemos guardado en la tabla imporvar
proc print data=imporvar (keep = itype tipo_cliente edad compras_3m compras_12m);
run;

 
Para visualizar gráficamente el arbol creado, empleamos el procedimiento netdraw que nos permite obtener una representación rápida, pero visualmente no es el más óptimo. Hay otras opciones para visualizar el arbol:

- Calcular el layout del arbol y pintarlo con proc sgplot
- Pintar la salida del fichero plaño rules_dtree.txt con una herramieta tipo GraphViz
- Generar arbol interactivo en SAS/GRAPH (ds2tree macro)

 

data arbol_or;
length parent_or id_or $2.  desc_node $20.;
set arbol;
if parent = . then parent_or = 'OR'; else parent_or = parent;
id_or = id;
desc_node = strip(splitvar||'-'||decision); /* construimos el campo descriptivo que queremos visualizar */
run;


proc netdraw graphics data=arbol_or;
       actnet / act=parent_or
                succ=id_or
                id=(desc_node)
                nodefid
                nolabel
                pcompress
                centerid
                tree
                arrowhead=0
                xbetween=3
                ybetween=2
                rectilinear
                carcs=black
                ctext=white
                htext=1;
run;

Una vez visualizado el arbol, lo aplicamos a la tabla validar para evaluar su capacidad predictiva.

data validar_res;
  set validar;
  %include "%sysfunc(pathname(work))/model_dtree.sas";
run;

En los campos P_res_campaña1 (prob res = 1) y P_res_campaña0 (prob res = 0)  obtenemos la probabilidad de respuesta a la campaña.

 
Para validar el nivel de  acierto del modelo podemos hacer una validación cruzada:
data validar_res1;
set validar_res;
if P_res_campaña1 >= 0.5 then res_campaña_p = 1;else  res_campaña_p = 0;
run;


proc sql;
create table tabla_valid as
(select res_campaña, res_campaña_p, count(*) as conteo
from validar_res1
group by res_campaña, res_campaña_p);
quit; 

 
El modelo definitivo una vez realizados los pasos e iteraciones necesarias para la depuración del modelo se aplica sobre el target de clientes de la campaña actual.

Este ajuste que hacemos sobre el target, permite rediseñar el target optimizando la probablidad de respuesta. Posteriormente a la ejecución de la campaña se realiza una comparación de probabilidad con la realidad

 
  
Por último, indicar que la forma de medir la mejora que sobre un target produce su redefinición mediante analítica predectiva es la obtención de la curva Lift (elevación) ,que mide la cantidad de veces en que la aplicación del Modelo Predictivo mejora el resultado que hubiéramos obtenido aplicando el target inicial.
 
Más info acerca de analítica de datos con SAS:
 
 

 


Listado de Software de Data Mining propietario

$
0
0

Listado de software y herramientas de Data Mining, de proveedores de software propietario, es decir, software de pago.

Iremos ampliando información sobre cada herramienta de minería de datos, y también sobre otro software de data mining comercial que vayamos conociendo, o que vayáis sugiriendo en los comentarios.

  • RapidMiner
  • SAS Enterprise Miner
  • IBM DB2 Intelligent Miner
  • IBM SPSS Modeler
  • Oracle Data Mining
  • FICO Data Management Integration Platform
  • Teradata Warehouse Miner
  • STATISTICA Data Miner
  • Microsoft Analysis Services
  • Portrait Software
  • TIBCO Spotfire Miner
  • GhostMiner
  • KNIME 
  • Advanced Miner
  • KXEN Modeler
  • QIWare
  • LIONsolver
  • Neural Designer
  • Angoss Knowledge STUDIO
  • Think Analytics
  • Alteryx Designer and Rapid Insight Veera
  • XLMiner- Frontline Systems
  • Salford Systems
  • Megaputer's PolyAnalyst
  • Viscovery 
  • ..

 

 

Listado de Software de Data Mining gratuíto, open source o freeware

$
0
0

Listado de software y herramientas de Data Mining, de proveedores de software gratuíto, ya sea software libre (open source), freeware o versiones gratuítas de herramientas de datamining.
Iremos ampliando información sobre cada herramienta de minería de datos, y también sobre otro software de data mining de libre utilización que vayamos conociendo, o que vayáis sugiriendo en los comentarios.

  • Weka 
  • RapidMiner 
  • Orange 
  • Mlpy (Python)
  • Pandas (Python)
  • PyBrain (Python)
  • Scikit-learn
  • Gnome-datamine-tools
  • Alteryx Project Edition
  • Chemicalize.org
  • ML-Flex
  • Apache Mahout
  • MiningMart
  • Rattle GUI
  • Natural Language Toolkit
  • KNIME 
  • CMSR Data Miner
  • Lattice Miner
  • Shogun 
  • ADaM. Algorithm Development and Mining System
  • ADaMSoft
  • SenticNet API
  • SCaViS 
  • Vowpal Wabbit
  • GNU Octave
  • MALLET
  • OpenNN
  • Databionic ESOM Tools
  • Jubatus 
  • DataMelt
  • Fityk
  • Dlib 
  • LIBLINEAR y LIBSVM
  • ROSETTA
  • KEEL 
  • UIMA 
  • ELKI 
  • GraphLab
  • MDP. Modular toolkit for Data Processing
  • ..

 

 

Análisis exploratorio en R

$
0
0

Dentro de las actividades de análisis de datos, está el análisis exploratorio de los datos fuente. Datos fuente que se utilizarán en diferentes tipos de procesos: integración de datos, reporting, modelos predictivos, etc..

Dicho análisis se basa en gráficos y estadísticos que permiten explorar la distribución identificando características tales como: frecuencias, valores atípicos o outliers, saltos o discontinuidades, concentraciones de valores, disperión, forma de la distribución, correlaciones, etc...

Es un paso básico y necesario en lo que llamamos data science y en general muchas actividades relacionadas con el análisis y tratamiento avanzado de datos.

 

Análisis exploratorio con R

 

El lenguaje estadístico R https://www.r-project.org/ dispone de una gran cantidad de funciones y utilidades que facilitan este trabajo.  A continuación listamos algunas de las más importantes y útiles con ejemplos. Los pasos del ejemplo se basan en un dataset creado en el paso inicial, lo cual facilita su reproducción.

 

# Análisis exploratorio

# dataset de ejemplo: dataf

 

producto <- sample(c("P1","P2","P3","P4","P5","P6"), 1000, replace=TRUE, 

               prob=c(0.2,0.3,0.2,0.1,0.1,0.1))

 

centro <- character()

 

for (i in 1:1000){

  centro[i] <- paste("C", sample(1:50,1), sep="")

}

 

ventas <- round(rnorm(1000, mean=20, sd=5), digits=2)

 

fecha <- rep(as.Date("2015/1/1"),1000)

for (i in 1:1000){

  fecha[i] <- fecha[i] + sample(1:200,1)

}

 

 

dataf <- data.frame(producto=producto,centro=centro,

                    fecha=fecha, ventas=ventas)

 

# resumen del tipo de datos

str(dataf)

 

# primeros 10 regs

muestra1 <- head(dataf,10)

 

# ultimos 10 regs

muestra2 <- tail(dataf,10)

 

# Obtener una muestra de 20 regs

muestra3 <- dataf[sample(1:nrow(dataf),20),]

 

# Obtener valores únicos

unique(dataf$producto)

 

# tablas de frecuencia

 

table(dataf$producto)

pie(table(dataf$producto)) # gráfico de tarta

table(dataf$centro)

 

# Divide en tramos un valor numérico y hace un conteo

table(cut(dataf$venta, breaks=5))

 

# Valores medios

mean(dataf$ventas)

 

# Desviación estandar

sd(dataf$ventas)

 

# percentiles

 

quantile(dataf$ventas, 0.95) # valor por debajo del cual están el 95% de los valores

 

quantile(dataf$ventas, 0.50) # valor por debajo del cual están el 50% de los valores

 

quantile(dataf$ventas, 0.25) # valor por debajo del cual están el 25% de los valores

 

quantile(dataf$ventas, 0.05) # valor por debajo del cual están el 5% de los valores

 

# resumen de una columna (perfilado):

summary(dataf$ventas)

 

# Rango de valores

range(dataf$ventas)

 

# Varianza

var(dataf$ventas)

 

# Rango intercuartilico

IQR(dataf$ventas) # distancia entre cuartiles 25 y 75

quantile(dataf$ventas, 0.25)

quantile(dataf$ventas, 0.75)

 

 

# Histrograma

hist(dataf$ventas)

 

# Boxplot

boxplot(dataf$ventas)

 

dataf1 <- dataf

 

#Detección Valores nulos

 

nulos <- which(is.na(dataf1)==TRUE)  

 

# Ejemplos de correlación en base a dos columnas nuevas creadas en el dataset: ventas2 y ventas3

 

dataf$ventas2 <- round(rnorm(1000, mean=15, sd=3), digits=2)

 

cor(dataf$ventas, dataf$ventas2)

 

dataf$ventas3 <- dataf$ventas + runif(1000,0,10)

 

cor(dataf$ventas, dataf$ventas3)

 

R dispone de paquetes y librerías específicas para realizar este trabajo donde se pueden encontrar más funciones y utilidades ( http://sasybi.blogspot.com.es/2014/07/formacion-medida-en-r.html), pero las aquí señaladas son la base y de uso común en estos procesos.

 

Conectando SAS y R

$
0
0

En los procesos de tratamiento de datos de los proyectos de Data Science es habitual encontrarse con la necesidad de conectar dos herramientas. Por ejemplo, podemos encontrarnos el caso de realizar la obtención y la preparación del dato en SAS y su modelización y análisis en R. Es una opción útil sobre todo si trabajamos con altos volúmenes de datos para los que R puede tener alguna limitación al trabajar en memoria. Haciendo el tratamiento previo en SAS podemos dejar la información depurada y agregada para R.

 

Nos encontramos encontramos entonces con la necesidad de conectar SAS y R. Para lo cual existen diferentes opciones:

 

proc iml; submit / R; /* código R */ endsubmit; quit;

Seguramente existan muchas más. Yo adjunto un sencillo ejemplo, haciendo uso de la función call system de SAS que permite hacer llamadas al sistema para arrancar un script de R desde el directorio raíz donde se encuentra R en nuestra instalación. Para arrancar el script se hace uso de la utilidad Rscript propia de R.

data _null_;
call system("cd C:\Program Files\R\R-3.1.2\bin");
call system("Rscript C:\temp\R\scripts\ej_exportar_fichero6.R");
run;

 

En lugar de un call system, podemos utilizar cualquiera de las otras formas de llamar al sistema desde SAS:

x "comandos a ejecutar";
%sysexec comandos a ejecutar;

 

Se han enumerado algunas de las opciones para comunicar de forma eficiente SAS y R, la formación de calidad y la experiencia nos harán encontrar otras opciones, como por ejemplo la que tenemos en la web de analisisydecision.es Modelo en R, gestión de datos en SAS

 

 

 

 

Data science: caso aplicado a sector retail (análisis cesta de a compra)

$
0
0

Existen múltiples aplicaciones de business analytics para el sector retail. Desde diferentes perspectivas los sistemas de business intelligence ayudan cuestiones críticas para el negocio, como pueden ser:

  • Basket market analysisAnalizar clientes (segmentación, captación, retención, fidelización)
  • Optimizar precios (elasticidad, pricing)
  • Procesos de previsión de la demanda y previsión de ventas
  • Análisis de las redes de distribución, transporte y almacenamiento
  • Control geográfico de redes comerciales de gran capilaridad
  • Seguimiento transacciones de venta (análisis productos y cesta de la compra)

En este post vamos a centrarnos en los procesos de análisis de cesta de la compra, realizando un rápido ejemplo.

 

Los procesos de análisis de la cesta de compras permiten encontrar asociaciones en los datos. Estas reglas de asociación pueden indicar cuestiones tales como cuáles son los artículos que se suelen comprar al mismo tiempo, en qué medida la compra de un artículo provoca la compra de un segundo, etc..

 

Esta información es útil para implementar estrategias de venta cruzada, realizar recomendaciones a los clientes sobre productos relacionados, y promocionar estos colocándolos muy cerca unos de otros en páginas Web, catálogos o en la misma estantería.

 

Vamos a ver un ejemplo empleando la herramienta de SAS: Enterprise Miner. Esta herramienta dispone de un nodo específico para realizar este tipo de proceso, dentro del grupo de tareas orientadas a la exploración:

 

 

 

Los datos de este ejemplo son datos de compras de supermercado, disponibles en: https://dl.dropboxusercontent.com/u/59930995/R/groceries_4.csv

 

Este fichero es importado en SAS y se realizan las transformaciones para adaptarlos a los que en SAS Enterprise Miner se denomina formato transacción:

 

 

El formato de transacción necesita delimitar claramente los items que componen una transacción: para ello utilizamos un id y un secuencial.

 

Este dataset debe ser incorporado a Enterprise Miner con el tipo transacción y definiendo el  rol de las variables a utilizar:

 

 

 

Este dataset es input del nodo "market basket analysis" que va a obtener las reglas de asociación entre los productos vendidos en las transacciones.

 

 

 

Existen diferentes parámetros a configurar, entre ellos el número de elementos a relacionar y el nivel mínimo de confianza:

 

 

La ejecución del nodo nos dan los resultados estadísticos del estudio de reglas de asociación:

 

 

 

En particular nos fijamos en las reglas de asociación obtenidas:

 

 

En las reglas de asociación obtenidas se analizan cuestiones tales como el soporte de la regla (support%) que es la probabilidad de que aparezcan los dos productos en la cesta de la  compra, la confianza (confidence%) es la probabilidad condicionada de que aparezca el producto B en la cesta de la compra, una vez que aparece el producto A. Confianza esperada es simplemente la probabilidad de que aparezca B en la cesta y Lift (factor de elevación) es el ratio de de dividir confianza por confianza esperada. Un valor de lift = 1 indica que ese conjunto aparece una cantidad de veces acorde a lo esperado bajo condiciones de independencia. Un valor de lift > 1 indica que ese conjunto aparece una cantidad de veces superior a lo esperado bajo condiciones de independencia (por lo que se puede intuir que existe una relación que hace que los productos se encuentren en el conjunto más veces de lo normal).Por último, en el campo Rule vemos la regla de asociación obtenida.

 

Este proceso Miner precisa de una preparación de datos en Enterprise Guide y de una integración ( http://sasybi.blogspot.com.es/2015/09/ejecutar-modelos-enterprise-miner-desde.html )  de ambos procesos.

 

Podemos realizar este tipo de análisis de forma no costosa con otras potentes herramientas de análisis de datos tales como Knime, R (librería arules), entre otras.

 

Un estudio similar a este realizado hace tiempo en la cadena Wall-Mart dio lugar a la famosa y curiosa historia de la correlación entre los pañales y la cerveza: http://www.businessintelligence.info/dss/ejemplo-data-mining-panales-y-cerveza.html

 

 

 

Registros Unicos

$
0
0

Hola a todos:

Antes que nada espero que esten bien :), y pues ahora vengo en ayuda de ustedes compañeros de foro, basicamente mi cuestión es la siguiente:

 

Es sobre una consulta, el tema lo podriamos tomar de la siguiente manera, se tiene una tabla de transacciones , de empleados ,  de personas y de polizas basicamente un empleado puede tener un dependiente o mas (familiar, etc), tendriamos la siguiente función,ese empleado cuando se da de alta se registra en las 3 tablas mencionadas, es decir se inserta en la tabla de personas y se registra con id_persona junto con otros datos, en la tabla de empleados se inserta con un id_empleado  junto con el id_persona mas otros datos de ahi inserta en la tabla transacciones con un id_transacción mas un id_empleado y por ultimo con la tabla de polizas que genera un ID_poliza y espera el id_transacción mas el id_persona  junto con otros datos.

 

Cuando se genera un "movimiento" es decir que se vaya a agregar un dependiente(suponiendo que ya esta registrado el EMPLEADO-TITULAR) se da de alta solo en la tabla de personas, por lo que genera un  id_persona y el id_persona del empleado(titular que esta dando de alta al dependiente) se agrega en un campo de la misma tabla  id_persona_padre(cuando es titular va vacio o con 0 ) , esto para saber con quien esta relacionado, una vez hecho esto se genera una nueva transacción(se inserta registro) que incluye ya a este nuevo "dependiente", basicamente el sistema toma el id_empleado que ya se tenia, mas el nuevo consecutivo de id_transacción y hace inserción en la tabla de transacciones a su vez inserta en la tabla de polizas  con el NUEVO id_transacción  juntos con los id_persona que ya existian mas el nuevo id_persona generado.

 

Ahora eso "basicamente" es el funcionamiento de esta parte, lo que se requiere es obtener los empleados Y/o dependientes que estan inactivos(id_persona ) y obtener la ultima maxima transacción id_transacción   donde estuvieron involucrados cada empleado o dependiente.

 

Por otra parte cuando el titular desea dar de baja a un dependiente genera una  transacción y esto lo hara si este mismo titular es dado de baja genera transacción, la baja es logica, es decir existe un campo en todas las tablas involucradas con un status y este puede ser A= activo o I=inactivo.

 

Coloco la consulta que tengo:

 

SELECT DISTINCT (TRANSACTION_ID) 
  , PERSON_ID--, count(*)
    FROM POLICY         --- Obtengo las transaciones y las personas que estan ligadas a ellas.
   WHERE PERSON_ID IN
            (    SELECT PERSON_ID    --Obtengo el listado de las personas inactivas tanto titulares como dependientes
                   FROM PERSONS
                  WHERE STATUS_CD = 'I'
             CONNECT BY PRIOR PERSON_ID = PERSON_FATHER_ID
             START WITH PERSON_ID IN
                           (SELECT PERSON_ID
                              FROM EMPLOYEES   -- Obtengo todos los IDs de personas TITULARES de la empresa a manipular
                             WHERE  ENTITY_ID IN(123456)

                            )  )

AND TRANSACTION_ID IN ("PULL DE TRANSACCIONES PARA ESE EMPLEADO")
--ORDER BY TRANSACTION_ID DESC
--GROUP BY TRANSACTION_ID,PERSON_ID
--HAVING COUNT(*)>1
ORDER BY TRANSACTION_ID,PERSON_ID DESC

 

Con esto obtengo basicamente lo que "requiero" a excepción que salen datos repetidos:

TRANSACTION_ID  PERSON_ID
--------------                 ----------
       3276207    4879199
       3289860    5049213
       3289865    4879199
       3289814    4879199
       3289866    5049348
       3289866    4879199
       3289866    5049211
       3289866    5049347
       3289813    4879199
       3289869    4879199

De los datos que acabo de colocar se tiene que obtener la id_transacción  maxima por usuario, evidentemente no repitiendo el id_persona .

Por lo que en teoria quedaria de la siguiente manera(manipulo los datos a mano) que son los que estan marcados a continuación en negritas:

TRANSACTION_ID  PERSON_ID
--------------                 ----------
       3276207    4879199
       3289860    5049213
       3289865    4879199
       3289814    4879199
       3289866    5049348
       3289866    4879199
       3289866    5049211
       3289866    5049347

       3289813    4879199
       3289869    4879199                  <=== Su maxima transacción aun que se repite en otras transacciónes.

Limpiando un poco mas los datos el resultado deberia ser:

TRANSACTION_ID  PERSON_ID
--------------                 ----------
       3289860    5049213
       3289866    5049348
       3289866    5049211
       3289866    5049347

       3289869    4879199

 

Podrian apoyarme a verificar que mas puedo hacer para poder obtener este resultado, ya que he metido agrupaciones y aun asi no obtengo el resultado.

 

O si alguien tuvo este mismo tema y ya lo resolvio me apoye colocando su consulta para darme otra idea, se los agradeceria mucho..

 

 

Saludos y gracias.

Análisis cluster basado en campos alfanuméricos

$
0
0

Buenas, estoy empezando en este mundo del data mining y tengo una duda sobre si es posible hacer algo que estamos queriendo hacer.

El problema es el siguiente: tenemos un archivo (10 millones de registros aproximadamente) con nombre, apellido, domicilio, etc. Sabemos que hay un número importante de registros repetidos ( que corresponden a la misma persona ) pero escritos diferente, con faltas de ortografía, variaciones en el formato del domicilio, etc.

Para detectarlos, lo que habíamos pensado era ejecutar algún tipo de análisis cluster para lograr agrupar los nombres similares, y obtener un número razonable de registros que "a priori serían el mismo" para revisarlos manualmente.

 

Por ejemplo, quisieramos que los siguientes 2 registros se agrupen en un mismo cluster:

"Santiago Hernandez; Avenida Olleros 1234;"

"Santiago Hernandes; Avda Olleros 1234;"

 

El problema es que todas las herramientas que estuve probando hasta ahora (Knime, Rapidminer ), quizás por desconocimiento mío, solo me permiten hacer análisis cluster basado en campos numéricos, calculando la distancia, o categóricos. No sé si es posible aplicar este tipo de metodología a campos de tipo string.  La única que me sirvió para hacer algo similar es Open Refine, pero es online y no me permite manipualr volúmenes tan grandes de información.

 

La pregunta en concreto es, es posible aplicar este método a campos tipo string ? Como se hace ? Alguien conoce alguna herramienta, o sugerencia de por donde podría orientarme ?

 

Desde ya muchas gracias,

Saludos

 


Análisis cluster basado en campos alfanuméricos

$
0
0

Buenas, estoy empezando en este mundo del data mining y tengo una duda sobre si es posible hacer algo que estamos queriendo hacer.

El problema es el siguiente: tenemos un archivo (10 millones de registros aproximadamente) con nombre, apellido, domicilio, etc. Sabemos que hay un número importante de registros repetidos ( que corresponden a la misma persona ) pero escritos diferente, con faltas de ortografía, variaciones en el formato del domicilio, etc.

Para detectarlos, lo que habíamos pensado era ejecutar algún tipo de análisis cluster para lograr agrupar los nombres similares, y obtener un número razonable de registros que "a priori serían el mismo" para revisarlos manualmente.

 

Por ejemplo, quisieramos que los siguientes 2 registros se agrupen en un mismo cluster:

"Santiago Hernandez; Avenida Olleros 1234;"

"Santiago Hernandes; Avda Olleros 1234;"

 

El problema es que todas las herramientas que estuve probando hasta ahora (Knime, Rapidminer ), quizás por desconocimiento mío, solo me permiten hacer análisis cluster basado en campos numéricos, calculando la distancia, o categóricos. No sé si es posible aplicar este tipo de metodología a campos de tipo string.  La única que me sirvió para hacer algo similar es Open Refine, pero es online y no me permite manipualr volúmenes tan grandes de información.

 

La pregunta en concreto es, es posible aplicar este método a campos tipo string ? Como se hace ? Alguien conoce alguna herramienta, o sugerencia de por donde podría orientarme ?

 

Desde ya muchas gracias,

Saludos

 

Viewing all 29 articles
Browse latest View live