{ "cells": [ { "cell_type": "markdown", "id": "89bc1d9b", "metadata": {}, "source": [ "# Combined Population Health and Service Capacity Model" ] }, { "cell_type": "markdown", "id": "eab5577a", "metadata": {}, "source": [ "## Overview\n", "\n", "This notebook contains the code to develop and test the MGSR.\n", "\n", "Further details on the development of the population health model can be found [here](./population_health_model.ipynb), and the service capacity model can be found [here](./capacity_model.ipynb)." ] }, { "cell_type": "code", "execution_count": 1, "id": "29268eb1", "metadata": {}, "outputs": [], "source": [ "#turn warnings off to keep notebook tidy\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "id": "b0a12a14", "metadata": {}, "source": [ "## Import libraries " ] }, { "cell_type": "code", "execution_count": 2, "id": "f9e92104", "metadata": {}, "outputs": [], "source": [ "import os\n", "import pandas as pd\n", "import numpy as np\n", "import pickle as pkl\n", "\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.ensemble import RandomForestRegressor\n", "from sklearn.ensemble import GradientBoostingRegressor\n", "\n", "\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn.model_selection import cross_validate\n", "from sklearn.model_selection import RepeatedKFold\n", "from sklearn.metrics import r2_score as r2\n", "\n", "\n", "import seaborn as sns\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "plt.style.use('ggplot')" ] }, { "cell_type": "markdown", "id": "a24d85cb", "metadata": {}, "source": [ "## Import data " ] }, { "cell_type": "code", "execution_count": 3, "id": "13122672", "metadata": {}, "outputs": [], "source": [ "dta = pd.read_csv('https://raw.githubusercontent.com/CharlotteJames/ed-forecast/main/data/master_scaled_new_pop.csv',\n", " index_col=0)" ] }, { "cell_type": "code", "execution_count": 4, "id": "e369d537", "metadata": {}, "outputs": [], "source": [ "dta.columns = ['_'.join([c.split('/')[0],c.split('/')[-1]])\n", " if '/' in c else c for c in dta.columns]" ] }, { "cell_type": "code", "execution_count": 5, "id": "48a6f288", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ccgmonth111_111_offered111_111_answeredamb_sys_madeamb_sys_answeredgp_appt_availableae_attendances_attendancespopulationPeoplePlacesLivesyear%>65%<15N>65N<15
000QJan406.655830308.945095310.561801234.7161874568.0197661179.85524614.894297.299.794.4201814.4640221.7635052.15433.2415
100QFeb349.933603256.872981261.756435205.2987973910.9183441075.45218914.894297.299.794.4201814.4640221.7635052.15433.2415
200QMar413.247659300.690725303.676215234.7161874051.7785451210.87403214.894297.299.794.4201814.4640221.7635052.15433.2415
300QApr349.608595278.140171264.973181203.6779243974.4330011186.16642714.894297.299.794.4201814.4640221.7635052.15433.2415
400QMay361.100544284.419492294.361403227.9264374232.3857611299.29771314.894297.299.794.4201814.4640221.7635052.15433.2415
\n", "
" ], "text/plain": [ " ccg month 111_111_offered 111_111_answered amb_sys_made \\\n", "0 00Q Jan 406.655830 308.945095 310.561801 \n", "1 00Q Feb 349.933603 256.872981 261.756435 \n", "2 00Q Mar 413.247659 300.690725 303.676215 \n", "3 00Q Apr 349.608595 278.140171 264.973181 \n", "4 00Q May 361.100544 284.419492 294.361403 \n", "\n", " amb_sys_answered gp_appt_available ae_attendances_attendances \\\n", "0 234.716187 4568.019766 1179.855246 \n", "1 205.298797 3910.918344 1075.452189 \n", "2 234.716187 4051.778545 1210.874032 \n", "3 203.677924 3974.433001 1186.166427 \n", "4 227.926437 4232.385761 1299.297713 \n", "\n", " population People Places Lives year %>65 %<15 N>65 \\\n", "0 14.8942 97.2 99.7 94.4 2018 14.46402 21.763505 2.1543 \n", "1 14.8942 97.2 99.7 94.4 2018 14.46402 21.763505 2.1543 \n", "2 14.8942 97.2 99.7 94.4 2018 14.46402 21.763505 2.1543 \n", "3 14.8942 97.2 99.7 94.4 2018 14.46402 21.763505 2.1543 \n", "4 14.8942 97.2 99.7 94.4 2018 14.46402 21.763505 2.1543 \n", "\n", " N<15 \n", "0 3.2415 \n", "1 3.2415 \n", "2 3.2415 \n", "3 3.2415 \n", "4 3.2415 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dta.head()" ] }, { "cell_type": "code", "execution_count": 6, "id": "817c8710", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1618, 17)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dta.shape" ] }, { "cell_type": "markdown", "id": "0f30286b", "metadata": {}, "source": [ "## Function to group data " ] }, { "cell_type": "code", "execution_count": 7, "id": "2178761f", "metadata": {}, "outputs": [], "source": [ "def group_data(data, features):\n", "\n", " features = ['population', '%>65',\n", " 'People', 'Places',\n", " 'Lives']\n", "\n", "\n", " #ensure no identical points in train and test\n", "\n", " grouped = pd.DataFrame()\n", " \n", " for pop, group in data.groupby('population'):\n", "\n", " #if len(group.lives.unique())>1:\n", "\n", " #print('multiple CCG with same population')\n", "\n", " ccg_year = pd.Series(dtype='float64')\n", "\n", " for f in features:\n", "\n", " ccg_year[f] = group[f].unique()[0]\n", "\n", " ccg_year['ae_attendances_attendances']\\\n", " = group.ae_attendances_attendances.mean()\n", " \n", "\n", " grouped = grouped.append(ccg_year, ignore_index=True)\n", " \n", " return grouped" ] }, { "cell_type": "markdown", "id": "9df3e7e7", "metadata": {}, "source": [ "## Fit Predict Population Health model" ] }, { "cell_type": "code", "execution_count": 8, "id": "4740fcb8", "metadata": {}, "outputs": [], "source": [ "model = RandomForestRegressor(max_depth=7, n_estimators=4, \n", " random_state=0)\n", "\n", "pophealth_features = ['population', '%>65',\n", " 'People', 'Places', 'Lives']\n", "\n", "grouped = group_data(dta, pophealth_features)\n", "\n", "y = grouped['ae_attendances_attendances']\n", "\n", "X = grouped[pophealth_features]\n", "\n", "cv = RepeatedKFold(n_splits=5, n_repeats=1, random_state=1)\n", " \n", "results = pd.DataFrame()\n", "\n", "\n", "scores_train, scores_test, feat = [],[],[]\n", " \n", "for train_index, test_index in cv.split(X, y):\n", " \n", " model.fit(X.iloc[train_index], y.iloc[train_index])\n", " \n", " test = X.iloc[test_index].copy()\n", " test['ae_predicted'] = model.predict(X.iloc[test_index])\n", " \n", " results = results.append(test, ignore_index=True)" ] }, { "cell_type": "code", "execution_count": 9, "id": "0c554f70", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
population%>65PeoplePlacesLivesae_predicted
014.908414.56561496.00000099.50094.600000955.021953
120.598519.98446595.500000102.300100.300000803.955255
220.954718.555742101.100000101.600101.300000464.338579
321.620314.12885196.60000096.80094.600000397.401519
426.106115.08268288.60000094.80091.900000684.372748
.....................
140137.065316.34396293.68000098.58091.620000570.391006
141150.253513.238627104.566667100.850104.100000382.996087
142151.145712.145566101.74000096.82097.540000411.516817
143181.124911.599620100.91666797.55099.133333411.516817
144186.107519.590720101.10000097.825102.406250385.143687
\n", "

145 rows × 6 columns

\n", "
" ], "text/plain": [ " population %>65 People Places Lives ae_predicted\n", "0 14.9084 14.565614 96.000000 99.500 94.600000 955.021953\n", "1 20.5985 19.984465 95.500000 102.300 100.300000 803.955255\n", "2 20.9547 18.555742 101.100000 101.600 101.300000 464.338579\n", "3 21.6203 14.128851 96.600000 96.800 94.600000 397.401519\n", "4 26.1061 15.082682 88.600000 94.800 91.900000 684.372748\n", ".. ... ... ... ... ... ...\n", "140 137.0653 16.343962 93.680000 98.580 91.620000 570.391006\n", "141 150.2535 13.238627 104.566667 100.850 104.100000 382.996087\n", "142 151.1457 12.145566 101.740000 96.820 97.540000 411.516817\n", "143 181.1249 11.599620 100.916667 97.550 99.133333 411.516817\n", "144 186.1075 19.590720 101.100000 97.825 102.406250 385.143687\n", "\n", "[145 rows x 6 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results" ] }, { "cell_type": "markdown", "id": "20206a0c", "metadata": {}, "source": [ "### Merge with data set " ] }, { "cell_type": "code", "execution_count": 10, "id": "cc79a921", "metadata": {}, "outputs": [], "source": [ "dta = dta.merge(results[['population','ae_predicted']],\\\n", " left_on='population', right_on='population')" ] }, { "cell_type": "code", "execution_count": 11, "id": "886cc81b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ccgmonth111_111_offered111_111_answeredamb_sys_madeamb_sys_answeredgp_appt_availableae_attendances_attendancespopulationPeoplePlacesLivesyear%>65%<15N>65N<15ae_predicted
000QJan406.655830308.945095310.561801234.7161874568.0197661179.85524614.894297.299.794.4201814.46402021.7635052.15433.24151062.812464
100QFeb349.933603256.872981261.756435205.2987973910.9183441075.45218914.894297.299.794.4201814.46402021.7635052.15433.24151062.812464
200QMar413.247659300.690725303.676215234.7161874051.7785451210.87403214.894297.299.794.4201814.46402021.7635052.15433.24151062.812464
300QApr349.608595278.140171264.973181203.6779243974.4330011186.16642714.894297.299.794.4201814.46402021.7635052.15433.24151062.812464
400QMay361.100544284.419492294.361403227.9264374232.3857611299.29771314.894297.299.794.4201814.46402021.7635052.15433.24151062.812464
.........................................................
1613X2C4YAug281.008273253.093792459.652700306.8436503982.517935390.40553044.033793.398.397.6201917.72142719.2391287.80348.4717457.428335
1614X2C4YSep263.936917240.868701453.078703305.2623994598.750502388.67958044.033793.398.397.6201917.72142719.2391287.80348.4717457.428335
1615X2C4YOct286.454848254.680032488.348051327.2026695225.611293391.26850644.033793.398.397.6201917.72142719.2391287.80348.4717457.428335
1616X2C4YNov326.984206276.374619499.497654306.9535944606.948769389.54255544.033793.398.397.6201917.72142719.2391287.80348.4717457.428335
1617X2C4YDec365.414559334.346359532.917357311.6456114160.472547404.53107544.033793.398.397.6201917.72142719.2391287.80348.4717457.428335
\n", "

1618 rows × 18 columns

\n", "
" ], "text/plain": [ " ccg month 111_111_offered 111_111_answered amb_sys_made \\\n", "0 00Q Jan 406.655830 308.945095 310.561801 \n", "1 00Q Feb 349.933603 256.872981 261.756435 \n", "2 00Q Mar 413.247659 300.690725 303.676215 \n", "3 00Q Apr 349.608595 278.140171 264.973181 \n", "4 00Q May 361.100544 284.419492 294.361403 \n", "... ... ... ... ... ... \n", "1613 X2C4Y Aug 281.008273 253.093792 459.652700 \n", "1614 X2C4Y Sep 263.936917 240.868701 453.078703 \n", "1615 X2C4Y Oct 286.454848 254.680032 488.348051 \n", "1616 X2C4Y Nov 326.984206 276.374619 499.497654 \n", "1617 X2C4Y Dec 365.414559 334.346359 532.917357 \n", "\n", " amb_sys_answered gp_appt_available ae_attendances_attendances \\\n", "0 234.716187 4568.019766 1179.855246 \n", "1 205.298797 3910.918344 1075.452189 \n", "2 234.716187 4051.778545 1210.874032 \n", "3 203.677924 3974.433001 1186.166427 \n", "4 227.926437 4232.385761 1299.297713 \n", "... ... ... ... \n", "1613 306.843650 3982.517935 390.405530 \n", "1614 305.262399 4598.750502 388.679580 \n", "1615 327.202669 5225.611293 391.268506 \n", "1616 306.953594 4606.948769 389.542555 \n", "1617 311.645611 4160.472547 404.531075 \n", "\n", " population People Places Lives year %>65 %<15 N>65 \\\n", "0 14.8942 97.2 99.7 94.4 2018 14.464020 21.763505 2.1543 \n", "1 14.8942 97.2 99.7 94.4 2018 14.464020 21.763505 2.1543 \n", "2 14.8942 97.2 99.7 94.4 2018 14.464020 21.763505 2.1543 \n", "3 14.8942 97.2 99.7 94.4 2018 14.464020 21.763505 2.1543 \n", "4 14.8942 97.2 99.7 94.4 2018 14.464020 21.763505 2.1543 \n", "... ... ... ... ... ... ... ... ... \n", "1613 44.0337 93.3 98.3 97.6 2019 17.721427 19.239128 7.8034 \n", "1614 44.0337 93.3 98.3 97.6 2019 17.721427 19.239128 7.8034 \n", "1615 44.0337 93.3 98.3 97.6 2019 17.721427 19.239128 7.8034 \n", "1616 44.0337 93.3 98.3 97.6 2019 17.721427 19.239128 7.8034 \n", "1617 44.0337 93.3 98.3 97.6 2019 17.721427 19.239128 7.8034 \n", "\n", " N<15 ae_predicted \n", "0 3.2415 1062.812464 \n", "1 3.2415 1062.812464 \n", "2 3.2415 1062.812464 \n", "3 3.2415 1062.812464 \n", "4 3.2415 1062.812464 \n", "... ... ... \n", "1613 8.4717 457.428335 \n", "1614 8.4717 457.428335 \n", "1615 8.4717 457.428335 \n", "1616 8.4717 457.428335 \n", "1617 8.4717 457.428335 \n", "\n", "[1618 rows x 18 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dta" ] }, { "cell_type": "markdown", "id": "3912ce58", "metadata": {}, "source": [ "## Combined model " ] }, { "cell_type": "code", "execution_count": 12, "id": "950e9615", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.4519048888936743\n" ] } ], "source": [ "#capacity utility model\n", "rf1 = RandomForestRegressor(max_depth=5, n_estimators=6, \n", " random_state=0)\n", "\n", "#combinator\n", "final = LinearRegression()\n", "\n", "train, test = train_test_split(dta,random_state=29)\n", "\n", "#split training data into two sets\n", "train_0, train_1 = train_test_split(train, train_size=0.75, \n", " random_state=29)\n", "\n", "\n", "\n", "#capacity utility\n", "capacity_features = ['gp_appt_available',\n", " '111_111_offered', 'amb_sys_answered']\n", "# '111_111_answered', 'amb_sys_made']\n", "\n", "pophealth_features = ['population','%>65',\n", " 'People', 'Places', 'Lives']\n", "\n", "#train capacity modeel\n", "\n", "y_0 = train_0['ae_attendances_attendances']\n", "X_0 = train_0[capacity_features]\n", "\n", "rf1.fit(X_0,y_0)\n", "\n", "\n", "#predict\n", "\n", "y_pred_cu = rf1.predict(train_1[capacity_features])\n", "\n", "print(rf1.score(train_1[capacity_features], \n", " train_1['ae_attendances_attendances']))\n", "\n", "y_pred_ph = train_1['ae_predicted']\n" ] }, { "cell_type": "code", "execution_count": 13, "id": "1010375e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.8185753379143442" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_f = np.vstack([y_pred_cu, y_pred_ph]).T\n", "y_f = train_1['ae_attendances_attendances']\n", "\n", "final.fit(X_f,y_f)\n", "\n", "final.score(X_f,y_f)" ] }, { "cell_type": "markdown", "id": "8682bcf4", "metadata": {}, "source": [ "### Check performance on held out data " ] }, { "cell_type": "code", "execution_count": 14, "id": "78390dc6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.4227235191823048\n", "0.7809961790244568\n", "0.8028603990777634\n" ] } ], "source": [ "y_pred_cu = rf1.predict(test[capacity_features])\n", "\n", "print(rf1.score(test[capacity_features], \n", " test['ae_attendances_attendances']))\n", "\n", "#y_pred_ph = rf2.predict(test[pophealth_features])\n", "\n", "y_pred_ph = test['ae_predicted']\n", "\n", "print(r2(test['ae_attendances_attendances'], test['ae_predicted']))\n", "\n", "y_pred_final = final.predict(np.vstack([y_pred_cu, y_pred_ph]).T)\n", "\n", "#print(r2_score(test['ae_attendances_attendances'], y_pred_final))\n", "\n", "print(final.score(np.vstack([y_pred_cu, y_pred_ph]).T,\n", " test['ae_attendances_attendances']))" ] }, { "cell_type": "markdown", "id": "44b618e6", "metadata": {}, "source": [ "### Coefficients " ] }, { "cell_type": "code", "execution_count": 15, "id": "3879f419", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.33472245, 0.84220157])" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "final.coef_" ] }, { "cell_type": "markdown", "id": "bfb18364", "metadata": {}, "source": [ "## Combined model with optimised parameters " ] }, { "cell_type": "code", "execution_count": 16, "id": "c9770860", "metadata": {}, "outputs": [], "source": [ "def fit_ph(dta, features, model):\n", " \n", " if 'ae_predicted' in dta.columns:\n", " \n", " dta = dta.drop(['ae_predicted'], axis=1)\n", " \n", " grouped = group_data(dta, features)\n", " \n", " y = grouped['ae_attendances_attendances']\n", "\n", " X = grouped[features]\n", "\n", " # dont set random state so that function can be used in overall cv\n", " cv = RepeatedKFold(n_splits=5, n_repeats=1, random_state=1)\n", " \n", " results = pd.DataFrame()\n", " \n", " for train_index, test_index in cv.split(X, y):\n", " \n", " model.fit(X.iloc[train_index], y.iloc[train_index])\n", " \n", " test = X.iloc[test_index].copy()\n", " \n", " test['ae_predicted'] = model.predict(X.iloc[test_index])\n", " \n", " results = results.append(test, ignore_index=True)\n", " \n", " dta = dta.merge(results[['population','ae_predicted']],\n", " left_on='population', right_on='population')\n", " \n", " return dta" ] }, { "cell_type": "code", "execution_count": 17, "id": "0b25effa", "metadata": {}, "outputs": [], "source": [ "def fit_capacity(dta, features, model):\n", " \n", " y = dta['ae_attendances_attendances']\n", " X = dta[features]\n", "\n", " model.fit(X,y)\n", " \n", " return model" ] }, { "cell_type": "code", "execution_count": 18, "id": "a8cd510b", "metadata": {}, "outputs": [], "source": [ "def fit_combined(train, rf1, m1_features, train_size=7/8):\n", " \n", " final = LinearRegression()\n", "\n", " #split training data into two sets\n", " train_0, train_1 = train_test_split(train, \n", " train_size=train_size, \n", " random_state=29)\n", "\n", " #train capactiy model\n", " \n", " rf1 = fit_capacity(train_0, m1_features, rf1)\n", " \n", "\n", " #predict monthly attendances\n", "\n", " y_pred_1 = rf1.predict(train_1[m1_features])\n", "\n", " \n", " #use pre-predicted average attendances\n", " \n", " y_pred_2 = train_1['ae_predicted']\n", " \n", " #final\n", " \n", " X_f = np.vstack([y_pred_1, y_pred_2]).T\n", " y_f = train_1['ae_attendances_attendances']\n", "\n", " final.fit(X_f,y_f)\n", " \n", " return rf1,final " ] }, { "cell_type": "code", "execution_count": 19, "id": "bcf7d0c2", "metadata": {}, "outputs": [], "source": [ "def cv_combined(dta, rf1, rf2):\n", " \n", " # splitter for cross validation \n", " \n", " cv = RepeatedKFold(n_splits=5, n_repeats=5, random_state=1)\n", " \n", " scores_final, scores_rf1, scores_rf2, coefs = [],[],[],[]\n", " \n", " k=1\n", " \n", " capacity_features = ['gp_appt_available',\n", " '111_111_offered', 'amb_sys_answered']\n", "\n", " pophealth_features = ['population', '%>65',\n", " 'People', 'Places', 'Lives']\n", " \n", " dta_pred = pd.DataFrame()\n", " \n", " #fit population health independently to avoid data leakage\n", " \n", " dta = fit_ph(dta, pophealth_features, rf2)\n", " \n", " print(dta.shape)\n", " \n", " for train_index, test_index in cv.split(dta):\n", " \n", " #print(f'\\n Split {k} \\n')\n", " \n", " train = dta.iloc[train_index]\n", " test = dta.iloc[test_index]\n", "\n", " #final models\n", " rf1, final = fit_combined(train, rf1, capacity_features)\n", " \n", " coefs.append(final.coef_)\n", " \n", " #predict on test data\n", " \n", " y_pred_cu = rf1.predict(test[capacity_features])\n", "\n", " scores_rf1.append(rf1.score(test[capacity_features],\n", " test['ae_attendances_attendances']))\n", "\n", " y_pred_ph = test['ae_predicted']\n", "\n", " scores_rf2.append(r2(test['ae_attendances_attendances'],\n", " test['ae_predicted']))\n", " \n", " preds = final.predict(np.vstack([y_pred_cu, y_pred_ph]).T)\n", "\n", " scores_final.append(final.score(np.vstack([y_pred_cu, y_pred_ph]).T,\n", " test['ae_attendances_attendances']))\n", " \n", " test_pred = test.copy()\n", " test_pred['predicted'] = preds\n", " test_pred['true'] = test['ae_attendances_attendances'].values\n", " \n", " test_pred['iter'] = [k for i in test_pred.index]\n", " \n", " dta_pred = dta_pred.append(test_pred, ignore_index=False)\n", " \n", " \n", " k+=1\n", " \n", " return scores_final, scores_rf1, scores_rf2, dta_pred, coefs" ] }, { "cell_type": "code", "execution_count": 20, "id": "c6614a41", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1618, 18)\n" ] } ], "source": [ "#capacity model\n", "rf1 = RandomForestRegressor(max_depth=5, n_estimators=6, random_state=0)\n", "\n", "#population health model\n", "rf2 = RandomForestRegressor(max_depth=7, n_estimators=4, random_state=0)\n", "\n", "scores_final, scores_rf1, scores_rf2, \\\n", "dta_pred, coefs = cv_combined(dta, rf1, rf2)" ] }, { "cell_type": "markdown", "id": "cdbdaa36", "metadata": {}, "source": [ "### Results for paper" ] }, { "cell_type": "code", "execution_count": 21, "id": "9c4adc73", "metadata": {}, "outputs": [], "source": [ "results=pd.DataFrame()\n", "\n", "results['final'] = scores_final" ] }, { "cell_type": "code", "execution_count": 22, "id": "b86e07d9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
final
count25.000000
mean0.793439
std0.024965
min0.747330
25%0.773945
50%0.792260
75%0.813894
max0.837230
\n", "
" ], "text/plain": [ " final\n", "count 25.000000\n", "mean 0.793439\n", "std 0.024965\n", "min 0.747330\n", "25% 0.773945\n", "50% 0.792260\n", "75% 0.813894\n", "max 0.837230" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "results.describe()" ] }, { "cell_type": "markdown", "id": "244186c7", "metadata": {}, "source": [ "### Coefficient importances " ] }, { "cell_type": "markdown", "id": "8076564f", "metadata": {}, "source": [ "#### Mean " ] }, { "cell_type": "code", "execution_count": 23, "id": "ca9d6cbe", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.22809236, 0.85217576])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.mean(coefs, axis=0)" ] }, { "cell_type": "markdown", "id": "095d9c7e", "metadata": {}, "source": [ "#### Std " ] }, { "cell_type": "code", "execution_count": 24, "id": "4c840c8a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.06542627, 0.06053951])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.std(coefs, axis=0)" ] }, { "cell_type": "markdown", "id": "9485615a", "metadata": {}, "source": [ "### Plot " ] }, { "cell_type": "code", "execution_count": 25, "id": "acf021aa", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots(figsize=(8,5))\n", "\n", "mean_pred, true = [],[]\n", "\n", "for i in dta_pred.index.unique():\n", " \n", " mean_pred.append(dta_pred.loc[i]['predicted'].mean())\n", " true.append(dta_pred.loc[i]['true'].mean())\n", "\n", "plt.plot(true, mean_pred, 'o', alpha=0.5)\n", "\n", "xx = np.arange(min(dta_pred['true']),max(dta_pred['true']))\n", "plt.plot(xx,xx,'k--')\n", "\n", "plt.xlabel('True monthly ED attendances per 10,000 people')\n", "plt.ylabel('Predicted monthly ED attendances per 10,000 people')\n", "plt.savefig('true_predicted_combined.png', dpi=300)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ccbf5fa4", "metadata": {}, "source": [ "## Permutation Feature Importance " ] }, { "cell_type": "code", "execution_count": 26, "id": "d9305889", "metadata": {}, "outputs": [], "source": [ "def fit_ph_shuffle(dta, features,f, model):\n", " \n", " if 'ae_predicted' in dta.columns:\n", " \n", " dta = dta.drop(['ae_predicted'], axis=1)\n", " \n", " grouped = group_data(dta, features)\n", " \n", " y = grouped['ae_attendances_attendances']\n", "\n", " X = grouped[features]\n", " \n", " X_shuffled = X.copy()\n", " \n", " X_shuffled[f] = np.random.permutation(X[f].values)\n", " \n", " \n", " # dont set random state so that function can be used in overall cv\n", " cv = RepeatedKFold(n_splits=5, n_repeats=1, random_state=1)\n", " \n", " results = pd.DataFrame()\n", " \n", " for train_index, test_index in cv.split(X, y):\n", " \n", " model.fit(X.iloc[train_index], y.iloc[train_index])\n", " \n", " test = X.iloc[test_index].copy()\n", " \n", " test['ae_predicted'] = model.predict(X_shuffled.iloc[test_index])\n", " \n", " results = results.append(test, ignore_index=True)\n", " \n", " dta = dta.merge(results[['population','ae_predicted']],\n", " left_on='population', right_on='population')\n", " \n", " return dta" ] }, { "cell_type": "code", "execution_count": 27, "id": "49774140", "metadata": {}, "outputs": [], "source": [ "def permeate_feature(dta, f,rf1, rf2):\n", " \n", " \n", " shuffled = dta.copy()\n", "\n", " capacity_features = ['gp_appt_available',\n", " '111_111_offered', 'amb_sys_answered']\n", "# '111_111_answered', 'amb_sys_made']\n", "\n", " pophealth_features = ['population', '%>65',\n", " 'People', 'Places', 'Lives']\n", " \n", " if f in capacity_features:\n", " \n", " shuffled[f] = np.random.permutation(dta[f].values)\n", " \n", " else:\n", " \n", " shuffled = fit_ph_shuffle(shuffled, pophealth_features,f, rf2)\n", " \n", " \n", " dta = fit_ph(dta, pophealth_features, rf2)\n", " \n", " # splitter for cross validation\n", " cv = RepeatedKFold(n_splits=5, n_repeats=5, random_state=1)\n", " \n", " #importances = pd.DataFrame()\n", " \n", " shuffled_score, true_score = [],[]\n", " \n", " #print(f'running for {f} \\n')\n", " \n", " for train_index, test_index in cv.split(dta):\n", " \n", " test_shuffled = shuffled.iloc[test_index]\n", " \n", " train = dta.iloc[train_index]\n", " test = dta.iloc[test_index]\n", " \n", " \n", " #final models\n", " rf1, final = fit_combined(train, rf1, capacity_features)\n", "\n", " \n", " \n", " #predict on test data\n", " \n", " y_pred_cu = rf1.predict(test[capacity_features])\n", "\n", " y_pred_ph = test['ae_predicted']\n", " \n", " y_pred_cus = rf1.predict(test_shuffled[capacity_features])\n", " \n", " if f in capacity_features:\n", "\n", " y_pred_phs = test['ae_predicted']\n", " \n", " else:\n", " \n", " y_pred_phs = test_shuffled['ae_predicted']\n", " \n", " \n", " true_score.append(\n", " final.score(np.vstack([y_pred_cu, y_pred_ph]).T,\\\n", " test['ae_attendances_attendances']))\n", " \n", " shuffled_score.append(\n", " true_score[-1] - final.score(np.vstack([y_pred_cus, y_pred_phs]).T,\\\n", " test['ae_attendances_attendances']))\n", " \n", " #print(f'{f} complete\\n')\n", " \n", " return true_score, shuffled_score " ] }, { "cell_type": "code", "execution_count": 28, "id": "ab67452c", "metadata": {}, "outputs": [], "source": [ "def feature_importance_combined(dta, rf1, rf2):\n", " \n", " importances = pd.DataFrame()\n", " \n", " capacity_features = ['gp_appt_available',\n", " '111_111_offered', 'amb_sys_answered']\n", " # '111_111_answered', 'amb_sys_made']\n", "\n", " pophealth_features = ['population', '%>65',\n", " 'People', 'Places', 'Lives']\n", " \n", " \n", " for f in capacity_features + pophealth_features:\n", " \n", " \n", " true_score, shuffled_score = permeate_feature(dta, f,rf1, rf2)\n", " \n", " if 'score' in importances.columns:\n", " \n", " importances['score'] = np.mean([importances['score'].values, true_score],axis=0)\n", " \n", " else:\n", " \n", " importances['score'] = true_score\n", " \n", " importances[f] = shuffled_score\n", " \n", "\n", " return importances" ] }, { "cell_type": "code", "execution_count": 29, "id": "378d365c", "metadata": {}, "outputs": [], "source": [ "#set random seed to make results reproducible\n", "np.random.seed(4)\n", "\n", "importances = feature_importance_combined(dta, rf1, rf2)" ] }, { "cell_type": "code", "execution_count": 30, "id": "0e2382bc", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
scoregp_appt_available111_111_offeredamb_sys_answeredpopulation%>65PeoplePlacesLives
count25.00000025.00000025.00000025.00000025.00000025.00000025.00000025.00000025.000000
mean0.7934390.0098210.0200910.0482010.3939940.1093980.0709020.0401080.218843
std0.0249650.0059050.0096340.0221510.0670070.0181030.0256040.0126600.036510
min0.747330-0.0001530.0070460.0024380.3117840.0743450.0140800.0154710.158269
25%0.7739450.0043930.0122070.0339470.3339010.0944810.0522570.0330590.190781
50%0.7922600.0112440.0177220.0489730.3812200.1069520.0763360.0411560.218894
75%0.8138940.0143140.0267690.0575360.4452630.1232590.0894310.0453250.235801
max0.8372300.0183270.0421180.0969850.5782560.1362240.1110010.0620450.286407
\n", "
" ], "text/plain": [ " score gp_appt_available 111_111_offered amb_sys_answered \\\n", "count 25.000000 25.000000 25.000000 25.000000 \n", "mean 0.793439 0.009821 0.020091 0.048201 \n", "std 0.024965 0.005905 0.009634 0.022151 \n", "min 0.747330 -0.000153 0.007046 0.002438 \n", "25% 0.773945 0.004393 0.012207 0.033947 \n", "50% 0.792260 0.011244 0.017722 0.048973 \n", "75% 0.813894 0.014314 0.026769 0.057536 \n", "max 0.837230 0.018327 0.042118 0.096985 \n", "\n", " population %>65 People Places Lives \n", "count 25.000000 25.000000 25.000000 25.000000 25.000000 \n", "mean 0.393994 0.109398 0.070902 0.040108 0.218843 \n", "std 0.067007 0.018103 0.025604 0.012660 0.036510 \n", "min 0.311784 0.074345 0.014080 0.015471 0.158269 \n", "25% 0.333901 0.094481 0.052257 0.033059 0.190781 \n", "50% 0.381220 0.106952 0.076336 0.041156 0.218894 \n", "75% 0.445263 0.123259 0.089431 0.045325 0.235801 \n", "max 0.578256 0.136224 0.111001 0.062045 0.286407 " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "importances.describe()" ] }, { "cell_type": "code", "execution_count": 31, "id": "06c258d0", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjgAAAFOCAYAAACL5me3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABJgklEQVR4nO3deVzVZf7//8dhEwEBAYUUFJdwHRckVGJUlEhHS3NSm8zKpTJbnGa+pfaxPUtbplKnrDSbFs1cUjMt0lxyRQUkJBdyRUAEBER2zvn94Y8zkuYcWTxweN5vt25x3md7vd+e5Xmu63pfl8FkMpkQERERsSF21i5AREREpKYp4IiIiIjNUcARERERm6OAIyIiIjZHAUdERERsjgKOiIiI2BwHaxdQXampqVZ7bh8fHzIzM632/HVBQz8G2v+Gvf+gY6D91/5be/9btGhx1e1qwRERERGbo4AjIiIiNkcBR0RERGyOAo6IiIjYHAUcERERsTkKOCIiImJzFHBERETE5ijgiIiIiM1RwBERERGbo4AjIiIiNqfeL9UgItYxb948HB0dmTx5srVLERG5glpwRERExOYo4IiIiIjNUcARERERm6OAIyIiIjZHAUdERERsjgKOiIiI2BwFHBEREbE5CjgiIiJicxRwRERExOYo4IiIiIjNUcARERERm6OAIyIiIjZHAUdERERsjgKOiIiI2BwFHBEREbE5CjgiIiJicxRwRERExOYo4IiIiIjNUcARERERm6OAIyIiIjZHAUdERERsjgKOiIiI2BwFHBEREbE5CjgiIiJicxRwRERExObcsIATHx/P1KlTeeKJJ1i9evUf3i45OZkxY8awe/fuG1WaiIiI2JgbEnCMRiOLFi3i2Wef5Z133mHHjh2kpKRc9XZffvklPXr0uBFliYiIiI26IQEnOTkZPz8/fH19cXBwICwsjL17915xuw0bNtC7d2/c3d1vRFkiIiJioxxuxJNkZ2fj7e1tvuzt7c3Ro0evuE1MTAwvvPACH3zwwR8+1saNG9m4cSMAs2fPxsfHp3aKtoCDg4NVn78uaOjHoCHvv6OjIwaDocHuf4WG/BoA7b/2v+7u/w0JOCaT6YptBoOh0uVPP/2UsWPHYmd37UalyMhIIiMjzZczMzNrpsgq8PHxserz1wUN/Rg05P0vLS3F0dGxwe5/hYb8GgDtv/bf+vvfokWLq26/IQHH29ubrKws8+WsrCyaNm1a6Ta//fYb7733HgB5eXnExcVhZ2dHaGjojShRREREbMgNCTjt2rUjLS2NjIwMvLy82LlzJ08++WSl2/z73/+u9HevXr0UbkRq2TM/P1Pl+5bmlmJnZ1etx3jjz29U+b4iItdyQwKOvb09EyZMYNasWRiNRiIiIggICCA6OhqAqKioG1GGiIiINBA3JOAABAcHExwcXGnbHwWbxx577EaUJCIiIjbK4oCTkpLC7t27ycnJYdKkSZw5c4aysjJat25dm/WJiIiIXDeL5sHZtWsXL774ItnZ2fz8888AFBUV8dlnn9VqcSIiIiJVYVELztdff83MmTMJDAxk165dALRu3ZoTJ07UZm0iIiIiVWJRC05ubu4VXVEGg+GKuWxERERE6gKLAk7btm3Ztm1bpW07duygffv2tVKUiIiISHVY1EU1fvx4Xn31VX766SeKi4uZNWsWqampzJw5s7brExEREbluFgWcli1b8u6777J//3569eqFt7c3vXr1wtnZubbrExEREbluFgWc7OxsnJycCAsLM2/Lz88nOzsbLy+vWitOREREpCosGoPz5ptvkp2dXWlbdnY2b731Vq0UJSIiIlIdFgWc1NRUWrVqVWlbq1atOHPmTK0UJSIiIlIdFgUcd3d30tPTK21LT0+nSZMmtVKUiIiISHVYNAYnIiKCt99+m3vuuQdfX1/S09NZtmwZAwcOrO36RERERK6bRQFnxIgRODg48Pnnn5OVlYW3tzcDBw5k2LBhtV2fiIiIyHWzKODY2dlx5513cuedd9Z2PSIiIiLVZvFq4qmpqZw4cYKioqJK29VNJSIiInWNRQFn1apVrFy5ktatW9OoUaNK1yngiIiISF1jUcBZv349r7322hULboqIiIjURRadJu7k5ETLli1ruxYRERGRGmFRwBkzZgyffPIJ58+fx2g0VvpPREREpK6xqIvq/fffB2DTpk1XXLds2bKarUhERESkmiwKOPPnz6/tOkRERERqjEUBp1mzZrVdh4iIiEiNsXgenH379pGUlEReXl6l7Y8//niNFyUiIiJSHRYNMl6+fDkfffQRRqOR3bt34+bmxoEDB3Bxcant+kRERESum0UtOJs3b2bmzJm0atWKLVu28OCDDxIeHs7KlStruz4RERGR62ZRC87Fixdp1aoVAA4ODpSVldG+fXuSkpJqtTgRERGRqrCoBcfPz4/Tp08TEBBAQEAA0dHRuLm54ebmVtv1iYiIiFw3iwLOmDFjuHDhAgBjx47lvffeo6ioiIkTJ9ZqcSIiIiJVYVHACQ4ONv/dvn175s2bV2sFiYiIiFSXRWNwxo8ff9XtkyZNqtFiRERERGqCRS045eXlV2wrKyvTWlQiDZhjf0ecnZ0pKiqydikiIle4ZsB5/vnnMRgMlJaW8sILL1S6Lisri6CgoFotTkRERKQqrhlwBg4cCEBycjIRERHm7QaDAQ8PD7p27Vq71YmIiIhUwTUDzoABAzAajcTGxnLrrbfi6Oh4o+oSERERqbL/OcjYzs6OxMRE7O3tb0Q9IiIiItVm0VlU/fv358cff6ztWkRERERqhEVnUSUnJ/P999+zdu1avL29MRgM5uteeumlWitOREREpCosCjiDBg1i0KBBtV2LiIiISI2wKOAMGDCglssQERERqTkWBRyAzZs3s23bNrKzs/Hy8qJfv36VTh3/X+Lj41m8eDFGo5FBgwYxYsSIStfv3buXZcuWYTAYsLe358EHH6Rjx44WP76IiIhIBYsCzqpVq9i6dSt33HEHPj4+ZGZmsnbtWs6fP8/IkSP/5/2NRiOLFi1i5syZeHt7M2PGDEJCQvD39zff5k9/+hMhISEYDAZOnjzJO++8w7vvvlvlHRMREZGGy6KAs2nTJl588UWaNWtm3ta9e3deeOEFiwJOcnIyfn5++Pr6AhAWFsbevXsrBRxnZ2fz38XFxZUGMouIiIhcD4sCTnFxMe7u7pW2NWnShJKSEoueJDs7G29vb/Nlb29vjh49esXtYmJiWLJkCbm5ucyYMcOixxYRERH5PYsCTo8ePZg7dy5jx47Fx8eHc+fOsXTpUrp3727Rk5hMpiu2Xa2FJjQ0lNDQUJKSkli2bBnPPffcFbfZuHEjGzduBGD27Nn4+PhYVENtcHBwsOrz1wUN/RjU9/2/vOW0Kuzs7Kr1GPX52FWo76+B6tL+a//r6v5bFHAmTJjAJ598wtNPP01ZWRn29vaEhYUxfvx4i57E29ubrKws8+WsrCyaNm36h7fv3Lkz//73v8nLy7ui5SgyMpLIyEjz5czMTItqqA0V45EasoZ+DOr7/ld3JfDqriZen49dhfr+Gqgu7b/239r736JFi6tutyjguLi48PjjjzNlyhQuXLhAkyZNsLOzaBJkANq1a0daWhoZGRl4eXmxc+dOnnzyyUq3SU9Px9fXF4PBwLFjxygrK6NJkyYWP4eIiIhIBYtPE09LS2PXrl3m08T79u3LTTfdZNF97e3tmTBhArNmzcJoNBIREUFAQADR0dEAREVFsXv3brZt24a9vT1OTk489dRTGmgsIiIiVWJRwNm+fTsffvghwcHBNGvWjFOnTrF69WoefvhhwsPDLXqi4OBggoODK22Liooy/z1ixIgr5sYRERERqQqLAs5XX33FjBkz6Ny5s3nbr7/+yvz58y0OOCIiIiI3ikUDaQoLCwkKCqq07eabb672AEURERGR2mBRwBk2bBhLly41z3tTUlLCV199xbBhw2q1OBEREZGqsKiLKjo6mpycHNavX4+bmxv5+fkAeHp6mgcKA3zwwQe1U6WIiIjIdbAo4DzxxBO1XYeIiIhIjbEo4Fw+uFhERESkrrMo4JSXl7Njxw6OHz9+xcDiRx55pFYKExEREakqiwLOvHnzOHXqFD169MDDw6O2axIRERGpFosCTnx8PB988AGNGzeu7XpEREREqs2i08T9/f3NZ06JiIiI1HUWn0W1YMECunfvfkUXVf/+/WulMBEREZGqsijgbNmyhUOHDnHx4kWcnJzM2w0GgwKOiIiI1DkWBZz169czZ84c/P39a7seERERkWqzaAyOp6cnPj4+tV2LiIiISI2wqAVn6NChzJ07lxEjRlwxBsfX17dWChMRERGpKosCzqJFiwDYv3//FdctW7asZisSERERqSaLAo5CjIiIiFxu3rx5ODo6MnnyZGuXclUWjcERERERqU+u2YIzb948DAbDNR/g8ccfr9GCRERERKrrmgHHz8/vRtUhIiIiUmOuGXBGjRp1o+oQERERqTEagyMiIiI2RwFHREREbI4CjoiIiNgcBRwRERGxORZN9Adw4MABTpw4QVFRUaXtY8aMqfGiRERERKrD4qUadu3aRZcuXWjUqFFt1yQiIiJSLRYFnB07dvDGG29oRXERERGpFywag9OkSRNcXV1ruxYRERGRGmFRC86wYcOYO3cud911Fx4eHpWu8/X1rZXCRERERKrKooCzcOFCAGJjY6+4TiuNi4iISF1jUcBRiBEREZH6xOLTxAEyMzPJzs7Gy8tLA45FRESkzrIo4Jw/f553332XI0eO0KRJEy5cuEBQUBBTp07Fy8urtmsUERERuS4WBZyPP/6Y1q1bM2PGDJydnSkqKmLp0qV8/PHHTJs2rbZrFBERkVrwzM/PVPm+pbml2NnZVesxAN748xvVuv8fseg08cOHD3P//ffj7OwMgLOzM/fddx9HjhyplaJEREREqsOigOPq6kpKSkqlbampqbi4uNRKUSIiIiLVYVEX1Z133skrr7zCwIEDadasGefOnWPLli1ah0pERETqJIsCTmRkJH5+fmzfvp1Tp07RtGlTpk6dSteuXWu7PhEREZHrZvFp4l27dlWgERERkXrhDwPOqlWrGDlyJHDtif4s7aaKj49n8eLFGI1GBg0axIgRIypd//PPP7NmzRrg0iDmSZMmERgYaNFji4iIiFzuDwNOVlbWVf+uCqPRyKJFi5g5cybe3t7MmDGDkJAQ/P39zbdp3rw5L774Im5ubsTFxfHRRx/x2muvVet5RUREpGH6w4Dz0EMPmf+eMmVKtZ4kOTkZPz8/88KcYWFh7N27t1LA6dChg/nvm2++udqhSkRERBoui8bgjB8/nsWLF1+xfdKkSeaFOK8lOzsbb29v82Vvb2+OHj36h7f/6aef6Nmz51Wv27hxIxs3bgRg9uzZVl0ywsHBocEvWdHQj0F93/+Kua2qys7OrlqPUZ+PXYX6/hqoLu1//d7/6rx/y+3KwVD9z5HaOn4WBZzy8vIrtpWVlWE0Gi16EpPJdMU2g8Fw1dsmJiayefNmXn755ateHxkZSWRkpPlyZmamRTXUBh8fH6s+f13Q0I9Bfd//oqKiat2/YmbzqqrPx65CfX8NVJf2v37vf3Xev0ajETs7u2p/jlT3+LVo0eKq268ZcJ5//nkMBgOlpaW88MILla7LysoiKCjIoif39va+YkxP06ZNr7jdyZMn+fDDD5kxYwZNmjSx6LFFREREfu+aAWfgwIHApTE0ERER5u0GgwEPDw+LTxtv164daWlpZGRk4OXlxc6dO3nyyScr3SYzM5O33nqLxx9//A/TmIiIiIglrhlwBgwYAFwa9NuyZcsqP4m9vT0TJkxg1qxZGI1GIiIiCAgIIDo6GoCoqChWrFhBfn6+eUyPvb09s2fPrvJzioiISMNl0Ricli1bkpOTQ3JyMhcuXKg0pqailed/CQ4OJjg4uNK2qKgo89+TJ09m8uTJFj2WiIiIyLVYFHBiYmKYN28eN910E6dPnyYgIIDTp0/TsWNHiwOOiIiIyI1iUcBZtmwZU6ZMoW/fvowfP5433niDzZs3c/r06dquT0REROS62Vlyo8zMTPr27VtpW//+/dm2bVutFCUiIiJSHRa14Li7u5OTk4OnpyfNmjXjyJEjNGnSxOJ5cERERMS2OPZ3rPZcWLXJooAzaNAgDh06RJ8+fRg6dCgvvfQSBoOBYcOG1XZ9IiIiItfNooBz+crf/fv3p0uXLhQVFVVaS0pERESkrrBoDM4bb7xR6bKPjw/+/v689dZbtVKUiIiISHVYFHAOHjx4XdtFRERErOmaXVTLli0DLi2sWfF3hbNnz9KsWbPaq0xERESkiq4ZcCoWyDQajZUWy4RL3VSjR4+uvcpEREREquiaAWfKlCkABAUFERkZeUMKEhEREakui86i+tOf/sTZs2evep2vr2+NFiQiIiJSXRYFnCeffPIPr/v92BwRERERa7N4LarL5eTksHz5cjp16lQrRYmIiIhUh0Wnif+ep6cnDz74IEuWLKnpekRERESqrUoBByA1NZXi4uKarEVERESkRljURfX8889jMBjMl4uLizl9+jR33313rRUmIiIiUlUWBZyBAwdWuuzs7Ezr1q256aabaqUoERERkeqwKOAMGDCglssQERERqTkWBZzy8nJ27NjB8ePHKSoqqnTdI488UiuFiYiIiFSVRQFn3rx5nDp1ih49euDh4VHbNYmIiIhUi0UBJz4+ng8++IDGjRvXdj0iIiIi1WbRaeL+/v7k5+fXdi0iIiIiNcKiFpwnnniCBQsW0L179yu6qPr3718rhYmIiIhUlUUBZ8uWLRw6dIiLFy/i5ORk3m4wGBRwREREpM6xKOCsX7+eOXPm4O/vX9v1iIiIiFSbRWNwPD098fHxqe1aRERERGqERS04Q4cOZe7cuYwYMeKKMTi+vr61UpiIiIhIVVkUcBYtWgTA/v37r7hu2bJlNVuRiIiISDX9z4BjMpl47733aNasGfb29jeiJhGRemHevHk4OjoyefJka5ciIr/zP8fgGAwGnn766UqriYuIiIjUZRYNMg4MDCQtLa22axERERGpERaNwenSpQuvvfYa/fv3v+JsqoEDB9ZKYSIiIiJVZVHAOXz4MM2bN+fXX3+94joFHBEREalrLAo4L7zwQm3XISIi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/uzYsYMLFy7g5uZmE03WNclkMlFQUEBhYSE//vgjPXv25KabbjKfgllaWlpn12bKyMjgm2++oVevXvzlL38BYMWKFYwaNYq7776b3r17Y2dnV28++H6vSZMmDB06lIyMDNq0aUOXLl04deoUW7dupXv37gwcOJABAwbYZMsNXPqCP3nypHl8SdeuXYmLi+P++++ntLSUjRs3snXrVrKzs7nnnntsKtwAuLm5MW3aNL744gs6d+5sHkydn5+P0WikRYsWPPfcc7z55pvcdtttNGnSpMF8vvXs2ROTycScOXOYM2dOvXqPK+D8DxVf7FlZWfj4+NC7d2/c3d2Jjo4mISGBTp06mVcNttUPv8vn+tmxYwcGg4HBgwczYMAA7O3t+eyzz4iNjaWoqIhhw4bZzPTkNeHydVscHR1p3749U6dOZfny5Xz++eeMGzfOvDhlYWFhpdPp65LmzZvTrFkz4uPjsbOzM4ecL774gr/97W907NjRyhVWn7u7e6UfJ61ataJdu3bmAZa2+v4G6NixIzNmzODxxx9n/vz5pKamUlpaSklJCbfddhvdunXD0dGRkpIS/Pz8bHL8UXBwMAaDgenTp9O9e3dKSkro37+/eWZ6f39/3n777Xo/iLoqgoOD+eyzz+rdgGp1UVkgNjaWlStX0qlTJ1xcXBg2bBhHjhzh22+/paSkBE9PT/785z/Xy6Z5S8XGxvL111/zxBNPsGrVKvbt28czzzxDly5d2Lx5M7t376Zbt251bqpua7o8GK5duxYvLy9atWrFyJEjOXHiBB9++CFlZWW0bNmSgQMH0q1bN2uXfIVjx45x7tw5evfuDcC6des4c+YMffv2pVu3bnz33Xd06NDBZsdarV69mn79+tn8quAVYmNjeeedd2jZsiUvvfQSjRo1sskwcy0JCQnMmjWLjz76CA8PD/NSKaA5vOob2/1JUkMOHz7MkiVLmDp1KiUlJezZs4fPP/+c9u3b89e//pUmTZrQpUuXOvnlVJNSUlKYPHkyqampnD9/nlGjRvH666+TlJREREQEERER7N69m71791q71DrDYDDwyy+/sGzZMh577DECAwNZtmwZn332GYGBgUyePJk2bdrg7u5ufv3Upd8bJpOJ06dP8/333xMTEwNgDrBLlixh//79DB061CbDTcW/w4gRIxpMuIFLv9SnTZtGTk6O+de6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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax = plt.subplots(figsize=(8,5))\n", "\n", "importances[importances.columns[1:]].describe().loc['mean'].plot(kind='bar', \\\n", " yerr = importances[importances.columns[1:]].describe().loc['std'],\\\n", " alpha=0.6, color='g',ax=ax)\n", "\n", "plt.ylabel('Permutation Importance', fontsize=12)\n", "plt.tight_layout()\n", "\n", "tick_labels = ['GP capacity','111 capacity', 'Ambulance capacity',\\\n", " 'Population', '%>65','People', 'Places', 'Lives']\n", "\n", "ax.set_xticklabels(tick_labels, rotation=45)\n", "\n", "plt.savefig('importance.png', dpi=300)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "477b5315", "metadata": {}, "source": [ "## Train final model on all data and save for forecasting " ] }, { "cell_type": "code", "execution_count": 32, "id": "46d6a8aa", "metadata": {}, "outputs": [], "source": [ "def fit_final(dta, rf1, rf2, m1_features, m2_features):\n", " \n", " \n", " final = LinearRegression()\n", "\n", "\n", " #train capactiy model\n", " \n", " rf1 = fit_capacity(dta, m1_features, rf1)\n", " \n", "\n", " #predict monthly attendances\n", "\n", " y_pred_1 = rf1.predict(dta[m1_features])\n", "\n", " \n", " \n", " grouped = group_data(dta, m2_features)\n", " \n", " y = grouped['ae_attendances_attendances']\n", "\n", " X = grouped[m2_features]\n", "\n", " rf2.fit(X, y)\n", " \n", " y_pred_2 = rf2.predict(dta[m2_features])\n", " \n", " \n", " X_f = np.vstack([y_pred_1, y_pred_2]).T\n", " y_f = dta['ae_attendances_attendances']\n", "\n", " final.fit(X_f,y_f)\n", "\n", " print('Combined training score:',final.score(X_f,y_f))\n", " \n", " return rf1,rf2, final " ] }, { "cell_type": "code", "execution_count": 33, "id": "f8880c6b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Combined training score: 0.9181958242731308\n" ] } ], "source": [ "m1_features = capacity_features\n", "m2_features = pophealth_features\n", "\n", "rf1,rf2,final = fit_final(dta, rf1, rf2, m1_features, m2_features)" ] }, { "cell_type": "code", "execution_count": 34, "id": "e2619865", "metadata": {}, "outputs": [], "source": [ "with open('stacked_model_scaled.pkl','wb') as f:\n", " \n", " pkl.dump([[rf1,rf2,final], m1_features, m2_features], f)" ] }, { "cell_type": "code", "execution_count": null, "id": "76a1d11f", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12" } }, "nbformat": 4, "nbformat_minor": 5 }