Árboles de decisión: por qué tu primera versión siempre está mal
Un árbol de decisión es lo que se arma cuando encadenas varias decisiones. Piénsalo como un mapa conceptual, o como una relación jerárquica.
Arriba está el nodo principal: la primera pregunta. De ahí salen dos ramas, sí y no. De cada rama sale otra pregunta, con sus dos ramas. Y así hasta llegar a un resultado final.
Crece más rápido de lo que crees
Este es el número que conviene tener presente antes de diseñar cualquier cosa con condicionales:
- 3 decisiones → 8 resultados posibles
- 4 decisiones → 16
- 10 decisiones → 1,024
Crece de manera exponencial. Y no es un problema teórico: si estás decidiendo si invertir o no en una acción, las variables son el tipo de cambio, la expectativa al alza o a la baja, la relación con otras monedas, las decisiones de la gente que dirige esas empresas, y una lista que no se acaba. Peor todavía: varias de esas variables ni siquiera son de sí o no, son estructuras con más opciones adentro.
Un árbol de decisión puede ser tan simple como una pregunta o tan complejo como el problema lo pida. Casi siempre es más complejo de lo que uno calculó al empezar.
El ejemplo de la luz
Quiero enseñar esto con el ejemplo más tonto que se me ocurrió, porque falla, y falla de la manera en la que fallan las cosas de verdad.
Queremos que una luz se prenda sola. Primera versión, en pseudocódigo:
si es de noche
prender la luz
de lo contrario
apagar la luz
Se ve bien. Y es inservible: cuando te vas a dormir, la luz se queda prendida toda la noche.
El error no está en la lógica. La lógica hace exactamente lo que le pediste. El error está en que la condición "es de noche" no era la que importaba.
Segunda versión
Metemos una decisión adentro de la otra:
si es de noche
si queremos dormir
apagar la luz
de lo contrario
dejar la luz prendida
de lo contrario
apagar la luz
Ahora sí. Dos niveles, tres caminos posibles, y el comportamiento que queríamos.
Fíjate en la rama del día: ahí no preguntamos si queremos dormir. No hace falta, porque la luz va a estar apagada de todos modos. Los árboles reales están llenos de ramas asimétricas como ésa, y esa asimetría es justo lo que hace que sean difíciles de leer y fáciles de romper.
Lo que me sigue pareciendo lo importante
Cuando expliqué esto en el podcast, dije que esperaba que se entendiera sólo con audio, y la verdad es que no se entendía bien. Escrito se ve en dos segundos, que es una de las razones por las que estos textos existen. Además, lo que no comenté en ese momento es que los árboles de decisión no sólo son binarios, es decir, no sólo con preguntas de sí o no, pueden tener rangos o varias categorías. También existen algoritmos para descubrir esas reglas de forma automática. Lo dejé simple para que los ejemplos fueran entendibles.
Pero lo que me quedó del ejercicio no fue el anidamiento. Fue que la primera versión de un árbol de decisión casi siempre está mal, y está mal por omisión, no por error. No sólo cuando te equivocas, sino también cuando se te olvidan condiciones. Y sólo te enteras cuando algo se comporta de una manera que nadie pidió y que técnicamente es correcta.
Es un buen recordatorio cada vez que alguien dice que un sistema automático "hizo algo mal". Muchas veces hizo exactamente lo que se le indicó, con el árbol incompleto que alguien le dio.
Este texto sale del episodio 001 del Podcast Algoritmos, sobre cómo decide una computadora.