Lambda-School-Labs/allay-ds

View on GitHub
exploration/train_ml_models.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "# Train Hate Speech Recognition Models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "With the data cleaned and processed, this notebook implements model training on the data sets. The code in this notebook assumes that cleaned data is in the filepath `\"data/combined_deduped.csv\"`. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import spacy\n",
    "import matplotlib.pyplot as plt\n",
    "import wandb\n",
    "from sklearn.linear_model import LogisticRegression, SGDClassifier\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV, RandomizedSearchCV\n",
    "from sklearn.metrics import roc_curve, roc_auc_score, precision_recall_fscore_support, classification_report\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n",
    "from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier\n",
    "from sklearn.pipeline import Pipeline, make_pipeline\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.svm import SVC, LinearSVC\n",
    "from tensorflow import keras\n",
    "from wandb.keras import WandbCallback\n",
    "from tensorflow.keras import regularizers\n",
    "from xgboost import XGBClassifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "nlp = spacy.load(\"en_core_web_md\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Helper Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "We'll start by fitting basic models with default parameters. As machine learning models and neural networks have many hyperparameters that can be tweaked, these will serve as a baseline: combinations of hyperparameter settings that improve the model from this baseline should be investigated, while those that degrade model performance should be seen as less promising.\n",
    "\n",
    "As modeling is an iterative process, we start by establishing some functions to automate the repetitive aspects of establishing baselines."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "def reset_data_with_val():\n",
    "    \"\"\"\n",
    "    Loads data, returns training and validation data\"\"\"\n",
    "    tweets = pd.read_csv(\"data/combined_deduped.csv\")\n",
    "    train, test = train_test_split(tweets, test_size=.2, random_state=42)\n",
    "    train, val = train_test_split(train, test_size=.15, random_state=42)\n",
    "    \n",
    "    x_train, y_train, x_val, y_val = train[\"tweet\"], train[\"inappropriate\"], val[\"tweet\"], val[\"inappropriate\"]\n",
    "    \n",
    "    return x_train, y_train, x_val, y_val"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "def baseline_model(vect, clf, x_train, y_train, x_val, y_val, scaling=False):\n",
    "    \"\"\"Takes a text vectorizer, a classification model, and \n",
    "    data and outputs that model's score on the data.\n",
    "    \n",
    "    Sub-arguments can be passed to the arguments in the function: \n",
    "    for example, passing `vect = CountVectorizer(stop_words='english')`.\n",
    "    However, as this function doesn't return a fitted model, just model\n",
    "    scores, it is primarily intended to quickly test many basic \n",
    "    model archetypes.\n",
    "\n",
    "    Arguments:\n",
    "        vect {vectorizer} -- e.g. CountVectorizer(), TfidfVectorizer()\n",
    "        clf {classifier} -- eg RandomForest(), MultinomialNB()\n",
    "        x_train {array} -- features and values of the training set\n",
    "        y_train {1d array} -- target values for the training set\n",
    "        x_val {array} -- features and values of the validation set\n",
    "        y_val {1d array} -- target values for the validation set\n",
    "    \n",
    "    Keyword Arguments:\n",
    "        scaling {bool} -- scale data if required by model (default: {False})\n",
    "    \n",
    "    Returns:\n",
    "        accuracy, precision, recall, f1, roc_auc -- metrics of model performance\n",
    "    \"\"\"\n",
    "    x_train = vect.fit_transform(x_train)\n",
    "    x_val = vect.transform(x_val)\n",
    "    \n",
    "    if scaling == True:\n",
    "        scaler = StandardScaler(with_mean=False)\n",
    "        x_train = scaler.fit_transform(x_train)\n",
    "        x_val = scaler.fit_transform(x_val)\n",
    "        \n",
    "    clf.fit(x_train, y_train)\n",
    "    y_pred = clf.predict(x_val)\n",
    "    \n",
    "    accuracy = clf.score(x_val, y_val)\n",
    "    precision, recall, f1, other = precision_recall_fscore_support(y_val, \n",
    "                                                                   y_pred, \n",
    "                                                                   average='binary')\n",
    "    roc_auc = roc_auc_score(y_val, y_pred)\n",
    "\n",
    "    return accuracy, precision, recall, f1, roc_auc"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "def report_to_wandb(accuracy, precision, recall, f1, roc_auc):\n",
    "    \"\"\"Reports a dictionary summarizing model performance\n",
    "    to the \"Weights and Biases\" app associated with this project.\n",
    "    \n",
    "    Arguments:\n",
    "        accuracy {float} -- accuracy of tested model\n",
    "        precision {float} -- precision of tested model\n",
    "        recall {float} -- recall of tested model\n",
    "        f1 {float} -- f1-score of tested model\n",
    "        roc_auc {float} -- roc_auc score of tested model\n",
    "    \"\"\"\n",
    "    wandb.log({'accuracy':accuracy, 'recall':recall, \n",
    "               'f1':f1, 'precision':precision, \n",
    "               'roc_auc_score':roc_auc})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "x_train, y_train, x_val, y_val = reset_data_with_val()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "def implement_training(vect, clf, \n",
    "    x_train=x_train, y_train=y_train, \n",
    "    x_val=x_val, y_val=y_val):\n",
    "    \"\"\"This function initializes a weights and biases run, then calls the \n",
    "    helper functions in order to perform a full cycle of model training.\n",
    "\n",
    "    Note that attempting to define this function before x_train, y_train, \n",
    "    x_val, and y_val are assigned local variables will generate an error, as \n",
    "    they're called as the default arguments. These have been set as default\n",
    "    arguments for convenience when fitting multiple models. \n",
    "    \n",
    "    Arguments:\n",
    "        vect {Vectorizer} -- sklearn-compatible text vectorizer\n",
    "        clf {Classifier} -- sklearn-compatible classification model\n",
    "    \n",
    "    Keyword Arguments:\n",
    "        x_train {array} -- training features/values (default: {x_train})\n",
    "        y_train {1d array} -- training target values (default: {y_train})\n",
    "        x_val {array} -- validation features/values (default: {x_val})\n",
    "        y_val {1d array} -- validation target values (default: {y_val})\n",
    "    \"\"\"\n",
    "    wandb.init(project=\"allay-ds-23\")\n",
    "    accuracy, precision, recall, f1, roc_auc = baseline_model(vect, clf, \n",
    "                                        x_train, y_train, \n",
    "                                        x_val, y_val)\n",
    "    report_to_wandb(accuracy, precision, recall, f1, roc_auc)\n",
    "\n",
    "    return(\"Accuracy:\", accuracy, \"Precision:\", precision,\n",
    "        \"Recall:\", recall, \"F1:\", f1, \"ROC_AUC:\", roc_auc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "# Baseline ML Models"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Majority Classifier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "False    0.582441\n",
       "True     0.417559\n",
       "Name: inappropriate, dtype: float64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_val.value_counts(normalize=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "       False     0.5824    1.0000    0.7361     10223\n",
      "        True     0.0000    0.0000    0.0000      7329\n",
      "\n",
      "    accuracy                         0.5824     17552\n",
      "   macro avg     0.2912    0.5000    0.3681     17552\n",
      "weighted avg     0.3392    0.5824    0.4288     17552\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\ajenk\\.virtualenvs\\allay-ds-cRyEcJS9\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1272: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n"
     ]
    }
   ],
   "source": [
    "y_pred = y_val * 0\n",
    "print(classification_report(y_val, y_pred, digits=4))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = CountVectorizer()\n",
    "clf = LogisticRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/3iw8dreb\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/3iw8dreb</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\ajenk\\.virtualenvs\\allay-ds-cRyEcJS9\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:940: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
      "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
      "\n",
      "Increase the number of iterations (max_iter) or scale the data as shown in:\n",
      "    https://scikit-learn.org/stable/modules/preprocessing.html\n",
      "Please also refer to the documentation for alternative solver options:\n",
      "    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n",
      "  extra_warning_msg=_LOGISTIC_SOLVER_CONVERGENCE_MSG)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8650296262534184,\n",
       " 'Precision:',\n",
       " 0.8802514566084023,\n",
       " 'Recall:',\n",
       " 0.7833265111202073,\n",
       " 'F1:',\n",
       " 0.8289654176593747,\n",
       " 'ROC_AUC:',\n",
       " 0.8534650749868863)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = TfidfVectorizer()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.863320419325433,\n",
       " 0.8849156777014366,\n",
       " 0.7732296356938191,\n",
       " 0.8253112939634457,\n",
       " 0.8505686474468312)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "baseline_model(vect, clf, x_train, y_train, x_val, y_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/3mcw46pj\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/3mcw46pj</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.863320419325433,\n",
       " '/nPrecision:',\n",
       " 0.8849156777014366,\n",
       " '/nRecall:',\n",
       " 0.7732296356938191,\n",
       " '/nF1:',\n",
       " 0.8253112939634457,\n",
       " '/nROC_AUC:',\n",
       " 0.8505686474468312)"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Naive Bayes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = CountVectorizer()\n",
    "clf = MultinomialNB()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/2zh784do\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/2zh784do</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8469690063810392,\n",
       " 'Precision:',\n",
       " 0.8710244526130734,\n",
       " 'Recall:',\n",
       " 0.743621230727248,\n",
       " 'F1:',\n",
       " 0.8022964816723098,\n",
       " 'ROC_AUC:',\n",
       " 0.8323407924153701)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/37af9rkz\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/37af9rkz</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8229831358249772,\n",
       " 'Precision:',\n",
       " 0.9211891460494812,\n",
       " 'Recall:',\n",
       " 0.6299631600491199,\n",
       " 'F1:',\n",
       " 0.7482375820435944,\n",
       " 'ROC_AUC:',\n",
       " 0.7956623977884257)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vect = TfidfVectorizer()\n",
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = CountVectorizer()\n",
    "clf = LinearSVC()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/1myixgfe\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/1myixgfe</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\ajenk\\.virtualenvs\\allay-ds-cRyEcJS9\\lib\\site-packages\\sklearn\\svm\\_base.py:947: ConvergenceWarning: Liblinear failed to converge, increase the number of iterations.\n",
      "  \"the number of iterations.\", ConvergenceWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8507292616226071,\n",
       " 'Precision:',\n",
       " 0.8453865336658354,\n",
       " 'Recall:',\n",
       " 0.7863282848956201,\n",
       " 'F1:',\n",
       " 0.8147886328290682,\n",
       " 'ROC_AUC:',\n",
       " 0.8416137169367077)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = TfidfVectorizer()\n",
    "clf = LinearSVC()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/6j5wh8mg\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/6j5wh8mg</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8605287146763901,\n",
       " 'Precision:',\n",
       " 0.8562253685593344,\n",
       " 'Recall:',\n",
       " 0.8003820439350525,\n",
       " 'F1:',\n",
       " 0.8273624823695346,\n",
       " 'ROC_AUC:',\n",
       " 0.8520153396824827)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Random Forest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = CountVectorizer()\n",
    "clf = RandomForestClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/3w229j0j\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/3w229j0j</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8521536007292616,\n",
       " 'Precision:',\n",
       " 0.9043389135633755,\n",
       " 'Recall:',\n",
       " 0.7223359257743212,\n",
       " 'F1:',\n",
       " 0.8031555791549723,\n",
       " 'ROC_AUC:',\n",
       " 0.8337787425017551)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = TfidfVectorizer()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/189vdpvm\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/189vdpvm</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8327825888787602,\n",
       " 'Precision:',\n",
       " 0.8206363105662581,\n",
       " 'Recall:',\n",
       " 0.7672260881429935,\n",
       " 'F1:',\n",
       " 0.7930329313870671,\n",
       " 'ROC_AUC:',\n",
       " 0.8235034871899551)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "## Gradient-Boosted Trees"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = CountVectorizer()\n",
    "clf = XGBClassifier()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/2niyxkx4\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/2niyxkx4</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.8648587055606198,\n",
       " 'Precision:',\n",
       " 0.9335315725030611,\n",
       " 'Recall:',\n",
       " 0.7282030290626279,\n",
       " 'F1:',\n",
       " 0.8181818181818182,\n",
       " 'ROC_AUC:',\n",
       " 0.8455159721269317)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "vect = TfidfVectorizer()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "                Logging results to <a href=\"https://wandb.com\" target=\"_blank\">Weights & Biases</a> <a href=\"https://docs.wandb.com/integrations/jupyter.html\" target=\"_blank\">(Documentation)</a>.<br/>\n",
       "                Project page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23</a><br/>\n",
       "                Run page: <a href=\"https://app.wandb.ai/alexmjn/allay-ds-23/runs/3el65qwi\" target=\"_blank\">https://app.wandb.ai/alexmjn/allay-ds-23/runs/3el65qwi</a><br/>\n",
       "            "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "('Accuracy:',\n",
       " 0.85859161349134,\n",
       " 'Precision:',\n",
       " 0.9106931028639214,\n",
       " 'Recall:',\n",
       " 0.7332514667758221,\n",
       " 'F1:',\n",
       " 0.8123960695389266,\n",
       " 'ROC_AUC:',\n",
       " 0.8408505206323598)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "implement_training(vect, clf)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "# Performance Graph"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "Collapsed": "false"
   },
   "source": [
    "Our models are tracked to the website Weights and Biases (wandb.com). We'll be using that to systematically log model performance and improvement. For our baseline models, I've grabbed the data off Weights and Biases, dropped the models that either didn't finish or aren't part of the baseline, and graphed both by run number and by accuracy rank.\n",
    "\n",
    "These models are then compared to a baseline of .59 (majority-classifier model performance) and a target goal of .9 (what we think is a plausible score to shoot for with model tuning and improvement."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "results_table = pd.read_csv(\"wandb//wandb_export_2020-04-23T12_51_21.251-04_00.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {
    "Collapsed": "false"
   },
   "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>Name</th>\n",
       "      <th>_wandb</th>\n",
       "      <th>recall</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>precision</th>\n",
       "      <th>f1</th>\n",
       "      <th>roc_auc_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>playful-glade-20</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.798200</td>\n",
       "      <td>0.854300</td>\n",
       "      <td>0.844300</td>\n",
       "      <td>0.820600</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eager-snowflake-19</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.777700</td>\n",
       "      <td>0.844500</td>\n",
       "      <td>0.838200</td>\n",
       "      <td>0.806900</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>blooming-cosmos-18</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.783327</td>\n",
       "      <td>0.865030</td>\n",
       "      <td>0.880251</td>\n",
       "      <td>0.828965</td>\n",
       "      <td>0.853465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>revived-snowball-17</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.781962</td>\n",
       "      <td>0.866112</td>\n",
       "      <td>0.884004</td>\n",
       "      <td>0.829858</td>\n",
       "      <td>0.854201</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>fancy-dragon-16</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.733251</td>\n",
       "      <td>0.858592</td>\n",
       "      <td>0.910693</td>\n",
       "      <td>0.812396</td>\n",
       "      <td>0.840851</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Name  _wandb    recall  accuracy  precision        f1  \\\n",
       "0     playful-glade-20     NaN  0.798200  0.854300   0.844300  0.820600   \n",
       "1   eager-snowflake-19     NaN  0.777700  0.844500   0.838200  0.806900   \n",
       "2   blooming-cosmos-18     NaN  0.783327  0.865030   0.880251  0.828965   \n",
       "3  revived-snowball-17     NaN  0.781962  0.866112   0.884004  0.829858   \n",
       "4      fancy-dragon-16     NaN  0.733251  0.858592   0.910693  0.812396   \n",
       "\n",
       "   roc_auc_score  \n",
       "0            NaN  \n",
       "1            NaN  \n",
       "2       0.853465  \n",
       "3       0.854201  \n",
       "4       0.840851  "
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results_table.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {
    "Collapsed": "false"
   },
   "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>Name</th>\n",
       "      <th>recall</th>\n",
       "      <th>accuracy</th>\n",
       "      <th>precision</th>\n",
       "      <th>f1</th>\n",
       "      <th>run_number</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>playful-glade-20</td>\n",
       "      <td>0.798200</td>\n",
       "      <td>0.854300</td>\n",
       "      <td>0.844300</td>\n",
       "      <td>0.820600</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>eager-snowflake-19</td>\n",
       "      <td>0.777700</td>\n",
       "      <td>0.844500</td>\n",
       "      <td>0.838200</td>\n",
       "      <td>0.806900</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>fancy-dragon-16</td>\n",
       "      <td>0.733251</td>\n",
       "      <td>0.858592</td>\n",
       "      <td>0.910693</td>\n",
       "      <td>0.812396</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>fast-yogurt-15</td>\n",
       "      <td>0.728203</td>\n",
       "      <td>0.864859</td>\n",
       "      <td>0.933532</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>stellar-forest-14</td>\n",
       "      <td>0.767226</td>\n",
       "      <td>0.832783</td>\n",
       "      <td>0.820636</td>\n",
       "      <td>0.793033</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bright-frost-13</td>\n",
       "      <td>0.722336</td>\n",
       "      <td>0.852154</td>\n",
       "      <td>0.904339</td>\n",
       "      <td>0.803156</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>earthy-cherry-12</td>\n",
       "      <td>0.800382</td>\n",
       "      <td>0.860529</td>\n",
       "      <td>0.856225</td>\n",
       "      <td>0.827362</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>valiant-snow-11</td>\n",
       "      <td>0.786328</td>\n",
       "      <td>0.850729</td>\n",
       "      <td>0.845387</td>\n",
       "      <td>0.814789</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>radiant-gorge-9</td>\n",
       "      <td>0.629963</td>\n",
       "      <td>0.822983</td>\n",
       "      <td>0.921189</td>\n",
       "      <td>0.748238</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>morning-sun-8</td>\n",
       "      <td>0.743621</td>\n",
       "      <td>0.846969</td>\n",
       "      <td>0.871024</td>\n",
       "      <td>0.802296</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>stellar-dawn-7</td>\n",
       "      <td>0.773230</td>\n",
       "      <td>0.863320</td>\n",
       "      <td>0.884916</td>\n",
       "      <td>0.825311</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>fanciful-durian-6</td>\n",
       "      <td>0.783327</td>\n",
       "      <td>0.865030</td>\n",
       "      <td>0.880251</td>\n",
       "      <td>0.828965</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Name    recall  accuracy  precision        f1  run_number\n",
       "0     playful-glade-20  0.798200  0.854300   0.844300  0.820600          11\n",
       "1   eager-snowflake-19  0.777700  0.844500   0.838200  0.806900          10\n",
       "2      fancy-dragon-16  0.733251  0.858592   0.910693  0.812396           9\n",
       "3       fast-yogurt-15  0.728203  0.864859   0.933532  0.818182           8\n",
       "4    stellar-forest-14  0.767226  0.832783   0.820636  0.793033           7\n",
       "5      bright-frost-13  0.722336  0.852154   0.904339  0.803156           6\n",
       "6     earthy-cherry-12  0.800382  0.860529   0.856225  0.827362           5\n",
       "7      valiant-snow-11  0.786328  0.850729   0.845387  0.814789           4\n",
       "8      radiant-gorge-9  0.629963  0.822983   0.921189  0.748238           3\n",
       "9        morning-sun-8  0.743621  0.846969   0.871024  0.802296           2\n",
       "10      stellar-dawn-7  0.773230  0.863320   0.884916  0.825311           1\n",
       "11   fanciful-durian-6  0.783327  0.865030   0.880251  0.828965           0"
      ]
     },
     "execution_count": 176,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results_table = results_table[results_table.accuracy > .5]\n",
    "results_table = results_table.drop([2, 3, 16])\n",
    "results_table = results_table.drop([\"_wandb\", \"roc_auc_score\"], axis=1)\n",
    "results_table = results_table.reset_index().drop([\"index\"], axis=1)\n",
    "results_table = results_table.reset_index()\n",
    "results_table[\"run_number\"] = 11 - results_table[\"index\"]\n",
    "results_table = results_table.drop([\"index\"], axis = 1)\n",
    "\n",
    "results_table"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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2+Xj4yMOHToke859+/aJ0NDQCs8T+9crb5SIsmp79A0AolOnTiIvL09a98svv3S6nLe3txgzZoxsmk113itXrlwRXbt2rXA9++NfE6NvlD1fy3tOIYSYP3++UCgUFbazvONoz9noGxUp73166dIl0bFjx3Lb1q5dO5Geni5bb9myZU63S6vVit69ezs9zkLU/HGr6P8gAPHee+9Vat8SEdmw0CUR3fDsu26o1WqHiuc2BoNBVvAyKSlJuqodGRmJpKQkvPvuuxg4cCCCgoKgVqvh5+eHDh06YMaMGVLNAADo0KEDjhw5gtdffx29e/eGv78/1Go1AgMD0bVrV4eCaPPmzUNiYiKaNWsGjUaD8PBw/Oc//8G+fftcFjGrrF69emHLli3o27cvPDw84O3tjYEDB+LXX3+VpQ6XpdVqsWbNGqxbtw5jxoxBZGQkdDodPD090axZM0yaNElKFbfn7e2NqVOnyqZVp+uGzT333ANfX98Kn69FixZ4++23cc8996B169YIDAyESqWCl5cX2rVrh8cffxyHDh1CZGRktdtir2nTprLzxZYtYfPtt9/i4YcfRkhICLRaLWJjY/HWW29JtSjqk9dff13qeuJKbZ6j12Pu3Ln45JNPpBEl/Pz8MGrUKOzduxcdO3aULdu1a1ccO3YMCxYsQI8ePeDn5we1Wo3Q0FB07twZDz74IL7//nvMmTPHTVvjSKPRSNldixYtwu7du2V1Le6++25888036NKlC7RaLfz9/TFixAj89ttvLkdSqM57JTAwELt378aKFSswdOhQhISEQKPRwN/fH23btsVdd92FlStXuuwSVlfmzZuHffv2YerUqWjRogX0ej30ej1iYmLQv39/vPjiizh06JBDEdm60qhRI/z2229YsmQJ+vfvj4CAAKjVavj7+6NPnz5YtGiR0/fUAw88gPXr16N3797Q6/Xw8fHBsGHDsHPnTlnR5rJq+ri9/PLLePTRR9GtWzdERERAp9NBq9UiMjISo0ePxsaNG/Hwww9f1z4iopuPQohqliEnIiJy4YMPPsC//vUvANYUelvXFyIiIiIie6wpQURENSI9PR0nTpzA+fPnZQUubfUliIiIiIjKqvPuG9u3b8eIESMQEREBhUJRqcrUR44cQf/+/aHX6xEREYEXX3yx2uPMExFR7diwYQMGDBiAiRMnSkU+e/To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EBoa6vB8tnV69eolm3flyhVpXrdu3RAaGirN69u3L7y9vdGxY0fZOhs2bJDW6dmzp2ze0aNHcerUKQBoUNuUnp7ObWrA25SUlIRevXrdUNsE3HjH6WbbpqSkpBtum4Ab7zjdTNuUlJSE7t2731DbBNx4x+lm26akpKQbbpuAG+843WzblJSUdMNtE3DjHafa2KaKKER5fSBqWGpqKiIiIrB9+3b07dtXmv7CCy/gs88+w4kTJxzWEULgqaeewuLFi1FSUgIfHx9Mnz4d8+fPx969e9GtWzdp2ezsbOm+r69v7W5MDUtKSnI4GYjcieck1Uc8L6m+4TlJ9RHPS6qPeF7evCr6na6sy8YEBQVBpVI5REsuXbrkkD1ho1Ao8PrrryMvLw9nz55Fenq6FIhwlSVBRERERERERPVfnQYltFotunTpgs2bN8umb968Gb169Sp3XZVKhYiICGi1Wnz22Wfo2bMngoODa7O5RERERERERFSL6rSmBADMnDkTEydORLdu3dC7d28sXboUqampePjhhwEATz/9NPbt24eff/4ZgLXfypo1a5CQkIDi4mKsXLkSa9askQpsEBEREREREVHDVOdBibFjxyIjIwMLFixAWloa4uLi8OOPPyI6OhqAtXjlmTNnZOt89NFHePLJJyGEQM+ePfHLL7/IakkQERERERERUcNT50EJAHjkkUfwyCOPOJ1XdizUoKAg7Nmzpw5aRURERERERER1qU5rShARERERERER2TAoQURERERERERuwaAEEREREREREbkFgxJERERERERE5BYMShARERERERGRWzAoQURERERERERuwaAEEREREREREbkFgxJERERERERE5BYMShARERERERGRWzAoQURERERERERuwaAEEREREREREbkFgxJERERERERE5BYMShARERERERGRWzAoQURERERERERuoXZ3Awi4UmjCPwUK+GcZoVIAaqUCaqXC7j5KH1vvKxUKdzeZiIiIiOohIQRKLO5uBRFR5TEoUQ/870gmnj2oBw6ertTyCgAqJaBWKKSghS1gYR+8kAU2FOUvp1Yo7J4TULlYR/6c8uXkgRQX9xXlLyd7PYWi9PmdB2pUdtvPQA0RERHdrJKzjdh0Nh+bU/Kw9Vw+MosN0Px2HD5aFby1SvholaV/VXb3lfDWKOGjU1n/2i1jm2+dpoJW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vlFAQIAaNWqkJk2aKCAgQN9++22B++Xm5io6Olrr16+Xk5OTnJyc5OzsrJ9++sl6C0dRAVVR228Mgq67evVqvn4F/RkUdT0Vde4KFSpo0KBBioqKsi5MO2zYsJvuAwAoHKEEAAAmCwsLk7OzszIzM/XQQw8V2Gfr1q0aO3asevTooSZNmqhSpUpKT08v9JiNGzfWzz//rNTUVGvb0aNHlZaWpsaNG99Sfc7OzsrNzc3X/sADD6hy5cp6//339dlnnxUaqFz32GOPaePGjfkWCZSufdG/caHI606fPq0DBw5o0qRJ6tKlixo1aqTz588rJyfHpp+rq6t69Oihd955Rzt27NC+ffusCzhK0t13361nn31WsbGxCg0N1b/+9S97h59Py5YttW/fPtWvX1+1atVS/fr1rS97n0xxK/bs2aPc3Fz5+/tLki5evCjp2hfzGzk4OCgvL++mx4qIiNCyZcu0efNmNWzY8KZ9J0yYoLFjx6pu3brKy8uz+dKfnZ1d4DUhyTprZufOnUpKSrK+1q5dq02bNik1NVWNGzeWi4tLoTNHWrZsqd27dxe6Zoq3t7dOnDhhEyAkJSXddDySfddTUeeWpBEjRmjLli2KjIzU+fPn8z2yFQBgP0IJAABMZrFYtHv3bh07dkwuLi4F9mnQoIGWLFmi/fv3a8eOHerfv/9NF9Xr0qWL7r77bg0YMEC7du3Szp07NWDAALVs2VKdO3e+pfrq1q2r7du3KzU1VZmZmdYvvo6Ojho6dKgmTpyomjVrFjoV/7px48apffv2uu+++/Tee+8pKSlJx44d06pVq9SuXbsCn9pRtWpVeXl5acGCBTpy5Iji4uI0atQoOTn97w7U6OhoLVy4UHv27NGxY8e0aNEiVahQQQEBATp27Jiee+45JSQk6IcfftCWLVu0e/fuWw5mbvTss89q+/btGjVqlJKTk3XkyBGtXbtWI0eOLHLfsLAwmydM/FZKSopefvll7dy5U6mpqVq3bp369++vFi1aWBexvPfee1WtWjUNGTJE33//vQ4dOqR//OMfOnr0qPWpKZLUsGFDzZkzx/p5zJgxWrRokZYvX66qVasqIyNDGRkZysrKylfHxo0btX//fkVEREiSWrdureTkZH322Wf673//q+TkZOtior+1cOFCdevWTS1btlRgYKD11b17d911112KiopSpUqVFBERoYkTJ2rRokVKSUnR9u3bNW/ePEnXAiwfHx899NBDio+P17Fjx/Tpp59an74RGhqqM2fO6PXXX1dKSoo+/PBDffLJJ0X+/O25noo6t3Tt38d27drpH//4h/r06VPoIq0AgKIRSgAAUApUqlTppl9soqKilJWVpaCgIPXv319Dhw61WS/itywWi9asWSNvb2+FhoaqU6dO8vPz05o1awq9raMwzzzzjJydndW4cWN5e3vbrGMxdOhQZWdnF/jEkN9ycXHRl19+qeeee04ffvih7r33XrVs2VJvvvmmBg8eXOCTLhwcHLRixQrt3r1bgYGBGjNmjF555RWb8KZKlSr68MMP1b59ewUGBuo///mPVq1apXr16snNzU2HDh1S37591aBBAw0ePFgDBgzQs88+e0s/gxs1a9ZMX331lVJTUzVy5Ejdfffdmjhxol1rc6SkpNx0houzs7M2bdqk+++/X3fddZeeeuopde3aVRs3brSu/eDl5aWYmBhlZWWpc+fOatWqlb766iutWbPG5sknycnJNr/tv/5b/bCwMPn7+1tfv32066VLlzRmzBjNnz/fes6aNWvq/fff16hRo/TEE0/ogw8+UI0aNfLVf+LECa1du1Z9+vQpcHx9+/bVokWLlJeXp2nTpunZZ5/VK6+8okaNGumRRx6xPrLW3d1dcXFxqlmzpnr27KkmTZpoypQp1musUaNGmjdvnubPn69mzZppw4YNmjRpUpE/f3uup6LOfd2wYcOUnZ3NrRsA8AdZjN+76lQpdO7cOev7G5/n/Wewc+fOAh+RBpiFaxKlEdflzfn7+2vKlCk2CxUWt2+//VYhISE6evRogQt0lnVck+XXG2+8oQ8//FCHDh0yu5R8uC5RGnFdll9FfU/n6RsAAPzJXbx4UV9//bVOnDhRYk8AuHLlin788Ue98MIL6t27d7kMJFA+ZWVl6eDBg5o1a5aef/55s8sBgD89bt8AAOBPbv78+erfv78iIiLUrl27Ejnn8uXLddddd+n06dOaOXNmiZwTKA2efPJJhYSEKCQkxK51RAAAN8dMCQAA/uTGjRuncePGleg5w8PDFR4eXqLnBEqD6OhoRUdHm10GAJQZzJQAAAAAAACmIJQAAAAAAACmMCWUiIyMVL169eTq6qqgoCDFx8fftL9hGHr33XfVsGFDubi4yN/fX88991wJ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AEpAiYYSmZmZys3Nla+vr027r6+vMjIyCtzHw8NDb731llauXKl169YpLCxM/fr105IlS0qiZAAAAAAAUEyczDipxWKx+WwYRr6267y8vPT0009bP7dq1UqZmZl688039fe//92mb0FTQQAAAAAAQOlUojMlvLy85OjomG9WxMmTJ/PNnriZtm3b6vDhw7e7PAAAAAAAUIJKNJRwdnZWUFCQNmzYYNO+YcMGBQcH232cpKQk+fv73+7yAAAAAABACSrx2zcmTJiggQMHqk2bNgoJCdH777+vtLQ0jRo1SpI0ceJEbd++XZs2bZIk/etf/1KFChXUokULOTg46LPPPtPcuXP1xhtvlHTpAAAAAADgNirRmRKS1K9fP7377rt69dVX1bx5c23dulXr1q1TnTp1JEnp6elKSUmx2efVV19Vq1at1Lp1a3300UeKiorS+PHjS7r0YhEZGal69erJ1dVVQUFBio+PN7sklGPTpk1T69atVblyZXl7e6tnz57au3ev2WUBVq+//rosFouefPJJs0tBOZeenq7BgwfL29tbrq6uaty4seLi4swuC+VYbm6uJk+ebP3/ynr16umFF15QTk6O2aWhnPjqq6/017/+VTVr1pTFYlF0dLTNdsMwNHXqVNWoUUMVK1ZUaGio9u3bZ06xKFVKPJSQpNGjRys1NVVXrlzRrl271KFDB+u26OhopaamWj8PHjxY+/fv14ULF/Trr79q586d+Ra4/LNasWKFIiIiNGnSJCUmJio4OFjdunXT8ePHzS4N5VRsbKxGjx6thIQEbd68WU5OTurSpYvOnDljdmmAvvnmGy1YsEDNmjUzuxSUc2fPnlVISIgMw9Dnn3+uAwcOaPbs2fLx8TG7NJRjb7zxhubOnav33ntPBw8e1KxZszR37lxNmzbN7NJQTmRlZSkwMFCzZs1SxYoV821/88039fbbb2v27NnasWOHfHx8dN999+n8+fMmVIvSxGIYhmF2EeVV27Zt1axZMy1YsMDaFhAQoD59+vAfEJQKWVlZ8vT01Jo1a9SzZ0+zy0E5du7cObVs2VILFizQyy+/rMDAQM2ZM8fsslBOTZo0SXFxcfr666/NLgWwevDBB1W9enX961//srYNHjxYp0+f1tq1a02sDOWRh4eH5syZo/DwcEnXZknUqFFDTz75pJ5//nlJ0qVLl+Tj46O33npLI0eONLFamM2UmRKQsrOztWvXLnXt2tWmvWvXrkpISDCpKsDW+fPnlZeXp6pVq5pdCsq5xx9/XH369FHnzp3NLgXQmjVr1LZtW/Xr108+Pj5q3ry55syZI37PAzO1a9dOW7Zs0cGDByVJ+/fv1+bNm9W9e3eTKwOkY8eOKSMjw+a7T8WKFdWhQwe++6DkF7rENZmZmcrNzc33KFRfX19t3LjRpKoAWxEREWrevLnuvfdes0tBObZgwQIdOXJEixcvNrsUQJJ09OhRRUZGavz48XruueeUlJSksWPHShLrncA0zz77rM6fP6/GjRvL0dFROTk5ev755zV69GizSwOUkZEhSQV+9/n555/NKAmlCKGEySwWi81nwzDytQFmmDBhgrZu3aqtW7fK0dHR7HJQTiUnJ2vSpEmKj4+Xs7Oz2eUAkqS8vDy1atXKeqtlixYtdPjwYc2dO5dQAqZZsWKF/v3vf2vZsmVq0qSJkpKSFBERoXr16mnYsGFmlwdI4rsPCsbtGybx8vKSo6OjNTW87uTJk/kSRKCkjR8/XsuXL9fmzZt15513ml0OyrFt27YpMzNTgYGBcnJykpOTk+Li4hQZGSknJydduXLF7BJRDvn7+6tx48Y2bY0aNWKhapjqH//4h5555hn1799fTZs21cCBAzVhwgTWKUOp4OfnJ0l890GBCCVM4uzsrKCgIG3YsMGmfcOGDQoODjapKuDaLRvLli3T5s2b1bBhQ7PLQTn30EMPac+ePUpKSrK+WrVqpf79+yspKYnZEzBFSEiIkpOTbdoOHTpkfbw5YIaLFy/mm9no6OiovLw8kyoC/qdevXry8/Oz+e5z+fJlxcfH890H3L5hpgkTJmjgwIFq06aNQkJC9P777ystLU2jRo0yuzSUU2PGjNHixYu1Zs0aVa1a1Zpme3h4yMPDw+TqUB5VqVJFVapUsWlzd3dXtWrVFBgYaFJVKO/Gjx+v4OBgvfbaa+rXr58SExP13nvv6fXXXze7NJRjPXv21PTp01WvXj01adJEiYmJmjlzpgYNGmR2aSgnsrKydOTIEUnXbnM7fvy4kpKSVK1aNdWuXVvjxo3Ta6+9poYNG6pBgwZ69dVX5eHhoccee8zkymE2HglqssjISL355ptKT09XYGCg3nnnHXXo0MHsslBOFXZP35QpUzR16tSSLQYoRGhoKI8Ehek+//xzTZo0ScnJyapdu7aefPJJjR07lnujYZrz589r8uTJWr16tU6ePCl/f3/1799fL774olxdXc0uD+VAbGysOnXqlK998ODBio6OlmEYeumll/TBBx/ol19+Udu2bTV37lx+yQBCCQAAAAAAYA7WlAAAAAAAAKYglAAAAAAAAKYglAAAAAAAAKYglAAAAAAAAKYglAAAAAAAAKYglAAAAAAAAKYglAAAoIwIDw+XxWKxeVWuXFnBwcFavny5aXVNnTrVWo+/v78uX75s3RYdHW3dtmTJkhKvLTQ0VBaLRXXr1i3xcwMAAEIJAADKtPPnz2vbtm167LHHtGLFCrPLUUZGhqKioswuAwAAlBKEEgAAlEFbtmzR5cuXNW3aNGvb/PnzTazof2bMmKGcnByzyyhxN84QAQAA1xBKAABQRrm4uGjMmDHWzz/++KP1fWxsrPW2iejoaGv7jbeAXHfj7RdxcXHq1auX3N3dVadOHc2YMeOWanJ0dFRqaqqWLVtWaJ/U1FTr+aZOnVpgHampqZJsb//4+OOP9fDDD8vNzU133XWX1q1bp0uXLumJJ56Qp6dnkfVu27ZNbdq0kaurqxo2bKhPPvnEZnteXp7mzJmjFi1ayM3NTR4eHgoNDdXGjRtt+t14S8j69et19913q0KFCoqJibmlnxUAAOUBoQQAAGWYYRjW9z4+Pn/4eL169dKnn36qixcv6vjx4/rnP/95S1+2+/btK0maPn26TW23w6hRo7R69WpdunRJhw4d0iOPPKJevXrp/fff16+//nrTek+fPq377rtPO3bs0JUrV5ScnKx+/fpp69at1j7h4eEaO3askpKSdOnSJV24cEFxcXHq2rWrVq5cme+Yp06dUq9evbR79+5yOTMEAAB7EEoAAFBGXblyRZGRkdbPffr0+cPHbNiwoX7++WetX7/e2vbbGQU3M2zYMPn6+urAgQNavXr1H67nRrVr11ZaWprmzJkj6drtEt9++6127typHTt2WGd/FFRvVlaWRo0apbNnz2rVqlWyWCzKy8vTlClTJEnx8fFavHixJOm1117T+fPnlZ6ertDQUBmGofHjxysvL8/mmBcvXlT37t2Vnp6ujIwMBQcH39bxAgBQFhBKAABQBnXq1Emurq6aOHGinJycNH78eD311FN/+LhTpkxRjRo11LVrV+vMixtvCymKq6urxo8fL0k2613cDmPHjpW/v7/CwsKsbb169VJQUJBatWolPz+/Qut1dnbWK6+8Ik9PT/Xu3Vvt2rWTJCUkJMgwDH3xxRfWvs8//7wqVaokf39/xcbGSpLS0tKUnJxsc0yLxaL3339ffn5+8vX1vS0zVQAAKGsIJQAAKOMMw1BWVpZdfXNzc2+6PSAgwPre1dVV0rUZGbdi9OjRqlKlinbu3Kkvv/zS7v2Kqq127do2dd3YJl0LHqSC661evboqVqxo/VyzZk1J12ZbnDlzRqdOnSqyvjNnzth89vHxIYgAAKAIhBIAAJRBW7Zs0alTp/TQQw8pNzdXCxYs0DvvvGPd7uLiYn1/41Mhri8gWRgnJyfr+xsXw7wVlSpV0pNPPilJBa7FcDtqu1lbQU6fPm1zrp9//lnStYCjWrVq8vLysm5LSkqSYRg2r7y8PIWEhNgc88ZwBAAAFIxQAgCAMsrLy0sLFy5UpUqVJEmvvvqqzp07J0m64447rP2+/PJLGYahzZs36+uvvy6R2iIiIuTu7l7g7AdfX19VqFBB0rVw5erVq9q7d6/WrFlTbPVkZ2frxRdf1K+//qrVq1dbF7gMDg6WxWLRAw88YO07btw4HTlyRNnZ2UpOTtbUqVOtC3gCAIBbQygBAEAZVr16dY0dO1aSdPbsWc2cOVOSVKtWLbVp00aStHr1alWuXFlhYWEl9tt9Ly8vjRgxosBtDg4O6t27t/tvHBUAAAE6SURBVCRp+/btqlq1qpo1a1bk7Rt/hIeHhyIjI+Xp6amHH35YhmHIwcFBL730kiSpY8eO+tvf/ibp2uNUAwIC5OLiooYNG+qll15SZmZmsdUGAEBZRigBAEAZ9/TTT1tnS7z77rv65ZdfJEnLly9XWFiY3N3d5eXlpXfeeUePPvpoidX1zDPPWNd5+K05c+aod+/eqly5sipVqqRJkyZZF8gsDtWrV9eXX36p1q1by8XFRQ0aNNCKFSusC15K0pIlS/Tee++pRYsWcnV1lYeHhxo2bKjHH39cr732WrHVBgBAWWYxbvdDwgEAAAAAAOzATAkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGAKQgkAAAAAAGCK/wMKYlPelBoWogAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (16, 6))\n",
    "plt.style.use(\"fivethirtyeight\")\n",
    "fig.patch.set(facecolor=\"white\")\n",
    "ax.set(facecolor=\"white\")\n",
    "\n",
    "ax.plot(results_table[\"run_number\"], results_table[\"accuracy\"])\n",
    "ax.axhline(y = .582, linestyle='dotted', linewidth=2.5, color='black')\n",
    "ax.axhline(y = .9, linestyle='dotted', linewidth=2.5 ,color='black')\n",
    "ax.set_yticks([.5, .6, .7, .8, .9, 1])\n",
    "\n",
    "ax.set_xlabel(\"Run Number\", fontweight = \"bold\", size = 15)\n",
    "ax.set_ylabel(\"Accuracy\", fontweight = \"bold\", size = 15)\n",
    "ax.set_title(\"Accuracy vs Run Number: Baseline Models\", fontweight = \"bold\", size = 20)\n",
    "ax.annotate('Target Accuracy: 90%', xy=(5, .925))\n",
    "ax.annotate('Majority Classifier: 58.2% Accuracy', xy=(4.6, .615))\n",
    "\n",
    "plt.savefig(\"AccuracyVsRun\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [],
   "source": [
    "results_table = results_table.sort_values(by = [\"accuracy\"])\n",
    "results_table= results_table.reset_index().reset_index()\n",
    "results_table[\"model_rank\"] = results_table[\"level_0\"]\n",
    "results_table = results_table.drop([\"level_0\", \"index\"], axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {
    "Collapsed": "false"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABCUAAAGlCAYAAADNgEztAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3hUVf7H8c+kF3pPkCYgQbpEmgQCohgsLCjIqkBouor+QKywK8UGGsUFXcQVEMW6oLjLolQpoQiE4gLCggFBloRmpCWQMuf3R8hlbjKTBEmYEN6v55knc0+599wyA/c755zrMMYYAQAAAAAAXGE+3m4AAAAAAAC4NhGUAAAAAAAAXkFQAgAAAAAAeAVBCQAAAAAA4BUEJQAAAAAAgFcQlAAAAAAAAF5BUAIAgFJi/Pjxcjgc1uty/fzzz7b1zZ49+/IbWcKsXLnSto8rV670dpOuWrGxsdZxrFu3ri2vbt26Vl5sbKxX2ldauF6v48ePv+z15XfeAOBKICgBAJLuuece23/0HA6HduzY4e1moQTJfcPvcDg0cuRIt2W3bt2ap2x0dPSVbbAX5Q5m5Lx8fHwUGhqqhg0b6qGHHtKaNWu83VSviI6Odnt8AgMDVb16dXXq1EkTJ07UyZMnvd3Ua07ucxIUFKQjR464Levu3w2CWgBw6QhKALjmJScn69tvv82TPnPmTC+0BleTWbNmub1xfPPNN73QmpLPGKPU1FT99NNP+uSTT9SpUyd98MEH3m5WiZGenq6jR48qPj5eY8aMUdu2bXXq1ClvN6tI/PnPf1ZcXJzi4uLUr18/bzen0M6fP6+//e1vedL37Nmjf//7315oEQCUPgQlAFzzPvzwQ2VmZuZJ//jjj5Wenu6FFhWPc+fOKSMjw9vNKFVOnz6tGTNm2NIOHTqkf/zjH15qUckUGRmpuLg4vfTSS+rRo4eVbozRc889J6fT6cXWeV/Ozfq4cePUsGFDK/2///1vqQnaDBs2TE8//bSefvpp3XHHHd5uziWZPn26zp07Z0t76623ZIzxUosAoHQhKAHgmjdr1izr/Q033GC9P378uP71r395rHf+/HlNnz5d3bp1U7Vq1RQQEKAqVaqodevWeuqpp/IENE6dOqW4uDhFRUWpcuXKCggIUPXq1dWhQwe9+OKLVrmCxri7dv3OPSQg91jj1atXq1u3bqpQoYKCg4P1v//9T1L2TVCvXr3UqFEjValSRf7+/ipbtqyaN2+uUaNG6dChQx73e+HChbrvvvtUp04dBQcHq1y5coqIiNCQIUOUmJiozMxM1apVy2rHk08+mWcds2fPtvJ9fX3z3Z7T6bSNR3/kkUfylPnqq69s+759+3ZJUkpKiv785z+rZcuWKleunPz9/VWlShU1adJEDz30UJ6AwqXw9fWVJE2dOlVZWVlW+tSpU63gT04ZT9LT0zV9+nR16dLFOg+VK1dW586d9c477+j8+fNu6y1evFhRUVEKDQ1VxYoVdc899+g///lPgW3OyMjQjBkz1K1bN1WtWtW6Zm+//XbNnTu3sLt+yZo0aaKnn35af/nLX7Rw4UK1bdvWyjt27JiOHTtmKz9r1iz169dPTZo0sT5bZcqUUePGjfXII49o165debaRe3jN+fPnNXHiREVERCgwMFA1atTQn/70p0vqefDdd98pNDTUWmenTp2s+q7XsMPh0M8///z7Do5k3ayPHz9en332mS0v976uXLlSQ4cOVWRkpMLDwxUcHKygoCDVrl1bvXv31pIlS9xuY8mSJerZs6dq1qypwMBAhYSEqHbt2urSpYueffZZ7dmzJ0+dXbt26dFHH1VERIRCQ0MVHBysRo0a6cknn7S+SwrL05wS7uYtWb58uW699VaVK1dOoaGh6tKli77//nu36z179qwmT56sjh07qlKlStb3as+ePbV06dJLamNuOZ/fY8eOac6cOVb6iRMn9OGHH9rK5GfHjh16+OGHdcMNNygkJETBwcFq0KCBhgwZoh9++MFtnZMnT2rUqFGqVauWgoKCFBERoddee61QgeWiPG//+9//NGLECN14440KDQ21jm/Lli01ePBgffnll5e0PgBwywDANWz16tVGkvX6/PPPTaNGjazlO+64w229X375xTRp0sRWN/crJSXFKv/DDz+YWrVqeSxbvnx5q+yKFStseStWrLBtu3PnzlZe586dbXmu9dq3b298fX1tafv37zfGGFO5cuV8216xYkWzc+dO27rT09PNfffdl2+9+fPnG2OMefXVV620SpUqmbS0NNu6unfvbuXHxMQUeJ7Gjx9va9v58+dt+ffee6+V36ZNG2OMMefOnTNNmzbNt7116tQpcNs5xo0bZ6vrus0vvvjCGGPM6dOnTYUKFYwkExYWZtq3b+/xXB07dszcdNNN+bavZcuW5ujRo7Z6H3zwgXE4HHnKBgcHm27dutnSXJ04ccLcfPPN+W7vj3/8o8nKyrLq7N+/35b/wQcfFOpY5a43cOBAW37v3r2tPB8fnzzns3Xr1vm2MzAwMM/nIvf5iYqKclu3S5cutnqePm/Lly83ISEhtu+C1NRU23lw99kqDNfPsOt5OnPmjBk7dqwtb8KECba6Tz31VL7HRpJ59dVXbXU+/vjjAuvkPrczZswwAQEB+X5HrFmzxlZn4MCBHj9bderUcXs95L5WOnbs6PH63rVrl22diYmJpmHDhvnu17PPPlvo82KM/Tu0R48eJigoyEgyN954o3E6ncYYY1566SW33wOu10+O9957z/j7+3tsn5+fn5k2bZqtzqlTp0zz5s3dlr/nnntsy+PGjSu283bs2DETFhaW7/HN/b0GAL+HnwDgGuY6b0TZsmV1zz33aPfu3daM5kuWLNGhQ4d03XXXWeWcTqd69uypnTt3WmmNGzdWTEyMgoODtWPHDn3zzTdW3tmzZ9WjRw/bL1Q333yzunbtKknasmWLEhISinzf1q9fr5CQED3wwAOqXbu2tm/fLn9/f0nSddddp+joaNWpU0cVK1aUw+Gwhh38+uuvSklJ0bPPPmsbM/3MM89o3rx51nKlSpXUt29fhYWF6aeffrKVffjhh/XSSy8pLS1Nv/76q+bOnav+/ftLyu6Bsnz5cqvs0KFDC9yXwYMH68UXX5TT6VRKSooWLlyoXr16Scr+RXHhwoVW2WHDhkmSVqxYYU1W6uPjo/79+6tRo0ZKSUnRwYMHL3uSxREjRuif//ynMjMzNXnyZPXt21czZ87Ub7/9Jkl6/PHHPf5qLUn9+/fXli1brOXu3burXbt22rRpk3X9bNu2TQ8++KC1nqSkJA0fPtzqNu7v76/Y2FhVrVpV//jHP7Rs2TKP2xswYIA2bdokSQoKClK/fv3UoEED7dy5U1988YWcTqc+++wzNW3aVGPGjLmsY+PJuXPntG7dOtsv2Pfdd58CAgJs5apWraq77rpLDRo0UMWKFeXv76/k5GTNnz9fv/zyi86fP6/HH38838lo4+Pj1atXL91444365JNPrJ4MK1as0IYNG2y9NXL77rvvdPfddys1NdVq4yeffJKnnUXF05NSqlevriFDhtjSQkNDFRUVpebNm6tSpUoKCQnRyZMntWzZMut7ZNy4cRo4cKDCw8MlSW+//bZVv1GjRurTp48CAgJ06NAh7dq1S+vXr7dtY8OGDXr44YetYTXNmjVTz549ZYzR559/rsTERKWkpKhXr17au3evypcvX2THYs2aNYqIiFDv3r21bds267OQlpamKVOm6N1335WU/T2cs31JKleunB588EGFh4dr48aNWrBggSTp9ddfV4sWLfTAAw9ccluqVq2q/v376/3339ePP/6oxYsXq0uXLtYcExUrVtSgQYM89hZYt26dHn30Ues4VqlSRf3795evr68++ugjHT16VJmZmRo+fLiaNWumjh07SpLGjh1r6/nUsmVL3X333UpMTMzTk8ZVUZ+3efPmKSkpSVL2d8agQYNUq1YtHTt2TAcOHNCqVasKeSQBoABeDooAgNecOnXK9kto//79jTHG7Nmzx/ZL0EsvvWSr9+9//zvPL1fp6em2MgcOHLDS3nnnHVv5xx57zPrFLcdPP/1kvS+qnhK+vr4mISEh3/1fvHixee+998zkyZNNXFyc6dmzp+3X6Jx9SElJsf3aV7t27Ty/4J8+fdocOXLEWh42bJhV/pZbbrHSp0+fbqVXq1Ytz7Hz5I477rDq9e7d20qfOXOmlV6mTBlz+vRpY4wx8+fPt9IjIiLyHHNj7Me9ILl/id+/f7/p16+ftbx69WpTr149I8mEhISYEydOeDxX//nPf2zrevDBB23bGjBggC1/y5YtxhhjJk2aZEufNWuWVSclJcVUqlTJlp9j+/bttvScnh05nn32WSuvUqVKJjMz0xhTdD0lPL3+8Ic/mN9++83tOtLS0syKFSvMjBkzzFtvvWXi4uLMoEGDbPUPHjzo8fyMHDnSytu2bZstb+rUqVZe7s/bCy+8YPteiI2NtY6Hq6LsKeHuVaZMGbN69Wq39Z1Op0lISDAfffSRmTJliomLizMvv/yyrf5HH31klW/RooWV/tlnn+VZ38mTJ22fXddf/1u0aGHryXLixAmr94Ak89Zbb1l5RdFTolatWubUqVNWfqtWray8m266yUpfsGCBrd6GDRts2+vbt69tHwrLdZ0DBw40u3btsnpu3Hbbbbbvm+eeey7f72vXHkG+vr62nh579uwxfn5+tn9HjDEmIyPDlC1b1kq/4YYbzLlz56x6L774om17rj0livq8vfXWW1Z69+7d8xyrrKwsk5iYWOhjCwCeEJQAcM167733bP+5W7RokZUXGRlppV9//fW2G1rXGzhJZtu2bflux/U/x5J9WIc7RRWUuOuuu9yuPysry4wePdoEBgYWeGN0+PBhY4wx33zzjS39r3/9a777YIwxO3bssNXZsWOHMcaY6OhoK+2ZZ54pcD055s2bZ9ULDAy0jmPXrl2t9CFDhljlDx06ZIKDg628evXqmV69epmnn37azJ492/z888+F3rYx7oMSmzZtspavu+466/2jjz5qjPF8rqZNm2Zb17Jly2zbWrlypS3/7bffNsbYbzp8fX3zBHRy37R72l5Br+3btxtjijco0bx5c2s7uf31r3815cqVK3Ad69at83h+9uzZY+WlpaXZ8lyHROT+vLm+nnjiCbfBrMuVOygRFxdn4uLizIQJE2yfj4CAALNgwQJb3WXLllnBr/xerkM4nnjiCdtnp1OnTmbw4MFm0qRJZtmyZXmuo2rVqhX6Wrn33nutekURlBgzZoyt3v3332/7DOfI/T1c0Ms10JEf1zo57ezRo4eVVrNmTSPJ+Pv7m0OHDuX7fe16HDt27JhnW67nunLlysaYvAHEF154wVbnwIEDtnzXoERRn7eEhATbUJrGjRubPn36mNGjR5tPP/3UJCcnF+qYAkBBmOgSwDXLdYLLatWqqVu3btaya1ffffv22Sab/PXXX23rqVevXr7bcS1fsWJFVahQ4ZLaaXLN8O5p8sPcIiIi3Ka/8847mjhxYqHWk1PmUvdZyp7c8NZbb7WW33vvPSUlJWn16tVWWu6u6fm55557VK1aNatdc+fO1eHDh23nJmfohiTVrFlTH3/8sWrUqCFJ2r9/v+bPn6833nhDsbGxqlevngYMGHBZM+hHRkYqKipKkqzJOh0Oh0aOHJlvvdzHM6eNnpZzyucMDZFkDWtwVb169UJtryC5J568XJGRkXr99df18MMPKygoSJL0n//8R1FRUUpMTLSV/de//qWRI0cWakLK/K7hunXrWu8DAwNteYV92sf111/vcWhFUcqZ6HLs2LFasWKFOnXqJCl7ItSHH37YmjT38OHD6tmzp/bv31/gOl2PzauvvqqePXtaE4CuXr1as2bN0vPPP69u3bqpdu3aWrt2rVX+Uq6Xor5WXM+bZD93ruftUq/p48eP/+42PfXUU9b7nGF4ffv2Vc2aNfOt59rG3J/p3GkpKSmS7J9xKe9n2tNnPPf2ClKY89a6dWu988471r9Zu3bt0ty5czVx4kQ98MADqlmzpkaPHl3obQKAJ8wpAeCatHPnTm3YsMFaPnr0qPz8PH8lzpw5U126dJGUPZeCq/3796tFixYe67qWT0lJ0W+//ZZvYMLHxx4vTktLs947nc48N3GehIaGuk3//PPPrffh4eH68ssv1apVKwUGBmratGkaPnx4vvsgqVA3RZI0cuRIa/6IOXPmKDw83Lqx6Nixoxo1alSo9UjZ8ycMGDBAb7zxhqTsR7aeOnXKWl/Tpk3zzBPQu3dv9ezZU5s3b9b27duVmJioLVu2aPHixTLGaM6cOerWrZsGDBhQ6HbkNmrUKMXHx1vLd911l+0pLu7kPp7Jyclq0qSJbdldedfrJiUlRRkZGbbAxJEjRwq1veeee05VqlTx2L769evn2/5L1aRJEz3zzDOSpJiYGGs+kN9++01PPPGEbQ4W1+szNDRU8+bNU+fOnRUcHKxvvvlGd955Z6G26XpcLiWw0LhxY+uJF08++aSCg4PdPvGlOLVt29YK3iUlJWn37t1q3ry5/v3vf+vs2bNWubi4OA0ZMkQVK1ZUamqqx898mTJl9PXXX+vIkSP6/vvvtXfvXu3du1cLFixQUlKSkpOT1b9/f+3bt09S9vVy9OhRSVKrVq3ynY/Bdb6dopA70Obp3Lle0w6HQ6+++mq+3+EVK1b83W3q2rWrWrZsqW3btllpo0aNKrCe63HM/ZnOnZbTvtz/NuT+THv6jOfeXlGdt8cee0xDhgzRxo0b9eOPPyoxMVHr1q3T2rVrlZWVpUmTJikmJsYKpAHA7+LlnhoA4BVPPvnkJXX9DQ4Otsa+555T4g9/+IPJyMiwrf/QoUMe55Rw1yV837591vsffvjBY/dd1/kYpPyHb+SelT2H62z1d999t5WelZVl604sXRwnn3tOiTp16pjjx4/b1nv27FnbuHRjsse+N2jQwKrnOqZ59uzZHs6OZ7t377bqOxwOU7duXWs595CSlJQUj+OdmzVrZtV7/PHHC7Vtd8M3jMk+bq7H1LX7tqfhG7nPcXHPKZF7DouxY8e63cekpCTz1VdfWcvF9fQN16evSLLNnXDbbbdZ6c2aNbPV69+/v8eu8rnPT26ePhu5u98vWbLExMTE2K4zd9dqcTx9w1N+ztwwr7zyii39xIkTVh3XuQ5y7+P27dtt8xLk+PLLL211cj7TrnMhVK9e3SQlJeWpm5WVZZYsWWL77iqK4Ru5rzFP6/zXv/7l8bPgat++fbaheQXxdN1+9NFHbj/L+Q3f6NWrl5V+JeaUKOrzdvjwYWsInyun02nKly9v1XnjjTcKc2gBwCN6SgC45qSnp9ueOV+tWjWrF4SrY8eO6bvvvpOU3Vvh008/1aOPPqqYmBi1atVKW7dulSR9/fXXatGihXr06KGQkBDt3r1b//znP5WcnKwKFSpo4MCBmjhxotXt9+2339bGjRvVtWtXORwObd++XevWrbO6F0dERKhcuXJW9/VXXnlFW7duVVpamtWey9GoUSNrxvqFCxdq2LBhqlmzphYuXOjxKSAVKlTQY489pilTpkiSDhw4oIiICPXp00dhYWE6cOCAFixYoPfee09/+MMfrHoOh0NPPPGERowYISn76QtS9kz5ffr0+V1t79ixo9asWSNjjPVEhcDAQOvpHjl++ukn3XzzzWrRooVat26tsLAwhYSEaNu2bdq+fbtVLncvgkvl4+OjL7/8UomJifLz81N0dHSBdZo3b67bb7/deqrGJ598ouPHj6tdu3ZKSEiwPU3k1ltvVatWrSRlP7FjwoQJVu+ZRx55ROvXr7eevuGp+3azZs0UExOjb7/9VpL04osvas2aNerQoYOCg4N1+PBhJSQkaNOmTYqKirJ6MhSXsWPHavHixdbyhAkTrCeHNGrUyHo6x/bt23X//feradOmWrlyZZFc/wXx9/fXvHnzdPvtt2vt2rUyxmjw4MEKDAxUv379imWbOb1/0tLStHLlSttTDcqXL6+mTZtKUp6eRT169NCdd96pvXv36tNPP/W4/ueff17x8fHq2rWrateurerVq+vUqVO2JzkEBgYqJCREUvZwkq+//lpOp1NHjhxRs2bNdN9996l27dpKTU3V7t27tWrVKh07dkwrVqwo1HCuotajRw81bdrUegLLsGHD9PXXX6tVq1by8/PTL7/8og0bNuiHH37QwIED1b1798vaXr9+/VS2bFlJss5HQZ566il9/fXXMsYoKytLUVFRGjBggHx8fPTRRx8pMzNTUvb3ZM4QET8/Pw0aNEhTp06VJO3Zs0ft2rXT3XffrX379uV7nov6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kZH64x//qHLlymn//v2SpDFjxuihhx7SjTfeWGB7AADwhKAEAACwOXPmjGJiYrR06VL98MMPuvfee9W7d2/t3r3bVm7y5MmKiIhQQkKCXn31Va1fv15Dhw7V8OHDtW3bNt1zzz0aN26crc7ixYv14IMP6vHHH9fOnTs1a9YszZs3T2PGjJGUPRTjuuuu09ixY61eG/n54IMPdPvtt6ty5crq37+/ZsyYYctftGiRevbsqdtuu02bN2/WihUr1LlzZzmdTknSwIED9dFHH2ny5MnatWuXZs6caQVpLsVzzz2nl19+Wbt371bbtm0LdQw9bdvhcGjIkCGaNWuWbRuzZs1Sy5YtddNNNyk2NlZ169b12J7MzExlZWUpKCjIlh4cHKw1a9ZIkvbv36/k5GTdfvvttvxOnTpp3bp1kqQWLVooISFBKSkp2rx5s9LS0tSgQQN9//33WrFihXXeAAD43Uwp8ttvv1mvq82mTZu83QTAhmsSJRHXZfGYO3euKei/BG3btjUvvfSStVynTh1z11132cr069fPdO/e3ZY2bNgw27qjoqLMiy++aCszf/58ExoaapxOp7XuuLi4AtvtdDpNvXr1zNy5c40xxpw+fdqEhISYhIQEq0yHDh3M/fff77b+nj17jCTz7bffus1fsWKFkWSOHTtmpe3fv99Isq7F6dOnG0lm3rx5BbbX9RgWtO2kpCTj5+dn1q9fb4wxJjMz04SHh5u3337bGGPM888/b7p27Zrv9tq3b286duxoDh06ZDIzM82cOXOMj4+PueGGG4wxxqxdu9ZIMgcOHLDVGzRokLn99tut5XHjxpn69eubpk2bmq+++sqkp6eb5s2bm/j4eDN9+nQTERFhbrrpJrN27doCjwGuDL4rURJxXV67CrpPp6cEAACwOXv2rJ599lndeOONqlixosqUKaOEhAQdPHjQVi4yMtK2vHv3brVp08aW1rZtW9vy5s2b9corr6hMmTLW64EHHtDZs2eVnJx8Se1cvny5UlJSdPfdd0uSypQpoz/84Q+23hJbt27Vrbfe6rb+1q1b5ePjoy5dulzSdt3JfSwKOoYFbbtGjRq66667rN4SixYt0okTJ6xhMhMnTtTy5cvzbdOcOXPk4+Oj6667ToGBgZo6dar++Mc/ytfX11Yu9xAZY4wtbfz48frpp5+0fft29erVS6+99pra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\n",
      "text/plain": [
       "<Figure size 1152x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize = (16, 6))\n",
    "plt.style.use(\"fivethirtyeight\")\n",
    "fig.patch.set(facecolor=\"white\")\n",
    "ax.set(facecolor=\"white\")\n",
    "\n",
    "ax.plot(results_table[\"model_rank\"], results_table[\"accuracy\"])\n",
    "ax.axhline(y = .582, linestyle='dotted', linewidth=2.5, color='black')\n",
    "ax.axhline(y = .9, linestyle='dotted', linewidth=2.5 ,color='black')\n",
    "ax.set_yticks([.5, .6, .7, .8, .9, 1])\n",
    "\n",
    "ax.set_xlabel(\"Model Rank\", fontweight = \"bold\", size = 15)\n",
    "ax.set_ylabel(\"Accuracy\", fontweight = \"bold\", size = 15)\n",
    "ax.set_title(\"Accuracy vs Model Rank: Baseline Models\", fontweight = \"bold\", size = 20)\n",
    "ax.annotate('Target Accuracy: 90%', xy=(5, .93))\n",
    "ax.annotate('Majority Classifier: 58.2% Accuracy', xy=(4.6, .615))\n",
    "\n",
    "plt.savefig(\"AccuracyVsRank.png\")\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "allay-ds-cRyEcJS9",
   "language": "python",
   "name": "allay-ds-cryecjs9"
  },
  "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.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}