
Afuera llueve, pero de esa lluvia valdiviana que parece que no va a parar nunca, y yo acá estoy, con un chal echado en los hombros, mirando un mapa de colores brillantes en la pantalla de mi laptop. Es un mapa que hice yo misma en RStudio, con cuadraditos verdes, cafés y azules, y por un momento me sentí súper orgullosa (es que de verdad, una se siente como una hacker cuando logra que el código no tire error y salga algo visual). Pero entonces me quedé pensando... ¿ese 'verde bosque' que veo ahí es realmente el bosque nativo que tengo detrás de la casa, o es solo un error de mi código que yo estoy queriendo ver como real? Porque claro, una cosa es que el mapa se vea lindo y otra muy distinta es que sea verdad.
Llevo como diez meses en esto de la teledetección, empezando desde una tarde lluviosa de agosto del año pasado donde ni siquiera sabía lo que era un raster, y la verdad es que la mayor parte del tiempo me la paso dudando de lo que hago. El desafío de querer mapear cómo cambia el bosque nativo cerca de mi casa es lo que me mueve, pero la frustración de no saber si mi clasificación supervisada es confiable o si es pura fantasía visual me perseguía todas las noches. Así que me puse a investigar cómo se supone que una sabe si el mapa está bien hecho, y ahí fue cuando me topé con la famosa matriz de confusión.
El día que me di cuenta de que mi mapa era mentira

Durante varias noches de octubre, me dediqué a clasificar imágenes de Landsat 8. Ustedes saben, esas que tienen una resolución espacial de 30 metros, lo que significa que cada píxel en mi pantalla representa un cuadrado de 30 por 30 metros en el suelo. Para alguien que no es geógrafa, entender eso ya fue un mundo. Y entonces, cuando por fin logré que R procesara las 9 bandas del sensor OLI para decirme qué era bosque y qué era matorral, me sentí la reina del mundo. Pero el reflejo de la pantalla de la laptop en el vidrio empañado por el frío de Valdivia me mostraba una realidad distinta: mi mapa decía que había bosque donde yo sabía perfectamente que había una pampa llena de espinillos.
Ahí entendí que no basta con 'mirar' el mapa. Necesitaba una forma matemática de decir: 'mira, mi mapa tiene un 80% de probabilidad de estar en lo cierto'. Y para eso, tuve que aprender a separar mis datos. Es un error de principiante (en el que yo caí redondita, obvio) usar los mismos puntos que usas para enseñarle a la computadora lo que es un bosque, para después preguntarle si lo hizo bien. Es como si el profesor te diera las respuestas del examen antes de tomarlo. No sirve de nada.
Separar el trigo de la paja: entrenamiento y validación
Hace un par de meses, por fin entendí la lógica del paquete caret en R. Lo que una tiene que hacer es tomar todos esos puntitos que recolectó (ya sea yendo a terreno con botas de agua o mirando el Google Earth) y dividirlos. Una parte, digamos el 70%, se lo pasas al modelo para que aprenda (set de entrenamiento). El otro 30% lo escondes bajo llave (set de validación). Y entonces, cuando el modelo termina de clasificar todo, sacas ese 30% y le dices: 'A ver, yo sé que este punto es bosque de verdad, ¿tú qué dices que es?'.
Si te interesa profundizar en cómo llegamos a tener esas imágenes listas para clasificar, hace un tiempo escribí sobre cómo hacer un análisis multiespectral en R usando imágenes de satélite, que es básicamente el paso previo a todo este lío de la validación. Porque si la imagen de entrada está mal, la matriz de confusión solo te va a confirmar el desastre.

Lo bonito de usar R es que, aunque al principio parece que te habla en chino mandarín, una vez que entiendes la función confusionMatrix(), la vida cambia. No es solo un número; es una tabla que te dice exactamente dónde te estás equivocando. Por ejemplo, mi modelo era súper bueno identificando agua (claro, el río Calle-Calle es difícil de perder), pero se volvía loco con el bosque nativo y las plantaciones forestales jóvenes.
El momento de la verdad (y el nudo en la guata)
Una tarde de este invierno, después de pelear con el código casi todo el sábado, finalmente ejecuté la función y vi los resultados en la consola. Mi precisión global (la que llaman 'Overall Accuracy') se veía decente, como un 0.85. Pero cuando bajé la vista al índice Kappa, sentí ese nudo en el estómago al ver que era de 0.32. En ese momento, me di cuenta de que mi mapa era básicamente una moneda al aire. El índice Kappa va de 0 a 1, y un 0.32 es... bueno, es como para cerrar la laptop y ponerse a tejer.
¿Qué significa eso? Que aunque el 85% de mis píxeles parecían estar bien, esa precisión era casi por pura suerte o porque tengo muchísimos píxeles de una sola clase (como el bosque) y muy poquitos de otra. Es aquí donde entra lo que aprendí a porrazos: la matriz de confusión te permite calcular la precisión del productor y la precisión del usuario por cada clase individual. Esto es clave porque me di cuenta de que mi modelo decía 'esto es bosque' casi siempre, incluso cuando eran matorrales, porque tenía demasiados puntos de entrenamiento de bosque y casi ninguno de matorral.
También me pasaba que, como en Valdivia pasamos con nubes, a veces mis imágenes compuestas no estaban tan limpias como yo creía. Si alguna vez intentaste visualizar series temporales de satélite en R para cambios forestales, sabrás que el ruido de una nube mal sacada te arruina cualquier matriz de validación en un segundo.
Por qué no hay que casarse con el índice Kappa

Aquí es donde me pongo un poquito más seria (solo un poquito). En muchos tutoriales te dicen que el índice Kappa es lo máximo, pero resulta que confiar ciegamente en el índice Kappa es un error estadístico grave. He leído por ahí que este índice suele inflar artificialmente la precisión (o castigarla demasiado) en mapas donde las clases están desequilibradas —como cuando tienes mucho bosque y poca ciudad— y donde hay mucha autocorrelación espacial. O sea, que los píxeles que están cerca se parecen entre sí, y eso engaña a la estadística tradicional.
En mi caso, el Kappa de 0.32 me estaba gritando que mis clases estaban descompensadas. Me dolió, claro, pero fue un mapa de navegación. Me dijo: 'Javiera, deja de recolectar puntos de bosque nativo y busca más matorrales y zonas agrícolas'. No era un examen que había reprobado, era la computadora diciéndome dónde tenía que ir a mirar mejor.
Al final, una matriz de confusión no es solo para poner un numerito en un informe. Es para entender el paisaje. Es para darte cuenta de que el sensor Landsat, con sus 30 metros de resolución, a veces no puede distinguir entre un bosque nativo muy denso y una plantación vieja si no le damos la información espectral adecuada de esas 9 bandas que tiene. Es un proceso lento, de ir ajustando, de volver a correr el script mientras el té se enfría en la mesa, pero es la única forma de que, cuando yo diga que el bosque cerca de mi casa está desapareciendo, lo diga con la seguridad de que no es solo un error de mi RStudio.
Si estás empezando como yo, no te asustes con los números bajos. Al contrario, preocúpate si todo te sale 0.99 a la primera, porque ahí es cuando seguro te olvidaste de separar los datos de validación. La teledetección es un arte de paciencia, especialmente cuando la lluvia no te deja salir a ver el bosque de verdad y tienes que conformarte con verlo a través de una matriz de números en la pantalla.