Inteligencia en Redes de Comunicaciones Predicción meteorológica Aitor Mendaza Ormaza 100021542 INDICE Introducción …………………………………………………………………………………………………………1 Tratamiento de Datos ………………………………………………………………………………………….5 Resultados y análisis…………………………………………………………………………………………… 7 Introducción: El objetivo de esta práctica es desarrollar un sistema de caracterización metrológica, usando para ello la plataforma Weka como herramienta de aplicación de algoritmos de aprendizaje. En concreto, se procederá al desarrollo de tres modelos de predicción: • • • Predicción de temperatura a la hora siguiente. Predicción de temperatura al día siguiente (24 horas exactas). Predicción de las condiciones meteorológicas del día siguiente (24 horas). Para el desarrollo de esta práctica, nos hemos apoyado en las simulaciones obtenidas por unos compañeros. Se ha procedido al estudio de la obtención de dichas simulaciones, así como del estudio de las razones que se usaron para el tratamiento de datos y la elección de los modelos de predicción/simulación. Los datos a partir de los cuales se ha realizado el estudio es información recogida a través del Metar (Meteorological Actual Report), disponibles de forma gratuita en internet. El uso de información a través del METAR simplifica las cosas, ya que usa un código establecido por el World Meteorological Organization (WMO), y adaptado por todas las naciones del mundo, por lo que dicho estudio podría ser usado en un futuro sin necesidad de complejos cambios. Los datos usados en el desarrollo de esta práctica son los correspondientes al aeropuerto Barajas de Madrid (código internacional LEMD) desde el año 1996 hasta el año 2004. Dichos datos contienen la siguiente información, tomada cada media hora: HoraCET (Dividia en Año, mes y hora) Temperatura (grados Farenheit) Punto de rocío (grados Farenheit) Humedad Presión (pulgadas) Visibilidad Dirección del viento Velocidad del viento (millas por hora) Velocidad de ráfagas de viento (millas por hora) Precipitación Eventos Condiciones A continuación mostramos un fragmento de los datos originales: HoraCET, TemperaturaF, Nivel de RocíoF, Humedad, PresiónIn, Visibilidad MPH, Wind Direction, Velocidad del vientoMPH, RáfagaMPH, Precipitación In, Hechos, Conditions. 12:00 AM,37.4,33.8,87,30.39,7.0,NNE,2.3,-,N/A,,Parcialmente Nublado 12:30 AM, 35.6,33.8,93,30.39,7.0,Calm,Calm,-,N/A,,Parcialmente Nublado 1:00 AM,35.6,33. 8,93,30.39,7.0,Calm,Calm,-,N/A,,Nubes Dispersas 1:30 AM,35.6,33.8,93,30.36,7. 0,Norte,1.2,-,N/A,,Nubes Dispersas 2:00 AM,35.6,33.8,93,30.36,7.0,Norte,1.2,- ,N/A,,Nubes Dispersas 2:30 AM,35.6,33.8,93,30.36,7.0,NNO,1.2,-,N/A,,Nubes Dis persas 3:00 AM,35.6,33.8,93,30.36,7.0,NNO,1.2,-,N/A,,Nubes Dispersas 3:30 AM,33.8,32.0,93,30.33,7.0,Calm,Calm,-,N/A,,Parcialmente Nublado 4:00 AM,30.2, 32.0,100,30.33,7.0,Calm,Calm,-,N/A,,Parcialmente Nublado 4:30 AM,32.0,30.2,93 ,30.33,7.0,Calm,Calm,-,N/A,,Parcialmente Nublado 5:00 AM,32.0,30.2,93,30.30,7 .0,Calm,Calm,-,N/A,,Parcialmente Nublado 5:30 AM,30.2,30.2,100,-9999,5.6,Calm ,Calm,-,N/A,,Despejado Como se puede observar en esta muestra, hay casos en los que faltan datos, o estos son incorrectos. Estos datos no han sido sometidos a ningún procesado de datos. Procedemos ahora a exponer los distintos filtros que se han aplicado a los datos para su posterior procesamiento con WEKA. Explicaremos también porque se han elegido dichos filtros. TRATAMIENTO DE DATOS: El tratamiento de los datos en bruto se ha realizado mediante una serie de filtros, programados en java, para adecuar el formato de los datos a nuestras necesidades, así como para conseguir filtrar los datos inservibles o los que juzgamos innecesarios para los modelos que se eligieron estudiar. Para ello, iremos enumerando y describiendo uno por uno los distintos campos, en el orden correspondiente, de los datos obtenidos a través de METAR. AÑO: Indica el año en el que se tomó la muestra. entre 1996 y 2004. Su valor está comprendido MES: Al igual que el dato anterior, indica el mes en que la muestra fue tomada. Así mismo, no necesita ningún tratamiento, ya que se encuentra indicado de forma numérica, oscilando entre 01 y 12. DÍA: Indica el día en que fue tomada la muestra. Sus valores oscilan entre 01 y 31. Así mismo, tiene en cuenta las fechas por meses, es decir, que febrero sólo tiene 28 dias (29 si es bisiesto) y algunos de los meses sólo 30 en vez de 31. No es necesario que hagamos una comprobación del día en función del mes, porque asumimos que los datos obtenidos no tienen errores en estos campos. HORA: Indica el momento exacto en que fue tomada la muestra. El periodo de muestreo es de media hora, es decir, se toma una muestra cada media hora. A cada muestra se la etiqueta con un número, indicando el número de muestra por día. Es decir, la primera muestra, tomada a las 00:00h se etiqueta como 0. La siguiente muestra, tomada a las 00:30h se etiqueta como 1, y así sucesivamente hasta la última muestra, número 47 que corresponde a las 23:30h. Teniendo en cuenta el formato en que se indica la hora, no es necesario realizar ningún cambio en este campo de datos. TEMPERATURA: Este campo representa la medición de la temperatura en el momento de muestreo. Está indicada en grados Farenheit, en formato de tres dígitos con decimal. Sobre dicha medida tampoco se realiza ningún cambio. PUNTO DE ROCÍO: Variable de tres dígitos con decimal. Su unidad de medida son grados Farenheit. No se necesitó ningun preprocesado de datos para su posterior uso y tratamiento. HUMEDAD: Variable de tipo real. De nuevo, no se necesitó ningún preprocesado. PRESIÓN: Variable expresada con tres dígitos y decimal. Su unidad de medida es la pulgada. No se realizó ningún cambio. VISIBILIDAD: Variable de tipo real cuya unidad de medida son los metros. Los valores que toma esta variable en los datos usados son -9999 para condición de despejado, 7.0 para cualquier otra cosa, y ? para filas de datos desconocidos. Se consideró, que debido a la poca información que aporta, y a no considerarse relevante, la eliminación de esta columna de de datos para el procesamiento final de la información mediante WEKA. DIRECCIÓN DEL VIENTO: Variable cuyo atributo toma un string de entre los siguientes posibles valores:{Calm, Variable, Este, ENE, NE, NNE, Norte, NNO, NO, ONO, Oeste, OSO, SO, SSO, Sur, SSE, SE, ESE}. No se realizó ningún cambio. VELOCIDAD DEL VIENTO: Puede tomar cualquier valor numérico, medida en millas, excepto cuando no existe viento, denotándose este estado por el estring Calm. Se sustituyó Calm por ‘0’ para que la columna entera fuese de tipo numérico y facilitar su tratamiento. VELOCIDAD DE RÁFAGAS DE VIENTO: Variable de tipo real cuya unidad de medida. Su valor es siempre ‘-’ por lo que se decidió eliminar esta columna de datos. PRECIPITACIÓN: Variable de tipo real cuyos valores no están disponibles ‘N/A’, por lo que se optó por su eleminación. EVENTOS: Variable no disponible (‘?’). Se eliminó esta fila de datos. CONDICIONES: Variable de tipo atributo que puede tener distintos valores con matices muy sutiles. Se decidió agruparlos dentro de clases, para que el error en el procesado de esta variable influyese lo menos posible en la simulación: Despejado, Nubes Dispersas Æ Despejado. Nube en Embudo, Parcialmente Nublado, Nublado, Altamente Nublado ÆNublado. Bancos de Bruma, Bruma Ligera, Bruma Leve, Bruma, Bruma Helada Leve Æ Bruma. Lluvias, Llovizna Leve, Llovizna, Llovizna Abundante, Llovizna Helada Leve, Lluvia Helada Leve, Lluvia Leve, Lluvia, Abundantes Lluvias, Fuertes Lluvias Æ Lluvia. Tormenta Leve, Tormentas Leves y Lluvia, Tormenta, Tormentas y Lluvia, Fuertes Tormentas y Lluvia, Tormentas Leves con Granizo, Tormentas con Granizo Æ Tormenta. Arena, Remolino de Polvo, Nubes de Polvo, Nubes Bajas de Polvo ÆNubes-de-Polvo. Leve Caída de Granizo Pequeño, Caídas de Granizo, Granizo Pequeño, Granizo Leve Æ Granizo. Partículas de Nieve, Caídas de Nieve, Nevada Leve, Nieve, Abundante Nieve Æ Nieve. Niebla, Abundante Niebla, Niebla Leve, Neblina Æ Niebla. Desconocido ÆDesconocido. Por último, se realizó un filtrado sobre todas las filas de datos con datos incompletos, eliminándose dichas filas, como por ejemplo la línea Æ 1996, 07, 01, 25, ?,?,?,?,?,?,?,?,?,? ya que no nos aportan ninguna información de utilidad. Además del filtrado de los datos usados eliminando información no necesaria o incompleta, se añadió una serie de datos que resultaban necesarios para el uso de WEKA. Como WEKA para cada dato sólo acepta una línea, sin tener en cuenta las anteriores, incluimos en cada linea la siguiente información adicional: Variable Temperatura1hora Æ para poder predecir la temperatura de en la hora siguiente necesitamos que en cada fila esté el valor real de dicha medida para poder hallar el error de predicción. Añadimos la variable a continuación de las demás. Variable Temperatura24horas Æ Del mismo modo, necesitamos añadir la temperatura del día después a la misma hora para poder realizar la predicción. Variable Condiciones24horasÆ Por último, añadimos otra variable más cuyo valor será la condición meteorológica del día siguiente a la misma hora para poder predecir dicha variable. Una vez filtrados todos los datos, se añadió una cabezera al fichero obtenido, con el fin de convertirlo en un fichero .arff para que pueda ser usado por WEKA. La cabezera del archivo quedaría de la siguiente forma: % comentarios @relation ‘Meteorologia’ @attribute ‘Anyo’ real @attribute ‘Mes’ real @attribute ‘Dia’ real ... @attribute ‘Direccion del viento’{Calm, Variable, Este, ENE, NE, NNE, Norte, NNO, NO, ONO, Oeste, OSO, SO, SSO, Sur, SSE, SE, ESE} ... @data 1996,07,01,10,66.2,41.0,40,29.98,Calm,0,Despejado,64.4,66.2,Despejado 1996,07,01,11,66.2,41.0,40,29.98,Calm,0,Despejado,64.4,66.2,Despejado 1996,07,01,12,64.4,48.2,56,29.98,Calm,0,Despejado,62.6,64.4,Despejado 1996,07,01,13,64.4,48.2,56,29.98,Calm,0,Despejado,62.6,64.4,Despejado 1996,07,01,14,62.6,48.2,59,29.98,Calm,0,Despejado,68.0,64.4,Despejado RESULTADOS Y ANÁLISIS: A continuación mostraremos los distintos resultados y su posterior análisis de las predicciónes realizadas mediante WEKA. Destacamos aquí que se eligió usar un 80% de los datos para entrenar los diversos métodos, y el 20% restante para probar el modelo obtenido. Así mismo, no todos los campos fueron usados en todos los modelos. Esto lo veremos más detalladamente en cada modelo. Predicción de la temperatura a la hora siguiente: Para esta predicción tomamos en cuenta las siguientes variables: Mes Dia Hora Temperatura Humedad Presion Velocidaddelviento TemperaturaHoraSiguiente Mostramos los modelos de predicción usados: LeastMedSq (-S 4 -G 0) : Entre paréntesis aparecen los parámetros elegidos para el modelo en cuestión. Este método consiste en una regresión lineal por mínimo error medio cuadrático. Los valores obtenidos son: Linear Regression Model temperaturaHoraSiguiente = -0.1746 * mes + -0.0761 * dia + -0.0149 * hora + 1.1981 * temperatura + 0.1938 * humedad + 7.9914 * presion + -0.1086 * velocidaddelviento + -261.7461 === Evaluation on test split === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 0.9481 2.287 3.2949 22.8006 % 26.1584 % 284 13 El error absoluto de predicción es del 22.8% y la media de grados de error es de 2.3º . Obtenemos buenos resultados y es normal, ya que la regresión lineal se vale de datos inmediatamente anteriores para predecir el actual la temperatura no suele experimentar cambios bruscos en periodos cortos de tiempo. El error se puede deber a que la temperatura refleja cambios de las horas nocturnas a la diurnas, y se están cogiendo ambas en algunos casos. Es posible también que en circunstancias como precipitaciones intensas, como pueden ser las llamadas tormentas de verano, hagan que este error aumente, ya que sin previo aviso cambia la temperatura y las condiciones climatológicas. obtienen unos resultados razonables. Aún así, vemos que se IBk (-K 1 -W 0): Este Algoritmo se basa en los K vecinos más próximos, de modo que función de K obtendremos unos resultados u otros. El mejor resultado se ha obtenido para K=1: === Evaluation on test split === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 0.9266 1.1155 3.9484 11.1209 % 31.3466 % 284 13 Con este método obtenemos mejores resultados, el error absoluto de predicción es del 11.12% y la media de grados de error es de 1.11º , ya que usa sólo como datos de predicción la línea anterior, y casi con seguridad la temperatura anterior es igual a la actual. Este método da mejores aproximaciones que el anterior método, ya que el anterior método sólo hace predicciones lineales, con lo cual se comete siempre un mayor error en modelos que no son lineales, como es la predicción de temperatura. El resto de algoritmos nos daban resultados bastante peores así que no recogemos más resultados dignos de mención. Predicción de la temperatura al día siguiente: Para esta predicción tomamos en consideraciones que en el apartado anterior: cuenta las mismas LeastMedSq (-S 4 -G 0) : === Evaluation on test split === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 0.9856 2.5894 4.5687 21.3327 % 28.2149 % 280 2 variables y El error absoluto de predicción es del 21.33% y la media de grados de error es de 2.6º. Vemos como este modelo, para predicciones de temperatura a 24 horas también da unos resultados bastante aceptables. Esto es debido a que en media, la variación de temperatura con respecto del tiempo, es muy lenta, y de un día al anterior, suele hacer la misma temperatura, con una muy leve tendencía de descenso o ascenso, según la época del año que sea. IBk (-K 1 -W 0): === Evaluation on test split === === Summary === Correlation coefficient Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 0.9732 1.2011 2.5028 11.0825 % 18.8435 % 281 16 El error absoluto de predicción es del 11.08% y la media de grados de error es de 2.5º. Este algoritmo nos da mejores resultados por las mismas razones expuestas en el apartado anterior. Predicción de las condiciones meteorológicas al día siguiente: El ultimo punto en la predicción consiste en intentar saber cuales serán las condiciones meteorológicas 24 horas después del momento de estudio. La principal diferencia que tiene este punto con respecto a los dos primeros es que ahora no queremos un valor numérico sino que queremos saber una característica que puede tener solo un número finito de valores posibles. Al intentar predecir un conjunto de valores, ha de tener en cuenta un mayor número de variables, y será más susceptible al error Para observar el correcto funcionamiento de nuestro sistema de predicción observaremos la “matriz de confusión” proporcionada por Weka. En dicha matriz representa los valores estimados frente a los valores reales en una matriz cuadrada. De forma que los aciertos aparecen en la diagonal de la matriz (valor estimado = valor real) y los errores en las restantes posiciones de la misma. Tras probar con muchos sistemas obtenemos que los mejores resultados se obtienen con los siguientes algoritmos: IBk (-K 4 -W 0): Se trata del algoritmo de los K-vecinos mas próximos usando los 4 vecinos que tienen valores de los parámetros conocidos mas parecidos al del caso de estudio: === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 1124 568 0.4315 0.067 0.2009 60.928 % 85.0601 % 1692 68 66.4303 % 33.5697 % === Confusion Matrix === a b 635 123 257 415 5 7 21 58 3 3 0 0 0 0 4 7 0 0 9 13 2 0 c 1 3 10 0 0 0 0 0 0 2 0 d 4 22 2 44 0 0 0 3 0 1 1 e 1 2 0 0 1 0 0 0 0 0 0 f 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 0 h 0 2 0 0 0 0 0 2 0 0 0 i 0 0 0 0 0 0 0 0 0 0 0 j 3 7 0 1 0 0 0 0 0 14 0 k 0 0 0 1 0 0 0 0 0 0 3 | | | | | | | | | | | <-a b c d e f g h i j k classified as = Despejado = Nublado = Bruma = Lluvia = Tormenta = Polvo = Granizo = Nieve = Humo = Niebla = Desconocido Donde observamos un porcentaje de acierto de 66.43% que es un valor bastante malo por lo que debemos mejorar el algoritmo. IBk (-K 1 -W 0): Se trata del algoritmo de los K-vecinos mas próximos usando solo el vecino que tiene valores de los parámetros conocidos mas parecidos al del caso de estudio: === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 1448 244 0.7618 0.0267 0.1621 24.2339 % 68.6503 % 1692 68 85.5792 % 14.4208 % === Confusion Matrix === a b 692 71 68 612 1 4 10 30 0 2 0 0 0 0 3 3 0 0 2 9 2 0 c 0 1 19 0 0 0 0 0 0 0 0 d 4 18 0 81 0 0 0 3 0 0 0 e 0 0 0 0 5 0 0 0 0 0 0 f 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 0 h 0 2 0 3 0 0 0 7 0 0 0 i 0 0 0 0 0 0 0 0 0 0 0 j 0 6 0 1 0 0 0 0 0 28 0 k 0 1 0 0 0 0 0 0 0 0 4 | | | | | | | | | | | <-a b c d e f g h i j k classified as = Despejado = Nublado = Bruma = Lluvia = Tormenta = Polvo = Granizo = Nieve = Humo = Niebla = Desconocido Podemos observar que hemos mejorado el porcentaje de acierto hasta un 85.58% que es un valor mucho mejor y bastante aceptable. Observando la matriz de confusión, vemos que la mayor fuente de errores se produce al confundir los dias Despejados con Nublados y viceversa. Esto es así, porque al hacer la agrupación inicial se agruparon días similares en distintas categorias. Así, Parcialmente nublado pasó a Nublado y Parcialmente Despejado pasó a Despejado, habiendo poca diferencia entre parcialmente nublado y parcialmente despejado (la misma diferencia que entre el vaso medio lleno y el vaso medio vacío). Una forma de subsanar este error habría sido crear una categoría más en el preprocesado de datos en el que agrupar los dias parcialmente nublados y parcialmente despejados (en el simil del vaso, como diría un ingeniero: El vaso es dos veces más grande de lo necesario). J48 TREE: Pasamos a probar con algoritmos basados en árboles binarios. De los distintos árboles que nos ofrece la herramienta este es el que nos da los mejores resultados aunque si los observamos no llega a alcanzar los resultados que hemos obtenido con el algoritmo del vecino mas próximo. Nota: No representamos el árbol obtenido debido a su enorme tamaño. === Evaluation on test split === === Summary === Correctly Classified Instances Incorrectly Classified Instances Kappa statistic Mean absolute error Root mean squared error Relative absolute error Root relative squared error Total Number of Instances Ignored Class Unknown Instances 1305 387 0.6209 0.0467 0.1856 42.4584 % 78.5717 % 1692 68 77.1277 % 22.8723 % === Confusion Matrix === a b 636 116 118 556 2 6 11 47 0 5 0 0 0 0 3 3 0 0 4 11 1 0 c 1 3 13 1 0 0 0 0 0 2 0 d 11 22 2 62 0 0 0 0 0 1 0 e 0 0 0 0 2 0 0 0 0 0 0 f 0 0 0 0 0 0 0 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 0 h 0 2 0 2 0 0 0 10 0 0 0 i 0 0 0 0 0 0 0 0 0 0 0 j 2 7 1 2 0 0 0 0 0 21 0 k 1 0 0 0 0 0 0 0 0 0 5 | | | | | | | | | | | <-a b c d e f g h i j k classified as = Despejado = Nublado = Bruma = Lluvia = Tormenta = Polvo = Granizo = Nieve = Humo = Niebla = Desconocido Donde observamos un porcentaje de acierto próximo al 77%. De nuevo podemos observar, y aquí de una forma más evidente, los fallos existenes que hay cuando los modelos confunden los dias parcialmente nublados y parcialmente despejados, en el punto de error entre dias despejados y dias nublados. Este es un claro ejemplo de la importancia que tiene hacer una buena agrupación, ya que si se agrupan muchos datos en pocos grupos (como es el caso) se pierde precisión, al no haber una clara distinción en los datos de agrupamiento.