top of page

LO QUE NO TE CUENTA TU CONSULTOR PARTE I: MULTICOLINEALIDAD EN PRODUCCIÓN

  • fjroar
  • 27 sept
  • 5 Min. de lectura

Esta entrada y seguramente alguna más de las posteriores, voy a centrarla en errores graves que se cometen a nivel profesional cuando se construyen modelos, dado que he pasado por varias empresas y en los últimos 10 años no paro de encontrarme burradas de bulto que a la postre se manifiestan como caída de eficiencia o de predictividad de los modelos que se usan en la vida real.


En definitiva y por desgracia, me he encontrado en más de una ocasión que consultores supuestamente expertos en modelización, parece que no tienen claro más de un tema y creo que estas líneas son importantes para aquellas empresas demandantes de modelos, que confían plena y ciegamente en el buen hacer del proveedor y que después se encuentran con sorpresas desagradables a poco que se levanta la alfombra.


Aquí voy a trata el tema de la multicolinealidad. Un tema aparentemente sencillo de entender por todo aquel que estudia estadística y que es fácil de explicar cuando se está ante un auditorio de directores, que aunque se excusen algunos diciendo que son de letras, a poco que aclares que esa palabra significa que en un modelo no puede haber variables que contengan la misma información, te entienden perfectamente.


Cuando doy clases en másteres, este es un aspecto con el que machaco a mis alumnos porque ya he visto que parece que no se llegan a enterar qué es lo que significa la multicolinealidad y desde luego, cuando se ponen a trabajar los equipos de desarrollo, veo cosas que como diría Rambo "harían vomitar a una vaca".


Que alguien supuestamente experto, haga un modelo y pueda meter variables con cierta correlación pongamos del 0.8 o 0.9 sin justificarlo me puede parecer grave, pero más grave aún es cuando se meten variables que tiene multicolinealidad perfecta.


Así pues, si por ejemplo meto como variable explicativa una variable dummy tipo 0 – 1 donde 1 significa canal online y 0 significa canal presencial y la denomino "canal online", está claro que no necesito meter otra variable adicional que se denomine "canal presencial" ¿Cierto?


Pues parece que el tema no está claro, porque este tipo de cosas, que creía superadas, lo he visto en más de una ocasión y con modelos en fase productiva, vamos que se están aplicando en la vida real. Además hay más y es cuando se emplea en python por ejemplo funciones como get_dummies cuya documentación puede verse aquí:



Por ejemplo si se ejecuta:


import seaborn as sns

import pandas as pd


# Cargamos el dataset Titanic

titanic = sns.load_dataset("titanic")


# Mostramos las primeras filas con la variable 'sex'

print("Antes de get_dummies:")

print(titanic[['sex']].head())


# Convertimos la variable 'sex' en dummies (0/1)

titanic_dummies = pd.get_dummies(titanic, columns=['sex'])


print("\nDespués de get_dummies:")

print(titanic_dummies[['sex_female', 'sex_male']].head())


Se obtiene lo siguiente:


ree


Es decir, se genera una variable y su contraria, lo cual a priori no es malo si se sabe que hay que desechar una de esas variables, esto se consigue dentro de la misma función con el parámetro drop_first=True , pero claro, es que en versiones anteriores la opción parece que no existía y también parece que muchos no leen bien la documentación, porque para aplicarlo todo bien a un modelo, en general cambiando la línea de conversión por:


titanic_dummies = pd.get_dummies(titanic, columns=['sex'], drop_first=True)


Resulta más que suficiente.


Pues bien, el problema se agudiza más cuando tenemos más de 2 categorías (imaginemos modelos donde hay códigos postales, variables carácter con múltiples denominaciones), el uso de este tipo de conversiones sin el debido cuidado es peligroso.


No obstante, si volvemos al caso sencillo de una única variable dicotómica donde se ha aplicado get_dummie y se han metido esas 2 nuevas variables generadas en un modelo ¿Qué puede pasar?


Pues depende ...


Si el modelo es de regresión lineal, desde luego vas a tener un problema de algoritmo depende de si lo haces con R o con Python, con R te dirá que una de las variables será missing, python en cambio con sklearn no te dirá nada ya que usa el método del gradiente descendente y salvo un warning, convergerá y te estimará los 2 coeficientes tan pancho.


En otros tipos de modelos el tema es más sutil. En el caso de los árboles y los modelos de ensemble como los random forest y los xgboost el tema cambia.


El algoritmo converge y te genera un modelo y por lo que puede verse en:



Se afirma que la multicolinealidad en el caaso de los xgboost no afecta el performance de este tipo de modelos.


Sin embargo, el anterior articulo, está basado en el uso de datasets tipo kaggle en el caso del primero ejemplo, el dataset de fraude tiene unas características que lo hacen un poco peculiar, por lo que allí va a funcionar casi cualquier cosa ...


Como digo siempre, si nos quedamos en el nivel accuracy o de poder discriminante, la visión que se tiene del modelo es parcial, porque no se está mostrando la interacción con otras variables y por supuesto la lógica de negocio – sentido común que tiene que haber en todo esto.


Para cualquiera que trabaja en este mundillo con un poco de experiencia, meter una variable de este tipo en un modelo con una correlación 1 te va a generar distintos problemas que podrán o no ser manifestados en la roc o en el gini que tengas cuando ajustes tu modelo en training o/y test:


  • Está usando una variable de más que complica la interpretabilidad del modelo y que no añade nueva información


  • En aplicaciones reales que no puedo mostrar, esa variable de más le roba poder explicativo a otras variables, sobre todo cuando se ha hecho algo como incluir las variables hombre y mujer o cuando, como he comentado en el ejemplo inicial, se ha incluido en una segmentación de contratación como variables contratación on-line y presencial.


  • Que haga un ajuste a corto plazo razonable, no significa que se mantenga en el tiempo, ya que al no incluir otras variables importantes, o bien sus pesos no están bien determinados, o bien vas a generar inestabilidades a poco que el modelo se ponga en producción con toda la población


  • Y referente a lo anterior se está alterando los pesos de variables importantes y eliminando otras posibles variables que podrían tener una importancia significativa porque has preferido sobre ponderar 2 variables que realmente tienen la información de 1


Así pues, mi recomendación cuando tengáis que revisar modelos que no habéis hecho vosotros es que os fijéis en todo y que como ya he vivido en más de una ocasión, cosas que parecen de sentido común y demás, bien por dejadez, bien por desconocimiento, hacen que algunos proveedores desarrollen cosas que cuando empiezan a "petar" o a "dejar de predecir", después los que estamos en el día a día, tenemos que sufrir y solucionar.


 
 
 

Comentarios


© 2021 by Francisco J. Rodríguez Aragón. Proudly created with Wix.com

bottom of page