{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Libraries" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import shap\n", "import matplotlib.pyplot as plt\n", "import matplotlib.patches as mpatches" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Retrieve attribute names in order\n", "attribute_names = list(np.load('../gen_train_data/data/output/attributes.npy', allow_pickle=True))\n", "\n", "# Load test data\n", "X_test_pre = np.load('../gen_train_data/data/output/pre/X_test_pre.npy', allow_pickle=True)\n", "y_test_pre = np.load('../gen_train_data/data/output/pre/y_test_pre.npy', allow_pickle=True)\n", "X_test_post = np.load('../gen_train_data/data/output/post/X_test_post.npy', allow_pickle=True)\n", "y_test_post = np.load('../gen_train_data/data/output/post/y_test_post.npy', allow_pickle=True)\n", "\n", "# Type conversion needed \n", "data_dic = {\n", " \"X_test_pre\": pd.DataFrame(X_test_pre, columns=attribute_names).convert_dtypes(),\n", " \"y_test_pre\": y_test_pre,\n", " \"X_test_post\": pd.DataFrame(X_test_post, columns=attribute_names).convert_dtypes(),\n", " \"y_test_post\": y_test_post,\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "method_names = {\n", " 0: \"ORIG\",\n", " 1: \"ORIG_CW\",\n", " 2: \"OVER\",\n", " 3: \"UNDER\"\n", "}\n", "model_choices = {\n", " \"ORIG\": \"XGB\",\n", " \"ORIG_CW\": \"RF\",\n", " \"OVER\": \"XGB\",\n", " \"UNDER\": \"XGB\"\n", "}\n", "\n", "soc_var_names = np.load('../EDA/soc_vars_names.npy', allow_pickle=True)\n", "ind_var_names = np.load('../EDA/ind_vars_names.npy', allow_pickle=True)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "38\n" ] } ], "source": [ "for i, att in enumerate(attribute_names):\n", " if 'tto' in att:\n", " print(i)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### SHAP Plots" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "method_name = 'OVER'\n", "plt.figure(figsize=(35, 75))\n", "for i, group in enumerate(['pre', 'post']):\n", " X_test = data_dic['X_test_' + group]\n", " y_test = data_dic['y_test_' + group]\n", " model_name = model_choices[method_name]\n", " shap_vals = np.load(f'./output/shap_values/{group}_{method_name}.npy')\n", " ax = plt.subplot(2,1,i+1)\n", " shap.summary_plot(shap_vals, X_test, max_display=len(attribute_names), show=False)\n", " plt.title(group.upper(), fontsize = 12, fontweight='bold')\n", " plt.xlabel('SHAP Value')\n", " plt.xlim(-3,5)\n", " used_colors = {'purple': 'Social factor', 'green': 'Individual factor'}\n", " for label in ax.get_yticklabels():\n", " label_text = label.get_text() # Get the text of the label\n", " label.set_fontsize(8)\n", " if label_text in soc_var_names:\n", " label.set_color('purple')\n", " else:\n", " label.set_color('green')\n", " # Create custom legend for each subplot\n", " handles = [mpatches.Patch(color=color, label=label) for color, label in used_colors.items()]\n", " ax.legend(handles=handles, loc='lower right', fontsize=8)\n", " \n", "plt.suptitle(f'SHAP Summary Plots PRE vs POST - Pipeline: Oversampling - Model: {model_name}\\n\\n')\n", "plt.subplots_adjust(wspace=1)\n", "plt.tight_layout()\n", "plt.savefig(f'./output/plots/shap_summary/{method_name}_{model_name}.svg', format='svg', dpi=1250)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "method_name = 'ORIG_CW'\n", "plt.figure(figsize=(35, 75))\n", "for i, group in enumerate(['pre', 'post']):\n", " X_test = data_dic['X_test_' + group]\n", " y_test = data_dic['y_test_' + group]\n", " model_name = model_choices[method_name]\n", " shap_vals = np.load(f'./output/shap_values/{group}_{method_name}.npy')\n", " shap_vals = shap_vals[:,:,1] # Select shap values for positive class\n", " ax = plt.subplot(2,1,i+1)\n", " shap.summary_plot(shap_vals, X_test, max_display=len(attribute_names), show=False)\n", " plt.title(group.upper(), fontsize = 12, fontweight='bold')\n", " plt.xlabel('SHAP Value')\n", " plt.xlim(-0.5,0.5)\n", " used_colors = {'purple': 'Social factor', 'green': 'Individual factor'}\n", " for label in ax.get_yticklabels():\n", " label_text = label.get_text() # Get the text of the label\n", " label.set_fontsize(8)\n", " if label_text in soc_var_names:\n", " label.set_color('purple')\n", " else:\n", " label.set_color('green')\n", " # Create custom legend for each subplot\n", " handles = [mpatches.Patch(color=color, label=label) for color, label in used_colors.items()]\n", " ax.legend(handles=handles, loc='lower right', fontsize=8)\n", "\n", "plt.suptitle(f'SHAP Summary Plots PRE vs POST - Pipeline: Original with Class Weight - Model: {model_name}\\n\\n')\n", "plt.subplots_adjust(wspace=1)\n", "plt.tight_layout()\n", "plt.savefig(f'./output/plots/shap_summary/{method_name}_{model_name}.svg', format='svg', dpi=1250)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "##### SHAP Interaction Plots" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Had to modify beeswarm.py (line 591)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "method_name = 'OVER'\n", "group = 'pre'" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABHoAAAJ+CAYAAADMjmdZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACUKUlEQVR4nOzdd3wUdf7H8ffupvcekgAJhN57UaQICIgiIPaCtNMDezvbT+XO06t6nGc7C6CABQVFUVA6KB3poYeeQkgCKaTu/P7gWLMpECDJJsPr+Xjk8WDmO+Uzs7NL8t7vfMdiGIYhAAAAAAAA1HlWVxcAAAAAAACAqkHQAwAAAAAAYBIEPQAAAAAAACZB0AMAAAAAAGASBD0AAAAAAAAmQdADAAAAAABgEgQ9AAAAAAAAJkHQAwAAAAAAYBIEPQAAAAAAACZB0APgoiUmJurhhx9W69at5efnJ09PT0VGRqpVq1YaOXKk/vSnP2n79u1O6yxbtkwWi8XxM23aNNcUX0nTpk1zqnfZsmWOtsocy6pVq3T99dcrLCxMNputzLIl17/vvvtq5Jji4uIc++zbt2+l1yt9Ls73s3nz5mqrvy5yxessSVu3btW4cePUtGlT+fj4yNvbW9HR0Wrbtq1uv/12/fWvf9WhQ4ec1il9XVdU78svv1zp9/Kvv/5a5hpp0aLFeWvv27dvhddXQECA2rVrp8cff1wHDx68yLNy1qWcG9Ru9913X4Wf16gede3/9NKfWyV/vL291bhxY91999365Zdfyqx7vt8HAKC2cnN1AQDqlp9++kkjRoxQTk6O0/zU1FSlpqYqISFBc+fOVXFxsdq0aeOiKl1ry5Yt6t+/vwoKClxdCq5A06dP1/jx41VUVOQ0PykpSUlJSdq+fbs+//xzRUZGVnv4NGvWrDLzdu/erY0bN6pz584Xvb2srCxt27ZN27Zt0/vvv6/PPvtMQ4cOrfT6tencoG6Ii4tzBH99+vS5Iv7Iv9KOOS8vT4mJiUpMTNSsWbP00ksv6aWXXqr2/b788suaPHmyYzoxMVFxcXHVvl8AVwaCHgCVlp2drbvuussp5GnXrp0aNmyo/Px87d69W4cPHy533fDwcN18882O6br8y8yFjmXWrFlOIU+7du3UpEkTWSwWx7Il1+/atWu11lvVWrZsqVatWpXbFhQUVLPFwMmhQ4d0//33O4IMq9Wqzp07KyoqStnZ2dq5c6eSk5NrpBbDMPTZZ5+V2zZr1qxKBz1DhgyRj4+PcnNztX79eqWlpUk6+3l02223ae/evYqKirrgdmrTuQHqurr+f3qXLl0UGxuroqIibd++Xfv375d09nPr5ZdfVqdOnXTjjTe6uEoAuHQEPQAqbcGCBTpx4oRj+quvvtLIkSOdljl48KC+/PJLhYaGOs1v3bq1vvzyyxqps7pd6FhSU1OdptevXy8PDw+neXX5XNx66616+eWXXV0GyjF79mzl5+dLOnvb2Nq1a9WlSxenZXbu3KnPP/9c4eHh1VrLihUrdPToUce0u7u7CgsLJUmfffaZ/v73v8tqvfAd5G+//bbjj8jMzEz16dNHW7dulSTl5ORo6tSpeu655y64ndp0boC6rq7/nz5p0iRHrz273a7x48dr6tSpjvY333yToAdAncYYPQAqbd++fU7T/fv3L7NMXFycnnzySY0ZM8Zp/vnu5z948KBT28svv6xff/1V119/vQIDAxUSEqJbb73VMSZHenq6Jk6cqKioKHl5ealDhw7l3iJS3n31S5cu1YABAxQYGCh/f3/1799fK1euvKjzUNGxnBsDoPRYBZ6eno5lzx3DhcZCKSws1EcffaTrrrtOERER8vDwUGhoqAYMGKAZM2bIbreXW9vJkyc1adIkxcTEyMvLS61atdLrr7+u4uLiizrGy7Vz5055e3s7jvH66693al+6dKmsVquj/f7773e0/fTTT5o4caJ69Oihhg0bytfXV56enoqKitLgwYP1ySefyDCMMvssObZLXFycsrOz9eSTT6pBgwby8fFR586dNWfOHMfyH374odq1aycvLy9FR0froYceUlZWVpntln6tUlNTNXHiRNWvX19eXl5q0aKF/v73v5e5HagyLvV1rkjJ92hQUFC5vWZatWqlyZMnX9QtT5ei5HvSarXqqaeeckwfP378km4HCQoK0qOPPuo0b8OGDZVa93LOTenxPUqPD1R6jJjzrZuYmKh33nlHbdq0cYwN8uqrrzreoytXrlT//v3l7++voKAgjRgxQnv37i1Ta3Vd7++//77uvfdetW/fXlFRUfL09JSPj4/i4+N15513Vvh5Wfp9cvz4cY0bN04xMTGy2Wx66aWX1LRpU8cyvXv3LrON4uJi1atXz7FMVfyhXd7/L4cOHdK4ceMcx9eiRQtNmTLFab1z57fkeE3Lly8vs62Sjh49qqefflodOnRQQECAPD09FRcXpzFjxpQZt66y5+3cPtatW6fHHntMvXv3VlxcnAICAuTh4aGIiAj169dP//nPf857u/CqVas0evRoNWnSRL6+vvL19VXjxo11xx13aPny5Rd9zJUZoyc1NVX/93//py5duigoKEgeHh6Kjo7WjTfeqK+++qpSn+OFhYV644031LZtW3l5eSk8PFyjR49WSkpKhcd6saxWq/7v//7PaV5lP1fOSUxM1GOPPaa2bdvK399fnp6eatiwoW699VYtXrzYadlzv5uUvG1Lkho1auR07ABwWQwAqKR//OMfhiTHz+DBg43FixcbZ86cueC6S5cudVp36tSpjrbExESntv79+xuenp5O8yQZUVFRRkJCghEfH1+mTZIxffp0p31OnTrVqf3uu+82LBZLmfVsNpvx5ZdfnnfdpUuXXvBYXnrppXLrKvmTmJhoGIbhNG/06NFO+05OTja6du163u0MHTrUyMvLc1ovJSXFaNq0abnLjxgxwqhfv75juk+fPhd8zSo6Fy+99FKl1psyZUq5r09WVpbRqFEjx/xmzZoZ2dnZjvXuuuuuC57HkSNHGsXFxU7769Onj6M9MjLS6NKlS7nrzpgxw3j44YfLbevfv79ht9udtluyvV+/fk7nsfQ5Pt+6VfU6n8+DDz5Y5ppfvXq1UVBQcMF1S1/Xpes9p/R1XvK9fE5BQYEREhLiWKZ3797G0aNHnd5/48aNK3f7JV/Hku+Zc+bPn+/UPnDgwAsem2Fc3rkpfcylaxo9erRT+/nWHTp0aLmv9YQJE4wvvvjCsNlsZdoiIyON1NTUCs9TVV7vMTEx570mLRaL8frrr5c5RyWX6du3r1GvXr0ynxtvvPGG07yEhASnbSxevNipfc6cORd8bco7/yU/r0v//zJ48GAjMDCw3GP74x//WO75rein5GfhN998Y/j7+1e4rLu7u/HRRx9d0nkzDMN4/vnnL1hPz549jdzcXKftFxcXG7///e/Pu94jjzxy0cd8vv/TDcMwli9fboSGhp53WzfeeGOZz7fS13Xfvn3LXbdVq1aV+t3jnAt9buXk5JR5vc453+8DhmEYs2fPNnx8fM57rPfff7/jvVZ6e+X9xMbGVvrYAKA89OgBUGlXXXWV0/SCBQsc3zx37NhRDz30kBYvXlzut3QXY/HixbJYLOrXr59iY2Md85OSktSpUyft379f7dq1K1PPhQZPnDFjhgICAjRgwADFx8c75hcXF2vcuHGX/Q1hq1atdPPNNzvVLJ0dj+fcj6+v73m3YRiGbr75Zq1fv94xr0WLFrrhhhvUvHlzx7z58+frsccec1r3oYcecvrm39/fXwMGDFCzZs00d+5cp9toLscXX3yhUaNGlfkp2WPjXD3XXXedY/qxxx5TSkqKnnnmGSUmJko6ezvPzJkzy5wXDw8PtW/fXtdee61uuukm9evXz2n8nzlz5uiLL76osMaUlBRt2LBBbdq0Ua9evZzaJkyYoH//+98KCwvTwIED5e/v72hbvHix49vt8ixdulTHjh1Tt27ddPXVV8vN7bc7oOfOnav//ve/Fa5b0uW8zudT+j0xY8YM9ezZUwEBAerZs6eefvpprVmzplLbWrZsWbmv8/nO+zkLFixQenq6Y3rUqFGKiYlRjx49HPO++uqrSxqwfMuWLU7T9erVq9R6VXluLsf8+fMVExOjgQMHysvLyzH/XE8ad3d3XXvttapfv76jLSUlRW+99VaF26zq6z0wMFBdunTRddddp2HDhqlnz57y9PSUdPba/cMf/qAjR45UWM+yZcuUnJysmJgYDR48WO3atZPFYtGYMWPk5+fndMwllby2IiIidMMNN1S4j0u1YMECZWVlqXv37mV6df31r39Vdna2pLODEN98883y8fFxtIeFhTl9np8bq2zbtm267bbbHD2k3N3d1bt3bw0ePFiBgYGSzvbemzBhQrlPdTqnovN2js1mU+vWrdW3b1/ddNNNGjhwoCIjIx3tq1evLtMz6eWXX9Y777zjNK958+YaOnSounbtKpvN5ph/Mcd8PseOHdNNN92kkydPOu1zwIABCggIcMz79ttvy/TQKyklJUXLli1Tw4YN1b9/f6f/J3bu3FnhGGCX4lI/V3799Vfdddddys3Ndczr0KGD+vXrJ29vb8e89957T3/7298kne35fPPNN6tly5ZO2xoyZIjjPJfuBQsAF821OROAumbYsGEX/CaqU6dOxp49e5zWu5gePVar1fjll18MwzCMzMzMMt+UTZo0ybHuLbfc4tRW8pv20t+aNWjQwDh69KhhGIZRVFRk3HHHHU7tr776aoXrVqZHzznn+3b/nJLtJXtOfPvtt05tf/nLX5zWmzRpkqPNZrMZhw8fNgzDMA4fPmxYrVZHW0REhONc2O12Y9y4cU7bvZwePRX9tG/fvsy6x48fd/pWt3Pnzk69Ol555ZUy6+zZs8fIyckpMz87O9to3LixY91Ro0Y5tZf+Nvr3v/+9o610L6G4uDhHD4nSPURK91gqfZwff/yxo630us2aNatw3ap4nS+koKCgwp4dJX8GDBhgJCcnO61b+rqu7E95PXpuv/12R7vFYnG870r3Cpw7d26ZdSvq0ZObm2vMmzfPCAoKcmov3ZOvOs5NVfbo6dKli6MH2/vvv+/UZrPZjDVr1hiGYRhpaWmGt7d3he/Z6rret23bZhQVFZU5fwkJCU7r/ec//3FqL30eJ0yYYBQWFjraz/XcmDhxomOZsLAwIz8/3zCMs5/J4eHhjrbHH3+8TA0VuZgePZKMr776ytE+fvz4Ctc1DMOIjY294OfmzTff7FgmKCjI2LVrl6MtLS3NaNiwoaO9dA+0yp63xMREIzMzs8y+CwoKjKuvvtrp+iq5by8vL6frq3Tv1SNHjhgLFy686GM+3/+Djz32mFPbY4895mg7fPiwU68xm81mHDp0yNFe+roeOXKko9fdqlWrKvxMvZCKevQUFRUZmzZtMtq3b+/UPmbMGMe65/t9YMSIEU5tU6ZMcbRt3brV8PX1dbQFBAQ49bi60OcKAFwOevQAuCizZ8/W008/fd6eKZs2bdLgwYMdA59erAEDBqhnz56Szn6zXLKHgyQ9//zzjn+XHuchKSmpwu1OnDhRMTExks5+M1r6/vilS5deUr1V6fvvv3ea/vnnn516U2zevNnRVlxcrB9//FHS2XEUSo7nMmHCBMc9/haLRX/605+qvfbyREVFOX1rv3HjRkePr169eumZZ54ps05cXJxmzpypQYMGKTo6Wl5eXrJYLPLz89OBAwccy+3Zs+e8+37hhRcc/+7WrZtT2+9+9zvHgLsXcw01b95c99xzj2P6+uuvd+opsmfPHh0/fvy8dUmX/jpfiLu7uxYtWqTx48eXGQC8pEWLFjk9Macq5eTkaN68eY7pHj16ON53o0aNclp25syZF9zeuXErfHx8NGzYMGVmZjra2rZtqzvuuKNSddWGcyNJjz/+uOPzs/R12b9/f3Xv3l2SFBoa6tR74nzXpVR113tUVJReeeUV9ezZU6GhoXJ3d5fFYinT++B877+QkBC98cYbTj3ezvUIevDBBx3z0tLSHOMILV261Gmw/7Fjx1Z8sJehV69eTg8RGDJkiFP7hc5zaXa7XQsXLnRMe3l56fnnn3e8l++//36nz+Zly5bpzJkz5W7rfOctNjZWCxYs0E033aTY2FjHGGgeHh76+eefHcuXfF0WL16svLw8x/TYsWPLXNv169d36nlZFX744QfHv728vJz+r23QoIEmTZrkmC4uLtaiRYsq3Nbf/vY3ubu7S5Kuvvpqpx5pF/talTRmzBhZLBa5ubmpU6dOTj16/Pz89Oyzz15wG6U/mxs0aOB0fbdt21Z33XWXY/r06dNavXr1JdcMABeDp24BuCgeHh7661//qhdeeEE//fSTli9frpUrV2rz5s1Ot2wdOHBAP/zwg4YPH37R+yjdNbxkV/+goCCnRymXbJN03nCp9HabNGkiDw8Px+0j57sVoaaUHuT122+/Pe/y5wbNLH1bVuljjYqKUnBwsDIyMi67xpdeeuminro1YsQIjR49WtOnT3fM8/Hx0SeffOJ024B09hfnwYMHa8mSJRfc7unTpytsCwoKUnR0tGO69HVS8vxczjUknX36TMnbMY4cOeK07/Jc6utcGYGBgXr//ff12muv6ccff9SKFSu0YsUKJSQkOC33888/a/PmzerQoUO52xk9enS5A6y+/PLLZULSkr7++mun2xhKhjuxsbHq0qWLY6DT7777TllZWU5/vFVWr1699Nlnnzn+CKyMqjo3l+N81975PvvOd11W1fV+9OhR9ezZs1K3eZ7v/depU6cKvwxo2bKlBg4cqJ9++knS2du3br/9dqfbtrp27arWrVtfsIZL0bFjR6fpc7dWnXOxX1CkpaU5bveSpOTkZH311VcVLl9YWKikpCQ1bty4TNv5ztuYMWOcPkMrUvJ1Kf05c/XVV19w/apQ8vOqQYMGZd7fpV/bij7f/P39nW6zls6+XudukbvUL5POp0GDBpo1a5aaNm16wWVPnjypnJwcx3SLFi3KPEmwsscKAFWNoAfAJfH399fIkSMd34wePHhQd999t9M3i7t3776kbZf+xbvkL06l2y5X6Sfk1DUl/6AuqTYdV1FRkXbu3Ok0Lzc3Vzt37izzZJHZs2c7hTweHh7q0aOHwsLCZLFYtHz5cqWlpUnSeceCOt81VF57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cfXr109NmzbVXXfdpSlTpmjr1q2OYzj3hKpBgwYpJyfHqQdNTRsyZIj27t3rCGhKGjZsmO6///5KbedyXucLbfec4uJibdmyxelpMufUq1fPqWdSVTh8+LDTrZvdu3cvN+SRpOHDhzuCHulsQFTdQc/lnJv4+Hjde++9+vjjjx3zzvVqjI+PV1xcnBYvXlxNldec559/Xt98843jD/TDhw87Ap5XXnnF6clelysoKEj33HOPU7AbFxena6+9tsr2URXuvfdep8HSN23a5LhV79z56NChgz799FONHj3aEfzt3btXe/fuLbO9Sxlj5tprr9WgQYMcT/fKy8tz9MJp3769mjZtqi+//LLcdf/4xz8qNTXV6emHu3btchqPqrTKHPP5NGjQQF9//bVGjRrlCFDL+3/j+uuv17///e8Lbq8269y5sz7++GONHTvWEer8+uuvZZYbN25cmadMDho0SJGRkY4ejSkpKY6e0aVvxwaAi8WtWwAq7e6779aKFSv0wgsvaODAgYqLi5O3t7esVqsCAgLUsWNHPfXUU9qxY0eZb8Brg1tuuUXLly/XwIEDFRAQIF9fX8d4Crfeequry3OIiorS6tWrNW3aNA0ZMkT16tWTu7u7vLy8FBcXpxtuuEGvv/56mW/YIyMjtWbNGj3wwAOqV6+ePDw81KxZM/3pT3/SDz/8cN5HSle12bNnO/2x/PTTT6tz586O6Q8//NAx9kdOTo7uvvtuFRUVydPTU8uWLdP999+vyMhIeXh4KD4+Xi+99JLmzZvnkoFTS4qIiNC6dev04IMPKiYmRh4eHmratKn+8pe/6Msvv7yoUOZSX+fzefbZZ7VgwQI9+eST6tOnj+rXry8vLy/ZbDYFBwerR48emjx5snbs2FHuE8Qux6effurU26rkI6xLi42NVadOnRzTa9eudQSU1eVyz80HH3ygF154QXFxcXJ3d1f9+vX1yCOPaMOGDab5o6x58+b6+eefdcMNN8jf318+Pj7q3LmzZsyYoeeff77K9/fQQw85Td933321btySUaNG6f3331f79u3P++XFyJEjlZCQoGeffVZdunRRYGCgbDabAgIC1K5dO40dO1Zffvml3nnnnUuq4+uvv9Yf/vAHNWjQQO7u7mrQoIEefvhhrVy5ssIndUlng+L//ve/Wr58ue6++241btxY3t7e8vb2VqNG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4w5dddVVGjlypObNm3fBdY4fP64uXbqU+bnvvvsuuY6DBw9q4sSJ6tWrlwYNGqQpU6aosLDwgusZhqFp06Zp6NChuvrqqzVmzBht27btkuuojhpvvPHGcs9Xfn5+tdRZlWrL9SHV/mvkSrw+AAAAKrJ//361bt26TMgjSREREU7TRUVF+tOf/qT4+Hh5enoqLi5Ozz33XLm/D/3www/q06eP/P39FRAQoK5du2rWrFmO9vvuu09xcXFO6/zjH//QVVddpdDQUHl7e6tz58768ssvL/qYli1bJovFosTERM2fP18Wi0UWi0UHDx5UQUGBXnzxRXXu3FmBgYHy9fXVNddco6VLl5bZjt1u15QpU9S2bVt5eXkpPDxcgwcP1oYNGySdfdx4Tk6Opk+f7thHyd+lf/31Vw0ZMkQBAQHy8/NT//79tWbNGqd9TJs2TRaLRcuXL9fEiRMVERGh+vXrX/Qx1xb06AEqafPmzXrqqad000036YknntD69ev1pz/9ST4+PhowYMAF1580aZK6dOnimPbx8bmkOk6fPq0HHnhADRs21N///nelpqbqjTfeUF5env7whz+cd93p06frvffe04MPPqimTZtq9uzZevDBBzVz5swq/SC7nBolqX///rr77rud5tX2py7VlutDqv3XyJV4fQAAAJxPbGysVq9ere3bt6tNmzbnXXb8+PGaPn26Ro0apSeeeEJr167Va6+9poSEBM2dO9ex3LRp0zR27Fi1bt1azz77rIKCgvTrr79qwYIFuvPOOyvc/pQpUzRs2DDdddddKigo0GeffaZbbrlF3333nYYOHVrpY2rZsqU++eQTPfbYY6pfv76eeOIJSVJ4eLhOnz6tDz74QHfccYcmTJigrKwsffjhhxo0aJDWrVunDh06OLYzbtw4TZs2TUOGDNH48eNVVFSklStXas2aNerSpYs++eQTjR8/Xt26ddPvfvc7SVJ8fLwkaceOHbrmmmsUEBCgp59+Wu7u7nrvvffUt29fLV++XN27d3eqeeLEiQoPD9eLL76onJycSh9rbUPQA1TSBx98oNatW+u5556TJHXp0kVHjx7Ve++9V6k/5Bs0aKC2bdtedh1fffWVcnJy9Pe//12BgWe7hBYXF+uvf/2rxo4dq/Dw8HLXy8/P19SpU3X33XfrrrvukiR17NhRI0eO1IwZM/TMM89c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PfTo0QOvvPIK/Pz8Ov0f8Z3l+gA6/zXyPF4fRERE9OfRNdXF3EtzUVVW1dFdgba+NoM81OE4ooeIiIiIiIg6vZaMZCDq6lryO+AaPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREREREREREXQQDPUREbRAfHw+RSIQjR450dFc6lSNHjkAkEiE+Pr6ju9LuuvKxEREREdFfHwM9RPTMXL16Fb6+vnjhhRegra2NXr16YciQIRCLxcjKypLJa25ujmHDhimty9vbGyKRCGVlZQo/v3jxIkQiEUQiEbKzs5XW05in8aWlpYVBgwYhMDAQd+7cad2BPqXQ0FDs27fvmbTVnvLy8hAaGopr1651dFeIiIiIiOj/qXV0B4jo+XDq1CmMGTMG6urq8PLywtChQyGRSJCfn4/09HT06NEDjo6O7dZeTEwMevTogW7duiE2NhYODg5K89ra2iIoKAgAcOfOHRw4cAAbN25ERkYGTp8+DQ0NDaVlPT09MX369GbzPElYWBjEYjFcXV1bXUdHyMvLQ1hYGMaOHQtzc3OZz0aPHg2JRAJ1dfWO6RwRERE9V25U3EBZleIHgM+SvrY+THVNO7obAIBr167BwsICcXFx8Pb2BvDoAWNYWBgEQXjq+kQiEZYvX47Q0NBm87WljZY6cuQIHB0dkZWVhbFjxzabNzc3Fx988AHOnTuHqqoqnD17Fra2tn9a3zoDBnqI6JkICwtDVVUV8vLy8OKLL8p9XlJS0m5t1dbWIjExEe7u7tDV1cXWrVsRERGBHj16KMxvYmKCmTNnSt/Pnz8fkyZNwnfffYf9+/fD3d1daVuqqqpQVVVtt763t3v37ik97j+TiooKtLS0nnm7RERE9Py5UXEDg78cjOq66o7uCrTUtHBp7qWnDvbEx8fDx8cHubm5GDFixJ/Uu+dPbW0t3N3doaWlhY0bN0JbWxtmZmbt2saFCxewe/dueHt7yz387CicukVEz0R+fj769OmjMMgDAP369Wu3tr799lvcvn0bYrEY3t7eePDgAXbt2vVUdTg7OwMAfv/992bzKVqjpzHthx9+wPr16zFw4EBoamrCysoK27dvl+a7du0aRCIRAGD79u0yU8ge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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "X_test = data_dic['X_test_' + group]\n", "y_test = data_dic['y_test_' + group]\n", "model_name = model_choices[method_name]\n", "\n", "shap_inter_vals = np.load(f'./output/shap_inter_values/{group}_{method_name}.npy')\n", "if method_name == 'ORIG_CW':\n", " shap_inter_vals = shap_inter_vals[:,:,:,1] # Take info about positive class\n", "\n", "num_instances = shap_inter_vals.shape[0] # Dynamically get the number of instances\n", "num_features = shap_inter_vals.shape[1] # Assuming the number of features is the second dimension size\n", "# Loop over each instance and set the diagonal and lower triangle of each 39x39 matrix to NaN\n", "for i in range(num_instances):\n", " # Mask the diagonal\n", " np.fill_diagonal(shap_inter_vals[i], np.nan)\n", " # Get indices for the lower triangle, excluding the diagonal\n", " lower_triangle_indices = np.tril_indices(num_features, -1) # -1 excludes the diagonal\n", " # Set the lower triangle to NaN\n", " shap_inter_vals[i][lower_triangle_indices] = np.nan\n", "\n", "plt.figure(figsize=(10,10))\n", "shap.summary_plot(shap_inter_vals, X_test, show=False, sort=False)\n", "fig=plt.gcf()\n", "attr_names = []\n", "used_colors = {'purple': 'Social factor', 'green': 'Individual factor'}\n", "# Iterate over all axes in the figure\n", "for ax in fig.get_axes():\n", " # Customize the y-axis tick labels\n", " for label in ax.get_yticklabels():\n", " label_text = label.get_text() # Get the text of the label\n", " attr_names.append(label_text)\n", " label.set_fontsize(12)\n", " if label_text in soc_var_names:\n", " label.set_color('purple')\n", " else:\n", " label.set_color('green')\n", "\n", "# Assuming the top labels are treated as titles, let's try to modify them\n", "total_axes = len(fig.axes)\n", "for i, ax in enumerate(fig.axes):\n", " reverse_index = total_axes - 1 - i\n", " title = attr_names[reverse_index]\n", " ax.set_title(title, color='purple' if title in soc_var_names else 'green', fontsize=12, rotation=90)\n", " if method_name == 'ORIG_CW':\n", " ax.set_xlim(-0.05, 0.05) # Use same scale for pre and post\n", " elif method_name == 'OVER':\n", " ax.set_xlim(-0.75,0.75)\n", "\n", "# Create a single general legend for the whole figure\n", "handles = [mpatches.Patch(color=color, label=label) for color, label in used_colors.items()]\n", "fig.legend(handles=handles, loc='lower right', fontsize=12)\n", "\n", "plt.suptitle(f'Simplified Example SHAP Summary Interaction Plot\\n', fontsize=15, fontweight='bold', x=0.5, y=0.95, ha='center')\n", "plt.tight_layout()\n", "plt.savefig(f'./output/plots/shap_inter_summary/example.svg', format='svg', dpi=600)\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "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.9.5" } }, "nbformat": 4, "nbformat_minor": 2 }