Il codice utilizzato permette di fare uso del DecisionTree di scikit-learn per determinare se un nuovo impiegato avrà uno stipendio maggiore rispetto alla mediana degli stipendi degli impiegati nel dataset.
Il dataset è reperibile su Stack Overflow Developer Survey, 2017 e deve essere scaricato per il corretto funzionamento del codice.
Sono state usate le librerie:
- numpy, pandas per operare sul dataset
- matplotlib per disegnare i vari grafici
- sklearn per definire il decision tree, per creare la roc curve e per utilizzare il 10-fold cross validation
- pydotplus, graphivz, collections per disegnare il grafo dell'albero
Nella prima parte del codice viene riadattato il dataset per poter essere letto da DecisionTree, e quindi:
- eliminazione righe con NaN nella colonna Salary
- estrazione della colonna Salary
- eliminazione colonne irrilevanti
- sostituzione valori NaN
- separazione delle colonne con risposte sovrapposte
In seguito è stato definito il target ed è stato diviso il dataset in train-set e test-set per determinare la precisione della previsione dell'albero.
E' stato inoltre verificato quale fosse il parametro max_depth adatto a seconda del train-set, seguendo le indicazioni dell'articolo "InDepth: Parameter tuning for Decision Tree" di Mohtadi Ben Fraj, illustrandone il grafico rispetto alla sua variazione.
Infine, dopo aver creato l'albero decisionale ed aver determinato la precisione della previsione mediante il 10-fold cross validation (circa 0.83), è stato disegnato il grafo dell'albero, seguendo il codice ottenuto dall'articolo "Creating and Visualizing Decision Trees with Python" di Russel.
Per maggiori chiarimenti si prega di leggere la relazione allegata nella repository.