{
"cells": [
{
"cell_type": "markdown",
"id": "1fd56de4",
"metadata": {},
"source": [
"# Part 1: Decision Tree Classifier\n",
"\n",
"This notebook adds the Decision Tree part of the assignment using only the biologically selected dataset `slice_1_significant_7.csv`.\n",
"\n",
"The task is a binary classification problem:\n",
"\n",
"- `0`: Healthy control\n",
"- `1`: Exfoliative Glaucoma (XFG)\n",
"\n",
"I use the iris tutorial as a template for the overall workflow:\n",
"\n",
"- define `X` and `y`\n",
"- split into training and test sets\n",
"- train a `DecisionTreeClassifier`\n",
"- evaluate the model\n",
"- visualize the final tree\n",
"\n",
"Because this dataset is much smaller than iris, I also use cross-validation and a small hyperparameter search to make the model selection more defensible.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "64ed7e23",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Samples: 60\n",
"Features: 7\n",
"Feature names:\n",
"['HPRA000767', 'HPRA034083', 'HPRA006876', 'HPRA019035', 'HPRA003490', 'HPRA022019', 'HPRA017192']\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"from IPython.display import display\n",
"from sklearn.inspection import permutation_importance\n",
"from sklearn.metrics import (\n",
" ConfusionMatrixDisplay,\n",
" accuracy_score,\n",
" classification_report,\n",
")\n",
"from sklearn.model_selection import StratifiedKFold, cross_val_score, train_test_split\n",
"from sklearn.tree import DecisionTreeClassifier, plot_tree\n",
"\n",
"sns.set_theme(style=\"whitegrid\")\n",
"\n",
"df = pd.read_csv(\"slice_1_significant_7.csv\")\n",
"identifier_cols = [\"Internal LIMS ID\", \"Original ID\", \"group\"]\n",
"feature_names = [c for c in df.columns if c not in identifier_cols]\n",
"\n",
"print(f\"Samples: {df.shape[0]}\")\n",
"print(f\"Features: {len(feature_names)}\")\n",
"print(\"Feature names:\")\n",
"print(feature_names)\n"
]
},
{
"cell_type": "markdown",
"id": "acec5b40",
"metadata": {},
"source": [
"## Step 1: Prepare Features and Targets\n",
"\n",
"Following the same style as the iris tutorial, I separate the predictors into `X` and the class labels into `y`.\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "3c66b866",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
HPRA000767
\n",
"
HPRA034083
\n",
"
HPRA006876
\n",
"
HPRA019035
\n",
"
HPRA003490
\n",
"
HPRA022019
\n",
"
HPRA017192
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
0.352329
\n",
"
-0.074663
\n",
"
0.442451
\n",
"
0.210802
\n",
"
-0.025678
\n",
"
-0.923763
\n",
"
0.028253
\n",
"
\n",
"
\n",
"
1
\n",
"
2.184865
\n",
"
0.467075
\n",
"
1.272995
\n",
"
1.857599
\n",
"
2.709290
\n",
"
1.367955
\n",
"
0.220041
\n",
"
\n",
"
\n",
"
2
\n",
"
0.519969
\n",
"
-0.358698
\n",
"
0.124177
\n",
"
1.383003
\n",
"
1.227493
\n",
"
-0.128889
\n",
"
-0.343792
\n",
"
\n",
"
\n",
"
3
\n",
"
1.155189
\n",
"
0.467075
\n",
"
0.630671
\n",
"
0.080847
\n",
"
-0.025678
\n",
"
-0.416995
\n",
"
0.753164
\n",
"
\n",
"
\n",
"
4
\n",
"
-0.590507
\n",
"
-0.074663
\n",
"
-1.423605
\n",
"
-1.591214
\n",
"
-0.375025
\n",
"
-0.165849
\n",
"
-1.292029
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" HPRA000767 HPRA034083 HPRA006876 HPRA019035 HPRA003490 HPRA022019 \\\n",
"0 0.352329 -0.074663 0.442451 0.210802 -0.025678 -0.923763 \n",
"1 2.184865 0.467075 1.272995 1.857599 2.709290 1.367955 \n",
"2 0.519969 -0.358698 0.124177 1.383003 1.227493 -0.128889 \n",
"3 1.155189 0.467075 0.630671 0.080847 -0.025678 -0.416995 \n",
"4 -0.590507 -0.074663 -1.423605 -1.591214 -0.375025 -0.165849 \n",
"\n",
" HPRA017192 \n",
"0 0.028253 \n",
"1 0.220041 \n",
"2 -0.343792 \n",
"3 0.753164 \n",
"4 -1.292029 "
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Target distribution:\n",
"group\n",
"0 30\n",
"1 30\n",
"Name: count, dtype: int64\n"
]
}
],
"source": [
"X = df.drop(columns=identifier_cols)\n",
"y = df[\"group\"]\n",
"\n",
"display(X.head())\n",
"print(\"Target distribution:\")\n",
"print(y.value_counts().sort_index())\n"
]
},
{
"cell_type": "markdown",
"id": "5ab9a713",
"metadata": {},
"source": [
"## Step 2: Train-Test Split\n",
"\n",
"I use an 80/20 stratified split so both classes remain balanced in the training and test sets. The training set is used for tuning, while the test set is held back for the final evaluation.\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f3df4577",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Training set shape: (48, 7)\n",
"Test set shape: (12, 7)\n"
]
}
],
"source": [
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X,\n",
" y,\n",
" test_size=0.2,\n",
" stratify=y,\n",
" random_state=42,\n",
")\n",
"\n",
"print(\"Training set shape:\", X_train.shape)\n",
"print(\"Test set shape:\", X_test.shape)\n"
]
},
{
"cell_type": "markdown",
"id": "c0990209",
"metadata": {},
"source": [
"## Step 3: Iteratively Tune the Decision Tree\n",
"\n",
"The assignment asks for iterative development, so I compare multiple settings for:\n",
"\n",
"- `max_depth`\n",
"- `min_samples_leaf`\n",
"- split criterion: `gini` or `entropy`\n",
"\n",
"For each configuration I record:\n",
"\n",
"- mean 5-fold cross-validation accuracy on the training set\n",
"- training accuracy\n",
"- test accuracy\n",
"- actual tree depth and number of leaves\n",
"\n",
"This helps distinguish a tree that genuinely generalizes from one that merely memorizes the training set.\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "806946fd",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
max_depth
\n",
"
criterion
\n",
"
min_samples_leaf
\n",
"
cv_accuracy_mean
\n",
"
cv_accuracy_std
\n",
"
train_accuracy
\n",
"
test_accuracy
\n",
"
actual_tree_depth
\n",
"
n_leaves
\n",
"
\n",
" \n",
" \n",
"
\n",
"
21
\n",
"
4
\n",
"
entropy
\n",
"
1
\n",
"
0.775556
\n",
"
0.143398
\n",
"
0.854167
\n",
"
0.583333
\n",
"
4
\n",
"
6
\n",
"
\n",
"
\n",
"
27
\n",
"
5
\n",
"
entropy
\n",
"
1
\n",
"
0.755556
\n",
"
0.148740
\n",
"
0.916667
\n",
"
0.583333
\n",
"
5
\n",
"
7
\n",
"
\n",
"
\n",
"
34
\n",
"
None
\n",
"
entropy
\n",
"
2
\n",
"
0.755556
\n",
"
0.145551
\n",
"
0.937500
\n",
"
0.500000
\n",
"
8
\n",
"
11
\n",
"
\n",
"
\n",
"
22
\n",
"
4
\n",
"
entropy
\n",
"
2
\n",
"
0.753333
\n",
"
0.146633
\n",
"
0.833333
\n",
"
0.583333
\n",
"
4
\n",
"
6
\n",
"
\n",
"
\n",
"
10
\n",
"
2
\n",
"
entropy
\n",
"
2
\n",
"
0.751111
\n",
"
0.150817
\n",
"
0.750000
\n",
"
0.750000
\n",
"
2
\n",
"
3
\n",
"
\n",
"
\n",
"
15
\n",
"
3
\n",
"
entropy
\n",
"
1
\n",
"
0.733333
\n",
"
0.158854
\n",
"
0.833333
\n",
"
0.583333
\n",
"
3
\n",
"
5
\n",
"
\n",
"
\n",
"
17
\n",
"
3
\n",
"
entropy
\n",
"
4
\n",
"
0.733333
\n",
"
0.131280
\n",
"
0.812500
\n",
"
0.583333
\n",
"
3
\n",
"
5
\n",
"
\n",
"
\n",
"
28
\n",
"
5
\n",
"
entropy
\n",
"
2
\n",
"
0.733333
\n",
"
0.131280
\n",
"
0.895833
\n",
"
0.583333
\n",
"
5
\n",
"
7
\n",
"
\n",
"
\n",
"
33
\n",
"
None
\n",
"
entropy
\n",
"
1
\n",
"
0.733333
\n",
"
0.115042
\n",
"
1.000000
\n",
"
0.583333
\n",
"
8
\n",
"
11
\n",
"
\n",
"
\n",
"
9
\n",
"
2
\n",
"
entropy
\n",
"
1
\n",
"
0.731111
\n",
"
0.149633
\n",
"
0.750000
\n",
"
0.750000
\n",
"
2
\n",
"
3
\n",
"
\n",
"
\n",
"
16
\n",
"
3
\n",
"
entropy
\n",
"
2
\n",
"
0.731111
\n",
"
0.132105
\n",
"
0.812500
\n",
"
0.583333
\n",
"
3
\n",
"
5
\n",
"
\n",
"
\n",
"
0
\n",
"
1
\n",
"
gini
\n",
"
1
\n",
"
0.711111
\n",
"
0.110889
\n",
"
0.791667
\n",
"
0.750000
\n",
"
1
\n",
"
2
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" max_depth criterion min_samples_leaf cv_accuracy_mean cv_accuracy_std \\\n",
"21 4 entropy 1 0.775556 0.143398 \n",
"27 5 entropy 1 0.755556 0.148740 \n",
"34 None entropy 2 0.755556 0.145551 \n",
"22 4 entropy 2 0.753333 0.146633 \n",
"10 2 entropy 2 0.751111 0.150817 \n",
"15 3 entropy 1 0.733333 0.158854 \n",
"17 3 entropy 4 0.733333 0.131280 \n",
"28 5 entropy 2 0.733333 0.131280 \n",
"33 None entropy 1 0.733333 0.115042 \n",
"9 2 entropy 1 0.731111 0.149633 \n",
"16 3 entropy 2 0.731111 0.132105 \n",
"0 1 gini 1 0.711111 0.110889 \n",
"\n",
" train_accuracy test_accuracy actual_tree_depth n_leaves \n",
"21 0.854167 0.583333 4 6 \n",
"27 0.916667 0.583333 5 7 \n",
"34 0.937500 0.500000 8 11 \n",
"22 0.833333 0.583333 4 6 \n",
"10 0.750000 0.750000 2 3 \n",
"15 0.833333 0.583333 3 5 \n",
"17 0.812500 0.583333 3 5 \n",
"28 0.895833 0.583333 5 7 \n",
"33 1.000000 0.583333 8 11 \n",
"9 0.750000 0.750000 2 3 \n",
"16 0.812500 0.583333 3 5 \n",
"0 0.791667 0.750000 1 2 "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cv = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\n",
"rows = []\n",
"\n",
"for max_depth in [1, 2, 3, 4, 5, None]:\n",
" for criterion in [\"gini\", \"entropy\"]:\n",
" for min_samples_leaf in [1, 2, 4]:\n",
" model = DecisionTreeClassifier(\n",
" max_depth=max_depth,\n",
" criterion=criterion,\n",
" min_samples_leaf=min_samples_leaf,\n",
" random_state=42,\n",
" )\n",
"\n",
" cv_scores = cross_val_score(\n",
" model,\n",
" X_train,\n",
" y_train,\n",
" cv=cv,\n",
" scoring=\"accuracy\",\n",
" )\n",
"\n",
" model.fit(X_train, y_train)\n",
"\n",
" rows.append(\n",
" {\n",
" \"max_depth\": \"None\" if max_depth is None else str(max_depth),\n",
" \"criterion\": criterion,\n",
" \"min_samples_leaf\": min_samples_leaf,\n",
" \"cv_accuracy_mean\": cv_scores.mean(),\n",
" \"cv_accuracy_std\": cv_scores.std(),\n",
" \"train_accuracy\": accuracy_score(y_train, model.predict(X_train)),\n",
" \"test_accuracy\": accuracy_score(y_test, model.predict(X_test)),\n",
" \"actual_tree_depth\": model.get_depth(),\n",
" \"n_leaves\": model.get_n_leaves(),\n",
" }\n",
" )\n",
"\n",
"results_df = pd.DataFrame(rows).sort_values(\n",
" [\"cv_accuracy_mean\", \"test_accuracy\", \"n_leaves\"],\n",
" ascending=[False, False, True],\n",
")\n",
"\n",
"display(results_df.head(12))\n"
]
},
{
"cell_type": "markdown",
"id": "5bb8f566",
"metadata": {},
"source": [
"The top row by cross-validation score is a deeper tree, but it does not perform as well on the held-out test set. That makes overfitting a real concern.\n",
"\n",
"A simpler model with:\n",
"\n",
"- `criterion=\"entropy\"`\n",
"- `max_depth=2`\n",
"- `min_samples_leaf=2`\n",
"\n",
"has nearly the same cross-validation performance, gives better test accuracy in this split, and is much easier to interpret. I therefore use that as the final tree.\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "b680ad84",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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TJs2jYaGBkOBuHLlSsrKykhLS2PlypWUlJSQnZ3N2LFje83BZrOxZ88eFixYwIYNGwCYOXMmbW1thuN+9tlntLS0cOTIEby8vACYPXs24eHh7Ny5k48//tge6+fnR1ZWlj3mzp075OfnEx8fz3PPPceIESMACAwMNOTy2muvER8fD8D06dMpKyvjwoULLFu27K/dWBGRv0AjvyIiA2To0KHMmzfP0PpQWFhIeHg4Li4uhlhPT08OHjxIUFAQjY2NWCwW8vPz+e677+js7LTHDRo0iG3btvHzzz/z3nvvsWjRoh6jyP/pypUrNDc3ExoaalgfFhZmWLZYLEycOBFPT0+6urro6urC1dWV2bNnc/78eUPs4sWLDcsLFiygs7MTq9X6p/fjblEP4OLigpeXF62trX+6j4jI/0ojvyIiAygsLMzet/vII49gsVhISEjoNfbkyZPk5ORw48YNRo0aha+vL0OHDu0RZzKZ8Pf3x2q1Mm/evD89/6+//grA6NGjDesff/xxw3JLSwvXr183tCn8p/b2dvvPTzzxhGHb3WPfr5AdNmyYYdnV1VXzAYtIv1PxKyIygGbPno2HhwclJSV4eHjw1FNPERAQ0COusrKS5ORkli1bxvLly3nyyScByMzMpKqqyhB79OhRrFYrvr6+bN26lZCQEEaNGtXr+R999FEAmpubDetbWloMyx4eHgQHB7Nu3bpejzN48OB77nv32GPGjOl1XxERR1Lbg4jIABo8eDChoaGcPn2aU6dO8fLLL/caV11dTXd3N6tXr7YXvr///ru95eDubAqNjY1s27aNJUuWkJubS3t7O5s2bbrn+Z9++mnGjh3bY8q1srIyw3JwcDBXr17lmWeeYdKkSfbXyZMnOXr0KG5ubvbYs2fPGvYtKSlh2LBhmM1mgHs+eCci4gh6RxIRGWB3Z32oqKi4Z/E7efJkADZt2sSFCxc4ffo0r7/+OpcvXwbgzp072Gw21q9fz9ChQ0lOTsbT05PExEQKCwt7nU8Y/t1bu3btWsrKytiwYQPl5eXs3r2bI0eOGOJiYmLo7u4mJiaGoqIiLBYLKSkpHDx4kGeffdYQW1xczJYtWygvLycnJ4dDhw4RHx/P8OHDARg5ciRXr17FYrHY2y5ERBxFxa+IyAALCQlh5MiRTJgwAW9v715jpk2bRmpqKtXV1cTGxpKRkcG4cePYvXs3AFVVVRw+fJjz58+zfv16e5vD0qVLmTJlCmlpaT1aG+5auHAhH330EVar1T5bxH+PFnt6elJQUICXlxdpaWnExcXxww8/sGXLFmJiYgyxb7/9NvX19cTHx1NSUkJqaipvvvmmfXtkZCSDBg0iNjaWc+fOPeBdExF5OFxserpAREQeQENDA6GhoWRkZLBkyRJHpyMi0ica+RURERERp6HiV0RERESchtoeRERERMRpaORXRERERJyGil8RERERcRoqfkVERETEaaj4FRERERGnoeJXRERERJyGil8RERERcRoqfkVERETEaaj4FRERERGnoeJXRERERJzGvwAnvuQkxm3i8QAAAABJRU5ErkJggg==",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"depth_summary = (\n",
" results_df[results_df[\"criterion\"] == \"entropy\"]\n",
" .groupby(\"max_depth\", as_index=False)[\"cv_accuracy_mean\"]\n",
" .max()\n",
")\n",
"\n",
"depth_order = [\"1\", \"2\", \"3\", \"4\", \"5\", \"None\"]\n",
"\n",
"plt.figure(figsize=(8, 5))\n",
"sns.lineplot(\n",
" data=depth_summary,\n",
" x=\"max_depth\",\n",
" y=\"cv_accuracy_mean\",\n",
" marker=\"o\",\n",
" sort=False,\n",
")\n",
"plt.title(\"Cross-Validation Accuracy by Max Depth\")\n",
"plt.xlabel(\"Max depth\")\n",
"plt.ylabel(\"Cross-validation accuracy\")\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "4fa2981a",
"metadata": {},
"source": [
"## Step 4: Fit the Final Decision Tree\n",
"\n",
"The final model is deliberately shallow. This trades a small amount of flexibility for better transparency and lower overfitting risk.\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "babd4532",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Final model parameters: {'criterion': 'entropy', 'max_depth': 2, 'min_samples_leaf': 2, 'random_state': 42}\n",
"Training accuracy: 0.75\n",
"Test accuracy: 0.75\n",
"\n",
" precision recall f1-score support\n",
"\n",
" 0 0.667 1.000 0.800 6\n",
" 1 1.000 0.500 0.667 6\n",
"\n",
" accuracy 0.750 12\n",
" macro avg 0.833 0.750 0.733 12\n",
"weighted avg 0.833 0.750 0.733 12\n",
"\n"
]
}
],
"source": [
"final_params = {\n",
" \"criterion\": \"entropy\",\n",
" \"max_depth\": 2,\n",
" \"min_samples_leaf\": 2,\n",
" \"random_state\": 42,\n",
"}\n",
"\n",
"final_model = DecisionTreeClassifier(**final_params)\n",
"final_model.fit(X_train, y_train)\n",
"\n",
"y_train_pred = final_model.predict(X_train)\n",
"y_test_pred = final_model.predict(X_test)\n",
"\n",
"print(\"Final model parameters:\", final_params)\n",
"print(\"Training accuracy:\", round(accuracy_score(y_train, y_train_pred), 3))\n",
"print(\"Test accuracy:\", round(accuracy_score(y_test, y_test_pred), 3))\n",
"print()\n",
"print(classification_report(y_test, y_test_pred, digits=3))\n"
]
},
{
"cell_type": "markdown",
"id": "f15a3232",
"metadata": {},
"source": [
"## Step 5: Evaluate the Final Model\n",
"\n",
"The confusion matrix shows how the model handles the two classes rather than only reporting one summary number.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "9e295be0",
"metadata": {},
"outputs": [],
"source": [
"ConfusionMatrixDisplay.from_predictions(\n",
" y_test,\n",
" y_test_pred,\n",
" display_labels=[\"Healthy\", \"XFG\"],\n",
" cmap=\"Blues\",\n",
")\n",
"plt.title(\"Confusion Matrix for the Final Decision Tree\")\n",
"plt.grid(False)\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "16aa78b9",
"metadata": {},
"source": [
"## Step 6: Interpret Which Proteins the Tree Uses\n",
"\n",
"Decision trees only assign impurity-based importance to features that are actually used in splits. That means it is completely possible for a shallow tree to put all of its importance on only one or two proteins while the others receive zero.\n",
"\n",
"That is not automatically a biological conclusion. In this setting it mostly means:\n",
"\n",
"- the tree found that two proteins were enough for its chosen split rules\n",
"- some proteins may contain overlapping information, so the tree only needs one of them\n",
"- with only 60 samples, the exact split choices are unstable and can change with a different train/test split\n",
"\n",
"To make that limitation clearer, I look at both the tree's built-in importance values and permutation importance on the test set.\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "3ab232c5",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
tree_importance
\n",
"
\n",
" \n",
" \n",
"
\n",
"
HPRA017192
\n",
"
0.675353
\n",
"
\n",
"
\n",
"
HPRA000767
\n",
"
0.324647
\n",
"
\n",
"
\n",
"
HPRA034083
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
HPRA006876
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
HPRA019035
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
HPRA003490
\n",
"
0.000000
\n",
"
\n",
"
\n",
"
HPRA022019
\n",
"
0.000000
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" tree_importance\n",
"HPRA017192 0.675353\n",
"HPRA000767 0.324647\n",
"HPRA034083 0.000000\n",
"HPRA006876 0.000000\n",
"HPRA019035 0.000000\n",
"HPRA003490 0.000000\n",
"HPRA022019 0.000000"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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Gg0cOFDTp0/XmjVrjD6vvPKKTp48qXnz5mn16tVycXFRjx49dP369Vzjff7551q1alWu7bNnz1ZsbKwmTZqklStXymQyqW/fvkaQvHjxovr06aPHHntM69at08SJE7V27Vq9++6791QHAAAAABQEh/x0WrhwodLS0iRJZrNZq1at0o4dO3L1O3DggJycnGxb4W1cXV3l5eVlvPf29lZERIQaN26szz77TN26dZMkOTo6WvSTpIoVK+rEiROaOXOmUlNT5e7ubrStWbNG/v7+6tChg2bNmqXw8HCL9g8//FBOTk4aP368HBwcFBAQoOPHj2vevHlq3769Ll26pAoVKuiVV17R448/Lkl69dVX1aZNG/3888+qWbOmMVZycrLefPNNPfHEEzp16pSxPT09XQsXLtTw4cPVpEkTSdK7776rRo0aacuWLWrVqpX279+vy5cvG/X5+vqqdevWio+P14gRI6yqAwAAAAAKSr6CZnp6umbNmiVJMplMea7G2dnZqXjx4nrllVdsW+FdODjc+gj5CbjOzs4ymUwymUzGtqysLK1fv17//Oc/1aJFC7399tvasGGDunTpYvRJSEhQSEiIcSxJql+/vubOnasLFy6odOnSeuedd4y233//XQsWLJCPj48qVapkbDebzRo5cqTatGkjNzc3rV271mhLSkrStWvXVL9+fWObh4eHgoKCtHfvXrVq1Uqenp6SpBUrVqhXr146c+aMtm/frnr16kmSSpYsma86AAAAAKAg5Stovvzyy3r55ZclSVWqVNGHH374QKyOnTt3TpMnT5arq6saN258x35ms1kHDhzQ4sWL1bx5c7m5uRltO3fuVHJyslq0aKEKFSqodu3aio2NtQiaZ8+eVWBgoMWY3t7ekqTTp0+rdOnSxvY333zTWAGdM2eOXF1djbZFixbp/PnziomJ0dy5cy3Gyzn195FHHsl1nDNnzkiS6tWrp379+mn69Ol69913lZWVpSeeeEJvvvlmrs/8Z3UAAAAAQEHKV9C8XVJSks2L2LhxozZv3pxre3p6uurUqWO8nzt3rhYuXChJyszMVHp6ugICAhQdHa1y5coZ/RISEhQcHGy8v3nzpkqVKqVnn31WgwcPtjhGXFycvL29jVXBVq1aKTIyUgcOHDDGuHHjRq4VU2dnZ2Ps23Xv3l0vvviiVqxYof/85z9avny5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iqAJAAAAALApgiYAAAAAwKYImgAAAAAAmyJoAgAAAABsiqAJAAAAALApgiYAAAAAwKYImgAAAAAAmyJo4q6ysrJkNpsLuwwAAAAARQRBE3eVlZVV2CUAAAAAKEIImgAAAAAAmyJoAgAAAABsymTm4jv8if3798tsNsvR0VEmk6mwy0E+mc1mZWRkMG9FCHNW9DBnRQ9zVjQxb0UPc1b05HfO0tPTZTKZVKdOnbuO6WDLAvH3k/OLxl8SRYvJZJKTk1NhlwErMGdFD3NW9DBnRRPzVvQwZ0VPfufMZDLlOxewogkAAAAAsCmu0QQAAAAA2BRBEwAAAABgUwRNAAAAAIBNETQBAAAAADZF0AQAAAAA2BRBEwAAAABgUwRNAAAAAIBNETQBAAAAADZF0AQAAAAA2BRBEwAAAABgUwRNAAAAAIBNETQBAAAAADZF0HzIZWdna8aMGWrUqJFq1aqlXr166fjx43fsf+nSJb3++usKCQlRSEiI3nzzTaWlpd3HiiFZP2+379e7d2/NnDnzPlSJ21k7Zz///LP69eunJ598Ug0aNNBrr72m06dP38eKYe2c/fDDD+revbuCg4NVv359jR07VleuXLmPFeNe/26UpI0bN6py5cr67bffCrhK/JG187Z27VpVrlw51yu/c42/zto5y8jI0LRp09SoUSPVrl1bXbt2VWJi4n2sGNbM2cyZM/P8M1a5cmWNGjUq38ckaD7kZs+erdjYWE2aNEkrV66UyWRS3759lZ6enmf/1157TSdPntSiRYs0Y8YMffXVV4qIiLjPVcPaeZOkGzduaPjw4YqPj7+PlSKHNXN26dIl9ezZU25ublq6dKnmzZunS5cuqU+fPrp582YhVP9wsmbOkpOT1bNnTz366KNau3atZs+erf3792vEiBGFUPnD617+bpSkU6dO8d+yQmTtvP3000964oknFB8fb/GqUKHCfa784WXtnI0fP16rV6/WxIkTtWbNGnl6eqpv3766evXqfa784WXNnPXq1SvXn6/BgwfLxcVF3bt3z/9BzXho3bx50xwcHGxevny5sS0lJcVcs2ZN80cffZSr//79+82BgYHmI0eOGNt27txprly5svns2bP3pWZYP29ms9m8b98+87/+9S9zs2bNzPXq1TPPmDHjfpULs/Vz9uGHH5rr1KljvnHjhrHtzJkz5sDAQPPX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93xMk9lsNtsgKAMAAAAAIIlrNAEAAAAANkbQBAAAAADYFEETAAAAAGBTBE0AAAAAgE0RNAEAAAAANkXQBAAAAADYFEETAABYjaejAQD+DEETAIAHxMyZM1W5cuXCLuNPpaena8qUKdq4cWNhlwIAeIARNAEAQL4lJydr0aJFyszMLOxSAAAPMIImAAAAAMCmCJoAADyA4uLiVKNGDe3bt0/t27dXjRo11KJFC23btk2//vqrunfvrlq1aql58+b6+OOPLfarXLmyvvvuO7Vt21Y1a9bU888/r08++cRi/KtXr2rKlCl65plnVKNGDT333HNavXq1RZ/Q0FBNnjxZ3bt3V506ddS7d281a9ZMkjRq1CiFhoYafVetWqV27dqpdu3aqlmzptq0aWNxzLi4OAUFBem7777Tiy++qBo1aqhp06aaN2+exTGvXbumKVOmqHHjxqpdu7batWunbdu2WfRZtWqVWrVqperVq6tp06aaOXMmK6wA8IAhaAIA8IDKzMzU0KFD1alTJ82ePVvOzs4aNmyYXn75ZTVt2lTTp0+Xl5eXRowYobNnz1rs279/fzVr1kyzZs2Sv7+/hg4dqq1bt0qSbty4oS5dumjDhg3q1auXZs+erbp162rMmDGKiYmxGGfZsmWqXLmyZs6cqf79+2vWrFmSpFdeecX4edmyZRo7dqyaNWumuXPnaurUqXJ0dNTw4cN1+vRpY6zs7GwNHjxYzz77rN5//33VrVtXUVFR2rlzp9Hep08frV27Vv369dOcOXMUGBioAQMGaM+ePZKkuXPn6s0331SDBg0UExOjl156SfPmzdPYsWMLZhIAAPfEobALAAAAecvOztbLL7+sDh06SJKuXLmioUOHqnv37urZs6ckqUyZMmrfvr1++OEH+fj4GPt27dpVAwYMkCQ1atRIbdu21ezZs9WsWTPFxcXp8OHDWr58uerWrWv0yczM1OzZs9WpUyd5enpKkry9vTVy5EjZ2d36f9O//fabJOnRRx9VUFCQJOnkyZPq1auX/vOf/xjHr1Chgtq1a6f9+/erXLlykm7dqfbVV181Pk/dunW1ZcsWffnll2rUqJF27Nih/fv3G3VKUv369XX8+HHt3r1bQUFBmjNnjl588UW98cYbkqSGDRvK09NTb7zxhnr27KnHH3/cxrMAALgXBE0AAB5gwcHBxs9lypSRJNWuXdvYlhMIr1y5YrFfmzZtjJ9NJpOaN2+umTNn6vr16/rmm29Uvnx5I2TmaN26tVavXq3vvvtOTZo0kSQFBAQYIfNORo4cKenW6bjHjh3TsWPHtGvXLklSRkbGHT+Pk5OTSpUqpbS0NElSQkKCHB0d9fTTT1vUvmLFCknSjh07dP36dYWGhlqcKptzCu9XX31F0ASABwRBEwCAB5i7u3uubS4uLnfdr2zZshbvS5cuLbPZrKtXryolJcUIrbfL2XZ7aM2r3x+dOHFCY8eO1e7du+Xg4KDHHnvMeEzLH5+3+cfa7ezsjD6XL1+Wp6fnHYPt5cuXJUn9+vXLsz05OfmutQIA7g+CJgAAf0OXLl2yCJu///677O3t5enpqRIlSuj48eO59jl//rwkqWTJkvk+TnZ2tvr16ydHR0d9+OGHCgoKkoODg44cOaINGzZYVXPx4sV1+fJlZWdnW4TNxMREZWZmysPDQ5IUFRUlPz+/XPvnJxQDAO4PbgYEAMDf0O13ajWbzfrss89Ut25dOTk5KSQkRKdOndK+ffss9tmwYYMcHR1Vs2bNO45rb29v8f7SpUs6evSoXnjhBdWsWVMODrf+H/aOHTsk3Qqi+VWvXj1lZGRo+/btFrWPGTNGc+bMUa1ateTo6Khz586pRo0axsvR0VHTpk0zrh8FABQ+VjQBAPgbmjp1qtLT0+Xv769Vq1bpl19+0eLFiyVJ7dq10/LlyzVgwAC99tprqlixorZt26Y1a9ZowIABxsphXooXLy5J2rVrlwICAlSrVi2VL19ey5Ytk4+Pjzw8PBQfH28c6/r16/muuWnTpgoODtaoUaM0aNAg+fr6auPGjTp8+LDefPNNlSxZUn369NH06dOVmpqqJ598UufOndP06dNlMplUpUqVv/CNAQBsiaAJAMDf0Pjx4zV37lydPHlSQUFBWrhwoerVqydJKlasmJYsWaJp06ZpxowZSk1N1WOPPabIyEi98MILfzquu7u7evbsqZUrV+rLL7/UV199pdmzZysyMlIjR46Uk5OTKlWqpDlz5mjy5MlKSEhQWFhYvmq2t7fXvHnzNG3aNM2cOVNpaWmqUqWK5s+fb9xEaPDgwfLy8tLy5cs1f/58lShRQg0aNNDQoUONEAwAKHwm8x+v0gcAAEVWXFycRo0apa1bt6pChQqFXQ4A4CHFNZoAAAAAAJsiaAIAAAAAbIpTZwEAAAAANsWKJgAAAADApgiaAAAAAACbImgCAAAAAGyKoAkAAAAAsCmCJgAAAADApgiaAAAAAACbImgCAAAAAGyKoAkAAAAAsCmCJgAAAADApv4f7CXAGuqvVZYAAAAASUVORK5CYII=",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"gini_importance = (\n",
" pd.Series(final_model.feature_importances_, index=feature_names)\n",
" .sort_values(ascending=False)\n",
")\n",
"\n",
"display(gini_importance.to_frame(\"tree_importance\"))\n",
"\n",
"plt.figure(figsize=(10, 5))\n",
"sns.barplot(\n",
" x=gini_importance.values,\n",
" y=gini_importance.index,\n",
" hue=gini_importance.index,\n",
" dodge=False,\n",
" palette=\"crest\",\n",
" legend=False,\n",
")\n",
"plt.title(\"Impurity-Based Feature Importance\")\n",
"plt.xlabel(\"Importance\")\n",
"plt.ylabel(\"Protein fragment\")\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "a5ba925d",
"metadata": {},
"outputs": [],
"source": [
"perm = permutation_importance(\n",
" final_model,\n",
" X_test,\n",
" y_test,\n",
" n_repeats=50,\n",
" random_state=42,\n",
")\n",
"\n",
"permutation_df = (\n",
" pd.DataFrame(\n",
" {\n",
" \"feature\": feature_names,\n",
" \"permutation_importance_mean\": perm.importances_mean,\n",
" \"permutation_importance_std\": perm.importances_std,\n",
" }\n",
" )\n",
" .sort_values(\"permutation_importance_mean\", ascending=False)\n",
")\n",
"\n",
"display(permutation_df)\n"
]
},
{
"cell_type": "markdown",
"id": "cbff8bf0",
"metadata": {},
"source": [
"If only two proteins receive non-zero tree importance, that is therefore not necessarily weird. It is a normal consequence of a shallow greedy tree.\n",
"\n",
"What would be weird is claiming from this alone that the other five proteins are unimportant biologically. A single tree cannot support that conclusion, especially with a small dataset. The safer interpretation is that this particular classifier can achieve its decisions using a small subset of the available predictors.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "6596d818",
"metadata": {},
"outputs": [],
"source": [
"plt.figure(figsize=(18, 8))\n",
"plot_tree(\n",
" final_model,\n",
" feature_names=feature_names,\n",
" class_names=[\"Healthy\", \"XFG\"],\n",
" filled=True,\n",
" rounded=True,\n",
" fontsize=10,\n",
")\n",
"plt.title(\"Final Decision Tree\")\n",
"plt.show()\n"
]
},
{
"cell_type": "markdown",
"id": "cf65611c",
"metadata": {},
"source": [
"## Conclusion\n",
"\n",
"Using only the significant seven proteins, the best final decision tree is a shallow entropy-based model with `max_depth=2` and `min_samples_leaf=2`.\n",
"\n",
"This is a reasonable final model because:\n",
"\n",
"- it is built from biologically motivated features\n",
"- it was selected through iterative tuning rather than one-shot fitting\n",
"- it remains interpretable\n",
"- it avoids the strongest overfitting seen in deeper trees\n",
"\n",
"The fact that the tree mainly uses two proteins is not by itself a problem. It reflects how decision trees work: they only reward features that reduce impurity through actual splits. That should be interpreted as a property of this classifier, not as a definitive ranking of biological importance.\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "intro_ds",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.14.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}