martes, 3 de enero de 2017

Mejora de modelos: Transformación de atributos



Una vez vistos los distintos modelos de clasificación, clusterización o agrupamiento y las técnicas básicas de regresión se hace necesario abordar de forma breve un conjunto de técnicas necesarias que nos permitirán mejorar los resultados de nuestros modelos.

Transformación de atributos de vectores

El concepto es tan simple como útil. Se basa en transformar un atributo o conjunto de atributos en otros, linealmente dependientes de estos, que faciliten y mejoren la calidad de los resultados del modelo. A modo de ejemplo, una normalización de un valor en el rango de funcionamiento [0,500000] a un rango [-1,1].

Siempre que se realice una transformación de datos es muy importante asegurarse que se realiza dicha transformación de forma “idéntica” para todo conjunto de datos utilizados (training, test, aprendizaje y producción)

Estandarización: es una transformación simple utilizada para normalizar valores discordantes en distribuciones continuas. Para ello se utiliza la desviación estándar (standard deviation) como elemento normalizador.



Normalización: mientras que la estandarización unifica atributos de naturaleza continua, la normalización unifica sus rangos de trabajo. Es el caso presentado anteriormente.


Agregación: Es una práctica más común de lo que su nombre pueda indicar. Se basa en agregar, sobre distribuciones discretas, los valores menos frecuentes sobre un mismo conjunto o bucket, generando distribuciones más homogéneas. Este principio de agregación es la principal base de trasformación de variables continuas a discretas (discretización).

Imputación:  Técnica necesaria en el tratamiento de grandes conjuntos de datos utilizada para rellenar “huecos” o valores perdidos dentro de grandes conjuntos de datos. Normalmente se usa la media o la mediana para distribuciones continuas y la moda para distribuciones discretas.

Codificación binaria: El concepto es también sencillo y supone una gran mejorar en el uso de los recursos computacionales. Supongamos un atributo de naturaleza discreta con N valores distintos. La idea esas asignar esos valores a una palabra binaria de longitud N.
Así a modo de ejemplo, supongamos una distribución discreta de cuatro colores {verde, rojo, amarillo y azul}. La codificación binaria de esta distribución podría ser:
  • {verde:     1000}
  •  {rojo:       0100}
  • {amarillo: 0010}
  • {azul:       0001}


Discretización: Muchas veces es fácil trabajar con valores discretos que con valores continuos siempre y cuando la pérdida de calidad producida en el proceso sea asumible. La discretización es un proceso similar al de agregación, con la salvedad de que no se realiza solo para los valores menos frecuentes sino para toda la distribución.

El proceso es sencillo y se basa en dividir el rango de trabajo de la distribución en intervalos o subconjuntos más pequeños que serán, posteriormente tratados en su conjunto como clases discretas.
Para hacer esta división de intervalos hay dos enfoques predominantes.
  •          Intervalos de tamaño fijo
  •          Intervalos de frecuencia fija

Lo más importante cuando se realiza un proceso de discretización de un atributo de naturaleza continua es tener en cuenta el cumplimiento de los siguientes principios:
  •       El conjunto de valores o clases que se obtienen tras el proceso de discretización tiene que ser significativamente menor que el conjunto de valores distintos existentes en su naturaleza continua.
  •          Debe prevalecer y garantizarse la capacidad predictiva del atributo.


domingo, 27 de noviembre de 2016

Algoritmos de Clustering o Agrupamiento


La tarea fundamental de los algoritmos de clustering se basa en explotar las similaridades entre entidades para realizar agrupaciones entre ellas. Para situarnos, estas técnicas nos permiten encontrar patrones ocultos en nuestros datos, esto es, en nuestros sistemas.

El clustering, por tanto,  busca encontrar los conjuntos de entidades más similares entre ellos (elementos) y lo más más disjuntos entre sí. Pero, ¿para qué nos puede servir este conjunto de técnicas?

En el sector de retail estos algoritmos nos permiten realizar tareas, no supervisadas, de customer discovery y recomendación, esto es, nos permiten descubrir relaciones entre conjuntos de elementos, no descubiertas o utilizadas hasta este momento, y que nos dan una clara ventaja competitiva sobre el resto del sector. Pero, ¿cómo puede apoyar esto a la operativa industrial?

Si bien la regresión es la técnica predictiva principal de cara a la simulación, el clustering nos va a apoyar en tareas de planificación de mantenimientos predictivos y validación de sensores remotos. 

Las técnicas de clustering se basan en algoritmos no supervisados, esto es, partimos de una base de vectores (datos) para generar K conjuntos de datos similares entre sí. Esta información se puede utilizar para planificar acciones de forma agregada. 

Se diferencia de los algoritmos de clasificación en que, en estos, indicamos la categorías en las que queremos que se realice la predicción (etiquetando las categorías) mientras que en los que tratamos actualmente estas categorías no están predefinidas.

Por ejemplo, para una planificación de mantenimiento predictivo, podemos encontrar agrupaciones de sensores por Mean Time Between Failures, distancia existente entre el centro de operación y el sensor, condiciones de accesibilidad, … y utilizar un algoritmo de clustering para encontrar un conjunto de agrupaciones que cumplan condiciones similares y que, por tanto, podamos planificar bajo periodos de frecuencia similares, independientemente de la marca y modelo del sensor (método tradicional).

Bajo este mismo enfoque, podemos realizar validaciones de coherencia de datos y seguridad. Supongamos que realizamos una agregación por clustering de un conjunto de datos internos (sensores propios con los que realizamos las mediciones) y externos (que nos valen de contraste). Realizamos la agrupación a través de un algoritmo de clustering y utilizamos este modelo para ir validando la agrupación en Tiempo Real. Si un elemento por alguna razón cambia de grupo en las sucesivas iteraciones pueden ocurrir dos cosas:

  1. El sensor esta estropeado o ha sido manipulado.
  2. El sensor presenta un cambio de comportamiento no planificado (no tiene por qué ser un error)

En cualquiera de los dos casos conocer esta situación es necesaria desde el punto de vista de que es necesaria una actuación.

Si bien este último ejemplo se puede resolver por otro tipo de técnicas, como clasificación, los algoritmos de clustering nos pueden aportar resultados mucho más potentes en base al descubrimiento de relaciones entre entidades no detectadas hasta este momento.

Principio de funcionamiento

Los algoritmos de clustering se basan en un concepto bastante sencillo, si bien, su implementación no lo es tanto. 

Todos los algoritmos descansan sobre el concepto de similitud, es decir, como de parecidos son, y la técnica más adoptada es la del cálculo de las distancias de los vectores que definen una instancia de una entidad (vector de atributos) con respecto a otro vector que indica el centro de una agrupación.

De forma general, la cercanía se define en términos de una determinada función de distancia, que puede ser la distancia Euclídea, la matriz de correlación entre vectores, la distancia de Manhattan, el coeficiente de correlación de Pearson o cualquier función definida por el usuario y que trasforme un conjunto de vectores en valores que indiquen, para nosotros, la distancia entre ellos.
Profundizando en los algoritmos, existen dos vertientes para su implementación.


Por un lado, están los algoritmos de la familia de k-centers en los que el número de agrupaciones se determinan de antemano y al que pertenecen los algoritmos de k-mean y k-metoids.

La base de los algoritmos de la familia de k-centers es sencilla:establecer k-vectores indicando los centros de cada una de las agrupaciones y determinar para cada uno de los vectores de datos (instancias de entidades) cual es la distancia a cada center y seleccionar aquella que sea la menor para asignarle dicha agrupación.

Sin embargo, la dificultad se encuentra en detectar cuales son los vectores centrales asociados a cada agrupación para obtener el mejor resultado, esto es, el más óptimo.

Una vez visto lo anterior introduciremos un nuevo dato. Los algoritmos de clustering se pueden ver como una extensión de los algoritmos de clasificación, pero realizado en dos pasos:
1) Detección y formación de los clusters y sus centros.
2) Generación de un modelo de clasificación sobre las K agrupaciones generadas.

Los algoritmos de k-centers son algoritmos iterativos que ejecutan la siguiente secuencia de pasos en pseudo-código:

  • Inicializar los centers de forma aleatoria
  • Hacer
    • Asignar las instancias a los distintos cluster
    • Reorganizar los centers en base a la función de distancia sobre las agrupaciones establecidas para obtener un nuevo vector centro de la agrupación
  • Mientras (condición de paradano satisfecha) 

Las condiciones de parada más habituales son un número determinado de iteraciones, la no modificación (o modificación dentro de un umbral) de los k-centers tras realizar una iteración, o la no variación de la asignación de las instancias a las agrupaciones definidas en la iteración anterior.

Por otro lado, están los algoritmos jerárquicos (basados en árboles), aglomerativos (Botom-up) o divisivos (Top-down), donde el número de agrupaciones no está predeterminado de antemano. La forma de representar los arboles de agrupación se realiza mediante los denominados dendogramas que no dejan de ser más que una representación gráfica de un árbol de decisión.

Los algoritmos Top-Down se basan en un algoritmo de división heurístico denominado DIANA (DIvisive ANAlysis Clustering). Inicialmente, todas las instancias de datos están en el mismo cluster. Iterativamente el grupo más grande se divide en objetos individuales y, tras esto y por medio de DIANA, se elige el objeto con la máxima disimilitud promedio generando un nuevo cluster.  Posteriormente reorganizamos los objetos para teniendo en cuenta el nuevo cluster y así sucesivamente hasta satisfacer una condición de parada.

Los algoritmos Bottom-up o aglomerativos parten del principio opuesto al anterior. Inicialmente, todas las instancias de datos independientes, esto es, cada una en su propio cluster. Tras esto, se elige el objeto o cluster con la máxima similitud a otro y se genera una nueva agrupación recalculando el nuevo center para esa agrupación. Se repite la operación hasta que se satisfaga la condición de parada que puede ser o que no exista ninguna agregación posible que mejore la situación actual o bien cuando hay un número suficientemente pequeño de agrupaciones.

En la próxima entrega del blog hablaremos de la última característica realmente importante que necesitamos conocer para abordar nuestro problema que es la reducción de la dimensión o la extracción de las características principales que nos permitirá reducir el volumen de nuestro problema.

domingo, 16 de octubre de 2016

Algoritmos de Regresión





Una vez que hemos visto que es un sistema dinámico y sus principales características podemos abordar los distintos algoritmos que se utilizan para realizar predicciones futuras por medio de las técnicas de modelado. Pero lo primero es ver a que problema real nos enfrentamos.

Al contrario que con los algoritmos de clasificación y clustering, en los algoritmos de regresión esperamos "acertar" o acercarnos al valor "real" exacto. 

En un algoritmo de clasificación de 10 valores obtener un 5 con un 10% de tolerancia seria (extrapolando a regresión que no es la realidad) como decir que estoy entre un 4.90 o un 5.10, o lo que es lo mismo en un sistema de 10 valores es claramente un 5, pero en un sistema dinámico no es lo mismo obtener un 4.9, que un 5.10, que un 5 ya que, normalmente el error propagado influirá en la siguiente capa.

Si tenemos un sistema de 10 niveles enlazados en serie con una tolerancia de error del 10% (90% de acierto) en verdad el sistema final puede tener un tasa de acierto del 34%, que claramente es inadmisible.

¿Pero como solucionamos es te problema? Tan simple como aplicar la inversa del divide y vencerás. En este caso Agrupa y Vencerás.

Si en verdad, de esos 10 niveles solo nos interesa la predicción en 4, generaríamos 4 modelos para realizar la predicción end-to-end como bloques independientes evitando la propagación de errores.

Lo segundo es comprender los términos de exactitud (accuracy) y precisión (precision).

La exactitud mide como de lejos o cerca ha estado tu previsión del valor real.
La precisión va más relacionada a como de homogénea es tu previsión.

¿Porqué son tan importantes? porque un sistema con un 0% de exactitud pero un 100% de precisión es más fiable que un sistema con una baja precisión. ¿Lo demostramos con un ejemplo?

Imaginaos que tenemos dos tiradores una diana y tiramos 100 dardos cada uno con el objetivo de acertar en el centro de la diana.

El primer jugador acierta 50 en los perímetros centrales de la diana pero el resto terminan distribuidos homogéneamente alrededor de la esta en distintos puntos. 

En el segundo no acierta ninguno pero sus 100 tiradas van al mismo sitio exactamente a 15 cm a la izquierda del centro de la diana. Esto es un caso de 0% de exactitud y 100% de precisión.

Si tuviéramos que presentarnos a un concurso en 1 mes, ¿con cual jugador iríamos?

En condiciones ideales la solución menos arriesgada es el jugador 2 ya que con moverlo 15 cm a la derecha obtendríamos un 100% de exactitud y un 100% de precisión, o lo que es lo mismo, conseguiríamos un modelo perfecto aplicando un offset o bias al resultado de la predicción.

Una vez visto esto podemos pasar a las distintas técnicas de regresión existentes a día de hoy..
Para hablar de algoritmos válidos para el modelado de regresiones debemos diferenciar dos vertientes:
Algoritmos paramétricos: son aquellos que se basan en las operaciones con un vector de parámetros (w), los atributos actuales del suceso que queremos predecir y una función aplicada sobre ellos.
Un sistema de regresión paramétrica tendría la siguiente estructura: h(x) = F(a(x), w), donde h(x) es el modelo de predicción resultante, a(x) son los atributos del suceso x y w es el vector de parámetros que se aplica para obtener los resultados de la predicción.
Existen varios tipos de algoritmos de regresión paramétrica, cada uno de los cuales se ajusta a un tipo de problema:
  • Basados en funciones lineales
  • Basados en funciones polinómicas
  • Basados en funciones logarítmicas
  • Basados en funciones trigonométricas
  • Basados en funciones exponenciales
  • …. Y una combinación de todos ellos

Algoritmos no paramétricos: son aquellos algoritmos y técnicas que se aplican sobre sistemas dinámicos complejos que, aunque de naturaleza matemática, no se consiguen modelar por las técnicas anteriormente descritas. Son algoritmos iterativos en los cuales la predicción se realiza por aprendizaje. Es una forma de análisis de la regresión en el que el predictor no tiene una forma predeterminada, sino que se construye de acuerdo a la información derivada de los datos. Los ejemplos más conocidos de este tipo de algoritmos son las ANN (Artificial Neural Networks) y los árboles de regresión (Regression Tree).
Centrándonos en los Algoritmos Paramétricos de Regresión ¿dónde se encuentra la dificultad? Claramente se basa en la existencia de un conjunto de parámetros w, a priori desconocidos, que van a determinar la bondad de nuestras predicciones. ¿Pero cómo llegamos a definir estos?
Determinación del Vector de parámetros “w”.
Existen varias técnicas que permiten alcanzar la definición de tan preciado vector por medio de técnicas de “back propagation” y un training set, o lo que es lo mismo, ir corrigiendo los valores del vector de parámetros, en la dirección apropiada, para aproximarnos cada vez más al resultado esperado.
  • Mean Square Error minimization (MSE): se basa seleccionar un w aleatorio bajo y minimizar la diferencia cuadrática del resultado obtenido con respecto al resultado esperado (wi+1 = wi * E(F(a(x)W) – h(x)) donde la función error E = ½ Sum(x : (f(x)-h(x))2
  • Delta Rule (LSE): basada en el caso anterior varia la función de error siendo esta la derivada en W de E(f(x), h(x))
Estas técnicas se aplican normalmente de forma iterativa (ejemplo Gradient Descent).
En estos casos surge un nuevo concepto denominado, Factor de Aprendizaje, que se basa en limitar la modificación de los parámetros para acercarse poco a poco a la solución.
Otro problema que nos podemos encontrar es el de los, ya famosos, mínimos locales.
Es un viejo conocido en AI (Artifical Intelligence) y el problema radica en la posibilidad de poder encontrar la mejor solución desde tu punto de partida pero no la mejor solución real.
Pongamos un ejemplo.
Supongamos que estamos en la montaña y tenemos como objetivo descender al punto mas bajo de la cordillera. Utilizando las formulas anteriores puede llegar un momento en el que estemos en el punto mas bajo desde donde nos encontramos y cualquier paso que demos suponga ascender y, por tanto, sea una alternativa peor. A esto se le llama mínimo local.
Solucionar este problema es relativamente sencillo. Simplemente debemos probar a empezar desde puntos distintos y seleccionar luego la solución mejor, en nuestro caso la mejor combinación de W a partir de distintas W0. Esto no garantiza alcanzar el mínimo global pero, normalmente, ofrece una solución muy aproximada a este (en caso de no encontrarlo).
Con todo esto, ¿ya esta todo resuelto? Lo cierto es que no.
Las regresiones paramétricas (lineales, linealizadas, segmentadas ..) son la base más utilizada para los problemas de regresión, sin embargo, en los sistemas complejos reales la salida de un elemento o el comportamiento de éste viene condicionado por el comportamiento de múltiples "influencers".
Estos elementos condicionan el comportamiento de nuestro elemento a modelar de forma que, desde nuestro punto de vista y desde el punto de vista de un sistema de regresión paramétrica, se comportan de forma errática, aunque no sea cierto.
En este caso h(x) sería, por tanto, la combinación de múltiples f(x) que, según su influencia en un momento dado, darán un resultado u otro. Para este enfoque, técnicas de modelado no paramétricos como ANN o Regression Trees suelen obtener mejores resultados.
Otro gran problema es la selección de los datos debemos tener en cuenta para poder generar un modelo predictivo válido. Supongamos la propagación del agua en un canal o un río. ¿Cómo y cuando impactaría la apertura de una compuerta de una presa en un punto situado a 50Km? ¿Cómo y cuando impactan unas lluvias torrenciales en un punto sobre otro punto concreto del cauce?
Estos problemas pueden ser modelados mediante algoritmos de regresión pero es necesario inyectarle al modelo todos los datos significativos desde que se abre la compuerta o descarga la tormenta hasta que realmente llega el efecto debido a la velocidad de propagación del agua, no solo los de sus predecesores más cercanos.
Todos estos temas las iremos avanzando en próximos posts para poder ir desgranando el problema real que nos marcamos como objetivo.