master bc6fe108b6be cached
13 files
38.1 MB
1.1M tokens
2 symbols
1 requests
Download .txt
Showing preview only (1,989K chars total). Download the full file or copy to clipboard to get everything.
Repository: archd3sai/Customer-Survival-Analysis-and-Churn-Prediction
Branch: master
Commit: bc6fe108b6be
Files: 13
Total size: 38.1 MB

Directory structure:
gitextract_o9jxgrhd/

├── Churn Prediction Model.ipynb
├── Customers Survival Analysis.ipynb
├── Exploratory Data Analysis.ipynb
├── Images/
│   └── README.md
├── LICENSE.md
├── Procfile
├── README.md
├── app.py
├── explainer.bz2
├── model.pkl
├── requirements.txt
├── survivemodel.pkl
└── templates/
    └── index.html

================================================
FILE CONTENTS
================================================

================================================
FILE: Churn Prediction Model.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Customer Churn Prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set_style('darkgrid')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Data Preparation based on EDA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def datapreparation(filepath):\n",
    "    \n",
    "    df = pd.read_csv(filepath)\n",
    "    df.drop([\"customerID\"], inplace = True, axis = 1)\n",
    "    \n",
    "    df.TotalCharges = df.TotalCharges.replace(\" \",np.nan)\n",
    "    df.TotalCharges.fillna(0, inplace = True)\n",
    "    df.TotalCharges = df.TotalCharges.astype(float)\n",
    "    \n",
    "    cols1 = ['Partner', 'Dependents', 'PaperlessBilling', 'Churn', 'PhoneService']\n",
    "    for col in cols1:\n",
    "        df[col] = df[col].apply(lambda x: 0 if x == \"No\" else 1)\n",
    "   \n",
    "    df.gender = df.gender.apply(lambda x: 0 if x == \"Male\" else 1)\n",
    "    df.MultipleLines = df.MultipleLines.map({'No phone service': 0, 'No': 0, 'Yes': 1})\n",
    "    \n",
    "    cols2 = ['OnlineSecurity', 'OnlineBackup', 'DeviceProtection', 'TechSupport', 'StreamingTV', 'StreamingMovies']\n",
    "    for col in cols2:\n",
    "        df[col] = df[col].map({'No internet service': 0, 'No': 0, 'Yes': 1})\n",
    "    \n",
    "    df = pd.get_dummies(df, columns=['InternetService', 'Contract', 'PaymentMethod'], drop_first=True)\n",
    "    \n",
    "    return df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>gender</th>\n",
       "      <th>SeniorCitizen</th>\n",
       "      <th>Partner</th>\n",
       "      <th>Dependents</th>\n",
       "      <th>tenure</th>\n",
       "      <th>PhoneService</th>\n",
       "      <th>MultipleLines</th>\n",
       "      <th>OnlineSecurity</th>\n",
       "      <th>OnlineBackup</th>\n",
       "      <th>DeviceProtection</th>\n",
       "      <th>...</th>\n",
       "      <th>MonthlyCharges</th>\n",
       "      <th>TotalCharges</th>\n",
       "      <th>Churn</th>\n",
       "      <th>InternetService_Fiber optic</th>\n",
       "      <th>InternetService_No</th>\n",
       "      <th>Contract_One year</th>\n",
       "      <th>Contract_Two year</th>\n",
       "      <th>PaymentMethod_Credit card (automatic)</th>\n",
       "      <th>PaymentMethod_Electronic check</th>\n",
       "      <th>PaymentMethod_Mailed check</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>29.85</td>\n",
       "      <td>29.85</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>34</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>56.95</td>\n",
       "      <td>1889.50</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>53.85</td>\n",
       "      <td>108.15</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>45</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>42.30</td>\n",
       "      <td>1840.75</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>70.70</td>\n",
       "      <td>151.65</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   gender  SeniorCitizen  Partner  Dependents  tenure  PhoneService  \\\n",
       "0       1              0        1           0       1             0   \n",
       "1       0              0        0           0      34             1   \n",
       "2       0              0        0           0       2             1   \n",
       "3       0              0        0           0      45             0   \n",
       "4       1              0        0           0       2             1   \n",
       "\n",
       "   MultipleLines  OnlineSecurity  OnlineBackup  DeviceProtection  ...  \\\n",
       "0              0               0             1                 0  ...   \n",
       "1              0               1             0                 1  ...   \n",
       "2              0               1             1                 0  ...   \n",
       "3              0               1             0                 1  ...   \n",
       "4              0               0             0                 0  ...   \n",
       "\n",
       "   MonthlyCharges  TotalCharges  Churn  InternetService_Fiber optic  \\\n",
       "0           29.85         29.85      0                            0   \n",
       "1           56.95       1889.50      0                            0   \n",
       "2           53.85        108.15      1                            0   \n",
       "3           42.30       1840.75      0                            0   \n",
       "4           70.70        151.65      1                            1   \n",
       "\n",
       "   InternetService_No  Contract_One year  Contract_Two year  \\\n",
       "0                   0                  0                  0   \n",
       "1                   0                  1                  0   \n",
       "2                   0                  0                  0   \n",
       "3                   0                  1                  0   \n",
       "4                   0                  0                  0   \n",
       "\n",
       "   PaymentMethod_Credit card (automatic)  PaymentMethod_Electronic check  \\\n",
       "0                                      0                               1   \n",
       "1                                      0                               0   \n",
       "2                                      0                               0   \n",
       "3                                      0                               0   \n",
       "4                                      0                               1   \n",
       "\n",
       "   PaymentMethod_Mailed check  \n",
       "0                           0  \n",
       "1                           1  \n",
       "2                           1  \n",
       "3                           0  \n",
       "4                           0  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = datapreparation(filepath = \"C:/Data/Telco-Customer-Churn.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.isnull().any().any()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Building"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I am going to build and tune random forest model because in this case tree based method would perform better. I am also interested in individual customer's churning probability and in understanding how the model calculates it using Shap values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score\n",
    "from sklearn.metrics import confusion_matrix, accuracy_score, classification_report\n",
    "from sklearn.metrics import roc_auc_score, roc_curve, precision_score, recall_score, f1_score\n",
    "from imblearn.over_sampling import SMOTE\n",
    "from sklearn.ensemble import RandomForestClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "train, test = train_test_split(df, test_size=0.2, random_state=111, stratify = df.Churn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = df.columns[df.columns!=\"Churn\"]\n",
    "y = \"Churn\"\n",
    "train_x = train[x]\n",
    "train_y = train[y]\n",
    "test_x = test[x]\n",
    "test_y = test[y]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "#function for model fitting\n",
    "def churn_prediction(algo, training_x, training_y, testing_x, testing_y, cols, cf = 'coefficients'):\n",
    "    algo.fit(training_x,training_y)\n",
    "    predictions = algo.predict(testing_x)\n",
    "    probabilities = algo.predict_proba(testing_x)[:,1]\n",
    "    \n",
    "    #coeffs\n",
    "    if cf == \"coefficients\":\n",
    "        coefficients = pd.DataFrame(algo.coef_.ravel())\n",
    "    elif cf == \"features\":\n",
    "        coefficients = pd.DataFrame(algo.feature_importances_)\n",
    "        \n",
    "    column_df = pd.DataFrame(cols)\n",
    "    coef_sumry = (pd.merge(coefficients,column_df,left_index= True,\n",
    "                              right_index= True, how = \"left\"))\n",
    "    coef_sumry.columns = [\"coefficients\",\"features\"]\n",
    "    coef_sumry = coef_sumry.sort_values(by = \"coefficients\",ascending = False)\n",
    "    \n",
    "    print (algo)\n",
    "    print (\"\\n Classification report : \\n\",classification_report(testing_y,predictions))\n",
    "    print (\"Accuracy   Score : \",accuracy_score(testing_y,predictions))\n",
    "    \n",
    "    #confusion matrix\n",
    "    conf_matrix = confusion_matrix(testing_y,predictions)\n",
    "    plt.figure(figsize=(12,12))\n",
    "    plt.subplot(221)\n",
    "    sns.heatmap(conf_matrix, fmt = \"d\",annot=True, cmap='Blues')\n",
    "    plt.title('Confuion Matrix')\n",
    "    plt.ylabel('True Values')\n",
    "    plt.xlabel('Predicted Values')\n",
    "    \n",
    "    #roc_auc_score\n",
    "    model_roc_auc = roc_auc_score(testing_y,probabilities) \n",
    "    print (\"Area under curve : \",model_roc_auc,\"\\n\")\n",
    "    fpr,tpr,thresholds = roc_curve(testing_y,probabilities)\n",
    "    \n",
    "    plt.subplot(222)\n",
    "    plt.plot(fpr, tpr, color='darkorange', lw=1, label = \"Auc : %.3f\" %model_roc_auc)\n",
    "    plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')\n",
    "    plt.xlim([0.0, 1.0])\n",
    "    plt.ylim([0.0, 1.05])\n",
    "    plt.xlabel('False Positive Rate')\n",
    "    plt.ylabel('True Positive Rate')\n",
    "    plt.title('Receiver operating characteristic')\n",
    "    plt.legend(loc=\"lower right\")\n",
    "    \n",
    "    plt.subplot(212)\n",
    "    sns.barplot(x = coef_sumry[\"features\"] ,y = coef_sumry[\"coefficients\"])\n",
    "    plt.title('Feature Importances')\n",
    "    plt.xticks(rotation=\"vertical\")\n",
    "    \n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hyperparameters Tuning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Grid 1: Selecting class weight and estimators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 24 candidates, totalling 72 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  34 tasks      | elapsed:   28.9s\n",
      "[Parallel(n_jobs=-1)]: Done  72 out of  72 | elapsed:  1.4min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score=nan,\n",
       "             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
       "                                              class_weight=None,\n",
       "                                              criterion='gini', max_depth=None,\n",
       "                                              max_features='auto',\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              max_samples=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",
       "                                              n_estimators=100, n_jobs=None,\n",
       "                                              oob_score=False,\n",
       "                                              random_state=None, verbose=0,\n",
       "                                              warm_start=False),\n",
       "             iid='deprecated', n_jobs=-1,\n",
       "             param_grid={'max_features': ['auto', 'sqrt', 'log2', None],\n",
       "                         'n_estimators': [300, 500, 700, 900, 1100, 1300]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='f1', verbose=1)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_grid1 = {'max_features':['auto', 'sqrt', 'log2', None],\n",
    "          'n_estimators':[300, 500, 700, 900, 1100, 1300]\n",
    "         }\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "grid1 = GridSearchCV(estimator=rf_model, param_grid=param_grid1, n_jobs=-1, cv=3, verbose=1, scoring = 'f1')\n",
    "grid1.fit(train_x, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
       "                       criterion='gini', max_depth=None, max_features='auto',\n",
       "                       max_leaf_nodes=None, max_samples=None,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=2,\n",
       "                       min_weight_fraction_leaf=0.0, n_estimators=1100,\n",
       "                       n_jobs=None, oob_score=False, random_state=None,\n",
       "                       verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid1.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24e31749898>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEICAYAAABCnX+uAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XmYXFW57/FvZ4AIJIjgFTkeBRV+4FXwIChDmIcI6AVBuaLeCIIBQWQQZTogoiAicC4goE2YBwU9JxhUiGK4yBSmCASQF8JwxAGQAAlz0t11/1i7pexUd+9O1e7aVfX78NST7r137bW66eft1e9e611dlUoFMzNrXWOa3QEzM6uPA7mZWYtzIDcza3EO5GZmLc6B3MysxTmQm5m1OAdyM7MW50BuZtbiHMjNzFrcuGZ3YKAvr/kZLzXNnHv395vdhdJYctUZze5CaTx/6UPN7kJpvOuO2V313mPJc4/njjnjV3tv3e0VwSNyM7MWV7oRuZnZqOrrbXYP6uZAbmadrben2T2omwO5mXW0SqWv2V2omwO5mXW2PgdyM7PW1qARuaQxwLnABsAbwH4RMb/q/FnA5sBL2aFdgR7gPGAtYDng4Ii4U9LGwBlAF/A08IWIeH2wtj1rxcw6W19v/tfQdgMmRMSmwFHA6QPObwhMiYits9dC4BvAAxGxBfBlQJK6gPOBfSJiMnA98J6hGnYgN7POVunL/xpaf9AlIuYAG/WfyEbrawPdkm6V9KXs1BRgsaRZwHHALGAdYAFwqKSbgLdFRAzVsAO5mXW0Sm9P7pekaZLurnpNq7rVJGBh1ee9kvrT1ysCZwNfAD4OHChpfWA1YJWImAJcC5yWHduMlKbZHthO0nZDfQ3OkZtZZxvBw86I6Aa6Bzm9CJhY9fmYiOif2/gqcGZEvAogaTYpl74AmJldcy0pJXMyMD8iHsquvR74CPC7wfrlEbmZdbbGpVZuBXYGkLQJMK/q3DrALZLGShpPSsPMBW7pfw+wJfAg8DiwkqT3Z8e3yI4PyiNyM+tsjVvZOQPYQdJtpNkm+0g6nDS6ninpCmAOsAS4NCIelHQyMF3S7dnxqRGxWNK+wJXZg8/bIuJXQzXsQG5mna1B0w8jog84YMDhh6vOnwqcOuA9zwO717jXbOCjedt2IDezzuYl+mZmLc4rO83MWlul4uqHZmatzUWzzMxanFMrS5M0gfTkdjtgZeBF4GbghxHxWqPbMzOri0fkNV0E3AscS6ryNRHYCbgS+FQB7ZmZLbveJc3uQd2KCORrRMReA47dL+nmAtoyM6uPUys1vS5pKqkK2ELSiHwX4OUC2jIzq49TKzV9DjgeOIQUxBeRahB8sYC2zMzq4xH50iJigaQjSJW9VgZeIBVOX9zotszM6uZAvjRJuwDfAx4lPeycBKwr6ZiIuKbR7ZmZ1aPih501HQtMjohF/QckrQzcADiQm1m5OEde03hSEfVqrwGVAtoyM6uPUys1dQNzJd1CmrUyiVRE/awC2jIzq49H5EuLiPMlzSTV0p1EmrVyYkQ80+i2zMzq5hF5bVnQvraIe5uZNZRH5EsbsKv0P8k2LjUzK48ebyxRy7rAJ4HLSPvW9fPDTjMrH4/IlxYRh0taF7guIu5q9P3NzBrKOfJBTQVWKujeZmaN4xF5bRHxHPBcEfc2M2soj8iXJulGYPkBh7uASkRsNtz7b3rliUZ3qWX1xu3N7kJpLJnzx2Z3oTS+9rT/2O33X424iUfkNR0FnE/aRKL1HwebWXvzrJWlRcQdki4D1o+IGY2+v5lZQ1Vaf0JdUTnyHxRxXzOzhnOO3MysxTmQm5m1OD/sNDNrcb29DbmNpDHAuaTd0d4A9ouI+VXnzwI2J224A7AraULIecBawHLAwRFxZ9V7uoHnI+Koodoe05CvwMysVfX15X8NbTdgQkRsSpq9d/qA8xsCUyJi6+y1EPgGaSvMLYAvA+q/WNL+wIfyfAkO5GbW2RoXyCcD1wNExBxgo/4T2Wh9baBb0q2SvpSdmgIsljQLOA6YlV2/KbAJ8OM8X4JTK2bW2UaQI8+qu1ZXeO2uquo6ibSZTr9eSeMiogdYETgbOAMYC9wo6W5gNWCViJgiaSpwmqQjgRNIa3H2zNMvB3Iz62iVvvzzyLOgPVg57kXAxKrPx2RBHNL2l2dGxKsAkmaTcukLgJnZNdeSUjKfIQX4XwOrAytIejgiLh6sXw7kZtbZGjf98FZSCe+rJW0CzKs6tw7wU0kbklLak4FLgFuAnYF7gC2BByPiLLKtMSXtDaw7VBAHB3Iz63QNmrUCzAB2kHQbqb7UPpIOB+ZHxExJVwBzgCXApRHxoKSTgemSbs+OT12Whh3IzayzNWhEHhF9wAEDDj9cdf5U4NQB73ke2H2Ie16cp20HcjPrbF7ZaWbW4lw0y8ysxXlEbmbW4kYw/bCsHMjNrLM1btZK0xSx1dsE0pPb7YCVgReBm4EfRsRrjW7PzKweFadWaroIuBc4llTlayKwE3AlacmpmVl5OLVS0xoRsdeAY/dLurmAtszM6uN65DW9nhV/uZ5UQGYisAvwcgFtmZnVxyPymj4HHA8cQgrii0g1CL5YQFtmZvXp8cPOpUTEAklHkCp7rQy8QCqcvrjRbZmZ1c2plaVJ2gX4HvAo6WHnJGBdScdExDWNbs/MrC5OrdR0LDA5Ihb1H5C0MnAD4EBuZqXi6Ye1jScVUa/2GtD6v/bMrP14RF5TNzBX0i2kWSuTSEXUzyqgLTOz+nRKIJf0TmAVoAc4Ejg7Iu6tdW1EnC9pJvBR3tzD7sSIeKYxXTYza6A2WKI/Jud1lwLvAE4Gfgv8x2AXSuoi7f78d9Kec58GTpb0jvq6ambWeJW+Su5XWeUN5OOA3wNvjYifknaBHszZwG7At4BZpDors4DpdfTTzKwYfZX8r5LKG8iXA84Afi9pG4ZOyWwQEfsAu5IC/wURcTWwQn1dNTMrQF9f/ldJ5Q3k+wABfB94O/CFoS6WtHm2AGj77PP3A8vX0U8zs2K0wYg876yVH0bEjtnHVw9z7f7ASZJui4g/ZcdOB76xLB00MytUiQN0XnkD+YuS/hfwCNAHEBGP1LowIh5iQLnaiNi1nk6amRWl0lvelEleeQP524HDqj6vANvWulDSjQySRomIzYZr6IMrrJGzS+3v6j2va3YXSmOPA/+l2V0ojcN+O3C9ndWlU0bkEbGNpFWB9wGPR8RzQ1x+FHA+aVTeU38XzcyKU+ZphXnlXRD0GeC7wB+BD0o6ISIur3VtRNwh6TJg/YiY0biumpkVoFMCOXA48JGIeFnSRGA2UDOQA0TEDxrROTOzwrV+ijz39MO+iHgZICJeAl4vrktmZqOn0tOX+1VWeUfkj0k6nbS6c0vgseK6ZGY2isobn3PLOyL/EvA4sEP2736F9cjMbBS1Q62VvCPy/xsRX+3/RNKlwNRiumRmNooaNCKXNAY4l7TN5RvAfhExv+r8WcDmpJ3TIJUx6QHOA9YilUI5OCLulLQXcCjQC9wPHBgRg/Z0yEAu6SDg34G3Sdo9O9wFPDTSL9LMrIwaONLeDZgQEZtK2oS0or16MeSGwJTq6duSTiDtaTxV0vrABpLmkWYJfigiXpX0E+ATwMzBGh4ykEfEOcA52X6bJy/jF2dmVl6Ny5FPBq4HiIg5kjbqP5GN1tcGurOS3hdExIXAFOAqSbOARcBBpNH8ZhHRv/JrHMNMMMmbWvlRNtQfTxqRrxER38v71ZmZlVVlBMsWJU0DplUd6o6I7uzj/o10+vVKGhcRPcCKpBLfZ5DKgN8o6W5gNWCViJgiaSpwWkRMBZ7J2jsYWIm0D8Sg8gbyn5PqrKxP2n/Ta4TNrC1URjAiz4J29yCnFwETqz4fkwVxSDHzzP5RtqTZpFz6At5MmVxLWhnfP4I/FVgH2CMihsz/5J21QkQcADxMmrmySt73mZmVWt8IXkO7FdgZIMuRz6s6tw5wi6SxksaT0jBzgVv630Oa2v1g9vGPgQnAblUplkHl3nxZ0gTSnwcV0lDfzKzljWREPowZwA6SbiOloPeRdDgwPyJmSroCmAMsAS6NiAclnQxMl3R7dnyqpA2BfUm7q82WBGk0P2jJk7yB/BxS9cPfAE+RfouYmbW8RgXybHrgAQMOP1x1/lRSuqT6Pc8Duw94z5OMIFsC+asf/mf/x5J+FhGLRtKImVlZVXq7mt2FuuWtfrg/6TfN8tnnRMQHiuyYmdloaGBqpWnyplYOISXkX8h746x++crAi9mfD2ZmpVPp65AROWmJ6FMR0TvchZI2JuXUxwIvAxMldQEHRcRty9xTM7MCdNKIfDbwuKTHSE9jKxFRc6s34D9I8x6f6j8g6d3Az4CP1dNZM7NGq1Q6Z0S+P7An8GKOa8dXB/HMU6Rpi2ZmpdJJI/I/A3cNVX2ryq8k3UCaqriQtGx1R+DXy9ZFM7Pi9HXKrBXSbJX7JD1ANrKOiM/VujAiTpT0b6SVS6uSlq0eGRFzG9BfM7OG6qSHnSMtkPVuQKRZKy8Az0j6w3D1AszMRlvbB3JJn4iIXwLrsnSO+6ZB3nMOaVXSdaQC6hOBnUjlGr2zkJmVSqUNhpfDjchXzf5dfcDxob70D0bEVgOOzZR064h6ZmY2Ctp+RB4Rl2Qf9kbEd/uPSxoq1TJG0hYRcXPV9VuRCsKYmZVK208/lLQvKR2ynqT+UotjSRtMHD3I2/YGzpB0JWnO+VuAu3FaxcxKqLcDZq1cDvwOOAY4KTvWBzw7xHv6SKmXXwH/CUwnbXG0LjB/iPeZmY26dhiRD1kqMSLeiIgnSSVse0n7xu3N0jnzaheRVnfeRlrNuTHwYQYfwZuZNU2lryv3q6zyTj+8ghSg9wAeIm11NGWwe0bETQCSto2IZ7OPR7AznpnZ6GiHWSt5i5evQtpX7l0RcQpZOdtBhKTpksZExN4Ako4Cnq6rp2ZmBeikEflywNeBeyR9gKG3evsy8MkBy/n/DJy1bF00MytOb9+INuMppbyB/OvAbqQHnp8HDhzswiyA/2LAscuXtYNmZkXqmNRKVkf8N8BnSBuC3l9kp8zMRktfpSv3q6zybvV2MvAuYD1gMWkGyl4F9svMbFS0/fTDKpMjYirwcrbac60C+2RmNmoqlfyvssqbIx8naQJQkTSWNKe8EH9dsqioW7ecz9550vAXdYiZG5/S7C6UxktjJzS7C6WxRQPuUeaUSV55A/kZwD3A24E7ss/NzFpeO8xayfuw8+ekjSJ2AT4eEVcCSNq1wL6ZmRWuMoJXWeUdkRMRLwB3DTh8CAOmGpqZtZJOSq0MpvW/A2bW0dph1kq9gbzMf22YmQ0rz47yZVdvIDcza2mVBiUWJI0BzgU2AN4A9ouI+VXnzwI2J22BCbAr0AOcR5rSvRxwcETcKemTwPHZ+Qsj4vyh2q73cW3r/01iZh2tp9KV+zWM3YAJEbEpcBRw+oDzGwJTImLr7LUQ+AbwQERsQapTJUnjSaXAdwS2AqZJGqp0eN2B3NMQzaylVejK/RrGZOB6gIiYA2zUfyIbra8NdEu6VdKXslNTgMWSZgHHAbNIK+jnR8QLEbEYuIVhpsznXaJ/DPBN4FXSKLwSEWtExLV53m9mVlYjyZFLmgZMqzrUHRHd2ceTgIVV53oljYuIHmBF4GzS4HcscKOku4HVgFUiYoqkqcBppP0equ/zErDyUP3KmyPfE1gjIl7Neb2ZWUsYSY48C9rdg5xeBEys+nxMFsQhDYLP7I+hkmaTcukLSHs9AFxLSsmcNuA+E4EXh+pX3tTKk8BrOa81M2sZfSN4DeNWYGcASZsA86rOrQPcImlslgOfDMwlpU36N7bfEngQ+COwtqS3SVouO377UA2PZGOJeZLmkU05jIjP5XyvmVlp9TZuzsYMYAdJt5FS0PtIOpyU754p6QpgDrAEuDQiHswqy06XdHt2fGpELMneN4s02L4wIv4yVMN5A/n3ax2U9J6I+O+c9zAzK51G7eCWbapzwIDDD1edPxU4dcB7ngd2r3Gva0mpllxyBfL+zZRruAjYNm9jZmZl09cGs6i9RN/MOlo7LE/3En0z62jtsES/0EK82SR4M7PS6uvqyv0qq4anViS9lzTpfSOgJwvm84DDIuKROtszM2uowrY7G0X1BvLZNY5NB46OiDv6D2RzKi8iFYwxMyuNRs1aaaa8S/T3J02rWZ43l+h/ICK+U+PyCdVBHFLdAUl1d9bMrNE6adbKIaTVRy/kuPY+SReSiscsJC0v3Rm4f5l6aGZWoHaYsZE3kN8PPBURedJJB5LKOU4mBfFFwC9Jq57MzEqlY1IrpFz445Ie483USs2FQBFRkfQE8D5SoZgXSL8E2uEXn5m1mXaYfpg3kO9PqoA4ZAUuAEnHAx8j1Ql4nDQqP0HS3Ig4blk7amZWhN4OGpH/GbgrqyUwnB2y3S7+QdLZpGIxDuRmViqdNCJfnvQQ8wGGr344XtKaEfFk1bE1aY/vl5m1mXYITHkD+fdGcM9DgBlZHd1XgbcBrwD7jbBvZmaFG34rzvLLu4R+HrAG8B7S6HqzIa6dFhH/Rpp3vgoprz5+BG2ZmY2aBm4s0TR5R+Q/Bx4BPgS8ThppD2at7N9vATtFxKOS1gB+QtoR2sysNNphiX7uUXJEHAAEsANppD2c3oh4NHvvX0fSlpnZaOnryv8qq9y1ViRNIO0EXQFWGuLSt0q6B1hR0r7AFcDpgHcSMrPSKXPKJK+8gfwc4FDgN8BTpA1Da4qIDSUtT9oh+lXS92kecEF9XTUza7xOCuQTIuIUAEk/i4hFQ10cEW8Ad1Yd+tEy9s/MrFDtsOQ8b956Wv8HwwVxM7NW0kk58uUl/YH0sLMPhlwQZGbWMtph1kreQH5kob2oct8LT4xWU6W35LLTmt2F0nhguWb3oDy2fH1xs7vQVvraILmSN5DPA6aQFvZ0kRYH3VRUp8zMRksnPewcyYIgM7OW0frj8WIXBJmZlV4nLdEfyYIgM7OW0dPV+mPyvCPyc4AjSLnyPwMPF9YjM7NRVBnBq6zyjsgrpDK0LwBvABcV1iMzs1FU5pRJXnkD+XHARyPiWUnvAK4lbeVmZtbSGjX9UNIY4FxSeZI3gP0iYn7V+bOAzYGXskO7AmNJE0keyI7NiIgzJR0B7EX6PXNyRAy5eX3eQL4gIp4FiIhnJHl1p5m1hQamTHYjlTPZVNImpGKBu1ad3xCYEhHP9R+QtD3wk4g4uOrYW4GvAe8nPZe8F2hIIF8kaRZp7vhHgBUknQwQEcfkvIeZWek0MLUyGbgeICLmSNqo/0Q2Wl8b6M6yGhdExIWkeLqhpJuAZ0kB/DlStdgVs9ewXcwbyH9R9fFfcr7HzKz0ekcwJpc0jaraU0B3RHRnH08CFlbfWtK4iOghBeSzgTNI6ZQbJd1NmjhyT0TcIOnz2TV7karMPpRdO+xWm7kCeURckuc6M7NWM5IReRa0uwc5vQiYWPX5mCyIQ1pEeWZEvAogaTYpl34Nby6wnAGcCOwEvJM3d1ubJenWiKiuKPtPvGuPmXW0ygj+G8atwM4AWY58XtW5dYBbJI2VNJ6UhpkLTAf2yK7ZDriHNDvwNeCNiHidtO/xW4dqOPeCIDOzdtTAHPkMYAdJt5FqUu0j6XBgfkTMlHQFMAdYAlwaEQ9KOgq4UNKBwCukmS5/yx6CzpHUR9rI57dDNdxVqZRrmvtb3vKecnWoiZ47futmd6E0fvCjnuEv6hBbvr6k2V0ojW2fubruKuEHrrln7phz7pP1t1cEj8jNrKO1w8jRgdzMOlpPG4TyQh92ZnMnzcxKq4EPO5um4SNySe8lzZXcCOjJgvk84LCIeKTR7ZmZ1aOTaq2MxHTg6Ii4o/9ANhXnIlKdATOz0ijzSDuvIlIfE6qDOKTlqgW0Y2ZWt47aWGIE7pN0IanmwELSSqedgfsLaMvMrC69JZuCvSyKCOQHkqqATSYF8UXALxmmepeZWTM0qoxtMzU8tRIRFeAJ4G/AM8Bfgaey42ZmpdIOs1YaHsglHQ+cBCwGHgd6gBMkfafRbZmZ1cs58tp2iIgtqg9IOptUY+C4AtozM1tmTq3UNl7SmgOOrUm5f6GZWYdqh9RKESPyQ4AZkpYjPeicRNq/7oAC2jIzq4tnrdR2I2m7oqtIQXxRRLw09FvMzJrDqZXa7gM+TNoe7n0O4mZWZn7YWdtrEfHVbOPRoyWdC9wAPB4RZxXQnpnZMitz7juvIgJ5F0BE3A3sIWllYEtABbRlZlaXdkitFBHIL67+JCIWAtdmLzOzUinbLmnLouGBPCIuafQ9zcyK0usRuZlZa3NqxcysxTm1UoAlvd4tvd9fLn2m2V0oja9/anyzu1Aa375mpWZ3oTS2bcA9PCI3M2txnn5oZtbivETfzKzFObViZtbiHMjNzFqcZ62YmbU4j8jNzFqcZ62YmbW43kpjCtRKGgOcC2xA2kxnv4iYX3X+LGBzoL+0967AWOAR4IHs2IyIOFPSTsC3smNzgYOG2sDegdzMOloDc+S7ARMiYlNJmwCnk4J1vw2BKRHxXP8BSdsDP4mIg6uOTQR+AGwdEc9J+iawGvD3wRp2IDezjtbAHPlk4HqAiJiT7ckA/GO0vjbQLekdwAURcSHwEWBDSTcBz5J2V1sfmAecLum9wPSIGDSIgwO5mXW4keTIJU0DplUd6o6I7uzjScDCqnO9ksZFRA+wInA2cAYpnXKjpLuBh4F7IuIGSZ/PrpkBbEPaae1l4GZJt0fEI4P1y4HczDpa3whSK1nQ7h7k9CJgYtXnY7IgDvAqcGZEvAogaTYpl35Ndg5SAD8RmA7cFRFPZ9f+nhTUBw3kRezZaWbWMioj+G8YtwI7A2Q58nlV59YBbpE0VtJ4UhpmLilo75Fdsx1wT/b6oKTVJI0DNgEeGqphj8jNrKM1atYKaUS9g6TbSFte7iPpcGB+RMyUdAUwB1gCXBoRD0o6CrhQ0oHAK6SZLn+XdDQwK7vv1RHxwNLNvamrbKuaxi33L+XqUBM99L4PNbsLpfHOKS5j289lbN902pM/6ar3Huu8faPcMeeRv99dd3tF8IjczDpaOywIKjRHnk25MTMrrb5KJferrBo+Is/mPZ4BbAT0ZMF8HnDYUNNnzMyaoR1G5EWkVqYDR0fEHf0Hsie4F5GWp5qZlUZvpbfZXahbEamPCdVBHNIqpwLaMTOrW6VSyf0qqyJG5PdJupC0VHUhaYL8zsD9BbRlZlYXl7Gt7UBS8ZjJpCC+CPglaY6lmVmplHmknVfDUytZqcUngL8BzwB/BZ4aqgSjmVmztMOslYYHcknHAycBi4HHgR7gBEnfaXRbZmb1auAS/aYpIrWyQ0RsUX1A0tmkpanHFdCemdkya+AS/aYpYtbKeElrDji2JtD63y0zazuetVLbIcB/SVqeVEt3RVKa5YAC2jIzq0uZc995FTEiX0Da6WJ10u4XbwAB/KmAtszM6tIOI/IiAvkPgYMjYlXSFMRfA6cBFxTQlplZXfqo5H6VVRGBfOWIeBT+saJz84i4B1ilgLbMzOrSDiPyInLkj0v6EXAd8AngXkm7k4qmm5mVimet1LYPqdrhjsCdwDdIi4I+W0BbZmZ1aYcFQQ0fkUfEYuCcAYddNMvMSqnMKZO8vEOQmXW0Mq/YzMuB3Mw6mkfkZmYtrsy577y62uG3kZlZJ/PmyGZmLc6B3MysxTmQm5m1OAdyM7MW50BuZtbiHMjNzFpcxwRySVtLelHSv1YdO0XS3k3sVsuQNE3S+Gb3o0iS9pZ0ygjfs52k2yX9XtLPJa1QVP9agaSvNrsPnahjAnlmMXCRpK5md6QFHQOMbXYnSuhcYLeI2BJ4FNivyf1ptn9vdgc6Uaet7JxN+uV1EGkDDAAkfZ1UnbEH+H1EHCnpBGAt4H8A7wEOi4hZkrYCTgJ6gceA/SNiyah+FQ0iaRIwHXgrsBpwPvC/gQMi4mFJB5B2enoq+/enwG6STidtGgJwZUScOeqdL9AgPw+rAVcCy5N2vNo2It4PbB0Rz2RvHQe83ow+N5qkdYCLgSWk78NU4LvAesDjwMYRsbaki4FVs9evgLdJOjciDmxGvztVp43IAb4CHCZp7ezzicCewGbZa21Jn8jOvRERO5H2IT0sG8mfD+weEVsBfwH2Hs3ON9j7gZ9GxI6k2vGH17ooIi4AngY+m31v1gI2IQXzz0n60Cj1dzSsTe2fh2OBa7L/7z8jGwRFxN8AJH0K2Aa4tBmdLsAOwD3A9qSBy77A8hGxCel78e6qa2dHxGYRcRLwvIP46Ou4QB4RC4BDSaONMcAEYE5ELImICnAz8D+zy/+Q/ftUdt3bgXcCV0v6f6Sa69U/0K3madII+3LSn8QDc+C1UlDrATdHRCX7S2QO8IFiuzmqPkztn4f1gNuya26ufoOkw4AjgI9HRFuMyElbMz4HXA98lfSzcAdARDwBPFl1bYx25+yfdVwgB4iIa0k/fHuT/hT+mKRx2Yh7S+CR7NKBhWieA/4M7BoRW5NGKjeORp8LcgRwe0R8gTTK7CJ9P96Znd+w6to+0s/LH8nSKtnDz81IueF2cS+1fx4eADbNrtmk/2JJxwJbANtHxHOj3dkC7Ur6hb0d6Wdjb2BzAEnvAN5VdW31Fjt+/tQEnZYjr3YosB3wEnA1cCspUN0CXANsMPANEdEn6RDgV5LGAItIucNWdS1wnqTPAwtIudDzgHMkPUVKHfW7mbSR9jbA1pJuB5YDro6IuaPb7UI9SvpZGPjzcDNwmaQ9STteLckC2reAucB1kgCuiojzmtHxBrsbuFxSDylQ70FKo91GGswM9lzoIUmXZ4MDGyWufmiWg6Sdgb9HxF2StgeOiYhtm92vZpH0dESs3ux+WNLJI3KzkXgCuDAboY4Fvtbk/pj9g0fkZmYtriMfdpqZtRMHcjOzFudAbmbW4hzIre1IWkvSvZIuGeH73i3pk0X1y6woDuTWjjYHfhcRXxzh+7bN3mvWUjxrpYNkJXt3BSaRimSdSFqJdxBvrsj7NPBB4PukapHdwGuDXHM08Abwr8CPSIFwA+DMwRbFSNp6uPdJ+nQAnwegAAACa0lEQVSN9jYBjgS2Ii3CeUtEfLPG/d8N/AZYAfgeaUHPWdm9FgBfAl4Gfpy1vypwHXAC8GD2vq+S6s4MLB52MWkR1QLS4qjratx7OeAq0iBpfHaPebW+F2aN4hF551mJVBBpR+AMUp2UXbKSAwFMya6bEBFbRMRlwDqDXPMu0oq/r5BqtfwfYCdg/2H6MNz7lmovIn5JWkF5CSmYH1PrxhHxJ+AUUlXG80hFzg7K7vVr4JukAD4nIqaQyg18JSJ6q943c4i+rw7sGBGnDnLvjwILs6/na6RfmmaF8oKgznNTRPQBz0h6gVRP5hJJLwPrArdn11UXQnp2kGseiIglkl4EHouIxdk9JwzTh+HeN1h7pwL/DewZET05v971gHOz5fPjSXVTngc2lrQNqczC8sPco7p+yBMRsXiIe19HqqD4C9Iy9u/m7KfZMvOIvPN8BP5R+Ghl4EBS7e39SCmU/qDVl123MvDtQa5Z1rzcoO8bpr3zSCWFvy1plZxtBTA1GzV/k1Qze2/gxYj4PHA6sEJWIKu/MBgMXTxsqHtvDfwtKw38XeDknP00W2YekXee1SX9jjeD+D6klMUrwAvAGqTl6P0WkQpIDXVNI9VsLytW9mxEnCPpFdKGGHvkuN9XgEsl9e9utC+pguNPJW2RtfEo6WuaBxwraS4p912reNhw914AXCXpUNLmIyfm/9LNlo0fdnaQ7GHnuhFxVLP7YmaN4xG5FULS8aTZKAPtk21MUO/9lyPNThkoImK4h61mbcUjcjOzFueHnWZmLc6B3MysxTmQm5m1OAdyM7MW50BuZtbiHMjNzFrc/wckjvFcDE4ZBQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dt = pd.DataFrame(grid1.cv_results_)\n",
    "dt.param_max_features = dt.param_max_features.astype(str)\n",
    "dt.param_n_estimators = dt.param_n_estimators.astype(str)\n",
    "\n",
    "table = pd.pivot_table(dt, values='mean_test_score', index='param_n_estimators', \n",
    "                       columns='param_max_features')\n",
    "     \n",
    "sns.heatmap(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5664538956289195"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid1.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Grid 2: Selecting max depth and split criterion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 36 candidates, totalling 108 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  34 tasks      | elapsed:   38.8s\n",
      "[Parallel(n_jobs=-1)]: Done 108 out of 108 | elapsed:  2.0min finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score=nan,\n",
       "             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
       "                                              class_weight=None,\n",
       "                                              criterion='gini', max_depth=None,\n",
       "                                              max_features='auto',\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              max_samples=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",
       "                                              n_estimators=100, n_jobs=None,\n",
       "                                              oob_score=False,\n",
       "                                              random_state=None, verbose=0,\n",
       "                                              warm_start=False),\n",
       "             iid='deprecated', n_jobs=-1,\n",
       "             param_grid={'criterion': ['entropy', 'gini'],\n",
       "                         'max_depth': [7, 9, 11, 13, 15, None],\n",
       "                         'max_features': ['auto'],\n",
       "                         'n_estimators': [1000, 1100, 1200]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='f1', verbose=1)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_grid2 = {'max_features':['auto'],\n",
    "          'n_estimators':[1000, 1100, 1200],\n",
    "           'criterion': ['entropy', 'gini'],    \n",
    "          'max_depth': [7, 9, 11, 13, 15, None],\n",
    "         }\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "grid2 = GridSearchCV(estimator=rf_model, param_grid=param_grid2, n_jobs=-1, cv=3, verbose=1, scoring = 'f1')\n",
    "grid2.fit(train_x, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
       "                       criterion='entropy', max_depth=11, max_features='auto',\n",
       "                       max_leaf_nodes=None, max_samples=None,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=2,\n",
       "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
       "                       n_jobs=None, oob_score=False, random_state=None,\n",
       "                       verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid2.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24e26d720f0>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dt = pd.DataFrame(grid2.cv_results_)\n",
    "\n",
    "table = pd.pivot_table(dt, values='mean_test_score', index='param_max_depth', \n",
    "                       columns='param_criterion')\n",
    "     \n",
    "sns.heatmap(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24e3e7c6550>"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "table = pd.pivot_table(dt, values='mean_test_score', index='param_max_depth', \n",
    "                       columns='param_n_estimators')\n",
    "     \n",
    "sns.heatmap(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5754368499916416"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid2.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Checking if other depth and estimator value results better"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 9 candidates, totalling 27 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  27 out of  27 | elapsed:   23.4s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score=nan,\n",
       "             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
       "                                              class_weight=None,\n",
       "                                              criterion='gini', max_depth=None,\n",
       "                                              max_features='auto',\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              max_samples=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",
       "                                              n_estimators=100, n_jobs=None,\n",
       "                                              oob_score=False,\n",
       "                                              random_state=None, verbose=0,\n",
       "                                              warm_start=False),\n",
       "             iid='deprecated', n_jobs=-1,\n",
       "             param_grid={'criterion': ['entropy'], 'max_depth': [10, 11, 12],\n",
       "                         'max_features': ['auto'],\n",
       "                         'n_estimators': [950, 1000, 1050]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='f1', verbose=1)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_grid2_2 = {'max_features':['auto'],\n",
    "          'n_estimators':[950, 1000, 1050],\n",
    "           'criterion': ['entropy'],    \n",
    "          'max_depth': [10, 11, 12],\n",
    "         }\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "grid2_2 = GridSearchCV(estimator=rf_model, param_grid=param_grid2_2, n_jobs=-1, cv=3, verbose=1, scoring = 'f1')\n",
    "grid2_2.fit(train_x, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
       "                       criterion='entropy', max_depth=10, max_features='auto',\n",
       "                       max_leaf_nodes=None, max_samples=None,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=2,\n",
       "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
       "                       n_jobs=None, oob_score=False, random_state=None,\n",
       "                       verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid2_2.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.57924338341986"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid2_2.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Grid 3: Selecting minimum samples leaf and split"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 16 candidates, totalling 48 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done  48 out of  48 | elapsed:   42.4s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score=nan,\n",
       "             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
       "                                              class_weight=None,\n",
       "                                              criterion='gini', max_depth=None,\n",
       "                                              max_features='auto',\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              max_samples=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",
       "                                              n_estimators=100, n_jobs=None,\n",
       "                                              oob_score=False,\n",
       "                                              random_state=None, verbose=0,\n",
       "                                              warm_start=False),\n",
       "             iid='deprecated', n_jobs=-1,\n",
       "             param_grid={'criterion': ['entropy'], 'max_depth': [10],\n",
       "                         'max_features': ['auto'],\n",
       "                         'min_samples_leaf': [1, 3, 5, 7],\n",
       "                         'min_samples_split': [2, 4, 6, 8],\n",
       "                         'n_estimators': [1000]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='f1', verbose=1)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_grid3 = {'max_features':['auto'],\n",
    "          'n_estimators':[1000],\n",
    "           'criterion': ['entropy'],    \n",
    "          'max_depth': [10],\n",
    "          'min_samples_leaf': [1, 3, 5, 7],\n",
    "          'min_samples_split': [2, 4, 6, 8]\n",
    "         }\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "grid3 = GridSearchCV(estimator=rf_model, param_grid=param_grid3, n_jobs=-1, cv=3, verbose=1, scoring = 'f1')\n",
    "grid3.fit(train_x, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
       "                       criterion='entropy', max_depth=10, max_features='auto',\n",
       "                       max_leaf_nodes=None, max_samples=None,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=8,\n",
       "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
       "                       n_jobs=None, oob_score=False, random_state=None,\n",
       "                       verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid3.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24e3e9f2470>"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dt = pd.DataFrame(grid3.cv_results_)\n",
    "\n",
    "table = pd.pivot_table(dt, values='mean_test_score', index='param_min_samples_leaf', \n",
    "                       columns='param_min_samples_split')\n",
    "     \n",
    "sns.heatmap(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5780629261081371"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid3.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Grid 4: Selecting class weight"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 3 candidates, totalling 9 fits\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=-1)]: Using backend LokyBackend with 8 concurrent workers.\n",
      "[Parallel(n_jobs=-1)]: Done   4 out of   9 | elapsed:    5.2s remaining:    6.6s\n",
      "[Parallel(n_jobs=-1)]: Done   9 out of   9 | elapsed:    8.3s finished\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score=nan,\n",
       "             estimator=RandomForestClassifier(bootstrap=True, ccp_alpha=0.0,\n",
       "                                              class_weight=None,\n",
       "                                              criterion='gini', max_depth=None,\n",
       "                                              max_features='auto',\n",
       "                                              max_leaf_nodes=None,\n",
       "                                              max_samples=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",
       "                                              n_estimators=100, n_jobs=None,...\n",
       "                                              random_state=None, verbose=0,\n",
       "                                              warm_start=False),\n",
       "             iid='deprecated', n_jobs=-1,\n",
       "             param_grid={'class_weight': [{0: 1, 1: 1}, {0: 1, 1: 2},\n",
       "                                          {0: 1, 1: 3}],\n",
       "                         'criterion': ['entropy'], 'max_depth': [10],\n",
       "                         'max_features': ['auto'], 'min_samples_leaf': [1],\n",
       "                         'min_samples_split': [8], 'n_estimators': [1000]},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=False,\n",
       "             scoring='f1', verbose=1)"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "param_grid4 = {'class_weight':[{0:1, 1:1}, {0:1, 1:2}, {0:1, 1:3}],\n",
    "            'max_features':['auto'],\n",
    "          'n_estimators':[1000],\n",
    "           'criterion': ['entropy'],    \n",
    "          'max_depth': [10],\n",
    "          'min_samples_leaf': [1],\n",
    "          'min_samples_split': [8]\n",
    "         }\n",
    "\n",
    "rf_model = RandomForestClassifier()\n",
    "grid4 = GridSearchCV(estimator=rf_model, param_grid=param_grid4, n_jobs=-1, cv=3, verbose=1, scoring = 'f1')\n",
    "grid4.fit(train_x, train_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight={0: 1, 1: 3},\n",
       "                       criterion='entropy', max_depth=10, max_features='auto',\n",
       "                       max_leaf_nodes=None, max_samples=None,\n",
       "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "                       min_samples_leaf=1, min_samples_split=8,\n",
       "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
       "                       n_jobs=None, oob_score=False, random_state=None,\n",
       "                       verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid4.best_estimator_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x24e527cf748>"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "dt = pd.DataFrame(grid4.cv_results_)\n",
    "dt.param_class_weight = dt.param_class_weight.astype(str)\n",
    "table = pd.pivot_table(dt, values='mean_test_score', index='param_class_weight')\n",
    "     \n",
    "sns.heatmap(table)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.577445110448134"
      ]
     },
     "execution_count": 65,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid4.best_score_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Final Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "model = RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight={0: 1, 1: 2},\n",
    "                       criterion='entropy', max_depth=10, max_features='auto',\n",
    "                       max_leaf_nodes=None, max_samples=None,\n",
    "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
    "                       min_samples_leaf=1, min_samples_split=8,\n",
    "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
    "                       n_jobs=None, oob_score=False, random_state=None,\n",
    "                       verbose=0, warm_start=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight={0: 1, 1: 2},\n",
      "                       criterion='entropy', max_depth=10, max_features='auto',\n",
      "                       max_leaf_nodes=None, max_samples=None,\n",
      "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
      "                       min_samples_leaf=1, min_samples_split=8,\n",
      "                       min_weight_fraction_leaf=0.0, n_estimators=1000,\n",
      "                       n_jobs=None, oob_score=False, random_state=None,\n",
      "                       verbose=0, warm_start=False)\n",
      "\n",
      " Classification report : \n",
      "               precision    recall  f1-score   support\n",
      "\n",
      "           0       0.87      0.83      0.85      1035\n",
      "           1       0.59      0.66      0.62       374\n",
      "\n",
      "    accuracy                           0.79      1409\n",
      "   macro avg       0.73      0.75      0.74      1409\n",
      "weighted avg       0.80      0.79      0.79      1409\n",
      "\n",
      "Accuracy   Score :  0.7877927608232789\n",
      "Area under curve :  0.8479681727763569 \n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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geFbUkNy4Ls0twB7ArMiYnvgnr4NxYj3FcAvMvPkEapvrdLT08vnPncj5577O5qbm9hss1X/oJbUWAzfkhqT6bsslwG7RMSt1L7LB0TEkcBsoAV4IzAmIt5W7H9MZt42MqWOrK6ubg4//HouueQB2ttb+Pa3d+ftb99ypMuSNMIM35IakhdOlqO4kPKQFVY/UPd6tW9U3UiPln/yyS5mzLiaG274G+PGtXHBBdN4wxueN9JlSVoLGL4lNSQvuBx9GunR8sce+0tuuOFvbLhhBz/84V68+tWbjHRJktYShm9JDcnsrZH06U9PZfbsxznllJ2J2Giky5G0FjF8S2pMpm9V7LHHFrPRRuvR1NTExhuvz+WXv5smfwUjaQU+ZEeSpDX0pz/9i513vpATTrj5qXUGb0n9ceRbUkPygktV5Xe/m8O++17K448v4Te/eYSlS5czZowfr5L657uDpIbkoKOqcPPNf+f977+CRYu62GWX53POOXsYvCUNymknkhpS0xp8SUNxzTWzee97L2PRoi722uslnH/+Oxg7tm2ky5K0lvPHc0mNyRStEl177WwOPPAqenp6OfDArTnppJ1obvYfnaSVM3xLakjO+VaZttlmU57//ElMm/ZiPvOZ13txpaQhM3xLakhmIQ233t5eenuhubmJKVPGcsMN72P99dtHuixJo4xzviVJWomenl6OPvoXHHvsjfT29gIYvCWtFke+JTUkB741XLq6uvn4x6/j0kuTMWNaOOCAV7HllhuOdFmSRinDt6TGZPrWMFi8uIsZM67mZz/7G+PGtfH9708zeEtaI4ZvSQ3JCy61pubPX8L++1/BHXc8zIYbdnDRRXvxqldtMtJlSRrlDN+SGpIXXGpNPProIt7znkv54x/nsumm6zNr1t68+MUbjXRZkhqA4VtSQzJ7jy4bXfQ8etonjXQZT2lra6anp4cXvnADLr54bzbbbMJIlySpQRi+JTUm0/eo0rysk7kfWDDSZTxlgw3WY9asvWlubmbKlLEjXY6kBuKtBiU1pKY1+E/rprvv/j+OO+5XT91KcOON1zd4Sxp2jnxLktZ5v/rVQ3zwg1eyeHEXW201mX33fdlIlySpQRm+JTUkL7jUUF199Z855JBrWLasm3e9ayv23vslI12SpAbmtBNJDalpDb607vjBD+5lxoyrWbasmxkzXsWZZ+5GW1vLSJclqYE58i2pITnyrZWZOfMujj/+1wB86lNTOeqo7WnyH46kkhm+JTUoQ5QGtnTpci699AEATjrpzcyY8eoRrkjSusLwLakhOYCpwYwZ08pFF+3F7bc/zB57bDnS5UhahzjnW1JDcs63VrRsWTfnn/97enpqtxKcPHmswVtS5Rz5liQ1vEWLujjwwCu58caH+N//XcCxx+440iVJWkcZviU1JKedqE9n5xLe977L+c1vHmHy5PV4xztePNIlSVqHGb4lNSSfVCmAf/7zCd797ku5//7H2Gyz8Vx88bt44Qs3GOmyJK3DDN+SGpPZe5334IOd7LPPJTz00Hy23HJDZs3am+c8Z/xIlyVpHWf4ltSQzN46/vhf89BD89l664354Q/fyeTJY0e6JEkyfEtqTM751umn78LkyWM57rgdGT9+zEiXI1Wiu3s58+bNZfnyZZX3/c9/NtHb21t5v1VobW1ngw2m0NKy5tHZ8C2pITnne910zz2P8tKXTqalpZkNNliPU0/deaRLkio1b95cOjrGMm7cJpU/sbWlpZnu7p5K+6xCb28vixYtYN68uUye/Ow1bs/7fEuSGsJVV/2J3Xb7AZ/+9M8bdvRNWpnly5cxbtyEyoN3I2tqamLcuAnD9tsEw7ekxuRTdtYp3//+H/jIR35CV1cPY8e2YfbWuszgPfyG83vqtBNJDcmPnnXHGWfcyQkn3AzA0Ue/niOO2M7wIa0FLrzwfC6++IfMmnUlY8YM73UX9957D9/4xqm0trbwutdtz4EHHvS07XPmzOGEE75Ab28vEyZM4LjjTqSjo+Op7SeffCITJkzg0EM/zvLlyznhhOOYM+f/aG5u5jOfOZbNN99iWOut58i3pIbU1LT6Xxodent7+dKXfs0JJ9xMUxN85Ss7ceSR2xu8pbXEDTdcx1ve8lZ+/vOfDnvbp576ZY4//kRmzjyX++67l8wHnrZ91qz/ZqedduFb3zqHLbZ4AVdffflT2y6//BL++tfZTy3fdtvNdHd3c/bZ53HAATP4zne+Nez11jN8S2pITWvwn6q10UXPo6d90iof9+1v/5Yzz7yL1tZmzjprdw488FUlVCdpdfz2t3ex6aabMX363lx66cUAfOxjB/HQQw8CcPnlP+bcc78NwPnnf5cPf/j9fOhD+3H55Zc8rZ0FC+bz2c9+6mnrFi16gq6uZTznOZvR1NTEtttO5e6773zaPltuGSxcuACAxYsX0dpam+xx771/4L777mXatL2e2ve5z92c7u5uenp6WLTo3/uWxWknkhqSg5+jR/OyTuZ+YMEqH7fffi/n6qv/zCc+sS277PKCEiqTRr8NrtyO1s77h6295ZO2Yt477ljpfldffQV77jmd5z1vC9ra2vjjH+/td78//ekB7rjjVr7znfPp6uri7LPPpLe396nfYE2YMJGTTvrq045ZtGgRY8eOe2p57NixPPLIw0/bZ8qUZ3H22d/khhuup6trGQceeBCPPfYY5533HU466VR+8Ysbntp3vfXWY86cR9hvv3cxf34np5xy+pC/H6vD8C1JGjUWLeqivb2ZtrYWJkwYw1VXvcdpJtIghhKUh9uCBQu47bZbmDfvcX784x+xaNETXHrpj562T99F0X//+0NstdXLaGlpoaWlhU9+8qiVtj9u3DiefHLxU8uLFy9m/fWf/vTamTO/wWc/ezzbbTeVW2+9mRNOOI5tt51KZ2cnRx11OI8//i+WLFnC5ptvwV/+8me23XYqhxzyMf75zzl84hOHcsEFFw37PPU+hm9JDansPBYR2wEnZ+abIuI1wFXAn4vNZ2XmjyLiOODtwHLgk5l55wDNaQjmzXuS/fa7nBe8YBLf/OZuNDc3GbyltdBPf3oNe+wxjY9+9BMALFmyhH32eQcveMEL+de/HmPzzbfgT396gMmTp7D55ltw+eWX0NPTQ09PD0cddTinnPJ12tvbB2x/3Lj1aW1t4+GH/5dNN30Od955Gwcc8PQLLsePn8C4cesDMHnyZBYuXMg+++zLPvvsC8A111zFQw89yO6778n553/3qYfnTJgwkeXLl9PTU979yg3fkrSKIuLTwPuBRcWq1wBfy8zT6vZ5DfBGYDvgucAlwOsqLrVhzJnzBO95zyXcf/+/ePTRRcydu5iNNx638gMlVe6qq67g85//0lPLHR0dvPGNO/GsZz2Lr33tZJ71rI2ZPHkKUJubvd12Uzn00A/T09PDO9/5rqcF7wUL5vOVr5zwjKknRx11DF/84rH09PTwutdtx8te9vKn7fvJT36K008/hZ6eHnp7eznyyE8PWO+7370fX/7ylzjssBl0dXVx0EEfZb311hvm78q/NTXagwiWLKexTkjP8ODcxSvfSQ3hJc8eu9rDmvOf7Fnt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\n",
      "text/plain": [
       "<Figure size 864x864 with 4 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "churn_prediction(model, train_x, train_y, test_x, test_y, x,\"features\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Checking the model's performance on train data itself"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.60522273, 0.66346154, 0.62243286, 0.58139535, 0.63836478])"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_scores = cross_val_score(model, train_x, train_y, cv = 5, scoring='f1')\n",
    "train_scores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6221754521655275"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(train_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see that the performance of the model on test data is same as training data. So, we can conclude that there is no overfitting and underfitting."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Saving model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pickle\n",
    "pickle.dump(model, open('model.pkl','wb'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Explaining the model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\archd\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:144: FutureWarning: The sklearn.metrics.scorer module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.metrics. Anything that cannot be imported from sklearn.metrics is now part of the private API.\n",
      "  warnings.warn(message, FutureWarning)\n",
      "C:\\Users\\archd\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:144: FutureWarning: The sklearn.feature_selection.base module is  deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.feature_selection. Anything that cannot be imported from sklearn.feature_selection is now part of the private API.\n",
      "  warnings.warn(message, FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "import eli5\n",
    "from eli5.sklearn import PermutationImportance\n",
    "\n",
    "from pdpbox import pdp, info_plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <style>\n",
       "    table.eli5-weights tr:hover {\n",
       "        filter: brightness(85%);\n",
       "    }\n",
       "</style>\n",
       "\n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "        <table class=\"eli5-weights eli5-feature-importances\" style=\"border-collapse: collapse; border: none; margin-top: 0em; table-layout: auto;\">\n",
       "    <thead>\n",
       "    <tr style=\"border: none;\">\n",
       "        <th style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">Weight</th>\n",
       "        <th style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">Feature</th>\n",
       "    </tr>\n",
       "    </thead>\n",
       "    <tbody>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 80.00%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0185\n",
       "                \n",
       "                    &plusmn; 0.0058\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                InternetService_Fiber optic\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 90.48%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0064\n",
       "                \n",
       "                    &plusmn; 0.0088\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                Contract_Two year\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 92.50%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0045\n",
       "                \n",
       "                    &plusmn; 0.0058\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                OnlineSecurity\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 93.00%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0041\n",
       "                \n",
       "                    &plusmn; 0.0134\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                Contract_One year\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 93.34%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0038\n",
       "                \n",
       "                    &plusmn; 0.0086\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                PaymentMethod_Electronic check\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 93.52%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0037\n",
       "                \n",
       "                    &plusmn; 0.0071\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                InternetService_No\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 94.61%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0028\n",
       "                \n",
       "                    &plusmn; 0.0094\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                tenure\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 94.99%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0026\n",
       "                \n",
       "                    &plusmn; 0.0011\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                OnlineBackup\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 95.80%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0020\n",
       "                \n",
       "                    &plusmn; 0.0078\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                MonthlyCharges\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 97.41%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0010\n",
       "                \n",
       "                    &plusmn; 0.0014\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                DeviceProtection\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 97.68%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0009\n",
       "                \n",
       "                    &plusmn; 0.0083\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                PaperlessBilling\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 97.96%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0007\n",
       "                \n",
       "                    &plusmn; 0.0030\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                TechSupport\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 98.57%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0004\n",
       "                \n",
       "                    &plusmn; 0.0032\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                StreamingMovies\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 98.92%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0003\n",
       "                \n",
       "                    &plusmn; 0.0017\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                gender\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(120, 100.00%, 99.34%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                0.0001\n",
       "                \n",
       "                    &plusmn; 0.0019\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                PhoneService\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 100.00%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0000\n",
       "                \n",
       "                    &plusmn; 0.0009\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                MultipleLines\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 99.34%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0001\n",
       "                \n",
       "                    &plusmn; 0.0006\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                StreamingTV\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 98.57%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0004\n",
       "                \n",
       "                    &plusmn; 0.0044\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                SeniorCitizen\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 97.68%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0009\n",
       "                \n",
       "                    &plusmn; 0.0033\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                Dependents\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 95.80%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0020\n",
       "                \n",
       "                    &plusmn; 0.0026\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                PaymentMethod_Credit card (automatic)\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 93.17%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0040\n",
       "                \n",
       "                    &plusmn; 0.0064\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                TotalCharges\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 93.17%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0040\n",
       "                \n",
       "                    &plusmn; 0.0039\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                Partner\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "        <tr style=\"background-color: hsl(0, 100.00%, 89.33%); border: none;\">\n",
       "            <td style=\"padding: 0 1em 0 0.5em; text-align: right; border: none;\">\n",
       "                -0.0075\n",
       "                \n",
       "                    &plusmn; 0.0033\n",
       "                \n",
       "            </td>\n",
       "            <td style=\"padding: 0 0.5em 0 0.5em; text-align: left; border: none;\">\n",
       "                PaymentMethod_Mailed check\n",
       "            </td>\n",
       "        </tr>\n",
       "    \n",
       "    \n",
       "    </tbody>\n",
       "</table>\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "    \n",
       "\n",
       "\n",
       "\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "perm = PermutationImportance(model, random_state=1).fit(test_x, test_y)\n",
    "eli5.show_weights(perm, feature_names = test_x.columns.tolist())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Visualizing how the partial dependance plots look for top features"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Internet Service: Fiber Optic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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
Download .txt
gitextract_o9jxgrhd/

├── Churn Prediction Model.ipynb
├── Customers Survival Analysis.ipynb
├── Exploratory Data Analysis.ipynb
├── Images/
│   └── README.md
├── LICENSE.md
├── Procfile
├── README.md
├── app.py
├── explainer.bz2
├── model.pkl
├── requirements.txt
├── survivemodel.pkl
└── templates/
    └── index.html
Download .txt
SYMBOL INDEX (2 symbols across 1 files)

FILE: app.py
  function home (line 19) | def home():
  function predict (line 23) | def predict():
Condensed preview — 13 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,033K chars).
[
  {
    "path": "Churn Prediction Model.ipynb",
    "chars": 935210,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Customer Churn Prediction\"\n   ]\n "
  },
  {
    "path": "Customers Survival Analysis.ipynb",
    "chars": 518470,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Customer Survival Analysis\"\n   ]\n"
  },
  {
    "path": "Exploratory Data Analysis.ipynb",
    "chars": 502068,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# EDA\"\n   ]\n  },\n  {\n   \"cell_type\""
  },
  {
    "path": "Images/README.md",
    "chars": 20,
    "preview": "Contains all images\n"
  },
  {
    "path": "LICENSE.md",
    "chars": 1067,
    "preview": "MIT License\n\nCopyright (c) 2020 Arch Desai\n\nPermission is hereby granted, free of charge, to any person obtaining a copy"
  },
  {
    "path": "Procfile",
    "chars": 23,
    "preview": "web: gunicorn app:app\r\n"
  },
  {
    "path": "README.md",
    "chars": 15123,
    "preview": "# Customer Survival Analysis and Churn Prediction\n\nApp: https://churn-prediction-app.herokuapp.com/\n\nCustomer attrition,"
  },
  {
    "path": "app.py",
    "chars": 9259,
    "preview": "import numpy as np\r\nimport pickle\r\nimport joblib\r\nimport matplotlib\r\nimport matplotlib.pyplot as plt\r\nfrom matplotlib.pa"
  },
  {
    "path": "requirements.txt",
    "chars": 318,
    "preview": "Click==7.0\nFlask==1.1.1\ngunicorn==19.9.0\nitsdangerous==1.1.0\nJinja2==2.10.1\nMarkupSafe==1.1.1\nWerkzeug==0.15.5\npandas==0"
  },
  {
    "path": "templates/index.html",
    "chars": 4488,
    "preview": "<!DOCTYPE html>\r\n<html >\r\n<head>\r\n  <meta charset=\"UTF-8\">\r\n  <title>Customer Churn Prediction</title>\r\n</head>\r\n\r\n<body"
  }
]

// ... and 3 more files (download for full content)

About this extraction

This page contains the full source code of the archd3sai/Customer-Survival-Analysis-and-Churn-Prediction GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 13 files (38.1 MB), approximately 1.1M tokens, and a symbol index with 2 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!