Data Mining

Medir la importancia de las variables con Random Forest

¿Qué variables son las más importantes para nuestro modelo de clasificación? Yo creo que muchos de vosotros os habréis encontrado con esta problemática. Hay muchas formas de solventarla, habitualmente empleamos aquellas variables que mejor pueden entender nuestras áreas de negocio. Es decir, hacemos segmentaciones en base al sexo y la edad sólo por no tener que explicar como hemos construido una variable artificial a alguien que no entiende lo que es una variable y mucho menos variable artificial. Pero hoy os quería plantear la utilización de métodos de random forest con R para medir la importancia de las variables cuantitativas, para variables cualitativas recomiendo otras formas que plantearé más adelante. El random forest es un método de clasificación basado en la realización de múltiples árboles de decisión sobre muestras de un conjunto de datos. Hacemos muchas clasificaciones con menos variables y menos observaciones y al final nos quedamos con un promedio de estas clasificaciones, esa sería la idea a grandes rasgos. La característica que hace de este método muy interesante es la posibilidad de incluir un gran número de variables input en nuestro modelo ya que no encontraremos relaciones lineales entre ellas y tampoco aparecerán relaciones debidas al azar.

Entrenamiento, validación y test

Cuando realizamos modelos hay 3 conjuntos de datos fundamentales:

  • Conjunto de datos de entrenamiento : son los datos que entrenan los modelos
  • Conjunto de datos de validación : selecciona el mejor de los modelos entrenados
  • Conjunto de datos de test : Nos ofrece el error real cometido con el modelo seleccionado

Para entender mejor su importancia y como funcionan he preparado el siguiente esquema/ejemplo:

entrenamiento-validacion-test.PNG

Una empresa de telecomunicaciones de cara a mejorar la efectividad de sus campañas comerciales decide realizar un modelo de propensión a la desconexión. Se define un universo como los clientes activos a ultimo día de un mes y se determina cuales de ellos han desconectado nuestra línea al mes siguiente. Podría ser recomendable utilizar varias cosechas de clientes para evitar efectos estacionales o campañas agresivas de la competencia. Para el universo seleccionado la tasa de desconexión se sitúa en un 12%. Este universo hemos de dividirlo en 2 partes. La primera de ellas formará el conjunto de datos de entrenamiento y validación y aquí es importante realizar un sobremuestreo estratificado del número de desconexiones para mejorar el entrenamiento del modelo. El estrato será tiene evento VS no tiene evento. En el esquema gráfico aumento la proporción de desconexiones hasta un 50%, no es una proporción imprescindible, si nuestra muestra no nos permite esa proporción algunos expertos con los que he trabajado y yo mismo aseguramos que un 20% de eventos puede ser suficiente; pero si es posible buscaremos el 50-50. En un árbol de decisión (por ejemplo) este sobremuestreo nos identificaría ramas extremas. Una vez definido el conjunto de datos sobremuestreado lo separamos en entrenamiento y validación. Este dinosaurio siempre deja la proporción 70-30…

Gráficos de densidades con SAS y el PROC KDE

El PROC KDE de SAS está incluido en el módulo SAS/STAT. Es un procedimiento que nos permite estudiar gráficamente las distribuciones de variables continuas. Lo que nos produce son gráficos de densidades. Para seguir el ejemplo nos vamos a ir a Yahoo Finance y descargarnos un evolutivo del IBEX de los últimos 3 meses (yo realizo este proceso con Excel), una vez tengamos el dataset creado, para el análisis de la densidad univariante podemos hacer:

Monográfico. Un poco de PROC LOGISTIC

El PROC LOGISTIC es un procedimiento de SAS que nos ha dado muchas satisfacciones a los dinosaurios como el ahora escribiente. La regresión logística es uno de los modelos de regresión más utilizados y es bien conocido por todos mis lectores (bastante más inteligentes que yo). El problema es muy sencillo hemos de clasificar una población dividida en dos partes a partir de unas variables independientes. Su aplicación es muy extensa: patrones de fuga, propensiones a compra, salud, fraude,… Con este monográfico pretendo acercaros en 3 minutos a las sentencias básicas en SAS para crear un modelo de regresión logística y proponer gráficos y validaciones. En la línea habitual del blog partimos de una simulación y analizamos la sintaxis, evitamos poner las salidas para no “cargar” la entrada con tablas de poca utilidad. El ejemplo es el que sigue:

Monográfico. Clasificación con SVM en R

Las máquinas de vectores de soporte, Support Vector Machines, SVM a partir de ahora, son un conjunto de técnicas estadísticas que nos permiten clasificar una población en función de la partición en subespacios de múltiples variables. Parte de la idea de dividir de forma lineal un conjunto de múltiples dimensiones. Creamos muchos hiperplanos que nos dividen las observaciones. Es una técnica que está ganando popularidad y que por supuesto podemos realizarla con R. Para ello tenemos algunos paquetes específicos como kvm, svmlight y el e1071. Este último es al que pretendo acercarme hoy.

Las cuentas claras.

Si hay alguna tarea o procedimiento indispensable y más repetitivo hasta la saciedad por excelencia a la hora de trabajar con bases de datos y tener que reportar alguna información por mínima que sea, esta es contar o contabilizar el número de casos (registros) que tenemos en total o en subtotales (por grupos) dentro de una tabla (los llamados ‘datasets’ en SAS).

Para dar mayor utilidad a este ‘tutorial’ sobre conteo, partiré de una tabla con 2 columnas (campos) tipo cadena, es decir tipo texto, de manera que podamos ver diferentes métodos para contar-contabilizar NO solo campos tipo texto sino también trucos que nos den una solución más ‘elegante’ de la combinación de ambos campos tipo cadena. Estos 2 campos se llamarán ‘grupo’ y ‘tipo’, muy empleados por muchos programadores, pero se podrían llamar tambien ‘familia’ y ‘familia_segmento’ o bien
‘comunidad_1’ y ‘comunidad_2’ o bien ‘zona_tipo1’ y ‘zona_tipo2’ o bien ‘entorno_primario’ y ‘entorno_secundario’, o si el ejercicio tratase de contar el número de alumnos por sexo y color de ojos bastaría con ‘sexo’ y ‘color_ojos’, etc etc.

Porque me gusta R

En los últimos tiempos he hablado mucho y mal de R en los «ambientes». El problema de siempre puede terminar con la paciencia de cualquiera, la manipulación de datos con R cuando superamos un GB puede acabar con la paciencia de este viejo dinosaurio. Viejo por usado no por mi edad, y dinosaurio por anticuado, aunque me gustaría recordar que los dinosaurios fueron capaces de sobrevivir 65 millones de años. En realidad soy un mainframe, usado, superviviente e imprescindible y me gusta R. Desde el año 2001 sé que el futuro de la gestión de la información pasa por él. Por este mismo motivo soy uno de los tipos que más ha luchado por divulgar las bondades y, sobre todo, las posibilidades que nos ofrece. Pero de verdad me gusta R porque, bajo mi punto de vista, el principal objetivo de todos aquellos que gestionamos datos tiene que ser la rentabilidad. ¡Chimpún!

Monográfico. Regresión logística con R

Por fin nos metemos con la regresión logística en R. Nos meteremos con WPS (si es posible). Los modelos de regresión logística son los más utilizados en las áreas en las que el ahora escribiente ha trabajado. ¿Por qué tiene tanto «éxito»? Porque es el mejor ejemplo de modelo de variable linealmente dependiente de otras variables independientes. Pero sobre todo tiene éxito porque modelamos una probabilidad de un suceso (habitualmente dicotómico) en función de unos
factores que pueden ser discretos o continuos. Modelizamos probabilidades, insisto; por ejemplo, si clasificamos la variable comete fraude como 1 y no comete fraude como 0 podríamos realizar un modelo de regresión lineal del tipo fraude(0,1)=:término independiente:+:parámetro::independiente:. Matemáticamente es posible, pero si me dices que un cliente tiene un 1,34 de «potencial» de fraude entro en estado de shock. Peeero, si p es la probabilidad de cometer fraude podemos construir esta función Ln(p/(1-p)) y sobre esta función si hacemos: Ln(p/q)=:término independiente: + :parámetro::independiente:. O lo que es lo mismo: prob. fraude=1/(1+e**(-:término independiente:-:parámetro:*:independiente:)). Qué bonita función y que interesante propiedad de los logaritmos que transforman sumas en productos.

Monográfico. Paquete de R NNET para modelos de redes neuronales

Quiero introduciros a los modelos de redes neuronales con R , mas concretamente quiero acercaros al módulo nnet de R. Tenemos extensa literatura al respecto de las redes neuronales, personalmente considero de lectura obligatoria este link (y prácticamente toda la documentación de este profesor) El paquete nnet nos permite crear redes neuronales de clasificación monocapa. Las redes neuronales clasifican mediante algoritmos o métodos de entrenamiento, en función de estos métodos podemos tener redes supervisadas y redes no supervisadas. Las primeras buscan un límite de decisión lineal a través de un entrenamiento. Las segundas parten de unos parámetros (pesos) fijos y no requieren entrenamiento porque realizan mecanismos de aprendizaje en función de experiencias anteriores. Como ya os he indicado hay mucha bibliografía al respecto y muchas entradas en Google que pueden ayudaros a conocer mejor estos modelos. En el caso que nos ocupa, y como viene siendo tónica habitual de la bitácora, vamos a darle una visión más práctica (tampoco soy yo el más adecuado para dar esa visión teórica). Trabajamos en una gran Caja española y nuestro responsable nos pide realizar una selección de clientes para un mailing. Tenemos que «colocar» planes de pensiones vitalicios inmediatos. A nosotros se nos ocurre realizar un modelo de redes neuronales para seleccionar aquellos clientes con una puntuación más alta y, por tanto, más propensos a comprar el producto.

El futuro de la profesión

Nuestra profesión, la del estadístico que trabaja en la industria o la consultoría, está sometida a los cambios que exige el nuevo siglo. Llevo meses clamando en vano frente a un público que no escucha mis advertencias de peligro de obsolescencia. Pero un anuncio de un puesto de trabajo en un país lejano y que algunos consideran adelantado, me hace sentir reivindicado.

Atención a los requisitos meramente técnicos:

  • Escribir e interpretar queries de SQL complejas
  • Escribir e interpretar análisis de datos del tipo map-reduce usando Hadoop y Pig
  • Escribir código combinando SQL, Java, Pig y otros lenguajes de script
  • Trabajar con conjuntos de datos grandes de tipo desestructurado (varios terabytes, más de 100 millones de trnsacciones diarias)
  • Experiencia con lenguajes de script y expresiones regulares
  • Interés en matemáticas discretas y estadística
  • Experiencia transformando requisitos de negocio en sistemas informáticos

Nos adentramos en un brave new world , quiéranlo los nostálgicos del s. XX o no.

Monografico. Arboles de decisión con party

Los árboles de clasificación son una de las técnicas de análisis más utilizadas. No requieren supuestos distribucionales, permite detectar interacciones entre variables y no es muy sensible a la presencia de valores perdidos y outliers. En resumen, es una técnica que no quita mucho tiempo al analista para hacer consultas carentes de valor para sus responsables y permite identificar tanto perfiles positivos como perfiles negativos. Además, sus resultados son muy fáciles de interpretar. Tan fáciles que, INCLUSO , las áreas de negocio pueden entender sus resultados. Por todo esto estamos ante una de las técnicas más extendidas. En el blog ya hicimos un breve monográfico con rpart de R y nos quedaba realizar una revisión al paquete party. La metodología para esta rápida revisión será la habitual, planteamos un ejemplo y realizamos un análisis con las instrucciones de party.