Archivo de la categoría: Modelos

El sobremuestreo ¿mejora mi estimación?

El sobremuestreo (oversampling) es una técnica de muestreo que se emplea habitualmente cuando tenemos una baja proporción de casos positivos en clasificaciones binomiales. Los modelos pueden “despreciar” los casos positivos por ser muy pocos y nuestro modelo no funcionaría. Para incrementar el número de casos positivos se emplea el sobremuestreo. Ejemplos habituales pueden ser los modelos de fraude, un 99% de las compras son correctas, un 1% son fraudulentas. Si realizo un modelo puedo estar seguro al 99% de que todas mis compras son correctas, en este caso hemos de realizar un sobremuestreo para incrementar nuestros casos de fraude y poder detectar los patrones.

Personalmente no sabría deciros el porcentaje de casos positivos a partir del cual sería necesario llevar a cabo un proceso de remuestreo. A mi particularmente me gusta hacerlo siempre. Por lo menos realizar algunas pruebas para identificar aquellas variables que son más influyentes y comenzar a eliminar aquellas que no van a funcionar. Busco exagerar. Tampoco me quiero mojar mucho sobre la proporción de casos positivos y negativos, pero si estamos realizando un nuevo muestreo podemos emplear perfectamente un 50% para ambos, aquí si que dependemos del número de registros con el que estemos trabajando ya que al final el sobremuestreo será la repetición de los casos positivos sobre la tabla de entrada del modelo.

Sin embargo, cuando ya tengo decidido como va a ser mi modelo no me gusta realizar sobremuestreo. Lo considero un paso previo (algún lector del blog considerará estas palabras incoherentes). Después de toda esta exposición teórico-práctica de malos usos de un dinosaurio  en realidad lo que cabepreguntarse es ¿mejora la estimación un modelo con sobremuestreo?

Abrimos R y Tinn-R y manos a la obr Seguir leyendo El sobremuestreo ¿mejora mi estimación?

Árboles de decisión con SAS Base (con R por supuesto)

Con SAS Base podemos hacer árboles de decisión porque tenemos R. Así de sencillo. Vamos a utilizar SAS para gestionar nuestros datos y R será la herramienta que utilicemos para la realización del modelo de árbol de decisión. Posteriormente emplearemos las reglas generadas por el modelo para etiquetar a nuestros clientes en SAS. Con esta entrada pretendo ilustrar una serie de ejemplos en los que comunico SAS con R. Una herramienta nos sirve para el tratamiento de datos y la otra la utilizaremos para realizar modelos que no están al alcance de SAS. Para realizar esta comunicación SAS-R os planteo la creación en SAS de ficheros de texto con las instrucciones en R y la ejecución en modo batch de R con ese código creado en SAS. Aquí tenéis punto por punto el ejemplo:

El primer paso, como es habitual, es crear un conjunto de datos SAS con datos aleatorios que nos sirva de ejemplo Seguir leyendo Árboles de decisión con SAS Base (con R por supuesto)

Trucos R. Llevar a SAS las reglas de un árbol de decisión

Vuelvo hoy con el uso de rpart para la creación de árboles de decisión con R. Pero hoy, además de realizar un modelo de árbol con R quiero presentaros una función que nos permite guardar las reglas generadas con nuestro modelo en un fichero de texto para su posterior utilización con SAS. Retomamos un ejemplo visto con anterioridad en la bitácora con ligeras modificaciones:
#Inventamos un objeto para realizar el modelo
#En una cartera de clientes nuestro modelo tiene que identificar
#cuales contratan un PVI
#
clientes=20000
saldo_vista=runif(clientes,0,1)*10000
saldo_ppi=(runif(clientes,0.1,0.2)*rpois(clientes,1))*100000
saldo_fondos=(runif(clientes,0.1,0.9)*(rpois(clientes,1)-1>0))*100000
edad=rpois(clientes,60)
datos_ini<-data.frame(cbind(saldo_vista,saldo_ppi,saldo_fondos,edad))
datos_ini$saldo_ppi=(edad<=68)*datos_ini$saldo_ppi
#Creamos la variable objetivo a partir de un potencial
datos_ini$potencial=runif(1,0,1)+
(log(edad)/(log(68))/100) +
runif(1,0,0.001)*(saldo_vista>5000)+
runif(1,0,0.001)*(saldo_fondos>10000)+
runif(1,0,0.007)*(saldo_ppi>10000)-
runif(1,0,0.2)
datos_ini$pvi=as.factor((datos_ini$potencial>=quantile(datos_ini$potencial,
0.90))*1)
#
#Empleamos rpart para la realización del modelo
#
library(rpart)
arbol=rpart(as.factor(pvi)~edad+saldo_ppi+saldo_fondos,
data=datos_ini,method="anova",
control=rpart.control(minsplit=30, cp=0.0008) )

Tenemos un objeto rpart llamado arbol. En este punto necesitamos disponer de las reglas generadas por el modelo para SAS, donde el módulo específico para poder realizar determinados modelos tiene un precio muy alto. Buscando en Google encontraremos este link. En él tenemos una genial función de R list.rules.rpart que nos permite identificar las reglas que ha generado el modelo Seguir leyendo Trucos R. Llevar a SAS las reglas de un árbol de decisión

COMIENZA LA CUENTA ATRAS. III JORNADAS DE USUARIOS DE R

Por fin están en marcha las III Jornadas de Usuarios de R de España. En este enlace tenéis toda la información disponible. Para esta tercera edición hay que destacar:

  • Serán en Madrid en la Escuela de Organización Industrial
  • Habrá talleres,  bajo mi punto de vista uno de los mayores aciertos
  • Podéis participar, R tiene que salir del ámbito universitario e investigador y pasar al ámbito empresarial. Muchos podéis pensar que yo debería aplicarme el cuento…
  • Necesitan patrocinio. No sólo por temas económicos, también por la repercusion que implica el patrocinio. Todos aquellos que trabajáis en grandes organizaciones podéis poner en contacto al comité organizador  con vuestras empresas
  • También podréis realizar aportaciones voluntarias ya que la asistencia es completamente gratuita
  • Creo que es el punto en el que este foro alcanza su madurez y es el momento de que el mundo empresarial fije sus ojos en R y en la comunidad de usuarios que tiene detrás
  • Y sobre todo y más importante. Podéis conocerme en persona, por muchos asistentes que haya a mi se me ve y no sólo por el Windows 7

Creo que los ingredientes para estas nuevas jornadas garantizan el éxito. ¡Nos vemos en noviembre!

Muchas variables no implican una mejor predicción

Me sigo durmiendo con el genio Juan Antonio Cebrián y sus pasajes de la historia, monográficos zona cero o tertulias 4 C. Sus programas de radio me acompañan desde hace muchos años. Estudiando, vigilando instalaciones del ejercito o en el turno de noche de una fábrica Cebrián y su gente ha estado conmigo. En alguna ocasión hablaron del código secreto de la Bíblia, un código existente en la Torá (Pentateuco) que se resume en “todo está escrito”.Y es que una gran cantidad de información puede provocar relaciones al azar (o al azahar como le gusta decir a un buen amigo). Y esto puede pasarnos en nuestros modelos matemáticos. Ejecutemos el siguiente código en R:

#DF de partida
df=data.frame(rnorm(1000,100,10))
names(df)=c("dependiente")
#Bucle para añadir 300 variables
for (i in 1:300){
x=data.frame(rnorm(1000,sample(1:100,1),sample(1:50,1)))
nombre=paste("x",i,sep="")
names(x)=nombre
df=cbind(df,x)
remove(x)}
#1.000 observaciones y 300 variables
head(df)

Tenemos un data frame con datos aleatorios, 1.000 observaciones y 300 variables. ¿Pueden existir relaciones aleatorias entre una variable dependiente y estas 300 variables aleatorias? Realicemos un modelo de regresión a ver que pasa:

modelo=lm(dependiente~. ,data=df)
summary(modelo)

No sé lo que os habrá salido a vosotros, pero he encontrado 5 variables donde rechazamos la hipótesis nula que establece que no hay relación lineal. Es decir, 5 variables aleatorias tienen una relación lineal con otra variable aleatoria. ¿Cómo es posible? El azar ha intervenido en nuestro modelo debido al gran número de variables que forman parte de él. Mirad con recelo a aquellos que os dicen “el modelo acierta” y no os justifican los motivos de tal acierto.

Trucos Excel. Área bajo la curva ROC

curva-roc.png

¿Curva ROC y Excel? ¡Si no tiene nada que ver! No del todo.  En ocasiones tenemos que pintar las curvas ROC y empleamos las herramientas específicas para ello, sin embargo es habitual que nuestros resultados sean presentados en Excel (demasiado habitual). En ese caso creamos nuestros datos para llevarlos a Excel y realizamos nuestro gráfico. Ya tenemos nuestra tabla y hacemos un algo muy parecido a lo que tenemos más arriba. La curva ROC es un mecanismo para evaluar nuestro modelo y compara la especificidad que es la probabilidad de clasificar mal un caso negativo frente a la sensibilidad que es la probabilidad de clasificar correctamente un caso positivo, es decir, falsos positivos frente a verdaderos positivos. El área bajo la curva ROC será un valor entre 0,5 y 1. Cuanto más próximo a 1 mejor será nuestro modelo. Queda pendiente una revisión “en condiciones” de las curvas ROC y de los gráficos lift, mucho mejores cuando tienes que presentar resultados en un área de negocio.

Entonces, ya tenemos el gráfico en Excel y nos piden hayar el área bajo la curva ROC. ¿Cómo lo hacemos esto? Mediante una simulación por método Montecarlo. Creamos números aleatorios y si están por encima de la sensibilidad pues no valen. Posteriormente sumamos los que valen entre todos los que tenemos y hemos obtenido un valor muy próximo al área bajo la curva ROC. En realidad es un método para estimar el área de un póligono. Para entender mejor como se realiza el proceso os un documento de Excel con datos simulados:

curva_roc con datos simulados. Veréis que es muy sencillo. No se puede ser más dinosaurio pero ya verás como a más de uno se le enciende la bombilla. Saludos.

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.

Para ilustrar nuestro ejemplo con R vamos a emplear un conjunto de datos que podéis obtener obtener en este link. Es una serie de datos y modelos, nos quedaremos con el conjunto de datos au2_10000.csv que tiene 251 variables Seguir leyendo Medir la importancia de las variables con Random Forest

El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

Debido a la pobre aceptación había dado de lado esta serie de monográficos sobre la tarifa multivariante en el sector asegurador. Pero tengo una lectora que si los seguía y como yo me debo a mis lectores continúo con la serie. Recapitulemos. Como variables dependientes tenemos la frecuencia siniestral y el coste medio de los siniestros, las variables independientes serán aquellas que compongan la estructura de nuestra tarifa, como prototipo para determinar que variables forman parte de nuestro modelo empleamos el multitarificador de ARPEM. Con este planteamiento partimos de dos modelos: el modelo de frecuencias y el modelo de costes medios. Sin embargo a la hora de ajustar es muy importante plantear un modelo para cada una de las garantías. Parece lógico que el modelo multivariante para el contenido en una tarifa de hogar no ha de ser el mismo que el modelo para el continente. O centrándonos en el modelo de autos (sobre el que está girando nuestra serie) es necesario modelizar los siniestros de responsabilidad civil por un lado, los siniestros de daños propios por otro, defensa, robo,…

En el caso de automóviles las garantías a modelizar podrían ser:

• RC
• Daños con franquicia
• Daños sin franquicia
• Robo
• Incencio
• Defensa
• Asistencia
• Lunas
• Ocupantes

Esto es sólo una sugerencia/ejemplo estoy seguro de que algunos opinan que se pueden prescindir de algunas coberturas, pueden aparecer otras, en fin, son ideas personales y basadas en mi experiencia (que bonita expresión) no son axiomas y por tanto no me castiguéis por plantear esta estructura tarifaria para autos. Seguir leyendo El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

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 Seguir leyendo Entrenamiento, validación y test