1- Usando Predictive Power Score Para Identificar Correlaciones Lineales

Correlaciones En estadística, la correlación o dependencia es cualquier relación estadística, causal o no, entre dos variables aleatorias o datos bivariantes. En el sentido más amplio, la correlación es cualquier asociación estadística, aunque comúnmente se refiere al grado en que un par de variables están relacionadas linealmente.

Ejemplos conocidos de fenómenos dependientes son la correlación entre la altura de los padres y la de sus hijos y la correlación entre el precio de un bien y la cantidad que los consumidores están dispuestos a comprar, representada por la llamada curva de demanda. Las correlaciones son útiles porque pueden indicar una relación predictiva que se puede aprovechar en la práctica.

Por ejemplo, una compañía eléctrica puede producir menos energía en un día cálido basándose en la correlación entre la demanda de electricidad y el clima. En este ejemplo, existe una relación causal porque el clima extremo hace que la gente utilice más electricidad para calentarse o refrescarse

Sin embargo, en general, la presencia de una correlación no es suficiente para inferir la presencia de una relación causal (es decir, la correlación no implica causalidad). Formalmente, las variables aleatorias son dependientes si no satisfacen una propiedad matemática de independencia probabilística. En el lenguaje informal, correlación es sinónimo de dependencia.

Esencialmente, la correlación es la medida de la relación entre dos o más variables. Existen varios coeficientes de correlación. El más común es el coeficiente de correlación de Pearson, que sólo es sensible a una relación lineal entre dos variables (que puede estar presente incluso cuando una variable es una función no lineal de la otra)

Screenshot%20from%202021-02-23%2007-49-23.png

Se han desarrollado otros coeficientes de correlación -como la correlación de rangos de Spearman- que son más robustos que el de Pearson, es decir, más sensibles a las relaciones no lineales. La información mutua también puede aplicarse para medir la dependencia entre dos variables. Aquí podemos ver correlaciones con un valor de 0, pero que efectivamente existe algún tipo de correlación:

Screenshot%20from%202021-02-23%2007-51-50.png

Las correlaciones se puntúan de -1 a 1 e indican si existe una fuerte relación lineal, ya sea en sentido positivo o negativo. Sin embargo, hay muchas relaciones no lineales que este tipo de puntuación simplemente no detecta. Además, la correlación sólo se define para las columnas numéricas. Por lo tanto, dejamos fuera todas las columnas categóricas.

Lo mismo ocurrirá si transformamos las columnas categóricas, porque no son ordinales y si hacemos OneHotEncoding acabaremos con un array con muchos valores diferentes (con alta cardinalidad). La simetría en las correlaciones significa que la correlación es la misma si calculamos la correlación de A y B o la correlación de B y A. Sin embargo, las relaciones en el mundo real rara vez son simétricas. Lo más frecuente es que las relaciones sean asimétricas

Un ejemplo rápido: una columna con 2 valores únicos (Verdadero o Falso por ejemplo) nunca podrá predecir perfectamente otra columna con 100 valores únicos. Pero lo contrario podría ser cierto. Está claro que la asimetría es importante porque es muy común en el mundo real.

Alguna vez te has preguntado:

En resumen, una puntuación asimétrica y agnóstica del tipo de datos para las relaciones predictivas entre dos columnas que van de 0 a 1. Pues bien, existe la librería Predictive Power Score y se puede encontrar en el siguiente enlace: Puntaje de Poder Predictivo

Así que, ¡vamos a trabajar la librería!

Primero tenemos que instalarla con el siguiente comando pip install ppscore, ejecutelo en la siguiente celda

Cálculo del PPS

En primer lugar, no hay una única forma de calcular la puntuación de poder predictivo. De hecho, hay muchas formas posibles de calcular una puntuación que cumpla los requisitos mencionados anteriormente. Por lo tanto, pensemos en el PPS como un marco para una familia de puntuaciones. Digamos que tenemos dos columnas y queremos calcular el PPS de X prediciendo Y. En este caso, tratamos Y como nuestra variable objetivo y X como nuestra (única) característica.

Ahora podemos calcular un Árbol de Decisión con validación cruzada y calcular una métrica de evaluación adecuada.

También se pueden utilizar otras puntuaciones como el ROC, etc. pero dejemos esas dudas por un segundo porque tenemos otro problema. La mayoría de las métricas de evaluación no tienen sentido si no se comparan con una línea de base. No importa que tengamos una puntuación de 0,9 si hay posibles puntuaciones de 0,95. Y también importa mucho si es la primera persona que consigue una puntuación superior a 0,7. Por lo tanto, tenemos que "normalizar" nuestra puntuación de evaluación. ¿Y cómo se normaliza una puntuación? Se define un límite inferior y otro superior y se relativiza la puntuación

Entonces, ¿cuáles deberían ser los límites superior e inferior? Empecemos por el límite superior porque suele ser más fácil: un F1 perfecto es 1. Un "MAE" perfecto es "0".

¿Pero qué pasa con el límite inferior? En realidad, no podemos responder en términos absolutos. El límite inferior depende de la métrica de evaluación y de su conjunto de datos. Es el valor alcanzado por un predictor "ingenuo".

Pero, ¿qué es un modelo ingenuo? Para un problema de clasificación, predecir siempre la clase más común es bastante ingenuo. Para un problema de regresión, predecir siempre el valor medio es bastante ingenuo.

PPS VS Correlación

Para tener una mejor idea del PPS y sus diferencias con la correlación veamos este versus. Ahora tenemos las correlaciones entre x e y y viceversa

Screenshot%20from%202021-02-23%2007-56-02.png

Hagamos esta ecuación de PPS, primero importe Pandas, Numpy y PPS import ppscore as pps en la siguiente celda

Crear ahora un dataframe de Pandas vacio, siguiendo una estructura como la siguiente

df = pd.DataFrame()

Según la fórmula anterior

Screenshot%20from%202021-02-23%2008-01-14.png

Necesitamos crear los valores de las características X, que van de -2 a +2, y lo hacemos como una distribución uniforme con Numpy, y crearemos 10.000 muestras y asignamos estos valores a una nueva columna del dataframe vacío llamada X. Crea dicha distribución en la siguiente celda

Siguiendo la misma fórmula también tendremos que crear una nueva columna llamada error asignando los valores de -0.5 a 0.5 como una distribución uniforme y con el mismo número de muestras. Haz lo mismo con Numpy, pero cambianos los parametros adecuados

Nota: Como son numeros random usted deberia tener valores diferentes a los nuestros.

¡Genial! Tenemos la primera mitad de la fórmula recreada. Ahora bien, necesitamos replicar y crear Y.

En la siguiente celda crea una nueva columna para el dataframe df llamada y, y asignale el resultado de la siguiente formula

Screenshot%20from%202021-02-23%2008-04-08.png

Esto quiere decir que debes elevar al cuadrado cada fila de la columna X del dataframe y el resultado sumarlo a cada fila de la columna error del dataframe

Muy fácil, aquí seguimos la fórmula. Ahora queremos ver las correlaciones entre X e Y. Para ello utilizaremos el .corr() de Pandas. Para más información sobre corr() aquí . Tenemos dos formas de ejecutarlo:

Como podemos ver, la conclusión a la que llegaríamos aquí es que la correlación entre X e Y no es una correlación fuerte, ya que el valor es -0,014 (aproximadamente, recuerda que debe variar ligeramente debido a que los inicializamos aleatoriamente), lo que indica una ligera correlación negativa.

Recuerda que una correlación positiva fuerte es igual a 1, y una correlación negativa fuerte es igual a -1 (lo vimos en los gráficos anteriores). Pero, ¿qué ocurre si ejecutamos esta misma correlación pero con Predictive Power Score? Hagámoslo. Basándonos en el dataframe anterior podemos calcular el PPS de x al predecir y de la siguiente forma (ejecutelo en la siguiente celda)

pps.score(dataframe, "x", "y")

Aquí obtenemos un valor de 0,67 que es un indicador de una alta correlación positiva. ¡Usando sólo el Pandas corr() podríamos haber perdido el poder predictivo de esta variable! Aquí se puede ver que esta correlación es no lineal

Screenshot%20from%202021-02-23%2008-27-23.png

¿Qué ocurre ahora si invertimos la correlación? ¿Intentamos predecir X basándonos en Y? Ejecutalo en la siguiente celda y trata de analizar el resultado

¡La correlación es ahora 0, por lo que no tiene correlación, lo que significa que estamos ante una correlación asimétrica! Veamos más detalles sobre la biblioteca PPS. Ejecuta el siguiente comando:

pps.predictors(dataframe, "y")

Y ahora ejecutalo sobre x

Con .predictors podemos tener una idea más clara de lo que ocurre bajo el capó. En el que podemos ver las métricas y los modelos utilizados. También podemos acceder al método .matrix con el siguiente comando

pps.matrix(dataframe)

Así podemos calcular la matriz PPS entre todas las columnas

Analizar y visualizar los resultados

Llamamos a esto efectos no lineales y asimetría. Utilicemos una relación cuadrática típica: la característica x es una variable uniforme que va de -2 a 2 y el objetivo y es el cuadrado de x más algún error. En este caso, x puede predecir muy bien y porque existe una clara relación cuadrática no lineal; al fin y al cabo, así es como generamos los datos. Sin embargo, esto no es cierto en la otra dirección de "y" a "x". Por ejemplo, si "y" es 4, es imposible predecir si "x" fue aproximadamente "2" o "-2".

Por lo tanto, la relación de predicción es asimétrica y las puntuaciones deben reflejarlo. ¿Cuáles son los valores de las puntuaciones en este ejemplo? Si no sabe lo que está buscando, la correlación le dejará colgado porque la correlación es 0. Tanto de x a y como de y a x porque la correlación es simétrica

Sin embargo, el PPS de x a y es 0,67, detectando la relación no lineal y salvando el día. Sin embargo, el PPS no es 1 porque hay algún error en la relación. En la otra dirección, el PPS de y a x es 0 porque su predicción no puede ser mejor que la línea de base ingenua y por lo tanto la puntuación es 0.

Puede utilizar seaborn o su biblioteca favorita para ver los resultados.

Visualización de los predictores PPS, ejecute el siguiente codigo cambiando las variables correctas en la siguiente celda

import seaborn as sns
predictors_df = pps.predictors(dataframe, y="y")
sns.barplot(data=predictors_df, x="x", y="ppscore")

Visualización de la matriz PPS:

(Esto necesita un pequeño preprocesamiento porque seaborn.heatmap desafortunadamente no acepta datos ordenados)

Pegue e imprima el siguiente codigo

matrix_df = pps.matrix(dataframe)[['x', 'y', 'ppscore']].pivot(columns='x', index='y', values='ppscore')

sns.heatmap(matrix_df, vmin=0, vmax=1, cmap="Blues", linewidths=0.5, annot=True)

Está claro, con esta visualización, que estamos teniendo un buen resultado con la correlación entre x e y, pero no en el sentido contrario.

Ejemplo con características categóricas

Comparar la matriz de correlación con la matriz PPS del conjunto de datos del Titanic nos dará algunas ideas nuevas. Esta es una grafica de la matrix una vez corrido .corr() y ppscore sobre dicho dataset

Screenshot%20from%202021-02-23%2008-36-36.png

La matriz de correlación es más pequeña y deja fuera muchas relaciones interesantes. Por supuesto, esto tiene sentido porque columnas como Sex, TicketID o Port son categóricas y la correlación no puede calcularse para ellas. La matriz de correlación muestra una correlación negativa entre "TicketPrice" y "Class" (-0,55).

Podemos comprobar esta relación si echamos un vistazo al PPS. Veremos que el "Precio de entrada" es un fuerte predictor de la "Clase" (0,9 PPS), pero no al revés. La característica "Clase" sólo predice el "Precio del billete" con un PPS de "0,2".

Esto tiene sentido porque si su billete costó 5.000 o 10.000 dólares es muy probable que esté en la clase más alta. Por el contrario, si se sabe que alguien estaba en la clase más alta no se puede saber si pagó 5.000 o 10.000 dólares por su billete. En este escenario, la asimetría del PPS vuelve a brillar.

La primera fila de la matriz indica que el mejor predictor univariante de la columna "Sobrevivido" es la columna "Sexo". Esto tiene sentido porque se dio prioridad a las mujeres durante el rescate. (No pudimos encontrar esta información en la matriz de correlación porque la columna "Sexo" fue eliminada).

Si se observa la columna TicketID, se puede ver que TicketID es un predictor bastante bueno para una serie de columnas. Si profundiza en este patrón, descubrirá que varias personas tenían el mismo TicketID. Por tanto, el TicketID se refiere en realidad a un grupo latente de pasajeros que compraron la entrada juntos, por ejemplo la gran familia italiana Rossi que convierte cualquier noche en un espectáculo. Así, el PPS le ayudó a detectar un patrón oculto.

Lo que es aún más sorprendente que el fuerte poder predictivo de TicketID es el fuerte poder predictivo de TicketPrice en una amplia gama de columnas. Especialmente, el hecho de que TicketPrice es bastante bueno para predecir TicketID (0,67) y viceversa (0,64).

Si se investiga más a fondo, se descubre que las entradas tenían a menudo un precio único. Por ejemplo, sólo la familia italiana Rossi pagó un precio de 72,50 dólares. Este es un punto de vista crítico. Significa que el TicketPrice contiene información sobre el TicketID y, por tanto, sobre nuestra familia italiana. Una información que es necesario tener cuando se considera una posible fuga de información.

Al observar la matriz PPS, podemos ver los efectos que podrían explicarse por las cadenas causales. Por ejemplo, le sorprendería que el Precio del billete tenga un poder predictivo sobre la tasa de supervivencia (PPS 0,39). Pero si sabe que la Clase influye en su tasa de supervivencia (PPS 0,36) y que Precio del billete es un buen predictor de su Clase (PPS 0,9), entonces podría haber encontrado una explicación

Disclosure

El PPS tiene claramente algunas ventajas sobre la correlación a la hora de encontrar patrones predictivos en los datos. Sin embargo, una vez que se encuentran los patrones, la correlación sigue siendo una gran manera de comunicar las relaciones lineales encontradas. Por lo tanto, puede utilizar la matriz PPS como una alternativa a la matriz de correlación para detectar y comprender los patrones lineales o no lineales en sus datos

Limitaciones

Conclusiones

Esperamos haya aprendido de este reto, trate de hacer en el dataset de Titanic o en otros dataset que posea. Lo esperamos en el próximo reto!