Isle Utilities
Connecting Waterpeople
Kamstrup
Kurita - Fracta
Ingeteam
ICEX España Exportación e Inversiones
SCRATS
Schneider Electric
VisualNAcert
LACROIX
Hach
EPG Salinas
UNOPS
Molecor
Control Techniques
Gestagua
Idrica
Elliot Cloud
Vector Motor Control
TEDAGUA
NaanDanJain Ibérica
Fundación We Are Water
EMALSA
ISMedioambiente
Centro Nacional de Tecnología de Regadíos (CENTER)
Ulbios
Laboratorios Tecnológicos de Levante
SEAS, Estudios Superiores Abiertos
GS Inima Environment
s::can Iberia Sistemas de Medición
Fundación Biodiversidad
Almar Water Solutions
Red Control
Catalan Water Partnership
HANNA instruments
Saleplas
ABB
CALAF GRUP
Isle Utilities
Baseform
Regaber
AECID
Barmatec
Likitech
Global Omnium
Xylem Water Solutions España
AMPHOS 21
Aganova
Fundación Botín
Smagua
Consorcio de Aguas de Asturias
Hidroconta
Cajamar Innova
FENACORE
IAPsolutions
TecnoConverting
DuPont Water Solutions
Bentley Systems
Confederación Hidrográfica del Segura
Aqualia
Elmasa Tecnología del Agua
Blue Gold
J. Huesa Water Technology
BELGICAST by TALIS
Sacyr Agua
Prefabricados Delta
BACCARA
IIAMA
Minsait
ACCIONA
Grundfos
Rädlinger primus line GmbH
STF
biv Innova
Cibernos
ITC Dosing Pumps
Grupo Mejoras
Lama Sistemas de Filtrado
AZUD
Saint Gobain PAM
UPM Water
Danfoss
Filtralite
ESAMUR
Terranova
DAM-Aguas
Innovyze, an Autodesk company
NOVAGRIC
Mancomunidad de los Canales del Taibilla
TFS Grupo Amper
Insituform
Agencia Vasca del Agua
AGENDA 21500
Fundación CONAMA
ADECAGUA
Aigües Segarra Garrigues
Asociación de Ciencias Ambientales
CAF
FLOVAC
Redexia network
1 de Febrero en Isle Utilities Webinar Series

Sobre el blog

José María de Cuenca de la Cruz
Curioso, inquieto y creativo… aprendiz de escritor, e interesado también por las nuevas tecnologías y la educación. Me encanta asumir retos y compartir lo aprendido. Trabajando en lo que me apasiona…. me siento como un pez, en el agua claro.

En el anterior post ya vimos que las imágenes de satélite pueden ser una fuente de datos enorme y muy accesible para gestionar los recursos hídricos. Tanto para estimar su cantidad como su calidad. Es también común el uso agrícola de estas imágenes para optimizar los sistemas de regadío, evaluar la salud de los cultivos, e incluso determinar su producción y con ella especular sobre futuros precios.

Su uso en la gestión del agua urbana no es tan frecuente, ni por los servicios de parques y jardines, ni por los de abastecimiento y saneamiento. Pero es igualmente posible, y da la oportunidad de crear sinergias que contribuyan a optimizar el uso de los recursos hídricos en ambos.

El retraso en las aplicaciones urbanas es en parte debido a que las fotos de satélite no tienen una calidad suficiente, y para aplicar las mismas técnicas de análisis a parcelas pequeñas se requieren imágenes de alta resolución. Tradicionalmente el coste de tener fotografías aéreas con una frecuencia suficiente (pocos días) ha sido muy alto. Aunque este panorama cambia rápidamente, con los drones y la miniaturización de las cámaras multiespectrales.

Algunas de estas aplicaciones en los servicios de aguas pueden ser la estimación de afecciones a los acuíferos o a los cauces superficiales por exceso de abonado en las parcelas agrícolas limítrofes, descubrir el uso no autorizado del abastecimiento en caso de restricciones por sequía, o detectar vertidos de aguas residuales. No incluyo intencionadamente la localización de fugas en redes de distribución porque en zonas urbanas es difícil incluir la medición precisa con radar o lidar y sale del ámbito de las imágenes multiespectrales propiamente dichas. Pero todo evoluciona, y de momento ya es posible en el caso de redes en alta que discurran por terrenos rústicos.

Aparte de los escépticos por naturaleza -que cada son menos-, la principal objeción que se puede poner a estas tecnologías de imagen es que en muchos servicios con tarifas reducidas, la mayor parte de sus aplicaciones son poco rentables. Sin entrar en temas como la necesidad de una contabilidad analítica robusta, la repercusión total de los costes y la búsqueda de sinergias mediante economías de escala o al menos colaboraciones entre servicios; hay una forma de hacer más rentables estas tecnologías. Es seleccionar aplicaciones demostrativas que incidan sobre los ingresos no percibidos, en vez de sobre los costes evitados. Por eso este ejemplo: la detección del fraude en el llenado de piscinas.

Para un defraudador, el aliciente es mayor cuanto más elevado sea el importe a pagar, y menor la probabilidad de ser denunciado. En el caso de las piscinas, la “función aliciente” se maximiza ya que su llenado conlleva un importante volumen de consumo, que se puede realizar de manera puntual durante pocas horas, y de forma discreta porque se suelen encontrar en zonas de población dispersa.

Y para quien le persigue, el aliciente disminuye cuanto menor es el precio del bien defraudado. Así, Hacienda ya utiliza estas imágenes desde hace tiempo para detectar piscinas no incluidas en el catastro. Por ejemplo hace años se hicieron eco La Voz de Galicia o Rioja2. Pero una cosa es detectar la construcción de un vaso, y otra cuando se llena de agua. Además de por la dificultad, como nuestros ingresos son menores, los métodos tendrán que ser más “inteligentes” para resultar rentables.

En el ejemplo de este post vamos a utilizar dos fuentes de datos: la más importante, imágenes del satélite Sentinel-2, con una frecuencia de paso de 2 días y una resolución de entre 10 y 20m por pixel. Es lo máximo que he podido localizar disponible libremente en la red, para que los interesados puedan replicarlo. La segunda fuente de datos será la localización de las piscinas en formato shape de Esri. Si no forman parte de la capa de cartografía municipal de nuestro municipio podremos obtenerlas del catastro, o también digitalizarlas con nuestro GIS a partir de una fotografía aérea de Google Earth o similar.

En algunos lugares me consta que los servicios de aguas emulan a Hacienda usando Google Earth para localizar a los abonados con piscinas o jardines y filtrando manualmente aquellos con un consumo de agua demasiado bajo durante la primavera y el verano, programar una visita del inspector. Esto mejorar la detección de fraudes, pero el inspector va a ciegas, solo sabe dónde están las piscinas. En otros servicios el precio del agua es demasiado bajo incluso para hacer esto. Lo que trataremos aquí es automatizar mediante IA el proceso que permite determinar si una piscina está llena o vacía, de manera que el inspector vaya persiguiendo un indicio fundado. No entraré en comparación con el consumo, aunque esto sería fácil de automatizar con una simple consulta a la BD de clientes.

Debido a la reducida resolución de las imágenes Sentinel-2, este ejemplo solo funcionará adecuadamente con las piscinas más grandes. Por ello he seleccionado aquellas con al menos 50m2 cuadrados de lámina de agua, que coinciden con las que mayor aliciente pueden presentar para defraudar. No obstante, utilizando imágenes aéreas o drones es habitual obtener resoluciones de hasta 5cm por pixel, con lo que el método de análisis se podría aplicar tal cual a cualquier piscina, incluso las portátiles.

Entre científicos de datos, es frecuente comentar que el tiempo necesario para preparar la información puede superar hasta el 80% del total necesario para completar un análisis, y que la presentación de los resultados se llevará la mayor parte del resto. En este ejemplo sucede lo mismo: en primer lugar tendremos que obtener las piscinas. En mi caso he partido de un archivo con los polígonos dibujados en muchos casos manualmente con GIS. Luego he obtenido los centroides de esos polígonos para transformar el archivo en uno de tipo puntual. Tras varias pruebas he ajustado manualmente la posición de cada punto a la posición del pixel más representativo del estado de la piscina en la serie de imágenes, y después ejecutar diferentes algoritmos de aprendizaje automático, clásicos y profundos, he determinado el valor de corte en esos 50m2 de lámina de agua para usar con cierta fiabilidad las imágenes del Sentinel2. Además he desechado algunas piscinas abandonadas que digitalicé originalmente, y también algunas otras cubiertas, en las que lógicamente el algoritmo no es capaz de funcionar al tener un comportamiento espectral muy diferente.

Por otra parte, hay que preparar las imágenes. Deben ser nítidas, sin nubes que obstaculicen la zona a visualizar, y en las que aparezcan la mayor parte de las piscinas en ambas situaciones, llenas y vacías. Esto se soluciona buscando imágenes de días claros desde febrero a septiembre. Como en cualquier sistema de inteligencia artificial, cuanto mayor sea el número de datos con los que entrenemos, mejor funcionará. Dado que en mi caso iba a etiquetar manualmente cada piscina con su estado, solo he utilizado 6 imágenes, de las que resulta un conjunto de datos reducido, con el que no todos los métodos de aprendizaje son capaces de funcionar correctamente. No obstante el seleccionado tiene una precisión cercana al 85%, que para una demostración del concepto me parece suficiente.

Las seis escenas son todas del pasado año correspondientes a la zona centro de Castilla y León. Cada una consta de 12 bandas espectrales de diferente longitud de onda, y una imagen RGB. Con GIS he recortado en ellas el término municipal de Valladolid, reduciendo enormemente su tamaño. De haber incluido otros términos, por ejemplo en un radio de 50 km, podría haber obtenido un mayor número de especímenes para el entrenamiento, pero ni podría compartir aquí las imágenes para que los interesados puedan replicar el ejemplo, ni haber generado en un tiempo prudencial este fichero shape de piscinas… No obstante, si alguien más se anima e incorpora sus propios datos, el modelo mejorará :-)

Pero no todas las bandas espectrales son iguales: los sensores del satélite Sentinel2 no tienen la misma resolución en todas ellas. Dado que para procesar las imágenes deben convertirse en matrices numéricas con las mismas dimensiones, es necesario hacer un reescalado. Para ello se “duplica” la resolución de las bandas correspondientes al borde rojo (B5, B6, B7) y del infrarrojo (8ª, 11 y 12) que originalmente tienen 20m por pixel, hasta los 10m por pixel. Y se desprecian las bandas con menor resolución y menos interesantes para esta aplicación: B1 de aerosol costero, B9 de vapor de agua y B10 de cirrus en infrarrojo (60m por píxel). Para el reescalado se utiliza con el método de valores vecinos más cercanos de la librería de funciones OpenCV para visión artificial. Este proceso se repite para cada imagen de estas bandas, en cada una de las 6 escenas.

Tanto los datos preprocesados (imágenes ya recortadas y reescaladas, y el archivo shapefile de puntos para las piscinas más grandes) como el código con el algoritmo empleado están en este repositorio de GitHub al efecto. Como siempre, he montado la demostración en un cuaderno Jupyter para que sea lo más fácil de seguir posible. Tras la cargar la información de los puntos a considerar desde el archivo shape, se recorren todas las escenas con sus imágenes ya recortadas, extrayendo el valor en esas coordenadas de cada una de las bandas espectrales. Para cada escena se crea un dataset en csv, que también se suministra aquí. A continuación todos esos dataset se combinan con el estado de la piscina en cada escena etiquetado con GIS en el shape, formando un único banco de datos que se utilizará para la predicción. Es decir, hasta aquí, todo el trabajo ha sido obtención y preparación de los datos. No hemos comenzado aún el desarrollo: por esto se dice que la inteligencia artificial es solo una rama de la ciencia de datos, y que el mérito está en la preparación de la información más que en el análisis.

Vamos con él: uso un algoritmo de clasificación basado en árboles de decisión. En conjuntos de datos bastante limitados como este es el clasificador que mejor suele comportarse. Uso la función DecisionTree de la librería sklearn que divide los registros (filas del banco de datos) en grupos según sus características (datos en columnas), hasta obtener los de cada grupo bajo una sola etiqueta, que coincidirá con una de las buscadas (en este caso piscina llena o vacía). En cada nodo del árbol el algoritmo trata de maximizar la ganancia de información con una medida de pureza, calculada como la entropía.

Esta forma de trabajo es fácilmente interpretable a través de su representación gráfica (se genera y se incluye en un pdf aquí), a diferencia con otros algoritmos de “caja negra” como las redes neuronales. Además permite manejar valores atípicos, perdidos o irrelevantes, es decir, cuando los datos son pocos o no demasiado buenos para otros algoritmos. Aunque esto último hace que su precisión no pueda ser muy elevada. Para mejorarlo, se puede aplicar en forma de bosque: se denomina Bosque Aleatorio a un modelo compuesto de varios árboles de decisión empaquetados, que partiendo de un solo árbol único, se fragmentan en un conjunto aleatorio de características con cada división, tomando solo algunas de ellas en vez de todas. Esto descorrela los árboles, al hacer una división aleatoria de las características, para tratar de evitar la influencia de errores en los datos. Se puede implementar con la función RandomForest de la misma librería sklearn.

Pero es mejor recurrir a una técnica ligeramente diferente: la combinación de modelos de aprendizaje o ensemble learning. Fue creada en 1990 por Schapire y es una de las más potentes si exceptuamos las redes neuronales. Se basa en el principal argumento para defender la democracia: que la opinión de muchos es más acertada que la de uno solo. Tiene diversas variantes, según se utilicen diferentes modelos y el resultado final se someta a la “votación” de cada uno, o embolsado, cuando se usa un mismo modelo con subconjuntos de datos tomados aleatoriamente. Con todo, estas técnicas son milagrosas: si los algoritmos seleccionados tienen una probabilidad más elevada de equivocarse que de acertar, el resultado conjunto será aún peor.

La seleccionada en este ejemplo es una técnica de embolsado (bagging) denominada adaboost (adaptative boosting): toma varios algoritmos base iguales de manera secuencial (en este caso varios árboles de clasificación), y va asignando pesos crecientes a los datos incorrectamente clasificados, iterando el modelo en el conjunto de entrenamiento con los pesos actualizados. El modelo final es la suma ponderada de los resultados de los n algoritmos base.

Al ser pocos los datos –pese al tiempo que exigió prepararlos-, el tiempo de aprendizaje es prácticamente nulo. Pero el resultado de éxitos del clasificador llega al 85%. Teniendo en cuenta que solo se han utilizado 6 “firmas espectrales” de cada piscina, y del reducido número de estas (solo las que superan 50m2 en un único término municipal), creo que la viabilidad del concepto queda demostrada.

Si algún lector interesado se anima a probarlo bajo este mismo esquema en otra zona, puede combinar con sus propios datos los dataset incluidos con este ejemplo, y mejorar el entrenamiento de los algoritmos. E igualmente ofrecerlos a terceros. Con datos suficientes, la precisión superará fácilmente el 90 ó 95%. Mala noticia para los defraudadores…

Pero, volviendo a nuestro servicio ¿cómo identificar a esos defraudadores? Fácil: simplemente hay que añadir en el shape de puntos con el que localizamos las piscinas, una columna con el identificador de la acometida que da servicio a esa parcela. Si en el periodo que detectamos el llenado no se registra un volumen equivalente al volumen de la piscina (fácil de calcular: tenemos la superficie en el shape de polígonos, y podemos suponer una profundidad media de 1,5m), estaremos ante un candidato a la inspección. Podemos incluso afinar más, si tenemos tele lectura, comparando esta entre las fechas de las dos imágenes consecutivas en las que el sistema detecta que cambia de estado la piscina. Porque cuanto antes se produzca la inspección, más probabilidades habrá de obtener evidencias.