técnicas de machine learning para el post-proceso de la

70
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 Trabajo de Investigación Fin de Máster Nuria Victoria Castillo González Septiembre 2015

Upload: others

Post on 20-Nov-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

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 Post-Proceso

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

RESUM 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.

ÍNDICE GENERAL

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

1

INTRODUCCIÓ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, agro-

meteorologí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.

2

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

3

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.

4

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

5

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.

6

M ETODOLOGÍA

Capítulo 2

M ACHINE LEARNING

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á

7

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. Recolecció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 modelo. 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 sesgo-

varianza explicado anteriormente.

8

4. Entrenamiento del modelo. 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 modelo. 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 , construir

una función { } con la cual, dada una nuevo vector de entrada

, se pueda predecir con cierto grado de certeza la variable . Para cada

observación de , a la variable se le llama variable de entrada o

explicativa o input y a la variable 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:

Problemas 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.

Problemas de Regresió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

9

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,…

10

Capítulo 3

ÁRBOLES DE DECISIÓ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 del

conjunto. Cada uno de estos ejemplos se representa mediante un vector , el

cual tiene asociada su correspondiente etiqueta de clase 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

11

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.

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 y la cruz de

la región ). 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

No

No

No

12

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.

13

Capítulo 4

RANDOM FOREST

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.

14

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 son

los dos conjuntos que se crean de la escisión. La función 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.

15

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.

16

Random Forest Clasiffier

En un problema de clasificación supervisada se estudia un fenómeno

representado por un vector en que puede ser clasificado de maneras de

acuerdo a un vector de “etiquetas”. Un clasificador permite asignar un nuevo

dato del cual no se conoce la etiqueta.

Con tal fin, se dispone de { } llamado “conjunto de

entrenamiento”, donde es un suceso del fenómeno , y 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 variables

de entrada, se determina un número y para cada nodo del árbol

se seleccionan variables aleatoriamente. La variable más relevante de este

subconjunto elegido al azar se usa en el nodo. El valor de se mantiene

17

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.

18

Random Forest Regressor

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 es la correlación ponderada entre residuos y

para 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.

19

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.

20

Capítulo 5

M ODELOS

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.

WRF (Wheater Research 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.

21

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.

22

CIELO DESPEJADO DE BIRD

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,

23

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.

24

APLICACIÓN

Capítulo 6

APLICACIÓN DE LAS TÉCNICAS DE

M ACHINE LEARNING EN EL POSTPROCESO

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.

25

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.

26

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.

27

Aunque la predicción de la que se dispone entra dentro de los márgenes

aceptables de predicción con unos estadísticos de

R2 ccp rmse rrmse mae rmae mbe rmbe

GHI 0.76 0.90 141 33.3 87 20.7 56 13.4

DNI 0.27 0.70 290 67.5 197 46.0 138 32.2

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

Y lo mismo ocurre en un día “completamente cubierto” para DNI.

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

28

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.

29

PLANTEAM IENTO

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.

30

LOS DATOS

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

31

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:

32

Variable Descripción Unidad de medida

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:

Variable Descripción Unidad de medida

GHIcs Irradiancia global horizontal en cielo

despejado

DNIcs Irradiancia directa normal en cielo

despejado

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:

33

Variable Descripción Unidad de medida

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

34

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.

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

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.

35

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.

36

EL M ODELO

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.

37

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 Score train Score test

GHI 0.96 0.94

DNI 0.95 0.90

Ahora que tenemos nuestros datos –tanto los datos train como los datos test-

clasificados 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 Categoría Parámetros

Árboles Hojas Profundidad

GHI

1 50 10 None

2 10 3 None

3 50 5 None

DNI

1 500 3 15

2 50 6 None

3 250 2 None

38

Volvemos a evaluar los datos obtenidos y a comprobar si ha habido overfitting:

Irradiancia Categoría Score Train Score Test

GHI

1 0.80 0.29

2 0.90 0.56

3 0.94 0.88

DNI

1 0.86 0.28

2 0.84 0.49

3 0.93 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.

39

LOS RESULTADOS

Tras aplicar a cada una de los emplazamientos el modelo entrenado se

obtienen los siguientes estadísticos:

R2 ccp rmse rrmse mae rmae mbe rmbe

Cáceres GHI 0.77 0.90 138 33.4 84 20.3 58 14.0

DNI 0.40 0.73 276 62.2 180 40.6 116 26.1

Córdoba GHI 0.78 0.90 136 30.9 82 18.5 43 9.9

DNI 0.29 0.70 283 64.3 190 43.1 125 28.4

Ciudad

Real

GHI 0.78 0.92 136 30.8 83 18.9 67 15.3

DNI 0.21 0.73 288 67.8 200 47.2 164 38.5

Sevilla 1 GHI 0.76 0.91 138 34.7 94 23.7 74 18.6

DNI 0.21 0.72 293 75.3 211 54.1 169 43.5

Sevilla 2 GHI 0.81 0.91 131 29.9 77 17.6 37 18.5

DNI 0.36 0.73 273 61.2 182 40.8 128 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.

40

nn.,

Kljlkj

Klklk

Ejemplo con los datos del emplazamiento de Ciudad Real.

Ejemplo con los datos del emplazamiento de Córdoba.

41

Kkkk

cxcxc

Ejemplo con los datos del emplazamiento de Sevilla 1.

Ejemplo con los datos del emplazamiento de Sevilla 2.

42

jjjjj

Hfghgfh

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.

Este es un ejemplo con datos del emplazamiento de Ciudad Real.

43

Ghfgh

Dfhgfghfgh

Este es un ejemplo con datos del emplazamiento de Córdoba.

Este es un ejemplo con datos del emplazamiento de Sevilla 1.

44

Fdsfdsg

fs

Este es un ejemplo con datos del emplazamiento de Sevilla 2.

45

CONCLUSIONES

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

46

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.

47

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.

48

PROGRAM ACIÓN

COM PUTACIONAL

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.

# -*- coding: utf-8 -*-'''NAME : Posproceso_GHI.pyENGINEERED BY: ncastilloLAST UPDATE : 29/06/2015COMMENTS : En este scrip vamos a clasificar el tipo de cielo, llamado skc, atendiendo a :

1 si es totalmente despejado2 si es parcialmente cubierto3 si es totalmente cubierto

Para clasificar nuestros datos en tres grupos y así generar un modelode 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ísticosobtenidos en cada uno de los arreglos así como los estadísticos que teníamos en nuestramGHI inicial.'''

##################### Librerías #####################import sysimport numpy as npfrom mdf import MDFilefrom matplotlib import pylab as plfrom matplotlib.dates import num2datefrom sklearn import neighbors, ensemblefrom scipy.stats.stats import pearsonr as ccpfrom 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 SKCclass ScoreBox(object) : passdef 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***** CÓDIGOPOSPROCESO_GHI *****\n************************************************\n')

###################### Código #####################

'''PART 1.En esta primera parte del código nos encargaremos de la lectura y filtrado de los datos yvariables.Tenemos que leer dos archivos .mdf, uno de ellos el que usaremos para hacer elclasificador, el cual partiremos en dos (train y test) y en segundo archivo, el cual usaremospara evaluar el estudio. Estos archivos están compuestos por 20 variables, las cualesleeremos 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 sonfiables, pero nunca esta de más una pequeña comprobación.'''

#Leemos los archivos train y teststeps.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 variablessteps.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 quetenemos que hacer es crear la variable tc: tipo de cielo, en función de los valores del ktusando la función skc que definimos al principio del código. Esta función, asigna un 1cuando 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 estaparcialmente cubierto y asigna un 3, cuando el kt es superior a 0.65 y en ese caso, sedice 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 asu cobertura nubosa, a esta variable nueva tc. Para ello usamos el clasificador RandomForest.

Parámetros----------n_estimators = Número de árboles que forman el bosquemin_samples_leaf: Mínimo número de muestras que debe haber en un nodo para que sepueda seguir partiendose (no se convierta en hoja)max_features = Número de características a considerarmax_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 = Cielodespejado, 2 = Cielo parcialmente cubierto, 3 = Cielo Cubierto). A continuación,separamos nuestros datos en esas tres categorás para poder hacer la regresión sobrecada 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 desfaseen mi predicción

Parámetros----------n_estimators = Número de árboles que forman el bosquemin_samples_leaf: Mínimo número de muestras que debe haber en un nodo para que sepueda 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 tiposEVA1 = EVA[prediccion == 1]EVA2 = EVA[prediccion == 2]EVA3 = EVA[prediccion == 3]

#Tipo 1steps.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 2steps.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 3steps.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] = prediccion1ghi[prediccion==2] = prediccion2ghi[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ísticosscores = 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ónax.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ónax.legend(loc='upper right',prop={'family':'serif','size':14}, fancybox=True, markerscale=2., numpoints=1,ncol=1)pl.show()

steps.close()

58

59

BIBLIOGRAFÍ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

60

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., Gaston-

Romero 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