Machine Learning

Introducción a la Estadística para Científicos de Datos. Capítulo 16. Modelización estadística. Conociendo los datos

Establecer un método para la modelización estadística

En el capítulo 3 del ensayo se hacía mención al universo tidyverse y las librerías de R que englobaba, además de esas librerías hay una publicación de Hadley Wickham y Garret Grolemund R for data sience donde aparece la siguiente imagen:

Esa imagen describe un método para realizar ciencia de datos con R. Como en la anterior figura, este capítulo se dedicará a describir e ilustrar un método de modelización que recoge todo lo trabajado con anterioridad en el ensayo, para ello se emplea el ejemplo que ha servido de hilo conductor en otros capítulos. El ya conocido modelo de venta cruzada en el sector asegurador :

Introducción a la Estadística para Científicos de Datos. Capítulo 15. Modelos GLM. Regresión logística y regresión de poisson

Motivación de los modelos GLM

Hasta el momento se han planteado los siguientes modelos.

  • Modelo de regresión lineal
  • Modelos factoriales en diseño de experimentos

Para ambos modelos la variable respuesta ha de ser cuantitativa y distribuida normalmente, pero en el capítulo 10 se vio la siguiente figura.

La respuesta normal o gaussiana aparece, pero existen otro tipo de situaciones a las que se enfrenta el científico de datos donde el evento a estudiar no se distribuye normalmente. Sin ir mas lejos, en el ejercicio que está sirviendo de hilo conductor en el ensayo, una aseguradora española que opera en múltiples ramos quiere ofrecer seguro de automóviles a sus clientes del ramo de salud. Para ello se realizó un cuestionario a los clientes de forma que se marcó quienes de ellos estarían interesados en el producto de automóviles y quienes no. La variable de interés es si o no lo que plantea una clasificación binomial. ¿Qué sucede si se modeliza eventos si/no mediante un modelo de regresión lineal? Siguiendo el propio ejemplo de trabajo al que se hace permanentemente referencia.

Introducción a la Estadística para Científicos de Datos. Capítulo 11. Análisis bivariable

De nuevo se retoma el ejemplo que está sirviendo de hilo conductor para este ensayo, la campaña de marketing de venta cruzada en el sector asegurador que está disponible en Kaggle. Una aseguradora española que opera en múltiples ramos quiere ofrecer seguro de automóviles a sus clientes del ramo de salud. Para ello se realizó un cuestionario a los clientes de forma que se marcó quienes de ellos estarían interesados en el producto de automóviles y quienes no. Se identificaron posibles tareas:

Evaluando la capacidad predictiva de mi modelo tweedie

Cuando tenemos que evaluar el comportamiento de un modelo de clasificación binomial empleamos sensibilidad, especificidad,… ya he hablado sobre ese tema aunque volveré sobre ello. Sin embargo, si nuestro modelo estima un valor es posible que no tengamos tan claro como está funcionando su capacidad predictiva. Lo que traigo hoy es un análisis muy básico pero que entienden muy bien aquellas personas que no tienen grandes conocimientos en ciencia de datos, además es una continuación de la entrada en la que se ilustraba un ejemplo de uso de los modelos tweedie.

Modelos tweedie con H2O. Mutualizar siniestralidad en base a factores de riesgo

Ya he escrito sobre la distribución tweedie en otra ocasión y hoy vuelvo a traeros un ejemplo de uso que además servirá para introducir un método, una forma de trabajar con modelos en H2O y R además de emplear gradient boosting machine (gbm) para la obtención de primas de riesgo. Ya hay buenos profesionales repartidos en el mercado laboral a los que les he mostrado como hacer modelos de riesgo para el sector asegurador con R y H2O dentro del Máster en Big Data de la UNED donde imparto el módulo de seguros. Pero hoy quiero traer al blog un resumen de otro tipo de modelos que nos pueden servir para segmentar una cartera de seguros en base a la siniestralidad esperada de un riesgo. Recordad que un seguro trata de mutualizar el gasto entre una cartera, no sé a priori quien va a tener un siniestro (¡si lo supiera!) pero si dispongo de información histórica de mi cartera y esa información me puede dar unas pistas sobre lo que ocurrirá a futuro (habitualmente un año), quiero ver que parte de esa información histórica es reproducible asumiendo siempre un error.

Manejo de datos básico con Python datatable

Nueva entrada dedicada al data management con Python , esta vez con datatable. No voy a justificar el uso de datatable antes que pandas, en un vistazo rápido por la web encontráis numerosas ocasiones en las que datatable es más eficiente que pandas en el manejo de datos con Python. En cuanto a la complejidad en el uso de uno u otro mi opinión no es objetiva porque me cuesta mucho trabajar con Pandas.

Transformaciones de variables cuantitativas en modelos binomiales

Para mejorar la capacidad predictiva de nuestros modelos binomiales es recomendable transformar las variables independientes. Existen técnicas que lo hacen de modo automático pero hoy os quería mostrar en un video un método «casero» para agrupar una variable cuantitativa con respecto a una variable respuesta, todo muy orientado a que la transformación tenga un sentido de negocio.

El código empleado para hacer el video es el siguiente:

from urllib import urlretrieve
link = 'https://raw.githubusercontent.com/yhat/demo-churn-pred/master/model/churn.csv'
urlretrieve(link, "churn.txt")

import pandas as pd
import numpy as np
df = pd.read_csv("churn.txt")
df.head(5)

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

pd.crosstab(df['Churn?'], columns='count').plot(kind='bar')
plt.show();

df['churn'] = np.where(df['Churn?'] == 'True.', 1, 0)

pd.crosstab(df['churn'], columns='count')

df['Day Mins'].isnull().sum()
df['Day Mins'].describe()
plt.hist(df['Day Mins'], bins=20); plt.show();

df['minutos'] = np.where(df['Day Mins'] >= 270, 270, (df['Day Mins']//10)*10)
df['minutos'] = np.where(df['minutos'] <= 70, 70, df['minutos'])

pd.crosstab(df['minutos'], columns='count')
plt.hist(df['minutos']); plt.show();

churn =  pd.DataFrame((df['churn']).groupby(df['minutos']).mean())
clientes = pd.DataFrame((df['churn']).groupby(df['minutos']).count())

fig = plt.figure()
ax = clientes['churn'].plot(kind='bar', grid=True)
ax2 = ax.twinx()
ax2.plot(churn['churn'].values, linestyle='-', linewidth=2.0,color='red')
plt.show();

Obteniendo los parámetros de mi modelo GAM

Vimos como los modelos GAM iban más allá del GLM porque en el momento de obtener los parámetros asociados al modelo de un factor nos proponían, en vez de una función lineal una función de suavizado no paramétrica para aquellos factores susceptibles de transformar en variables numéricas ordinales con un sentido determinado. Se trabajó con un modelo de riesgo con una sola variable como era la edad y al sumarizar el modelo no era posible obtener los parámetros en la salida. En último término nuestra intención con este tipo de modelos es obtener esos parámetros para transformarlos en relatividades. Qué sentido tiene obtener un buen modelo para Negocio si su resultado no se puede expresar en términos de incrementos o descuentos, en términos de relatividades.

Modelos GAM con R. Dejando satisfechos a los equipos de negocio

Los modelos GAM (Generalized Additive Model) son el conjuntos de modelos que tenemos los estadísticos, actuarios, data scientist o como nos denominen en el momento que leas esto para dejar a nuestros equipos de negocio contentos con los resultados de nuestro modelo GLM. No voy a entrar en los aspectos teóricos de este tipo de modelos, hay documentación como esta que os puede ayudar. Por qué se quedan contentos los equipos de negocio, porque nos ayudan a dar sentido a los modelos. Retomemos un ejemplo que vimos en otra entrada del blog: https://analisisydecision.es/los-parametros-del-modelo-glm-como-relatividades-como-recargos-o-descuentos/ en esta entrada presentamos como el resultado de un modelo GLM se transforma en una relatividad, en un mecanismo para ofrecer recargos y descuentos.

Inteligencia Arficial frente a un juego de niños. La partícula tonta de Nicolás

Pablo Picasso decía que en aprender a pintar como los pintores del renacimiento tardó unos años pero pintar como los niños le llevó toda la vida y en ocasiones creo que hacemos las cosas difíciles porque nos creemos que hacemos cosas difíciles y entonces llega un niño de nueve años y dice «Papá un punto que primero vaya a la izquierda y luego a la derecha no es tan difícil».
Os pongo en antecedentes, el pasado 7 de mayo fui al AWS Summit de Madrid porque Sergio Caballero iba a contar uno de los casos de uso. Los de AWS no se deben ni imaginar de las maravillas que ha hecho Sergio en el Ayuntamiento de Alcobendas porque sólo dejaron que hablara 10 minutos, muy torpes ellos, su trabajo es mejor escaparate que el planteado por Mai-Lan Tomsen, un error en el planteamiento de la jornada. El caso es que había una «competición» de vehículos que circulaban por un circuito guiados por complicados algoritmos de inteligencia artificial. Vimos algún «bucanero serio» de alguno de los participantes, ya sabemos reinforcement learning, pero reinforcement reinforcement. Otros participantes más o menos honrosos, en fin, distraído. Viendo la competición me entraron ganas de participar y al llegar a casa me siento a preparar un algoritmo que recorriera el circuito del Jarama de Madrid, no un circuito cualquiera un circuito donde yo he visto ganar carreras a Jorge Martínez Aspar.

Calendario de días laborales con Pandas

Es habitual escuchar que un científico de datos es un estadístico que trabaja con Python. En parte, tiene razón. Sin embargo, quien ha trabajado dentro del mundo académico sabe que para un estadístico las vacas son esféricas y los meses tienen 365,25/12 días. En cambio, en el mundo real, ni hay dos vacas iguales ni un mes igual a otro.
Sirva esta entrada para poner en valor todo aquel trabajo adicional y tiempo dedicado por aquellos que trabajan con datos y huyen de simplificaciones estadísticas, ya se denominen científicos de datos o cómo quieran llamarse.

¿Qué nos pasa con R? (de nuevo)

Hace años ya sorprendió R situándose muy arriba en la lista tiobe de lenguajes de programación subió en los años siguientes y ahora nos encontramos con una sorprendente bajada en el índice:

¿Volvemos a tener complejo por usar R? A veces tengo la sensación de que no eres un «pro» si no usas Python. Debe ser que determinados framework funcionan mejor en otros lenguajes, o no, pero nos da vergüenza usar R (de nuevo).