Atrévete con el Python : ¿Qué es el análisis de Componentes Principales o PCA?

Wednesday, June 6, 2018

Atrévete con el Python : ¿Qué es el análisis de Componentes Principales o PCA?


Bienvenidos a una nueva edición de nuestra serie Python para todos. Nuestro objetivo es explicar de forma sencilla, comprensible y aplicada a ejemplos concretos, los principales conceptos de Machine Learning, Big Data, e Inteligencia Artificial. El tema de hoy, el Análisis de Componentes Principales (Principal Component Analysis o PCA) es uno de los algoritmos de selección de características más habituales.

¿Qué es un algoritmo de selección de características?


Las técnicas de Machine Learning necesitan grandes volúmenes de datos para crear modelos eficientes y de calidad. Si embargo, muchas veces, los datsets de entrenamiento contienen gran cantidad de datos irrelevantes o que aportan poca información. Los algoritmos de selección de características analizan los datos de entrada, los clasifican en distintos subconjuntos y definen una métrica con la que valorar la relevancia de la información aportada por cada uno de ellos. Luego, descartarán del dataset de trabajo aquellas características o campos que menos información aportan, permitiendo un ahorro en almacenamiento de datos, y tiempo de ejecución que se traduce en una mayor eficiencia del modelo.

El Algoritmo de Componentes Principales (en adelante PCA) consiste en:
una técnica de selección de características concreta que utiliza una transformación ortogonal para convertir un conjunto de observaciones de variables, posiblemente correlacionadas, en un conjunto más reducido de variables que ya no guardan correlación y que se conocen como componentes principales. 

La pregunta principal que nos ayuda a resolver este método es "¿Cuántos parámetros del dataset son necesarios para explicar una variación significativa de éste?. Es decir, es evidente que al descartar parámetros o variables, siempre se perderá cierta información. El tema está en valorar cuánta información nos podemos permitir "perder" descartando ciertos parámetros en aras de obtener un modelo más rápido y eficiente.

Las matemáticas que sustentan este método son complejas, así como la definición anterior. No obstante, vamos a intentar explicar de forma intuitiva en qué consiste el proceso y, en un post posterior, lo veremos mucho más claro aplicándolo de forma práctica a un  dataset real.

Comprendiendo el algoritmo PCA. 


El análisis de componentes principales es precisamente eso, un proceso que analiza los datos e intenta encontrar la estructura subyacente, la esencia de la información contenida en ellos. Esta estructura se define por las direcciones donde la varianza de los datos es mayor, es decir, donde hay una mayor dispersión de éstos. La forma más sencilla de comprender este concepto es mediante una visualización.

Si los triángulos representan datos, la dirección que representa la mayor varianza es la línea sobre la cual la dispersión de los datos es mayor. Si tomamos una línea vertical y proyectamos los datos sobre ella, vemos que los datos no están tan "separados" como cuando hacemos la misma operación sobre una línea horizontal. Por tanto, en este ejemplo concreto, el componente principal es la línea horizontal, que corresponde a una mayor varianza.


Distribución de datos en la que se aprecia que la dirección de mayor dispersión es la horizontal.
Figura 1: Distribución de datos en la que se aprecia que la dirección de mayor dispersión es la horizontal.









Afortunadamente, no hace falta dibujar los datos para encontrar la dirección de mayor varianza, sino que se pueden identificar por medio de métodos matemáticos. 

Igual que los cocineros de moda "deconstruyen la tortilla de patatas", con resultados, según quien sea, cuestionables, podemos deconstruir un conjunto de datos en autovectores y autovalores (eigenvectors y eigenvalues). Un autovector es una dirección, y un autovalor es un número que representa el valor de la varianza en esa dirección. Por tanto el componente principal será el autovector con mayor autovalor (en el ejemplo, la línea horizontal).

En un conjunto de datos hay tantas parejas autovector/autovalor como dimensiones. Los autovectores no modifican los datos, sino que permiten verlos desde un punto de vista diferente, más relacionado con la estructura interna de los datos, y por tanto, ofrecen una visión mucho más intuitiva de éstos.


Proceso de identificación de un nuevo sistema de ejes basado en los vectores propios o autovectores
Figura 2: Proceso de identificación de un nuevo sistema de ejes basado en los vectores propios o autovectores.

En las figuras anteriores vemos cómo, a partir de un conjunto de datos inicial, en este caso de 2D representado en un sistema de ejes cartesianos XY, identificamos como autovector (o componente principal), la dirección de mayor varianza en los datos (línea roja en la segunda gráfica). Dado que es un sistema de 2 dimensiones, existirá otro autovector más. Si recordamos la definición anterior que hemos dado del algoritmo PCA, decíamos que era una "tranformación ortogonal". Eso significa que el segundo autovector es perpendicular al primero (la segunda línea roja en la útima gráfica). Por tanto, hemos definido un nuevo sistema de ejes sobre el que proyectaremos los datos para verlos desde otra perspectiva que facilita su comprensión, ya que los nuevos ejes son las direcciones en las que el aporte de información es mayor.

Los datos se proyectan sobre un nuevo sistema de ejes.
Figura 3: Los datos se proyectan sobre un nuevo sistema de ejes.

¿Para qué se usa el Análisis de Componentes Principales o PCA?


Al identificar claramente cuáles son las variables o características que aportan más información, se pueden descartar aquellas menos relevantes, reduciendo así la dimensionalidad del conjunto de datos de trabajo. De esta formas, se simplifica el problema y se agiliza todo el proceso de modelado. Por ello, es uno de los primeros pasos en este proceso.

Por tanto, la reducción de dimensionalidad es una de sus aplicaciones principales. Por ejemplo, en un análisis de calificaciones escolares que consideraba las notas de los alumnos en 8 asignaturas diferentes (lengua, matemáticas, física, inglés, historia, química y gimnasia), se determinó que 2 de los componentes principales explicaban juntos el 81% de la varianza. El primer componente estaba fuertemente correlacionado con las asignaturas de humanidades, mientras que el segundo, lo estaba con las de ciencias. Ambos conjuntos eran estadísticamente independientes (un alumno puede tener buenas notas en sólo uno de ellos, en los dos o en ninguno). De esta forma, se pudo simplificar el análisis de este conjunto de datos, de trabajar con un problema de 8 dimensiones, a otro de 2. 


al aplicar una transformación lineal  de cizalladura a la  imagen, el eje azul no cambia porque se trata de un autovector.
Figura 4: al aplicar una transformación lineal  de cizalladura a la  imagen, el eje azul no cambia porque se trata de un autovector.

La otra aplicación es la detección de anomalías. Uno de los ejemplos típicos es la detección de fraude en transacciones bancarias. En estas situaciones, es fácil tener un gran volumen de datos de  de transacciones correctas. Lo difícil es tener suficientes datos de transacciones fraudulentas con las que entrenar el modelo. La detección de anomalías basada en PCA resuelve el problema analizando las características o atributos que definen lo que corresponde a un comportamiento normal, para después aplicar distintas métricas de distancia que identifiquen los casos que se alejan de este comportamiento, es decir, los casos anómalos.

¿Cuáles son las limitaciones del PCA?


Una de las principales limitaciones de PCA surge cuando los datos están expresados en distintas escalas. Por ello siempre se suele hacer una normalización o estandarización previa. Por otro lado, sólo se consideran transformaciones ortogonales (rotaciones) de las variables originales. Por último, este método asume que los datos siguen una distribución normal o gaussiana. Como ya explicamos al final de este otro post, no es una asunción descabellada, ya que muchos fenómenos naturales y humanos siguen este patrón.

En el próximo post veremos un ejemplo práctico de aplicación del análisis PCA con Python a uno de los datasets clásicos para el aprendizaje de las técnicas de Machine Learning, el de clasificación de iris, con el que ya trabajamos en el experimento anterior.

Esta segunda serie es más corta (sólo son dos post, incluido éste), porque asumimos que ya tenemos algunas nociones de Python y el entorno Anaconda instalado. Si no es tu caso, y quieres empezar desde cero, te recomendamos empezar por este otro experimento, o, al menos, leer los post iniciales de preparación del entorno:
Los post de esta segunda miniserie son:

¡No te lo pierdas!

También puedes seguirnos en nuestras redes sociales:  @Telefonica@LUCA_D3@ElevenPaths 

No comments:

Post a Comment