import pandas as pd
# Rutas a los archivos CSV
= "datos\\base_de_datos_gis.csv" # contiene: fecha,punto,pixel,banda,reflect,longitud,latitud
archivo_reflectancias = "datos\\base_de_datos_lab.csv" # contiene: fecha,longitud,latitud,param,valor
archivo_parametros
# Leer los archivos
= pd.read_csv(archivo_reflectancias)
df_reflect = pd.read_csv(archivo_parametros)
df_param
# Filtrar los parámetros "secchi"
= df_param[df_param["param"].str.lower() == "secchi"]
df_secchi = df_reflect[(df_reflect["pixel"] == "3x3")]
df_reflect
# Merge por fecha y coordenadas
= pd.merge(
merged
df_secchi,
df_reflect,=["fecha", "latitud", "longitud"],
on="inner"
how
)
# Pivotear la tabla para poner bandas como columnas
= merged.pivot_table(
tabla_final =["param", "fecha", "longitud", "latitud", "valor"],
index="banda",
columns="reflect"
values
).reset_index()
# Reordenar columnas: param | B01 | B02 | ... | B8A
= ['B01', 'B02', 'B03', 'B04', 'B05', 'B06', 'B07', 'B08', 'B11', 'B12', 'B8A']
bandas = ['valor'] + bandas
columnas_finales
# Crear Tabla final
= tabla_final[columnas_finales] df
Estimación de profundidad de disco de Secchi para el desarrollo de un algoritmo mediante técnicas de teledetección satelital
Este sitio web contiene cuestiones relacionadas a la estimación de la profundidad de disco de Secchi mediante técnicas de sensado remoto. Se presenta información proveniente de investigaciones previas y se discute la confección de modelos de regresión mediante código de programación así como su evaluación mediante pruebas estadísticas.
GISTAQ, UTN, FRRe, Quarto
1 Revisión bibliográfica
Esta revisión tiene como objetivo identificar los enfoques más comunes en la literatura, los tipos de datos utilizados y las variables espectrales que se consideran más relevantes para este tipo de estimaciones.
1.1 Profundidad de disco de Secchi
La profundidad de visibilidad del disco de Secchi \((SDD)\) es una medida ampliamente utilizada para evaluar la transparencia del agua. Se define como la profundidad en metros a la cual un disco blanco circular desaparece al dejarlo descender en un cuerpo de agua.
Esta variable es un indicador indirecto de la calidad del agua, ya que se relaciona con la concentración de sedimentos en suspensión, fitoplancton y otros materiales particulados. Continua siendo utilizado debido a la simplicidad y rango de aplicación universal del método, además de tratarse de un parámetro fácilmente entendible por el público.
1.2 Métodos tradicionales de estimación
En las últimas décadas, se han desarrollado múltiples ecuaciones empíricas y modelos basados en datos in situ y sensores remotos para estimar esta profundidad de manera eficiente y a gran escala. El objetivo de recopilar es identificar patrones comunes, variables predictoras relevantes y estrategias metodológicas empleadas.
Nombre | Variable | Formula | Muestras | R² |
---|---|---|---|---|
Dekker and Peters | \(\mathrm{ln(SDD)}\) | \(\mathrm{ln(Red)}\) | 15 | 0.86 |
Dominguez Gomez et al. | \(\mathrm{SDD}\) | \(\mathrm{(Green)^x}\) | 16 | 0.90 |
Giardino et al. | \(\mathrm{SDD}\) | \(\mathrm{Blue/Green}\) | 4 | 0.85 |
Kloiber et al. | \(\mathrm{ln(SDD)}\) | \(\mathrm{Blue/Red + Blue}\) | 374 | 0.93 |
Lathrop and Lillesand | \(\mathrm{ln(SDD)}\) | \(\mathrm{Green}\) | 9 | 0.98 |
Mancino et al. | \(\mathrm{SDD}\) | \(\mathrm{Red/Green + Blue/Green + Blue}\) | 60 | 0.82 |
En la mayoría de los casos la relación entre \(SDD\) y la intensidad de la luz es no lineal, por lo que se utiliza \(ln(SDD)\) para realizar la regresión.
La correlación con la banda roja puede explicarse causalmente por la correlación positiva directa entre la reflectancia en el rojo y la carga bruta de partículas que induce la dispersión de partículas. De manera que mientras que la claridad del agua \((SDD)\) desciende, la intensidad en el rojo aumenta [2].
Como referencia se presentan las propiedades de las distintas bandas de la plataforma espacial Sentinel-2:
Sentinel-2A | Sentinel-2B | ||||
---|---|---|---|---|---|
Banda | Resolución espacial (m) | Longitud de onda (nm) | Ancho de banda (nm) | Longitud de onda (nm) | Ancho de banda (nm) |
\(\mathrm{B01}\) (aerosol) | 60 | 442.7 | 20 | 442.3 | 20 |
\(\mathrm{B02}\) (blue) | 10 | 492.7 | 65 | 492.3 | 65 |
\(\mathrm{B03}\) (green) | 10 | 559.8 | 35 | 558.9 | 35 |
\(\mathrm{B04}\) (red) | 10 | 664.6 | 38 | 664.9 | 31 |
\(\mathrm{B05}\) (red edge) | 20 | 794.1 | 14 | 703.8 | 15 |
\(\mathrm{B06}\) | 20 | 748.5 | 14 | 739.1 | 13 |
\(\mathrm{B07}\) | 20 | 782.8 | 19 | 779.7 | 19 |
\(\mathrm{B08}\) (NIR) | 10 | 832.8 | 105 | 832.9 | 104 |
\(\mathrm{B8A}\) | 20 | 864.7 | 21 | 864.0 | 21 |
\(\mathrm{B09}\) | 60 | 945.1 | 19 | 943.2 | 20 |
\(\mathrm{B10}\) | 60 | 1373.5 | 29 | 1376.9 | 29 |
\(\mathrm{B11}\) (SWIR 1) | 20 | 1613.7 | 90 | 1616.4 | 94 |
\(\mathrm{B12}\) (SWIR 2) | 20 | 2292.4 | 174 | 2185.7 | 184 |
1.3 Regresión lineal
En estadística, la regresión lineal es un modelo matemático usado para aproximar la relación de dependencia entre una variable dependiente \(Y\) con \(m\) variables independientes \(X_i\). Este modelo puede ser expresado como:
\[ Y = \beta_0 + \beta_1 X_1 + \cdots + \beta_m X_m\]
donde:
- \(Y\) es la variable dependiente o variable de respuesta.
- \(X_1,X_2,...X_m\) son las variables explicativas, independientes o regresoras.
- \(\beta_0,\beta_1,\beta_2,...\beta_m\) son los parámetros del modelo, miden la influencia que las variables explicativas tienen sobre el regrediendo.
1.3.1 Selección de variables
La seleccion de variables y características es el foco de mucha investigación. El objetivo de la selección de variables es mejorar el rendimiento de predicción de los predictores y proporcionar una mejor comprensión del proceso subyacente que generó los datos.
La identificación de las variables más relevantes para incluir o excluir en un modelo predictivo es un paso fundamental en cualquier investigación rigurosa, especialmente cuando se busca construir modelos con alto poder explicativo y capacidad de generalización.
Comprender qué variables contribuyen en mayor medida a la calidad de las predicciones permite no solo mejorar el desempeño del modelo, sino también interpretar con mayor claridad los fenómenos que se están estudiando.
No existe una forma segura de definir la importancia de una variable puesto que la utilidad de la misma depende del modelo implementado y de las demás variables con las que interactua: una variable que es completamente inutil por si misma puede resultar en una mejora del rendimiento significativa cuando es considerada junto con otras variables [3].
A pesar de las dificultades existen estrategias útiles para determinar un subconjunto de variables útiles para la predicción. Tal es el caso de los métodos forward selection y backwards elimination. En forward selection, las variables son progresivamente incorporadas, evaluando el modelo al paso de cada una, mientras que en backwards elimination uno empieza con el conjunto entero de variables y progresivamente elimina las menos prometedoras.
Una forma de implementación de forward selection es por empezar por un modelo exento de variables independientes, pero cuyo término independiente sea la media de las variables de respuesta. A partir de este valor se calcula el residuo como la diferencia entre el valor verdadero \(Y\) y el valor predecido \(Y_{pred}\).
\[r = Y - Y_{pred}\]
Seguidamente, se computa la correlación entre cada variable independiente \(X_i\) con el residuo y se incorpora al modelo la variable con la mayor correlación absoluta. El proceso se repite esta vez con las predicciones del nuevo modelo y se continua hasta alcanzar una desempeño deseado o un número determinado de variables. Este método fue utilizado satisfactoriamente en investigaciones previas [4].
Una herramienta útil para ayudar en la selección de variables es una matriz de correlación. Dos variables prefectamente correlacionadas resultan redundantes en el sentido de que añadir ambas no aporta información adicional. Sin embargo, una correlación muy alta entre variables (o anti-correlación) no significa ausencia de complementariedad.
1.3.2 Generación de características lineales y no lineales
Incluir nuevas variables a partir de las originales, como productos, cocientes o transformaciones no lineales (por ejemplo, logaritmos, o raíces cuadradas) permite capturar relaciones más complejas entre las variables independientes y la variable objetivo. Por ejemplo, si se dispone de datos espectrales, pueden construirse razones entre bandas (band ratios) o índices espectrales que resalten ciertas propiedades físicas del fenómeno estudiado. Estas nuevas características permiten al modelo lineal aproximar mejor la relación entre los datos y la salida, especialmente cuando la relación real no es perfectamente lineal.
2 Regresión Lineal
La construcción del modelo se lleva a cabo utilizando la versión de Python 3.12 y las librerías previamente especificadas, detallando la función de cada pieza de código, observaciones, avances y descubrimientos.
2.1 Librerías
Para regresión lineal se usan principalmente las librerías de Python numpy, pandas y Scikit-learn.
- Scikit-learn: está en el corazón de las operaciones de ciencias de datos en Python. Ofrece módulos para procesamiento de datos, aprendizaje supervisado y no supervisado, selección y validación de modelos, y métricas de error.
- Pandas: especializada en la manipulación y el análisis de datos. Ofrece estructuras de datos y operaciones para manipular tablas numéricas y series temporales.
- NumPy: provee al usuario con arreglos multidimensionales, junto a un gran conjunto de funciones para operar en estos.
2.2 Lectura de datos
Para la carga, lectura y manipulación de la información la librería Pandas permite convertir un archivo .csv en un DataFrame, estructura de datos que facilita la manipulación de estos. El fragmento de código siguiente agrupa los valores de \(SDD\) con los valores de reflectancia a diferentes longitudes de onda para los cuales coinciden fecha, latitud y longitud y crea un nuevo DataFrame.
El DataFrame obtenido se asemeja a la siguiente tabla:
\(\mathrm{SDD}\) | \(\mathrm{B01}\) | \(\mathrm{B02}\) | \(\cdots\) | \(\mathrm{B12}\) | \(\mathrm{B8A}\) |
---|---|---|---|---|---|
10 | 0,1728 | 0,1754 | \(\cdots\) | 0,1404 | 0,1869 |
15 | 0,1497 | 0,17022 | \(\cdots\) | 0,1113 | 0,1567 |
\(\vdots\) | \(\vdots\) | \(\vdots\) | \(\cdots\) | \(\vdots\) | \(\vdots\) |
125 | 0,1571 | 0,1563 | \(\cdots\) | 0,1419 | 0,1436 |
135 | 0,1503 | 0,1591 | \(\cdots\) | 0,1420 | 0,1454 |
2.3 Análisis de los datos
La relación no lineal entre la penetración de la luz y la profundidad de disco de Secchi fue ya descrita por diversos autores que hallan una mejor descripción de esta como una de tipo logaritmica [5]. Se verifica este comportamiento con las bandas B04, B05 y B06:
2.4 Desarrollo del modelo
Para el desarrollo del modelo se implementó la clase RegresionLineal
, que contiene el código necesario para la construcción y selección de variables así como para la validación cruzada del modelo. La misma requiere unicamente de los arrays correspondientes a la variable objetivo y a las características con las que estimarla. El script se encuentra disponible acá.
Se realiza la búsqueda de ecuaciones utilizando los valores de reflectancia corregidos por SEN2COR y por ACOLITE de manera separada.
2.4.1 Corrección por SEN2COR
La implementación del método sepwise forward selection permite evaluar la adición de variables al modelo predictivo en una instancia inicial donde no se general características adicionales. Los resultados de cada paso se encuentran resumidos en la siguiente tabla:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1590 | -0.1590 | 44.9312 | 70.11 |
1 | B05 | 0.1760 | 0.0582 | 38.0741 | 67.11 |
2 | B02 | 0.5934 | 0.4579 | 26.1734 | 62.09 |
3 | B08 | 0.6696 | 0.4713 | 23.4547 | 62.36 |
4 | B03 | 0.6778 | 0.3555 | 23.4715 | 64.23 |
5 | B04 | 0.6844 | 0.1585 | 23.1204 | 66.14 |
La banda B05 es la banda que por si sola resulta en la mayor mejoría para el valor de \(R^2\), seguida por B02 y B08, a partir de la cual el valor de \(R^2-ADJ\) comienza a disminuir, indicando una posible situación de sobreajuste. De este modo, el mejor modelo que puede obtenerse sin generar características adicionales consta de tres variables.
Haciendo uso de la relación logaritmica entre la profundidad de disco y la penetración de la luz descrita y probada previamente se obtiene un modelo con una notable mejoría:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1490 | -0.1490 | 47.3910 | 0.85 |
1 | B05 | 0.2614 | 0.1559 | 37.7622 | -3.21 |
2 | B02 | 0.8055 | 0.7406 | 19.9813 | -15.71 |
3 | B8A | 0.8118 | 0.6990 | 18.2036 | -14.23 |
4 | B03 | 0.8540 | 0.7079 | 20.1722 | -13.46 |
5 | B07 | 0.8625 | 0.6334 | 18.0910 | -12.14 |
La mejoría se extiende hasta la adición de la variable B02, después de la cual hay una ligera disminución de \(R^2-ajustado\), pero no lo suficientemente significativa como para tratarse de un caso de sobreajuste considerable.
La aplicación del logaritmo puede extenderse a las variables mismas, resultando en un modelo predictivo mucho más certero con una menor cantidad de variables:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1490 | -0.1490 | 47.3910 | 0.85 |
1 | log(B05) | 0.3299 | 0.2342 | 34.0623 | -4.28 |
2 | B02 | 0.8916 | 0.8555 | 17.7329 | -19.53 |
3 | log(B04) | 0.9018 | 0.8430 | 16.4850 | -18.71 |
4 | log(B8A) | 0.9160 | 0.8321 | 14.0048 | -17.80 |
5 | B06 | 0.9155 | 0.7746 | 14.1346 | -15.80 |
La combinación de log(B05) y B02 resulta prometedora. La adición de más variables parecería tender a explicar ruido. Los coeficientes y ordenada de la ecuación resultante son:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1490 | -0.1490 | 47.3910 | 0.85 |
1 | log(B05) | 0.3299 | 0.2342 | 34.0623 | -4.28 |
2 | B02 | 0.8916 | 0.8555 | 17.7329 | -19.53 |
Los coeficientes y ordenada resultantes de considerar a las primeras dos variables son:
Variable | Coeficiente |
---|---|
log(B05) | -12.894377 |
B02 | 29.112366 |
Ordenada | -10.139788 |
El uso de cocientes entre las variables otorga una cantidad mucho más extensiva de predictores, observamos que de considerar a estos junto con las variables linealizadas, estos predominan como mejores contribuyentes a la mejora de la predicción:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1490 | -0.1490 | 47.3910 | 0.85 |
1 | B05/B02 | 0.8822 | 0.8654 | 15.6041 | -21.59 |
2 | B11/B01 | 0.8991 | 0.8654 | 14.7254 | -21.21 |
3 | B03/B05 | 0.9093 | 0.8549 | 14.4228 | -19.65 |
4 | B01/B12 | 0.9147 | 0.8293 | 14.5629 | -18.21 |
5 | B04/B03 | 0.9195 | 0.7853 | 15.3260 | -16.76 |
Los coeficientes y ordenada resultantes de considerar a las primeras dos variables son:
Variable | Coeficiente |
---|---|
B05/B02 | -3.972381 |
B11/B01 | 1.439859 |
Ordenada | 7.409266 |
2.4.2 Corrección por ACOLITE
Se repite el proceso que con los datos corregidos por el algoritmo SEN2COR. Se menciona que en la lectura y tratamiento de datos se descartaron los puntos para los cuales los valores de reflectancia eran negativos luego de la corrección.
Partimos de haber hallado que la aplicación del logaritmo a la profundidad de disco resulta en un mejor ajuste. En relación a los valores corregidos por ACOLITE esto devuelve los siguientes resultados:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1230 | -0.1230 | 47.8282 | 2.93 |
1 | B05 | 0.1431 | -0.0145 | 38.8925 | 0.45 |
2 | B02 | 0.7703 | 0.6647 | 27.3299 | -7.93 |
3 | B08 | 0.8043 | 0.6267 | 23.1573 | -7.37 |
4 | B03 | 0.8874 | 0.6895 | 16.6068 | -10.80 |
5 | B8A | 0.8968 | 0.4783 | 16.4352 | -10.19 |
Observamos nuevamente un máximo y un mínimo de \(R^2\) y \(AIC\) respectivamente. Los valores de \(R^2\) y \(R^2-ADJ\) aumentaron significativamente respecto a aquellos con la corrección por SEN2COR.
Para una relación doblemente logarítimica, obtenemos lo siguiente:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1230 | -0.1230 | 47.8282 | 2.93 |
1 | log(B05) | 0.3521 | 0.2327 | 28.9200 | -2.08 |
2 | log(B02) | 0.8293 | 0.7523 | 21.0484 | -11.16 |
3 | B01 | 0.8639 | 0.7427 | 18.4856 | -10.69 |
4 | B11 | 0.8711 | 0.6498 | 17.5812 | -8.84 |
5 | log(B04) | 0.8716 | 0.3676 | 19.2365 | -6.86 |
Variable | Coeficiente | |
---|---|---|
0 | log(B05) | -4.893334 |
1 | log(B02) | 4.527886 |
2 | Ordenada | 3.889220 |
Donde esta vez se ve una desmejora respecto al modelo corregido por SEN2COR para un modelo de dos variables logarítimicas.
La incorporación de cocientes al abanico de variables devuelve las siguientes métricas:
Paso | Variable | R² | ADJ-R² | RMSE | AIC |
---|---|---|---|---|---|
0 | Ninguna | -0.1230 | -0.1230 | 47.8282 | 2.93 |
1 | B05/B03 | 0.8297 | 0.7984 | 21.6939 | -12.63 |
2 | B08/B06 | 0.8565 | 0.7913 | 21.2205 | -12.26 |
3 | B11/B05 | 0.8722 | 0.7590 | 16.6840 | -11.29 |
4 | log(B12) | 0.9104 | 0.7675 | 18.9655 | -11.22 |
5 | B02/B12 | 0.9159 | 0.6325 | 18.0983 | -11.07 |
Variable | Coeficiente | |
---|---|---|
0 | B05/B03 | -2.423037 |
1 | B08/B06 | 2.093951 |
2 | Ordenada | 4.146319 |
Nuevamente, se ve una desmejora respecto al modelo corregido por SEN2COR. El número de variables se reduce a una.
2.5 Ecuaciones halladas
El par de mejores ecuaciones halladas para cada algoritmo de corrección utilizando la transformación logarítmica fueron las siguientes: \[ log(SDD)_{SEN2COR} = -12.89 \cdot log(B05) + 29.11 \cdot B02 - 10.14 \]
\[ log(SDD)_{ACOLITE} = -4.89 \cdot log(B05) + 4.53 \cdot log(B02) + 3.89 \]
Sus ajustes se visualizan de la siguiente manera:
El par de mejores ecuaciones halladas para cada algoritmo utilizando cocientes entre las variables es:
\[ log(SDD)_{SEN2COR} = -3.97\frac{B05}{B02} + 1.43\frac{B11}{B01}+ 7.41 \]
\[ log(SDD)_{ACOLITE} = -2.42\frac{B05}{B03} + 2.09\frac{B08}{B06}+ 4.15 \]
Sus ajustes se visualizan de la siguiente manera:
Observamos que la utilización del algoritmo de ACOLITE para la corrección atmosférica ocasiona una desmejora en la estimación.