{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# DecisionTreeDiscretiser\n",
"\n",
"The DecisionTreeDiscretiser() divides continuous numerical variables into discrete, finite, values estimated by a decision tree.\n",
"\n",
"The methods is inspired by the following article from the winners of the KDD 2009 competition:\n",
"http://www.mtome.com/Publications/CiML/CiML-v3-book.pdf\n",
"\n",
"**Note**\n",
"\n",
"For this demonstration, we use the Ames House Prices dataset produced by Professor Dean De Cock:\n",
"\n",
"Dean De Cock (2011) Ames, Iowa: Alternative to the Boston Housing\n",
"Data as an End of Semester Regression Project, Journal of Statistics Education, Vol.19, No. 3\n",
"\n",
"http://jse.amstat.org/v19n3/decock.pdf\n",
"\n",
"https://www.tandfonline.com/doi/abs/10.1080/10691898.2011.11889627\n",
"\n",
"The version of the dataset used in this notebook can be obtained from [Kaggle](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"from feature_engine.discretisation import DecisionTreeDiscretiser\n",
"\n",
"plt.rcParams[\"figure.figsize\"] = [15,5]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DecisionTreeDiscretiser with Regression"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Id
\n",
"
MSSubClass
\n",
"
MSZoning
\n",
"
LotFrontage
\n",
"
LotArea
\n",
"
Street
\n",
"
Alley
\n",
"
LotShape
\n",
"
LandContour
\n",
"
Utilities
\n",
"
...
\n",
"
PoolArea
\n",
"
PoolQC
\n",
"
Fence
\n",
"
MiscFeature
\n",
"
MiscVal
\n",
"
MoSold
\n",
"
YrSold
\n",
"
SaleType
\n",
"
SaleCondition
\n",
"
SalePrice
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
60
\n",
"
RL
\n",
"
65.0
\n",
"
8450
\n",
"
Pave
\n",
"
NaN
\n",
"
Reg
\n",
"
Lvl
\n",
"
AllPub
\n",
"
...
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0
\n",
"
2
\n",
"
2008
\n",
"
WD
\n",
"
Normal
\n",
"
208500
\n",
"
\n",
"
\n",
"
1
\n",
"
2
\n",
"
20
\n",
"
RL
\n",
"
80.0
\n",
"
9600
\n",
"
Pave
\n",
"
NaN
\n",
"
Reg
\n",
"
Lvl
\n",
"
AllPub
\n",
"
...
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0
\n",
"
5
\n",
"
2007
\n",
"
WD
\n",
"
Normal
\n",
"
181500
\n",
"
\n",
"
\n",
"
2
\n",
"
3
\n",
"
60
\n",
"
RL
\n",
"
68.0
\n",
"
11250
\n",
"
Pave
\n",
"
NaN
\n",
"
IR1
\n",
"
Lvl
\n",
"
AllPub
\n",
"
...
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0
\n",
"
9
\n",
"
2008
\n",
"
WD
\n",
"
Normal
\n",
"
223500
\n",
"
\n",
"
\n",
"
3
\n",
"
4
\n",
"
70
\n",
"
RL
\n",
"
60.0
\n",
"
9550
\n",
"
Pave
\n",
"
NaN
\n",
"
IR1
\n",
"
Lvl
\n",
"
AllPub
\n",
"
...
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0
\n",
"
2
\n",
"
2006
\n",
"
WD
\n",
"
Abnorml
\n",
"
140000
\n",
"
\n",
"
\n",
"
4
\n",
"
5
\n",
"
60
\n",
"
RL
\n",
"
84.0
\n",
"
14260
\n",
"
Pave
\n",
"
NaN
\n",
"
IR1
\n",
"
Lvl
\n",
"
AllPub
\n",
"
...
\n",
"
0
\n",
"
NaN
\n",
"
NaN
\n",
"
NaN
\n",
"
0
\n",
"
12
\n",
"
2008
\n",
"
WD
\n",
"
Normal
\n",
"
250000
\n",
"
\n",
" \n",
"
\n",
"
5 rows × 81 columns
\n",
"
"
],
"text/plain": [
" Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape \\\n",
"0 1 60 RL 65.0 8450 Pave NaN Reg \n",
"1 2 20 RL 80.0 9600 Pave NaN Reg \n",
"2 3 60 RL 68.0 11250 Pave NaN IR1 \n",
"3 4 70 RL 60.0 9550 Pave NaN IR1 \n",
"4 5 60 RL 84.0 14260 Pave NaN IR1 \n",
"\n",
" LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold \\\n",
"0 Lvl AllPub ... 0 NaN NaN NaN 0 2 \n",
"1 Lvl AllPub ... 0 NaN NaN NaN 0 5 \n",
"2 Lvl AllPub ... 0 NaN NaN NaN 0 9 \n",
"3 Lvl AllPub ... 0 NaN NaN NaN 0 2 \n",
"4 Lvl AllPub ... 0 NaN NaN NaN 0 12 \n",
"\n",
" YrSold SaleType SaleCondition SalePrice \n",
"0 2008 WD Normal 208500 \n",
"1 2007 WD Normal 181500 \n",
"2 2008 WD Normal 223500 \n",
"3 2006 WD Abnorml 140000 \n",
"4 2008 WD Normal 250000 \n",
"\n",
"[5 rows x 81 columns]"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = pd.read_csv('housing.csv')\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"X_train : (1022, 79)\n",
"X_test : (438, 79)\n"
]
}
],
"source": [
"# let's separate into training and testing set\n",
"X = data.drop([\"Id\", \"SalePrice\"], axis=1)\n",
"y = data.SalePrice\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.3, random_state=0)\n",
"\n",
"print(\"X_train :\", X_train.shape)\n",
"print(\"X_test :\", X_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# we will discretise two continuous variables\n",
"\n",
"X_train[[\"LotArea\", 'GrLivArea']].hist(bins=50)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The DecisionTreeDiscretiser() works only with numerical variables.\n",
"A list of variables can be passed as an argument. Alternatively, the\n",
"discretiser will automatically select and transform all numerical variables.\n",
"\n",
"The DecisionTreeDiscretiser() first trains a decision tree for each variable,\n",
"fit.\n",
"\n",
"The DecisionTreeDiscretiser() then transforms the variables, that is,\n",
"makes predictions based on the variable values, using the trained decision\n",
"tree, transform."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeDiscretiser(cv=3, param_grid={'max_depth': [1, 2, 3, 4]},\n",
" random_state=29, regression=True,\n",
" scoring='neg_mean_squared_error',\n",
" variables=['LotArea', 'GrLivArea'])"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'''\n",
"Parameters\n",
"----------\n",
"\n",
"cv : int, default=3\n",
" Desired number of cross-validation fold to be used to fit the decision\n",
" tree.\n",
"\n",
"scoring: str, default='neg_mean_squared_error'\n",
" Desired metric to optimise the performance for the tree. Comes from\n",
" sklearn metrics. See DecisionTreeRegressor or DecisionTreeClassifier\n",
" model evaluation documentation for more options:\n",
" https://scikit-learn.org/stable/modules/model_evaluation.html\n",
"\n",
"variables : list\n",
" The list of numerical variables that will be transformed. If None, the\n",
" discretiser will automatically select all numerical type variables.\n",
"\n",
"regression : boolean, default=True\n",
" Indicates whether the discretiser should train a regression or a classification\n",
" decision tree.\n",
"\n",
"param_grid : dictionary, default=None\n",
" The list of parameters over which the decision tree should be optimised\n",
" during the grid search. The param_grid can contain any of the permitted\n",
" parameters for Scikit-learn's DecisionTreeRegressor() or\n",
" DecisionTreeClassifier().\n",
"\n",
" If None, then param_grid = {'max_depth': [1, 2, 3, 4]}\n",
"\n",
"random_state : int, default=None\n",
" The random_state to initialise the training of the decision tree. It is one\n",
" of the parameters of the Scikit-learn's DecisionTreeRegressor() or\n",
" DecisionTreeClassifier(). For reproducibility it is recommended to set\n",
" the random_state to an integer.\n",
"'''\n",
"\n",
"treeDisc = DecisionTreeDiscretiser(cv=3,\n",
" scoring='neg_mean_squared_error',\n",
" variables=['LotArea', 'GrLivArea'],\n",
" regression=True,\n",
" random_state=29)\n",
"\n",
"# the DecisionTreeDiscretiser needs the target for fitting\n",
"treeDisc.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'LotArea': GridSearchCV(cv=3, error_score=nan,\n",
" estimator=DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse',\n",
" max_depth=None, max_features=None,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0,\n",
" min_impurity_split=None,\n",
" min_samples_leaf=1,\n",
" min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0,\n",
" presort='deprecated',\n",
" random_state=29, splitter='best'),\n",
" iid='deprecated', n_jobs=None,\n",
" param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
" refit=True, return_train_score=False,\n",
" scoring='neg_mean_squared_error', verbose=0),\n",
" 'GrLivArea': GridSearchCV(cv=3, error_score=nan,\n",
" estimator=DecisionTreeRegressor(ccp_alpha=0.0, criterion='mse',\n",
" max_depth=None, max_features=None,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0,\n",
" min_impurity_split=None,\n",
" min_samples_leaf=1,\n",
" min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0,\n",
" presort='deprecated',\n",
" random_state=29, splitter='best'),\n",
" iid='deprecated', n_jobs=None,\n",
" param_grid={'max_depth': [1, 2, 3, 4]}, pre_dispatch='2*n_jobs',\n",
" refit=True, return_train_score=False,\n",
" scoring='neg_mean_squared_error', verbose=0)}"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the binner_dict_ contains the best decision tree for each variable\n",
"treeDisc.binner_dict_"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"train_t = treeDisc.transform(X_train)\n",
"test_t = treeDisc.transform(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([246372.77165354, 149540.32663317, 122286.38839286, 88631.59375 ,\n",
" 165174.20895522, 198837.68608414, 312260.5 , 509937.5 ])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the below account for the best obtained bins, aka, the tree predictions\n",
"\n",
"train_t['GrLivArea'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([181711.59622642, 145405.30751708, 213802.86363636, 251997.13333333])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the below account for the best obtained bins, aka, the tree predictions\n",
"\n",
"train_t['LotArea'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
LotArea
\n",
"
GrLivArea
\n",
"
LotArea_binned
\n",
"
GrLivArea_binned
\n",
"
\n",
" \n",
" \n",
"
\n",
"
64
\n",
"
9375
\n",
"
2034
\n",
"
181711.596226
\n",
"
246372.771654
\n",
"
\n",
"
\n",
"
682
\n",
"
2887
\n",
"
1291
\n",
"
145405.307517
\n",
"
149540.326633
\n",
"
\n",
"
\n",
"
960
\n",
"
7207
\n",
"
858
\n",
"
145405.307517
\n",
"
122286.388393
\n",
"
\n",
"
\n",
"
1384
\n",
"
9060
\n",
"
1258
\n",
"
181711.596226
\n",
"
149540.326633
\n",
"
\n",
"
\n",
"
1100
\n",
"
8400
\n",
"
438
\n",
"
145405.307517
\n",
"
88631.593750
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" LotArea GrLivArea LotArea_binned GrLivArea_binned\n",
"64 9375 2034 181711.596226 246372.771654\n",
"682 2887 1291 145405.307517 149540.326633\n",
"960 7207 858 145405.307517 122286.388393\n",
"1384 9060 1258 181711.596226 149540.326633\n",
"1100 8400 438 145405.307517 88631.593750"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# here I put side by side the original variable and the transformed variable\n",
"\n",
"tmp = pd.concat([X_train[[\"LotArea\", 'GrLivArea']],\n",
" train_t[[\"LotArea\", 'GrLivArea']]], axis=1)\n",
"\n",
"tmp.columns = [\"LotArea\", 'GrLivArea', \"LotArea_binned\", 'GrLivArea_binned']\n",
"\n",
"tmp.head()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# in equal frequency discretisation, we obtain the same amount of observations\n",
"# in each one of the bins.\n",
"\n",
"plt.subplot(1,2,1)\n",
"tmp.groupby('GrLivArea_binned')['GrLivArea'].count().plot.bar()\n",
"plt.ylabel('Number of houses')\n",
"plt.title('Number of houses per discrete value')\n",
"\n",
"plt.subplot(1,2,2)\n",
"tmp.groupby('LotArea_binned')['LotArea'].count().plot.bar()\n",
"plt.ylabel('Number of houses')\n",
"plt.ylabel('Number of houses')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DecisionTreeDiscretiser with binary classification"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# Load titanic dataset from OpenML\n",
"\n",
"def load_titanic():\n",
" data = pd.read_csv('https://www.openml.org/data/get_csv/16826755/phpMYEkMl')\n",
" data = data.replace('?', np.nan)\n",
" data['cabin'] = data['cabin'].astype(str).str[0]\n",
" data['pclass'] = data['pclass'].astype('O')\n",
" data['embarked'].fillna('C', inplace=True)\n",
" data['fare'] = data['fare'].astype('float').fillna(0)\n",
" data['age'] = data['age'].astype('float').fillna(0)\n",
" data.drop(['name', 'ticket', 'boat', 'home.dest'], axis=1, inplace=True)\n",
" return data"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
pclass
\n",
"
survived
\n",
"
sex
\n",
"
age
\n",
"
sibsp
\n",
"
parch
\n",
"
fare
\n",
"
cabin
\n",
"
embarked
\n",
"
body
\n",
"
\n",
" \n",
" \n",
"
\n",
"
0
\n",
"
1
\n",
"
1
\n",
"
female
\n",
"
29.0000
\n",
"
0
\n",
"
0
\n",
"
211.3375
\n",
"
B
\n",
"
S
\n",
"
NaN
\n",
"
\n",
"
\n",
"
1
\n",
"
1
\n",
"
1
\n",
"
male
\n",
"
0.9167
\n",
"
1
\n",
"
2
\n",
"
151.5500
\n",
"
C
\n",
"
S
\n",
"
NaN
\n",
"
\n",
"
\n",
"
2
\n",
"
1
\n",
"
0
\n",
"
female
\n",
"
2.0000
\n",
"
1
\n",
"
2
\n",
"
151.5500
\n",
"
C
\n",
"
S
\n",
"
NaN
\n",
"
\n",
"
\n",
"
3
\n",
"
1
\n",
"
0
\n",
"
male
\n",
"
30.0000
\n",
"
1
\n",
"
2
\n",
"
151.5500
\n",
"
C
\n",
"
S
\n",
"
135
\n",
"
\n",
"
\n",
"
4
\n",
"
1
\n",
"
0
\n",
"
female
\n",
"
25.0000
\n",
"
1
\n",
"
2
\n",
"
151.5500
\n",
"
C
\n",
"
S
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" pclass survived sex age sibsp parch fare cabin embarked \\\n",
"0 1 1 female 29.0000 0 0 211.3375 B S \n",
"1 1 1 male 0.9167 1 2 151.5500 C S \n",
"2 1 0 female 2.0000 1 2 151.5500 C S \n",
"3 1 0 male 30.0000 1 2 151.5500 C S \n",
"4 1 0 female 25.0000 1 2 151.5500 C S \n",
"\n",
" body \n",
"0 NaN \n",
"1 NaN \n",
"2 NaN \n",
"3 135 \n",
"4 NaN "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# load data\n",
"data = load_titanic()\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(916, 9)\n",
"(393, 9)\n"
]
}
],
"source": [
"# let's separate into training and testing set\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(data.drop(['survived'], axis=1),\n",
" data['survived'],\n",
" test_size=0.3, \n",
" random_state=0)\n",
"\n",
"print(X_train.shape)\n",
"print(X_test.shape)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"fare float64\n",
"age float64\n",
"dtype: object"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"#this discretiser transforms the numerical variables\n",
"X_train[['fare', 'age']].dtypes"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"DecisionTreeDiscretiser(cv=3, param_grid={'max_depth': [1, 2]}, random_state=29,\n",
" regression=False, scoring='roc_auc',\n",
" variables=['fare', 'age'])"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"treeDisc = DecisionTreeDiscretiser(cv=3,\n",
" scoring='roc_auc',\n",
" variables=['fare', 'age'],\n",
" regression=False,\n",
" param_grid={'max_depth': [1, 2]},\n",
" random_state=29,\n",
" )\n",
"\n",
"treeDisc.fit(X_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'fare': GridSearchCV(cv=3, error_score=nan,\n",
" estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
" criterion='gini', max_depth=None,\n",
" max_features=None,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0,\n",
" min_impurity_split=None,\n",
" min_samples_leaf=1,\n",
" min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0,\n",
" presort='deprecated',\n",
" random_state=29,\n",
" splitter='best'),\n",
" iid='deprecated', n_jobs=None, param_grid={'max_depth': [1, 2]},\n",
" pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
" scoring='roc_auc', verbose=0),\n",
" 'age': GridSearchCV(cv=3, error_score=nan,\n",
" estimator=DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None,\n",
" criterion='gini', max_depth=None,\n",
" max_features=None,\n",
" max_leaf_nodes=None,\n",
" min_impurity_decrease=0.0,\n",
" min_impurity_split=None,\n",
" min_samples_leaf=1,\n",
" min_samples_split=2,\n",
" min_weight_fraction_leaf=0.0,\n",
" presort='deprecated',\n",
" random_state=29,\n",
" splitter='best'),\n",
" iid='deprecated', n_jobs=None, param_grid={'max_depth': [1, 2]},\n",
" pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
" scoring='roc_auc', verbose=0)}"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"treeDisc.binner_dict_"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"train_t = treeDisc.transform(X_train)\n",
"test_t = treeDisc.transform(X_test)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.41295547, 0.26857143])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the below account for the best obtained bins\n",
"# in this case, the tree has found that dividing the data in 6 bins is enough\n",
"train_t['age'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.42379182, 0.26778243, 0.52307692, 0.74038462])"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the below account for the best obtained bins\n",
"# in this case, the tree has found that dividing the data in 8 bins is enough\n",
"train_t['fare'].unique()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
fare
\n",
"
age
\n",
"
fare_binned
\n",
"
age_binned
\n",
"
\n",
" \n",
" \n",
"
\n",
"
501
\n",
"
19.5000
\n",
"
13.0
\n",
"
0.423792
\n",
"
0.412955
\n",
"
\n",
"
\n",
"
588
\n",
"
23.0000
\n",
"
4.0
\n",
"
0.423792
\n",
"
0.412955
\n",
"
\n",
"
\n",
"
402
\n",
"
13.8583
\n",
"
30.0
\n",
"
0.267782
\n",
"
0.412955
\n",
"
\n",
"
\n",
"
1193
\n",
"
7.7250
\n",
"
0.0
\n",
"
0.267782
\n",
"
0.268571
\n",
"
\n",
"
\n",
"
686
\n",
"
7.7250
\n",
"
22.0
\n",
"
0.267782
\n",
"
0.412955
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" fare age fare_binned age_binned\n",
"501 19.5000 13.0 0.423792 0.412955\n",
"588 23.0000 4.0 0.423792 0.412955\n",
"402 13.8583 30.0 0.267782 0.412955\n",
"1193 7.7250 0.0 0.267782 0.268571\n",
"686 7.7250 22.0 0.267782 0.412955"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# here I put side by side the original variable and the transformed variable\n",
"\n",
"tmp = pd.concat([X_train[[\"fare\", 'age']], train_t[[\"fare\", 'age']]], axis=1)\n",
"\n",
"tmp.columns = [\"fare\", 'age', \"fare_binned\", 'age_binned']\n",
"\n",
"tmp.head()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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N2xDvX5ERMRLJmlbqs7TFrafkHQJcDOw7jA/Mq5+7pN/5VssShs537aH2D9khrSRMRZlGGfEyFkWuK/e3vNFnncusG/PvLqNF/K6b5e0gqQlgV2BKxc16ItkuIxqyCiS1qcaHhMREfG/tSzwaN3RW4dq6OZSwDaSlpc0nmqo5IDzgH0GHkjaaCGvv4ukJSStCGwLzByBzMNl6G0jdwCWH4H3iuirdPYiRs5hwDclXQks9iLPm0o1xHNOPYF86kJe9wrg51TDUk6zPXgI5//GcBl+AEyoh2/+CzBjBN4rIiK6azowvm5XpgJXUX0xegjwO+AC4Ebgsfr5+wGT6kJhNwKfWMjrzwDOql93al2Jc1ENl+FrwNaSZlNNh7h7BN4roq+04O51RERERET/SZpge159Z+9XwE9s/6p0roi2yZ29iIiIiGjawXVBsRuAO4AzCueJaKXc2YsYBSRtB3xr0O47bO821PMjIiK6QtJewKcH7b7S9j+XyBMxlqSzFxERERER0UIZxhkREREREdFC6exFRERERES0UDp7ERERERERLZTOXkRERERERAulsxcREREREdFC/x/oDiRbYhSXkgAAAABJRU5ErkJggg==\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.subplot(1,2,1)\n",
"tmp.groupby('fare_binned')['fare'].count().plot.bar()\n",
"plt.ylabel('Number of houses')\n",
"plt.title('Number of houses per discrete value')\n",
"\n",
"plt.subplot(1,2,2)\n",
"tmp.groupby('age_binned')['age'].count().plot.bar()\n",
"plt.ylabel('Number of houses')\n",
"plt.title('Number of houses per discrete value')\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# The DecisionTreeDiscretiser() returns values which show\n",
"# a monotonic relationship with target\n",
"\n",
"pd.concat([test_t, y_test], axis=1).groupby(\n",
" 'age')['survived'].mean().plot(figsize=(6, 4))\n",
"\n",
"plt.ylabel(\"Mean of target\")\n",
"plt.title(\"Relationship between fare and target\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# The DecisionTreeDiscretiser() returns values which show\n",
"# a monotonic relationship with target\n",
"\n",
"pd.concat([test_t, y_test], axis=1).groupby(\n",
" 'fare')['survived'].mean().plot(figsize=(6, 4))\n",
"\n",
"plt.ylabel(\"Mean of target\")\n",
"plt.title(\"Relationship between fare and target\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## DecisionTreeDiscretiser for Multi-class classification"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"