Árbol de decisión

Queremos predecir la calidad del vino rojo en base a 6 variables independientes no lineales, por lo que el árbol de decisión es el algoritmo más indicado para esta situación porque nuestro conjunto de datos de entrada está etiquetado, además de que la predicción dependerá de varias variables continuas.

Usamos el dataset Red Wine Quality en Kaggle, lo puede encontrar en la raíz de este repositorio


Dependencias

Para este trabajo utilizamos:


Ingesta de los datos

Para empezar, leemos el archivo csv y lo guardamos en la variable wine-quality, declaramos la forma que tendrán los datos que guardaremos como un record Wine, creamos una función que nos permite pasar una fila de nuestro archivo csv a una instancia de nuestro record, y finalmente transformamos todas las filas de nuestro csv a records Wine


División del dataset

Nuestro dataset consiste en 1,599 datos, de los cuales los primeros 1,279 (80% del total) se utilizarán para entrenar el árbol de decisión, y los 320 (20% del total) restantes se utilizarán probar el modelo.


Generación del árbol

Como mencionamos previamente, usamos la implementación e Miyosi Ryota para crear nuestro árbol de decisiones. Su librería exporta dos funciones: la primera, make-decision-tree, recibe los datos para generar el árbol de decisiones, la altura máxima del árbol y la propiedad por la que queremos optimizar. La segunda, predict nos permite probar nuestro árbol con una entrada en particular, y nos regresa la predicción que generaría (la usaremos en la última parte del cuaderno).


Análisis del árbol de decisión

Usamos dos técnicas para visualizar nuestros resultados:

  1. Usamos clojure.inspector, una librería de clojure para mostrar interactivamente la estructura de un mapa, en este caso nuestro árbol (para abrir la ventana es necesario correr la celda)
  2. Usamos quickchart.io y su extensión de GraphViz para generar una representación en SVG de los nodos del árbol, y además clojupyter.display/html para mostrar el SVG como imagen en el cuaderno de Jupyter

Validación de resultados

Finalmente, podemos probar nuestro árbol con la parte del dataset que reservamos con este propósito.

Presentamos los resultados primero contando cuántos fueron correctos (la exactitud de nuestro árbol), y después como un gráfico circular o de pastel