estadística

IO Parte 1

Allá por el año 1997 más o menos andaba yo estudiando Investigación Operativa en la Universidad de Granada. Recuerdo aprender el archiconocido algoritmo del simplex y algo también sobre programación entera (dónde el dominio de las variables está en \(\mathcal{Z}\)). No se me daba muy bien al principio, pero si recuerdo que luego me acabó gustando y el día que encuentre mis apuntes os pondré una demostración que desarrollé para un teorema que tenía algo que ver con la relación entre espacio primal y el dual.

No mentirás

Hay veces que uno se deja llevar por la emoción cuando hace algo y a veces se exagera un poco con lo que hace tu criatura. Tal es el caso de la librería Nanyml, la cual tiene buena pinta pero exagera en al menos dos partes. La primera y más evidente es cuándo dice que puede estimar el desempeño futuro de un modelo sin comparar con lo que realmente pase, así promete el Estimating Performance without Targets

Collider Bias?

Continuando con temas del post anterior. Dice Pearl, con buen criterio, que si condicionas por un collider abres ese camino causal y creas una relación espuria entre las dos variables “Tratamiento” y “Respuesta” y por lo tanto si condicionas por el collider, aparece un sesgo. Hablando estilo compadre. Si Tratamiento -> Collider y Respuesta -> Collider, si condiciono en el Collider, es decir, calculo la relación entre Tratamiento y Respuesta para cada valor de C, se introduce un sesgo.

Cocinando

Lo primero, feliz año a todos (no me da la gana de poner todas y todes), y espero que este año sea mejor que el pasado. Hoy voy a hablar un poco de la “cocina” electoral en los barómetros de opinión, pero de forma muy simplificada. Una de las primeras cosas que se hacía era comparar el recuerdo de voto declarado en la encuesta con el resultado real de las elecciones a las que hacía referencia.

¿A dónde va Vicente?

Cuando estamos haciendo un modelo y tratamos con variables categóricas como predictoras, hay que ser muy cuidadoso. Por ejemplo hay que tener en cuenta qué pasa cuándo tenemos un nuevo nivel en el conjunto de datos a predecir que no estaba en el de entrenamiento. Por ejemplo, si estoy utilizando un algoritmo moderno tipo xgboost, y tengo como variable predictora la provincia. ¿Qué pasa si en el conjunto de entrenamiento no tengo datos de “Granada”, pero en el de predicción si?

Análisis de correspondencias "old_style"

Quién me conoce sabe que siento debilidad por el análisis de datos categóricos, en particular por técnicas como el análisis de correspondencias simple o múltiple o por las cosas más modernas que hay. No en vano se me dió especialmente bien en la universidad, en parte debido a que por fin me centré después de unos años locos, y en parte debido a algún buen profesor. El caso es que en el curro utilizamos este tipo de técnicas para encontrar relaciones entre variables categóricas que quizá hayan pasado desapercibidas en un primer análisis.

Imputando datos. La estructura importa

Voy a empezar este post con un par de citas. El análisis de datos es básicamente encontrar la matriz correcta a diagonalizar. Quien renuncia a la estructura, deja dinero encima de la mesa. La primera no recuerdo dónde la leí, pero es de la escuela francesa de estadística, la segunda es del blog hermano datanalytics. Y bueno, ambas tienen parte de razón.

Big data para pobres III. ¿Bayesiano?

Y seguimos dando vueltas a los datos de post anteriores. Siempre hay quien dice que el bayesiano no sirve para big data y qué se acaba el universo antes de que termine de ajustar tu modelo (esto último creo que se lo he dicho yo alguna vez a Carlos). Pero ya hemos visto en los dos post anteriores que podemos condensar los datos en menos filas sin perder información, así que , ¿por qué no utilizar un modelo bayesiano?

Big data para pobres II. ¿AUC?

Bueno, pues voy a ampliar el ejemplo del último día, como es viernes, estoy cansado y me iré a tomar una birra pronto, intentaré ser breve. Levantamos una sesión de spark y leemos los mismos datos del otro día. Ya de paso voy a probar el operador pipe nativo en R base |>. Si tienes la nueva versión de R instalada y la versión de Rstudio preview, en global options puedes poner para que al hacer Ctrl + Shift +M aparezca el nuevo operador o el antiguo.

Estimación Bayesiana, estilo compadre

El título de la entrada, sobre todo lo de la parte de “estilo compadre” viene de mis tiempos en consultoría, y tiene que ver con la necesidad de dar soluciones subóptimas a problemas acuciantes. Otra de mis frases, de la que puede que se acuerden Boris, Laura y Lourdes fue la de “si me das madera te hago un troncomóvil, no un ferrari”, lo cual es el equivalente a GIGO de toda la vida, pero a mi estilo.

AUC = Wilcoxon , de nuevo

Anda la gente que si viendo a ver cómo calcular el AUC (roc), que si cómo se hace en spark o que si hay que tener en cuenta muchos puntos de corte y ver las tablas de clasificación asociadas. Eso está bien para contarlo, pero no para calcularlo. El AUC se puede considerar como la probabilidad de que el score de un “sí” elegido al azar es mayor que el score de un “no” elegido al azar.

¿Y si ... ? Parte II

Volvamos a nuestro ejemplo tonto, dónde habíamos visto que el T-learner cuando el modelo base es un modelo lineal equivale a tener un modelo saturado (con interacciones). En estos de los “metalearners” tenemos entre otros, los T-learners vistos en el post anterior , los S-learner y los X-learners. Los S-learners no es más que usar un solo modelo “Single” para estimar el Conditional Average Treatment Effect , CATE.

¿Y si ... ? Parte I

Lo de la inferencia causal está de moda, y motivos hay, es una herramienta que intenta dar respuesta a preguntas cómo las siguientes. ¿Qué habría pasado si en vez de poner este precio a este producto hubiera puesto otro? ¿Se habría vendido más? ¿He mandado a mi campaña a aquellos para los que justo al mandar a campaña su probabilidad de compra se incrementa?

PCA I. El álgebra es tu amiga

Me pide mi amigo Jesús Lagos que hagamos un vídeo hablando del análisis de componentes principales para un canal que tiene junto a Miguel Angel. El caso es que llevo muchos años usándolo y lo estudié en la carrera, haciendo varios a mano, como no podía ser de otra manera, pero desde que empecé a usar software estadístico se me habían olvidado los detalles de la matemática subyacente.

Los viejos rockeros nunca mueren

En todo este mundo de la analítica de datos las modas van y vienen, pero la sensatez y el buen hacer siempre vuelven. Y vuelven porque son útiles, porque aportan valor y porque ¡qué demonios! ya está bien de postureo big datero de dibujitos de animales. Esta entrada viene a colación de lo que me cuenta un ex compañero de curro y sin embargo amigo, que hacen en su nueva empresa.

Cosas que deben cambiar

La semana pasada estuve en la bella ciudad de Alcoy en el congreso de Estadística e Investigación Operativa gracias a que nos invitaron a dar una sesión invitada presentando la Comunidad R-hispano. Como estoy en el mundo de la empresa mi percepción fue que, salvo en las charlas de investigación operativa, la distancia entre lo que se hace y se enseña en la universidad y lo que se utiliza en la empresa es bestial.

Codificación parcial y python

O como se conoce en estos tiempos modernos one hot encoding. En realidad se trata simplemente de cómo codificar una variable categórica en un conjunto de números que un algoritmo pueda utilizar. Ya hablé de esto mismo en el post codificación de variables categóricas I Básicamente, la codificación parcia lo que hace es crearse tantas variables indicadoras como niveles tengo en mi variable menos 1. Ejemplo. Construimos un conjunto de datos simple, con 3 variables

Codificación de variables categóricas III

Hoy vamos a comparar dos formas de codificar variables categóricas basadas en reducción de dimensionalidad, a saber, embeddings con redes neuronales frente a Análisis de Correspondencias. Para eso vamos a utilizar unos datos de kaggle de hace 2 años, se trata de un dataset donde se recoge el número de bicicletas que cruzan a diario los principales puentes de NY, datos La idea es hacer un modelo muy simple para predecir el número de ciclistas que cruzan a diario por “Manhattan.

Codificación de variables categóricas II

Voy a comentar por encima lo que se viene llamando “codificación por impacto”, la idea es codificar una variable categórica predictora usando la información del “target”, evidentemente este tipo de codificación sólo sirve cuando tenemos un modelo en mente y dicen que es útil si tenemos variables categóricas con alta cardinalidad. La idea es muy sencilla, para cada nivel de la variable categórica le asignamos su media de target, por ejemplo, (o la media(u otra medida) menos la media general)

Codificación de variables categóricas I

Voy a hacer una serie de entradas sobre codificación de variables categóricas, mi idea es pasar desde la codificación parcial (OneHot Encoders para los modernos), hasta utilizar embeddings. Vamos al lío. Tradicionalmente, si tenemos una variable categórica con 5 niveles se codifica en tantas variables cero uno como niveles menos uno, puesto que uno de los niveles se toma como referencia y se codifica con todo 0’s en las varaibles indicadoras.

Muestreando II

Ya estuve hablando algo del partial pooling y existe un caso en el que es particularmente útil, se trata de cuando tenemos que estimar en áreas pequeñas. Entendamos áreas pequeñas cuando tenemos pocos datos en alguna o algunas categorías de una variable categórica. Continuando con el ejemplo de la anterior entrada, veamos qué sucede con las estimaciones de la tasa de paro en cada provincia y cómo nos pueden ayudar los modelos mixtos.

Muestreando

Vamos con el post. El INE tiene un ftp no muy publicitado aquí, yo suelo descargarme la Encuesta de Población Activa de este sitio, hay un fichero comprimido que tiene varias carpetas dónde hay script para poder importar los datos con Stata, SAS, spss y R. Gracias INE!!. El caso es que es que yo para la epa uso el paquete MicroDatosEs de Carlos Gil Bellosta Leo la EPA y me quedo sólo con la provincia, edad y aoi (que indica si una persona es inactiva, si está ocupada, parada, etc ).

Las nuevas hornadas

Por circunstancias de la vida estoy entrevistando a nuevas generaciones de científicos de datos y no dejo de constatar algunas cosas , enumero algunas. Saben programar (R, Python, Scala) Están a la última en cuanto a modelos ensemble, Random Forest, Xgboost, catboost, lightgbm Conocen algo de deep learning Hablan más de un idioma correctamente Pero luego me pongo a charlar con ellos y parece que a todos se les ha olvidado el principio de parsimonia.