## 4 Software Architecture  
Domain experts and researchers defined the following requirements to interactively analyze data and manually create decision trees:  
* It has to allow domain experts to make a feature selection before starting the analysis. * It has to split the dataset into training and testing sets according the percentage supplied by the user. * The tree viewer has to show at first sight the purity of the nodes, and it has to automatically reorganize the layout to display the tree structure as a way to maintain the decision tree in a comprehensive way in every step. * The tree interaction has to enable the domain experts an to delete nodes, create decision nodes, or define nodes as leaf nodes. * The decision support visualization has to include the data and a representation for the feature weight in the model, presenting the data details on demand. * It must offer an appropriate way to represent the dimensionality reduction when there are only two classes left in the interest node, due to LDA limitations. * The tool has to automatically determine the cutoff values according the entropy values, as described in the method. * Lastly, the domain expert has to be able to compare with automatic trees and easily export the results. To fulfill these requirements, we have developed GDT, a pure python visualization web tool. GDT is designed with a client-server architecture, as shown in Figure 3, and is structured in three layers: presentation, service, and logic. It employs the Python Plotly DashAPI to manage the presentation and the service layer. Plotly Dash is an open-source product, integrated with Python and R, which facilitates the creation of reactive web applications focused on data analysis and visualization. Dash applications have a Flask web server whose interface is represented by the use of the JavaScript library React;s. It is complemented with the Dash Bootstrap Components library to include Dash in the bootstrap style. The use of Dash allows users to create responsive web applications without needing knowledge of JavaScript programming. The web conception of these applications makes them multi-platform and ready for use on mobile devices. Calculations and data management are performed in the logic layer. For this, we use pandas [29] for managing data in dataframe format, scikit-learn [30] for applying machine learning algorithms, and modifications to the Python C4.5 [31] algorithm for building the interactive tree. The use of the scikit-learn library is common when conducting machine learning analysis in the Python environment. For the creation of automatic decision trees, scikit-learn implements the Classification And Regression Trees (CARTs) algorithm using the Gini impurity or entropy as a split criterion. It creates a classifier using the features of the dataset and thresholds calculated by the algorithm and classifying criterion until all leaves are pure or no more splits are possible, unless a maximum depth or minimum number of samples is established. This approach could lead to overfitting [4], so it is possible to pass a value to perform cost-complexity pruning. In classification problems, it is common for the data to be imbalanced among classes. To address this issue, scikit-learn provides the ability to adjust the weights assigned to each class [32], ensuring a  
Figure 2: Schematic of user interaction for node building. The method proposes applying LDA in every target node subset, represent it on Star Coordinates, and decide the partitioning feature from that visualization. more balanced and accurate classification. However, we must note that one of the biggest challenges of decision trees applied to real-world problems is that automatically generated trees may be too big and/or complex for users to understand [7].