Documento 7870201

Anuncio
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
Descargar