Skip to content

Instantly share code, notes, and snippets.

@amirziai
Created March 5, 2017 03:14
Show Gist options
  • Save amirziai/9f2ba0296019e72cf60326169a6d1e79 to your computer and use it in GitHub Desktop.
Save amirziai/9f2ba0296019e72cf60326169a6d1e79 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 117,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 127,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Found this sample churn dataset online\n",
"data_url = 'http://www.dataminingconsultant.com/data/churn.txt'"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"df = pd.read_csv(data_url)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>State</th>\n",
" <th>Account Length</th>\n",
" <th>Area Code</th>\n",
" <th>Phone</th>\n",
" <th>Int'l Plan</th>\n",
" <th>VMail Plan</th>\n",
" <th>VMail Message</th>\n",
" <th>Day Mins</th>\n",
" <th>Day Calls</th>\n",
" <th>Day Charge</th>\n",
" <th>...</th>\n",
" <th>Eve Calls</th>\n",
" <th>Eve Charge</th>\n",
" <th>Night Mins</th>\n",
" <th>Night Calls</th>\n",
" <th>Night Charge</th>\n",
" <th>Intl Mins</th>\n",
" <th>Intl Calls</th>\n",
" <th>Intl Charge</th>\n",
" <th>CustServ Calls</th>\n",
" <th>Churn?</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>KS</td>\n",
" <td>128</td>\n",
" <td>415</td>\n",
" <td>382-4657</td>\n",
" <td>no</td>\n",
" <td>yes</td>\n",
" <td>25</td>\n",
" <td>265.1</td>\n",
" <td>110</td>\n",
" <td>45.07</td>\n",
" <td>...</td>\n",
" <td>99</td>\n",
" <td>16.78</td>\n",
" <td>244.7</td>\n",
" <td>91</td>\n",
" <td>11.01</td>\n",
" <td>10.0</td>\n",
" <td>3</td>\n",
" <td>2.70</td>\n",
" <td>1</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>OH</td>\n",
" <td>107</td>\n",
" <td>415</td>\n",
" <td>371-7191</td>\n",
" <td>no</td>\n",
" <td>yes</td>\n",
" <td>26</td>\n",
" <td>161.6</td>\n",
" <td>123</td>\n",
" <td>27.47</td>\n",
" <td>...</td>\n",
" <td>103</td>\n",
" <td>16.62</td>\n",
" <td>254.4</td>\n",
" <td>103</td>\n",
" <td>11.45</td>\n",
" <td>13.7</td>\n",
" <td>3</td>\n",
" <td>3.70</td>\n",
" <td>1</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>NJ</td>\n",
" <td>137</td>\n",
" <td>415</td>\n",
" <td>358-1921</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>243.4</td>\n",
" <td>114</td>\n",
" <td>41.38</td>\n",
" <td>...</td>\n",
" <td>110</td>\n",
" <td>10.30</td>\n",
" <td>162.6</td>\n",
" <td>104</td>\n",
" <td>7.32</td>\n",
" <td>12.2</td>\n",
" <td>5</td>\n",
" <td>3.29</td>\n",
" <td>0</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>OH</td>\n",
" <td>84</td>\n",
" <td>408</td>\n",
" <td>375-9999</td>\n",
" <td>yes</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>299.4</td>\n",
" <td>71</td>\n",
" <td>50.90</td>\n",
" <td>...</td>\n",
" <td>88</td>\n",
" <td>5.26</td>\n",
" <td>196.9</td>\n",
" <td>89</td>\n",
" <td>8.86</td>\n",
" <td>6.6</td>\n",
" <td>7</td>\n",
" <td>1.78</td>\n",
" <td>2</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>OK</td>\n",
" <td>75</td>\n",
" <td>415</td>\n",
" <td>330-6626</td>\n",
" <td>yes</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>166.7</td>\n",
" <td>113</td>\n",
" <td>28.34</td>\n",
" <td>...</td>\n",
" <td>122</td>\n",
" <td>12.61</td>\n",
" <td>186.9</td>\n",
" <td>121</td>\n",
" <td>8.41</td>\n",
" <td>10.1</td>\n",
" <td>3</td>\n",
" <td>2.73</td>\n",
" <td>3</td>\n",
" <td>False.</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 21 columns</p>\n",
"</div>"
],
"text/plain": [
" State Account Length Area Code Phone Int'l Plan VMail Plan \\\n",
"0 KS 128 415 382-4657 no yes \n",
"1 OH 107 415 371-7191 no yes \n",
"2 NJ 137 415 358-1921 no no \n",
"3 OH 84 408 375-9999 yes no \n",
"4 OK 75 415 330-6626 yes no \n",
"\n",
" VMail Message Day Mins Day Calls Day Charge ... Eve Calls \\\n",
"0 25 265.1 110 45.07 ... 99 \n",
"1 26 161.6 123 27.47 ... 103 \n",
"2 0 243.4 114 41.38 ... 110 \n",
"3 0 299.4 71 50.90 ... 88 \n",
"4 0 166.7 113 28.34 ... 122 \n",
"\n",
" Eve Charge Night Mins Night Calls Night Charge Intl Mins Intl Calls \\\n",
"0 16.78 244.7 91 11.01 10.0 3 \n",
"1 16.62 254.4 103 11.45 13.7 3 \n",
"2 10.30 162.6 104 7.32 12.2 5 \n",
"3 5.26 196.9 89 8.86 6.6 7 \n",
"4 12.61 186.9 121 8.41 10.1 3 \n",
"\n",
" Intl Charge CustServ Calls Churn? \n",
"0 2.70 1 False. \n",
"1 3.70 1 False. \n",
"2 3.29 0 False. \n",
"3 1.78 2 False. \n",
"4 2.73 3 False. \n",
"\n",
"[5 rows x 21 columns]"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3333, 21)"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.shape"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def process(df, ignore):\n",
" assert isinstance(ignore, list), \"Ignore should be a list of columns\"\n",
" assert isinstance(df, pd.core.frame.DataFrame), \"df should be a dataframe\"\n",
" \n",
" df_ = df.copy()\n",
" df_ = df_[df_.columns.difference(ignore)]\n",
" categorical_columns = [\n",
" col\n",
" for col, dtype in zip(df_.columns, df_.dtypes)\n",
" if dtype == 'O'\n",
" ]\n",
" # one-hot-encoding categoricals\n",
" return pd.get_dummies(df_, columns=categorical_columns)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Train a classifier targeting the \"Churn?\" column\n",
"target = 'Churn?'\n",
"y = df[target]\n",
"x = df[df.columns.difference([target])]\n",
"columns_to_ignore = ['Phone'] # High-cardinality data so taking it out\n",
"x = process(x, columns_to_ignore)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3333, 71)"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Have more columns now since categorical columns where one-hot-encoded\n",
"# https://www.quora.com/What-is-one-hot-encoding-and-when-is-it-used-in-data-science\n",
"x.shape"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Split the data into train and test\n",
"x_train, x_test, y_train, y_test = train_test_split(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(2499, 71)"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"x_train.shape"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
" min_impurity_split=1e-07, min_samples_leaf=1,\n",
" min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
" n_estimators=10, n_jobs=1, oob_score=False, random_state=None,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Train a classifier\n",
"# In real-life situations you want to tune your model\n",
"classifier = RandomForestClassifier()\n",
"classifier.fit(x_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.92446043165467628"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Accuracy\n",
"classifier.score(x_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"False. 0.855086\n",
"True. 0.144914\n",
"Name: Churn?, dtype: float64"
]
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Majority class has 85% prevalence\n",
"df[target].value_counts(normalize=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.metrics import roc_auc_score"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.93720467969104948"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# AUC score\n",
"scores_test = classifier.predict_proba(x_test)[:, 1]\n",
"roc_auc_score([True if y == 'True.' else False for y in y_test], scores_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Second stage"
]
},
{
"cell_type": "code",
"execution_count": 100,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Let's filter out the churned customers\n",
"df2 = df[df[target] == 'True.']"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(483, 21)"
]
},
"execution_count": 101,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.shape"
]
},
{
"cell_type": "code",
"execution_count": 102,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.14491449144914492"
]
},
"execution_count": 102,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Now we're dealing with a subset of the customers that churned\n",
"df2.shape[0] / df.shape[0]"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Let's say we want to further model whether the churned customer went to a competitor\n",
"# At this point we might know a few more things about the customer\n",
"# And this is a question of feature engineering (how do you extract and encode interesting features\n",
"# that might be predictive) https://www.wikiwand.com/en/Feature_engineering\n",
"# And this is a really important piece, if you have textual data you want to use NLP, if you have\n",
"# Categorical data you want to think about one-hot-encoding and hashing\n",
"# This is known as the \"black art\" of ML, read section 8 of\n",
"# https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf\n",
"\n",
"# Regarding the warning\n",
"# http://stackoverflow.com/questions/20625582/how-to-deal-with-settingwithcopywarning-in-pandas\n",
"\n",
"df2['DefectedToCompetitor'] = np.random.choice([True, False], len(df2), p=[.8, .2])\n",
"df2['ExitSurveyReasonForLeaving'] = np.random.choice(['Price', 'Service', 'Location'], len(df2), p=[.8, .15, .05])"
]
},
{
"cell_type": "code",
"execution_count": 115,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>State</th>\n",
" <th>Account Length</th>\n",
" <th>Area Code</th>\n",
" <th>Phone</th>\n",
" <th>Int'l Plan</th>\n",
" <th>VMail Plan</th>\n",
" <th>VMail Message</th>\n",
" <th>Day Mins</th>\n",
" <th>Day Calls</th>\n",
" <th>Day Charge</th>\n",
" <th>...</th>\n",
" <th>Night Mins</th>\n",
" <th>Night Calls</th>\n",
" <th>Night Charge</th>\n",
" <th>Intl Mins</th>\n",
" <th>Intl Calls</th>\n",
" <th>Intl Charge</th>\n",
" <th>CustServ Calls</th>\n",
" <th>Churn?</th>\n",
" <th>DefectedToCompetitor</th>\n",
" <th>ExitSurveyReasonForLeaving</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>IN</td>\n",
" <td>65</td>\n",
" <td>415</td>\n",
" <td>329-6603</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>129.1</td>\n",
" <td>137</td>\n",
" <td>21.95</td>\n",
" <td>...</td>\n",
" <td>208.8</td>\n",
" <td>111</td>\n",
" <td>9.40</td>\n",
" <td>12.7</td>\n",
" <td>6</td>\n",
" <td>3.43</td>\n",
" <td>4</td>\n",
" <td>True.</td>\n",
" <td>True</td>\n",
" <td>Price</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>NY</td>\n",
" <td>161</td>\n",
" <td>415</td>\n",
" <td>351-7269</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>332.9</td>\n",
" <td>67</td>\n",
" <td>56.59</td>\n",
" <td>...</td>\n",
" <td>160.6</td>\n",
" <td>128</td>\n",
" <td>7.23</td>\n",
" <td>5.4</td>\n",
" <td>9</td>\n",
" <td>1.46</td>\n",
" <td>4</td>\n",
" <td>True.</td>\n",
" <td>False</td>\n",
" <td>Service</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>CO</td>\n",
" <td>77</td>\n",
" <td>408</td>\n",
" <td>393-7984</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>62.4</td>\n",
" <td>89</td>\n",
" <td>10.61</td>\n",
" <td>...</td>\n",
" <td>209.6</td>\n",
" <td>64</td>\n",
" <td>9.43</td>\n",
" <td>5.7</td>\n",
" <td>6</td>\n",
" <td>1.54</td>\n",
" <td>5</td>\n",
" <td>True.</td>\n",
" <td>True</td>\n",
" <td>Price</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>AZ</td>\n",
" <td>12</td>\n",
" <td>408</td>\n",
" <td>360-1596</td>\n",
" <td>no</td>\n",
" <td>no</td>\n",
" <td>0</td>\n",
" <td>249.6</td>\n",
" <td>118</td>\n",
" <td>42.43</td>\n",
" <td>...</td>\n",
" <td>280.2</td>\n",
" <td>90</td>\n",
" <td>12.61</td>\n",
" <td>11.8</td>\n",
" <td>3</td>\n",
" <td>3.19</td>\n",
" <td>1</td>\n",
" <td>True.</td>\n",
" <td>True</td>\n",
" <td>Price</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>MD</td>\n",
" <td>135</td>\n",
" <td>408</td>\n",
" <td>383-6029</td>\n",
" <td>yes</td>\n",
" <td>yes</td>\n",
" <td>41</td>\n",
" <td>173.1</td>\n",
" <td>85</td>\n",
" <td>29.43</td>\n",
" <td>...</td>\n",
" <td>122.2</td>\n",
" <td>78</td>\n",
" <td>5.50</td>\n",
" <td>14.6</td>\n",
" <td>15</td>\n",
" <td>3.94</td>\n",
" <td>0</td>\n",
" <td>True.</td>\n",
" <td>True</td>\n",
" <td>Price</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 23 columns</p>\n",
"</div>"
],
"text/plain": [
" State Account Length Area Code Phone Int'l Plan VMail Plan \\\n",
"10 IN 65 415 329-6603 no no \n",
"15 NY 161 415 351-7269 no no \n",
"21 CO 77 408 393-7984 no no \n",
"33 AZ 12 408 360-1596 no no \n",
"41 MD 135 408 383-6029 yes yes \n",
"\n",
" VMail Message Day Mins Day Calls Day Charge \\\n",
"10 0 129.1 137 21.95 \n",
"15 0 332.9 67 56.59 \n",
"21 0 62.4 89 10.61 \n",
"33 0 249.6 118 42.43 \n",
"41 41 173.1 85 29.43 \n",
"\n",
" ... Night Mins Night Calls Night Charge \\\n",
"10 ... 208.8 111 9.40 \n",
"15 ... 160.6 128 7.23 \n",
"21 ... 209.6 64 9.43 \n",
"33 ... 280.2 90 12.61 \n",
"41 ... 122.2 78 5.50 \n",
"\n",
" Intl Mins Intl Calls Intl Charge CustServ Calls Churn? \\\n",
"10 12.7 6 3.43 4 True. \n",
"15 5.4 9 1.46 4 True. \n",
"21 5.7 6 1.54 5 True. \n",
"33 11.8 3 3.19 1 True. \n",
"41 14.6 15 3.94 0 True. \n",
"\n",
" DefectedToCompetitor ExitSurveyReasonForLeaving \n",
"10 True Price \n",
"15 False Service \n",
"21 True Price \n",
"33 True Price \n",
"41 True Price \n",
"\n",
"[5 rows x 23 columns]"
]
},
"execution_count": 115,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df2.head()"
]
},
{
"cell_type": "code",
"execution_count": 107,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"target = 'DefectedToCompetitor'\n",
"y = df2[target]\n",
"x = df2[df.columns.difference([target])]\n",
"columns_to_ignore = ['Churn?', 'Phone']\n",
"x = process(x, columns_to_ignore)"
]
},
{
"cell_type": "code",
"execution_count": 109,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x_train, x_test, y_train, y_test = train_test_split(x, y)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',\n",
" max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
" min_impurity_split=1e-07, min_samples_leaf=1,\n",
" min_samples_split=2, min_weight_fraction_leaf=0.0,\n",
" n_estimators=10, n_jobs=1, oob_score=False, random_state=None,\n",
" verbose=0, warm_start=False)"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"classifier2 = RandomForestClassifier()\n",
"classifier2.fit(x_train, y_train)"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.73553719008264462"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Accuracy\n",
"classifier2.score(x_test, y_test)"
]
},
{
"cell_type": "code",
"execution_count": 114,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.52104166666666663"
]
},
"execution_count": 114,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# This is slightly better than random chance\n",
"# Not surprising, since we randomly assigned the numbers\n",
"scores_test = classifier2.predict_proba(x_test)[:, 1]\n",
"roc_auc_score(y_test, scores_test)"
]
},
{
"cell_type": "code",
"execution_count": 120,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def importance(classifier, columns, threshold=.2):\n",
" feature_importance = {column_name: feature_importance for column_name, feature_importance in\n",
" zip(columns, classifier.feature_importances_) if feature_importance >= threshold}\n",
" pd.Series(feature_importance).sort_values(ascending=True).plot(kind='barh')\n",
" plt.title('Feature importance')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nOuPb/ptrj8oAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1155ebf28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"importance(classifier2, x_train.columns, 0.01)"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [default]",
"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.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment