Máster en Estadística Aplicada Departamento de Estadística e Investigación Operativa Universidad de Granada Técnicas de M achine Learning para el P ost-P roceso de la predicción de la Irradiancia Trabajo de Investigación Fin de Máster Nuria Victoria Castillo González Septiembre 2015 Máster en Estadística Aplicada Departamento de Estadística e Investigación Operativa Universidad de Granada Técnicas de Machine Learning para el Post-Proceso de la predicción de la Irradiancia Global que incide sobre el plano Horizontal a nivel de la superficie terrestre (GHI) y la Irradiancia Directa en la incidencia Normal (DNI) Trabajo Fin de Máster presentado por Dª Nuria Victoria Castillo González y dirigido por el profesor D. Ramón Gutiérrez Sánchez Porque sin ellos yo no sería quien soy hoy. Porque ellos me otorgaron la oportunidad de meterme en “este mundo de locos”, a pesar de no estar muy de acuerdo. Porque me han aguantado todos mis berrinches y neuras. Porque han confiado en mí, cuando ni yo misma lo hacía. Gracias R ESU M EN En los últimos años ha cobrado gran importancia las fuentes de energías de renovables, como es la energía fotovoltaica, la energía procedente de la radiación solar; una energía, que al contrario que la energía eólica, está aún muy poco estudiada. Esta energía solar es recibida de manera abundante pero con una gran variabilidad, debido a factores climatológicos; de este hecho nace la importancia de predecir este recurso de manera detallada. Actualmente existen diversos modelos matemáticos encargados de dar una predicción de radiación solar, aunque se ha comprobado que existe cierto grado de error de estimación que, de poder corregirse, aumentaría significativamente la energía obtenida de la radiación solar. Para este fin, hay abiertas diferentes líneas de investigación, entre ellas la que aquí se estudia que es el posproceso. El posproceso de predicción de Irradiancia es el procedimiento de corrección y cálculo de la predicción de Irradiancia posterior a su estimación. Por otro lado, existe un campo de las matemáticas que aunque teóricamente se había trabajado desde hace décadas, no ha sido hasta nuestros tiempos, gracias al cálculo computacional, cuando se le ha podido sacar un buen partido práctico a toda esa teoría matemática. Este campo al que nos referimos es el Machine Learning o Aprendizaje Automático. Este campo se encarga de desarrollar técnicas que permitan a los programas a aprender. Es decir, se trata de crear programas capaces de generalizar comportamientos a partir de una información suministrada en forma de ejemplos. En muchas ocasiones el campo de actuación del aprendizaje automático se solapa con el de la estadística, ya que las dos disciplinas se basan en el análisis de datos. El objetivo de este estudio es poder crear un modelo de posproceso de predicción a partir de datos meteorológicos reales observados, es decir, a partir de unos datos (ejemplos) crear un modelo con técnicas de aprendizaje automático que aprenda a corregir el error cometido en la predicción. Para ello se cuenta con datos observados y modelados de diferentes emplazamientos de España y la técnica de Machine Learning usada es Random Forest, una técnica tanto de clasificación como de regresión basada en árboles de decisión tomados de forma aleatoria e igualmente distribuidos. Pero este estudio de posproceso va un paso más allá, debido a que en investigaciones anteriores se ha observado en los datos que el error cometido en la predicción puede depender del índice de cantidad nubosa; esto es, la cantidad de nube esperada, si se espera un día despejado, parcialmente nuboso o totalmente cubierto. Se ha observado, que en días de poca nubosidad ese error es menor que en días parcialmente cubierto. Por tanto, en este estudio se ha realizado un posproceso basado en el tipo de cielo, entendiendo como tipo de cielo la cantidad de nubes esperada. Ya que no es el mismo error en una situación que en otra, no se va a realizar la misma corrección en un tipo de cielo que en otro. De esta forma, nuestro estudio se basa en clasificar los datos atendiendo al tipo de cielo y basándonos en esa clasificación, crear para cada categoría un modelo que aprenda automáticamente a corregir el error cometido a partir de unos datos observados. Para finalmente, dar una predicción de Irradiancia corregida. Por último, se comparan de manera estadística y visual los resultados – los datos de predicción antes del posproceso y los datos posprocesados – y se comprueba si realmente ha habido corrección y si esa corrección es significativa. ÍN D IC E G EN ER A L INTRODUCCIÓN 1. Introducción………………………………..……………………………… 01 METODOLOGÍA 2. Machine Learning…………………………….………………………….. 06 3. Árboles de decisión ……………………………………………..……… 10 4. Random Forest …………………………………………………..……… 13 5. Modelos 5.1 WRF …………………………………………………………..……… 16 5.2 Cielo despejado de Bird…………………………………..……… 18 APLICACIÓN 6. Aplicación de las Técnicas de Machine Learning en el Post-Proceso 6.1. Planteamiento…………………………………………………….. 29 6.2. Los datos…………………………………………………………….. 30 6.3. El modelo……………………………………………………………. 36 6.4. Resultados………………………………………………………….. 39 CONCLUSIÓN 7. Conclusión…………………………………………………………………. 45 ANEXOS 8. Programación computacional en lenguaje de programación libre Python………………………………………………………………… 48 BIBLIOGRAFÍA 9. Bibliografía…………………………………………………………………. 59 IN TR OD U C C IÓN Desde la más remota antigüedad se tiene constancia de la observación del cielo para la predicción del tiempo atmosférico, los antiguos egipcios estudiaban la crecida del río Nilo en función del movimiento de las estrellas, los babilonios predecían el tiempo de acuerdo a patrones de nubes y guiándose por el aspecto y color del cielo, hace más de 3000 años los chinos establecieron un calendario agrícola basado en acontecimientos meteorológicos… Actualmente, la predicción meteorológica es cada día más importante en la sociedad. Con la meteorología se puede conocer cualquier factor climático y su impacto sobre un ecosistema específico; permite conocer los gradientes de presión, temperatura, densidades del aire, con los cuales se puede conocer la variación del clima; es importante para diversas profesiones y trabajos como son agricultor, piloto de avión,… La predicción meteorológica es usada en muchos sectores como las aerolíneas, edificios inteligentes, medioambiente, energía, agrometeorología, sanidad, turismo, etc. Por todo esto la demanda de información meteorológica fiable y de calidad es cada vez más alta. Esta predicción meteorológica adquiere elevada importancia en el campo de las Energías Renovables. La energía solar es la fuente de energía renovable primordial del planeta. Las otras fuentes energéticas, como la energía hidroeléctrica o la energía química almacenada en combustibles, son meras transformaciones de la energía solar, que ocurren en escalas de tiempo pequeñas o grandes. El planeta recibe energía solar de manera abundante, sin embargo, su disponibilidad presenta grandes variaciones temporales y espaciales y por lo tanto el diseño de plantas que utilicen directamente la energía solar requiere de conocer la distribución de este recurso a un gran nivel de detalle espacial y temporal. La radiación emitida por el sol es la principal fuente de energía en el sistema terrestre. De hecho, la mayor parte de los movimientos de la atmósfera y el océano toman su energía del sol transportando energía desde las zonas tropicales a las zonas polares de manera natural en el planeta. 1 Si nos ubicamos fuera de la atmósfera terrestre, la radiación que recibimos del sol de manera perpendicular a sus rayos es en promedio . La energía solar es en parte absorbida, reflejada y dispersada por las nubes, las partículas (o aerosoles) y las moléculas que componen la atmósfera terrestre. De esta manera la atmósfera (a través de su composición), influencia la cantidad de radiación solar que llega a la superficie del planeta en cada punto y en cada momento. Por lo tanto, para conocer la radiación que alcanza la superficie terrestre, es necesario conocer las características de la atmósfera y su composición en cada lugar del espacio. Los principales procesos involucrados en la modificación de la radiación que recibe la superficie son la absorción de la radiación, principalmente debido al ozono y al vapor de agua, y la dispersión de la radiación por efecto de las nubes. Como ya se ha mencionado, cuando la radiación solar entra en la atmósfera una parte de la energía incidente se dispersa y otra parte es absorbida. La radiación dispersada es llamada radiación difusa (DIF). Una parte de esta radiación difusa regresa al espacio y otra parte alcanza la tierra. La radiación que llega de forma directa a la superficie terrestre desde el sol es conocida como Irradiancia Directa en la Incidencia Normal (DNI), esta radiación se mide sobre una superficie orientada directamente hacia el sol, de tal manera que los rayos solares resultan siempre perpendiculares a dicha superficie. En cambio, se calcula la Irradiancia Global Horizontal (GHI) como [ siendo ] el ángulo de incidencia, entendiendo por Irradiancia la energía de la radiación solar que se recibe en una superficie determinada en un instante dado. El conocimiento de la irradiancia espectral (directa y difusa) que llega a la superficie de la tierra es importante para el diseño de ciertos usos de energía solar como es la energía fotovoltaica. La necesidad de incrementar la utilización de la energía solar como fuente de generación eléctrica, requiere del conocimiento espacial y temporal de la radiación solar disponible en la superficie terrestre. Dicho requerimiento surge como consecuencia a que la cantidad de radiación solar, se encuentra condicionada por una serie de factores que ocasionan su variabilidad. En este 2 sentido, los factores más relevantes son: las condiciones astronómicas y temporales, las condiciones geográficas y las condiciones atmosféricas. Las condiciones astronómicas y temporales se refieren a la variabilidad en la intensidad de la radiación ocasionada principalmente por movimientos de rotación y traslación de la Tierra alrededor del Sol. De este modo, las variaciones en la constante solar ocasionadas por las fluctuaciones de las manchas solares, la actividad magnética solar, los cambios en la distancia Tierra-Sol ocasionados por la excentricidad de la órbita terrestre, y el movimiento de precesión de los equinoccios que ocasionan las variaciones estacionales, representan el 88% de la variabilidad de la radiación solar. Por su parte, las condiciones geográficas se refieren al comportamiento climático del lugar de incidencia y se caracterizan por la altitud, latitud, longitud y orografía del lugar. Finalmente, las condiciones atmosféricas establecidas por la interacción de las masas de aire de origen marítimo o continental, con sus diferentes propiedades ópticas dadas por el contenido de aerosoles, vapor de agua, nubes, concentración de dióxido de carbono ( ) y ozono ( ), influyen significativamente. El efecto filtro producido por los procesos atmosféricos como la absorción o la dispersión atmosférica, ocasiona la atenuación o extinción atmosférica de la radiación solar. Como consecuencia de la variabilidad de la radiación solar, el mecanismo establecido para mejorar la calidad de esta información y controlar su fluctuación espacio-temporal lo representa la predicción meteorológica de la radiación solar. A diferencia de la energía eólica, la predicción de la radiación solar aún se encuentra en etapa de desarrollo, más aún en la aplicación del pronóstico y su implementación en la gestión de la energía eléctrica. La base del pronóstico de la radiación solar para aplicaciones energéticas con un alcance temporal de 48 horas, lo representan los modelos numéricos de predicción meteorológica del tiempo o conocidos en Inglés como “Numerical Weather Prediction” (NWP). Los modelos NWP son una representación computacional física y dinámica de la atmósfera y de la superficie terrestre, que plantean un conjunto de principios de conservación de la masa, del momento y de la energía, que gobiernan el estado atmosférico respecto a un sistema de coordenadas cartesianas discretas. 3 Por lo tanto, la modelización de la radiación solar en los modelos NWP se realiza a través de un conjunto de ecuaciones que expresan las interacciones físicas que ocurren entre la energía radiante y el sistema Tierra-Atmósfera. Los modelos resuelven estas interacciones a través de esquemas explícitos de transferencia radiativa. Para tal efecto, están condicionados por una potencia de cálculo suficiente para predecir la energía solar superficial en una amplia área geográfica con elevadas resoluciones temporales y espaciales. Existen diferentes estudios que investigan la optimización de modelos NWP para la simulación de la radiación solar y en general, se observa una sobrestimación sistemática de las simulaciones al incrementar la resolución espacial de los modelos NWP, debido a la compleja microfísica de las nubes (altura y propiedades ópticas), y a una especificación incorrecta del espesor óptico de los aerosoles. Para hacer frente a dichas limitaciones se han propuesto diversas metodologías de post-proceso, que interpretan objetivamente las variables de las simulaciones con las variables observadas. En concreto, nosotros nos basaremos en el tipo de cielo (despejado, parcialmente cubierto o totalmente cubierto) pronosticado y en los datos observados para, junto a técnicas de aprendizaje por machine learning, corregir esa sobreestimación. Usaremos la variable ‘tipo de cielo’ dado que nos permite clasificar la predicción en tres grupos más manejables de datos y puesto que sabiendo la cantidad de nubes, podemos determinar la cantidad de radiación solar que incide sobre la superficie terrestre. Además, paralelo a este estudio se está trabajando en pronóstico de radiación con Cámaras de cielo para el estudio de las nubes y nos va a ser de gran ayuda tener técnicas de post-proceso atendiendo a la cantidad nubosa. En base a lo anterior, el presente trabajo de investigación se enfoca en el desarrollo de un post-proceso en el sistema de pronóstico de radiación solar a partir de las simulaciones del modelo meteorológico Advanced Research of Weather Research and Forecasting (WRF-ARW) y usando técnicas de Machine Learning. El modelo meteorológico de meso-escala WRF-ARW representa el desarrollo de un proyecto planteado por el National Center of Atmospheric Research (NCAR) y el National Centers for Environmental Prediction (NCEP) de 4 Estados Unidos. Actualmente, el WRF-ARW incorpora los últimos avances en modelización meso-escalar y es el modelo de referencia a nivel mundial. En definitiva, el desarrollo de un sistema de pronóstico de radiación solar con un alcance temporal a corto plazo (24 horas), constituye un importante potencial que podrá ayudar a satisfacer los requerimientos de una mayor integración de la energía solar en la infraestructura de un sistema eléctrico convencional. 5 M ETOD OLOG ÍA C apítulo 2 M A C H IN E LEA R N IN G El Machine Learning es una disciplina científica que trata de que los sistemas aprendan automáticamente. Aprender, en este contexto, quiere decir identificar patrones complejos en millones de datos. La máquina que realmente aprende es un algoritmo que revisa los datos y es capaz de predecir comportamientos futuros. El Machine Learning es, por tanto, un proceso de inducción del conocimiento, es decir, un método que permite obtener por generalización un enunciado general a partir de enunciados que describen casos particulares. Machine Learning o Aprendizaje Automático es aprender de los datos, es descubrir la estructura y los patrones que subyacen en ellos. El objetivo principal del aprendizaje automático es la extracción de la información contenida en un conjunto de datos con el fin de adquirir conocimiento que permita tomar decisiones sobre nuevos conjuntos de datos. Formalmente, se define como: “Un sistema aprende de la experiencia E con respecto a un conjunto de tareas T y una medida de rendimiento R, si su rendimiento en T, medido según R, mejora con la experiencia E” Estos algoritmos de aprendizaje se basan en una serie de datos sobre los que aprender para luego aplicar la experiencia adquirida en otros conjuntos. Es necesario evaluar su rendimiento sobre un conjunto distinto a aquel con el que el sistema fue entrenado para obtener una estimación válida de su capacidad de generalización ante nuevos ejemplos. De este modo, al conjunto de datos disponible se le divide en dos subconjuntos: por un lado tendremos el conjunto de entrenamiento (conjunto train) y por otro lado el conjunto de validación o conjunto test. De esta forma, el modelo se genera a partir de los datos de entrenamiento y se evalúa sobre el conjunto test, sobre el cual se puede medirá 6 la precisión del modelo. El resultado obtenido sobre este conjunto es una buena aproximación al que se espera obtener para datos nuevos. Por tanto, la generalización es uno de los aspectos clave en el diseño de algoritmos de aprendizaje automático pero a la vez los modelos deben ajustarse al conjunto de entrenamiento y captar toda su información. Surge así el problema de la compensación sesgo-varianza; el sesgo mide el error medio del modelo utilizando distintos conjuntos de entrenamiento mientras que la varianza mide la sensibilidad del modelo a pequeños cambios en los datos de entrenamiento. Es decir, modelos muy complejos tienen sesgo bajo y varianza alta, lo cual se conoce por el término overfitting. Por otro lado, modelos simples tienen sesgo alto pero varianza muy baja. El overfitting o sobreajuste se da cuando al añadir niveles del árbol de decisión, las hipótesis se refinan tanto que describen muy bien los ejemplos utilizados en el aprendizaje, sin embargo, al evaluar los ejemplos se produce error. En otras palabras, clasifica muy bien los datos de entrenamiento pero luego no sabe generalizar el conjunto test. Es debido a que aprende hasta el ruido del conjunto de entrenamiento, adaptándose a las regularidades del conjunto de entrenamiento. Por ello, el overfitting será un indicador de evaluación importante a tener en cuenta en el estudio. Teniendo esto en cuenta, el proceso a seguir para la construcción de un sistema de aprendizaje automático puede dividirse en: 1. R ecolección de los datos. Suele constituir un proceso tedioso que ocupa gran parte del desarrollo del sistema puesto que generalmente se hace necesario recopilar grandes cantidades de datos para poder asegurar que la muestra usada es representativa del conjunto estudiado. 2. Elección de características. Se trata de un paso crítico dado que es necesario extraer aquellas variables que sean útiles para distinguir los patrones de cada categoría. 3. Elección del m odelo. En este paso se elegirá el modelo que más se ajuste a nuestro problema y que consiga el rendimiento esperado sobre el conjunto de test. Este modelo, entre otras cosas, deberá mantener el equilibrio sesgovarianza explicado anteriormente. 7 4. Entrenam iento del m odelo. En esta fase se construye el clasificador, cuyos parámetros se ajustan a partir del conjunto de datos de entrenamiento. Encontrar los parámetros que se ajusten a nuestro modelo constituye un problema de optimización ya que el objetivo es siempre minimizar una cierta función objetivo. 5. Evaluación del m odelo. Haciendo uso del conjunto test, se fija una medida de error y se obtiene el rendimiento del modelo. Si el resultado no es el esperado, se deberá probar retrocediendo a cada uno de los puntos anteriores y retomar el proceso de nuevo. En términos matemáticos, el principio del Aprendizaje Automático o Machine Learning consiste, en el contexto supervisado, a partir de una muestra de aprendizaje { { }} constituida por n realizaciones de un par de variables aleatorias una función { } con la cual, dada una nuevo vector de entrada , se pueda predecir con cierto grado de certeza la variable observación , construir de , a la variable explicativa o input y a la variable . Para cada se le llama variable de entrada o variable dependiente u output. Cuando la variable dependiente es discreta o categórica se habla de un problema de clasificación y cuando es continua de un problema de regresión. Es decir, atendiendo al tipo de objetos que se intenta predecir, existen dos tipos de problemas: P roblem as de Clasificación: Intentan predecir la clasificación de objetos sobre un conjunto de clases prefijadas. Por ejemplo, clasificar si una determinada noticia es de deportes, entretenimiento, política, etc. P roblem as de R egresión: Intentan predecir un valor real. Por ejemplo, predecir el valor de la bolsa mañana a partir del comportamiento de la bolsa que está almacenado (pasado). Uno de los métodos de Machine Learning más ampliamente utilizados es el aprendizaje basado en árboles de decisión. Este es un método para la 8 aproximación de funciones de valores discretos, robusto frente a datos con ruido y capaz de aprender expresiones disjuntas. Existe una familia de algoritmos de aprendizaje por árboles de decisión: ID3, C4.5,… A su vez, basándose en estos árboles de decisión, se han creado métodos híbridos que construyen más de un árbol de decisión: Bagging, Random Forest, Boosting,… 9 C apítulo 3 Á R B OLES D E D EC ISIÓN El aprendizaje por medio de los árboles de decisión está basado en el principio de divide y vencerás. Sea una muestra definida como { donde { }} N es el número de elementos del conjunto de datos, C el número de clases distintas y el número de variables que definen los ejemplos conjunto. Cada uno de estos ejemplos se representa mediante un vector cual tiene asociada su correspondiente etiqueta de clase del , el y está definido por distintas variables, las cuales pueden ser numéricas (sus valores son números reales) o categóricas (toman valores en un conjunto finito en el que no existe ninguna relación de orden). Dichos vectores se conocen también como vectores de características. Un árbol de decisión es una secuencia ordenada de preguntas en las que la siguiente pregunta depende de la respuesta a la pregunta actual. Dichas cuestiones son formuladas sobre las variables que definen cada elemento con el fin de acabar asignándoles una determinada clase . Este procedimiento, con sus correspondientes preguntas y bifurcaciones, es representado de forma natural mediante un árbol. En un árbol de decisión, cada nodo del árbol es un atributo (campo) de los ejemplo, y cada rama representa un posible valor de ese atributo. El primer nodo se conoce como nodo raíz, el cual está conectado sucesivamente con el resto de nodos hasta alcanzar los nodos hoja, aquellos que no tienen descendientes. A cada nodo interno se le asigna una de las preguntas de la secuencia mientras que a cada nodo hoja le es asignada una etiqueta de clase. De esta forma, la pregunta del nodo raíz es formulada a todo el conjunto , el cual se va subdividiendo hasta alcanzar los nodos hoja, que constituyen una partición disjunta del espacio de características inicial. Esto ocurre porque dado 10 un nodo, una y sólo una rama será seguida por cada ejemplo del conjunto de entrenamiento. A continuación, se muestra un ejemplo gráfico de un árbol de decisión usado para un procedimiento de clasificación. No Sí No Sí No Sí En la imagen anterior tenemos un problema de aprendizaje automático de clasificación, en ella se ha representado un conjunto de datos en en el que distinguimos dos clases (círculos y cruces). Un posible árbol de decisión para dicho problema de clasificación es el que encontramos a su derecha, el cual define las cuatro regiones marcadas en el espacio de características. En este caso, sólo dos de todos los ejemplos representados serían incorrectamente clasificados por el árbol de la derecha (El círculo de la región la región y la cruz de ). Así mismo, se observa también como es clasificado uno de los datos cuya etiqueta se predice correctamente. Los árboles de decisión tienen buen rendimiento con grandes volúmenes de datos, ya que no requiere cargar todos los datos en memoria a la vez. El tiempo de cálculo escala bien con un número de columnas creciente linealmente. Las ventajas de los árboles de decisión es que es sencillo de entender y de interpretar, la generación de reglas es simple, reduce la complejidad del problema, y el tiempo de entrenamiento no es muy largo. Algunas de las desventajas son que si se comete un error en un nivel alto, los nodos sucesivos estarían mal creados. En la construcción de un árbol de decisión, lo más complicado es determinar en qué atributo basar un nodo ya que 11 si que existen muchas características, el algoritmo tendría muchas opciones de los datos de entrenamiento, y se construiría un modelo que no generalizaría bien con nuevos ejemplos, es el caso antes mencionado denominado overfitting. Sin embargo, los árboles de decisión pueden dar buenos resultados si se combinan con métodos Ensemble. Con estos métodos en vez de aprender un único modelo, se aprenden varios, y se combinan las estimaciones de cada modelo. Los métodos ensambles son combinaciones de modelos. En estas técnicas es necesario tanto definir cómo se van a crear modelos diferentes, como de que manera se van a combinar los resultados de cada uno de los modelos para producir la predicción final. El objetivo de los métodos ensambles es producir una mejor predicción que los modelos individuales (miembros individuales del ensemble). Los métodos ensambles más usuales son el Bagging, el Boosting y el Random Forest, en todos ellos se manipula el conjunto de entrenamiento, pero en cada caso se hace con una estrategia diferente. En Bagging se extraen muestras diferentes del conjunto de entrenamiento (muestras bootstrap), y se utilizan estas muestras bootstrap como si fuera el conjunto de entrenamiento verdadero. Por el contrario, en Boosting siempre se trabaja con el conjunto completo de datos. En Boosting se manipula los pesos de los datos en conjunto de entrenamiento para generar diversos modelos. En cada iteración, Boosting aprende un modelo que minimiza la suma de los pesos de los datos clasificados erróneamente. Finalmente, Breiman presentó un método ensamble denominado Random Forest donde se utiliza bagging junto a una selección aleatoria de atributos. En cada nodo de cada árbol del bosque, se selecciona aleatoriamente un subconjunto de los atributos disponibles en ese nodo y se elige el mejor de ellos de acuerdo al criterio de división empleado en el algoritmo base. El número de atributos seleccionado aleatoriamente es un parámetro de entrada. 12 C apítulo 4 R A N D OM FOR EST Random forest es una combinación de árboles de decisión en la que cada árbol depende de los valores de un vector aleatorio probado independientemente y con la misma distribución para cada uno de estos. El algoritmo para inducir un Random Forest fue desarrollado por Leo Breiman y Adele Cutler, siendo Random Forests su marca de fábrica. El término aparece de la primera propuesta de Random decision forests, hecha por Tin Kam Ho en 1995. El método combina la idea de bagging de Breiman y la selección aleatoria de atributos, introducida independientemente por Ho, Amit y Geman, para construir una colección de árboles de decisión con variación controlada. En los últimos años esta técnica ha tenido mucho éxito debido a una serie de características: 1. Con esta técnica se puede realizar tanto clasificación como regresión. 2. Se puede trabajar con problemas de aprendizaje supervisado y no supervisado 3. Se obtiene gran precisión en los resultados gracias a la generalización, en el cual muchos árboles ligeramente diferentes aportan información para obtener una medida más fiables 4. Tanto el entrenamiento como el test pueden implementarse en paralelo fácilmente. En pocas palabras, este método nos permite hacer de manera segura predicciones más precisas y sin la mayoría de los errores básicos comunes a otros métodos. Como se ha dicho anteriormente, el método Random Forest se basa en un conjunto de árboles de decisión. Es decir, una muestra entra por arriba del árbol y es sometida a una serie de test binarios en cada nodo (split) hasta llegar a una hoja, en la que se encuentra la respuesta. Por lo cual, esta técnica se puede pensar como una técnica para dividir un problema complejo en un conjunto de problemas simples. 13 En la fase de entrenamiento el algoritmo intenta optimizar los parámetros de las funciones de split a partir de las muestras de entrenamiento Para ello utilizamos la siguiente función de ganancia de información ( ) donde ∑ | | | | representa el conjunto de muestras que hay en el nodo a dividir, y los dos conjuntos que se crean de la escisión. La función son mide la entropía del conjunto, y depende del tipo de problema que abordamos. En el caso de la regresión utilizamos funciones de distribución de probabilidad continuas, llegando a la expresión ∑ donde (| |) ∑ ∑ (| |) es la matriz de covarianzas condicional. Un tipo de característica que podemos usar para buscar el mejor split del nodo son simples clasificadores lineales binarios. Para cada nodo ( donde ) es un vector que representa la muestra de entrada y son los parámetros a optimizar en el nodo . Concretamente vamos a comparar si un cierto valor es mayor o menor que un umbral. Estos valores deben ser optimizados en cada nodo realizando una búsqueda exhaustiva de las combinaciones. Sin embargo, es muy importante encontrar un compromiso entre esta optimización y mantener la aleatoriedad de algunos parámetros del algoritmo. Por un lado, puede ocurrir que no hayamos buscado suficientes combinaciones y los splits sean demasiado pobres. Por otro lado, debemos mantener cierta aleatoriedad en los parámetros para no obtener árboles correlados y perder el efecto de la generalización. 14 Por último, para obtener el resultado final a partir del resultado que nos proporciona cada árbol. El proceso es que cada hoja de cada árbol en la que cae la muestra no vista se puede ver como una predicción (distribución de probabilidad). Simplemente haciendo una media aritmética de cada distribución obtenemos el resultado que nos proporciona el forest completo. La cuestión de la medida de importancia de las variables es un punto crucial y delicado porque la importancia de una variable está condicionada a su interacción, posiblemente compleja, con otras variables. El RandomForest calcula dos medidas de importancia distintas. La primera, denominada MDA (Mean Decrease Accuracy), se basa en la contribución de la variable al error de predicción, es decir, al porcentaje de mal clasificados. El error de clasificación de cada árbol se calcula a partir de la parte de la muestra que ha quedado excluida de la submuestra utilizada en la construcción del árbol, generada por remuestreo. Para calcular la importancia de cada una de las variables que aparecen en un árbol se permutan aleatoriamente los valores de esa variable, dejando intactos el resto de variables, y se vuelven a clasificar los mismos individuos según el mismo árbol pero ahora con la variable permutada. La importancia en ese árbol se calcula como el aumento en el error de predicción resultante. Finalmente se calcula la medida MDA, como la media de estos incrementos en todos los árboles en donde interviene la variable. La segunda medida de importancia, denominada MDG (Mean Decrease Gini), se calcula a partir del índice de Gini. Éste es el criterio que se utiliza para seleccionar la variable en cada partición en la construcción de los árboles y que comporta una disminución de esta medida. La importancia de una variable en un árbol se mide como la suma de los decrementos atribuidos a esa variable y la importancia final, como la media en todos los árboles. 15 R andom Forest C lasiffier En un problema de clasificación supervisada se estudia un fenómeno representado por un vector acuerdo a un vector en que puede ser clasificado de de “etiquetas”. Un clasificador permite asignar un nuevo dato del cual no se conoce la etiqueta. Con tal fin, se maneras de dispone entrenamiento”, donde de { } es un suceso del fenómeno llamado ,y “conjunto de es la etiqueta que lo sitúa en la categoría (que se asume) correcta. El algoritmo Random Forest mejora la precisión en la clasificación mediante la incorporación de aleatoriedad en la construcción de cada clasificador individual. Esta aleatorización puede introducirse en la partición del espacio (construcción del árbol), así como en la muestra de entrenamiento. Como ya se ha comentado, el Random Forest comienza con una técnica de aprendizaje automático, con un árbol de decisiones. Citando a F.J. Soltero y D.J. Bodas en su artículo “Clasificadores inductivos para el posicionamiento web” el clasificador Random Forest: “Se basa en el desarrollo de muchos árboles de decisión. Para clasificar un objeto desde un vector de entrada, se pone dicho vector bajo cada uno de los árboles del bosque. Cada árbol genera una clasificación, el bosque escoge la clasificación teniendo en cuenta el árbol más votado sobre todos los del bosque.” Algoritmo: En Random Forest cada árbol individual se desarrolla de una manera particular: 1. Dado un conjunto de datos de entrenamiento de cardinalidad N, toma N ejemplos aleatoriamente con repetición (un bootstrap). Este será el conjunto de entrenamiento para crear el árbol. 2. Para crear cada nodo del árbol se utiliza únicamente una pequeña cantidad de las variables predictoras del problema. Si cada objeto tiene de entrada, se determina un número se seleccionan variables y para cada nodo del árbol variables aleatoriamente. La variable más relevante de este subconjunto elegido al azar se usa en el nodo. El valor de se mantiene 16 constante durante la expansión del bosque. Sin embargo, En el siguiente nodo, se eligen otras m variables al azar de entre todas las variables predictoras. 3. Cada árbol es desarrollado hasta la mayor extensión posible. No se realiza poda (pruning). Breiman muestra que el error del ensamble depende de dos factores: 1. La correlación entre dos árboles cualesquiera en el bosque. El incremento en la correlación produce un incremento en el error del bosque. La utilización de un subconjunto de variables elegidas al azar y de un boostrap de datos tiende a reducir dicha correlación. 2. La fuerza de cada árbol individual en el bosque. Un árbol con un error bajo es un clasificador fuerte. El incremento de la fuerza de árboles individuales decrementa el error del bosque. La utilización de árboles sin pruning va en este sentido. 17 R andom Forest R egressor Tenemos que el método Random Forest es una colección de árboles donde es el vector de entrada de longitud y son vectores aleatorios, independientes e idénticamente distribuidas. Los datos observados se asumen independientes de la distribución y comprenden n (p+1)-tuplas. Para la regresión, el predictor Random Forest es el promedio ponderado sobre el conjunto: ̅ Como ∑ , la Ley de los Grandes Números asegura ̅ ̅ La cantidad de la derecha es el error de la predicción o generalización, al que notaremos por . La convergencia de la ecuación anterior implica que el método Random Forest carece de overfitting. Ahora se define el error de predicción medio para un árbol en particular como asumiendo que para todo el árbol generado es imparcial, es decir, Entonces, ̅ donde para ̅ es la correlación ponderada entre residuos y independientes. Esta desigualdad señala que se requiere para que la regresión sea exacta: 1. Correlación baja entre los árboles del bosque. 2. Error de predicción bajo para cada uno de los árboles individuales. 18 La estrategia empleada para alcanzar este fin es: 1. Para mantener el error de cada árbol bajo, ‘cultivar’ los árboles hasta la profundidad máxima. 2. Para mantener la correlación residual baja: 2.1 ‘Cultivar’ cada árbol sobre un boopstrap simple de los datos que se entrenan 2.2 Especificar variables. Para cada nodo se seleccionarán m variables aleatorias. 19 C apítulo 5 M OD ELOS Un modelo numérico de predicción meteorológica permite, partiendo de un estado inicial con unas características atmosféricas dadas, simular la evolución atmosférica mediante la traducción, a través de métodos numéricos, de las leyes de la mecánica de fluidos y de la termodinámica. W R F (W heater R esearch Forecasting) El modelo de predicción WRF es un sistema de predicción numérica del tiempo a mesoescala de próxima generación diseñado para las necesidades de investigación y predicción operativa del tiempo atmosféricos. Cuenta con dos núcleos dinámicos, un sistema de asimilación de datos, y una arquitectura de software facilitando la computación paralela y extensibilidad del sistema. El modelo ofrece una amplia gama de aplicaciones meteorológicas a través de escalas de decenas de metros a miles de kilómetros. El esfuerzo para desarrollar WRF comenzó en la última parte de la década de 1990 y fue una asociación de colaboración principalmente entre el Centro Nacional de Investigación Atmosférica (NCAR), la Administración Nacional Oceánica y Atmosférica representado por los Centros Nacionales de Predicción Ambiental (NCEP) y el Laboratorio de Pronostico de Sistemas (FSL) -, el Organismo Meteorológico de la Fuerza Aérea (AFWA), el Laboratorio de Investigación Naval, la Universidad de Oklahoma, y la Administración Federal de Aviación (FAA). WRF puede generar simulaciones atmosféricas utilizando datos reales (observaciones, análisis) o condiciones idealizadas. WRF ofrece un pronóstico operacional flexible y una computacionalmente eficiente plataforma, al tiempo que proporciona los últimos avances en la física, modelos numéricos y de asimilación de datos aportados por los desarrolladores a través de la amplia comunidad de investigación. WRF está actualmente en uso operacional en NCEP, AFWA, y otros centros. 20 WRF es un modelo que comparte muchas cosas de MM5 – se trata de dos modelos meteorológicos, basado en las ecuaciones primitivas y no hidrostático. Utiliza un sistema de coordenadas vertical que sigue el terreno. Incluye física de nubes, diversas formulaciones del suelo, capa límite planetaria y radiación - pero que está programado de una forma mucho más estructurada y modular permitiendo mejoras y nuevas incorporaciones de una forma más simple. Existen dos versiones: WRF-ARW, que es una nueva versión mejorada de MM5, y WRF-NMM lo es a su vez del modelo meteorológico ETA. Al igual que MM5, WRF son modelos de dominio público y la comunidad de desarrolladores y usuarios es muy grande en todo el mundo. Estos modelos están siendo muy utilizados junto con diversos modelos de dispersión. El núcleo ARW (Advanced Research) del modelo meteorológico WRF se ejecuta dos veces al día (00 y 12 UTC). Este modelo toma las condiciones de contorno del modelo global GFS cada 3 horas y se ejecuta en 3 mallas con 36, 12 e 4 km de resolución. La malla de menor resolución cubre todo el SW europeo y una buena parte del Océano Atlántico con el objetivo de adaptar las condiciones de contorno al modelo WRF y así transmitirlas adecuadamente a las mallas de más resolución. Por debajo de esta malla, está una de 12 km de resolución cubriendo toda la Península Ibérica y que suministra condiciones de contorno a una malla de 4 km de resolución. En la ejecución de las 00 UTC, la malla de mayor resolución se ejecuta para las siguientes 72 horas, mientras que las otras mallas se ejecutan para las próximas 96 horas. En la ejecución de las 12 UTC todas las mallas se ejecutan 84 horas. 21 C IELO D ESP EJA D O D E B IR D La modelización de las componentes de la irradiancia solar en condiciones de cielo despejado es necesaria para muchas aplicaciones de la ingeniería, como pueden ser, el análisis de sistemas de energía solar o la determinación de cargas térmicas en edificios. A esta necesidad de disponer de modelos de radiación responden los modelos radiométricos. Uno de estos tipos de modelo radiométrico es el modelo de Bird para cielo despejado, que es el modelo que usaremos en este estudio. Bird y Hulstrom del Solar Energy Research Institute (SERI), desarrollaron este modelo a partir de la consideración de una serie de modelos de irradiancia directa normal para día claro. Combinando los resultados proporcionados por el programa SOLTRAN –este programa es utilizado para el cálculo riguroso de la transferencia de radiación solar, para generar resultados de DNI - con distintas ecuaciones del transporte se obtuvieron las expresiones de transmitancias y absortancias atmosféricas. El primero de los modelos presenta la siguiente expresión: El factor 0.9662 se añade para que los resultados sean comparables a los de SOLTRAN, además Bird y Hulstrom toman un valor para la constante solar de . Las expresiones de las transmitancias y absortancias se describen a continuación: [ ] [ [ Donde ] ] es la transmitancia de los gases uniformemente miscibles, es el coeficiente integral (para toda la banda) de atenuación de los aerosoles obtenido según, 22 Donde es el espesor óptico del vapor de agua, obtenido a partir de la cantidad de agua precipitable según la expresión Por último Bird y Hulstrom usan la masa de aire corregida por la presión que se obtiene a partir de la expresión de Kasten (1966) para la masa de aire relativa según: Donde y son, respectivamente, la presión atmosférica en el lugar y la presión atmosférica al nivel del mar. Y es el ángulo cenital expresado en grados. Con estas expresiones se puede simular una atmósfera detallada que describe muy bien una atmósfera real en un determinado lugar e instante con cielo despejado. 23 A P LIC A C IÓN C apítulo 6 A P LIC A C IÓN D E LA S TÉC N IC A S D E M A C H IN E LEA R N IN G EN EL P OSTP R OC ESO Actualmente se cuenta con una predicción de radiación (tanto de GHI como de DNI) la cual se ha observado que en ocasiones sobreestima, es decir, predice una radiación mayor de la que en realidad se obtiene. Esto, a largo plazo supone un error destacable en la predicción. Esta gráfica corresponde con un día “Despejado”. La línea verde corresponde con la GHI observada, la irradiancia real, y la roja con la GHI modelada por WRF. Como se observa, la irradiancia modelada es relativamente superior a la irradiancia observada. Se ve como en días de pocas nubes el modelo sobrestima ligeramente. 24 En este caso, la gráfica corresponde a un día “Parcialmente cubierto”. Se observa como, en este caso, el modelo WRF (línea roja) sobreestima en mucha mayor medida la irradiancia esperada. Por último, para GHI, un ejemplo gráfico de un día “Totalmente Cubierto”. Se observa, una vez, más la ligera sobrestimación que el modelo WRF hace de la GHI. 25 En el caso de Irradiancia directa (DNI) se obtiene esa misma sobrestimación. Aquí se ve un ejemplo de “día despejado” donde se puede apreciar la sobrestimación. Gráfica de DNI en un día “parcialmente cubierto”. La sobrestimación es elevada, llegando a sobrestimar 400 en un solo día. 26 Y lo mismo ocurre en un día “completamente cubierto” para DNI. Aunque la predicción de la que se dispone entra dentro de los márgenes aceptables de predicción con unos estadísticos de GHI DNI R2 0.76 0.27 ccp 0.90 0.70 rmse 141 290 rrmse 33.3 67.5 mae 87 197 rmae 20.7 46.0 mbe 56 138 rmbe 13.4 32.2 R2: Coeficiente de determinación ccp: Coeficiente de correlación de Pearson rmse: Error Cuadrático Medio rrmse: Error Cuadrático Medio Relativo mae: Error Absoluto Medio rmae: Error Absoluto Medio Relativo mbe: Error Bias Medio rmbe: Error Bias Medio Relativo El objetivo es siempre mejorar la predicción para poder generar unos datos más fiables y de más calidad. Este es el gran objetivo de las empresas que trabajan con energía solar fotovoltaica, porque, a diferencia de la energía eólica, el campo de la energía solar es un campo aun poco explorado; de ahí que en la actualidad haya números y diversos estudios sobre mejoras y nuevas técnicas de predicción de irradiancia solar. Como mencionábamos anteriormente, se ha observado que la predicción de la que disponemos a día de hoy sobreestima en ciertas ocasiones, más aún, se ha 27 observado que el error de la predicción es mayor en aquellos días donde la irradiancia había sido muy irregular, debido a pequeñas cantidades de nubes en movimiento, esto se explica en días de cielo parcialmente cubierto, puesto que en un día nublado (parcialmente cubierto) la irradiancia solar recibida es solo difusa, ya que la irradiancia directa es, en ocasiones, obstruida por las nubes. Por esta razón, tras observar con detenimiento los datos y valorar la importancia que tiene la cubierta nubosa esperada en la predicción de irradiancia, se plantea abordar un estudio de posproceso de dicha predicción clasificando los datos atendiendo al índice de claridad esperada para, seguidamente, corregir la predicción en cada uno de los casos; pues como se ha observado, el error cometido varía en función de dicho índice. Para ello, se cuenta con datos reales (observados) y modelados (predichos) de diferentes emplazamientos de España. La idea es usar lo que se sabe que pasó para corregir lo que pasará, es decir, se sabe lo que se dijo que pasaría, también se sabe lo que realmente pasó y queremos corregir lo que hemos dicho que pasará, sabiendo que en ocasiones se falla. Por ello, se ha pensado usar técnicas de Machine Learning para hacer dicha corrección, se quiere hacer aprender cuando hay un error y como corregir dicho fallo. 28 P LA N TEA M IEN TO El objetivo de este estudio es crear una corrección de la predicción actual atendiendo al índice de claridad. Para ello, se van usar técnicas de aprendizaje automático, tanto para la clasificación como la regresión. Disponemos de datos registrados horarios de cinco emplazamientos distintos durante tres años. Con parte de ellos, se pretende entrenar un modelo que sea capaz de corregir el error cometido en la predicción. Para, a continuación, con los datos restantes usar ese modelo para hacer una nueva predicción corregida y poder comprobar, valorar y testear si es factible y ventajosa la corrección realizada. La base de todo el estudio, reside en la idea de que el comportamiento de los datos, así como el error cometido en ellos, depende en cierta medida de la cantidad nubosa. Por ello, el estudio se basa en crear una nueva variable (atributo) denominada ‘Tipo de Cielo’ que tendrá tres posibles valores: 1 para cuando no se esperan nubes, es decir, el cielo está totalmente despejado; 2 en el caso de un índice medio de nubes, o lo que es lo mismo, el cielo está parcialmente cubierto y 3 cuando hay gran cantidad de nubes, esto es, el cielo está completamente cubierto. Para, atendiendo a dicha variable, clasificar los datos en las tres categorías y entrenar, con los datos observados, un modelo distinto para cada una de estas categorías. De esta manera, obtendríamos un nuevo modelo de predicción al cual se le introducirían valores de irradiancia modelados y devolvería valores de irradiancia modelados corregidos. Una vez se disponga de esta nueva predicción corregida, se enfrentarán ambas predicciones junto a los valores observados y se procederá a un análisis estadístico y visual. Para todo este análisis se utilizará la herramienta PYTHON, un lenguaje de programación interpretado multiparadigma con licencia de código abierto. 29 LOS D A TOS Los datos contienen la información fundamental que permite la elaboración y desarrollo de un proyecto. Por tanto tienen un valor muy importante. Dicho valor aumenta si se tiene en cuenta el hecho de que un dato que no se recoge, o que se ve invalidado por causa de alguna incidencia en el proceso de su toma, es un dato que se pierde para siempre, puesto que no habrá oportunidad de volver a medir ese dato concreto. La forma en que se lleva a cabo todo el proceso para su obtención –desde la instrumentación hasta su registro y almacenamiento‐ y su posterior análisis constituyen un procedimiento fundamental: protege esa información de las posibles distorsiones a las que se ve sometida durante dicho proceso y permite aprovecharla y obtener el máximo rendimiento del conocimiento que genera. Por consiguiente, es primordial prestar atención a cada uno de los pasos del proceso, sometiéndolos a un control que permita certificar –con el máximo nivel de seguridad posible que la información se preserva de manera íntegra dentro de unos márgenes de error inevitables, pero conocidos y controlados. El control sobre los datos medidos debe ser siempre exhaustivo, minucioso y sistemático. Es importante mantener un estado de comprobación constante que garantice la calidad de la información incluida en los datos. La sensibilidad de las estimaciones y de las predicciones de los modelos a las imprecisiones de los datos de entrada está demostrada. Un buen modelo no dará buenos resultados si se alimenta con datos incorrectos. De la misma manera tal modelo proporcionará información cuya fiabilidad se desconozca si no se conoce la fiabilidad de los datos de entrada. Dicho de otra forma, los datos cuya calidad se desconoce pueden llevar a respuestas incorrectas, que además pudieran no parecerlo. En definitiva, el descontrol sobre los datos puede dar lugar a una situación en la que aparentemente se esté realizando un trabajo de manera correcta cuando en realidad no es así. Los análisis de calidad de los datos permiten establecer unos mecanismos de control sobre cada parte del proceso de obtención de los datos. Estas metodologías garantizan, con un elevado nivel de seguridad, que la información recopilada no posea errores. Son numerosos los protocolos y normas establecidos 30 por la comunidad científica para el control de la calidad de los datos en todos los aspectos del problema. Para nuestro estudio contamos con datos procedentes de cinco plantas solares españolas situadas en diversas provincias de España, como son Cáceres, Ciudad Real, Córdoba y Sevilla. Estas plantas se encuentran en funcionamiento de forma operativa desde hace más de 6 años y cada una de ellas cuenta con una estación meteorológica automática, estas estaciones son equipos de medida, almacenamiento, transmisión de datos de parámetros ambientales e imágenes, concebidos especialmente para instalaciones de plantas solares. Aunque, como ya hemos mencionado, el periodo de datos disponibles en estas plantas solares es mayor, para realizar este estudio se han tomado únicamente tres años de datos, los años 2009 y 2011. Los datos con los que contamos, son registros horarios de una serie de variables meteorológicas, que son grabados por un ordenador día a día siempre y cuando la elevación solar sea mayor de 5º, dado que se interpreta que si la elevación solar es menor de 5º no ha salido el sol, es de noche, y por tanto no existe suficiente irradiancia solar y los datos tomados pueden dañar el estudio. Para cada hora los parámetros ambientales que mide la estación meteorológica y por tanto, las variables meteorológicas con las que contamos en nuestro estudio son: 31 V ariable D escripción U nidad de m edida times Registro temporal Unidad de referencia GHI Irradiancia global horizontal observada ⁄ DNI Irradiancia directa normal observada ⁄ cosZ Coseno del ángulo zenital solar --- delta Ángulo de declinación solar rad I0 Irradiación extraterrestres ⁄ cf Cobertura nubosa [0-1] ⁄ kt Índice de claridad --- kd Índice de extinción ( ⁄ ) --- kts Índice de claridad en cielo despejado --- kds Índice de extinción en cielo despejado --- tsfc Temperatura en superficie ºC psfc Presión en superficie Pa he Humedad especifica [0-1] --- hr Humedad relativa [0-1] --- dew Temperatura punto de rocío ºC Para este mismo intervalo de tiempo, se han tomado datos de irradiancia en condiciones de cielo despejado que servirán como referencia. Estos datos se han tomado con el modelo de cielo despejado de Bird. En este caso las variables son: V ariable GHIcs DNIcs D escripción Irradiancia global horizontal en cielo despejado Irradiancia directa normal en cielo despejado U nidad de m edida ⁄ ⁄ Además de los datos observados durante este periodo de tiempo en cada una de las plantas solares y los valores de irradiancia del modelo de cielo despejado como referencia también disponemos de los datos de irradiancia modelados para ese mismo periodo por el modelo meteorológico WRF con un horizonte de predicción de 24 horas. Obteniendo así las variables: 32 V ariable D escripción U nidad de m edida mGHI Irradiancia global horizontal calculada ⁄ mDNI Irradiancia directa normal calculada ⁄ De esta forma contamos con cinco grandes matrices de datos, una para cada ubicación, con las que trabajar. Antes de comenzar a trabajar con los datos, se procede a la aplicación de una serie de criterios estándar en forma de filtros de calidad. Éstos se basan esencialmente en la imposición, fundamentada científicamente, de unos límites posibles para los valores de las distintas variables. Todo registro que sobrepase un límite determinado será identificado y corregido. Este criterio garantiza un mayor nivel de confiabilidad en los datos filtrados. El primer paso es filtrar y limpiar estos datos, eliminar datos erróneos que puedan perjudicar nuestro estudio. Para ello procederemos de dos maneras, por una parte realizaremos un profundo escrutinio de los datos y en segunda instancia, procederemos a un análisis visual de los mismos. Someter a los datos a un profundo escrutinio permite detectar diversos tipos de errores de registro y, en caso de ser posible, su corrección. Esto se lleva a cabo mediante la implementación de una serie de algoritmos diseñados específicamente para detectar tales problemas. El conjunto de dichos algoritmos ha sido implementado en base al conocimiento en el tratamiento de datos y comprende un amplio espectro de posibles errores a detectar: formato, duplicidad en registro de fechas, monotonía creciente de la serie temporal, inconsistencias e incongruencias en la serie temporal, etc. Asimismo permite obtener las características elementales de los datos: variables, periodo, frecuencia y huecos. El análisis visual, consiste en una representación gráfica de las series temporales de datos y su inspección visual. Es una tarea ardua pero tremendamente útil y eficaz, ya que permite obtener una percepción general que aporta información complementaria que no se puede obtener mediante un análisis numérico. Para el análisis visual de los datos de radiación se incorpora la representación gráfica de las variables GHIcs y DNIcs. Esto permite, por un lado, establecer un límite físico de referencia para ambas componentes y, por otro lado, conocer el sistema de referencia temporal empleado en el registro de los datos - las irradiancias del modelo de cielo despejado se representan siempre en UTC (Tiempo Universal 33 Coordinado, es la zona horaria de referencia, es la hora local en el meridiano primario, el meridiano 0 o meridiano de Greenwich) en este estudio. Ejemplo de análisis visual para los datos del emplazamiento ‘Ciudad Real’. En esta gráfica se muestran los datos de GHI y DNI modelados (predichos por WRF) del 19 al 24 de Agosto de 2010, así como los datos de GHI y DNI de cielo despejado según el modelo de Bird tomados como referencia para ese mismo periodo temporal. Todo este proceso al que son expuestos los datos puede provocar que la serie temporal contenga huecos, sin embargo, según la Asociación Española de Certificación y Normalización (AENOR): “Se consideraran válidos aquellos días en que, de existir anomalías en la medida de GHI o DNI (valores que no hayan superado los controles de calidad), éstas anomalías acumuladas no superen el periodo global de una hora. Por ejemplo, en el caso de valores horarios, se permitirá una sola anomalía por día y en caso de 10 minutal seis anomalías por día. Esta anomalía ha de ser corregida coherentemente (como por ejemplo a través de una interpolación lineal) antes de proceder a la validación mensual. Se consideraran meses válidos aquellos meses en que, de existir días no válidos, éstos no superen el número de cuatro días. Para obtener el valor mensual correspondiente a un mes con días anómalos, los valores horarios de la irradiación y demás variables meteorológicas de dichos días se sustituirán por los valores de otro día válido. Dicho día debe estar en el entorno de ±5 días del día al que sustituye y su valor de irradiación diaria debe ser el más próximo posible al valor diario medio mensual. Se aplica por tanto una metodología 34 parecida a la propuesta por el WRDC (World Radiation Data Center), pero usando un día con datos medidos reales en lugar de la media aritmética de los valores diarios válidos disponibles.” Por consiguiente, para la buena marcha del estudio y siguiendo las pautas de AENOR, en caso de tener huecos en la serie temporal, estos han de ser rellenados. Para ello el procedimiento a seguir será el siguiente: En el caso de huecos aislados, esto es, registros temporales a los que le falta un dato (no contiene información) en alguna de sus variables meteorológicas pero que, sin embargo, tanto el registro temporal anterior como posterior si poseen información. Esta anomalía será corregida mediante interpolación lineal. Para datos perdidos en bloque, es decir, huecos en la serie temporal en los cuales falta más de un registro temporal consecutivo. El procedimiento a seguir será, tal y como desarrolla AENOR, calcular la media aritmética mensual de cada una de las variables meteorológicas y asignar al registro anómalo el valor del registro de la variable más próximo a esa media en un entorno de 5 días respecto al registro anómalo. Una vez hemos cerciorado y asegurado que los datos son correctos y fiables, estamos en disposición de poder trabajar con ellos. 35 EL M OD ELO Como ya se ha mencionado disponemos de cinco ficheros de datos –filtrados y analizados - de tres años de duración, uno por emplazamiento y se quiere entrenar un modelo que sea capaz de corregir el error cometido atendiendo al tipo de cielo esperado. Para ello, el primer paso es crear dos ficheros “Train” y “Test” con datos mezclados aleatoriamente de los cinco emplazamientos de forma que tengamos una serie temporal completa, que serán con los que trabajemos el entrenamiento. Los datos restantes, serán usados para introducirlos en el modelo entrenado, crear las nuevas predicciones corregidas, compararlas con las predicciones del modelo WRF y comprobar y valorar la eficacia y validez del estudio. La idea de crear estos dos ficheros combinados, no es más que enriquecer el modelo, dado que si tomamos como datos de entrenamiento datos de un único emplazamiento no sería representativo para el resto de localizaciones; de esta forma, el modelo dispondrá de datos de diversas condiciones climáticas. El siguiente paso es crear la nueva variable ‘tc: Tipo de Cielo’ atendiendo a la variable índice de claridad (kt); así, sea definimos { Esta nueva variable ‘tc’ será la variable target o etiqueta del entrenamiento del clasificador. Por otro lado, de todo el conjunto de variables meteorológicas del que disponemos tomamos como variables explicativas: Irradiancia observada (ghi o dni, depende de lo que se vaya a predecir), coseno del ángulo zenital (cosZ), ángulo de declinación solar (delta), irradiancia extraterrestre (I0), Cobertura nubosa (cf), temperatura en superficie (tsfc), presión en superficie (psfc), humedad específica (he), humedad relativa (hr) y temperatura de punto de rocío (dew). El resto de variables de las que disponemos, no se han tomado como variables explicativas porque no aportan información – como es el caso de la irradiancia de cielo despejado, GHIcs, DNIcs, kts o kds – o porque dependen de otras – caso de la variable kd, que depende de DNI y I0. 36 Se debe tener en cuenta que el estudio se ha realizado tanto para GHI como DNI, obteniéndose claramente resultados distintos. Y aunque la idea y el planteamiento general es el mismo para ambas irradiancias; si ha habido diferencias a la hora de ajustar y construir los modelos. A continuación, con los datos ‘Train’. construimos el clasificador usando el método de Random Forest con parámetros, en el caso de GHI: 100 árboles en el bosque, un mínimo de muestras que debe haber en un nodo para que pueda seguir partienose (no se convierta en hoja) 7 hojas, con un máximo de 3 categorías y con 20 como máxima profundidad que puede alcanzar el árbol; y en el caso de DNI: para los mismos parámetros los valores son (50, 2, 3, 11). Una vez, construido el clasificador evaluamos usando los datos Test y comprobamos si se ha tenido overfitting. Irradiancia GHI DNI Score train 0.96 0.95 Score test 0.94 0.90 Ahora que tenemos nuestros datos –tanto los datos train como los datos testclasificados en tres categorías, toca hacer regresión en cada una de ellas para que el modelo, aprendiendo de los datos observados, aprenda a corregir el error en la predicción; es decir, ahora la variable target es la variable irradiancia observada –GHI o DNI, depende del tipo de irradiancia que queramos predecir-, ya que se quiere que los datos se aproximen o aprendan de la realidad. Para ello, usamos, de nuevo, el método de Random Forest, pero esta vez haciendo regresión, con los siguientes parámetros: Iradiancia GHI DNI Categoría 1 2 3 1 2 3 Árboles 50 10 50 500 50 250 Parámetros Hojas Profundidad 10 None 3 None 5 None 3 15 6 None 2 None 37 Volvemos a evaluar los datos obtenidos y a comprobar si ha habido overfitting: Irradiancia GHI DNI Categoría 1 2 3 1 2 3 Score Train 0.80 0.90 0.94 0.86 0.84 0.93 Score Test 0.29 0.56 0.88 0.28 0.49 0.17 Una vez construido y testeado el modelo de aprendizaje, pasamos a ponerlo en práctica con cada uno de los datos de cada emplazamiento. Como la idea es tener un modelo, que va aprendiendo de los datos pasados para corregir errores futuros, tenemos que hacernos a la idea que no disponemos de datos observados, sino que solo disponemos de los datos predichos. Así, las variables de las que disponemos en este caso son: Irradiancia modelada (mGHI o mDNI), coseno del ángulo zenital (cosZ), ángulo de declinación solar (delta), irradiancia extraterrestre (I0), cobertura nubosa (cf), índice de claridad (kt) e índice de extinción(kd). Sin embargo, si vamos a contar, para el final del proceso con la irradiancia observada, para poder comprobar gráfica y analíticamente si esta nueva predicción ajusta mejor que la de WRF. Los pasos a seguir para cada uno de los emplazamientos es: 1. Clasificar los datos aplicando el clasificador construido 2. Para cada una de las categorías, aplicar el regresor construido para obtener una predicción corregida 3. Evaluar que no exista sobreajuste 4. Calcular los estadísticos resultantes de la nueva predicción modifacada para comprobar si mejora con respecto a la obtenida por WRF 5. Pintar conjuntamente ambas predicciones con la irradiancia observada para comprobar el ajuste. 38 LOS R ESU LTA D OS Tras aplicar a cada una de los emplazamientos el modelo entrenado se obtienen los siguientes estadísticos: Cáceres Córdoba Ciudad Real Sevilla 1 Sevilla 2 GHI DNI GHI DNI GHI DNI GHI DNI GHI DNI R2 0.77 0.40 0.78 0.29 0.78 0.21 0.76 0.21 0.81 0.36 ccp 0.90 0.73 0.90 0.70 0.92 0.73 0.91 0.72 0.91 0.73 rmse 138 276 136 283 136 288 138 293 131 273 rrmse 33.4 62.2 30.9 64.3 30.8 67.8 34.7 75.3 29.9 61.2 mae 84 180 82 190 83 200 94 211 77 182 rmae 20.3 40.6 18.5 43.1 18.9 47.2 23.7 54.1 17.6 40.8 mbe 58 116 43 125 67 164 74 169 37 128 rmbe 14.0 26.1 9.9 28.4 15.3 38.5 18.6 43.5 18.5 28.9 Y algunas instantáneas de las gráficas son: En esta gráfica y las cuatro siguientes, se puede observar como la GHI postprocesada (línea verde) ajusta mejor a la GHI observada (línea roja) que la GHI del modelo WRF (línea morada). Este es un ejemplo con los datos del emplazamiento de Cáceres. 39 nn., Ejemplo con los datos del emplazamiento de Ciudad Real. Kljlkj Ejemplo con los datos del emplazamiento de Córdoba. Klklk 40 Ejemplo con los datos del emplazamiento de Sevilla 1. Kkkk Ejemplo con los datos del emplazamiento de Sevilla 2. cxcxc 41 jjjjj Ahora, esta y las cuatro gráficas siguientes corresponden a ejemplos de DNI observada (línea roja), modelada por WRF (línea morada) y la DNI posprocesada con nuestro modelo. En este caso, no llegamos a predecir también como se esperaba, solo se ha conseguido subestimar. Este es un ejemplo con datos del emplazamiento de Cáceres. Hfghgfh Este es un ejemplo con datos del emplazamiento de Ciudad Real. 42 Ghfgh Este es un ejemplo con datos del emplazamiento de Córdoba. Dfhgfghfgh Este es un ejemplo con datos del emplazamiento de Sevilla 1. 43 Fdsfdsg fs Este es un ejemplo con datos del emplazamiento de Sevilla 2. 44 C ON C LU SION ES El principal objetivo de este estudio ha sido crear un modelo de posproceso de DNI y GHI, basado en técnicas de Machine Learning, sencillo para usar como output mientras se estudia más afondo los problemas del modelo matemático de previsión meteorológica WRF, así como se profundiza en más técnicas de previsión meteorológica. Finalmente, el trabajo se ha centrado en la técnica de Random Forest, pos su sencillez y rapidez. Inicialmente, se pretendían usar distintas técnicas de Machine Learning para entrenar los regresores; pero a lo largo de la investigación, el aprendizaje de estas nuevas técnicas, la relación tiempo-calidad y que, desde un principio, se quería algo rápido y fácil de implementar, se decidió restringirnos únicamente al modelo Random Forest, ya que teóricamente se adaptaba bien a los que pretendiamos. Aunque, durante el proceso se ha trabajado también otras técnicas como Gradient Boosting, KNeigbours o SVM (Support Vector Machine). Una vez documentada sobre el tema del Machine Learning, algo novedoso y desconocido para mí hasta entonces, y de todo lo relacionado con el forecasting. El primer paso en el estudio fue el análisis exhaustivo de los datos, lo que me llevo varias semanas, y del cual me sirvió para aprender y cerciorarme de la importancia de la calidad de los datos y la calidad en el registro de los mismos. Una tarea ardua, en ocasiones hasta estresante, pero muy necesaria antes de cualquier estudio estadístico. El siguiente paso a dar fue trabajar con esos datos, para ello antes tuve que aprender el manejo de la librería Scikit-learn de Python. Lo primero, el clasificador, aquí no había duda, desde el principio se observó que Random Forest era el clasificador idóneo para el problema que se quería resolver. Ya clasificados los datos es el momento de los regresores, como ya he mencionado, se estudió la posibilidad de usar más de un tipo, pues realmente había otros modelos que se ajustaban mejor a las necesidades de algunas categorías, incluso se llegaron a probar, pero el tiempo necesario para implementar esos modelos y la complejidad de los mismos hicieron que los descartáramos, dado que, la idea 45 era algo rápido y sencillo que arreglara ligeramente la predicción mientras se trabajaba en algo más riguroso. Cuando ya disponíamos del modelo, no quedaba más que lanzarlo con datos de diversos emplazamientos. Pues el objetivo final residía, en crear una base de datos de datos pasados, que cada día sirvieran de entrenamiento para el postproceso de la irradiancia modelada futura. De esta forma, el modelo cada vez ajustaría mejor a la realidad, dado que contaría con más experiencia pasada. El modelo, como hemos visto, fue lanzado con 5 emplazamientos, obteniéndose los resultados obtenidos en el capítulo 6.4. Basándonos en los estadísticos, se observa que se mejora muy ligeramente la predicción. Por ejemplo, con respecto al coeficiente de determinación de GHI, el cual era de 0.76, se consiguen todos por encima de esta cifra llegando a obtenerse, en el caso de Sevilla 2, un 0.81. Para este coeficiente, más mejora se encuentra en la DNI, pasando de un 0.27 a conseguirse un 0.40 para el emplazamiento de Cáceres. Si observamos el coeficiente de correlación de Pearson en GHI se sube de un 0.90 a un 0.92 para el emplazamiento de Córdoba, y en DNI pasamos de 0.70 a 0.73 en Cáceres, Córdoba y Sevilla 2. Esto me indica que la predicción ha mejorado, pero no ha mejorado tanto como se esperaba. Si miramos el mae, que es una cantidad utilizada para ver cuánto de cerca está el pronóstico de la realidad, vemos como para GHI llegamos a bajar de 87 a 77 en Sevilla 2 y en DNI lo hacemos de 197 a 180 en Cáceres; sin embargo en este estadístico no siempre mejoramos pues en GHI tenemos un valor superior al obtenido con la predicción WRF de 94, y en DNI igual con 200. Por otro lado, para el error cuadrático medio, que es la diferencia entre el estimador y lo que estima. Se tiene que para GHI siempre se mejora, llegando a bajar de 141 a 131 en el caso de Sevilla 2; pero no ocurre lo mismo para DNI, que aunque hay lugares, como Sevilla 2, donde se mejora, bajando de 290 a 273; encontramos que en Sevilla 1, esta diferencia es mayor. Si nos fijamos en las gráficas podemos observar cómo, más para GHI que para DNI, la curva de GHI posprocesada se parece más a la GHI observada que la modelada por GHI. Hay picos, que si bien no llega a contemplar en su totalidad la procesada, si se ve que existan, cosa que no ocurre en la modelada por WRF. 46 Haciendo un análisis visual exhaustivo de todo el registro temporal, se observa cómo, a rasgos generales, la predicción ha mejorado. Aunque en el caso de DNI, esa mejora es más leve. Por tanto, podemos concluir, en nuestro estudio que aunque se ha obtenido lo deseado, no ha sido en la medida en que se esperaba. Han sido muchas las horas de dedicación para no obtener logros significativos. Porque, aunque sí se han obtenido mejoras, la ligereza de ellas hace que la relación tiempo-mejora, no sea fructífera en el mundo empresarial. De ahí, que en trabajos futuros se plantee el uso de otros métodos de aprendizaje automático o incluso otro tipo de postproceso como agrupando por estaciones o meses. No obstante, recalcar que sí se ha obtenido lo deseado, aunque no en la medida en que la industria lo necesita. 47 P R OG R A M A C IÓN C OM P U TA C ION A L El software utilizado para la realización del estudio ha sido el lenguaje de programación interpretado multiparadigma con licencia de código abierto PYTHON en su versión 2.7. Aunque no es un programa común en estadística, una de las razones por las que he elegido este programa ha sido la diversidad de librerías para trabajar el Machine Learning, en este caso, la librería usada para este fin ha sido la librería scikit-learn; esta librería contiene con diversos tipos de algoritmos de clasificación, regresión y clustering incluyendo árboles de decisión, gradient boosting, SVM,… y está diseñada para trabajar junto a dos librerías más Numpy y Scipy. Numpy es la librería necesaria para trabajar con vectores, matrices, arrays, cuenta con funciones de alto nivel matemático y contiene herramientas para graficar; sin embargo, Scipy contiene herramientas de optimización, algebra lineal, interpolación, integración y otras tareas comunes de ciencia e ingeniería. Scipy, es a su vez, una librería basada en Numpy Por último, se muestra el código que ha generado todos los resultados de este estudio. Aunque para el estudio se han generado dos códigos - uno para el estudio de GHI y otra para el de DNI – vamos a mostrar solo el de global, pues la diferencia entre ellos reside únicamente en la llamada de las variables y los parámetros de ajustes de los modelos Random Forest. 48 # -*- coding: utf-8 -*''' NAME : Posproceso_GHI.py ENGINEERED BY: ncastillo LAST UPDATE : 29/06/2015 COMMENTS : En este scrip vamos a clasificar el tipo de cielo, llamado skc, atendiendo a : 1 si es totalmente despejado 2 si es parcialmente cubierto 3 si es totalmente cubierto Para clasificar nuestros datos en tres grupos y así generar un modelo de ajuste para cada tipo de cielo. Obteniendo así una predicción de GHI "arreglada" A TENER EN CUENTA : 1. El código genera una gráfica donde podremos comparar la GHI observada, la GHI modelada (la que intentamos arreglar), la GHI arreglada 2. Generamos también un archivo .txt con los estadísticos obtenidos en cada uno de los arreglos así como los estadísticos que teníamos en nuestra mGHI inicial. ''' ##################### Librerías ##################### import sys import numpy as np from mdf import MDFile from matplotlib import pylab as pl from matplotlib.dates import num2date from sklearn import neighbors, ensemble from scipy.stats.stats import pearsonr as ccp from scipy.stats.stats import spearmanr as ccs ################# Definición de funciones ################# def skc(kt): SKC = np.array([]) for k in kt: if (0 <= k)&(k < 0.35): SKC = np.append (SKC, 1.0) elif (0.35 <= k)&(k < 0.65): SKC = np.append (SKC, 2.0) else: SKC = np.append (SKC, 3.0) return SKC class ScoreBox(object) : pass def c_scores(sim_values,obs_values): scores = ScoreBox() res = sim_values-obs_values scores.mbe = np.mean(res) scores.rmbe = 100.*scores.mbe/np.mean(obs_values) scores.mae = np.mean(np.abs(res)) scores.rmae = 100.*scores.mae/np.mean(obs_values) scores.rmse = np.sqrt(np.mean(res)**2+np.std(res)**2) 49 scores.rrmse = 100.*scores.rmse/np.mean(obs_values) scores.ccp = ccp(sim_values,obs_values)[0] scores.ccs = ccs(sim_values,obs_values)[0] scores.R2 =1-(((obs_values-sim_values)**2).sum() / ((obs_values - obs_values.mean()) ** 2).sum()) scores.comb = 0.4*scores.R2 + 0.2*(1.-scores.rrmse/100.) + \ 0.2*(1.-scores.rmae/100.) + 0.2*(1.-abs(scores.rmbe)/100.) return scores steps = open('Steps_Posproceso_GHI.txt', 'w') steps.write('\n************************************************\n***** POSPROCESO_GHI *****\n************************************************\n') CÓDIGO ###################### Código ##################### ''' PART 1. En esta primera parte del código nos encargaremos de la lectura y filtrado de los datos y variables. Tenemos que leer dos archivos .mdf, uno de ellos el que usaremos para hacer el clasificador, el cual partiremos en dos (train y test) y en segundo archivo, el cual usaremos para evaluar el estudio. Estos archivos están compuestos por 20 variables, las cuales leeremos en este código en estricto orden, según sean necesarias. NOTA: Los datos ya han sido filtrados y analizados con anterioridad y sabemos que son fiables, pero nunca esta de más una pequeña comprobación. ''' #Leemos los archivos train y test steps.write('\n> Cargando los datos train...') datos = MDFile() datos.read('Train.mdf') steps.write(' Ok\n') steps.write('\n> Cargando los datos test...') test = MDFile() test.read('Test.mdf') steps.write(' Ok\n') #Cargamos las variables steps.write('\n> Cargando y filtrando las variables...') train = (datos.ghi, datos.cosZ, datos.delta, datos.I0, datos.cf, datos.kt, datos.tsfc, datos.psfc, datos.he, datos.hr, datos.dew) train = np.column_stack(train) filtro = np.all(np.isfinite(train),axis=1) train = train[filtro,:] 50 test = (test.ghi, test.cosZ, test.delta, test.I0, test.cf, test.kt, test.tsfc, test.psfc, test.he, test.hr, test.dew) test = np.column_stack(test) filtro_test = np.all(np.isfinite(test),axis=1) test = test[filtro_test,:] steps.write(' Ok\n') ''' PART 2. Una vez, que tenemos listos los datos es hora de trabajar con ellos. Lo primero que tenemos que hacer es crear la variable tc: tipo de cielo, en función de los valores del kt usando la función skc que definimos al principio del código. Esta función, asigna un 1 cuando la cobertura nubosa (kt) es inferior a 0.35, es decir, se considera cielo despejado; asigna un 2 cuando el kt esta entre 0.35 y 0.65, o lo que es lo mismo, el cielo esta parcialmente cubierto y asigna un 3, cuando el kt es superior a 0.65 y en ese caso, se dice que el cielo esta totalmente cubierto. ''' #Definimos nuestra variable "tipo de cielo", es decir la variable tc. tc = skc(train[:,5]) tc_test = skc(test[:,5]) ''' PART 3. Continuamos clasificando, en tres conjuntos, el conjunto de todos mis datos atendiendo a su cobertura nubosa, a esta variable nueva tc. Para ello usamos el clasificador Random Forest. Parámetros ---------n_estimators = Número de árboles que forman el bosque min_samples_leaf: Mínimo número de muestras que debe haber en un nodo para que se pueda seguir partiendose (no se convierta en hoja) max_features = Número de características a considerar max_depth = Máxima profundidad que puede alcanzar el árbol ''' #Clasificamos en función del tipo de cielo. steps.write('\n> Construyendo el clasificador... ') X =(train[:,0:5], train[:,6:]) X = np.column_stack(X) 51 Y = skc(train[:,5]) W = skc(test[:,5]) Z = (test[:,0:5], test[:,6:]) Z = np.column_stack(Z) RF = ensemble.RandomForestClassifier(n_estimators=100, min_samples_leaf = 7, max_features=3, max_depth = 20) RF.fit(X, Y) predict_test = RF.predict(Z) predict_train = RF.predict(X) score_test = RF.score(Z, W) score_train = RF.score(X, Y) if score_test > score_train: steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train: %.4f\n' % score_train) steps.write( 'score_test: %.4f\n' % score_test) ''' PARTE 4. Tal y como íbamos buscando nuestros datos se clasifican en tres grupo (1 = Cielo despejado, 2 = Cielo parcialmente cubierto, 3 = Cielo Cubierto). A continuación, separamos nuestros datos en esas tres categorás para poder hacer la regresión sobre cada una de las partes. ''' steps.write('\n> Clasificando según el tipo de cielo...') #Categoria: "Cielo totalmente despejado" (Tipo1) train_tipo1 = train[predict_train == 1] test_tipo1 = test[predict_test == 1] #Categoria: "Cielo parcialmente cubierto" (Tipo2) train_tipo2 = train[predict_train == 2] test_tipo2 = test[predict_test == 2] #Categoria: "Cielo totalmente cubierto" (Tipo3) train_tipo3 = train[predict_train == 3] test_tipo3 = test[predict_test == 3] steps.write(' Ok\n') 52 ''' PARTE 5. Para cada una de las categorías, vamos a construir un regresor para corregir el desfase en mi predicción Parámetros ---------n_estimators = Número de árboles que forman el bosque min_samples_leaf: Mínimo número de muestras que debe haber en un nodo para que se pueda seguir partiendose (no se convierta en hoja) max_depth = Máxima profundidad que puede alcanzar el árbol ''' steps.write('\n> Corrigiendo la predicción en la categoría 1 ...') #Categoria: "Cielo totalmente despejado" (Tipo1) X_tipo1 = (train_tipo1[:,1:]) Y_tipo1 = train_tipo1[:,0] Z_tipo1 = (test_tipo1[:,1:]) W_tipo1 =test_tipo1[:,0] RF1 = ensemble.RandomForestRegressor(n_estimators=50, min_samples_leaf = 10, max_depth = None) RF1.fit(X_tipo1, Y_tipo1) predict_tipo1 = RF1.predict(Z_tipo1) score_test_tipo1 = RF1.score(Z_tipo1, W_tipo1) score_train_tipo1 = RF1.score(X_tipo1, Y_tipo1) if score_test_tipo1 > score_train_tipo1 : steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train_tipo1: %.4f\n' % score_train_tipo1) steps.write( 'score_test_tipo1: %.4f\n' % score_test_tipo1) steps.write('\n> Corrigiendo la predicción en la categoría 2 ...') #Categoria: "Cielo parcialmente cubierto" (Tipo2) 53 X_tipo2 = (train_tipo2[:,1:]) Y_tipo2 = train_tipo2[:,0] Z_tipo2 = (test_tipo2[:,1:]) W_tipo2 = test_tipo2[:,0] RF2 = ensemble.RandomForestRegressor(n_estimators=10, min_samples_leaf = 3) RF2.fit(X_tipo2, Y_tipo2) predict_tipo2 = RF2.predict(Z_tipo2) score_test_tipo2 = RF2.score(Z_tipo2, W_tipo2) score_train_tipo2 = RF2.score(X_tipo2, Y_tipo2) if score_test_tipo2 > score_train_tipo2 : steps.write('Warning! Overfitting!!\n') else: steps.write(' Ok \n') steps.write('score_train_tipo2: %.4f\n' % score_train_tipo2) steps.write('score_test_tipo2: %.4f\n' % score_test_tipo2) steps.write('\n> Corrigiendo la predicción en la categoría 3 ...') #Categoria: "Cielo totalmente cubierto" (Tipo3) X_tipo3 = (train_tipo3[:,1:]) Y_tipo3 = train_tipo3[:,0] Z_tipo3 = (test_tipo3[:,1:]) W_tipo3 = test_tipo3[:,0] RF3 = ensemble.RandomForestRegressor(n_estimators=50, min_samples_leaf = 5) RF3.fit(X_tipo3, Y_tipo3) predict_tipo2 = RF3.predict(Z_tipo3) score_test_tipo3 = RF3.score(Z_tipo3, W_tipo3) score_train_tipo3 = RF3.score(X_tipo3, Y_tipo3) if score_test_tipo3 > score_train_tipo3 : steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train_tipo3: %.4f\n' % score_train_tipo3) steps.write( 'score_test_tipo3: %.4f\n' % score_test_tipo3) #############Probamos ahora ha predecir otros datos ############# ''' PARTE 6. Una vez construido el regresor atendiendo a cada una de las categorías obtenidas con el 54 clasificador, pasamos a predecir la ghi en cada uno de los emplazamientos y comparar tanto gráfica como estadísticamente los resultados obtenidos. ''' for p in ['Caceres', 'Cordoba', 'CiudadReal', 'Sevilla1', 'Sevilla2']: steps.write('\n> Cargando los datos de la planta de %s...' % p) planta = MDFile() planta.read('%s_train.mdf' % p) EVA = (planta.mghi, planta.cosZ, planta.delta, planta.I0, planta.cf, planta.kt, planta.tsfc, planta.psfc, planta.he, planta.hr, planta.dew, planta.ghi) EVA = np.column_stack(EVA) fil = np.all(np.isfinite(EVA),axis=1) EVA = EVA[fil,:] ZC =(EVA[:,0:5], EVA[:,6:11]) ZC = np.column_stack(ZC) WC = skc(EVA[:,5]) steps.write('Ok \n') steps.write('\n> Clasificando los datos de la planta de %s...' % p) prediccion = RF.predict(ZC) score = RF.score(ZC, WC) if score > score_train: steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train: %.4f\n' % score_train) steps.write( 'score: %.4f\n' % score) #Clasificamos en tipos EVA1 = EVA[prediccion == 1] EVA2 = EVA[prediccion == 2] EVA3 = EVA[prediccion == 3] #Tipo 1 steps.write('\n> Construyendo la predicción para la categoría 1 en %s...' % p) W1 = EVA1[:,0] Z1 = (EVA1[:,1:11]) prediccion1 = RF1.predict(Z1) score1 = RF1.score(Z1, W1) 55 if score1 > score_train_tipo1 : steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train_tipo1: %.4f \n' % score_train_tipo1) steps.write( 'score1: %.4f \n' % score1) #Tipo 2 steps.write('\n> Construyendo la predicción para la categoría 2 %s...' % p) W1 = EVA1[:,0] W2 = EVA2[:,0] Z2 = (EVA2[:,1:11]) prediccion2 = RF2.predict(Z2) score2 = RF2.score(Z2, W2) if score2 > score_train_tipo2 : steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train_tipo2: %.4f\n' % score_train_tipo2) steps.write( 'score2: %.4f\n' % score2) #Tipo 3 steps.write('\n> Construyendo la predicción para la categoría 3 en %s...' % p) W1 = EVA1[:,0] W3 = EVA3[:,0] Z3 = (EVA3[:,1:11]) prediccion3 = RF3.predict(Z3) score3 = RF3.score(Z3, W3) if score3 > score_train_tipo3 : steps.write( 'Warning! Overfitting!!\n') else: steps.write( ' Ok \n') steps.write( 'score_train_tipo3: %.4f \n' % score_train_tipo3) steps.write( 'score3: %.4f \n' % score3) steps.write('\n> Creando la predicción de ghi para la planta de %s ...' % p) #Creamos el array que contiene a la predicción total. ghi = np.zeros(len(EVA[:,0])) 56 ghi[prediccion==1] = prediccion1 ghi[prediccion==2] = prediccion2 ghi[prediccion==3] = prediccion3 times = planta.times[fil] orden = times.argsort() times_ord = times[orden] ghi_ord = ghi[orden] steps.write('Ok \n') #Calculemos los estadísticos scores = c_scores(planta.mghi[fil], planta.ghi[fil]) scores_ghi = c_scores(ghi_ord,planta.mghi[fil]) steps.write('\n> Calculamos los estadísticos al predecir ghi en el caso de la planta de %s. \n' % p) steps.write( 'R2: %.4f \n' % scores_ghi.R2) steps.write( 'ccp: %.4f \n' % scores_ghi.ccp) steps.write( 'ccs: %.4f \n' % scores_ghi.ccs) steps.write( 'rmse: %.4f \n' % scores_ghi.rmse) steps.write( 'mae: %.4f \n' % scores_ghi.mae) steps.write( 'mbe: %.4f \n' % scores_ghi.mbe) steps.write( 'rrmse: %.4f \n' % scores_ghi.rrmse) steps.write( 'rmae: %.4f \n' % scores_ghi.rmae) steps.write( 'rmbe: %.4f \n' % scores_ghi.rmbe) steps.write( '\n') #Escribimos todo esto en un archivo txt bajo el nombre "Estadisticos_'emplazamiento'.txt" archivo = open('Estadisticos_ghi_%s.txt' % p, 'w') archivo.write('#Calculamos los estadísticos para GHI usando tc\n') archivo.write('#Tomamos como estadísticos de referencia:\n') archivo.write('#comb, R2, ccp, ccs, rmse(rrmse %), mae(rmae %), mbe(rmbe %)\n') archivo.write('# %.4f| %.3f| %.3f| %.3f| %d (%.1f)| %d (%.1f)| %d (%.1f)\n' % (scores.comb,scores.R2,scores.ccp,scores.ccs,scores.rmse, scores.rrmse,scores.mae,scores.rmae,scores.mbe,scores.rmbe)) archivo.write('\n \n') archivo.write('#En el caso de predecir directamente la ghi, los estadísticos que obtenemos son:\n') archivo.write('#comb, R2, ccp, ccs, rmse(rrmse %), mae(rmae %), mbe(rmbe %)\n') archivo.write('# %.4f| %.3f| %.3f| %.3f| %d (%.1f)| %d (%.1f)| %d (%.1f)\n' % (scores_ghi.comb,scores_ghi.R2,scores_ghi.ccp,scores_ghi.ccs,scores_ghi.rmse, scores_ghi.rrmse,scores_ghi.mae,scores_ghi.rmae,scores_ghi.mbe,scores_ghi.rmbe)) archivo.close() 57 #Por último, pintamos. Tomo el modelo de cielo despejado para comparar. dates = num2date(times_ord) figura = pl.figure(1) ax = figura.add_subplot(111) ax.set_title('%s' % p) ax.plot_date(dates,ghi_ord,ls='-',lw=1.5,marker='',color='g',label='GHI Procesada') ax.plot_date(dates,planta.ghi[fil],ls='-',lw=1.5,marker='',color='r',label='GHI Observada')#Pinto esta pá ver lo que hemos mejorado la predicción ax.plot_date(dates,planta.mghi[fil],ls='-',lw=1.5,marker='',color='m',label='GHI Modelada (WRF)')#Pinto esta pá ver lo que hemos mejorado la predicción ax.legend(loc='upper right',prop={'family':'serif','size':14}, fancybox=True, markerscale=2., numpoints=1,ncol=1) pl.show() steps.close() 58 B IB LIOG R A FÍA Alpaydin E. (2004) Introduction to Machine Learning (Adaptive Computation and Machine Learning) Beyer H.G., Polo-Martinez J., Sui M., Torres J.L., Lorenz E., Müller S.C., Hoyer-Click C., Ineichen P. (2009) Report on Benchmarking of Radiation Products Bird R.E., Hulstrom R.L. (1981) A simplified Clear Sky Model for Direct and Difusse Insolation on Horizontal Surfaces. Solar Energy Research Institute Breiman L., Friedman J. (1984) Clasiffication and Regression Trees Breiman L., (1998) Arcing Classifiers. Annals of Statistics Breiman L. (2001) Random Forest. Machine Learning, 45, 5–32 Freund, Y. and Shapire, R. (1996). Experiments with a new boosting algorithm. In Machine Learning: Proceedings of the Thirteenth International Conference Geurts P., Ernst D., Wehenkel (2006) Extremely randomized trees. Machine Learning, 63, 3-42 Iqbal M. (1983) An Introduction to Solar Radiation Lara-Fanego V., Pozo-Vazquez D., Sanchez-Sanchez N., Ruiz-Arias J.A., Alsamamra H., Molina A., Luzón-Cuesta M. (2008) Utilización de modelos de predicción numérica para la evaluación y predicción de la radiación solar Liaw A., Wiener M. (2002) Classification and Regression by Random Forest Lutz M. (2003) Learning Python Lutz M. (2011) Programming Python Mitchell T. (1997) Machine Learning 59 Perez R., Lorenz E., Pelland S., Beauharnois M., Van Knowe G., Hemker K., Heinemann D., Remund J., Müller S.C., Tranmüller W., Steinmauer G., Pozo D., Ruiz-Arias J.A., Lara-Fanego V., Ramirez-Santigosa L., GastonRomero M., Pomares L.M. (2012) Comparison of numerical weather prediction solar irradiance forecasts in the US, Canada and Europe Ruiz-Arias J.A., Pozo-Vazquez D., Lara-Fanego V., Santos-Alamillos F.J., Tovar-Pescador J. (2011) A High-Resolution Topographic Correction Method for Clear-Sky Solar Irradiance Derived with a Numerical Weather Prediction Model Segal M.R. (2003) Machine Learning Benchmarks and Random Forest Regression Sieven E (2010) Linux 60