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.

jueves, 15 de septiembre de 2016

Sistemas Dinámicos





Las técnicas analíticas de regresión jugarán un papel fundamental en la resolución de nuestro problema. Recordemos la primera cuestión que queríamos resolver:

¿Es posible realizar un producto de ámbito general para la toma de decisiones predictiva y automática partiendo de una topología de red, una caracterización de los elementos, una algorítmica adecuada y existente y unas series históricas de datos?

Cuando lanzábamos esta pregunta, irremediablemente, estamos hablando en un porcentaje muy alto de sistemas dinámicos de naturaleza continua pero, ¿qué es un sistema dinámico?

“Un sistema dinámico es aquel cuyo estado evoluciona con el tiempo. El comportamiento en dicho estado se puede caracterizar determinando los límites del sistema, los elementos y sus relaciones; de esta forma se pueden construir instrumentos que buscan representar el comportamiento del sistema”.

Hay miles de ejemplos de sistemas dinámicos a nuestro alrededor; el curso del agua en un río, la trayectoria y evolución de una nube, una cadena de producción de una fábrica, el comportamiento de un individuo en un entorno, etc. en los que si pudiésemos medir todas las variables que afectan al sistema y tuviésemos la suficiente capacidad de cálculo, en teoría, podríamos saber cómo se comportaría en el siguiente instante de tiempo. A este enfoque en el que se reproducen los comportamientos físicos de un objeto en un entorno se le denomina “Simulación”.

Este enfoque es muy exacto y preciso pero presenta un problema; ¿somos capaces de obtener y calcular todos los datos y variables que, en cada momento, afectan a cada individuo del sistema modelado? En algunos casos  pero, para sistemas físicos complejos, se tiene que trabajar con un conjunto reducido de datos para predecir qué va a ocurrir.

Existe un segundo enfoque denominado “Modelado”. Este enfoque no trata de imitar el comportamiento físico de un sistema sino de generar modelos matemáticos (conocimiento) que permitan descubrir el estado final (inferencia) independientemente de cuales sean las leyes físicas que producen que el sistema pase de un estado et a un estado et+1.

Para sistemas complejos con un conjunto limitado de datos este último enfoque suele dar mejores resultados.

Adicionalmente incluiremos un par de conceptos más que nos ayudarán a comprender los algoritmos y técnicas de regresión que necesitaremos para dar respuesta a la cuestión planteada.

Sistemas dinámicos de naturaleza discreta en el tiempo: son aquellos en los que la variación del estado se produce a intervalos concretos del tiempo, esto es, a pequeños lapsos de tiempo no variando su estado entre paso y paso. Los sistemas.

Sistemas dinámicos de naturaleza continúa en el tiempo: son aquellos en los que la variación del estado se produce continuamente.

Aquí se nos presenta el primer problema a resolver. La mayoría de los sistemas productivos industriales son sistemas continuos (energía, agua, cadenas de producción de alta velocidad, etc.) pero la capacidad de medir los datos mediante sensores (IoT) es discreta en la mayoría de las instalaciones (adquisición de datos minutal, cinco-minutal, quince-minutal, horaria, diaria, etc.).

¿Trabajaremos entonces sobre sistemas dinámicos discretos o continuos?

En nuestro caso trataremos normalmente sistemas continuos pero, en función del objetivo del análisis y de los datos disponibles abordaremos una técnica denominada discretizar, que se basa en transformar una distribución continua de datos en discreta con la mínima pérdida de información.

Otro concepto importante es si el sistema dinámico es lineal o no.

Un sistema dinámico es de naturaleza lineal si se puede resolver (predecir) mediante ecuaciones diferenciales lineales según la siguiente formula:

 xt  = ak(xt)yk


Donde x cambia con el tiempo. Tanto a como x pueden ser elementos de  en un espacio vectorial Rk para permitir análisis multi-dimensionales (múltiples variables).


Los sistemas no lineales son mucho más difíciles de analizar y a menudo exhiben un fenómeno conocido como Caos (exhiben un comportamiento muy complicado en intervalos grandes de tiempo), con comportamientos totalmente impredecibles por lo que tiene  que ser modelados por medio de otro tipo de técnicas basadas en el aprendizaje (por ejemplo, Redes Neuronales).

miércoles, 17 de agosto de 2016

Algoritmos de Clasificación




Como comentamos en la anterior sección vamos a dedicar una serie de entradas a  explicar los conceptos básicos necesarios para abordar el problema real a modelar.

Esta entrada la dedicaremos a los Algoritmos de Machine Learning de Clasificación. 

Estos algoritmos, aplicables al tanto al análisis de datos de negocio tradicional (DataMining) como a grandes volúmenes de datos (Big Data), nos permitirán predecir la clase o categoría a la que pertenece una instancia del dominio. Sin embargo predecir o "adivinar" implica "incertidumbre" por lo que es necesario conocer no solamente las técnicas básicas sino, también, saber evaluar el grado de certidumbre que dicho modelo nos arroja.

Tipos de algoritmos

  • Árboles de decisión (Decision trees)

Es un tipo de modelo de los denominados jerárquicos ya que va dividiendo el dominio en distintos subdominios o regiones (nodos) hasta llegar a una condición de parada (hojas). 
En el proceso de generalización, esto es "predicción", se irá evaluando cada instancia a través de las distintas condiciones del árbol hasta llegar a un nodo hoja que determinará su clase. 

El proceso asociado a hacer crecer el árbol desde su raíz (root) hasta sus hojas (leaves) se le denomina "growing" y a la optimización para simplificarlo se le denomina "pruning" (poda).

Es muy importante controlar tanto el crecimiento como la forma de dividir el árbol, por ello hay que tener en cuenta un criterio de parada (que controle cuánto va crecer como máximo nuestro árbol) y cual va a ser nuestra estrategia de división de nodos (univariable, multivariable, basada en distribuciones probabilísticas balanceadas, ..)

Estos modelos son muy fáciles de leer y comprender por lo que se ha extendido su uso en los últimos 30 años.
  • Naïve Bayes
Basados en el principio de "Probabilidad Total" son algoritmos y modelos puramente probabilísticos. Por su simplicidad siguen teniendo cierto peso en los procesos de análisis, sobre todo,  en las clasificaciones de texto.

  • Clasificadores Lineales
Basados en los mismos principios que la "regresión lineal", estos modelos buscan encontrar una función, de naturaleza lineal, que aplicada a los datos, nos indique si pertenece a una categoría u otra. Es un clasificador paramétrico y, si bien es uno de los primeros mecanismos de inducción que surgieron con la aparición del concepto AI (Artificial Intelligence) por los años 50, en la actualidad no es de los más demandados.


  • Instance Based Learning o K-neighbours

Es la técnica más parecida a nuestra forma habitual de resolver problemas computacionales. Utilizamos los datos históricos almacenados en, normalmente, nuestras bases de datos para, en base a un valor definido como K, realizar la comprobación del valor que le corresponde al suceso que queremos clasificar mediante una función de distancia y una función de agregación. A modo de ejemplo si tenemos una clasificación de un valor de mercado de una vivienda (Alto, medio o bajo) con un algoritmo de k-neighbours con k= 5 buscaremos los datos almacenados de las 5 viviendas más cercanas a la propiedad que queremos valorar (función de distancia) y obtendremos la moda de sus valores de clasificación (función de agregación) para obtener así la clasificación estimada de la nueva propiedad.

  • SVM o Support Vector Machines
El concepto es tan sencillo como compleja su formulación matemática. Se basa en separar dos conjuntos de datos por una linea o plano que maximice las distancia entre los conjuntos de datos. El problema viene asociado a que normalmente los conjuntos de datos no son linealmente separables, pero aquí, la complejidad matemática nos aporta la solución. Dentro de esta formulación compleja hay una parte concreta que determina la similaridad de los sucesos y, modificando esta, se puede conseguir separaciones complejas de datos tales y aplicarla a temas tan complejos como la diferenciación de imagenes o la similaridad de cadenas de texto. A estas modificaciones las denominaremos Kernels o K(x).

  • Ensamblaje o Boosting
Ya lo dijeron en su momento. Divide y vencerás y la solución más sencilla suele ser la mejor (Principio de la navaja de Occam) . La técnica de Boosting no es más que un método matemático para unir modelos simples con un rendimiento "débil" para, trabajando juntos, obtener un rendimiento superior al de un modelo más complejo. ¿Ventajas? Dos principalmente. Al trabajar con modelos simples la necesidad de recursos suele ser menor y es mucho menos sensible al overfitting que otros algoritmos. Como desventaja ... hay que tener cuidado con el llamado "ruido rosa (Pink noise)", esto es, el ruido o errores en los datos que se distribuye de forma uniforme.


Conceptos importantes



A la hora de abordar problemas de clasificación y según el algoritmo utilizado deberemos tener en cuenta una serie de aspectos que, si bien solo enunciamos, es necesario comprender.

Misclassification Cost: es el coste de un error de clasificación. 

Pensemos en el mundo real, ¿Cuestan lo mismo y tienen el mismo impacto todos los errores?. Claramente no, por tanto, para que el modelo generado pueda predecir clasificaciones de la forma más adecuada tiene que tener en cuenta estos aspectos e incorporarlos a su modelo de decisiones minimizando así el error en aquellas con un a mayor coste, esto es, obteniendo el óptimo global.

Modelo de evaluación: es la forma en la que se va a garantizar que un modelo de clasificación, realmente, va a funcionar dentro de unos parámetros definidos más allá de las instancias del conjunto de datos de aprendizaje. 

  • Matriz de confusión: asociado al modelo de evaluación nos indica el número de aciertos y falsos positivos (aka type I) o negativos (aka type II) generados por el modelo.
  • Análisis ROC: basado en el análisis gráfico de los resultados porcentuales de falsos positivos (eje x) frente a verdaderos positivos (eje y) nos permite ver el rendimiento del modelo y su evolución.

Casos de Uso

Pero vamos al meollo de la cuestión ¿Para que me pueden servir a mi estas técnicas?.

La mayoría de los algoritmos de clasificación que se usan en la actualidad son binarios, esto es, 0/1, True/False. Parece tan simple como inútil en un mundo tan complejo como en el que nos encontramos actualmente .... ¿Seguro?. 

Reformulemos la cuestión. 

"La mayoría de los algoritmos de clasificación que se usan en la actualidad son binarios, esto es .."

  • Decisiones Go/No Go.
  • Decisiones asociadas a Riesgo asumible/ Riesgo no asumible.
  • Decisiones asociadas a comportamiento normal / detección de comportamiento anómalo.
  • Alarmas asociadas a riesgo de fallo / no riesgo de fallo.
  • Predicciones asociadas a ruptura de stock / No ruptura de stock.
  • Predicciones asociadas a ruptura de planificación / No ruptura de planificación.

Parece que el asunto cambia y podríamos poner muchos más ejemplos.

En nuestro día a día tomamos cientos de decisiones de naturaleza binaria debido a que es nuestra forma natural de decisión (Si/No). La aplicación de estas técnicas es una extensión natural de nuestro comportamiento pero permitiendo, a través de los algoritmos y las capacidades de computación, tomar estas decisiones de forma mucho más rápida (en la mayoría de los casos es imposible para el cerebro humano, incluso con la ayuda de las herramientas actuales, manejar la complejidad real de todas las variables y relaciones implicadas en la decisión) y con tiempo suficiente para planificar una estrategia de mitigación o contingencia.

"El tiempo es oro" y estas técnicas son oro para los negocios en forma de ventaja competitiva e incluso supervivencia.

A partir de aquí, es cada uno desde su negocio y su problemática concreta el que debe evaluar donde y para qué puede utilizar estas técnicas para hacer sus negocios más competitivos y adecuados al contexto actual.