add 2nd E2E workflow for credit applications
diff --git a/community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-eg1.ipynb b/community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-abalone.ipynb
similarity index 100%
rename from community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-eg1.ipynb
rename to community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-abalone.ipynb
diff --git a/community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-credit-card-approval.ipynb b/community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-credit-card-approval.ipynb
new file mode 100644
index 0000000..04bd2ce
--- /dev/null
+++ b/community-artifacts/E2E-workflows/MADlib-e2e-ds-workflow-credit-card-approval.ipynb
@@ -0,0 +1,4619 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Modeling Workflow Example - Credit Card Applications\n",
+    "\n",
+    "This example from Jarrod Vawdrey\n",
+    "https://github.com/jvawdrey/gpdb5-demo\n",
+    "\n",
+    "----\n",
+    "\n",
+    "Greenplum Database features used\n",
+    "\n",
+    "* External tables - http://gpdb.docs.pivotal.io/530/ref_guide/sql_commands/CREATE_EXTERNAL_TABLE.html\n",
+    "* Window functions - http://gpdb.docs.pivotal.io/510/ref_guide/function-summary.html#topic29\n",
+    "* Apache MADlib - http://madlib.apache.org/\n",
+    "* Procedural language extension to Python - https://gpdb.docs.pivotal.io/530/ref_guide/extensions/pl_python.html\n",
+    "\n",
+    "----\n",
+    "\n",
+    "### Example Description\n",
+    "\n",
+    "**Use case:**\n",
+    "\n",
+    "Using available credit card application data build a classification model to predict whether or not a new application will be approved.\n",
+    "\n",
+    "**Data:** \n",
+    "\n",
+    "Credit Approval Data Set found at UCI Machine Learning Repository\n",
+    "\n",
+    "http://archive.ics.uci.edu/ml/datasets/Credit+Approval\n",
+    "\n",
+    "\"This file concerns credit card applications. All attribute names and values have been changed to meaningless symbols to protect confidentiality of the data. \n",
+    "\n",
+    "This dataset is interesting because there is a good mix of attributes -- continuous, nominal with small numbers of values, and nominal with larger numbers of values. There are also a few missing values.\"\n",
+    "\n",
+    "\n",
+    "----\n",
+    "\n",
+    "## Index\n",
+    "\n",
+    "### Setup \n",
+    "\n",
+    "* <a href=\"#dependencies\">Dependencies</a>\n",
+    "* <a href=\"#package_options\">Package Options</a>\n",
+    "* <a href=\"#database_connection\">Database Connection</a>\n",
+    "    \n",
+    "    \n",
+    "### Data Loading\n",
+    "\n",
+    "* <a href=\"#external_table\">External Table Definition</a>\n",
+    "* <a href=\"#download_data\">Download Data and View Sample</a>\n",
+    "\n",
+    "\n",
+    "### Data Audit\n",
+    "\n",
+    "* <a href=\"#summary_statistics\">Summary Statistics</a>\n",
+    "\n",
+    "\n",
+    "### Data Exploration\n",
+    "\n",
+    "* <a href=\"#de_categorical\">Categorical Columns</a>\n",
+    "* <a href=\"#de_continuous\">Continuous Columns</a>\n",
+    "\n",
+    "\n",
+    "### Feature Engineering\n",
+    "\n",
+    "* <a href=\"#fe_continuous\">Continuous Features</a>\n",
+    "* <a href=\"#fe_one_hot\">One Hot Encode Categorical Features</a>\n",
+    "* <a href=\"#fe_combine\">Combine Continuous & Categorical Features</a>\n",
+    "* <a href=\"#fe_cats_dep\">Plot Categorical Features By Response</a>\n",
+    "* <a href=\"#fe_chi_sq\">Chi-squared Testing</a>\n",
+    "* <a href=\"#fe_corr\">Correlation Testing</a>\n",
+    "* <a href=\"#fe_scatter\">Scatter Plots</a>\n",
+    "\n",
+    "\n",
+    "### Model Development\n",
+    "\n",
+    "* <a href=\"#train_vali_split\">Training & Validation Sample Split</a>\n",
+    "\n",
+    "\n",
+    "* **Random Forest (MADlib)**\n",
+    "    * <a href=\"#rf_train_model\">Train model</a>\n",
+    "    * <a href=\"#rf_variable_importance\">Variable Importance</a>\n",
+    "    * <a href=\"#rf_score_out_of_sample\">Score Validation Data</a>\n",
+    "    * <a href=\"#rf_auc\">Area Under ROC Curve</a>\n",
+    "    * <a href=\"#rf_roc\">Receiver Operating Characteristic Graph (ROC Curve)</a>\n",
+    "    * <a href=\"#rf_confusion_matrix\">Confusion Matrix</a>\n",
+    "    * <a href=\"#rf_model_storage\">Model Storage</a>\n",
+    "\n",
+    "### Model Scoring\n",
+    "\n",
+    "\n",
+    "* <a href=\"#model_scoring_Example\">Model Scoring Example</a>\n",
+    "\n",
+    "----\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Setup"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"dependencies\"></a>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# dependencies\n",
+    "import psycopg2               # Python-PostgreSQL Database Adapter - https://pypi.python.org/pypi/psycopg2\n",
+    "import pandas as pd           # Python Data Analysis Library - https://pandas.pydata.org/\n",
+    "import seaborn as sns         # Statistical data visualization - https://seaborn.pydata.org/\n",
+    "import math                   # Mathematical functions - https://docs.python.org/2/library/math.html\n",
+    "import textwrap as tw         # Text wrapping and filling - https://docs.python.org/2/library/textwrap.html\n",
+    "import ipywidgets as widgets  # Jupyter Widgets - https://ipywidgets.readthedocs.io/en/latest/\n",
+    "import IPython.display as ipd # http://ipython.org/documentation.html"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"package_options\"></a>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Populating the interactive namespace from numpy and matplotlib\n"
+     ]
+    }
+   ],
+   "source": [
+    "# package options\n",
+    "# %matplotlib inline\n",
+    "%pylab inline\n",
+    "\n",
+    "pylab.rcParams['figure.figsize'] = (12, 8)\n",
+    "    \n",
+    "pd.options.mode.chained_assignment = None \n",
+    "pd.set_option('display.max_colwidth', -1)\n",
+    "\n",
+    "pd.options.display.max_rows = 10000\n",
+    "pd.options.display.max_columns = 10000\n",
+    "\n",
+    "sns.set(style=\"darkgrid\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"database_connection\"></a>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "### Connection Details \n",
+       " ------"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Host:** localhost (default)"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Port:** 8000 (default)"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Database name:** madlib (default)"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Username:** gpadmin (default)"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Password:**  (default)"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "------"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "<span style='color:green'>**Connection successful!**</span>"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# init to default values\n",
+    "database_host = 'localhost'\n",
+    "database_databasename = 'madlib'\n",
+    "database_username = 'gpadmin'\n",
+    "database_password = ''\n",
+    "database_port = '8000'\n",
+    "\n",
+    "# interpret string as markdown\n",
+    "def printmd(string):\n",
+    "    ipd.display(ipd.Markdown(string))\n",
+    "    \n",
+    "# forms\n",
+    "message = \"### Connection Details \\n ------\"\n",
+    "printmd(message)\n",
+    "    \n",
+    "printmd(\"**Host:**\")\n",
+    "inputHost = widgets.Text()\n",
+    "ipd.display(inputHost)\n",
+    "\n",
+    "printmd(\"**Port:**\")\n",
+    "inputPort = widgets.Text()\n",
+    "ipd.display(inputPort)\n",
+    "\n",
+    "printmd(\"**Database Name:**\")\n",
+    "inputDatabaseName = widgets.Text()\n",
+    "ipd.display(inputDatabaseName)\n",
+    "\n",
+    "printmd(\"**Username:**\")\n",
+    "inputUsername = widgets.Text()\n",
+    "ipd.display(inputUsername)\n",
+    "\n",
+    "printmd(\"**Password:**\")\n",
+    "inputPassword = widgets.Text()\n",
+    "ipd.display(inputPassword)\n",
+    "\n",
+    "printmd(\"*Leave blank for default values*\")\n",
+    "\n",
+    "\n",
+    "def db_connect():\n",
+    "    global conn, cur\n",
+    "    try:\n",
+    "        connString = \"host='{}' dbname='{}' user='{}' password='{}' port={}\".format(database_host,database_databasename,database_username,database_password,database_port)\n",
+    "        # print connString\n",
+    "        conn = psycopg2.connect(connString)\n",
+    "        cur = conn.cursor()\n",
+    "        conn.autocommit = True\n",
+    "        message = \"<span style='color:green'>**Connection successful!**</span>\"\n",
+    "        printmd(message)\n",
+    "    except:\n",
+    "        message = \"<span style='color:red'>**ERROR: Unable to connect to the database**</span>\"\n",
+    "        printmd(message)\n",
+    "    \n",
+    "def on_button_click(b):\n",
+    "    \n",
+    "    global database_host, database_databasename, database_username, database_password, database_port\n",
+    "    \n",
+    "    ipd.clear_output()\n",
+    "    \n",
+    "    message = \"### Connection Details \\n ------\"\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    if inputHost.value == \"\":\n",
+    "        message = \"**Host:** {} (default)\".format(database_host)\n",
+    "        printmd(message)\n",
+    "    else:\n",
+    "        database_host = inputHost.value\n",
+    "        message = \"**Host:** {}\".format(database_host)\n",
+    "        printmd(message)\n",
+    "\n",
+    "    if inputPort.value == \"\":\n",
+    "        message = \"**Port:** {} (default)\".format(database_port)\n",
+    "        printmd(message)\n",
+    "    else:\n",
+    "        database_port = inputPort.value\n",
+    "        message = \"**Port:** {}\".format(database_port)\n",
+    "        printmd(message)\n",
+    "        \n",
+    "    if inputDatabaseName.value == \"\":\n",
+    "        message = \"**Database name:** {} (default)\".format(database_databasename)\n",
+    "        printmd(message)\n",
+    "    else:\n",
+    "        database_databasename = inputDatabaseName.value\n",
+    "        message = \"**Database name:** {}\".format(database_databasename)\n",
+    "        printmd(message)\n",
+    "        \n",
+    "    if inputUsername.value == \"\":\n",
+    "        message = \"**Username:** {} (default)\".format(database_username)\n",
+    "        printmd(message)\n",
+    "    else:\n",
+    "        database_username = inputUsername.value\n",
+    "        message = \"**Username:** {}\".format(database_username)\n",
+    "        printmd(message)\n",
+    "        \n",
+    "    if inputPassword.value == \"\":\n",
+    "        message = \"**Password:** {} (default)\".format(database_password)\n",
+    "        printmd(message)\n",
+    "    else:\n",
+    "        database_password = inputPassword.value\n",
+    "        message = \"**Password:** ###########\"\n",
+    "        printmd(message)\n",
+    "    \n",
+    "    printmd(\"------\")\n",
+    "    db_connect()\n",
+    "        \n",
+    "button = widgets.Button(description=\"Connect\")\n",
+    "ipd.display(button)\n",
+    "button.on_click(on_button_click)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# helper function\n",
+    "def query_gpdb(query): \n",
+    "\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    return pd.DataFrame(cur.fetchall(), columns=colnames)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Data Loading"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"download_data\"></a>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# external table\n",
+    "ddl = \"\"\"\n",
+    "    DROP EXTERNAL TABLE IF EXISTS public.credit_application_external;\n",
+    "    CREATE EXTERNAL WEB TABLE public.credit_application_external (\n",
+    "        a1 varchar(1)\n",
+    "       ,a2 float\n",
+    "       ,a3 float\n",
+    "       ,a4 varchar(1)\n",
+    "       ,a5 varchar(2)\n",
+    "       ,a6 varchar(2)\n",
+    "       ,a7 varchar(2)\n",
+    "       ,a8 float\n",
+    "       ,a9 boolean\n",
+    "       ,a10 boolean\n",
+    "       ,a11 float\n",
+    "       ,a12 boolean\n",
+    "       ,a13 varchar(1)\n",
+    "       ,a14 float\n",
+    "       ,a15 float\n",
+    "       ,a16 varchar(1)\n",
+    "    ) LOCATION ('http://archive.ics.uci.edu/ml/machine-learning-databases/credit-screening/crx.data')\n",
+    "    FORMAT 'CSV'\n",
+    "    (NULL AS '?');\n",
+    "\"\"\"\n",
+    "cur.execute(ddl)\n",
+    "conn.commit();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"external_table\"></a>"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# impute mean or most freq occuring value for null \n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.credit_application_data;\n",
+    "    CREATE TABLE public.credit_application_data AS\n",
+    "    SELECT row_number() OVER() AS _id\n",
+    "          ,coalesce(a1,'b') AS a1\n",
+    "          ,coalesce(a2, avg(a2) OVER()) AS a2 \n",
+    "          ,coalesce(a3, avg(a3) OVER()) AS a3\n",
+    "          ,coalesce(a4, 'u') AS a4\n",
+    "          ,coalesce(a5, 'g') AS a5\n",
+    "          ,coalesce(a6, 'c') AS a6\n",
+    "          ,coalesce(a7, 'v') AS a7\n",
+    "          ,coalesce(a8, avg(a8) OVER()) AS a8\n",
+    "          ,coalesce(a9, True) AS a9\n",
+    "          ,coalesce(a10, False) AS a10\n",
+    "          ,coalesce(a11, 0) AS a11\n",
+    "          ,coalesce(a12, False) AS a12\n",
+    "          ,coalesce(a13, 'g') AS a13\n",
+    "          ,coalesce(a14, avg(a14) OVER()) AS a14\n",
+    "          ,coalesce(a15, avg(a15) OVER()) AS a15\n",
+    "          ,CASE WHEN a16 = '+' THEN 1 ELSE 0 END AS a16\n",
+    "    FROM public.credit_application_external\n",
+    "    DISTRIBUTED RANDOMLY;\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "conn.commit();"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "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>_id</th>\n",
+       "      <th>a1</th>\n",
+       "      <th>a2</th>\n",
+       "      <th>a3</th>\n",
+       "      <th>a4</th>\n",
+       "      <th>a5</th>\n",
+       "      <th>a6</th>\n",
+       "      <th>a7</th>\n",
+       "      <th>a8</th>\n",
+       "      <th>a9</th>\n",
+       "      <th>a10</th>\n",
+       "      <th>a11</th>\n",
+       "      <th>a12</th>\n",
+       "      <th>a13</th>\n",
+       "      <th>a14</th>\n",
+       "      <th>a15</th>\n",
+       "      <th>a16</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>b</td>\n",
+       "      <td>30.83</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>w</td>\n",
+       "      <td>v</td>\n",
+       "      <td>1.250</td>\n",
+       "      <td>True</td>\n",
+       "      <td>True</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>g</td>\n",
+       "      <td>202.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>2</td>\n",
+       "      <td>a</td>\n",
+       "      <td>58.67</td>\n",
+       "      <td>4.460</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>q</td>\n",
+       "      <td>h</td>\n",
+       "      <td>3.040</td>\n",
+       "      <td>True</td>\n",
+       "      <td>True</td>\n",
+       "      <td>6.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>g</td>\n",
+       "      <td>43.0</td>\n",
+       "      <td>560.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>3</td>\n",
+       "      <td>a</td>\n",
+       "      <td>24.50</td>\n",
+       "      <td>0.500</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>q</td>\n",
+       "      <td>h</td>\n",
+       "      <td>1.500</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>g</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>824.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>4</td>\n",
+       "      <td>b</td>\n",
+       "      <td>27.83</td>\n",
+       "      <td>1.540</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>w</td>\n",
+       "      <td>v</td>\n",
+       "      <td>3.750</td>\n",
+       "      <td>True</td>\n",
+       "      <td>True</td>\n",
+       "      <td>5.0</td>\n",
+       "      <td>True</td>\n",
+       "      <td>g</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>5</td>\n",
+       "      <td>b</td>\n",
+       "      <td>20.17</td>\n",
+       "      <td>5.625</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>w</td>\n",
+       "      <td>v</td>\n",
+       "      <td>1.710</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>s</td>\n",
+       "      <td>120.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>6</td>\n",
+       "      <td>b</td>\n",
+       "      <td>32.08</td>\n",
+       "      <td>4.000</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>m</td>\n",
+       "      <td>v</td>\n",
+       "      <td>2.500</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>True</td>\n",
+       "      <td>g</td>\n",
+       "      <td>360.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>7</td>\n",
+       "      <td>b</td>\n",
+       "      <td>33.17</td>\n",
+       "      <td>1.040</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>r</td>\n",
+       "      <td>h</td>\n",
+       "      <td>6.500</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>True</td>\n",
+       "      <td>g</td>\n",
+       "      <td>164.0</td>\n",
+       "      <td>31285.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>8</td>\n",
+       "      <td>a</td>\n",
+       "      <td>22.92</td>\n",
+       "      <td>11.585</td>\n",
+       "      <td>u</td>\n",
+       "      <td>g</td>\n",
+       "      <td>cc</td>\n",
+       "      <td>v</td>\n",
+       "      <td>0.040</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>g</td>\n",
+       "      <td>80.0</td>\n",
+       "      <td>1349.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>9</td>\n",
+       "      <td>b</td>\n",
+       "      <td>54.42</td>\n",
+       "      <td>0.500</td>\n",
+       "      <td>y</td>\n",
+       "      <td>p</td>\n",
+       "      <td>k</td>\n",
+       "      <td>h</td>\n",
+       "      <td>3.960</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>False</td>\n",
+       "      <td>g</td>\n",
+       "      <td>180.0</td>\n",
+       "      <td>314.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>10</td>\n",
+       "      <td>b</td>\n",
+       "      <td>42.50</td>\n",
+       "      <td>4.915</td>\n",
+       "      <td>y</td>\n",
+       "      <td>p</td>\n",
+       "      <td>w</td>\n",
+       "      <td>v</td>\n",
+       "      <td>3.165</td>\n",
+       "      <td>True</td>\n",
+       "      <td>False</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>True</td>\n",
+       "      <td>g</td>\n",
+       "      <td>52.0</td>\n",
+       "      <td>1442.0</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   _id a1     a2      a3 a4 a5  a6 a7     a8    a9    a10  a11    a12 a13  \\\n",
+       "0  1    b  30.83  0.000   u  g  w   v  1.250  True  True   1.0  False  g    \n",
+       "1  2    a  58.67  4.460   u  g  q   h  3.040  True  True   6.0  False  g    \n",
+       "2  3    a  24.50  0.500   u  g  q   h  1.500  True  False  0.0  False  g    \n",
+       "3  4    b  27.83  1.540   u  g  w   v  3.750  True  True   5.0  True   g    \n",
+       "4  5    b  20.17  5.625   u  g  w   v  1.710  True  False  0.0  False  s    \n",
+       "5  6    b  32.08  4.000   u  g  m   v  2.500  True  False  0.0  True   g    \n",
+       "6  7    b  33.17  1.040   u  g  r   h  6.500  True  False  0.0  True   g    \n",
+       "7  8    a  22.92  11.585  u  g  cc  v  0.040  True  False  0.0  False  g    \n",
+       "8  9    b  54.42  0.500   y  p  k   h  3.960  True  False  0.0  False  g    \n",
+       "9  10   b  42.50  4.915   y  p  w   v  3.165  True  False  0.0  True   g    \n",
+       "\n",
+       "     a14      a15  a16  \n",
+       "0  202.0  0.0      1    \n",
+       "1  43.0   560.0    1    \n",
+       "2  280.0  824.0    1    \n",
+       "3  100.0  3.0      1    \n",
+       "4  120.0  0.0      1    \n",
+       "5  360.0  0.0      1    \n",
+       "6  164.0  31285.0  1    \n",
+       "7  80.0   1349.0   1    \n",
+       "8  180.0  314.0    1    \n",
+       "9  52.0   1442.0   1    "
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# view sample\n",
+    "query = \"\"\"\n",
+    "    SELECT *\n",
+    "    FROM public.credit_application_data ORDER BY _id\n",
+    "    LIMIT 10\n",
+    "\"\"\"\n",
+    "query_gpdb(query)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Data Audit"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"summary_statistics\"></a>\n",
+    "Summary Statistics\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__summary.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# drop existing table & run madlib summary stats function\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.credit_application_summary;\n",
+    "    SELECT madlib.summary('public.credit_application_data','public.credit_application_summary');\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "# grab results from gpdb\n",
+    "query = \"\"\"\n",
+    "    SELECT * FROM public.credit_application_summary;\n",
+    "\"\"\"\n",
+    "data_summary = query_gpdb(query)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "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>group_by</th>\n",
+       "      <th>group_by_value</th>\n",
+       "      <th>target_column</th>\n",
+       "      <th>column_number</th>\n",
+       "      <th>data_type</th>\n",
+       "      <th>row_count</th>\n",
+       "      <th>distinct_values</th>\n",
+       "      <th>missing_values</th>\n",
+       "      <th>blank_values</th>\n",
+       "      <th>fraction_missing</th>\n",
+       "      <th>fraction_blank</th>\n",
+       "      <th>positive_values</th>\n",
+       "      <th>negative_values</th>\n",
+       "      <th>zero_values</th>\n",
+       "      <th>mean</th>\n",
+       "      <th>variance</th>\n",
+       "      <th>confidence_interval</th>\n",
+       "      <th>min</th>\n",
+       "      <th>max</th>\n",
+       "      <th>first_quartile</th>\n",
+       "      <th>median</th>\n",
+       "      <th>third_quartile</th>\n",
+       "      <th>most_frequent_values</th>\n",
+       "      <th>mfv_frequencies</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>_id</td>\n",
+       "      <td>1</td>\n",
+       "      <td>int8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>690</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>690.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>345.500000</td>\n",
+       "      <td>3.973250e+04</td>\n",
+       "      <td>[330.626798148, 360.373201852]</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>690.00</td>\n",
+       "      <td>173.250</td>\n",
+       "      <td>345.500</td>\n",
+       "      <td>517.7500</td>\n",
+       "      <td>[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]</td>\n",
+       "      <td>[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a1</td>\n",
+       "      <td>2</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[b, a]</td>\n",
+       "      <td>[480, 210]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a2</td>\n",
+       "      <td>3</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>350</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>690.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>31.568171</td>\n",
+       "      <td>1.405001e+02</td>\n",
+       "      <td>[30.6837281819, 32.452614001]</td>\n",
+       "      <td>13.75</td>\n",
+       "      <td>80.25</td>\n",
+       "      <td>22.670</td>\n",
+       "      <td>28.625</td>\n",
+       "      <td>37.7075</td>\n",
+       "      <td>[31.5681710914455, 22.67, 20.42, 19.17, 18.83, 25, 24.5, 27.83, 23, 23.25]</td>\n",
+       "      <td>[12, 9, 7, 6, 6, 6, 6, 5, 5, 5]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a3</td>\n",
+       "      <td>4</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>215</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>671.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>19.0</td>\n",
+       "      <td>4.758725</td>\n",
+       "      <td>2.478211e+01</td>\n",
+       "      <td>[4.38727438315, 5.13017489221]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>28.00</td>\n",
+       "      <td>1.000</td>\n",
+       "      <td>2.750</td>\n",
+       "      <td>7.2075</td>\n",
+       "      <td>[1.5, 3, 2.5, 0, 0.75, 1.25, 0.5, 5, 6.5, 1.75]</td>\n",
+       "      <td>[21, 19, 19, 19, 16, 16, 15, 14, 12, 12]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a4</td>\n",
+       "      <td>5</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>3</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[u, y, l]</td>\n",
+       "      <td>[525, 163, 2]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a5</td>\n",
+       "      <td>6</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>3</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>2.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[g, p, gg]</td>\n",
+       "      <td>[525, 163, 2]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a6</td>\n",
+       "      <td>7</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>14</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>2.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[c, q, w, i, aa, ff, k, cc, x, m]</td>\n",
+       "      <td>[146, 78, 64, 59, 54, 53, 51, 41, 38, 38]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a7</td>\n",
+       "      <td>8</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>9</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>2.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[v, h, bb, ff, j, z, dd, n, o]</td>\n",
+       "      <td>[408, 138, 59, 57, 8, 8, 6, 4, 2]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a8</td>\n",
+       "      <td>9</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>132</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>620.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>70.0</td>\n",
+       "      <td>2.223406</td>\n",
+       "      <td>1.119915e+01</td>\n",
+       "      <td>[1.97370260799, 2.47310898622]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>28.50</td>\n",
+       "      <td>0.165</td>\n",
+       "      <td>1.000</td>\n",
+       "      <td>2.6250</td>\n",
+       "      <td>[0, 0.25, 0.04, 1, 0.125, 0.5, 0.085, 1.5, 0.165, 2.5]</td>\n",
+       "      <td>[70, 35, 33, 31, 30, 28, 26, 25, 22, 17]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a9</td>\n",
+       "      <td>10</td>\n",
+       "      <td>bool</td>\n",
+       "      <td>690</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[t, f]</td>\n",
+       "      <td>[361, 329]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>10</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a10</td>\n",
+       "      <td>11</td>\n",
+       "      <td>bool</td>\n",
+       "      <td>690</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[f, t]</td>\n",
+       "      <td>[395, 295]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>11</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a11</td>\n",
+       "      <td>12</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>23</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>295.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>395.0</td>\n",
+       "      <td>2.400000</td>\n",
+       "      <td>2.364819e+01</td>\n",
+       "      <td>[2.03714723216, 2.76285276784]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>67.00</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>3.0000</td>\n",
+       "      <td>[0, 1, 2, 3, 6, 11, 5, 7, 4, 9]</td>\n",
+       "      <td>[395, 71, 45, 28, 23, 19, 18, 16, 15, 10]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>12</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a12</td>\n",
+       "      <td>13</td>\n",
+       "      <td>bool</td>\n",
+       "      <td>690</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[f, t]</td>\n",
+       "      <td>[374, 316]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>13</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a13</td>\n",
+       "      <td>14</td>\n",
+       "      <td>varchar</td>\n",
+       "      <td>690</td>\n",
+       "      <td>3</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>None</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>[g, s, p]</td>\n",
+       "      <td>[625, 57, 8]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>14</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a14</td>\n",
+       "      <td>15</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>171</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>558.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>132.0</td>\n",
+       "      <td>184.014771</td>\n",
+       "      <td>2.963882e+04</td>\n",
+       "      <td>[171.168947644, 196.860594454]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>2000.00</td>\n",
+       "      <td>80.000</td>\n",
+       "      <td>160.000</td>\n",
+       "      <td>272.0000</td>\n",
+       "      <td>[0, 200, 120, 160, 80, 100, 280, 180, 140, 240]</td>\n",
+       "      <td>[132, 35, 35, 34, 30, 30, 22, 18, 16, 14]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>15</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a15</td>\n",
+       "      <td>16</td>\n",
+       "      <td>float8</td>\n",
+       "      <td>690</td>\n",
+       "      <td>240</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>395.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>295.0</td>\n",
+       "      <td>1017.385507</td>\n",
+       "      <td>2.714517e+07</td>\n",
+       "      <td>[628.628883637, 1406.14213086]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>100000.00</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>5.000</td>\n",
+       "      <td>395.5000</td>\n",
+       "      <td>[0, 1, 500, 1000, 2, 6, 300, 5, 3, 200]</td>\n",
+       "      <td>[295, 29, 10, 10, 9, 8, 8, 8, 6, 6]</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>16</th>\n",
+       "      <td>None</td>\n",
+       "      <td>None</td>\n",
+       "      <td>a16</td>\n",
+       "      <td>17</td>\n",
+       "      <td>int4</td>\n",
+       "      <td>690</td>\n",
+       "      <td>2</td>\n",
+       "      <td>0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>307.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>383.0</td>\n",
+       "      <td>0.444928</td>\n",
+       "      <td>2.473255e-01</td>\n",
+       "      <td>[0.407819673245, 0.482035399219]</td>\n",
+       "      <td>0.00</td>\n",
+       "      <td>1.00</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>1.0000</td>\n",
+       "      <td>[0, 1]</td>\n",
+       "      <td>[383, 307]</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   group_by group_by_value target_column  column_number data_type  row_count  \\\n",
+       "0   None     None           _id           1              int8      690         \n",
+       "1   None     None           a1            2              varchar   690         \n",
+       "2   None     None           a2            3              float8    690         \n",
+       "3   None     None           a3            4              float8    690         \n",
+       "4   None     None           a4            5              varchar   690         \n",
+       "5   None     None           a5            6              varchar   690         \n",
+       "6   None     None           a6            7              varchar   690         \n",
+       "7   None     None           a7            8              varchar   690         \n",
+       "8   None     None           a8            9              float8    690         \n",
+       "9   None     None           a9            10             bool      690         \n",
+       "10  None     None           a10           11             bool      690         \n",
+       "11  None     None           a11           12             float8    690         \n",
+       "12  None     None           a12           13             bool      690         \n",
+       "13  None     None           a13           14             varchar   690         \n",
+       "14  None     None           a14           15             float8    690         \n",
+       "15  None     None           a15           16             float8    690         \n",
+       "16  None     None           a16           17             int4      690         \n",
+       "\n",
+       "    distinct_values  missing_values  blank_values  fraction_missing  \\\n",
+       "0   690              0              NaN            0.0                \n",
+       "1   2                0               0.0           0.0                \n",
+       "2   350              0              NaN            0.0                \n",
+       "3   215              0              NaN            0.0                \n",
+       "4   3                0               0.0           0.0                \n",
+       "5   3                0               0.0           0.0                \n",
+       "6   14               0               0.0           0.0                \n",
+       "7   9                0               0.0           0.0                \n",
+       "8   132              0              NaN            0.0                \n",
+       "9   2                0              NaN            0.0                \n",
+       "10  2                0              NaN            0.0                \n",
+       "11  23               0              NaN            0.0                \n",
+       "12  2                0              NaN            0.0                \n",
+       "13  3                0               0.0           0.0                \n",
+       "14  171              0              NaN            0.0                \n",
+       "15  240              0              NaN            0.0                \n",
+       "16  2                0              NaN            0.0                \n",
+       "\n",
+       "    fraction_blank  positive_values  negative_values  zero_values  \\\n",
+       "0  NaN              690.0            0.0              0.0           \n",
+       "1   0.0            NaN              NaN              NaN            \n",
+       "2  NaN              690.0            0.0              0.0           \n",
+       "3  NaN              671.0            0.0              19.0          \n",
+       "4   0.0            NaN              NaN              NaN            \n",
+       "5   0.0            NaN              NaN              NaN            \n",
+       "6   0.0            NaN              NaN              NaN            \n",
+       "7   0.0            NaN              NaN              NaN            \n",
+       "8  NaN              620.0            0.0              70.0          \n",
+       "9  NaN             NaN              NaN              NaN            \n",
+       "10 NaN             NaN              NaN              NaN            \n",
+       "11 NaN              295.0            0.0              395.0         \n",
+       "12 NaN             NaN              NaN              NaN            \n",
+       "13  0.0            NaN              NaN              NaN            \n",
+       "14 NaN              558.0            0.0              132.0         \n",
+       "15 NaN              395.0            0.0              295.0         \n",
+       "16 NaN              307.0            0.0              383.0         \n",
+       "\n",
+       "           mean      variance               confidence_interval    min  \\\n",
+       "0   345.500000   3.973250e+04  [330.626798148, 360.373201852]    1.00    \n",
+       "1  NaN          NaN            None                              1.00    \n",
+       "2   31.568171    1.405001e+02  [30.6837281819, 32.452614001]     13.75   \n",
+       "3   4.758725     2.478211e+01  [4.38727438315, 5.13017489221]    0.00    \n",
+       "4  NaN          NaN            None                              1.00    \n",
+       "5  NaN          NaN            None                              1.00    \n",
+       "6  NaN          NaN            None                              1.00    \n",
+       "7  NaN          NaN            None                              1.00    \n",
+       "8   2.223406     1.119915e+01  [1.97370260799, 2.47310898622]    0.00    \n",
+       "9  NaN          NaN            None                             NaN      \n",
+       "10 NaN          NaN            None                             NaN      \n",
+       "11  2.400000     2.364819e+01  [2.03714723216, 2.76285276784]    0.00    \n",
+       "12 NaN          NaN            None                             NaN      \n",
+       "13 NaN          NaN            None                              1.00    \n",
+       "14  184.014771   2.963882e+04  [171.168947644, 196.860594454]    0.00    \n",
+       "15  1017.385507  2.714517e+07  [628.628883637, 1406.14213086]    0.00    \n",
+       "16  0.444928     2.473255e-01  [0.407819673245, 0.482035399219]  0.00    \n",
+       "\n",
+       "          max  first_quartile   median  third_quartile  \\\n",
+       "0   690.00     173.250         345.500  517.7500         \n",
+       "1   1.00      NaN             NaN      NaN               \n",
+       "2   80.25      22.670          28.625   37.7075          \n",
+       "3   28.00      1.000           2.750    7.2075           \n",
+       "4   1.00      NaN             NaN      NaN               \n",
+       "5   2.00      NaN             NaN      NaN               \n",
+       "6   2.00      NaN             NaN      NaN               \n",
+       "7   2.00      NaN             NaN      NaN               \n",
+       "8   28.50      0.165           1.000    2.6250           \n",
+       "9  NaN        NaN             NaN      NaN               \n",
+       "10 NaN        NaN             NaN      NaN               \n",
+       "11  67.00      0.000           0.000    3.0000           \n",
+       "12 NaN        NaN             NaN      NaN               \n",
+       "13  1.00      NaN             NaN      NaN               \n",
+       "14  2000.00    80.000          160.000  272.0000         \n",
+       "15  100000.00  0.000           5.000    395.5000         \n",
+       "16  1.00       0.000           0.000    1.0000           \n",
+       "\n",
+       "                                                          most_frequent_values  \\\n",
+       "0   [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]                                         \n",
+       "1   [b, a]                                                                       \n",
+       "2   [31.5681710914455, 22.67, 20.42, 19.17, 18.83, 25, 24.5, 27.83, 23, 23.25]   \n",
+       "3   [1.5, 3, 2.5, 0, 0.75, 1.25, 0.5, 5, 6.5, 1.75]                              \n",
+       "4   [u, y, l]                                                                    \n",
+       "5   [g, p, gg]                                                                   \n",
+       "6   [c, q, w, i, aa, ff, k, cc, x, m]                                            \n",
+       "7   [v, h, bb, ff, j, z, dd, n, o]                                               \n",
+       "8   [0, 0.25, 0.04, 1, 0.125, 0.5, 0.085, 1.5, 0.165, 2.5]                       \n",
+       "9   [t, f]                                                                       \n",
+       "10  [f, t]                                                                       \n",
+       "11  [0, 1, 2, 3, 6, 11, 5, 7, 4, 9]                                              \n",
+       "12  [f, t]                                                                       \n",
+       "13  [g, s, p]                                                                    \n",
+       "14  [0, 200, 120, 160, 80, 100, 280, 180, 140, 240]                              \n",
+       "15  [0, 1, 500, 1000, 2, 6, 300, 5, 3, 200]                                      \n",
+       "16  [0, 1]                                                                       \n",
+       "\n",
+       "                              mfv_frequencies  \n",
+       "0   [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]             \n",
+       "1   [480, 210]                                 \n",
+       "2   [12, 9, 7, 6, 6, 6, 6, 5, 5, 5]            \n",
+       "3   [21, 19, 19, 19, 16, 16, 15, 14, 12, 12]   \n",
+       "4   [525, 163, 2]                              \n",
+       "5   [525, 163, 2]                              \n",
+       "6   [146, 78, 64, 59, 54, 53, 51, 41, 38, 38]  \n",
+       "7   [408, 138, 59, 57, 8, 8, 6, 4, 2]          \n",
+       "8   [70, 35, 33, 31, 30, 28, 26, 25, 22, 17]   \n",
+       "9   [361, 329]                                 \n",
+       "10  [395, 295]                                 \n",
+       "11  [395, 71, 45, 28, 23, 19, 18, 16, 15, 10]  \n",
+       "12  [374, 316]                                 \n",
+       "13  [625, 57, 8]                               \n",
+       "14  [132, 35, 35, 34, 30, 30, 22, 18, 16, 14]  \n",
+       "15  [295, 29, 10, 10, 9, 8, 8, 8, 6, 6]        \n",
+       "16  [383, 307]                                 "
+      ]
+     },
+     "execution_count": 9,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "data_summary"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Data Exploration"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"de_categorical\"></a>\n",
+    "#### Categorical Columns"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n",
+       " **Select Column:**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "9aa76145d40841e08429821d3cb591f4",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "RHJvcGRvd24oZGVzY3JpcHRpb249dSdDb2x1bW46Jywgb3B0aW9ucz0oJ2ExJywgJ2E0JywgJ2E1JywgJ2E2JywgJ2E3JywgJ2E5JywgJ2ExMCcsICdhMTInLCAnYTEzJywgJ2ExNicpLCB2YWzigKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "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3mSLUb3bbrvlsssuy5NPPpkjjjgiV111VZqamt71C1x55ZX50pe+lCT55S9/mRNPPDHHHHNMvvzlL2fDhg3vfTkAAPQQW4zqK6+8Mk1NTfm3f/u37LjjjqlUKrnyyivf1cEXL16cu+66q+v+F77whUybNi3/8z//k87Oznzve99778sBAKCH2GJUDxo0KGeffXYOOuigJMmFF16YQYMGbfHAr7/+embNmpWzzjorSfKrX/0qa9euzSGHHJIkGTduXFpaWkq2AwBAj7DZT//48Ic/nEqlstlf/OUvf/lHD/yVr3wlU6ZMySuvvJIkaWtrS2NjY9fjjY2NaW1t7e7eDBy4c7d/B6BeGht3qfcEAGpgs1G9ePHidHZ25pprrslee+2VCRMmpG/fvpk9e3ZefvnlP3rQO++8M3vuuWdGjBiR2bNnJ0k6Ozvf8bw/Fu2bs3r1mnR0vPNYteQvSeDdWrnyzXpPAKCb+vSpdPtE7majerfddkuSPPnkk/mnf/qnrp9Pnjw548aN+6MHnT9/flauXJnPfOYz+fWvf53f/OY3qVQqWbVqVddzVq5c2a1/8AgAAD3VFr/85e23384LL7yQfffdN0nyzDPPbPEbFW+66aau27Nnz87DDz+c6dOn5/jjj89jjz2W4cOHZ86cORk5cmThfAAAqL8tRvU//MM/ZMKECTnggAPS2dmZ5557LlddddV7erGrrroql1xySd56660ceOCBmTx58ns6DgAA9CSVzj90sfPv+cUvfpE99tgjjz32WCqVSoYPH57dd9+9VvveoadcUz3pi7fVdQPQ83135smuqQbohbbqNdW/c9FFF+W///u/M3r06Pc8DAAAtmVb/JzqAw44IHfffXdefvnlvP76613/AwAAfmuLZ6rvvffed3xJS6VS2eLnVAMAwPZii1H985//vBY7AACg19piVHd0dOTGG2/MAw88kA0bNuTII4/MWWedlYaGLf4qAABsF7Z4TfXVV1+dn/zkJzn11FPz+c9/Po8//niuvPLKWmwDAIBeYYunmx988MH813/9V/r165ck+eQnP5lPf/rTVR8GAAC9xRbPVHd2dnYFdZL0799/k/sAALC922JUf/jDH84VV1yRl156KS+99FKmT5+eP/mTP6nFNgAA6BW2GNWXXnpp3njjjUycODETJkzIq6++mmnTptViGwAA9Apb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\n",
+      "text/plain": [
+       "<Figure size 864x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "catColumns = ['a1','a4','a5','a6','a7','a9','a10','a12','a13','a16']\n",
+    "\n",
+    "def bar_plot(data,title,x,xLabel,y,yLabel,color=None,xAxisRotation=90):\n",
+    "\n",
+    "    # Bar plot\n",
+    "    pylab.rcParams['figure.figsize'] = (12, 8)\n",
+    "    seq_col_brew = sns.color_palette(\"Blues_r\", 1)\n",
+    "    sns.color_palette(seq_col_brew)\n",
+    "    if color != None:\n",
+    "        plt = sns.barplot(x=x, y=y, data=data, color=color)\n",
+    "    else:\n",
+    "        plt = sns.barplot(x=x, y=y, data=data)\n",
+    "        \n",
+    "    # titles\n",
+    "    plt.set_title(title,fontsize=30)\n",
+    "    plt.set_xlabel(xLabel,fontsize=12)\n",
+    "    plt.set_ylabel(yLabel,fontsize=12)\n",
+    "    \n",
+    "    # rotate x axis labels\n",
+    "    for item in plt.get_xticklabels():\n",
+    "        item.set_rotation(xAxisRotation)\n",
+    "\n",
+    "    # remove scientific notation\n",
+    "    plt.ticklabel_format(style='plain', axis='y')\n",
+    "\n",
+    "\n",
+    "def get_cat_data_frame(col):\n",
+    "    query = \"\"\"\n",
+    "        SELECT *\n",
+    "              ,round((record_count * 100.0) / sum(record_count) OVER(),2) AS perc_records\n",
+    "        FROM (\n",
+    "            SELECT {} AS col\n",
+    "                  ,count(*) AS record_count\n",
+    "            FROM public.credit_application_data\n",
+    "            GROUP BY 1\n",
+    "        ) foo\n",
+    "        ORDER BY perc_records DESC\n",
+    "    \"\"\".format(col)\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    return pd.DataFrame(cur.fetchall(), columns=colnames)\n",
+    "    \n",
+    "def on_cat_selection(res):\n",
+    "    if res['type'] == 'change' and res['name'] == 'value':\n",
+    "        ipd.clear_output()\n",
+    "        printmd(\"-----\\n **Select Column:**\")\n",
+    "        ipd.display(catDropdown)\n",
+    "        df = get_cat_data_frame(res['new'])\n",
+    "        bar_plot(df,res['new'],\"col\",res['new'],\"perc_records\",\"% Records\", None, 0)\n",
+    "    \n",
+    "catDropdown = widgets.Dropdown(\n",
+    "    options=catColumns,\n",
+    "    value=catColumns[0],\n",
+    "    description='Column:',\n",
+    "    disabled=False,\n",
+    ")\n",
+    "\n",
+    "catDropdown.observe(on_cat_selection)\n",
+    "printmd(\"-----\\n **Select Column:**\")\n",
+    "ipd.display(catDropdown)\n",
+    "df = get_cat_data_frame(catColumns[0])\n",
+    "bar_plot(df,catColumns[0],\"col\",catColumns[0],\"perc_records\",\"% Records\", None, 0)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Low % of values in any one class can skew model results and/or create unstable model. In practice we may consider merging and/or excluding some groups. (e.g. a4: [i], a5: [gg], a7: [z,j,dd,n,o), a13: [s,p])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"de_continuous\"></a>\n",
+    "#### Continuous Columns"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "a842ccc35fce4c3386a2ab7700c3d1d9",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "SEJveChjaGlsZHJlbj0oRHJvcGRvd24oZGVzY3JpcHRpb249dSdDb2x1bW46Jywgb3B0aW9ucz0oJ2EyJywgJ2EzJywgJ2E4JywgJ2ExMScsICdhMTQnLCAnYTE1JyksIHZhbHVlPSdhMicpLCDigKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "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du1UqVIlhYeH69SpU7ZkCAkJ0c6dO20Z624qV66s5cuXezRDrVq1NHnyZHny7z4nvCYktsfNzpw5o27duqlfv346ceKEQkJC1KhRI9WvX18HDhywJYMTtockHThwQK1atVLbtm31/fffq1GjRhowYIAaN26sb775xpYMTnkuEhISNHr0aE2bNk2xsbEKCwtT5cqV9eabbyo2NtaWDIsXL1aLFi30v//9z5bx7qR///6Srk8zGjp0qIoUKaJChQqpX79++uKLL2zJkJCQoCFDhqhjx45asmTJLbf17dvXlgySNG/ePEnShx9+qNOnT2vIkCEaMGCAjh075n6eTHPK58jmzZv17LPPKiQkRAsXLtRrr72mL7/8Uq+++qrWrFljSwYnbA9J6tWrlyTp559/VsuWLVWnTh09++yzeuONN2z7fSFl07LdtWtXJSUl6cyZM2rRooWqV6+umJgYNW/e3LZfDhcvXlS/fv00ePBgxcfH2zLmb8mfP78iIiLUvn17HT582CMZihUrph9//FFNmzbV+vXrPZLBCa8Jie1xsx49eqhChQoqVqyYXn75ZXXs2FGbN2/W8OHDNWjQIFsyOGF7SFK/fv305ptvKjQ0VK+//rpGjx6t+fPna8aMGRo5cqQtGZzyXPTo0UPp6ek6cOCAXn75ZTVt2lSbNm1SUFCQbR/ixYoV04QJE/T555+refPmWr58uZKSkmwZ+7dERkbq888/12uvvabXXntNs2bNsq1sv//++8qTJ4+Cg4P1+eef3/L7cs+ePbZkuNnWrVv14Ycf6sknn1S5cuX0wQcfaPv27baM7ZTPkZEjR2rGjBnq2rWr+vXrp4iICI0dO1Zz5szR+PHjbcsheXZ7SNfnbEvSoEGD1KRJE23dulVbtmxRcHCwunfvbluObDlnu0mTJu7LNWvWvOW2F154wZYML774onX16lVr9OjRVo0aNax+/fpZ3377rZWcnGzL+DfnSE9PtyIjI626detabdu2tRYuXGgdP37ctiwvvviiZVmWFRMTY7Vs2dJq2LCh9fHHH1sxMTHWTz/9ZEsGJ7wmLIvtcbObt8mzzz57y212vk89vT0s69b/31+/PoODg23J4JTnIiQkxLIsy0pJSbFq1KhxW0Y73DzOpk2brE6dOlk1atSwWrVqZb377ru2ZLCs69s+LS3Nev31162kpCT39cnJ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\n",
+      "text/plain": [
+       "<Figure size 864x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "contColumns = ['a2','a3','a8','a11','a14','a15']\n",
+    "sliderValue = 20\n",
+    "colName = contColumns[0]\n",
+    "\n",
+    "def get_cont_data_frame(col, buckets):\n",
+    "    query = \"\"\"\n",
+    "        WITH aggs AS (\n",
+    "            SELECT min({c}) AS min,\n",
+    "                   max({c}) AS max\n",
+    "              FROM public.credit_application_data\n",
+    "        )\n",
+    "        SELECT width_bucket({c}, min, max, {b}-1) AS bucket,\n",
+    "               ('[' || min({c}) || ',' || max({c}) || ')')::text as range,\n",
+    "               count(*) as freq\n",
+    "        FROM public.credit_application_data, aggs\n",
+    "        GROUP BY bucket\n",
+    "        ORDER BY bucket\n",
+    "    \"\"\".format(c=col, b=buckets)\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    return pd.DataFrame(cur.fetchall(), columns=colnames)\n",
+    "    \n",
+    "def graph_reset():\n",
+    "    ipd.clear_output()\n",
+    "    printmd(\"-----\\n\")\n",
+    "    ipd.display(widgets.HBox((contDropdown,bucketsSlider)))\n",
+    "    printmd(\"-----\\n\")\n",
+    "    df = get_cont_data_frame(colName,sliderValue)\n",
+    "    bar_plot(df,colName,\"range\",colName,\"freq\",\"Frequency\", \"#4378E2\")    \n",
+    "    \n",
+    "def on_cont_selection(res):\n",
+    "    global colName\n",
+    "    if res['type'] == 'change' and res['name'] == 'value':\n",
+    "        colName = res['new']\n",
+    "        graph_reset()\n",
+    "        \n",
+    "def on_slider_selection(res):\n",
+    "    global sliderValue\n",
+    "    if res['new'] == {} and res['old']:\n",
+    "        sliderValue = res['old']['value']\n",
+    "        graph_reset()\n",
+    "    \n",
+    "# Look at log transforms\n",
+    "#colsAddLogs = contColumns + [\"log({} + 1)\".format(c) for c in contColumns]\n",
+    "colsAddLogs = contColumns\n",
+    "\n",
+    "contDropdown = widgets.Dropdown(\n",
+    "    options=colsAddLogs,\n",
+    "    value=colsAddLogs[0],\n",
+    "    description='Column:',\n",
+    "    disabled=False,\n",
+    ")\n",
+    "\n",
+    "bucketsSlider = widgets.IntSlider(\n",
+    "    value=sliderValue,\n",
+    "    min=5,\n",
+    "    max=50,\n",
+    "    step=1,\n",
+    "    description='# Buckets:',\n",
+    "    disabled=False,\n",
+    "    continuous_update=False,\n",
+    "    orientation='horizontal',\n",
+    "    readout=True,\n",
+    "    readout_format='d'\n",
+    ")\n",
+    "\n",
+    "contDropdown.observe(on_cont_selection)\n",
+    "bucketsSlider.observe(on_slider_selection)\n",
+    "\n",
+    "graph_reset()\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* a15 large number of outliers - consider correcting\n",
+    "* Consider variable transformation if test non-tree based algorithm\n",
+    "* Histogram values are being calculated in the database - minimal data movement back to client"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Feature Engineering"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_continuous\"></a>\n",
+    "#### Continuous Features"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "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>_id</th>\n",
+       "      <th>approval</th>\n",
+       "      <th>a2</th>\n",
+       "      <th>a3</th>\n",
+       "      <th>a8</th>\n",
+       "      <th>a11</th>\n",
+       "      <th>a14</th>\n",
+       "      <th>a15</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>30.83</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>1.25</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>202.0</td>\n",
+       "      <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>3</td>\n",
+       "      <td>1</td>\n",
+       "      <td>24.50</td>\n",
+       "      <td>0.500</td>\n",
+       "      <td>1.50</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>280.0</td>\n",
+       "      <td>824.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>5</td>\n",
+       "      <td>1</td>\n",
+       "      <td>20.17</td>\n",
+       "      <td>5.625</td>\n",
+       "      <td>1.71</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>120.0</td>\n",
+       "      <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>7</td>\n",
+       "      <td>1</td>\n",
+       "      <td>33.17</td>\n",
+       "      <td>1.040</td>\n",
+       "      <td>6.50</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>164.0</td>\n",
+       "      <td>31285.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>9</td>\n",
+       "      <td>1</td>\n",
+       "      <td>54.42</td>\n",
+       "      <td>0.500</td>\n",
+       "      <td>3.96</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>180.0</td>\n",
+       "      <td>314.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   _id  approval     a2     a3    a8  a11    a14      a15\n",
+       "0  1    1         30.83  0.000  1.25  1.0  202.0  0.0    \n",
+       "1  3    1         24.50  0.500  1.50  0.0  280.0  824.0  \n",
+       "2  5    1         20.17  5.625  1.71  0.0  120.0  0.0    \n",
+       "3  7    1         33.17  1.040  6.50  0.0  164.0  31285.0\n",
+       "4  9    1         54.42  0.500  3.96  0.0  180.0  314.0  "
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# continuos features (seperated out incase feature transformations are required)\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_inputs_cont;\n",
+    "    CREATE TABLE public.model_inputs_cont AS\n",
+    "    SELECT _id\n",
+    "          ,a16 AS approval\n",
+    "          ,a2\n",
+    "          ,a3\n",
+    "          ,a8\n",
+    "          ,a11\n",
+    "          ,a14\n",
+    "          ,a15\n",
+    "    FROM public.credit_application_data\n",
+    "    DISTRIBUTED BY (_id);\n",
+    "    SELECT * FROM public.model_inputs_cont LIMIT 0;\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "contFeatureNames = [desc[0] for desc in cur.description]\n",
+    "contFeatureNames.remove('_id')\n",
+    "contFeatureNames.remove('approval')\n",
+    "\n",
+    "query = \"\"\"\n",
+    "    SELECT *\n",
+    "    FROM public.model_inputs_cont\n",
+    "\"\"\"\n",
+    "df = query_gpdb(query)\n",
+    "\n",
+    "df.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_one_hot\"></a>\n",
+    "#### One Hot Encode Categorical Features\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__encode__categorical.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "['a2', 'a3', 'a8', 'a11', 'a14', 'a15', 'a1_a', 'a4_l', 'a4_u', 'a5_g', 'a5_gg', 'a6_aa', 'a6_c', 'a6_cc', 'a6_d', 'a6_e', 'a6_ff', 'a6_i', 'a6_j', 'a6_k', 'a6_m', 'a6_q', 'a6_r', 'a6_w', 'a7_bb', 'a7_dd', 'a7_ff', 'a7_h', 'a7_j', 'a7_n', 'a7_o', 'a7_v', 'a9_true', 'a10_true', 'a12_true', 'a13_g', 'a13_p']\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>_id</th>\n",
+       "      <th>a1_a</th>\n",
+       "      <th>a4_l</th>\n",
+       "      <th>a4_u</th>\n",
+       "      <th>a5_g</th>\n",
+       "      <th>a5_gg</th>\n",
+       "      <th>a6_aa</th>\n",
+       "      <th>a6_c</th>\n",
+       "      <th>a6_cc</th>\n",
+       "      <th>a6_d</th>\n",
+       "      <th>a6_e</th>\n",
+       "      <th>a6_ff</th>\n",
+       "      <th>a6_i</th>\n",
+       "      <th>a6_j</th>\n",
+       "      <th>a6_k</th>\n",
+       "      <th>a6_m</th>\n",
+       "      <th>a6_q</th>\n",
+       "      <th>a6_r</th>\n",
+       "      <th>a6_w</th>\n",
+       "      <th>a7_bb</th>\n",
+       "      <th>a7_dd</th>\n",
+       "      <th>a7_ff</th>\n",
+       "      <th>a7_h</th>\n",
+       "      <th>a7_j</th>\n",
+       "      <th>a7_n</th>\n",
+       "      <th>a7_o</th>\n",
+       "      <th>a7_v</th>\n",
+       "      <th>a9_true</th>\n",
+       "      <th>a10_true</th>\n",
+       "      <th>a12_true</th>\n",
+       "      <th>a13_g</th>\n",
+       "      <th>a13_p</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>58</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>60</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>62</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>64</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>66</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   _id  a1_a  a4_l  a4_u  a5_g  a5_gg  a6_aa  a6_c  a6_cc  a6_d  a6_e  a6_ff  \\\n",
+       "0  58   0     0     1     1     0      0      0     0      0     0     0       \n",
+       "1  60   0     0     1     1     0      0      0     0      0     0     0       \n",
+       "2  62   0     0     1     1     0      0      0     0      1     0     0       \n",
+       "3  64   1     0     1     1     0      0      0     0      0     0     0       \n",
+       "4  66   0     0     1     1     0      0      0     1      0     0     0       \n",
+       "\n",
+       "   a6_i  a6_j  a6_k  a6_m  a6_q  a6_r  a6_w  a7_bb  a7_dd  a7_ff  a7_h  a7_j  \\\n",
+       "0  1     0     0     0     0     0     0     0      0      0      1     0      \n",
+       "1  0     0     0     0     1     0     0     0      0      0      1     0      \n",
+       "2  0     0     0     0     0     0     0     0      0      0      0     0      \n",
+       "3  0     0     0     0     1     0     0     0      0      0      0     0      \n",
+       "4  0     0     0     0     0     0     0     0      0      0      0     0      \n",
+       "\n",
+       "   a7_n  a7_o  a7_v  a9_true  a10_true  a12_true  a13_g  a13_p  \n",
+       "0  0     0     0     0        0         0         1      0      \n",
+       "1  0     0     0     0        0         0         1      0      \n",
+       "2  0     0     1     0        0         0         1      0      \n",
+       "3  0     0     1     0        0         0         1      0      \n",
+       "4  0     0     1     0        0         0         1      0      "
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# encode categorical features\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_inputs_cat;\n",
+    "    SELECT madlib.encode_categorical_variables (\n",
+    "        'public.credit_application_data',\n",
+    "        'public.model_inputs_cat',\n",
+    "        'a1,a4,a5,a6,a7,a9,a10,a12,a13',\n",
+    "        NULL,\n",
+    "        '_id',\n",
+    "        NULL,\n",
+    "        'a1=b, a4=y, a5=p, a6=x, a7=z, a9=false, a10=false, a12=false, a13=s'\n",
+    "    );\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "query = \"\"\"\n",
+    "    SELECT *\n",
+    "    FROM public.model_inputs_cat\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "colnames = [desc[0] for desc in cur.description]\n",
+    "df = pd.DataFrame(cur.fetchall(), columns=colnames)\n",
+    "\n",
+    "colnames.remove('_id')\n",
+    "catFeatureNames = colnames\n",
+    "featureNames = contFeatureNames + catFeatureNames\n",
+    "print(featureNames)\n",
+    "df.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_combine\"></a>\n",
+    "#### Combine Continuous & Categorical Features"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# combine feature tables\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_inputs;\n",
+    "    CREATE TABLE public.model_inputs AS\n",
+    "    SELECT *\n",
+    "    FROM public.model_inputs_cat\n",
+    "    JOIN public.model_inputs_cont\n",
+    "    USING (_id);\n",
+    "\"\"\"\n",
+    "cur.execute(query)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_cats_dep\"></a>\n",
+    "#### Plot Categorical Features By Response"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n",
+       " **Select Column:**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "c15232909d8a4885b521eb98ed882dde",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "RHJvcGRvd24oZGVzY3JpcHRpb249dSdDb2x1bW46Jywgb3B0aW9ucz0oJ2ExX2EnLCAnYTRfbCcsICdhNF91JywgJ2E1X2cnLCAnYTVfZ2cnLCAnYTZfYWEnLCAnYTZfYycsICdhNl9jYycsICfigKY=\n"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAIACAYAAAC8S8t6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi41LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvSM8oowAAIABJREFUeJzt3XuUVmWhP/DvwDAgF5HLDIp6vJ8MFDRJ5ZCQlVdCPehSNKWTy9CTmpChaIamGd4SNLziJTWztLSj6AGLkkr0oGSSiWYqCF64iSIKDJf5/eFpfnEUHXT2vPPi5/PX++69Z+/vu1hrr6+Pz352RV1dXV0AAIBG1aLUAQAAYGOkaAMAQAEUbQAAKICiDQAABVC0AQCgAIo2AAAUQNEG2MjMmTMnvXv3zq677lrqKACfaIo2wEZk5cqVOfPMM7NixYpSRwH4xFO0ATYSq1atymmnnZYnnnii1FEAiKINsFFYsGBBhg4dmt/97neljgLA/1K0Acrc/fffn8GDB+dPf/pTkqRly5YlTgRAklSWOgAAH91RRx2VP//5z0mSFi1a5OSTT87//M//ZPr06SVOBoCiDVBizzzzTO6+++48/vjjeeWVV7Js2bK0adMmXbt2zR577JGjjjoqvXr1et+//UfJ3mGHHXLBBRdkjz32yP/8z/80Zfwkydy5c3PXXXdl+vTpmTt3bt58881UVVWlc+fO6d27dwYPHpx+/fo1eS6AUqqoq6urK3UIgE+iNWvW5Ac/+EFuv/32fNit+PTTT8+wYcPes/1LX/pSTjjhhBxxxBGprHx37OS4447L9OnTU1VVlb/85S+FZP9n1113Xa688sqsXr36A487+uijc9555xWeB6C5MKINUCJXXXVVfvKTnyRJtttuuxx33HHZfvvt07p167z88suZOHFiHnrooSTJ2LFj84UvfCE77rjjOud48MEH06JF6R63+eUvf5nLL788SbL55pvn2GOPTY8ePdKuXbu88sor+d3vfpeJEydm7dq1ueOOO/LFL34x++yzT8nyAjQlRRugBJYtW5YbbrghSbLVVlvlZz/7WTbbbLP6/Z/5zGcyaNCgXHzxxbnpppuydu3aPPjgg+8p2qUs2XV1dbnyyiuTJJtuuml+8pOfZOutt67fv9tuu+Xggw9O7969c8EFFyRJJk2apGgDnxhWHQEogb///e/Zeuut07Zt23z1q19dp2T/s0MOOaT+8/z585sqXoO8/PLL6dixYzp06JDBgwevU7L/WXP+DQBFMqINUAK77bZb7r///iT5wPnZXbt2rf9cW1tbeK4NsdVWW+Xee+9Nkqxdu3a9x3Xo0CFt2rTJihUrmt1vACiSog1QYhUVFUmSJUuWZO7cuZk7d27+/ve/5+mnn86MGTPqj2vOz67/YwrLsmXLMnfu3Lz00kt5/vnnM2vWrMyYMaP+lfDN+TcANDZFG6CEnnzyydx6662ZNm1aXn/99ffsL+Uc7IZ6/vnnc/PNN+f3v//9+04N+cd/SAB80ijaACUyfvz4/OhHP1pnW9euXbP99tvnU5/6VHr37p0ePXrk4IMPLlHCD/fLX/4yo0ePXmdpv8022yzbb799dtppp/Tu3Tv9+vXLQQcdlHfeeaeESQGanqINUAJTp06tL9nV1dU57bTTMmDAgNTU1Kxz3Lx580oRr0GeffbZ+pLdrl27nHrqqdlvv/2y1VZbrXPc2rVr66eOAHySKNoAJfDTn/60/vPYsWPz2c9+9n2Pe/XVV5sq0gb7+c9/Xj+SPXr06Bx22GHve9xrr732gQ9LAmysmv/kP4CN0Jw5c+o/9+zZc73H/WNVjyQf+ubFprYx/AaAIinaACXQqVOn+s+///3v3/eYu+66K3fddVf99+a2NF5DfsPUqVNz1VVX1X9vbr8BoEimjgCUwEEHHZQ//elPSZKzzz47f//737PHHnukqqoqc+bMyb333ptHHnlknb9ZtmxZKaKu10EHHZT77rsvybvTXxYuXJh+/fqlffv2efnllzN58uT8+te/XmdJv+b2GwCKVFFnUVOAJrd69eqcfPLJeeihh9Z7TIsWLXL88cdn+vTpmTlzZrp167bekeN/dtxxx2X69OmpqqrKX/7yl0ZM/V6jR4/Oz3/+8w88ZvDgwXnzzTczZcqUtGrVKo899lg22WSTQnMBNAemjgCUQGVlZa655pqcf/756dOnTzp06JCWLVumffv2+dSnPpWjjz4699xzT0aOHJl+/foleff15f/8Apvm4Pzzz8/YsWPTr1+/bLbZZmnZsmXatm2b7bffPocddlhuv/32jBkzJvvuu2+SZNWqVfn1r39d4tQATcOINgAAFMCINgAAFEDRBgCAAlh1BOATZtasWR/7HF27dk11dXUjpAHYeJmjDfAJ86lPfepjn+OUU07Jqaee2ghpADZepo4AAEABjGgDAEABNoo52kuWvJ21a/33AgAAxWjRoiKdOrXboL/ZKIr22rV1ijYAAM2KOdoAAFAARRsAAAqgaAMAQAE2ijnaAAA0H2vWrM6SJQuzenVtqaNssMrKqnTqVJ2WLT9+TVa0AQBoVEuWLEybNm3Trt3mqaioKHWcBqurq8vbby/NkiUL07XrFh/7fKaOAADQqFavrk27dpuWVclOkoqKirRrt2mjjcQr2gAANLpyK9n/0Ji5FW0AAD5xHnjgvowfP67QayjaAABQAA9DAgBQuHfeeTsXX/z9LF26NIsXL8o++3w+CxbMT5IsWDA/b721NN/61pnZZZdeOfzwL6d3793zyisvp3PnLhk9+oL89re/zv3335u6uroMGXJsVq1alZ/97LZUVbVOp06dMmrU6Pz4xzdkm222zaBBh2XFihX52teOyW233Zkf//iG/OUvM/P228vSuXPnXHjhpU3ym41oAwBQuHnz5qZ//30zduxVuf76W/LLX/48SdK1a3WuuOKajBr13Vx66Q+SJIsWLczQocfn2mtvSk1Nt/zqV79IkrRu3TpXX31Ddttt91x77fhcfvlVueqqCfn0p3vmlltuzKGHDs4DD9yXJPnd736Tz3/+i6mtXZmqqqpcccXVmTDhlqxYsSKzZv21SX6zEW0AAArXuXOX3HnnHXn44T+kbdt2Wb16dZLks5/dK0nyr/+6cxYsWJAkqa6uybbbbpck6dVrt8yYMT09e+6a7bbbPkny8svzsu2226ZDhw5Jks98pk9uuOG6bL31v6R169aZM2d2Hnjgvpx11uhUVbXOsmVv5dxzz0qbNpvk9dcX11+7aEa0AQAo3B133JaddvrXjB59QQ4//MisWLEidXV19aPLzz77TLp33zJJsnjxovppJTNnPpHtt98hSVJR8W517d59y8yZMztvv70sSTJjxmPZeut/SZIceujg3HzzhFRVtU737lvm0Ucfzksvzcn3vjcmp512elatWtVkv9mINgAAhfvc5wbk8ssvzh/+MDWtW7fJVlttnUWLFub111/P9OmPZuXKlRk16pwkSWVlq/zoR2OzcOGCbLnlVjnkkMH59a8n1Z+rY8fNcuKJp2T48JPTsmXLdOzYMWeffW6SZJ99Pp9x4y7N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AIACKNoAAFCAkhTtiy++OKNGjUqSzJo1K4cffngOOOCAfOc738nq1atLEQkAABpVkxftRx55JPfcc0/995EjR+a73/1uJk+enLq6utx5551NHQkAABpdkxbtN954I2PHjs1JJ52UJHn55ZezYsWK7LbbbkmSwYMHZ9KkSU0ZCQAACtGkRXv06NEZMWJENt100yTJggULUl1dXb+/uro68+fPb8pIAABQiMqmutBdd92VLbbYIn379s3dd9+dJKmrq3vPcRUVFRt87i5d2n/sfABNpbq6Q6kjAJSdcrx3NlnRfuCBB7Jw4cIceuihefPNN/POO++koqIiixYtqj9m4cKFqamp2eBzL168LGvXvre0N6Vy/McHSmPhwrdKHaFZcN8ENkSp750tWlRs8OBukxXtm2++uf7z3XffnenTp2fMmDH58pe/nBkzZmSPPfbIr371q/Tv37+pIgEAQGGarGivz2WXXZZzzjknb7/9dnr06JGhQ4eWOhIAAHxsJSnagwcPzuDBg5MkO++8c37xi1+UIgYAABTGmyEBAKAAijYAABRA0QYAgAIo2gAAUABFGwAACqBoAwBAARRtAAAogKINAAAFULQBAKAAijYAABTgIxftmTNnZvLkyXnjjTcaMw8AAGwUGlS0X3nllQwZMiTjx49Pktxwww056qijctppp+WAAw7I008/XWhIAAAoNw0q2hdffHEWL16cvffeO7W1tbn++uuz77775re//W169eqVSy65pOicAABQVhpUtB999NGcccYZ6dOnTx599NG89dZbGTp0aLp3756vfvWrefLJJ4vOCQAAZaVBRXvVqlXp2LFjkmTq1Klp27Zt+vTpkyRZvXp1qqqqiksIAABlqLIhB/Xo0SN33nlnWrdunfvvvz8DBgxIZWVllixZkgkTJmSXXXYpOicAAJSVBhXtkSNHZtiwYZk4cWI6duyYk08+OUkycODAJO8+HAkAAPx/DSravXv3zpQpU/L8889nxx13TLt27ZK8+5Bkr1696qeVAAAA72pQ0U6S9u3bp3fv3uts22effRo9EAAAbAzWW7QHDRq0QSe67777PnYYAADYWKy3aPfs2TMVFRVJkjVr1uSBBx5Ix44d079//1RXV+eNN97Iww8/nEWLFuWoo45qssAAAFAO1lu0L7roonU+9+nTJ9dff/06S/mtWbMmp556apYuXVpsSgAAKDMNWkf7F7/4Rb72ta+9Z73sli1b5uijj87kyZMLCQcAAOWqQUW7TZs2eemll95336xZs6w6AgAA/0eDVh057LDDcvnll6e2tjb77LNPOnXqlMWLF+fXv/51rr/++px66qlF5wQAgLLSoKI9YsSIvPPOO7n88stz2WWX1W9v1apVTjjhhAwbNqywgAAAUI4aVLRfe+21jB49OqeddlqefPLJLF26NJtttll22223tG/fvuiMAABQdhpUtA8//PCcffbZOeSQQ9K/f/+iMwEAQNlr0MOQlZWV2XTTTYvOAgAAG40GjWifeuqpufDCC/PSSy9l2223TZcuXd5zTM+ePRs9HAAAlKsGFe1zzz03SfKDH/wgSerfGJkkdXV1qaioyKxZswqIBwAA5alBRfvWW28tOgcAAGxUGlS099xzz/rP77zzTt5+++107NjxPW+KBAAA3tWgop0kDz/8cC6//PLMmjUrdXV1SZJddtklp5xySgYMGFBYQAAAKEcNWnXk4YcfzrBhw9KqVauMGjUqP/zhD3PmmWemRYsW+c///M88/PDDRecEAICy0qAR7XHjxuVLX/pSrrjiinW2/8d//EeGDx+e8ePHp1+/foUEBACActSgEe2//e1vOeKII9533+GHH55nnnmmUUMBAEC5a1DR7tq1a1577bX33ffqq69mk002adRQAABQ7hpUtPfff/9cfvnlmTZt2jrbH3744YwbNy777bdfIeEAAKBcNfjNkH/+859z/PHHp3379unSpUsWL16cZcuWpXfv3hk5cmTROQEAoKw0qGi3bds2P/3pT/PQQw/lsccey9KlS9OxY8fsscce+fznP58WLRo0MA4AAJ8YDV5He968eXnzzTdzxhlnJEleeOGF/Nd//Vd69OiRzTffvLCAAABQjho0FP3444/nkEMOyY033li/benSpfmv//qvHHrooVYdAQCA/6NBRfuyyy5Lv379cvfdd9dv22233fLggw9mzz33zJgxYwoLCAAA5ahBRfvZZ5/NV77ylbRq1Wqd7VVVVTn66KPzl7/8pZBwAABQrhpUtDfddNO88MIL77tvzpw5adu2baOGAgCActeghyEPPvjgjBs3Lptuumn23XfftG/fPsuWLctDDz2UcePG5dBDDy06JwAAlJUGFe3hw4fnxRdfzMiRI1NRUZHKysqsXr06dXV1+fznP5/TTz+96JwAAFBWGlS0W7dunWuvvTbPPPNMnnjiibz55pvp0KFDdt999/To0aPojAAAUHYavI52kuy8887p0KFDFi5cmH/9139NXV1dUbkAAKCsNbhoT548OT/84Q8zd+7cVFRU5K677sr48ePTrl27jBkz5j0rkgAAwCdZg1YdeeCBBzJ8+PB89rOfzdixY7N27dokyX777Zff/OY3ueqqqwoNCQAA5aZBI9pXX311hg4dmrPOOitr1qyp3z548OAsXbo0t912W4YPH15YSAAAKDcNGtGeM2dOBgwY8L77Pv3pT2fhwoWNGgoAAMpdg4p29+7dM2PGjPfdN3PmzGyxxRaNGgoAAMpdg6aOfOUrX8kll1ySurq6DBgwIBUVFZk/f36efvrpXHvttfnGN75RdE4AACgrDSraQ4cOzdKlSzNhwoRcc801qauryze+8Y1UVlbmuOOOy/HHH190TgAAKCsNXt7vlFNOyVe/+tX8+c9/zhtvvJEOHTqkV69e6dy5c5H5AACgLG3QC2s6dOiQffbZZ51ty5cvz7XXXpsRI0Y0ajAAAChnH/gw5E9/+tMceeSROfLII3P77be/Z//dd9+d/fffP9dff31hAQEAoBytd0T7xhtvzKWXXpru3bunTZs2+f73v5/k3Qcjn3vuuZx99tl56qmn0rlz55x33nlNlRcAAMrCeov2Pffcky996Uu58sor06JFi/zwhz/Mj3/842y//fb5xje+kTVr1mTYsGEZNmxY2rVr15SZAQCg2Vvv1JGXX345RxxxRFq0ePeQY489NnPnzs2IESPSq1ev3H///RkxYoSSDQAA72O9I9rLly9fZ0WRf3zee++9M3bs2FRUVBSfDgAAylSD3gyZpH5ke+jQoR+rZF9xxRU5+OCDM3DgwNx8881JkmnTpmXQoEHZf//9M3bs2I98bgAAaC42aHm/JGnduvVHvtj06dPz6KOP5t57783q1atz8MEHp2/fvjn77LNz2223ZYsttsiJJ56YqVOnZsCAAR/5OgAAUGofWLRfeOGFtGzZMkmyZs2a+m3vp2fPnh96sT333DO33nprKisrM3/+/KxZsyZLly7NNttsk6233jpJMmjQoEyaNEnRBgCgrH1g0T7rrLPes23kyJHrTB2pq6tLRUVFZs2a1aALtmrVKldeeWVuuummHHjggVmwYEGqq6vr99fU1GT+/PkNzQ8AAM3Seov2rbfeWthFv/nNb+brX/96TjrppMyePfs9+zd0DniXLu0bKRlA8aqrO5Q6AkDZKcd753qL9p577tnoF3v++edTW1ubT3/609lkk02y//77Z9KkSfXTU5JkwYIFqamp2aDzLl68LGvX1jV23A1Sjv/4QGksXPhWqSM0C+6bwIYo9b2zRYuKDR7cbfCqI41h3rx5Oeecc1JbW5va2tpMmTIlQ4YMyYsvvpg5c+ZkzZo1mThxYvr379+UsQAAoNFt8KojH8eAAQPy5JNP5rDDDkvLli2z//77Z+DAgencuXNOPfXUrFy5MgMGDMiBBx7YlLEAAKDRNWnRTt6dn/3Nb35znW19+/bNvffe29RRAACgME06dQQAAD4pPnLRnjlzZiZPnpw33nijMfMAAMBGoUFF+5VXXsmQIUMyfvz4JMkNN9yQo446KqeddloOOOCAPP3004WGBACActOgon3xxRdn8eLF2XvvvVNbW5vrr78+++67b37729+mV69eueSSS4rOCQAAZaVBRfvRRx/NGWeckT59+uTRRx/NW2+9laFDh6Z79+756le/mieffLLonAAAUFYaVLRXrVqVjh07JkmmTp2atm3bpk+fPkmS1atXp6qqqriEAABQhhq0vF+PHj1y5513pnXr1rn//vszYMCAVFZWZsmSJZkwYUJ22WWXonMCAEBZaVDRHjlyZIYNG5aJEyemY8eOOfnkk5MkAwcOTPLuw5EAAMD/16Ci3bt370yZMiXPP/98dtxxx7Rr1y7Juw9J9urVq35aCQAA8K4Gvxmyffv26d27d/33mTNn5p133kldXV0hwQAAoJxZRxsAAApgHW0AACiAdbQBAKAA1tEGAIACWEcbAAAKYB1tAAAogHW0AQCgAB95He0k2WeffZIkCxcuTHV1deMmAwCAMtagor1s2bJcddVVeeyxx1JbW7vOS2qWL1+eV199NX/9618LCwkAAOWmQauOfP/7389tt92WmpqarFy5Mi1atMgOO+yQN954I6+88kpGjx5ddE4AACgrDSraU6dOzfDhw3P11Vfn6KOPTrdu3TJu3LhMnjw5PXv2zN/+9reicwIAQFlpUNF+66236udn77TTTnnqqaeSJG3bts3Xvva1PPTQQ4UFBACActSgol1TU5OFCxcmSbbddtssWbIkCxYsSJJ07tw5ixYtKi4hAACUoQYV7S984Qv54Q9/mIcffjhbbrllttpqq1x11VWZN29e7rjjjnTv3r3onAAAUFYaVLSHDx+eHXfcMTfddFOSZNSoUbn77ruz33775Te/+U1OOeWUQkMCAEC5adDyfu3bt891112X2traJMkXv/jF3HfffXn66afTo0ePbLvttkVmBACAstPgF9YkSVVVVf3nbbfdVsEGAID1WG/RHjRoUINPUlFRkXvvvbdRAgEAwMZgvUW7Z8+eqaioaMosAACw0Vhv0b7ooouaMgcAAGxUPnTVkZdffjnPP/850d5+AAAQLUlEQVT8e7Zfc801mTt3biGhAACg3H1g0b7llltywAEH5Oc///k62+fPn5/x48fnwAMPzB133FFoQAAAKEfrLdpTp07NmDFjcsQRR+SEE05YZ1+3bt0yderUHHbYYTn//PPzyCOPFB4UAADKyXrnaN9000055JBDct55573v/q5du+bCCy/M4sWLM2HChPTt27eojAAAUHbWO6L9t7/9LQMHDvzQEwwePDjPPPNMo4YCAIByt96iXVtbm8rKD3+fTYcOHbJy5cpGDQUAAOVuvUV7u+22yxNPPPGhJ5gxY0a6d+/eqKEAAKDcrbdoH3LIIbnlllvy7LPPrvePn3vuudx2223Zb7/9CgkHAADlar1zQ4455pjcf//9GTJkSI488sj0798/3bt3z9q1a/Pqq6/mD3/4Q+68885stdVW+drXvtaUmQEAoNlbb9GurKzMjTfemAsvvDA/+clPcuutt66zv2XLljnkkEPy7W9/Ox06dCg8KAAAlJMPfNqxffv2GTNmTEaOHJlHHnkkr732Wlq2bJnu3btnr732SseOHZsqJwAAlJUPX1YkSefOnRu01B8AAPCuD3wFOwAA8NEo2gAAUABFGwAACqBoAwBAARr0MOT/9eqrr2bhwoXp0qVLttxyy8bOBAAAZW+Diva8efMyfPjwPPXUU0mSioqK7Lzzzrnsssuyww47FBIQAADK0QZNHbnggguy5557Ztq0aXnqqacyZcqU7LjjjjnzzDOLygcAAGVpvUX72muvzfLly9fZNm/evAwaNCidO3dOZWVlunfvnv322y9z584tPCgAAJST9U4defrpp7PffvvlxBNPzJAhQ9KqVasceuihOfHEE/OlL30pHTt2zKJFizJ58uQcfvjhTZkZAACavfUW7SuvvDJ//etfM27cuNx888055ZRTcsIJJ2THHXfM5MmT89JLL6VLly753ve+lwMPPLApMwMAQLP3gQ9D9uzZMxMmTMjjjz+ecePGZcKECRk+fHguvvjipsoHAABlqUEPQ/bp0yc/+clPMmrUqFx33XUZPHhw/vCHPxSdDQAAytZ6R7SXL1+e66+/PrNmzcqWW26ZE088MQMGDMiAAQPy3//93xkzZkyuu+66fOtb38pnPvOZpswMAADN3npHtL/zne/kv//7v7PTTjvl2WefzfHHH5+6urokyUEHHZSJEyfm3//93/Ptb387w4YNa7LAAABQDtY7oj116tRceeWV6devX954443svffeeemll7LNNtskSVq0aJHDDz88gwYNyp133tlkgQEAoByst2h369Ytv/nNb9K9e/dMmzYtrVq1SpcuXd5zXFVVVY499thCQwIAQLlZb9H+3ve+l29/+9u544470q5du4wePTrt27dvymwAAFC21lu0P/vZz2bq1Kl5/fXX06lTp1RUVDRlLgAAKGsfuI52knTu3LkpcgAAwEalQetoAwAAG0bRBgCAAijaAABQgCYv2uPHj8/AgQMzcODAXHLJJUmSadOmZdCgQdl///0zduzYpo4EAACNrkmL9rRp0/LHP/4x99xzT371q1/lr3/9ayZOnJizzz47V199dR544IE89dRTmTp1alPGAgCARtekRbu6ujqjRo1KVVVVWrVqlR122CGzZ8/ONttsk6233jqVlZUZNGhQJk2a1JSxAACg0TVp0d5pp52y2267JUlmz56dBx54IBUVFamurq4/pqamJvPnz2/KWAAA0Og+dB3tIjz33HM58cQTc+aZZ6aysjIvvvjiOvs39OU4Xbp4YyVQPqqrO5Q6AkDZKcd7Z5MX7RkzZuSb3/xmzj777AwcODDTp0/PokWL6vcvWLAgNTU1G3TOxYuXZe3ausaOukHK8R8fKI2FC98qdYRmwX0T2BClvne2aFGxwYO7TTp15NVXX83JJ5+cyy67LAMHDkyS9O7dOy+++GLmzJmTNWvWZOLEienfv39TxgIAgEbXpCPaN954Y1auXJmLLrqoftuQIUNy0UUX5dRTT83KlSszYMCAHHjggU0ZCwAAGl2TFu1zzjkn55xzzvvuu/fee5syCgAAFMqbIQEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoAAlKdrLli3Ll7/85cybNy9JMm3atAwaNCj7779/xo4dW4pIAADQqJq8aD/55JM5+uijM3v27CTJihUrcvbZZ+fqq6/OAw88kKeeeipTp05t6lgAANComrxo33nnnTn33HNTU1OTJJk5c2a22WabbL311qmsrMygQYMyadKkpo4FAACNqrKpL3jhhReu833BggWprq6u/15TU5P58+c3dSwAAGhUTV60/6+6urr3bKuoqNigc3Tp0r6x4gAUrrq6Q6kjAJSdcrx3lrxod+vWLYsWLar/vmDBgvppJQ21ePGyrF373sLelMrxHx8ojYUL3yp1hGbBfRPYEKW+d7ZoUbHBg7slX96vd+/eefHFFzNnzpysWbMmEydOTP/+/UsdCwAAPpaSj2i3bt06F110UU499dSsXLkyAwYMyIEHHljqWAAA8LGUrGj/9re/rf/ct2/f3HvvvaWKAgAAja7kU0cAAGBjpGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQAEUbAAAKoGgDAEABFG0AACiAog0AAAVQtAEAoACKNgAAFEDRBgCAAijaAABQgGZTtO+7774cfPDB2W+//XL77beXOg4AAHwslaUOkCTz58/P2LFjc/fdd6eqqipDhgzJXnvtlR133LHU0QAA4CNpFiPa06ZNy957753NNtssbdu2zQEHHJBJkyaVOhYAAHxkzWJEe8GCBamurq7/XlNTk5kzZzb471u0qCgi1gbr2qldqSPQzFRt2qXUEWiGmss9qzlw3+T9uHfyfkp97/wo128WRbuuru492yoqGv5jOjWTG/WVZx1W6gg0M7uedHGpI9AMdenSvtQRmg33Td6Peyfvpxzvnc1i6ki3bt2yaNGi+u8LFixITU1NCRMBAMDH0yyK9r/927/lkUceyeuvv57ly5fnwQcfTP/+/UsdCwAAPrJmMXWkW7duGTFiRIYOHZpVq1bliCOOSK9evUodCwAAPrKKuvebIA0AAHwszWLqCAAAbGwUbQAAKICiDQAABVC0AQCgAIo2AAAUQNEGAIACNIt1tGFj8Pzzz2fy5Ml57bXX0qJFi9TU1GSfffbJrrvuWupoAEAJGNGGRnD77bfnW9/6VpJk1113Tc+ePZMk3/3ud3PTTTeVMhoAUCJeWAON4IADDsivfvWrbLLJJutsX758ef793/89kyZNKlEygObrlVde+cD93bt3b6IkUAxTR6ARVFZWZvXq1e/ZvmLFirRq1aoEiQCavxNPPDGzZ89OTU1N/u+4X0VFRaZMmVKiZNA4FG1oBCeddFIOO+yw9O3bN9XV1UmShQsX5tFHH82IESNKnA6gebrjjjtyzDHH5Nxzz80ee+xR6jjQ6EwdgUYyf/78PPLII1mwYEHq6urSrVu39O3bN926dSt1NIBma+bMmbnrrrtywQUXlDoKNDpFGwAACmDVEQAAKICiDQAABVC0ATZyU6ZMye67717qGACfOIo2wEbsT3/6U0aOHFnqGACfSIo2wEaotrY2EyZMyNChQ1NZaSVXgFJQtAHK0LJly/L9738/++67b3bZZZfsvffeOfPMM7N06dIkye9///tcf/31OeOMM3Lsscd+5OssWLAgZ511Vj73uc+lZ8+e+dznPpcLL7wwtbW1jfVTADZahjkAytDpp5+e5557Lqeffnqqq6vz5JNP5oorrkinTp0yatSo7LrrrpkyZUo23XTT/OhHP/pI11i7dm1OOOGEVFRU5Nxzz0379u3zxz/+MTfccEP+5V/+Jccdd1wj/yqAjYuiDVBmVq5cmVWrVuW8885L//79kyR77bVXnnjiiUyfPj1JGuVFSfPnz0/Hjh3zne98JzvvvHOSpG/fvvnDH/6Qxx57TNEG+BCKNkCZad26dW666aYkybx58zJ79uw899xzef7559O6detGu84WW2yR2267LWvXrs3s2bMze/bsPPPMM1m8eHG6d+/eaNcB2Fgp2gBlaMqUKRkzZkzmzp2bTp06ZZdddkmbNm2ydu3aRr3OXXfdlXHjxmXRokWprq5O796907p163ipMMCH8zAkQJmZPXt2TjvttPTt2zdTp07No48+mhtuuCHbbbddo15n+vTp+e53v5ujjjoqjzzySP74xz/mqquuSufOnRv1OgAbK0UboMw8/fTTWbVqVYYNG5bNN988SfLOO+9kxowZjTrS/Oc//zkVFRX5z//8z/pyPX/+/Pztb38zog3QAKaOAJSZT3/602nZsmUuvfTSHH300VmyZEluuummLFq0KFVVVY12nV133TVr167ND37wgxx44IF59dVXc80116S2tjbLly9vtOsAbKwUbYAys9122+Xiiy/O+PHjM2zYsFRXV2fAgAE5/PDDc/7552f+/PmNsupI3759c9ZZZ+XWW2/NL3/5y2y++eY56KCDUllZmVtuuSW1tbWNWuwBNjYVdf7/HwAANDoj2gCfMHV1dVmzZs2HHufV7QAfj7sowCfMPffck7POOutDj3v22WebIA3AxsvUEYBPmCVLlmTevHkfetyuu+7aBGkANl6KNgAAFMA62gAAUABFGwAACqBoAwBAARRtAAAogKINAAAF+H+LKktnCDkfAwAAAABJRU5ErkJggg==\n",
+      "text/plain": [
+       "<Figure size 864x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "def bar_plot_groupby(data, title,x,xLabel,y,yLabel,groupby,color=None,axisRotation=90):\n",
+    "\n",
+    "    # Bar plot\n",
+    "    pylab.rcParams['figure.figsize'] = (12, 8)\n",
+    "    seq_col_brew = sns.color_palette(\"Blues_r\", 1)\n",
+    "    sns.color_palette(seq_col_brew)\n",
+    "    if color != None:\n",
+    "        plt = sns.barplot(x=x, y=y, data=data, color=color, hue=groupby)\n",
+    "    else:\n",
+    "        plt = sns.barplot(x=x, y=y, data=data, hue=groupby)\n",
+    "        \n",
+    "    # titles\n",
+    "    plt.set_title(title,fontsize=30)\n",
+    "    plt.set_xlabel(xLabel,fontsize=16)\n",
+    "    plt.set_ylabel(yLabel,fontsize=16)\n",
+    "    \n",
+    "    # rotate x axis labels\n",
+    "    for item in plt.get_xticklabels():\n",
+    "        item.set_rotation(axisRotation)\n",
+    "\n",
+    "    # remove scientific notation\n",
+    "    plt.ticklabel_format(style='plain', axis='y')\n",
+    "\n",
+    "def get_cat_gb_data_frame(col):\n",
+    "    query = \"\"\"\n",
+    "        SELECT *\n",
+    "              ,round((record_count * 100.0) / sum(record_count) OVER(PARTITION BY col),2) AS perc_records\n",
+    "        FROM (\n",
+    "            SELECT {} AS col\n",
+    "                  ,approval\n",
+    "                  ,count(*) AS record_count\n",
+    "            FROM public.model_inputs\n",
+    "            GROUP BY 1,2\n",
+    "        ) foo\n",
+    "        ORDER BY 1,2\n",
+    "    \"\"\".format(col)\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    return pd.DataFrame(cur.fetchall(), columns=colnames)\n",
+    "    \n",
+    "def on_cat_gb_selection(res):\n",
+    "    if res['type'] == 'change' and res['name'] == 'value':\n",
+    "        ipd.clear_output()\n",
+    "        printmd(\"-----\\n **Select Column:**\")\n",
+    "        ipd.display(catGPDropdown)\n",
+    "        df = get_cat_gb_data_frame(res['new'])\n",
+    "        bar_plot_groupby(df,res['new'],\"col\",res['new'],\"perc_records\",\"% Class Records\", \"approval\")\n",
+    "    \n",
+    "catGPDropdown = widgets.Dropdown(\n",
+    "    options=catFeatureNames,\n",
+    "    value=catFeatureNames[0],\n",
+    "    description='Column:',\n",
+    "    disabled=False,\n",
+    ")\n",
+    "\n",
+    "catGPDropdown.observe(on_cat_gb_selection)\n",
+    "printmd(\"-----\\n **Select Column:**\")\n",
+    "ipd.display(catGPDropdown)\n",
+    "df = get_cat_gb_data_frame(catFeatureNames[0])\n",
+    "bar_plot_groupby(df,catFeatureNames[0],\"col\",catFeatureNames[0],\"perc_records\",\"% Class Records\",\"approval\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* a9_true appears to be a strong variable due to seperate between classes"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_chi_sq\"></a>\n",
+    "#### Chi-squared testing\n",
+    "\n",
+    "https://en.wikipedia.org/wiki/Chi-squared_test\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__stats__tests.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "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>feature_name</th>\n",
+       "      <th>response</th>\n",
+       "      <th>statistic</th>\n",
+       "      <th>p_value</th>\n",
+       "      <th>df</th>\n",
+       "      <th>phi</th>\n",
+       "      <th>contingency_coef</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a12_true</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>8.402940e-15</td>\n",
+       "      <td>9.999999e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a10_true</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>8.402940e-15</td>\n",
+       "      <td>9.999999e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a9_true</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>8.402940e-15</td>\n",
+       "      <td>9.999999e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "      <td>6.481875e-08</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_o</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.463319e-02</td>\n",
+       "      <td>8.752845e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>7.847482e-02</td>\n",
+       "      <td>7.823430e-02</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_c</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>3.808983e-02</td>\n",
+       "      <td>8.452629e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>9.758308e-02</td>\n",
+       "      <td>9.712176e-02</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_n</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>4.941002e-02</td>\n",
+       "      <td>8.240931e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.111418e-01</td>\n",
+       "      <td>1.104617e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_m</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>9.281740e-02</td>\n",
+       "      <td>7.606255e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.523297e-01</td>\n",
+       "      <td>1.505926e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_bb</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.173957e-01</td>\n",
+       "      <td>7.318764e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.713153e-01</td>\n",
+       "      <td>1.688553e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_j</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.602552e-01</td>\n",
+       "      <td>6.889216e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.001594e-01</td>\n",
+       "      <td>1.962665e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_dd</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>3.052028e-01</td>\n",
+       "      <td>5.806390e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.762258e-01</td>\n",
+       "      <td>2.662548e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a1_a</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>5.776603e-01</td>\n",
+       "      <td>4.472309e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>3.800198e-01</td>\n",
+       "      <td>3.552340e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_r</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>5.998730e-01</td>\n",
+       "      <td>4.386265e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>3.872573e-01</td>\n",
+       "      <td>3.611243e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_j</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>8.629846e-01</td>\n",
+       "      <td>3.529048e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>4.644848e-01</td>\n",
+       "      <td>4.212598e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a13_p</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.062699e+00</td>\n",
+       "      <td>3.026004e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>5.154365e-01</td>\n",
+       "      <td>4.581568e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_e</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.390821e+00</td>\n",
+       "      <td>2.382665e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>5.896654e-01</td>\n",
+       "      <td>5.079351e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_w</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.427656e+00</td>\n",
+       "      <td>2.321474e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>5.974227e-01</td>\n",
+       "      <td>5.128680e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_v</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.767027e+00</td>\n",
+       "      <td>1.837504e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.646478e-01</td>\n",
+       "      <td>5.535357e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a4_l</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.388196e+00</td>\n",
+       "      <td>2.387099e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.802441e-01</td>\n",
+       "      <td>5.624480e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a5_gg</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.388196e+00</td>\n",
+       "      <td>2.387099e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>6.802441e-01</td>\n",
+       "      <td>5.624480e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_aa</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.055035e+00</td>\n",
+       "      <td>1.517038e-01</td>\n",
+       "      <td>1</td>\n",
+       "      <td>7.167697e-01</td>\n",
+       "      <td>5.825743e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a13_g</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>5.472360e+00</td>\n",
+       "      <td>1.931952e-02</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.169654e+00</td>\n",
+       "      <td>7.600781e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_d</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>5.685844e+00</td>\n",
+       "      <td>1.710231e-02</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.192250e+00</td>\n",
+       "      <td>7.661763e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_k</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>6.476032e+00</td>\n",
+       "      <td>1.093388e-02</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.272402e+00</td>\n",
+       "      <td>7.862417e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_i</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.126295e+01</td>\n",
+       "      <td>7.906928e-04</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.678016e+00</td>\n",
+       "      <td>8.590271e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_cc</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.215185e+01</td>\n",
+       "      <td>4.903926e-04</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.742975e+00</td>\n",
+       "      <td>8.673813e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_q</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>1.554202e+01</td>\n",
+       "      <td>8.069134e-05</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1.971169e+00</td>\n",
+       "      <td>8.918032e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a5_g</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.250110e+01</td>\n",
+       "      <td>2.100232e-06</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.371766e+00</td>\n",
+       "      <td>9.214461e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a4_u</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.250110e+01</td>\n",
+       "      <td>2.100232e-06</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.371766e+00</td>\n",
+       "      <td>9.214461e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a6_ff</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.275226e+01</td>\n",
+       "      <td>1.842869e-06</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.384967e+00</td>\n",
+       "      <td>9.222147e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_ff</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.333858e+01</td>\n",
+       "      <td>1.358474e-06</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.415501e+00</td>\n",
+       "      <td>9.239516e-01</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a7_h</td>\n",
+       "      <td>approval</td>\n",
+       "      <td>2.403654e+01</td>\n",
+       "      <td>9.452489e-07</td>\n",
+       "      <td>1</td>\n",
+       "      <td>2.451354e+00</td>\n",
+       "      <td>9.259206e-01</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  feature_name  response     statistic       p_value  df           phi  \\\n",
+       "0  a12_true     approval  8.402940e-15  9.999999e-01  1   6.481875e-08   \n",
+       "0  a10_true     approval  8.402940e-15  9.999999e-01  1   6.481875e-08   \n",
+       "0  a9_true      approval  8.402940e-15  9.999999e-01  1   6.481875e-08   \n",
+       "0  a7_o         approval  2.463319e-02  8.752845e-01  1   7.847482e-02   \n",
+       "0  a6_c         approval  3.808983e-02  8.452629e-01  1   9.758308e-02   \n",
+       "0  a7_n         approval  4.941002e-02  8.240931e-01  1   1.111418e-01   \n",
+       "0  a6_m         approval  9.281740e-02  7.606255e-01  1   1.523297e-01   \n",
+       "0  a7_bb        approval  1.173957e-01  7.318764e-01  1   1.713153e-01   \n",
+       "0  a7_j         approval  1.602552e-01  6.889216e-01  1   2.001594e-01   \n",
+       "0  a7_dd        approval  3.052028e-01  5.806390e-01  1   2.762258e-01   \n",
+       "0  a1_a         approval  5.776603e-01  4.472309e-01  1   3.800198e-01   \n",
+       "0  a6_r         approval  5.998730e-01  4.386265e-01  1   3.872573e-01   \n",
+       "0  a6_j         approval  8.629846e-01  3.529048e-01  1   4.644848e-01   \n",
+       "0  a13_p        approval  1.062699e+00  3.026004e-01  1   5.154365e-01   \n",
+       "0  a6_e         approval  1.390821e+00  2.382665e-01  1   5.896654e-01   \n",
+       "0  a6_w         approval  1.427656e+00  2.321474e-01  1   5.974227e-01   \n",
+       "0  a7_v         approval  1.767027e+00  1.837504e-01  1   6.646478e-01   \n",
+       "0  a4_l         approval  1.388196e+00  2.387099e-01  1   6.802441e-01   \n",
+       "0  a5_gg        approval  1.388196e+00  2.387099e-01  1   6.802441e-01   \n",
+       "0  a6_aa        approval  2.055035e+00  1.517038e-01  1   7.167697e-01   \n",
+       "0  a13_g        approval  5.472360e+00  1.931952e-02  1   1.169654e+00   \n",
+       "0  a6_d         approval  5.685844e+00  1.710231e-02  1   1.192250e+00   \n",
+       "0  a6_k         approval  6.476032e+00  1.093388e-02  1   1.272402e+00   \n",
+       "0  a6_i         approval  1.126295e+01  7.906928e-04  1   1.678016e+00   \n",
+       "0  a6_cc        approval  1.215185e+01  4.903926e-04  1   1.742975e+00   \n",
+       "0  a6_q         approval  1.554202e+01  8.069134e-05  1   1.971169e+00   \n",
+       "0  a5_g         approval  2.250110e+01  2.100232e-06  1   2.371766e+00   \n",
+       "0  a4_u         approval  2.250110e+01  2.100232e-06  1   2.371766e+00   \n",
+       "0  a6_ff        approval  2.275226e+01  1.842869e-06  1   2.384967e+00   \n",
+       "0  a7_ff        approval  2.333858e+01  1.358474e-06  1   2.415501e+00   \n",
+       "0  a7_h         approval  2.403654e+01  9.452489e-07  1   2.451354e+00   \n",
+       "\n",
+       "   contingency_coef  \n",
+       "0  6.481875e-08      \n",
+       "0  6.481875e-08      \n",
+       "0  6.481875e-08      \n",
+       "0  7.823430e-02      \n",
+       "0  9.712176e-02      \n",
+       "0  1.104617e-01      \n",
+       "0  1.505926e-01      \n",
+       "0  1.688553e-01      \n",
+       "0  1.962665e-01      \n",
+       "0  2.662548e-01      \n",
+       "0  3.552340e-01      \n",
+       "0  3.611243e-01      \n",
+       "0  4.212598e-01      \n",
+       "0  4.581568e-01      \n",
+       "0  5.079351e-01      \n",
+       "0  5.128680e-01      \n",
+       "0  5.535357e-01      \n",
+       "0  5.624480e-01      \n",
+       "0  5.624480e-01      \n",
+       "0  5.825743e-01      \n",
+       "0  7.600781e-01      \n",
+       "0  7.661763e-01      \n",
+       "0  7.862417e-01      \n",
+       "0  8.590271e-01      \n",
+       "0  8.673813e-01      \n",
+       "0  8.918032e-01      \n",
+       "0  9.214461e-01      \n",
+       "0  9.214461e-01      \n",
+       "0  9.222147e-01      \n",
+       "0  9.239516e-01      \n",
+       "0  9.259206e-01      "
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtgAAAIgCAYAAAC/Eh5xAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi41LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvSM8oowAAIABJREFUeJzs3X18zvX////7TswM8Vabasg7JBXvFKEklKbmPDI5yUneeEdvkubNyizeiJJQ+SAJb8x5zinnEWIZOVeYjZnNyTZmth2/P/x2fLd2ZtvztTnmdr1cXBzH63W8HsfjeO3sfryO5+v5crLZbDYBAAAAMMK5sBsAAAAAihICNgAAAGAQARsAAAAwiIANAAAAGETABgAAAAwiYAMAAAAGuRZ2AwCsFxoaqjVr1mjfvn06c+aM4uPjVaJECT300EOqXbu2WrVqpTp16mS5/dKlS/Wf//xHkvT555/L19c31z0MHTpUy5YtkyTt2LFDnp6eeXsx/7+bN29q9erV2rJli44cOaLo6GglJyerXLlyqlChgl588UW99tprqlixYr6eB3nTtGlThYeH67nnntOcOXPueLvq1avn+7mPHTuW7xomxcbG6tq1a/L29k63fPPmzerbt68k6aOPPlKXLl0Koz0AFiBgA0XYH3/8oaCgIO3atSvDutjYWMXGxur48eNauHChGjVqpNGjR8vLy6sQOs2dn3/+WR999JHCw8MzrIuIiFBERIT27NmjL7/8Up07d9YHH3ygYsWKFUKnuJfZbDatWLFC48eP10cffZQhYAMougjYQBG1efNmDRo0SDdu3JAk1axZU76+vnr88cdVqlQpXbt2TQcOHNCiRYsUERGhbdu2qWPHjpozZ44qVKhQyN1nbe/everbt68SExPl4eGhdu3aqW7duipfvrxcXFx06dIl7d+/X4sWLdKVK1f03Xff6eLFi/rss8/k7MyouLvd8uXLs1zXpk0bSZKnp6emT59eUC3l2bZt2+Tv71/YbQAoBARsoAjav3+/BgwYoFu3bqlYsWIaPXq0WrduneFxL7zwgnr06KHhw4dr9erVioiIUP/+/bV48WK5upr99TB27FiNHTs2XzVSUlIUEBCgxMREeXp6au7cuapcuXKGxzVt2lQ9e/ZUr169dPjwYa1Zs0avvPJKnoa2oGDVqFEjx8e4ubnd0eMKW0pKSrbrmzRpctcNZwFgBodzgCLm5s2b+vDDD3Xr1i25urpq0qRJmYbrVCVKlNCnn36qWrVqSZKOHDmihQsXFlS7ubJ7926dPn1akvTuu+9mGq5TlStXThMmTJCTk5Mkafbs2QXQIQAABGygyFm0aJHCwsIkSa1atdLLL7+c4zaurq7pPsqeO3euZf3lx4kTJ+y3swvXqapUqaJ//OMfkqTjx49b1RYAAOkwRAQoYtIefe7Xr98db1enTh35+fmpUqVKqlOnjmw2m/3o71/Fx8dr9uzZ2rBhg86cOSNnZ2dVqFBBPj4+6tatm0qVKpVhG9OziOzbt08NGjTI8XHvv/++YmJiVK5cOaWkpGQ6DjsmJkYLFy7U+vXrFRYWJhcXFz3xxBPq2rWrXn75ZY0ePVrff/+9vL29tWnTJvt2586ds7+B6dixo4KCgjLt4eDBg2rfvr0kqX///howYECGxyQnJ2vt2rXatGmTQkNDFRMTo8TERJUuXVqVK1dWw4YN9dZbb+lvf/tbhm1T9+3jjz+uxYsXa9KkSVq+fLmuXr0qLy8vNW/eXEOGDEm3zW+//aaFCxdq7969unjxolxdXeXt7a2GDRuqa9euevjhh7Pdr1FRUZozZ462bNmisLAwubm5qWbNmurevbsaNmyY7baF4ejRo/rf//6n3bt3KzIyUk5OTnrooYfUoEEDde3aNds3bPHx8QoODtZPP/2k48eP6/r16ypdurQeeeQR+9elXLly9scfP35cLVu2TFfj3//+t/32rl27VK5cuWxnERk3bpy+/fZblS9fXtu2bdP58+c1a9Ysbd26VZGRkSpWrJiqVq2qFi1a6M0338z2JN6LFy9q1qxZ2rJli86dO6fixYurWrVqat++vdq1a6cvvvhC33zzjTw8PBQSEpLbXQsgEwRsoAg5f/68/Uht1apVValSpVxtP3LkyBwf88cff2jChAmKiIhIt/zo0aM6evSoli1bptmzZ+cY0PLiiSeesN+eNm2avL291apVK7m4uGS5Tb169bKtGRoaqn79+unSpUvplu/atUu7du1Sz54989f0HQgLC1O/fv3SHaFPFRMTo5iYGO3fv1/z5s3TrFmzsp3Kzt/fX6tXr7bfP3funEqUKGG/n5SUpFGjRmn+/Pnptrt586aOHz+u48ePa+7cuQoICFDHjh0zfY6ff/5ZAwYMUHx8vH3Z9evXtX37dm3fvt0eGu8GNptNEydO1PTp0zOMiT516pROnTql+fPna9CgQerdu3eG7cPCwtSjRw/7p0KpUr8uISEhmjlzpr788ku9+OKLlryGnTt36r333lNsbKx92Y0bN7R//37t379fy5cv16xZszJ9Y7t//3717dtXV69etS9LTEy0b7tu3TpVrVrVkr6BexkBGyhCDh8+bL/97LPPWvIcU6ZMkXT7BK127drpgQce0KlTp/TNN9/o3LlzOnv2rEaMGGHJLA916tTRU089pUOHDikxMVFDhw7VZ599pldeeUUvvPCC6tSpk+kR3qycP39eb7/9tq5fvy4nJye1adNGLVq0kIeHh/bu3avp06fr22+/1UMPPWT8taRKTEzUO++8Yx9b7uPjo9dff13ly5dXfHy8Tp06pdmzZys8PFzR0dH6+OOPsxwjf/z4cR09elTPPPOM+vTpI3d3d23ZskXt2rWzPyYgIMD+ScKzzz6rN998U3//+9918+ZNhYSEaM6cOYqKitLHH38sNzc3tW3bNt1zHD58WH369LGfQPvWW2+padOmKlasmPbs2aOZM2fqm2++uWtmbPn000/17bffSpKefPJJderUSdWqVVNSUpIOHjyoOXPmKDw8XBMmTJCzs7N69eqVbvv3339fYWFhKlasmHr06KEGDRqodOnSio6O1k8//aTFixfr+vXrev/997Vx40aVLVtWjzzyiJYvX65ff/1Vo0aNkiR9+OGHev755yVJZcqUueP+Y2Nj1b9/fyUmJqpr165q0qSJPDw8FBoaqm+++UYxMTEKDQ3V1KlTM8xYcurUKfXs2VM3btyQi4uL3nzzTb366qtyd3fXvn37NGPGDG3bti3TaTwB5A8BGyhC0s4LbcUR5FRDhw5Vjx497PefeeYZvfrqq/L19VVUVJS2b9+u6Oho3X///cafe/LkyerUqZMuXLgg6fZQhfnz52v+/PlycnJS1apVVa9ePb344ot6/vnn5ebmlmWtsWPH6vr165KkwMBA+fn5ZXhNnTt31vnz542/jlQrVqywh+tu3bpp+PDh6dY3bNhQ7du3V8uWLRUeHq7ffvtNFy5c0IMPPpihVkpKiipVqqRZs2bJ3d1dklS/fn37+h9//NEervv06aP3338/3fbPPfecOnTooK5du+rkyZMKCgpS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T09PxcXFZRhG8sgjj+iJJ57Q4cOHdfHiRb311lvq2bOnHnnkEcXHxys0NFTBwcEZhh1kN6Y7O+3atdOGDRu0ZcsWhYaGqmXLlurevbtq1aqlxMRE7du3T7Nnz7Z/P7z99tt64okn0tUICAjQ7t27deXKFQ0bNky7d+9WixYtVLp0af3222+aMWOGoqKi5OHhUeCh8q+aNm2q1q1ba8WKFTp16pRatWql7t2769lnn1VycrIOHDig7777zj47SuvWre2XM5ek119/XTNmzNDx48e1atUqnTt3Th07dlSlSpWUlJSkU6dO6fvvv9fZs2cl3T55NO33WNq5y+fOnatKlSrJyclJNWvWLJCfscDAQHXo0EEJCQn65z//KT8/P7388ssqUaKEDh48qBkzZqS72iQAcwjYQBHVsWNHPfTQQwoMDFR4eLgOHDiQ7VhUHx8fBQYGZnvi2t2gZ8+eevDBBzVu3DhduHBBJ06cyPaqkTVr1tSoUaMynd2hRIkS+u6779S3b18dOnRImzdv1ubNm9M9xtfXV0ePHs1ymEivXr20e/du7dmzRzExMRozZky69V5eXvq///s/de/ePdNx2mPHjlW3bt105coVHTt2TP7+/hke4+npqX/961/2q+6dPHkyy9ebHScnJ02aNEnDhw/XqlWrdOHChSyPzHbu3DnTXry8vDRv3jz77C/Lly/X8uXL0z2mY8eOioyMTDespbCMHj1a7u7uWrhwoWJiYvT5559n+riWLVtmOPJerFgxffXVV+rVq5fOnDmj3377LdPx687OzvYTINN69NFHVaVKFZ06dUq///67OnfuLElatGiRatWqZeYFZuOxxx7T5MmTNXDgQMXHx2c6/3mLFi105swZHTx48K59Yw04IgI2UIQ1atRI69at04YNG7R582YdPnxYkZGRSkhIkIeHh7y9vVWnTh21a9cux4tR3E1ef/11NWnSRJs3b9b27dt16NAhXb58WVeuXFGJEiXk6empWrVqycfHRy+99FK2Y2E9PT0VHBysRYsWacWKFTp+/LhSUlJUvXp1derUSa1bt872qoWpIX3p0qVasWKFjh07psTERHl7e6tZs2bq0aOHypYtm+X21atX1w8//KAZM2Zo+/btCg8Pl81m03333acqVaqoSZMmat++vUqXLq3p06crIiJC69at08CBA/M0vZq7u7s+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\n",
+      "text/plain": [
+       "<Figure size 864x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "def chi2_gof_test(feature_name, response):\n",
+    "    query = \"\"\"\n",
+    "        WITH freq AS (\n",
+    "            SELECT {feature_name}\n",
+    "                  ,{response}\n",
+    "                  ,count(*) AS observed\n",
+    "            FROM public.model_inputs\n",
+    "            GROUP BY 1,2\n",
+    "        )\n",
+    "        SELECT '{feature_name}' AS feature_name\n",
+    "              ,'{response}' AS response\n",
+    "              ,(madlib.chi2_gof_test(observed, expected, deg_freedom)).*\n",
+    "        FROM (\n",
+    "            SELECT observed\n",
+    "                  ,sum(observed) OVER (PARTITION BY {feature_name})::DOUBLE PRECISION\n",
+    "                       * sum(observed) OVER (PARTITION BY {response}) AS expected\n",
+    "            FROM freq\n",
+    "        ) l, (\n",
+    "            SELECT (count(distinct {feature_name}) - 1) * (count(distinct {response}) - 1) AS deg_freedom\n",
+    "            FROM freq\n",
+    "        ) r;\n",
+    "    \"\"\".format(feature_name=feature_name, response=response)\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    return pd.DataFrame(cur.fetchall(), columns=colnames)\n",
+    "\n",
+    "def chi2_gof_test_multi(feature_list, response):\n",
+    "    res = chi2_gof_test(feature_list[0], response)\n",
+    "    for i in range(1,len(feature_list)):\n",
+    "        res = res.append(chi2_gof_test(feature_list[i], response))\n",
+    "        \n",
+    "    return res\n",
+    "\n",
+    "chi2_results = chi2_gof_test_multi(catFeatureNames, 'approval')\n",
+    "chi2_results.sort_values('phi', inplace=True)\n",
+    "ipd.display(chi2_results)\n",
+    "bar_plot(chi2_results, \"Chi-Squared Testing\",\"feature_name\",\"Feature Name\",\"phi\",\"Test Statistic\", \"#4378E2\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_corr\"></a>\n",
+    "#### Correlation Testing\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__correlation.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "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>a2</th>\n",
+       "      <th>a3</th>\n",
+       "      <th>a8</th>\n",
+       "      <th>a11</th>\n",
+       "      <th>a14</th>\n",
+       "      <th>a15</th>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>variable</th>\n",
+       "      <th></th>\n",
+       "      <th></th>\n",
+       "      <th></th>\n",
+       "      <th></th>\n",
+       "      <th></th>\n",
+       "      <th></th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>a2</th>\n",
+       "      <td>1.000000</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>a3</th>\n",
+       "      <td>0.201316</td>\n",
+       "      <td>1.000000</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>a8</th>\n",
+       "      <td>0.392787</td>\n",
+       "      <td>0.298902</td>\n",
+       "      <td>1.000000</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>a11</th>\n",
+       "      <td>0.185575</td>\n",
+       "      <td>0.271207</td>\n",
+       "      <td>0.322330</td>\n",
+       "      <td>1.000000</td>\n",
+       "      <td>NaN</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>a14</th>\n",
+       "      <td>-0.077161</td>\n",
+       "      <td>-0.222346</td>\n",
+       "      <td>-0.076389</td>\n",
+       "      <td>-0.119809</td>\n",
+       "      <td>1.000000</td>\n",
+       "      <td>NaN</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>a15</th>\n",
+       "      <td>0.018539</td>\n",
+       "      <td>0.123121</td>\n",
+       "      <td>0.051345</td>\n",
+       "      <td>0.063692</td>\n",
+       "      <td>0.065609</td>\n",
+       "      <td>1.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "                a2        a3        a8       a11       a14  a15\n",
+       "variable                                                       \n",
+       "a2        1.000000 NaN       NaN       NaN       NaN       NaN \n",
+       "a3        0.201316  1.000000 NaN       NaN       NaN       NaN \n",
+       "a8        0.392787  0.298902  1.000000 NaN       NaN       NaN \n",
+       "a11       0.185575  0.271207  0.322330  1.000000 NaN       NaN \n",
+       "a14      -0.077161 -0.222346 -0.076389 -0.119809  1.000000 NaN \n",
+       "a15       0.018539  0.123121  0.051345  0.063692  0.065609  1.0"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# calc correlations\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.feature_correlations, public.feature_correlations_summary;\n",
+    "    SELECT madlib.correlation( \n",
+    "        'public.model_inputs',\n",
+    "        'public.feature_correlations',\n",
+    "        '{}'\n",
+    "    );\n",
+    "    SELECT * \n",
+    "    FROM public.feature_correlations\n",
+    "    ORDER BY column_position;\n",
+    "\"\"\".format(\",\".join(contFeatureNames))\n",
+    "corr = query_gpdb(query)\n",
+    "\n",
+    "corr.drop('column_position', 'columns', inplace=True)\n",
+    "corr.set_index('variable', True, False, True)\n",
+    "corr"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "scrolled": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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IkJRUVGaMWOGXnvtNW/UBgAAUDqLxbNXBXXKOWNOp7PY85iaNWvmN79eAAAAPqwC33r0xClHxkJCQrRnzx53AFu7dq0qV65seGEAAABng1OOjD300EO6++67lZmZqVtvvVV//PGHxo8f743aAAAASleB54F54pRh7OKLL9bs2bP1448/yul06sILL1TNmjW9URsAAECpPHn4d0VWahhbtmzZCfevXbtWknTdddcZUxEAAEBZ+Mkc9lLD2LRp00r9kMViIYwBAABznc1hDAAAwGwWP3kc0imP4sCBA3rwwQfVtm1btW/fXk888YSys7O9URsAAEDpAgI8e1VQp6xs2LBhatCggebOnavp06erWrVqevrpp71RGwAAQOnOlkVfd+/erTfeeMO9/eijjyo5OdnQogAAAE7JT35NecqRsaioKP3111/u7X379slqtRpaFAAAwKn4y7MpSx0Zu++++yRJBw8eVNeuXXXZZZcpICBAq1evVpMmTbxWIAAAwAlV4FuPnig1jHXs2PGE+6+66iqjagEAACg7P7lNWWoY69at2wn3u1wu/fnnn4YVBAAAUCb+PjL2t5kzZ+rFF19Ufn6+e1/NmjX13XffGVoYAADAyVTkeWCesLhcLtfJGlxzzTUaN26c3njjDd1///368ssvtW/fPj3zzDPeqhEAAKCEgi3bPGpfuUmsQZWUzylHxqpXr64LL7xQzZo104EDBzRgwAB1797dG7W57Rsx2qv9+ZvaIx6TJP2e3NPkSnxb48UzJUlb2594PiXKJu7bpcrMzDG7DJ9mtYZLEuexnKzWcM5hOf19LZrGT+aMnXJ8LygoSFlZWTrnnHO0YcMGSVJubq7hhQEAAJzU2bIC/y233KL+/fvrqquu0qxZs9S9e3c1btzYG7UBAACUymKxePSqqE55m7JHjx7q1KmTQkNDNWvWLG3cuFFXXHGFN2oDAAAoXQUe7fJEqWFs0aJF6tKli/773/+WeG/GjBnq06ePoYUBAACcVAUe7fJEqWHs77XEfvvtN68VAwAAUGb+HsYGDx4sSapVq5YeeughrxUEAABQFpaz5deUX331lRfKAAAAODudcgJ//fr1dffdd+viiy9W1apV3fuZMwYAAEzlJyvwl2nRV0navXu34cUAAACUmb/PGfvb888/7406AAAAPOMnc8ZOGcZ+/PFHTZo0SXl5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\n",
+      "text/plain": [
+       "<Figure size 792x648 with 2 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# Generate a mask for the upper triangle\n",
+    "mask = np.zeros_like(corr, dtype=np.bool)\n",
+    "mask[np.triu_indices_from(mask)] = True\n",
+    "\n",
+    "# Set up the matplotlib figure\n",
+    "f, ax = plt.subplots(figsize=(11, 9))\n",
+    "\n",
+    "# Generate a custom diverging colormap\n",
+    "cmap = sns.diverging_palette(220, 10, as_cmap=True)\n",
+    "\n",
+    "# Draw the heatmap with the mask and correct aspect ratio\n",
+    "sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,\n",
+    "            square=True, linewidths=.5, cbar_kws={\"shrink\": .5}, annot=True);"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"fe_scatter\"></a>\n",
+    "#### Scatter Plots"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def sample_scatter(title, x, xLabel, y, yLabel, sampleSize):\n",
+    "    \n",
+    "    pylab.rcParams['figure.figsize'] = (8, 8)\n",
+    "\n",
+    "    # Grab sample\n",
+    "    query = \"\"\"\n",
+    "        SELECT count(*) AS n\n",
+    "        FROM public.model_inputs;\n",
+    "    \"\"\".format(\",\".join(contFeatureNames))\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    n = pd.DataFrame(cur.fetchall(), columns=colnames)['n'][0]\n",
+    "    limit = math.floor(n * sampleSize)\n",
+    "    \n",
+    "    query = \"\"\"\n",
+    "        SELECT {} AS col1\n",
+    "              ,{} AS col2\n",
+    "        FROM public.model_inputs\n",
+    "        LIMIT {};\n",
+    "    \"\"\".format(x, y, limit)\n",
+    "    cur.execute(query)\n",
+    "\n",
+    "    colnames = [desc[0] for desc in cur.description]\n",
+    "    sample = pd.DataFrame(cur.fetchall(), columns=colnames)    \n",
+    "    \n",
+    "    # Generate scatterplot\n",
+    "    if x == y:\n",
+    "        sample\n",
+    "    plt = sns.regplot(x=\"col1\", y=\"col2\", data=sample)\n",
+    "    \n",
+    "    # titles\n",
+    "    plt.set_title(\"\\n\".join(tw.wrap(title,50)),fontsize=16)\n",
+    "    plt.set_xlabel(xLabel,fontsize=16)\n",
+    "    plt.set_ylabel(yLabel,fontsize=16)\n",
+    "\n",
+    "    # add 1000s commas\n",
+    "    plt.get_yaxis().set_major_formatter(\n",
+    "        matplotlib.ticker.FuncFormatter(lambda y, p: format(int(y), ',')))\n",
+    "    plt.get_xaxis().set_major_formatter(\n",
+    "        matplotlib.ticker.FuncFormatter(lambda y, p: format(int(y), ',')))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n",
+       " **Select Features:**"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "4dfe1f1e9d7f4d819089ef04d86f961e",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "Dropdown(description=u'x:', options=('a2', 'a3', 'a8', 'a11', 'a14', 'a15'), value='a2')"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "955d04bf76e34f34bc431d93dc925614",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "Dropdown(description=u'y:', index=1, options=('a2', 'a3', 'a8', 'a11', 'a14', 'a15'), value='a3')"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 576x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "x = contFeatureNames[0]\n",
+    "y = contFeatureNames[1]\n",
+    "\n",
+    "def reset():\n",
+    "    ipd.clear_output()\n",
+    "    printmd(\"-----\\n **Select Features:**\")\n",
+    "    ipd.display(scatterDropdown1, scatterDropdown2)\n",
+    "\n",
+    "    sample_scatter(\"{} by {}\".format(x, y), x, x, y, y, 1)   \n",
+    "    \n",
+    "def os1(res):\n",
+    "    global x\n",
+    "    if res['type'] == 'change' and res['name'] == 'value':\n",
+    "        contFeatureNames.append(x)\n",
+    "        x = res['new']\n",
+    "        contFeatureNames.remove(x)\n",
+    "        reset()\n",
+    "\n",
+    "def os2(res):\n",
+    "    global y\n",
+    "    if res['type'] == 'change' and res['name'] == 'value':\n",
+    "        y = res['new']\n",
+    "        reset()\n",
+    "                   \n",
+    "scatterDropdown1 = widgets.Dropdown(\n",
+    "    options=contFeatureNames,\n",
+    "    value=x,\n",
+    "    description='x:',\n",
+    "    disabled=False,\n",
+    ")\n",
+    "\n",
+    "scatterDropdown2 = widgets.Dropdown(\n",
+    "    options=contFeatureNames,\n",
+    "    value=y,\n",
+    "    description='y:',\n",
+    "    disabled=False,\n",
+    ")\n",
+    "\n",
+    "scatterDropdown1.observe(os1)\n",
+    "scatterDropdown2.observe(os2)\n",
+    "\n",
+    "reset()\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Model Training"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"train_vali_split\"></a>\n",
+    "#### Training & Validation Sample Split\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__train__test__split.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# split training and validation set\n",
+    "# we are careful not to include the same customer in both sets\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model\n",
+    "                        ,public.model_train\n",
+    "                        ,public.model_test;\n",
+    "                        \n",
+    "    SELECT madlib.train_test_split(\n",
+    "        'public.model_inputs',\n",
+    "        'public.model',\n",
+    "        0.7,\n",
+    "        NULL,\n",
+    "        NULL,\n",
+    "        '*',\n",
+    "        FALSE,\n",
+    "        TRUE\n",
+    "    )\n",
+    "\"\"\"\n",
+    "cur.execute(query)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "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>_id</th>\n",
+       "      <th>a1_a</th>\n",
+       "      <th>a4_l</th>\n",
+       "      <th>a4_u</th>\n",
+       "      <th>a5_g</th>\n",
+       "      <th>a5_gg</th>\n",
+       "      <th>a6_aa</th>\n",
+       "      <th>a6_c</th>\n",
+       "      <th>a6_cc</th>\n",
+       "      <th>a6_d</th>\n",
+       "      <th>a6_e</th>\n",
+       "      <th>a6_ff</th>\n",
+       "      <th>a6_i</th>\n",
+       "      <th>a6_j</th>\n",
+       "      <th>a6_k</th>\n",
+       "      <th>a6_m</th>\n",
+       "      <th>a6_q</th>\n",
+       "      <th>a6_r</th>\n",
+       "      <th>a6_w</th>\n",
+       "      <th>a7_bb</th>\n",
+       "      <th>a7_dd</th>\n",
+       "      <th>a7_ff</th>\n",
+       "      <th>a7_h</th>\n",
+       "      <th>a7_j</th>\n",
+       "      <th>a7_n</th>\n",
+       "      <th>a7_o</th>\n",
+       "      <th>a7_v</th>\n",
+       "      <th>a9_true</th>\n",
+       "      <th>a10_true</th>\n",
+       "      <th>a12_true</th>\n",
+       "      <th>a13_g</th>\n",
+       "      <th>a13_p</th>\n",
+       "      <th>approval</th>\n",
+       "      <th>a2</th>\n",
+       "      <th>a3</th>\n",
+       "      <th>a8</th>\n",
+       "      <th>a11</th>\n",
+       "      <th>a14</th>\n",
+       "      <th>a15</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>30.83</td>\n",
+       "      <td>0.000</td>\n",
+       "      <td>1.250</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>202.0</td>\n",
+       "      <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>4</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>27.83</td>\n",
+       "      <td>1.540</td>\n",
+       "      <td>3.750</td>\n",
+       "      <td>5.0</td>\n",
+       "      <td>100.0</td>\n",
+       "      <td>3.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>13</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>38.25</td>\n",
+       "      <td>6.000</td>\n",
+       "      <td>1.000</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "      <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>17</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>28.25</td>\n",
+       "      <td>0.875</td>\n",
+       "      <td>0.960</td>\n",
+       "      <td>3.0</td>\n",
+       "      <td>396.0</td>\n",
+       "      <td>0.0</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>24</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>27.42</td>\n",
+       "      <td>14.500</td>\n",
+       "      <td>3.085</td>\n",
+       "      <td>1.0</td>\n",
+       "      <td>120.0</td>\n",
+       "      <td>11.0</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   _id  a1_a  a4_l  a4_u  a5_g  a5_gg  a6_aa  a6_c  a6_cc  a6_d  a6_e  a6_ff  \\\n",
+       "0  1    0     0     1     1     0      0      0     0      0     0     0       \n",
+       "1  4    0     0     1     1     0      0      0     0      0     0     0       \n",
+       "2  13   1     0     1     1     0      0      0     0      0     0     0       \n",
+       "3  17   0     0     1     1     0      0      0     0      0     0     0       \n",
+       "4  24   1     0     1     1     0      0      0     0      0     0     0       \n",
+       "\n",
+       "   a6_i  a6_j  a6_k  a6_m  a6_q  a6_r  a6_w  a7_bb  a7_dd  a7_ff  a7_h  a7_j  \\\n",
+       "0  0     0     0     0     0     0     1     0      0      0      0     0      \n",
+       "1  0     0     0     0     0     0     1     0      0      0      0     0      \n",
+       "2  0     0     1     0     0     0     0     0      0      0      0     0      \n",
+       "3  0     0     0     1     0     0     0     0      0      0      0     0      \n",
+       "4  0     0     0     0     0     0     0     0      0      0      1     0      \n",
+       "\n",
+       "   a7_n  a7_o  a7_v  a9_true  a10_true  a12_true  a13_g  a13_p  approval  \\\n",
+       "0  0     0     1     0        0         0         1      0      1          \n",
+       "1  0     0     1     0        0         0         1      0      1          \n",
+       "2  0     0     1     0        0         0         1      0      1          \n",
+       "3  0     0     1     0        0         0         1      0      1          \n",
+       "4  0     0     0     0        0         0         1      0      1          \n",
+       "\n",
+       "      a2      a3     a8  a11    a14   a15  \n",
+       "0  30.83  0.000   1.250  1.0  202.0  0.0   \n",
+       "1  27.83  1.540   3.750  5.0  100.0  3.0   \n",
+       "2  38.25  6.000   1.000  0.0  0.0    0.0   \n",
+       "3  28.25  0.875   0.960  3.0  396.0  0.0   \n",
+       "4  27.42  14.500  3.085  1.0  120.0  11.0  "
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "query = \"\"\"\n",
+    "    SELECT *\n",
+    "    FROM public.model_train\n",
+    "    LIMIT 5\n",
+    "\"\"\"\n",
+    "df = query_gpdb(query)\n",
+    "df"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### Random Forest (MADlib)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_train_model\"></a>\n",
+    "#### Train model\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__random__forest.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# train random forest model\n",
+    "query = \"\"\"\n",
+    "\n",
+    "DROP TABLE IF EXISTS public.rf_model_output, public.rf_model_output_summary, public.rf_model_output_group;\n",
+    "SELECT madlib.forest_train(\n",
+    "            'public.model_train',\n",
+    "            'public.rf_model_output',\n",
+    "            '_id',\n",
+    "            'approval',\n",
+    "            '{}',\n",
+    "            null,\n",
+    "            null,\n",
+    "            10::integer,\n",
+    "            5::integer,\n",
+    "            true::boolean,\n",
+    "            5::integer,\n",
+    "            10::integer,\n",
+    "            3::integer,\n",
+    "            1::integer,\n",
+    "            10::integer\n",
+    "        )\n",
+    "        \n",
+    "\"\"\".format(','.join(featureNames))\n",
+    "cur.execute(query)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 24,
+   "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>gid</th>\n",
+       "      <th>sample_id</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>1</td>\n",
+       "      <td>2</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>3</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>4</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>1</td>\n",
+       "      <td>5</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   gid  sample_id\n",
+       "0  1    1        \n",
+       "1  1    2        \n",
+       "2  1    3        \n",
+       "3  1    4        \n",
+       "4  1    5        "
+      ]
+     },
+     "execution_count": 24,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# view model summary\n",
+    "query = \"\"\"\n",
+    "    SELECT gid, sample_id\n",
+    "    FROM public.rf_model_output\n",
+    "\"\"\"\n",
+    "\n",
+    "df = query_gpdb(query)\n",
+    "df.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_variable_importance\"></a>\n",
+    "#### Variable Importance"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
+   "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>feature_name</th>\n",
+       "      <th>impurity_feature_importance</th>\n",
+       "      <th>oob_feature_importance</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>a8</td>\n",
+       "      <td>0.823849</td>\n",
+       "      <td>0.024434</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>a3</td>\n",
+       "      <td>0.821478</td>\n",
+       "      <td>0.005599</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>a15</td>\n",
+       "      <td>0.755672</td>\n",
+       "      <td>0.025102</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>a11</td>\n",
+       "      <td>0.625277</td>\n",
+       "      <td>0.019325</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>a2</td>\n",
+       "      <td>0.624248</td>\n",
+       "      <td>0.007773</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>a14</td>\n",
+       "      <td>0.578636</td>\n",
+       "      <td>0.009402</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>6</th>\n",
+       "      <td>a7_h</td>\n",
+       "      <td>0.305504</td>\n",
+       "      <td>0.003108</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>7</th>\n",
+       "      <td>a7_v</td>\n",
+       "      <td>0.302854</td>\n",
+       "      <td>0.006532</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>8</th>\n",
+       "      <td>a1_a</td>\n",
+       "      <td>0.284091</td>\n",
+       "      <td>0.006950</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>9</th>\n",
+       "      <td>a6_aa</td>\n",
+       "      <td>0.214097</td>\n",
+       "      <td>0.005468</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "  feature_name  impurity_feature_importance  oob_feature_importance\n",
+       "0  a8           0.823849                     0.024434              \n",
+       "1  a3           0.821478                     0.005599              \n",
+       "2  a15          0.755672                     0.025102              \n",
+       "3  a11          0.625277                     0.019325              \n",
+       "4  a2           0.624248                     0.007773              \n",
+       "5  a14          0.578636                     0.009402              \n",
+       "6  a7_h         0.305504                     0.003108              \n",
+       "7  a7_v         0.302854                     0.006532              \n",
+       "8  a1_a         0.284091                     0.006950              \n",
+       "9  a6_aa        0.214097                     0.005468              "
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAIgCAYAAABQ0HVPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi41LCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvSM8oowAAIABJREFUeJzs3XlcVXX+x/H3ZZMQRxoCbCxnXEKtMC1TQsclMcYFM3PXqFxSW0imTMes1DJTJ5lflqaOS7ll5YqTaC5pCY5DNrmh5vgzd0BRBAEF7v394XB/Xlkuy7lXrr6ej0ePuWf5fs8HODVvvnzP95gsFotFAAAAAAzjdrMLAAAAAG41hGwAAADAYIRsAAAAwGCEbAAAAMBghGwAAADAYIRsAAAAwGAeN7sAAM4zY8YMffzxxxVqe+jQIYOrMc7BgwfVqFGjm12Gw508eVIdOnSQJLVo0UKLFi26yRW5jpMnT8rPz0++vr43uxQAtwlGsgG4rLS0NL3++ut68cUXb3YpqKKuXr2qjz/+WF26dNHFixdvdjkAbiOMZAO3qVdeecU6KuqqXn/9de3cuVO1a9e+2aWgipo7d65mzJhxs8sAcBsiZAO3qd/97ndq3LjxzS6jUsxm880uAVUc9wiAm4XpIgAAAIDBCNkAAACAwZguAqBSvv/+e61cuVL//ve/de7cOXl7e6tOnTpq27atBg4cqN/+9reltj9x4oS++uor7dq1SydOnFBGRoa8vLz029/+Vg899JB69OihVq1a2bQZM2aMVq1aZd0+deqUGjZsKEl66qmn9MEHH0iSHn/8cZ06dUp169ZVfHx8iTU0a9ZM2dnZRVbsuH41j08++UQBAQGaPHmyDhw4IG9vb9WvX1/vvPOOzcomOTk5WrZsmTZt2qSjR48qKytLfn5+evDBBxUZGalOnTrJzc0x4xuFq8f4+fnpn//8p06ePKn58+dr27ZtSk1NlZ+fn5o1a6ahQ4cqJCREknT58mUtWLBAGzZs0IkTJ+Tm5qbGjRtrwIAB6ty5c4nX8PLy0t69e/Xrr7/q008/1Y4dO5Seni4/Pz898sgjioqK0iOPPFJqvVevXtXq1au1YcMGJScn69KlS6pRo4YaNGig8PBw9enTR97e3sW2Lfx5/+Uvf1G7du307rvv6scff5SHh4fq1Kmjfv36ady4cTZtCn+WtWvX1pYtW2yOXblyRWvWrNG2bduUnJysCxcuKC8vTzVr1tR9992ndu3aqXfv3vLx8SlSyzPPPKNdu3apQ4cOmjlzpvbt26dFixZp165dOnfunHx9fRUSEqJevXqpY8eOpX5P0tPTtWrVKm3cuFEnTpzQpUuX5O/vr6ZNm6pfv34KDQ0tse3NvPcAFEXIBlAh2dnZeuONN/Ttt9/a7L969ar27dunffv26bPPPtO0adP0+OOPF9vH7Nmz9dFHHyk/P99mf15eni5fvqwTJ05o3bp16tevn8aPH++oL6VMDhw4oHnz5ik3N1fStVB28OBB3XvvvdZz9uzZo5dfflkpKSk2bdPS0rR161Zt3bpVixYt0kcffaTAwECH1vv9999r5MiRysrKsu5LTU3Vhg0btHXrVn366ae69957NWTIEP366682bZOSkpSUlKQjR44oOjq6xGskJSVp2LBhNtdIS0tTfHy84uPj9dprr+mFF14otu3Bgwc1cuRI/e///q/N/vT0dO3atUu7du3SggULNGPGDOsvBMU5e/as+vXrp/T0dOu+AwcOyN3dvcQ2N9q/f79efPFFnT17tsixc+fO6dy5c0pMTNSyZcv0+eefKygoqMS+Fi1apA8++MDmnk5PT9e2bdu0bds2Pfnkk5oyZYpMJlORttu2bdOoUaOUkZFR5Gss/J4OHDhQ48aNK9K+Kt17AK4hZAMoN7PZrBEjRmjnzp2SpPbt26tbt2665557dPnyZe3cuVNLlixRZmamXn75Zc2bN0+PPfaYTR8rVqzQ9OnTJUm1atXSwIEDdf/996t69eo6ffq0tm7dqnXr1slsNmvZsmXq0KGD/vjHP0qSoqOj9eyzz+rNN9/U/v37FRAQoLlz50qSatas6ZCvedasWfL09NRrr72m5s2b6/jx40pPT1f16tUlSb/88oueffZZZWdnq3r16urfv78ee+wx1ahRQ6dOndK6deu0adMm/fTTTxo8eLCWL19e7KioEbKzs/Xqq68qPz9fQ4YM0R//+EdduXJFq1at0vr163X16lVNmDBBJpNJJ0+eVP/+/RUeHq477rhDO3bs0OzZs5WXl6dZs2bpqaeesvlFolBBQYFeeeUVZWVl6YknnlDPnj31m9/8RklJSZozZ44uXbqkDz/8UL6+vurfv79N22PHjun555+3BuP27dure/fu+t3vfqfU1FStW7dO69ev15kzZxQVFaXly5crODi42K/1s88+k8Vi0ZAhQ9S+fXudO3dOycnJevzxx7V69WotW7ZMy5cvlyTNmTNHgYGB8vT0tLa/cOGCBg0apIsXL8rd3V09evRQu3btdNdddykjI0PJyclauHChLly4oGPHjmnKlCnW+/ZGP//8s7Zs2aKaNWvq2WefVYsWLWSxWPTDDz9o3rx5ysvL05o1a9SuXbsifyVITEzUsGHDZLFY5OnpqT59+qhdu3by8fFRcnKy5syZo5SUFC1evFh33323hgwZYm1ble49ANexALhtfPTRR5bg4GBLcHCwZcaMGZYDBw7Y/ef8+fNF+lmwYIG1n2XLlhV7rePHj1tatWplCQ4OtrRt29Zy9epV6zGz2Wxp06aNJTg42NK8eXPL8ePHi+1j0aJF1uuMHTu2yPGBAwdagoODLe3bty+2ffv27S3BwcGWiIiIUr8vTZs2tQQHB1sGDhxos//EiRPW6wcHB1uWL19eYh9PPvmkJTg42NKmTRvLr7/+Wuw5ixcvtvY1bdq0UmsqzvX13FirxWL7823YsKElISGhyDk9e/a0+Zr+8Y9/FDnn+u/7woULS7xGcHCwZebMmUXaHz161NKyZUtLcHCw5dFHH7VcuHDB5vhzzz1nbT9//vxiv9aVK1daz4mMjLSYzWab49fXMH369GL7uLHeEydOFDk+ffp06/EFCxYU28fZs2ctjzzyiCU4ONgSEhJiycvLszleeB8GBwdbWrVqZTl16lSRPv7xj39Yzxk8eLDNsStXrlg6dOhg7T8pKanYGlq3bm0JDg62PPzww5asrCzrMWfcewDKj8lZwG1qxowZ6t69u91/1q5da9PObDZr4cKFkqQ2bdqob9++xfZ/77336rXXXpMknTlzxmZayalTp1SzZk3VqFFDPXr0KHakVJK6detm/Xzjn8GdzdvbW927dy/22I4dO5ScnCxJGj16tOrUqVPseQMGDFCLFi0kScuWLVNeXp5jipXUsWPHIn89kKQnnnjC+rlFixbFzru+fv3048ePl3iNRx99VCNGjCiyv27dutaffUZGhr755hvrseTkZCUkJEiS2rVrp+eff77Yvp966in16NFD0rW3jW7fvr3EOvr161fiMXtSU1MVGBiogIAADRgwoNhzgoKCrD+3K1eulPpS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GvqaNWtq7NixFb5eVWE2m/XSSy+pX79+Cg8Pl6enpxITEzV//nxdvnxZbm5uGj9+fJGHXidNmqSnn35aly5d0qRJk5SYmKju3bvr7rvvVlpamv7xj39YX2BTrVo1xcbGVvhBzuvvu5kzZ2rQoEEym81q2rSpHnnkEQUEBCgtLU3Jycl69tlnNWDAANWuXVsXL17Uv/71L3399ddFVvAo7a83FeHl5aVJkybphRdeUHZ2tvr376+BAweqVatWcnd314EDBzR37lylpaVJksaMGWNdVeV2vfcAV0DIBlBu1apV07x58zRy5Ejt3LlTR48e1TvvvFPkPHd3d0VHRysqKspmf4cOHdSnTx8tX75ceXl5WrBgQbErI/To0UMZGRnavHmzTp06pZycHN1xxx3W40888YRWrlwpSZo+fbqmT5+uRx99VIsXL5Z0bZ7tkCFD9Pe//135+fmaP3++5s+fb21fGG62bNlSqZAtXVszes6cOYqJidHFixf1zTff2LzpsFCtWrX0ySefFDsH3dUMGjRIixYtsv5zPR8fH3344YfFTvOoU6eOFi1apJdeekknT57Uli1bbF7IUujee+9VbGyszZzu8goLC5OPj4+ys7O1fv16rV+/Xp6entq9e7eqVaumadOmafjw4crNzVVSUpKSkpKK9PGHP/xBPXv21F//+ldJ0pEjRwxfY7pNmzaKjY3V2LFjlZ2drTlz5mjOnDk257i7u+vPf/6zevXqZbP/drz3AFdAyAZQIXfeeac+++wzbdmyRWvXrtXPP/9sXe/37rvvVsuWLTVgwACbB92uN3HiRIWGhurrr7/W/v37lZmZqWrVqqlWrVpq0qSJevXqpebNm+urr77S5s2blZeXp2+//dbmVevt27fXlClTtHDhQh07dkwmk8k6el5o1KhRat26tZYuXardu3crIyNDAQEBCg0N1aBBg3TfffcVG/AqIiwsTJs3b9ayZcv03Xff6T//+Y8yMzPl4+OjBg0aqEOHDurbt68haztXBREREXryySc1a9Ys7dq1Szk5Obr33nvVrl07DRw4sNRl4ho1aqT169frq6++0rfffqtDhw4pMzNT/v7+qlu3rrp27aouXbrY/FJVEYGBgVq4cKFiY2O1b98+XblyRQEBATpz5ox+//vf67HHHtOqVas0f/58JSYmWtdrv/POO3XffffpT3/6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\n",
+      "text/plain": [
+       "<Figure size 864x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "query = \"\"\"\n",
+    "    SELECT unnest(string_to_array(independent_varnames,',')) AS feature_name\n",
+    "          ,unnest(impurity_var_importance) AS impurity_feature_importance\n",
+    "          ,unnest(oob_var_importance) AS oob_feature_importance\n",
+    "    FROM public.rf_model_output_group l\n",
+    "        ,public.rf_model_output_summary r\n",
+    "    ORDER BY 2 DESC\n",
+    "\"\"\"\n",
+    "\n",
+    "df = query_gpdb(query)\n",
+    "ipd.display(df.head(10))\n",
+    "bar_plot(df,\"Feature Importance\",\"feature_name\",'Feature Name',\"impurity_feature_importance\",\"Feature Importance\", \"#4378E2\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_score_out_of_sample\"></a>\n",
+    "#### Score Validation Data\n",
+    "\n",
+    "https://madlib.apache.org/docs/latest/group__grp__random__forest.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Score out-of-sample\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_test_scored;\n",
+    "    SELECT madlib.forest_predict('public.rf_model_output',\n",
+    "                                 'public.model_test',\n",
+    "                                 'public.model_test_scored',\n",
+    "                                 'prob');\n",
+    "                \n",
+    "    DROP TABLE IF EXISTS public.model_test_scored_tmp;\n",
+    "    CREATE TABLE public.model_test_scored_tmp AS\n",
+    "    SELECT *\n",
+    "    FROM public.model_test_scored\n",
+    "    JOIN public.model_test\n",
+    "    USING (_id);\n",
+    "    DROP TABLE public.model_test_scored;\n",
+    "    ALTER TABLE public.model_test_scored_tmp RENAME TO model_test_scored;\n",
+    "    SELECT * FROM public.model_test_scored LIMIT 0;\n",
+    "    \n",
+    "\"\"\"\n",
+    "cur.execute(query)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_auc\"></a>\n",
+    "#### Area Under ROC Curve"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "-----\n",
+       " **AUC =** 0.83933"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# auc\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_test_scored_auc;\n",
+    "    SELECT madlib.area_under_roc(\n",
+    "        'public.model_test_scored'\n",
+    "       ,'public.model_test_scored_auc'\n",
+    "       ,'estimated_prob_1'\n",
+    "       ,'approval'\n",
+    "    )\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "query = \"\"\"\n",
+    "    SELECT * \n",
+    "    FROM public.model_test_scored_auc;\n",
+    "\"\"\"\n",
+    "auc = query_gpdb(query)['area_under_roc'][0]\n",
+    "\n",
+    "message = \"\"\"-----\\n **AUC =** {:0.5f}\"\"\".format(auc)\n",
+    "printmd(message)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_roc\"></a>\n",
+    "#### Receiver Operating Characteristic Graph (ROC Curve)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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\n",
+      "text/plain": [
+       "<Figure size 576x576 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "# roc\n",
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.model_test_scored_roc;\n",
+    "    SELECT madlib.binary_classifier( \n",
+    "        'public.model_test_scored'\n",
+    "       ,'public.model_test_scored_roc'\n",
+    "       ,'estimated_prob_1'\n",
+    "       ,'approval'\n",
+    "    );\n",
+    "\"\"\"\n",
+    "cur.execute(query)\n",
+    "\n",
+    "query = \"\"\"\n",
+    "    SELECT threshold\n",
+    "          ,fpr\n",
+    "          ,tpr\n",
+    "    FROM public.model_test_scored_roc\n",
+    "    ORDER BY 1\n",
+    "\"\"\"\n",
+    "df = query_gpdb(query)\n",
+    "\n",
+    "# roc curve\n",
+    "pylab.rcParams['figure.figsize'] = (8, 8)\n",
+    "\n",
+    "plt.figure()\n",
+    "lw = 2\n",
+    "plt.plot(df['fpr'], df['tpr'], color='darkgreen', lw=lw, label='AUC {:0.2f}'.format(auc))\n",
+    "plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')\n",
+    "plt.xlim([0.0, 1.0])\n",
+    "plt.ylim([0.0, 1.05])\n",
+    "plt.xlabel('False Positive Rate')\n",
+    "plt.ylabel('True Positive Rate')\n",
+    "plt.title('Receiver Operating Characteristic')\n",
+    "plt.legend(loc=\"lower right\")\n",
+    "plt.show();"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_confusion_matrix\"></a>\n",
+    "#### Confusion Matrix"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "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>obs</th>\n",
+       "      <th>pred</th>\n",
+       "      <th>num</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>0</td>\n",
+       "      <td>0</td>\n",
+       "      <td>95</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>0</td>\n",
+       "      <td>1</td>\n",
+       "      <td>21</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>1</td>\n",
+       "      <td>0</td>\n",
+       "      <td>23</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>1</td>\n",
+       "      <td>1</td>\n",
+       "      <td>68</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "   obs  pred  num\n",
+       "0  0    0     95 \n",
+       "1  0    1     21 \n",
+       "2  1    0     23 \n",
+       "3  1    1     68 "
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# confusion matrix (inclusive)\n",
+    "cutoff = 0.5\n",
+    "\n",
+    "query = \"\"\"\n",
+    "        SELECT approval AS obs\n",
+    "              ,CASE WHEN estimated_prob_1 >= {} THEN 1 ELSE 0 END AS pred\n",
+    "              ,count(*) AS num\n",
+    "        FROM public.model_test_scored\n",
+    "        GROUP BY 1,2\n",
+    "        ORDER BY 1,2\n",
+    "    \"\"\".format(cutoff)\n",
+    "\n",
+    "query_gpdb(query)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"rf_model_storage\"></a>\n",
+    "#### Model Storage"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "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>gid</th>\n",
+       "      <th>sample_id</th>\n",
+       "      <th>created</th>\n",
+       "      <th>team</th>\n",
+       "      <th>owner</th>\n",
+       "      <th>description</th>\n",
+       "      <th>model_type</th>\n",
+       "      <th>model_params</th>\n",
+       "      <th>current</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]</td>\n",
+       "      <td>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]</td>\n",
+       "      <td>2020-03-24 01:20:24.358152</td>\n",
+       "      <td>Pivotal Data Science Atlanta</td>\n",
+       "      <td>Jarrod Vawdrey</td>\n",
+       "      <td>This is an example credit scoring model</td>\n",
+       "      <td>MADlib random forest</td>\n",
+       "      <td>{num_trees= ,num_random_features= ,importance= ,num_permutations= ,max_tree_depth= ,min_split= ,min_bucket= ,num_splits= }</td>\n",
+       "      <td>True</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "                              gid                        sample_id  \\\n",
+       "0  [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]   \n",
+       "\n",
+       "                     created                          team           owner  \\\n",
+       "0 2020-03-24 01:20:24.358152  Pivotal Data Science Atlanta  Jarrod Vawdrey   \n",
+       "\n",
+       "                               description            model_type  \\\n",
+       "0  This is an example credit scoring model  MADlib random forest   \n",
+       "\n",
+       "                                                                                                                 model_params  \\\n",
+       "0  {num_trees= ,num_random_features= ,importance= ,num_permutations= ,max_tree_depth= ,min_split= ,min_bucket= ,num_splits= }   \n",
+       "\n",
+       "   current  \n",
+       "0  True     "
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "query = \"\"\"\n",
+    "        DROP TABLE IF EXISTS public.my_models;\n",
+    "        CREATE TABLE public.my_models (\n",
+    "            gid integer[]\n",
+    "           ,sample_id integer[]\n",
+    "           ,tree madlib.bytea8[]\n",
+    "           ,created timestamp\n",
+    "           ,team text\n",
+    "           ,owner text\n",
+    "           ,description text\n",
+    "           ,model_type text\n",
+    "           ,model_params text\n",
+    "           ,current boolean\n",
+    "           ,model_id serial\n",
+    "        );\n",
+    "        \n",
+    "        INSERT INTO public.my_models (\n",
+    "            SELECT array_agg(gid) AS gid\n",
+    "                  ,array_agg(sample_id) AS sample_id\n",
+    "                  ,array_agg(tree) AS tree\n",
+    "                  ,now() AS created\n",
+    "                  ,'Pivotal Data Science Atlanta' AS team\n",
+    "                  ,'Jarrod Vawdrey' AS owner\n",
+    "                  ,'This is an example credit scoring model' AS description\n",
+    "                  ,'MADlib random forest' AS model_type\n",
+    "                  ,'{num_trees= ,num_random_features= ,importance= ,num_permutations= ,max_tree_depth= ,min_split= ,min_bucket= ,num_splits= }' AS model_params\n",
+    "                  ,True AS current\n",
+    "            FROM public.rf_model_output   \n",
+    "        );\n",
+    "        \n",
+    "        SELECT gid\n",
+    "              ,sample_id\n",
+    "              ,created\n",
+    "              ,team\n",
+    "              ,owner\n",
+    "              ,description\n",
+    "              ,model_type\n",
+    "              ,model_params\n",
+    "              ,current\n",
+    "        FROM public.my_models\n",
+    "    \"\"\"\n",
+    "\n",
+    "query_gpdb(query)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "----\n",
+    "## Model Scoring"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<a id=\"model_scoring_Example\"></a>\n",
+    "#### Model Scoring Example"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/markdown": [
+       "### Loan Approval Results \n",
+       "------\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "[35.43, 12.0, 14.0, 8.0, 0.0, 6590.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0]\n",
+      "['a2', 'a3', 'a8', 'a11', 'a14', 'a15', 'a1_a', 'a4_l', 'a4_u', 'a5_g', 'a5_gg', 'a6_aa', 'a6_c', 'a6_cc', 'a6_d', 'a6_e', 'a6_ff', 'a6_i', 'a6_j', 'a6_k', 'a6_m', 'a6_q', 'a6_r', 'a6_w', 'a7_bb', 'a7_dd', 'a7_ff', 'a7_h', 'a7_j', 'a7_n', 'a7_o', 'a7_v', 'a9_true', 'a10_true', 'a12_true', 'a13_g', 'a13_p']\n"
+     ]
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Approval Score:** 0.2"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "*Your chances of being approved are 'Low'*"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "**Model Inputs:** \n",
+       "\n",
+       "a2 = 35.43\n",
+       "\n",
+       "a3 = 12.0\n",
+       "\n",
+       "a8 = 14.0\n",
+       "\n",
+       "a11 = 8.0\n",
+       "\n",
+       "a14 = 0.0\n",
+       "\n",
+       "a15 = 6590.0\n",
+       "\n",
+       "a1_a = 1.0\n",
+       "\n",
+       "a4_l = 0.0\n",
+       "\n",
+       "a4_u = 1.0\n",
+       "\n",
+       "a5_g = 1.0\n",
+       "\n",
+       "a5_gg = 0.0\n",
+       "\n",
+       "a6_aa = 0.0\n",
+       "\n",
+       "a6_c = 0.0\n",
+       "\n",
+       "a6_cc = 0.0\n",
+       "\n",
+       "a6_d = 0.0\n",
+       "\n",
+       "a6_e = 0.0\n",
+       "\n",
+       "a6_ff = 0.0\n",
+       "\n",
+       "a6_i = 0.0\n",
+       "\n",
+       "a6_j = 0.0\n",
+       "\n",
+       "a6_k = 0.0\n",
+       "\n",
+       "a6_m = 0.0\n",
+       "\n",
+       "a6_q = 1.0\n",
+       "\n",
+       "a6_r = 0.0\n",
+       "\n",
+       "a6_w = 0.0\n",
+       "\n",
+       "a7_bb = 0.0\n",
+       "\n",
+       "a7_dd = 0.0\n",
+       "\n",
+       "a7_ff = 0.0\n",
+       "\n",
+       "a7_h = 1.0\n",
+       "\n",
+       "a7_j = 0.0\n",
+       "\n",
+       "a7_n = 0.0\n",
+       "\n",
+       "a7_o = 0.0\n",
+       "\n",
+       "a7_v = 0.0\n",
+       "\n",
+       "a9_true = 0.0\n",
+       "\n",
+       "a10_true = 0.0\n",
+       "\n",
+       "a12_true = 0.0\n",
+       "\n",
+       "a13_g = 1.0\n",
+       "\n",
+       "a13_p = 0.0\n",
+       "\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/markdown": [
+       "\n",
+       "------"
+      ],
+      "text/plain": [
+       "<IPython.core.display.Markdown object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "query = \"\"\"\n",
+    "    DROP TABLE IF EXISTS public.credit_application_summary;\n",
+    "    SELECT madlib.summary('public.credit_application_data','public.credit_application_summary');\n",
+    "    SELECT * FROM public.credit_application_summary;\n",
+    "\"\"\"\n",
+    "data_summary = query_gpdb(query)\n",
+    "\n",
+    "featureNames = ['a2', 'a3', 'a8', 'a11', 'a14', 'a15', 'a1_a', 'a4_l', 'a4_u', 'a5_g', 'a5_gg', 'a6_aa', 'a6_c', 'a6_cc', 'a6_d', 'a6_e', 'a6_ff', 'a6_i', 'a6_j', 'a6_k', 'a6_m', 'a6_q', 'a6_r', 'a6_w', 'a7_bb', 'a7_dd', 'a7_ff', 'a7_h', 'a7_j', 'a7_n', 'a7_o', 'a7_v', 'a9_true', 'a10_true', 'a12_true', 'a13_g', 'a13_p']\n",
+    "    \n",
+    "\n",
+    "def add_continuous_slider(n, default):\n",
+    "    tstr = \"target_column == '{}'\".format(n)\n",
+    "    minValue = math.floor(data_summary.query(tstr)['min'])\n",
+    "    minValueOrZero = min(0,float(minValue))\n",
+    "    maxValue = math.ceil(data_summary.query(tstr)['max'])\n",
+    "    return widgets.FloatSlider(\n",
+    "        value=default,\n",
+    "        min=minValueOrZero,\n",
+    "        max=maxValue,\n",
+    "        step=0.1,\n",
+    "        description=\"\",\n",
+    "        disabled=False,\n",
+    "        continuous_update=False,\n",
+    "        orientation='horizontal',\n",
+    "        readout=True,\n",
+    "        readout_format='.1f',\n",
+    "    )\n",
+    "\n",
+    "def add_drop_down(n, default):\n",
+    "    \n",
+    "    query = \"\"\"\n",
+    "        SELECT {} AS col\n",
+    "        FROM public.credit_application_data\n",
+    "        GROUP BY 1\n",
+    "        ORDER BY 1\n",
+    "    \"\"\".format(n)\n",
+    "    values = query_gpdb(query)['col']\n",
+    "\n",
+    "    return widgets.Dropdown(\n",
+    "        options=values,\n",
+    "        value=default,\n",
+    "        description='',\n",
+    "        disabled=False,\n",
+    "    )\n",
+    "\n",
+    "def add_widgets():\n",
+    "    \n",
+    "    message = \"### Loan Application \\n ------\"\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    myWidgets = []\n",
+    "\n",
+    "    myWidgets.append({'a1':add_drop_down('a1','a')})\n",
+    "    myWidgets.append({'a2':add_continuous_slider('a2',35.43)})\n",
+    "    myWidgets.append({'a3':add_continuous_slider('a3',12.0)})\n",
+    "    myWidgets.append({'a4':add_drop_down('a4','u')})\n",
+    "    myWidgets.append({'a5':add_drop_down('a5','g')})\n",
+    "    myWidgets.append({'a6':add_drop_down('a6','q')})\n",
+    "    myWidgets.append({'a7':add_drop_down('a7','h')})\n",
+    "    myWidgets.append({'a8':add_continuous_slider('a8',14.0)})\n",
+    "    myWidgets.append({'a9':add_drop_down('a9',True)})\n",
+    "    myWidgets.append({'a10':add_drop_down('a10',True)})\n",
+    "    myWidgets.append({'a11':add_continuous_slider('a11',8.0)})\n",
+    "    myWidgets.append({'a12':add_drop_down('a12',False)})\n",
+    "    myWidgets.append({'a13':add_drop_down('a13','g')})\n",
+    "    myWidgets.append({'a14':add_continuous_slider('a14',0.0)})\n",
+    "    myWidgets.append({'a15':add_continuous_slider('a15',6590.0)})\n",
+    "    \n",
+    "    for widget in myWidgets:\n",
+    "        n = widget.keys()[0]\n",
+    "        printmd(\"**{}:**\".format(n))\n",
+    "        ipd.display(widget[n])\n",
+    "\n",
+    "    message = \"------\"\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    return myWidgets\n",
+    "\n",
+    "    \n",
+    "def create_model_input(myWidgets):\n",
+    "\n",
+    "    checks = {}\n",
+    "    conts = []\n",
+    "    f = []\n",
+    "    \n",
+    "    for i in range(0,len(featureNames)):\n",
+    "        f.append(0.0)\n",
+    "    \n",
+    "    for feature in featureNames:\n",
+    "        if \"_\" in feature:\n",
+    "            key = feature[0:feature.find(\"_\")]\n",
+    "            val = feature[feature.find(\"_\")+1:len(feature)]\n",
+    "            if key in checks:\n",
+    "                checks[key].append(val)\n",
+    "            else:\n",
+    "                checks[key] = [val]\n",
+    "        else:\n",
+    "            conts.append(feature)\n",
+    "            \n",
+    "    for widget in myWidgets:\n",
+    "        n = widget.keys()[0]\n",
+    "        val = widget[n].value\n",
+    "\n",
+    "        # lower case boolean strings\n",
+    "        if isinstance(val,np.bool_):\n",
+    "            val = str(val).lower()\n",
+    "\n",
+    "        if n in checks:\n",
+    "            checkFlag = False\n",
+    "            for c in checks[n]:\n",
+    "                if c == val:\n",
+    "                    checkFlag = True\n",
+    "                    pos = featureNames.index(\"{}_{}\".format(n,val))\n",
+    "                    f[pos] = 1.0   \n",
+    "                    \n",
+    "            # make all associated values 0\n",
+    "            if checkFlag == False:\n",
+    "                for feature in featureNames:\n",
+    "                    if \"_\" in feature and feature[0:feature.find(\"_\")+1] == n:\n",
+    "                        pos = featureNames.index(feature)\n",
+    "                        f[pos] = 0.0   \n",
+    "        elif n in conts:\n",
+    "            pos = featureNames.index(n)\n",
+    "            f[pos] = val\n",
+    "\n",
+    "    return f\n",
+    "        \n",
+    "def rf_score(modelInputs):\n",
+    "    \n",
+    "    print(modelInputs)\n",
+    "    print(featureNames)\n",
+    "    \n",
+    "    ddlString = \"_id integer\"\n",
+    "    for f in featureNames:\n",
+    "        ddlString = ddlString + \",{} float\".format(f)\n",
+    "\n",
+    "    query = \"\"\"\n",
+    "        DROP TABLE IF EXISTS public.prod_example_data, public.prod_example_score;\n",
+    "        CREATE TABLE public.prod_example_data ({});\n",
+    "        INSERT INTO public.prod_example_data VALUES ({});\n",
+    "        DROP TABLE IF EXISTS public.model_test_scored_tmp;\n",
+    "        SELECT madlib.forest_predict('public.rf_model_output',\n",
+    "                                     'public.prod_example_data',\n",
+    "                                     'public.prod_example_score',\n",
+    "                                     'prob');\n",
+    "        SELECT * FROM public.prod_example_score;\n",
+    "    \"\"\".format(ddlString, \",\".join(str(x) for x in modelInputs))\n",
+    "\n",
+    "    score = float(query_gpdb(query)['estimated_prob_1'])\n",
+    "    \n",
+    "    message = \"High\"\n",
+    "    if score <= 0.5:\n",
+    "        message = \"Low\"\n",
+    "    elif score <= 0.75:\n",
+    "        message = \"Average\"\n",
+    "    \n",
+    "    return (score, message)\n",
+    "    \n",
+    "def on_appbutton_click(b):\n",
+    "    \n",
+    "    ipd.clear_output()\n",
+    "    \n",
+    "    message = \"### Loan Approval Results \\n------\\n\"\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    modelInput = create_model_input(myWidgets)\n",
+    "    \n",
+    "    s, m = rf_score(modelInput)\n",
+    "    \n",
+    "    message = \"**Approval Score:** {}\".format(s)\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    message = \"*Your chances of being approved are '{}'*\".format(m)\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    cleanModelInputs = \"\"\n",
+    "    for i in range(0,len(featureNames)):\n",
+    "        cleanModelInputs = cleanModelInputs + \"{} = {}\\n\\n\".format(featureNames[i],modelInput[i])\n",
+    "\n",
+    "    message = \"**Model Inputs:** \\n\\n{}\".format(cleanModelInputs)\n",
+    "    printmd(message)\n",
+    "    \n",
+    "    printmd(\"\\n------\")\n",
+    "    \n",
+    "myWidgets = add_widgets()\n",
+    "appbutton = widgets.Button(description=\"Calculate Approval\")\n",
+    "ipd.display(appbutton)\n",
+    "appbutton.on_click(on_appbutton_click)\n"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 2",
+   "language": "python",
+   "name": "python2"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 2
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython2",
+   "version": "2.7.16"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}