{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "eec307b4-f5d9-4fde-b403-a8bae2db71dd",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "# 1. Single Linear Regression - Video Game Sales\n",
    "## (Using one feature to predict a continuous numerical target)\n",
    "## https://www.kaggle.com/datasets/ulrikthygepedersen/video-games-sales"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f31a6bef-8e67-4c53-aced-5cd7f66ec4d5",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Import Statments\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.preprocessing import LabelEncoder, MinMaxScaler, StandardScaler\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import roc_auc_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "47b5a5cd-deaa-4b51-970b-fc477800f16f",
   "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>rank</th>\n",
       "      <th>name</th>\n",
       "      <th>platform</th>\n",
       "      <th>year</th>\n",
       "      <th>genre</th>\n",
       "      <th>publisher</th>\n",
       "      <th>na_sales</th>\n",
       "      <th>eu_sales</th>\n",
       "      <th>jp_sales</th>\n",
       "      <th>other_sales</th>\n",
       "      <th>global_sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>Wii Sports</td>\n",
       "      <td>Wii</td>\n",
       "      <td>2006.0</td>\n",
       "      <td>Sports</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>41.49</td>\n",
       "      <td>29.02</td>\n",
       "      <td>3.77</td>\n",
       "      <td>8.46</td>\n",
       "      <td>82.74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>Super Mario Bros.</td>\n",
       "      <td>NES</td>\n",
       "      <td>1985.0</td>\n",
       "      <td>Platform</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>29.08</td>\n",
       "      <td>3.58</td>\n",
       "      <td>6.81</td>\n",
       "      <td>0.77</td>\n",
       "      <td>40.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>Mario Kart Wii</td>\n",
       "      <td>Wii</td>\n",
       "      <td>2008.0</td>\n",
       "      <td>Racing</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>15.85</td>\n",
       "      <td>12.88</td>\n",
       "      <td>3.79</td>\n",
       "      <td>3.31</td>\n",
       "      <td>35.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>Wii Sports Resort</td>\n",
       "      <td>Wii</td>\n",
       "      <td>2009.0</td>\n",
       "      <td>Sports</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>15.75</td>\n",
       "      <td>11.01</td>\n",
       "      <td>3.28</td>\n",
       "      <td>2.96</td>\n",
       "      <td>33.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>Pokemon Red/Pokemon Blue</td>\n",
       "      <td>GB</td>\n",
       "      <td>1996.0</td>\n",
       "      <td>Role-Playing</td>\n",
       "      <td>Nintendo</td>\n",
       "      <td>11.27</td>\n",
       "      <td>8.89</td>\n",
       "      <td>10.22</td>\n",
       "      <td>1.00</td>\n",
       "      <td>31.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16593</th>\n",
       "      <td>16596</td>\n",
       "      <td>Woody Woodpecker in Crazy Castle 5</td>\n",
       "      <td>GBA</td>\n",
       "      <td>2002.0</td>\n",
       "      <td>Platform</td>\n",
       "      <td>Kemco</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16594</th>\n",
       "      <td>16597</td>\n",
       "      <td>Men in Black II: Alien Escape</td>\n",
       "      <td>GC</td>\n",
       "      <td>2003.0</td>\n",
       "      <td>Shooter</td>\n",
       "      <td>Infogrames</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16595</th>\n",
       "      <td>16598</td>\n",
       "      <td>SCORE International Baja 1000: The Official Game</td>\n",
       "      <td>PS2</td>\n",
       "      <td>2008.0</td>\n",
       "      <td>Racing</td>\n",
       "      <td>Activision</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16596</th>\n",
       "      <td>16599</td>\n",
       "      <td>Know How 2</td>\n",
       "      <td>DS</td>\n",
       "      <td>2010.0</td>\n",
       "      <td>Puzzle</td>\n",
       "      <td>7G//AMES</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16597</th>\n",
       "      <td>16600</td>\n",
       "      <td>Spirits &amp; Spells</td>\n",
       "      <td>GBA</td>\n",
       "      <td>2003.0</td>\n",
       "      <td>Platform</td>\n",
       "      <td>Wanadoo</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>16598 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        rank                                              name platform  \\\n",
       "0          1                                        Wii Sports      Wii   \n",
       "1          2                                 Super Mario Bros.      NES   \n",
       "2          3                                    Mario Kart Wii      Wii   \n",
       "3          4                                 Wii Sports Resort      Wii   \n",
       "4          5                          Pokemon Red/Pokemon Blue       GB   \n",
       "...      ...                                               ...      ...   \n",
       "16593  16596                Woody Woodpecker in Crazy Castle 5      GBA   \n",
       "16594  16597                     Men in Black II: Alien Escape       GC   \n",
       "16595  16598  SCORE International Baja 1000: The Official Game      PS2   \n",
       "16596  16599                                        Know How 2       DS   \n",
       "16597  16600                                  Spirits & Spells      GBA   \n",
       "\n",
       "         year         genre   publisher  na_sales  eu_sales  jp_sales  \\\n",
       "0      2006.0        Sports    Nintendo     41.49     29.02      3.77   \n",
       "1      1985.0      Platform    Nintendo     29.08      3.58      6.81   \n",
       "2      2008.0        Racing    Nintendo     15.85     12.88      3.79   \n",
       "3      2009.0        Sports    Nintendo     15.75     11.01      3.28   \n",
       "4      1996.0  Role-Playing    Nintendo     11.27      8.89     10.22   \n",
       "...       ...           ...         ...       ...       ...       ...   \n",
       "16593  2002.0      Platform       Kemco      0.01      0.00      0.00   \n",
       "16594  2003.0       Shooter  Infogrames      0.01      0.00      0.00   \n",
       "16595  2008.0        Racing  Activision      0.00      0.00      0.00   \n",
       "16596  2010.0        Puzzle    7G//AMES      0.00      0.01      0.00   \n",
       "16597  2003.0      Platform     Wanadoo      0.01      0.00      0.00   \n",
       "\n",
       "       other_sales  global_sales  \n",
       "0             8.46         82.74  \n",
       "1             0.77         40.24  \n",
       "2             3.31         35.82  \n",
       "3             2.96         33.00  \n",
       "4             1.00         31.37  \n",
       "...            ...           ...  \n",
       "16593         0.00          0.01  \n",
       "16594         0.00          0.01  \n",
       "16595         0.00          0.01  \n",
       "16596         0.00          0.01  \n",
       "16597         0.00          0.01  \n",
       "\n",
       "[16598 rows x 11 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Loading video game sales data\n",
    "df_VideoGame = pd.read_csv('video_games_sales.csv')\n",
    "\n",
    "# Visualizing the dataframe\n",
    "df_VideoGame"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b69cec61-c8fa-4ced-aad7-44b28f496b89",
   "metadata": {},
   "source": [
    "## Let's see if we can use a subset of this data to predict the target variable: global_sales"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e1277f78-8ce8-41b3-b7eb-96bf912f31d0",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tw/7t5t3x_11sqflkfn0yxds1lr0000gq/T/ipykernel_19747/2330514909.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_VideoGameFeatureSubset.dropna(inplace=True)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "platform        0\n",
       "year            0\n",
       "genre           0\n",
       "publisher       0\n",
       "na_sales        0\n",
       "global_sales    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Exctracting Features from the original df_VideoGame Dataset\n",
    "df_VideoGameFeatureSubset = df_VideoGame[['platform', 'year', 'genre', 'publisher','na_sales', 'global_sales']]\n",
    "\n",
    "# Dropping null values from the dataset\n",
    "df_VideoGameFeatureSubset.dropna(inplace=True)\n",
    "df_VideoGameFeatureSubset.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ea7fd60e-94d9-4745-95ee-6be173c8006c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tw/7t5t3x_11sqflkfn0yxds1lr0000gq/T/ipykernel_19747/3575130277.py:8: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_VideoGameFeatureSubset['platform'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['platform'])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0        Wii\n",
       "1        NES\n",
       "2        Wii\n",
       "3        Wii\n",
       "4         GB\n",
       "        ... \n",
       "16593    GBA\n",
       "16594     GC\n",
       "16595    PS2\n",
       "16596     DS\n",
       "16597    GBA\n",
       "Name: platform, Length: 16291, dtype: object"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Initialize the labelencoder object\n",
    "le_videogame = LabelEncoder()\n",
    "\n",
    "# Save the unencoded feature platform (In case you want to decode later)\n",
    "df_VideoGame_decoded_platform = df_VideoGameFeatureSubset['platform']\n",
    "\n",
    "# Override the original platform feature with the label encoded feature\n",
    "df_VideoGameFeatureSubset['platform'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['platform'])\n",
    "\n",
    "# Print out the decoded series, platform\n",
    "df_VideoGame_decoded_platform"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "cc28eeed-c6c3-42f9-ba03-fc4f01699d5c",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tw/7t5t3x_11sqflkfn0yxds1lr0000gq/T/ipykernel_19747/3503678093.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_VideoGameFeatureSubset['genre'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['genre'])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0              Sports\n",
       "1            Platform\n",
       "2              Racing\n",
       "3              Sports\n",
       "4        Role-Playing\n",
       "             ...     \n",
       "16593        Platform\n",
       "16594         Shooter\n",
       "16595          Racing\n",
       "16596          Puzzle\n",
       "16597        Platform\n",
       "Name: genre, Length: 16291, dtype: object"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Save the unencoded feature genre (In case you want to decode later)\n",
    "df_VideoGame_decoded_genre = df_VideoGameFeatureSubset['genre']\n",
    "\n",
    "# Override the original genre feature with the label encoded feature\n",
    "df_VideoGameFeatureSubset['genre'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['genre'])\n",
    "\n",
    "# Print out the decoded series, genre\n",
    "df_VideoGame_decoded_genre"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "cf186934-ec6e-4d0e-8fb1-9883bb8a6f14",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tw/7t5t3x_11sqflkfn0yxds1lr0000gq/T/ipykernel_19747/109776527.py:5: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_VideoGameFeatureSubset['publisher'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['publisher'])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0          Nintendo\n",
       "1          Nintendo\n",
       "2          Nintendo\n",
       "3          Nintendo\n",
       "4          Nintendo\n",
       "            ...    \n",
       "16593         Kemco\n",
       "16594    Infogrames\n",
       "16595    Activision\n",
       "16596      7G//AMES\n",
       "16597       Wanadoo\n",
       "Name: publisher, Length: 16291, dtype: object"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Save the unencoded feature publisher (In case you want to decode later)\n",
    "df_VideoGame_decoded_publisher = df_VideoGameFeatureSubset['publisher']\n",
    "\n",
    "# Override the original publisher feature with the label encoded feature\n",
    "df_VideoGameFeatureSubset['publisher'] = le_videogame.fit_transform(df_VideoGameFeatureSubset['publisher'])\n",
    "\n",
    "# Print out the decoded series, publisher\n",
    "df_VideoGame_decoded_publisher"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "9ae1fce4-939a-408a-859b-181281f793a5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Feel free to uncomment the chart below, may take a little while to output though\n",
    "#sns.pairplot(df_VideoGameFeatureSubset.drop('global_sales', axis=1), kind='kde')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "0b2f65be-d944-4ac0-8f0b-17730b2fedf2",
   "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>platform</th>\n",
       "      <th>year</th>\n",
       "      <th>genre</th>\n",
       "      <th>publisher</th>\n",
       "      <th>na_sales</th>\n",
       "      <th>global_sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>26</td>\n",
       "      <td>2006.0</td>\n",
       "      <td>10</td>\n",
       "      <td>359</td>\n",
       "      <td>41.49</td>\n",
       "      <td>82.74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>11</td>\n",
       "      <td>1985.0</td>\n",
       "      <td>4</td>\n",
       "      <td>359</td>\n",
       "      <td>29.08</td>\n",
       "      <td>40.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>26</td>\n",
       "      <td>2008.0</td>\n",
       "      <td>6</td>\n",
       "      <td>359</td>\n",
       "      <td>15.85</td>\n",
       "      <td>35.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>26</td>\n",
       "      <td>2009.0</td>\n",
       "      <td>10</td>\n",
       "      <td>359</td>\n",
       "      <td>15.75</td>\n",
       "      <td>33.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1996.0</td>\n",
       "      <td>7</td>\n",
       "      <td>359</td>\n",
       "      <td>11.27</td>\n",
       "      <td>31.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16593</th>\n",
       "      <td>6</td>\n",
       "      <td>2002.0</td>\n",
       "      <td>4</td>\n",
       "      <td>269</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16594</th>\n",
       "      <td>7</td>\n",
       "      <td>2003.0</td>\n",
       "      <td>8</td>\n",
       "      <td>241</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16595</th>\n",
       "      <td>16</td>\n",
       "      <td>2008.0</td>\n",
       "      <td>6</td>\n",
       "      <td>21</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16596</th>\n",
       "      <td>4</td>\n",
       "      <td>2010.0</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16597</th>\n",
       "      <td>6</td>\n",
       "      <td>2003.0</td>\n",
       "      <td>4</td>\n",
       "      <td>544</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>16291 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       platform    year  genre  publisher  na_sales  global_sales\n",
       "0            26  2006.0     10        359     41.49         82.74\n",
       "1            11  1985.0      4        359     29.08         40.24\n",
       "2            26  2008.0      6        359     15.85         35.82\n",
       "3            26  2009.0     10        359     15.75         33.00\n",
       "4             5  1996.0      7        359     11.27         31.37\n",
       "...         ...     ...    ...        ...       ...           ...\n",
       "16593         6  2002.0      4        269      0.01          0.01\n",
       "16594         7  2003.0      8        241      0.01          0.01\n",
       "16595        16  2008.0      6         21      0.00          0.01\n",
       "16596         4  2010.0      5          8      0.00          0.01\n",
       "16597         6  2003.0      4        544      0.01          0.01\n",
       "\n",
       "[16291 rows x 6 columns]"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# View the labelencoded dataframe\n",
    "df_VideoGameFeatureSubset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "dd24a941-4734-411b-8bda-370fe70f1699",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/var/folders/tw/7t5t3x_11sqflkfn0yxds1lr0000gq/T/ipykernel_19747/2534807158.py:4: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n",
      "  df_VideoGameFeatureSubset[['platform', 'year', 'genre', 'publisher']] = mm_scaler.fit_transform(df_VideoGameFeatureSubset[['platform', 'year', 'genre', 'publisher']])\n"
     ]
    },
    {
     "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>platform</th>\n",
       "      <th>year</th>\n",
       "      <th>genre</th>\n",
       "      <th>publisher</th>\n",
       "      <th>na_sales</th>\n",
       "      <th>global_sales</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.733333</td>\n",
       "      <td>0.30</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>0.248696</td>\n",
       "      <td>41.49</td>\n",
       "      <td>82.74</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.266667</td>\n",
       "      <td>-0.75</td>\n",
       "      <td>-0.272727</td>\n",
       "      <td>0.248696</td>\n",
       "      <td>29.08</td>\n",
       "      <td>40.24</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.733333</td>\n",
       "      <td>0.40</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>0.248696</td>\n",
       "      <td>15.85</td>\n",
       "      <td>35.82</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.733333</td>\n",
       "      <td>0.45</td>\n",
       "      <td>0.818182</td>\n",
       "      <td>0.248696</td>\n",
       "      <td>15.75</td>\n",
       "      <td>33.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.666667</td>\n",
       "      <td>-0.20</td>\n",
       "      <td>0.272727</td>\n",
       "      <td>0.248696</td>\n",
       "      <td>11.27</td>\n",
       "      <td>31.37</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16593</th>\n",
       "      <td>-0.600000</td>\n",
       "      <td>0.10</td>\n",
       "      <td>-0.272727</td>\n",
       "      <td>-0.064348</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16594</th>\n",
       "      <td>-0.533333</td>\n",
       "      <td>0.15</td>\n",
       "      <td>0.454545</td>\n",
       "      <td>-0.161739</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16595</th>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.40</td>\n",
       "      <td>0.090909</td>\n",
       "      <td>-0.926957</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16596</th>\n",
       "      <td>-0.733333</td>\n",
       "      <td>0.50</td>\n",
       "      <td>-0.090909</td>\n",
       "      <td>-0.972174</td>\n",
       "      <td>0.00</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16597</th>\n",
       "      <td>-0.600000</td>\n",
       "      <td>0.15</td>\n",
       "      <td>-0.272727</td>\n",
       "      <td>0.892174</td>\n",
       "      <td>0.01</td>\n",
       "      <td>0.01</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>16291 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       platform  year     genre  publisher  na_sales  global_sales\n",
       "0      0.733333  0.30  0.818182   0.248696     41.49         82.74\n",
       "1     -0.266667 -0.75 -0.272727   0.248696     29.08         40.24\n",
       "2      0.733333  0.40  0.090909   0.248696     15.85         35.82\n",
       "3      0.733333  0.45  0.818182   0.248696     15.75         33.00\n",
       "4     -0.666667 -0.20  0.272727   0.248696     11.27         31.37\n",
       "...         ...   ...       ...        ...       ...           ...\n",
       "16593 -0.600000  0.10 -0.272727  -0.064348      0.01          0.01\n",
       "16594 -0.533333  0.15  0.454545  -0.161739      0.01          0.01\n",
       "16595  0.066667  0.40  0.090909  -0.926957      0.00          0.01\n",
       "16596 -0.733333  0.50 -0.090909  -0.972174      0.00          0.01\n",
       "16597 -0.600000  0.15 -0.272727   0.892174      0.01          0.01\n",
       "\n",
       "[16291 rows x 6 columns]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Normailze platform, year, genre, and publisher\n",
    "mm_scaler = MinMaxScaler(feature_range=(-1, 1))\n",
    "\n",
    "df_VideoGameFeatureSubset[['platform', 'year', 'genre', 'publisher']] = mm_scaler.fit_transform(df_VideoGameFeatureSubset[['platform', 'year', 'genre', 'publisher']])\n",
    "df_VideoGameFeatureSubset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "9a9f1703-1bd0-4a5d-9a53-8448da37e2a6",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a pairplot for the normalized data, columns_to_manipulate, use kde for the kind\n",
    "#sns.pairplot(df_VideoGameFeatureSubset, kind='kde')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "e871a0d8-3526-403d-be36-0a90ed137d25",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Save Checkpoint\n",
    "df_VideoGameFeatureSubset.to_csv('Game_Data_Cleaned.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "b9d517be-7d8e-48e0-bfe6-e5ca2e47d9a9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the cleaned video game sales data into a dataframe\n",
    "df_VideoGameCleaned = pd.read_csv('Game_Data_Cleaned.csv')\n",
    "\n",
    "# Remove the column named 'Unnamed: 0'\n",
    "\n",
    "\n",
    "# print out the dataframe\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6d283cb8-9065-431b-90c7-f19ccbc29feb",
   "metadata": {},
   "outputs": [],
   "source": [
    "# use the pandas dataframe function called .corr() to quickly check which features most closely 'relate' to the target variable, higher is better\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "001d2488-b411-4eb4-a52b-e3a1f0933b5f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# create a 2D scatter plot to 'eyeball' the relationship between your chosen feature and global_sales\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "64731f1e-57a8-4cd3-954f-70962a2a21b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seperate the Features and the Target\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e0942f7b-a5ca-4910-b8f8-973ed79f3c76",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Print the feature dataframe\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5fd13975-c396-47de-ae44-efea5d08b4e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Print the target dataframe\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cbb5ef3d-6c52-41ee-9dc3-d887bd19d213",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of X_train: \n",
      "Shape of X_test: \n",
      "Shape of y_train: \n",
      "Shape of y_test: \n"
     ]
    }
   ],
   "source": [
    "# use train_test_split to get your dataset ready for training and testing\n",
    "\n",
    "\n",
    "# print out the shape of the trainig and testing, feature and targets\n",
    "print('Shape of X_train: ', )\n",
    "print('Shape of X_test: ',)\n",
    "print('Shape of y_train: ',)\n",
    "print('Shape of y_test: ',)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "80161768-62ac-4394-ac46-3eef65b82784",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import the LinearRegression class from sklearn.linear_model\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "# Initalize the LinearRegression object\n",
    "\n",
    "\n",
    "#!!! Important !!!\n",
    "# Fit your Linear Regressor on only ** one ** of the features in your X's, \n",
    "# HINT: If you have multiple features in your X_train, select your chosen feature for singular linear regression and make a new dataframe\n",
    "\n",
    "\n",
    "# Get your predictions from your fitted model\n",
    "\n",
    "# use the model's class function .score to calculate the r^2 value\n",
    "\n",
    "# print out the r2 vaule for the linear regressor\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04b71b7e-92f5-4a23-8c19-0caaae521b95",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Coefficients and intercept (y = wx + b), where w is the weight, or coefficent of x, and b is the y-intercept\n",
    "print(f'Coefficients: {lr.coef_}')\n",
    "print(f'Intercept: {lr.intercept_}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "96a70aa5-c45c-41fe-b193-a211a4677aa4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Use a scatter plot to show how the line passes through the dataset\n",
    "# You can optionally spilt the train and test set by color, and plot the line by passing X_test, and y_pred\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "629cb1bb-8a8c-4680-a5ae-667fa98c94a2",
   "metadata": {},
   "source": [
    "### Linear Regression Questions: "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6ce4b462-30f3-4b27-b6d1-7b1109eb2b17",
   "metadata": {},
   "source": [
    "1. What was the final r^2 value of your model? \n",
    "2.  What does this tell us? \n",
    "\n",
    "- [Your Answer Here]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b6ddb0ad-c32f-426f-a938-e9e647a3ad44",
   "metadata": {},
   "source": [
    "3. Can we get more performance from this model? \n",
    "4. If so, how? If not, why?\n",
    "- [Your Answer Here]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0a1fb28-98e8-42aa-9c64-24df0ccbced9",
   "metadata": {},
   "source": [
    "5. Would it be beneficial to perform multiple linear regresssion? I.e. use several features to predict the target?\n",
    "6. Why?\n",
    "- [Your Answer Here]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4a4c9cc-5b24-488d-a1cf-36113c4a0ee3",
   "metadata": {},
   "source": [
    "7. Why is there one feature in particular that tracks so well with the target, global_sales?\n",
    "- [Your Answer Here]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "296c5a4d-51e9-4a35-b81d-69163519b73c",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "# 2. Multi Classification - Classify the *\"Quality\"* variable (3~9) for Wine Data\n",
    "## Use the numeric features in the wine dataset to predict a 'class'\n",
    "## https://www.kaggle.com/datasets/yasserh/wine-quality-dataset/data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "618631fe-efb0-4b54-8f69-c59d188cab3f",
   "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>fixed_acidity</th>\n",
       "      <th>volatile_acidity</th>\n",
       "      <th>citric_acid</th>\n",
       "      <th>residual_sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free_sulfur_dioxide</th>\n",
       "      <th>total_sulfur_dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11.6</td>\n",
       "      <td>0.580</td>\n",
       "      <td>0.66</td>\n",
       "      <td>2.20</td>\n",
       "      <td>0.074</td>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1.00080</td>\n",
       "      <td>3.25</td>\n",
       "      <td>0.57</td>\n",
       "      <td>9.0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10.4</td>\n",
       "      <td>0.610</td>\n",
       "      <td>0.49</td>\n",
       "      <td>2.10</td>\n",
       "      <td>0.200</td>\n",
       "      <td>5.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>0.99940</td>\n",
       "      <td>3.16</td>\n",
       "      <td>0.63</td>\n",
       "      <td>8.4</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7.4</td>\n",
       "      <td>1.185</td>\n",
       "      <td>0.00</td>\n",
       "      <td>4.25</td>\n",
       "      <td>0.097</td>\n",
       "      <td>5.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.99660</td>\n",
       "      <td>3.63</td>\n",
       "      <td>0.54</td>\n",
       "      <td>10.7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10.4</td>\n",
       "      <td>0.440</td>\n",
       "      <td>0.42</td>\n",
       "      <td>1.50</td>\n",
       "      <td>0.145</td>\n",
       "      <td>34.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>0.99832</td>\n",
       "      <td>3.38</td>\n",
       "      <td>0.86</td>\n",
       "      <td>9.9</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8.3</td>\n",
       "      <td>1.020</td>\n",
       "      <td>0.02</td>\n",
       "      <td>3.40</td>\n",
       "      <td>0.084</td>\n",
       "      <td>6.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>0.99892</td>\n",
       "      <td>3.48</td>\n",
       "      <td>0.49</td>\n",
       "      <td>11.0</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20995</th>\n",
       "      <td>9.7</td>\n",
       "      <td>1.020</td>\n",
       "      <td>0.91</td>\n",
       "      <td>50.00</td>\n",
       "      <td>0.412</td>\n",
       "      <td>114.6</td>\n",
       "      <td>181.7</td>\n",
       "      <td>1.02085</td>\n",
       "      <td>3.30</td>\n",
       "      <td>0.89</td>\n",
       "      <td>12.0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20996</th>\n",
       "      <td>10.2</td>\n",
       "      <td>0.610</td>\n",
       "      <td>0.88</td>\n",
       "      <td>53.80</td>\n",
       "      <td>0.250</td>\n",
       "      <td>62.4</td>\n",
       "      <td>204.7</td>\n",
       "      <td>1.02776</td>\n",
       "      <td>3.52</td>\n",
       "      <td>1.14</td>\n",
       "      <td>9.7</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20997</th>\n",
       "      <td>13.4</td>\n",
       "      <td>0.460</td>\n",
       "      <td>1.04</td>\n",
       "      <td>52.10</td>\n",
       "      <td>0.449</td>\n",
       "      <td>63.0</td>\n",
       "      <td>273.5</td>\n",
       "      <td>1.02618</td>\n",
       "      <td>2.89</td>\n",
       "      <td>1.76</td>\n",
       "      <td>9.3</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20998</th>\n",
       "      <td>6.6</td>\n",
       "      <td>1.030</td>\n",
       "      <td>1.09</td>\n",
       "      <td>25.30</td>\n",
       "      <td>0.138</td>\n",
       "      <td>179.8</td>\n",
       "      <td>295.0</td>\n",
       "      <td>1.02476</td>\n",
       "      <td>2.94</td>\n",
       "      <td>1.54</td>\n",
       "      <td>12.9</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20999</th>\n",
       "      <td>9.3</td>\n",
       "      <td>0.930</td>\n",
       "      <td>1.32</td>\n",
       "      <td>33.60</td>\n",
       "      <td>0.412</td>\n",
       "      <td>128.7</td>\n",
       "      <td>290.1</td>\n",
       "      <td>1.02182</td>\n",
       "      <td>3.16</td>\n",
       "      <td>1.42</td>\n",
       "      <td>13.0</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>21000 rows × 12 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed_acidity  volatile_acidity  citric_acid  residual_sugar  \\\n",
       "0               11.6             0.580         0.66            2.20   \n",
       "1               10.4             0.610         0.49            2.10   \n",
       "2                7.4             1.185         0.00            4.25   \n",
       "3               10.4             0.440         0.42            1.50   \n",
       "4                8.3             1.020         0.02            3.40   \n",
       "...              ...               ...          ...             ...   \n",
       "20995            9.7             1.020         0.91           50.00   \n",
       "20996           10.2             0.610         0.88           53.80   \n",
       "20997           13.4             0.460         1.04           52.10   \n",
       "20998            6.6             1.030         1.09           25.30   \n",
       "20999            9.3             0.930         1.32           33.60   \n",
       "\n",
       "       chlorides  free_sulfur_dioxide  total_sulfur_dioxide  density    pH  \\\n",
       "0          0.074                 10.0                  47.0  1.00080  3.25   \n",
       "1          0.200                  5.0                  16.0  0.99940  3.16   \n",
       "2          0.097                  5.0                  14.0  0.99660  3.63   \n",
       "3          0.145                 34.0                  48.0  0.99832  3.38   \n",
       "4          0.084                  6.0                  11.0  0.99892  3.48   \n",
       "...          ...                  ...                   ...      ...   ...   \n",
       "20995      0.412                114.6                 181.7  1.02085  3.30   \n",
       "20996      0.250                 62.4                 204.7  1.02776  3.52   \n",
       "20997      0.449                 63.0                 273.5  1.02618  2.89   \n",
       "20998      0.138                179.8                 295.0  1.02476  2.94   \n",
       "20999      0.412                128.7                 290.1  1.02182  3.16   \n",
       "\n",
       "       sulphates  alcohol  quality  \n",
       "0           0.57      9.0        3  \n",
       "1           0.63      8.4        3  \n",
       "2           0.54     10.7        3  \n",
       "3           0.86      9.9        3  \n",
       "4           0.49     11.0        3  \n",
       "...          ...      ...      ...  \n",
       "20995       0.89     12.0        9  \n",
       "20996       1.14      9.7        9  \n",
       "20997       1.76      9.3        9  \n",
       "20998       1.54     12.9        9  \n",
       "20999       1.42     13.0        9  \n",
       "\n",
       "[21000 rows x 12 columns]"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Load the wine dataset\n",
    "df_wine = pd.read_csv('wine_data.csv')\n",
    "df_wine"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "1ae10c7d-f75d-4c2d-9a13-cdcaa3d1e92b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 4, 5, 6, 7, 8, 9])"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# this feature will be our target variable\n",
    "df_wine.quality.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "e8434cf6-2f21-4ed8-9e5e-de7ff5927ad5",
   "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>fixed_acidity</th>\n",
       "      <th>volatile_acidity</th>\n",
       "      <th>citric_acid</th>\n",
       "      <th>residual_sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free_sulfur_dioxide</th>\n",
       "      <th>total_sulfur_dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "      <th>quality</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "      <td>21000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>9.797079</td>\n",
       "      <td>0.774796</td>\n",
       "      <td>0.793870</td>\n",
       "      <td>31.289348</td>\n",
       "      <td>0.200245</td>\n",
       "      <td>129.442333</td>\n",
       "      <td>229.008762</td>\n",
       "      <td>1.009972</td>\n",
       "      <td>3.158712</td>\n",
       "      <td>1.020641</td>\n",
       "      <td>11.291716</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2.413919</td>\n",
       "      <td>0.365015</td>\n",
       "      <td>0.384833</td>\n",
       "      <td>19.015391</td>\n",
       "      <td>0.124933</td>\n",
       "      <td>77.167262</td>\n",
       "      <td>100.183265</td>\n",
       "      <td>0.012032</td>\n",
       "      <td>0.171371</td>\n",
       "      <td>0.408304</td>\n",
       "      <td>1.182198</td>\n",
       "      <td>2.000048</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>3.800000</td>\n",
       "      <td>0.080000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.600000</td>\n",
       "      <td>0.009000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>0.987110</td>\n",
       "      <td>2.720000</td>\n",
       "      <td>0.220000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>3.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>7.600000</td>\n",
       "      <td>0.430000</td>\n",
       "      <td>0.410000</td>\n",
       "      <td>9.800000</td>\n",
       "      <td>0.072000</td>\n",
       "      <td>45.000000</td>\n",
       "      <td>150.000000</td>\n",
       "      <td>0.997417</td>\n",
       "      <td>3.030000</td>\n",
       "      <td>0.620000</td>\n",
       "      <td>10.400000</td>\n",
       "      <td>4.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>10.000000</td>\n",
       "      <td>0.830000</td>\n",
       "      <td>0.870000</td>\n",
       "      <td>37.600000</td>\n",
       "      <td>0.205000</td>\n",
       "      <td>145.800000</td>\n",
       "      <td>240.500000</td>\n",
       "      <td>1.012200</td>\n",
       "      <td>3.150000</td>\n",
       "      <td>1.080000</td>\n",
       "      <td>11.300000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>11.800000</td>\n",
       "      <td>1.080000</td>\n",
       "      <td>1.110000</td>\n",
       "      <td>46.800000</td>\n",
       "      <td>0.298000</td>\n",
       "      <td>194.325000</td>\n",
       "      <td>311.625000</td>\n",
       "      <td>1.019840</td>\n",
       "      <td>3.270000</td>\n",
       "      <td>1.360000</td>\n",
       "      <td>12.200000</td>\n",
       "      <td>8.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>15.900000</td>\n",
       "      <td>1.580000</td>\n",
       "      <td>1.660000</td>\n",
       "      <td>65.800000</td>\n",
       "      <td>0.611000</td>\n",
       "      <td>289.000000</td>\n",
       "      <td>440.000000</td>\n",
       "      <td>1.038980</td>\n",
       "      <td>4.010000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>14.900000</td>\n",
       "      <td>9.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed_acidity  volatile_acidity   citric_acid  residual_sugar  \\\n",
       "count   21000.000000      21000.000000  21000.000000    21000.000000   \n",
       "mean        9.797079          0.774796      0.793870       31.289348   \n",
       "std         2.413919          0.365015      0.384833       19.015391   \n",
       "min         3.800000          0.080000      0.000000        0.600000   \n",
       "25%         7.600000          0.430000      0.410000        9.800000   \n",
       "50%        10.000000          0.830000      0.870000       37.600000   \n",
       "75%        11.800000          1.080000      1.110000       46.800000   \n",
       "max        15.900000          1.580000      1.660000       65.800000   \n",
       "\n",
       "          chlorides  free_sulfur_dioxide  total_sulfur_dioxide       density  \\\n",
       "count  21000.000000         21000.000000          21000.000000  21000.000000   \n",
       "mean       0.200245           129.442333            229.008762      1.009972   \n",
       "std        0.124933            77.167262            100.183265      0.012032   \n",
       "min        0.009000             1.000000              6.000000      0.987110   \n",
       "25%        0.072000            45.000000            150.000000      0.997417   \n",
       "50%        0.205000           145.800000            240.500000      1.012200   \n",
       "75%        0.298000           194.325000            311.625000      1.019840   \n",
       "max        0.611000           289.000000            440.000000      1.038980   \n",
       "\n",
       "                 pH     sulphates       alcohol       quality  \n",
       "count  21000.000000  21000.000000  21000.000000  21000.000000  \n",
       "mean       3.158712      1.020641     11.291716      6.000000  \n",
       "std        0.171371      0.408304      1.182198      2.000048  \n",
       "min        2.720000      0.220000      8.000000      3.000000  \n",
       "25%        3.030000      0.620000     10.400000      4.000000  \n",
       "50%        3.150000      1.080000     11.300000      6.000000  \n",
       "75%        3.270000      1.360000     12.200000      8.000000  \n",
       "max        4.010000      2.000000     14.900000      9.000000  "
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_wine.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "1100cfee-1432-493b-a937-f3894c1580ac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        3\n",
       "1        3\n",
       "2        3\n",
       "3        3\n",
       "4        3\n",
       "        ..\n",
       "20995    9\n",
       "20996    9\n",
       "20997    9\n",
       "20998    9\n",
       "20999    9\n",
       "Name: quality, Length: 21000, dtype: int64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = df_wine.quality\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "ae99273b-0001-4a1a-aaac-99b977bea3c8",
   "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>fixed_acidity</th>\n",
       "      <th>volatile_acidity</th>\n",
       "      <th>citric_acid</th>\n",
       "      <th>residual_sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free_sulfur_dioxide</th>\n",
       "      <th>total_sulfur_dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11.6</td>\n",
       "      <td>0.580</td>\n",
       "      <td>0.66</td>\n",
       "      <td>2.20</td>\n",
       "      <td>0.074</td>\n",
       "      <td>10.0</td>\n",
       "      <td>47.0</td>\n",
       "      <td>1.00080</td>\n",
       "      <td>3.25</td>\n",
       "      <td>0.57</td>\n",
       "      <td>9.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10.4</td>\n",
       "      <td>0.610</td>\n",
       "      <td>0.49</td>\n",
       "      <td>2.10</td>\n",
       "      <td>0.200</td>\n",
       "      <td>5.0</td>\n",
       "      <td>16.0</td>\n",
       "      <td>0.99940</td>\n",
       "      <td>3.16</td>\n",
       "      <td>0.63</td>\n",
       "      <td>8.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>7.4</td>\n",
       "      <td>1.185</td>\n",
       "      <td>0.00</td>\n",
       "      <td>4.25</td>\n",
       "      <td>0.097</td>\n",
       "      <td>5.0</td>\n",
       "      <td>14.0</td>\n",
       "      <td>0.99660</td>\n",
       "      <td>3.63</td>\n",
       "      <td>0.54</td>\n",
       "      <td>10.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10.4</td>\n",
       "      <td>0.440</td>\n",
       "      <td>0.42</td>\n",
       "      <td>1.50</td>\n",
       "      <td>0.145</td>\n",
       "      <td>34.0</td>\n",
       "      <td>48.0</td>\n",
       "      <td>0.99832</td>\n",
       "      <td>3.38</td>\n",
       "      <td>0.86</td>\n",
       "      <td>9.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8.3</td>\n",
       "      <td>1.020</td>\n",
       "      <td>0.02</td>\n",
       "      <td>3.40</td>\n",
       "      <td>0.084</td>\n",
       "      <td>6.0</td>\n",
       "      <td>11.0</td>\n",
       "      <td>0.99892</td>\n",
       "      <td>3.48</td>\n",
       "      <td>0.49</td>\n",
       "      <td>11.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20995</th>\n",
       "      <td>9.7</td>\n",
       "      <td>1.020</td>\n",
       "      <td>0.91</td>\n",
       "      <td>50.00</td>\n",
       "      <td>0.412</td>\n",
       "      <td>114.6</td>\n",
       "      <td>181.7</td>\n",
       "      <td>1.02085</td>\n",
       "      <td>3.30</td>\n",
       "      <td>0.89</td>\n",
       "      <td>12.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20996</th>\n",
       "      <td>10.2</td>\n",
       "      <td>0.610</td>\n",
       "      <td>0.88</td>\n",
       "      <td>53.80</td>\n",
       "      <td>0.250</td>\n",
       "      <td>62.4</td>\n",
       "      <td>204.7</td>\n",
       "      <td>1.02776</td>\n",
       "      <td>3.52</td>\n",
       "      <td>1.14</td>\n",
       "      <td>9.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20997</th>\n",
       "      <td>13.4</td>\n",
       "      <td>0.460</td>\n",
       "      <td>1.04</td>\n",
       "      <td>52.10</td>\n",
       "      <td>0.449</td>\n",
       "      <td>63.0</td>\n",
       "      <td>273.5</td>\n",
       "      <td>1.02618</td>\n",
       "      <td>2.89</td>\n",
       "      <td>1.76</td>\n",
       "      <td>9.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20998</th>\n",
       "      <td>6.6</td>\n",
       "      <td>1.030</td>\n",
       "      <td>1.09</td>\n",
       "      <td>25.30</td>\n",
       "      <td>0.138</td>\n",
       "      <td>179.8</td>\n",
       "      <td>295.0</td>\n",
       "      <td>1.02476</td>\n",
       "      <td>2.94</td>\n",
       "      <td>1.54</td>\n",
       "      <td>12.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20999</th>\n",
       "      <td>9.3</td>\n",
       "      <td>0.930</td>\n",
       "      <td>1.32</td>\n",
       "      <td>33.60</td>\n",
       "      <td>0.412</td>\n",
       "      <td>128.7</td>\n",
       "      <td>290.1</td>\n",
       "      <td>1.02182</td>\n",
       "      <td>3.16</td>\n",
       "      <td>1.42</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>21000 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed_acidity  volatile_acidity  citric_acid  residual_sugar  \\\n",
       "0               11.6             0.580         0.66            2.20   \n",
       "1               10.4             0.610         0.49            2.10   \n",
       "2                7.4             1.185         0.00            4.25   \n",
       "3               10.4             0.440         0.42            1.50   \n",
       "4                8.3             1.020         0.02            3.40   \n",
       "...              ...               ...          ...             ...   \n",
       "20995            9.7             1.020         0.91           50.00   \n",
       "20996           10.2             0.610         0.88           53.80   \n",
       "20997           13.4             0.460         1.04           52.10   \n",
       "20998            6.6             1.030         1.09           25.30   \n",
       "20999            9.3             0.930         1.32           33.60   \n",
       "\n",
       "       chlorides  free_sulfur_dioxide  total_sulfur_dioxide  density    pH  \\\n",
       "0          0.074                 10.0                  47.0  1.00080  3.25   \n",
       "1          0.200                  5.0                  16.0  0.99940  3.16   \n",
       "2          0.097                  5.0                  14.0  0.99660  3.63   \n",
       "3          0.145                 34.0                  48.0  0.99832  3.38   \n",
       "4          0.084                  6.0                  11.0  0.99892  3.48   \n",
       "...          ...                  ...                   ...      ...   ...   \n",
       "20995      0.412                114.6                 181.7  1.02085  3.30   \n",
       "20996      0.250                 62.4                 204.7  1.02776  3.52   \n",
       "20997      0.449                 63.0                 273.5  1.02618  2.89   \n",
       "20998      0.138                179.8                 295.0  1.02476  2.94   \n",
       "20999      0.412                128.7                 290.1  1.02182  3.16   \n",
       "\n",
       "       sulphates  alcohol  \n",
       "0           0.57      9.0  \n",
       "1           0.63      8.4  \n",
       "2           0.54     10.7  \n",
       "3           0.86      9.9  \n",
       "4           0.49     11.0  \n",
       "...          ...      ...  \n",
       "20995       0.89     12.0  \n",
       "20996       1.14      9.7  \n",
       "20997       1.76      9.3  \n",
       "20998       1.54     12.9  \n",
       "20999       1.42     13.0  \n",
       "\n",
       "[21000 rows x 11 columns]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = df_wine.drop('quality', axis=1)\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "d04df584-3a40-4da4-814a-f74fb3209666",
   "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>fixed_acidity</th>\n",
       "      <th>volatile_acidity</th>\n",
       "      <th>citric_acid</th>\n",
       "      <th>residual_sugar</th>\n",
       "      <th>chlorides</th>\n",
       "      <th>free_sulfur_dioxide</th>\n",
       "      <th>total_sulfur_dioxide</th>\n",
       "      <th>density</th>\n",
       "      <th>pH</th>\n",
       "      <th>sulphates</th>\n",
       "      <th>alcohol</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.289256</td>\n",
       "      <td>-0.333333</td>\n",
       "      <td>-0.204819</td>\n",
       "      <td>-0.950920</td>\n",
       "      <td>-0.784053</td>\n",
       "      <td>-0.937500</td>\n",
       "      <td>-0.811060</td>\n",
       "      <td>-0.472142</td>\n",
       "      <td>-0.178295</td>\n",
       "      <td>-0.606742</td>\n",
       "      <td>-0.710145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.090909</td>\n",
       "      <td>-0.293333</td>\n",
       "      <td>-0.409639</td>\n",
       "      <td>-0.953988</td>\n",
       "      <td>-0.365449</td>\n",
       "      <td>-0.972222</td>\n",
       "      <td>-0.953917</td>\n",
       "      <td>-0.526123</td>\n",
       "      <td>-0.317829</td>\n",
       "      <td>-0.539326</td>\n",
       "      <td>-0.884058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.404959</td>\n",
       "      <td>0.473333</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>-0.888037</td>\n",
       "      <td>-0.707641</td>\n",
       "      <td>-0.972222</td>\n",
       "      <td>-0.963134</td>\n",
       "      <td>-0.634085</td>\n",
       "      <td>0.410853</td>\n",
       "      <td>-0.640449</td>\n",
       "      <td>-0.217391</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.090909</td>\n",
       "      <td>-0.520000</td>\n",
       "      <td>-0.493976</td>\n",
       "      <td>-0.972393</td>\n",
       "      <td>-0.548173</td>\n",
       "      <td>-0.770833</td>\n",
       "      <td>-0.806452</td>\n",
       "      <td>-0.567766</td>\n",
       "      <td>0.023256</td>\n",
       "      <td>-0.280899</td>\n",
       "      <td>-0.449275</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.256198</td>\n",
       "      <td>0.253333</td>\n",
       "      <td>-0.975904</td>\n",
       "      <td>-0.914110</td>\n",
       "      <td>-0.750831</td>\n",
       "      <td>-0.965278</td>\n",
       "      <td>-0.976959</td>\n",
       "      <td>-0.544631</td>\n",
       "      <td>0.178295</td>\n",
       "      <td>-0.696629</td>\n",
       "      <td>-0.130435</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20995</th>\n",
       "      <td>-0.024793</td>\n",
       "      <td>0.253333</td>\n",
       "      <td>0.096386</td>\n",
       "      <td>0.515337</td>\n",
       "      <td>0.338870</td>\n",
       "      <td>-0.211111</td>\n",
       "      <td>-0.190323</td>\n",
       "      <td>0.300945</td>\n",
       "      <td>-0.100775</td>\n",
       "      <td>-0.247191</td>\n",
       "      <td>0.159420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20996</th>\n",
       "      <td>0.057851</td>\n",
       "      <td>-0.293333</td>\n",
       "      <td>0.060241</td>\n",
       "      <td>0.631902</td>\n",
       "      <td>-0.199336</td>\n",
       "      <td>-0.573611</td>\n",
       "      <td>-0.084332</td>\n",
       "      <td>0.567380</td>\n",
       "      <td>0.240310</td>\n",
       "      <td>0.033708</td>\n",
       "      <td>-0.507246</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20997</th>\n",
       "      <td>0.586777</td>\n",
       "      <td>-0.493333</td>\n",
       "      <td>0.253012</td>\n",
       "      <td>0.579755</td>\n",
       "      <td>0.461794</td>\n",
       "      <td>-0.569444</td>\n",
       "      <td>0.232719</td>\n",
       "      <td>0.506458</td>\n",
       "      <td>-0.736434</td>\n",
       "      <td>0.730337</td>\n",
       "      <td>-0.623188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20998</th>\n",
       "      <td>-0.537190</td>\n",
       "      <td>0.266667</td>\n",
       "      <td>0.313253</td>\n",
       "      <td>-0.242331</td>\n",
       "      <td>-0.571429</td>\n",
       "      <td>0.241667</td>\n",
       "      <td>0.331797</td>\n",
       "      <td>0.451706</td>\n",
       "      <td>-0.658915</td>\n",
       "      <td>0.483146</td>\n",
       "      <td>0.420290</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20999</th>\n",
       "      <td>-0.090909</td>\n",
       "      <td>0.133333</td>\n",
       "      <td>0.590361</td>\n",
       "      <td>0.012270</td>\n",
       "      <td>0.338870</td>\n",
       "      <td>-0.113194</td>\n",
       "      <td>0.309217</td>\n",
       "      <td>0.338346</td>\n",
       "      <td>-0.317829</td>\n",
       "      <td>0.348315</td>\n",
       "      <td>0.449275</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>21000 rows × 11 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       fixed_acidity  volatile_acidity  citric_acid  residual_sugar  \\\n",
       "0           0.289256         -0.333333    -0.204819       -0.950920   \n",
       "1           0.090909         -0.293333    -0.409639       -0.953988   \n",
       "2          -0.404959          0.473333    -1.000000       -0.888037   \n",
       "3           0.090909         -0.520000    -0.493976       -0.972393   \n",
       "4          -0.256198          0.253333    -0.975904       -0.914110   \n",
       "...              ...               ...          ...             ...   \n",
       "20995      -0.024793          0.253333     0.096386        0.515337   \n",
       "20996       0.057851         -0.293333     0.060241        0.631902   \n",
       "20997       0.586777         -0.493333     0.253012        0.579755   \n",
       "20998      -0.537190          0.266667     0.313253       -0.242331   \n",
       "20999      -0.090909          0.133333     0.590361        0.012270   \n",
       "\n",
       "       chlorides  free_sulfur_dioxide  total_sulfur_dioxide   density  \\\n",
       "0      -0.784053            -0.937500             -0.811060 -0.472142   \n",
       "1      -0.365449            -0.972222             -0.953917 -0.526123   \n",
       "2      -0.707641            -0.972222             -0.963134 -0.634085   \n",
       "3      -0.548173            -0.770833             -0.806452 -0.567766   \n",
       "4      -0.750831            -0.965278             -0.976959 -0.544631   \n",
       "...          ...                  ...                   ...       ...   \n",
       "20995   0.338870            -0.211111             -0.190323  0.300945   \n",
       "20996  -0.199336            -0.573611             -0.084332  0.567380   \n",
       "20997   0.461794            -0.569444              0.232719  0.506458   \n",
       "20998  -0.571429             0.241667              0.331797  0.451706   \n",
       "20999   0.338870            -0.113194              0.309217  0.338346   \n",
       "\n",
       "             pH  sulphates   alcohol  \n",
       "0     -0.178295  -0.606742 -0.710145  \n",
       "1     -0.317829  -0.539326 -0.884058  \n",
       "2      0.410853  -0.640449 -0.217391  \n",
       "3      0.023256  -0.280899 -0.449275  \n",
       "4      0.178295  -0.696629 -0.130435  \n",
       "...         ...        ...       ...  \n",
       "20995 -0.100775  -0.247191  0.159420  \n",
       "20996  0.240310   0.033708 -0.507246  \n",
       "20997 -0.736434   0.730337 -0.623188  \n",
       "20998 -0.658915   0.483146  0.420290  \n",
       "20999 -0.317829   0.348315  0.449275  \n",
       "\n",
       "[21000 rows x 11 columns]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "mm_scaler = MinMaxScaler(feature_range=(-1, 1))\n",
    "\n",
    "X = mm_scaler.fit_transform(X)\n",
    "X = pd.DataFrame(data=X, columns=df_wine.drop('quality', axis=1).columns)\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "b8917d5d-518f-4e93-80d2-2b997da6c4fe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Shape of X_train:  (16800, 11)\n",
      "Shape of X_test:  (4200, 11)\n",
      "Shape of y_train:  (16800,)\n",
      "Shape of y_test:  (4200,)\n"
     ]
    }
   ],
   "source": [
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, shuffle=True, random_state=1)\n",
    "\n",
    "print('Shape of X_train: ', X_train.shape)\n",
    "print('Shape of X_test: ',X_test.shape)\n",
    "print('Shape of y_train: ',y_train.shape)\n",
    "print('Shape of y_test: ',y_test.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "19137524-7d81-4627-9e1f-9f010690b587",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.6314285714285715\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           3       0.58      0.66      0.62       633\n",
      "           4       0.59      0.59      0.59       593\n",
      "           5       0.77      0.63      0.69       611\n",
      "           6       0.69      0.75      0.72       594\n",
      "           7       0.75      0.51      0.61       612\n",
      "           8       0.57      0.59      0.58       575\n",
      "           9       0.55      0.70      0.62       582\n",
      "\n",
      "    accuracy                           0.63      4200\n",
      "   macro avg       0.64      0.63      0.63      4200\n",
      "weighted avg       0.64      0.63      0.63      4200\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay, classification_report\n",
    "\n",
    "# Initialize and train a RandomForestClassifier\n",
    "model = RandomForestClassifier(random_state=42)\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "# Make predictions\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "# Evaluate accuracy\n",
    "accuracy = accuracy_score(y_test, y_pred)\n",
    "print(f\"Accuracy: {accuracy}\")\n",
    "\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "f21f9d0f-69b3-40ef-bba6-b7bd5e6d71ff",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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4uPj0el0Rr0HN5d69erl28bc3JzWrVsbZgofPnwYuHvLbsKECSiKwiuvvEJOTk6+9bm5ufn+1re7eaMlc3NzQ1lmZiYrVqwodJvC4rydra0tPXv2ZNKkSeTk5HDq1KlC91dUN69rv379eoF/06CgoPvar729fb593e1APXz4cLy8vHj33Xe5fv16gXVutibr1auHr68vq1atMrq6IT09nV9++cUwQ7803Lxy4fjx40blGzduvOt2devW5YMPPiAoKKjAf8ubunTpQlpaWr4TweXLlxvWPygffPABTzzxBOPGjSu0zs3j1p0nfd98802+uqXZWzJlyhR2797NDz/8wNq1azl27Ji07suZKtWyv5OzszMTJkzg3XffZdWqVQwePJjevXuzbt06Ro4cyTPPPENERAQff/wx3t7e931HsI8//pjHHnuMbt26MW7cOHQ6HZ9//jm2trZGd3br1q0bPXr04L333iMlJYV27dpx/PhxpkyZQrNmzXjhhRdK66Pfk5OTEx9++CETJ07kxRdfZODAgcTHxzNt2jSsrKyYMmXKPfcxYMAAfvjhB3r16sVbb73FQw89hKWlJdeuXWP79u089dRT9OnTh6+//ppt27bx+OOPU716dbKysgyXGnXt2hXIS0b+/v5s2LCBLl264OLigpubGzVq1KBNmzYsXLiQkSNH0qJFC15//XUaNWpEbm4uR44c4dtvvyUwMDDfHImbHn/8cWbPns2gQYN49dVXiY+P54svvsh3wCxKnK+88grW1ta0a9cOb29voqOjCQ4OxtHRsVR6Ztq1a8err77KsGHDOHToEO3bt8fW1paoqCj27NlDUFAQr7/+eonf514cHR3ZsGEDvXv3plmzZkY31blw4QIrV67k2LFj9O3bFzMzM2bMmMHzzz9P7969GTFiBNnZ2cycOZOkpCQ+++yzUovLy8uLrl27EhwcjLOzM/7+/mzdutVw4nHT8ePHeeONN3j22WcJCAhArVazbds2jh8/zvvvv1/o/l988UW++uorhgwZwuXLlwkKCmLPnj1Mnz6dXr16Gb4HD8LgwYMNl2gWpm3btjg7O/Paa68xZcoULC0t+eGHHzh27Fi+ujdPDD///HN69uyJubk5jRs3LnZrPCQkhODgYD788EPDyU5wcDDjx4+nY8eO9OnTp1j7Ew+ICScHlpnCZjorSt6lNNWr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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Calculate the confusion matrix by passing the true y lables, and the predicted y lables\n",
    "cm = confusion_matrix(y_test, y_pred)\n",
    "\n",
    "# Use the ConfusionMatrixDisplay from skelearn to get a quick and easy graph\n",
    "ConfusionMatrixDisplay(cm).plot()\n",
    "plt.title('RandomForestClassifier - Confusion Matrix')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75b9d5b5-f81a-4b85-86d7-593288953662",
   "metadata": {},
   "source": [
    "### Multiclass Classifier Questions\n",
    "1. Summarize the steps I took to create this multiclass classifier\n",
    "\n",
    "   -\n",
    "   -\n",
    "   -\n",
    "   -\n",
    "   -\n",
    "2. Interpret the Confusion Matrix and Classification Report\n",
    "\n",
    "3. How could we improve this model? Be specific.\n",
    "\n",
    "   -\n",
    "   -\n",
    "   -\n",
    "4. What other models might be good to solve this problem?\n",
    "5. What are the potential downsides of solving this as a classification problem?\n",
    "6. What are the benifits of solving this as a classification problem?\n",
    "   "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1d5c8ec2-19da-40e5-9bac-0d539f5148f6",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true
   },
   "source": [
    "# 3. Binary Classification - Cure The Princess\n",
    "## https://www.kaggle.com/datasets/unmoved/cure-the-princess"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "ec2251cf-7e39-4144-8afa-6dc1302c82ed",
   "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>Phoenix Feather</th>\n",
       "      <th>Unicorn Horn</th>\n",
       "      <th>Dragon's Blood</th>\n",
       "      <th>Mermaid Tears</th>\n",
       "      <th>Fairy Dust</th>\n",
       "      <th>Goblin Toes</th>\n",
       "      <th>Witch's Brew</th>\n",
       "      <th>Griffin Claw</th>\n",
       "      <th>Troll Hair</th>\n",
       "      <th>Kraken Ink</th>\n",
       "      <th>Minotaur Horn</th>\n",
       "      <th>Basilisk Scale</th>\n",
       "      <th>Chimera Fang</th>\n",
       "      <th>Cured</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2.4</td>\n",
       "      <td>18.7</td>\n",
       "      <td>18.4</td>\n",
       "      <td>27.9</td>\n",
       "      <td>7.9</td>\n",
       "      <td>9.6</td>\n",
       "      <td>18.3</td>\n",
       "      <td>13.2</td>\n",
       "      <td>2.5</td>\n",
       "      <td>26.0</td>\n",
       "      <td>10.5</td>\n",
       "      <td>26.2</td>\n",
       "      <td>12.5</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2.1</td>\n",
       "      <td>6.0</td>\n",
       "      <td>15.0</td>\n",
       "      <td>13.3</td>\n",
       "      <td>15.6</td>\n",
       "      <td>13.1</td>\n",
       "      <td>11.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>7.2</td>\n",
       "      <td>26.0</td>\n",
       "      <td>1.5</td>\n",
       "      <td>13.3</td>\n",
       "      <td>6.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>17.2</td>\n",
       "      <td>13.9</td>\n",
       "      <td>23.8</td>\n",
       "      <td>6.8</td>\n",
       "      <td>10.7</td>\n",
       "      <td>15.8</td>\n",
       "      <td>19.4</td>\n",
       "      <td>2.7</td>\n",
       "      <td>15.4</td>\n",
       "      <td>21.2</td>\n",
       "      <td>11.1</td>\n",
       "      <td>16.6</td>\n",
       "      <td>11.4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8.4</td>\n",
       "      <td>9.7</td>\n",
       "      <td>6.8</td>\n",
       "      <td>26.9</td>\n",
       "      <td>4.6</td>\n",
       "      <td>29.1</td>\n",
       "      <td>14.6</td>\n",
       "      <td>19.7</td>\n",
       "      <td>18.0</td>\n",
       "      <td>20.8</td>\n",
       "      <td>13.6</td>\n",
       "      <td>13.9</td>\n",
       "      <td>8.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>22.1</td>\n",
       "      <td>10.8</td>\n",
       "      <td>16.4</td>\n",
       "      <td>10.5</td>\n",
       "      <td>22.0</td>\n",
       "      <td>23.4</td>\n",
       "      <td>2.6</td>\n",
       "      <td>18.2</td>\n",
       "      <td>23.8</td>\n",
       "      <td>11.3</td>\n",
       "      <td>5.5</td>\n",
       "      <td>16.8</td>\n",
       "      <td>16.2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2333</th>\n",
       "      <td>9.4</td>\n",
       "      <td>2.2</td>\n",
       "      <td>15.8</td>\n",
       "      <td>5.9</td>\n",
       "      <td>29.7</td>\n",
       "      <td>18.7</td>\n",
       "      <td>11.5</td>\n",
       "      <td>13.1</td>\n",
       "      <td>15.3</td>\n",
       "      <td>22.5</td>\n",
       "      <td>10.1</td>\n",
       "      <td>4.7</td>\n",
       "      <td>13.8</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2334</th>\n",
       "      <td>12.1</td>\n",
       "      <td>7.6</td>\n",
       "      <td>20.6</td>\n",
       "      <td>5.3</td>\n",
       "      <td>18.9</td>\n",
       "      <td>19.1</td>\n",
       "      <td>9.4</td>\n",
       "      <td>11.9</td>\n",
       "      <td>21.8</td>\n",
       "      <td>12.0</td>\n",
       "      <td>26.7</td>\n",
       "      <td>8.4</td>\n",
       "      <td>24.4</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2335</th>\n",
       "      <td>15.2</td>\n",
       "      <td>33.2</td>\n",
       "      <td>7.2</td>\n",
       "      <td>14.5</td>\n",
       "      <td>16.0</td>\n",
       "      <td>16.7</td>\n",
       "      <td>1.2</td>\n",
       "      <td>32.5</td>\n",
       "      <td>34.5</td>\n",
       "      <td>25.9</td>\n",
       "      <td>3.9</td>\n",
       "      <td>18.0</td>\n",
       "      <td>19.2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2336</th>\n",
       "      <td>2.0</td>\n",
       "      <td>17.0</td>\n",
       "      <td>33.2</td>\n",
       "      <td>13.2</td>\n",
       "      <td>29.1</td>\n",
       "      <td>35.5</td>\n",
       "      <td>19.7</td>\n",
       "      <td>30.3</td>\n",
       "      <td>30.7</td>\n",
       "      <td>4.3</td>\n",
       "      <td>15.7</td>\n",
       "      <td>20.5</td>\n",
       "      <td>2.1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2337</th>\n",
       "      <td>6.2</td>\n",
       "      <td>2.6</td>\n",
       "      <td>11.7</td>\n",
       "      <td>23.8</td>\n",
       "      <td>11.4</td>\n",
       "      <td>7.3</td>\n",
       "      <td>26.4</td>\n",
       "      <td>18.2</td>\n",
       "      <td>14.0</td>\n",
       "      <td>17.1</td>\n",
       "      <td>3.6</td>\n",
       "      <td>21.8</td>\n",
       "      <td>2.5</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>2338 rows × 14 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "      Phoenix Feather  Unicorn Horn  Dragon's Blood  Mermaid Tears  \\\n",
       "0                 2.4          18.7            18.4           27.9   \n",
       "1                 2.1           6.0            15.0           13.3   \n",
       "2                17.2          13.9            23.8            6.8   \n",
       "3                 8.4           9.7             6.8           26.9   \n",
       "4                22.1          10.8            16.4           10.5   \n",
       "...               ...           ...             ...            ...   \n",
       "2333              9.4           2.2            15.8            5.9   \n",
       "2334             12.1           7.6            20.6            5.3   \n",
       "2335             15.2          33.2             7.2           14.5   \n",
       "2336              2.0          17.0            33.2           13.2   \n",
       "2337              6.2           2.6            11.7           23.8   \n",
       "\n",
       "      Fairy Dust  Goblin Toes  Witch's Brew  Griffin Claw  Troll Hair  \\\n",
       "0            7.9          9.6          18.3          13.2         2.5   \n",
       "1           15.6         13.1          11.0           5.0         7.2   \n",
       "2           10.7         15.8          19.4           2.7        15.4   \n",
       "3            4.6         29.1          14.6          19.7        18.0   \n",
       "4           22.0         23.4           2.6          18.2        23.8   \n",
       "...          ...          ...           ...           ...         ...   \n",
       "2333        29.7         18.7          11.5          13.1        15.3   \n",
       "2334        18.9         19.1           9.4          11.9        21.8   \n",
       "2335        16.0         16.7           1.2          32.5        34.5   \n",
       "2336        29.1         35.5          19.7          30.3        30.7   \n",
       "2337        11.4          7.3          26.4          18.2        14.0   \n",
       "\n",
       "      Kraken Ink  Minotaur Horn  Basilisk Scale  Chimera Fang  Cured  \n",
       "0           26.0           10.5            26.2          12.5      0  \n",
       "1           26.0            1.5            13.3           6.2      0  \n",
       "2           21.2           11.1            16.6          11.4      1  \n",
       "3           20.8           13.6            13.9           8.1      1  \n",
       "4           11.3            5.5            16.8          16.2      0  \n",
       "...          ...            ...             ...           ...    ...  \n",
       "2333        22.5           10.1             4.7          13.8      0  \n",
       "2334        12.0           26.7             8.4          24.4      1  \n",
       "2335        25.9            3.9            18.0          19.2      1  \n",
       "2336         4.3           15.7            20.5           2.1      1  \n",
       "2337        17.1            3.6            21.8           2.5      1  \n",
       "\n",
       "[2338 rows x 14 columns]"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_Quest = pd.read_csv('Cure_the_princess.csv')\n",
    "df_Quest"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "id": "6e0035ff-39eb-4573-bc7a-a73c6f65d5fc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Envoke the describe command on the dataset\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "b9409870-e8a6-4b39-b377-368e242e7bc4",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Plot the values from the .corr() command on a heat map\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "476e9be2-b5b8-4dc1-938a-cdac3bd2fd67",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seperate your ingredients (features) from the outcome (target)\n",
    "X = df_Quest.drop('Cured', axis=1)\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9b00daa4-b6ed-4595-9b91-63b6c7258f4c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seperate out Cured (target)\n",
    "y = df_Quest.Cured\n",
    "y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f701c22c-3694-458a-a28b-0317c56497b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import MinMaxScaler from sklearn\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# Initalize the MinMaxScaler with feature_range=(-1, 1)\n",
    "\n",
    "# Transform the Ingridents (X) using the MinMaxScaler\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "56f48cc2-7237-42a5-a455-583db92423a9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seperate the training and testing data using the train_test_split function\n",
    "\n",
    "\n",
    "# print the shape of your datasets\n",
    "print('Shape of X_train: ',)\n",
    "print('Shape of X_test: ',)\n",
    "print('Shape of y_train: ',)\n",
    "print('Shape of y_test: ',)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "6ced6921-4422-4a5a-8513-fdb1abfedb39",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import Statements\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, ConfusionMatrixDisplay, classification_report, roc_curve, roc_auc_score, RocCurveDisplay\n",
    "\n",
    "# Initialize and train a LogisticRegressior\n",
    "\n",
    "# Make class predictions \n",
    "\n",
    "# Make probability predicitons, named y_proba\n",
    "\n",
    "# Evaluate accuracy using the accuracy_score function from sklearn\n",
    "\n",
    "# print the classification_report for your logistic regressor\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "id": "05c16913-b6c1-4590-8233-cde201957710",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Create a confusion matrix using the confusion_matrix function, and save it to a variable named cm\n",
    "\n",
    "# Using ConfusionMatrixDisplay pass your variable named cm that you just created\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a05a9b18-a72c-4bc3-a623-88b3a50a3e19",
   "metadata": {},
   "outputs": [],
   "source": [
    "# use the (receiver operating characteristic) roc_curve function to calculate the falsepositive_rate, truepositive_rate, and thresholds\n",
    "fpr, tpr, thresholds = roc_curve(y_test, y_proba[:, 1])\n",
    "\n",
    "# use the roc_auc_score to calculate the Area Under the Curve (AUC)\n",
    "auc = roc_auc_score(y_test, y_proba[:, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "90b7b3f3-76cc-4baa-b0c9-dd22ec429c6c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Plot the ROC curve\n",
    "plt.figure(figsize=(8, 6))\n",
    "plt.plot(fpr, tpr, color='blue', label=f'AUC = {auc:.2f}')\n",
    "plt.plot([0, 1], [0, 1], linestyle='--', color='gray', label='Random')\n",
    "plt.xlabel('False Positive Rate (FPR)')\n",
    "plt.ylabel('True Positive Rate (TPR)')\n",
    "plt.title('Receiver Operating Characteristic (ROC) Curve')\n",
    "plt.legend()\n",
    "plt.grid(False)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c052078a-8f08-421c-bb16-14837bb69dc6",
   "metadata": {},
   "source": [
    "### Cure the Princess\n",
    "1. What ingredients should you use?\n",
    "2. How can you be certain that these are the correct ingredients?\n",
    "3. Can you determine the **exact ratio** of ingredients that maximizes the princess' survival?\n",
    "4. Should attempt to convience the king that you know to cure the princess, or should you conduct more experiments?\n",
    "5. *Assuming* that you are ready to cure the princess, convince the king."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "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.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
