Skip to content

Instantly share code, notes, and snippets.

@aiqc
Last active May 8, 2022 15:34
Show Gist options
  • Save aiqc/d8d4b5e74a8811b3d8657c65cb3c6e7f to your computer and use it in GitHub Desktop.
Save aiqc/d8d4b5e74a8811b3d8657c65cb3c6e7f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "db4f19d5-75f3-4e12-8a95-ae81a2f5bb4c",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "932b92cf-5501-45c4-a2f9-bc087264e812",
"metadata": {},
"outputs": [],
"source": [
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "91d3616b-b48a-4479-9554-9b672611e347",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/Users/layne/Desktop/fraud_detect\n"
]
}
],
"source": [
"cd '/Users/layne/Desktop/fraud_detect'"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9b40a5de-b41f-4bca-a89a-9f4c0d6a8c4b",
"metadata": {},
"outputs": [],
"source": [
"path_test = '/Users/layne/Desktop/fraud_detect/fraudTest.csv'\n",
"path_train = '/Users/layne/Desktop/fraud_detect/fraudTrain.csv'"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9308fb73-99c6-4bcf-8022-7b5ee3c79fb5",
"metadata": {},
"outputs": [],
"source": [
"df_test = pd.read_csv(path_test)\n",
"df_train = pd.read_csv(path_train)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "eaa09f4b-9782-467c-8b9f-931e35a76b76",
"metadata": {},
"outputs": [],
"source": [
"cols_train = df_train.columns.tolist()\n",
"cols_test = df_test.columns.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "0ed4f99f-5129-457b-b01a-b74e50aa0bbe",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cols_train == cols_test"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "414f79fe-85b2-4b69-83f5-aba0f17cfae8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Unnamed: 0 True\n",
"trans_date_trans_time True\n",
"cc_num True\n",
"merchant True\n",
"category True\n",
"amt True\n",
"first True\n",
"last True\n",
"gender True\n",
"street True\n",
"city True\n",
"state True\n",
"zip True\n",
"lat True\n",
"long True\n",
"city_pop True\n",
"job True\n",
"dob True\n",
"trans_num True\n",
"unix_time True\n",
"merch_lat True\n",
"merch_long True\n",
"is_fraud True\n",
"dtype: bool"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_train.dtypes == df_train.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "24148ff5-c213-4661-a4fa-cd2a1ceac074",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n"
]
}
],
"source": [
"for col in cols_train:\n",
" print(df_train[col].isnull().values.any())"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "8265025f-0bfd-4c57-8137-86f92912f84d",
"metadata": {
"tags": []
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n",
"False\n"
]
}
],
"source": [
"for col in cols_test:\n",
" print(df_test[col].isnull().values.any())"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "f82c9713-c27f-4771-b340-4fc00b26824c",
"metadata": {},
"outputs": [],
"source": [
"df_all = pd.concat([df_train, df_test], ignore_index=True)"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "da79baa2-0c4f-40d6-952b-a2f1e1a9d610",
"metadata": {},
"outputs": [],
"source": [
"del df_train\n",
"del df_test"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "bb0d6daf-8312-45ba-b71b-965542f4a853",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['Unnamed: 0', 'trans_date_trans_time', 'cc_num', 'merchant', 'category',\n",
" 'amt', 'first', 'last', 'gender', 'street', 'city', 'state', 'zip',\n",
" 'lat', 'long', 'city_pop', 'job', 'dob', 'trans_num', 'unix_time',\n",
" 'merch_lat', 'merch_long', 'is_fraud'],\n",
" dtype='object')"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_all.columns"
]
},
{
"cell_type": "markdown",
"id": "e93666d5-bf7b-4f8d-a605-c888ab1061d6",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "4b46ba7c-1cf2-4a5b-b674-e9fe890427a3",
"metadata": {},
"source": [
"# feature engineering"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "a89aaa29-bb56-4862-8777-f927a51bb02c",
"metadata": {},
"outputs": [],
"source": [
"drop_cols = ['Unnamed: 0', 'cc_num', 'first', 'last', 'street', 'trans_num', 'unix_time']"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "31540f7c-0e31-4ae9-b487-06415eeecc1c",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.drop(columns=drop_cols)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "7963700f-a233-4d52-b8bf-b8e779d52726",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['trans_date_trans_time', 'merchant', 'category', 'amt', 'gender',\n",
" 'city', 'state', 'zip', 'lat', 'long', 'city_pop', 'job', 'dob',\n",
" 'merch_lat', 'merch_long', 'is_fraud'],\n",
" dtype='object')"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_all.columns"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "d1cc981b-fc8b-4a02-b774-1586f2948a20",
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"df_all['dob'] = 2020 - df_all['dob'].str[:4].astype(np.int64)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "7b3d1e8d-880c-4971-b753-472b297b3e97",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.rename(columns={\"dob\":\"age\", \"amt\":\"amount\"})"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "dc10c787-0fb5-4a5f-9774-44ff93cc242c",
"metadata": {},
"outputs": [],
"source": [
"df_all['diff_lat'] = df_all['lat'] - df_all['merch_lat']"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "ba0c2e8c-4d99-4e4c-8129-98ea12a59165",
"metadata": {},
"outputs": [],
"source": [
"df_all['diff_long'] = df_all['long'] - df_all['merch_long']"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "c4b09d71-72fc-4f2a-ab70-0a0ea9f90fdc",
"metadata": {},
"outputs": [],
"source": [
"drop_cols = ['long', 'merch_long', 'lat', 'merch_lat']"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "3d32a691-a1ed-4f6c-b529-9bcc4f64389f",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.drop(columns=drop_cols)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "66e89b00-f864-456b-9224-2fa9fc942986",
"metadata": {},
"outputs": [],
"source": [
"drop_cols = ['city', 'state']"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "09a882ca-ef81-4fba-ab1b-eadf71d718cc",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.drop(columns=drop_cols)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "f87db741-3577-4236-ab9b-c2e6f47db12f",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.rename(columns={\"amt\":\"amount\"})"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "6edd9c34-6eeb-4261-884b-24eff4984280",
"metadata": {},
"outputs": [],
"source": [
"df_all['month'] = pd.DatetimeIndex(df_all['trans_date_trans_time']).month"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "f3323e2c-7ab8-40bd-8dff-b646fac5332d",
"metadata": {},
"outputs": [],
"source": [
"df_all['day'] = pd.DatetimeIndex(df_all['trans_date_trans_time']).day"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "818a3c8f-f354-44ab-8551-55df79bef63a",
"metadata": {},
"outputs": [],
"source": [
"df_all['hour'] = pd.DatetimeIndex(df_all['trans_date_trans_time']).hour"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "120a1e4f-18b5-4216-a84f-51ca718dd57b",
"metadata": {},
"outputs": [],
"source": [
"df_all = df_all.drop(columns=['trans_date_trans_time'])"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "7f11a00b-be5b-497d-8063-3c3e8b044eda",
"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>merchant</th>\n",
" <th>category</th>\n",
" <th>amount</th>\n",
" <th>gender</th>\n",
" <th>zip</th>\n",
" <th>city_pop</th>\n",
" <th>job</th>\n",
" <th>age</th>\n",
" <th>is_fraud</th>\n",
" <th>diff_lat</th>\n",
" <th>diff_long</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>hour</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>fraud_Rippin, Kub and Mann</td>\n",
" <td>misc_net</td>\n",
" <td>4.97</td>\n",
" <td>F</td>\n",
" <td>28654</td>\n",
" <td>3495</td>\n",
" <td>Psychologist, counselling</td>\n",
" <td>32</td>\n",
" <td>0</td>\n",
" <td>0.067507</td>\n",
" <td>0.870215</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>fraud_Heller, Gutmann and Zieme</td>\n",
" <td>grocery_pos</td>\n",
" <td>107.23</td>\n",
" <td>F</td>\n",
" <td>99160</td>\n",
" <td>149</td>\n",
" <td>Special educational needs teacher</td>\n",
" <td>42</td>\n",
" <td>0</td>\n",
" <td>-0.271247</td>\n",
" <td>-0.024038</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>fraud_Lind-Buckridge</td>\n",
" <td>entertainment</td>\n",
" <td>220.11</td>\n",
" <td>M</td>\n",
" <td>83252</td>\n",
" <td>4154</td>\n",
" <td>Nature conservation officer</td>\n",
" <td>58</td>\n",
" <td>0</td>\n",
" <td>-0.969904</td>\n",
" <td>-0.107519</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>fraud_Kutch, Hermiston and Farrell</td>\n",
" <td>gas_transport</td>\n",
" <td>45.00</td>\n",
" <td>M</td>\n",
" <td>59632</td>\n",
" <td>1939</td>\n",
" <td>Patent attorney</td>\n",
" <td>53</td>\n",
" <td>0</td>\n",
" <td>-0.803731</td>\n",
" <td>0.447271</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>fraud_Keeling-Crist</td>\n",
" <td>misc_pos</td>\n",
" <td>41.96</td>\n",
" <td>M</td>\n",
" <td>24433</td>\n",
" <td>99</td>\n",
" <td>Dance movement psychotherapist</td>\n",
" <td>34</td>\n",
" <td>0</td>\n",
" <td>-0.254299</td>\n",
" <td>-0.830441</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" merchant category amount gender zip \\\n",
"0 fraud_Rippin, Kub and Mann misc_net 4.97 F 28654 \n",
"1 fraud_Heller, Gutmann and Zieme grocery_pos 107.23 F 99160 \n",
"2 fraud_Lind-Buckridge entertainment 220.11 M 83252 \n",
"3 fraud_Kutch, Hermiston and Farrell gas_transport 45.00 M 59632 \n",
"4 fraud_Keeling-Crist misc_pos 41.96 M 24433 \n",
"\n",
" city_pop job age is_fraud diff_lat \\\n",
"0 3495 Psychologist, counselling 32 0 0.067507 \n",
"1 149 Special educational needs teacher 42 0 -0.271247 \n",
"2 4154 Nature conservation officer 58 0 -0.969904 \n",
"3 1939 Patent attorney 53 0 -0.803731 \n",
"4 99 Dance movement psychotherapist 34 0 -0.254299 \n",
"\n",
" diff_long month day hour \n",
"0 0.870215 1 1 0 \n",
"1 -0.024038 1 1 0 \n",
"2 -0.107519 1 1 0 \n",
"3 0.447271 1 1 0 \n",
"4 -0.830441 1 1 0 "
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_all.head()"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "344afdf5-cad7-4edd-b709-520a95a5c71c",
"metadata": {},
"outputs": [],
"source": [
"df_all.to_parquet('fraud_unbalanced.parquet')"
]
},
{
"cell_type": "markdown",
"id": "18c30cac-fb24-45df-9816-ef7140fa23af",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "329a3996-f359-4fa6-867d-60bc04e8dbcc",
"metadata": {},
"source": [
"# Balance"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "347aa761-2c2b-4230-9f5d-f8ab794d5e74",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"is_fraud\n",
"0 1842743\n",
"1 9651\n",
"dtype: int64"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_all[['is_fraud']].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "1614c4b1-5f08-45b4-9558-7b0c33b01dc6",
"metadata": {},
"outputs": [],
"source": [
"dataset_real = df_all[df_all[\"is_fraud\"] == 0]"
]
},
{
"cell_type": "code",
"execution_count": 43,
"id": "17ac1802-07f9-40a2-b46b-09f9df6e8a9d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1842743, 14)"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_real.shape"
]
},
{
"cell_type": "code",
"execution_count": 44,
"id": "35798ce1-5060-42fc-aecc-ec5cc8378e85",
"metadata": {},
"outputs": [],
"source": [
"dataset_fraud = df_all[df_all[\"is_fraud\"] == 1]"
]
},
{
"cell_type": "code",
"execution_count": 45,
"id": "015283d7-0ce7-4c34-b253-0306e3f494eb",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(9651, 14)"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_fraud.shape"
]
},
{
"cell_type": "markdown",
"id": "15a1ec27-92b9-410c-a5cc-f6122fc0dcde",
"metadata": {},
"source": [
"The majority class can only be `1.3` times bigger than the minority class. Here 1.3 is an arbitrary number."
]
},
{
"cell_type": "code",
"execution_count": 46,
"id": "d9342a10-135b-4d40-9be1-93a1a46ed17c",
"metadata": {},
"outputs": [],
"source": [
"fraud_multiplied = round(int(dataset_fraud.shape[0]*1.3))"
]
},
{
"cell_type": "code",
"execution_count": 47,
"id": "472a14b2-333c-47df-8b72-233697beaea8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12546"
]
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fraud_multiplied"
]
},
{
"cell_type": "code",
"execution_count": 48,
"id": "7ade74bf-ab99-4926-8a2c-86abdac93edb",
"metadata": {},
"outputs": [],
"source": [
"dataset_real = dataset_real.sample(fraud_multiplied)"
]
},
{
"cell_type": "code",
"execution_count": 49,
"id": "9e97cd63-d17a-43ea-b3aa-363c0f4e8c37",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(12546, 14)"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_real.shape"
]
},
{
"cell_type": "code",
"execution_count": 50,
"id": "9c892f7c-66a7-4243-8946-d1033a718724",
"metadata": {},
"outputs": [],
"source": [
"dataset_balanced = pd.concat([dataset_real, dataset_fraud])"
]
},
{
"cell_type": "code",
"execution_count": 51,
"id": "2d46d609-a71d-41f3-8d84-c903622d553e",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(22197, 14)"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_balanced.shape"
]
},
{
"cell_type": "code",
"execution_count": 57,
"id": "e7206141-d48a-4f88-9ca2-1f8433e14d6b",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['merchant', 'category', 'amount', 'gender', 'zip', 'city_pop', 'job',\n",
" 'age', 'is_fraud', 'diff_lat', 'diff_long', 'month', 'day', 'hour'],\n",
" dtype='object')"
]
},
"execution_count": 57,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_balanced.columns"
]
},
{
"cell_type": "code",
"execution_count": 79,
"id": "73dc7155-6f5e-4029-94bf-6ee79654cfdf",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"merchant object\n",
"category object\n",
"amount float64\n",
"gender object\n",
"zip int64\n",
"city_pop int64\n",
"job object\n",
"age int64\n",
"is_fraud int64\n",
"diff_lat float64\n",
"diff_long float64\n",
"month int64\n",
"day int64\n",
"hour int64\n",
"dtype: object"
]
},
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_balanced.dtypes"
]
},
{
"cell_type": "code",
"execution_count": 81,
"id": "ca25bcb7-f802-4704-b002-4d381d3410b3",
"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>merchant</th>\n",
" <th>category</th>\n",
" <th>amount</th>\n",
" <th>gender</th>\n",
" <th>zip</th>\n",
" <th>city_pop</th>\n",
" <th>job</th>\n",
" <th>age</th>\n",
" <th>is_fraud</th>\n",
" <th>diff_lat</th>\n",
" <th>diff_long</th>\n",
" <th>month</th>\n",
" <th>day</th>\n",
" <th>hour</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>153551</th>\n",
" <td>fraud_Yost-Rogahn</td>\n",
" <td>personal_care</td>\n",
" <td>169.88</td>\n",
" <td>M</td>\n",
" <td>49440</td>\n",
" <td>128715</td>\n",
" <td>Historic buildings inspector/conservation officer</td>\n",
" <td>25</td>\n",
" <td>0</td>\n",
" <td>0.970016</td>\n",
" <td>0.068795</td>\n",
" <td>3</td>\n",
" <td>23</td>\n",
" <td>17</td>\n",
" </tr>\n",
" <tr>\n",
" <th>878897</th>\n",
" <td>fraud_Heathcote, Yost and Kertzmann</td>\n",
" <td>shopping_net</td>\n",
" <td>5.75</td>\n",
" <td>F</td>\n",
" <td>58531</td>\n",
" <td>307</td>\n",
" <td>Make</td>\n",
" <td>90</td>\n",
" <td>0</td>\n",
" <td>-0.849992</td>\n",
" <td>-0.209885</td>\n",
" <td>12</td>\n",
" <td>22</td>\n",
" <td>2</td>\n",
" </tr>\n",
" <tr>\n",
" <th>125739</th>\n",
" <td>fraud_Bode-Rempel</td>\n",
" <td>kids_pets</td>\n",
" <td>5.85</td>\n",
" <td>M</td>\n",
" <td>25213</td>\n",
" <td>5512</td>\n",
" <td>Exhibition designer</td>\n",
" <td>40</td>\n",
" <td>0</td>\n",
" <td>0.993371</td>\n",
" <td>-0.875224</td>\n",
" <td>3</td>\n",
" <td>10</td>\n",
" <td>22</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" merchant category amount gender \\\n",
"153551 fraud_Yost-Rogahn personal_care 169.88 M \n",
"878897 fraud_Heathcote, Yost and Kertzmann shopping_net 5.75 F \n",
"125739 fraud_Bode-Rempel kids_pets 5.85 M \n",
"\n",
" zip city_pop job \\\n",
"153551 49440 128715 Historic buildings inspector/conservation officer \n",
"878897 58531 307 Make \n",
"125739 25213 5512 Exhibition designer \n",
"\n",
" age is_fraud diff_lat diff_long month day hour \n",
"153551 25 0 0.970016 0.068795 3 23 17 \n",
"878897 90 0 -0.849992 -0.209885 12 22 2 \n",
"125739 40 0 0.993371 -0.875224 3 10 22 "
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset_balanced.head(3)"
]
},
{
"cell_type": "markdown",
"id": "e36fdefb-2234-49b1-ba89-17a2fcaa9cae",
"metadata": {},
"source": [
"---"
]
},
{
"cell_type": "markdown",
"id": "5786fdf3-23b4-4555-8c95-527bf863ab5b",
"metadata": {},
"source": [
"# aiqc"
]
},
{
"cell_type": "code",
"execution_count": 82,
"id": "82b0e3b7-ec58-4051-93f6-a0f961da091a",
"metadata": {},
"outputs": [],
"source": [
"cols_scale = ['day','city_pop', 'age', 'diff_lat', 'diff_long', 'amount']\n",
"cols_ohe = ['merchant', 'category', 'gender', 'month', 'hour', 'job', 'zip']"
]
},
{
"cell_type": "code",
"execution_count": 83,
"id": "56efcddf-9499-495d-a1ad-f5fee42fdc29",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.preprocessing import OneHotEncoder, StandardScaler"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "700cf925-7def-4904-a68b-17c6635e3895",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/Users/layne/Desktop/AIQC\n"
]
}
],
"source": [
"cd '/Users/Layne/Desktop/AIQC'"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "4421364f-5a33-426b-b502-dca920e729d7",
"metadata": {},
"outputs": [],
"source": [
"import aiqc"
]
},
{
"cell_type": "code",
"execution_count": 94,
"id": "20a0048a-6f68-49c7-a8b3-c52a2ab83d61",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"=> Info - System overriding user input to set `sklearn_preprocess.sparse=False`.\n",
"\tThis would have generated 'scipy.sparse.csr.csr_matrix', causing Keras training to fail.\n",
"\n",
"\n",
"___/ featurecoder_index: 0 \\_________\n",
"\n",
"=> The column(s) below matched your filter(s) featurecoder filters.\n",
"\n",
"['merchant', 'category', 'gender', 'month', 'hour', 'job', 'zip']\n",
"\n",
"=> The remaining column(s) and dtype(s) are available for downstream featurecoder(s):\n",
"{'age': 'int64',\n",
" 'amount': 'float64',\n",
" 'city_pop': 'int64',\n",
" 'day': 'int64',\n",
" 'diff_lat': 'float64',\n",
" 'diff_long': 'float64'}\n",
"\n",
"\n",
"=> Info - System overriding user input to set `sklearn_preprocess.copy=False`.\n",
"\tThis saves memory when concatenating the output of many encoders.\n",
"\n",
"\n",
"___/ featurecoder_index: 1 \\_________\n",
"\n",
"=> The column(s) below matched your filter(s) featurecoder filters.\n",
"\n",
"['day', 'city_pop', 'age', 'diff_lat', 'diff_long', 'amount']\n",
"\n",
"=> Done. All feature column(s) have featurecoder(s) associated with them.\n",
"No more FeatureCoders can be added to this Encoderset.\n",
"\n"
]
}
],
"source": [
"splitset = aiqc.Pipeline.Tabular.make(\n",
" # --- Data source ---\n",
" df_or_path = dataset_balanced\n",
"\n",
" # --- Label preprocessing ---\n",
" , label_column = 'is_fraud'\n",
" , label_encoder = None\n",
"\n",
" # --- Feature preprocessing ---\n",
" , feature_cols_excluded = ['is_fraud', 'first', 'last']\n",
" , feature_encoders = [\n",
" dict(\n",
" sklearn_preprocess = OneHotEncoder()\n",
" , columns = cols_ohe\n",
" ),\n",
" dict(\n",
" sklearn_preprocess = StandardScaler()\n",
" , columns = cols_scale\n",
" ),\n",
" ]\n",
"\n",
" # --- Stratification ---\n",
" , size_test = 0.09\n",
" , size_validation = 0.17\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 101,
"id": "be617528-5be1-4870-89cf-526a1e306167",
"metadata": {},
"outputs": [],
"source": [
"import tensorflow as tf\n",
"from tensorflow.keras import layers as l"
]
},
{
"cell_type": "code",
"execution_count": 102,
"id": "4eedb584-3dce-4892-a88b-1ab7937f1524",
"metadata": {},
"outputs": [],
"source": [
"def fn_build(features_shape, label_shape, **hp):\n",
" m = tf.keras.models.Sequential()\n",
" m.add(l.Input(shape=features_shape))\n",
" m.add(l.Dense(hp['neuron_count'], activation='relu', kernel_initializer='he_uniform'))\n",
" m.add(l.Dropout(hp['dropout']))\n",
" m.add(l.Dense(hp['neuron_count'], activation='relu', kernel_initializer='he_uniform'))\n",
" m.add(l.Dropout(hp['dropout']))\n",
" m.add(l.Dense(units=label_shape[0], activation='sigmoid', kernel_initializer='glorot_uniform'))\n",
" return m"
]
},
{
"cell_type": "code",
"execution_count": 103,
"id": "aaee1cbf-8e8b-447e-ad4e-d445cbb19b1f",
"metadata": {},
"outputs": [],
"source": [
"def fn_train(model, loser, optimizer, samples_train, samples_evaluate, **hp):\n",
" model.compile(\n",
" loss=loser\n",
" , optimizer=optimizer\n",
" , metrics=['accuracy']\n",
" )\n",
" model.fit(\n",
" samples_train['features'], samples_train['labels']\n",
" , validation_data = (samples_evaluate['features'], samples_evaluate['labels'])\n",
" , verbose = 0\n",
" , batch_size = hp['batch_size']\n",
" , epochs = hp['epochs']\n",
" , callbacks = [tf.keras.callbacks.History()]\n",
" )\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 104,
"id": "d8717d7a-b6c1-466c-8d09-d93d42807108",
"metadata": {},
"outputs": [],
"source": [
"hyperparameters = dict(\n",
" neuron_count=[60], \n",
" epochs = [10],\n",
" batch_size = [3],\n",
" dropout = [0.3, 0.4]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 108,
"id": "9f40b94f-ff18-4412-be8d-6c50713822ed",
"metadata": {},
"outputs": [],
"source": [
"queue = aiqc.Experiment.make(\n",
" # --- Analysis type ---\n",
" library = \"keras\"\n",
" , analysis_type = \"classification_binary\"\n",
"\n",
" # --- Model functions ---\n",
" , fn_build = fn_build\n",
" , fn_train = fn_train\n",
" , fn_lose = None #auto\n",
" , fn_optimize = None #auto\n",
" , fn_predict = None #auto\n",
"\n",
" # --- Training options ---\n",
" , repeat_count = 2\n",
" , permute_count = 3\n",
" , hyperparameters = hyperparameters\n",
"\n",
" # --- Data source ---\n",
" , splitset_id = splitset.id\n",
"\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "b8dc0b6c-77b4-428d-9ffa-398c73594de1",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/layne/.pyenv/versions/3.7.12/envs/aiqc_dev/lib/python3.7/site-packages/jupyter_dash/jupyter_app.py:139: UserWarning:\n",
"\n",
"The 'environ['werkzeug.server.shutdown']' function is deprecated and will be removed in Werkzeug 2.1.\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"📊 AIQC Tracker http://127.0.0.1:9991 📊\n"
]
}
],
"source": [
"from aiqc.lab import Tracker\n",
"app = Tracker()\n",
"app.start()"
]
},
{
"cell_type": "code",
"execution_count": 110,
"id": "a99a4f26-128b-46b9-ae33-1a15ba621bdb",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"🔮 Training Models 🔮: 25%|█████████ | 1/4 [1:16:25<3:49:16, 4585.56s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Queue was gracefully interrupted.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\n"
]
}
],
"source": [
"queue.run_jobs()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "5e977b94-bad4-47b6-95db-ccec1998b3b7",
"metadata": {},
"outputs": [],
"source": [
"predictor = aiqc.Predictor.get_by_id(33)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "a06cec6d-786c-4fed-aefd-7fafc1d14e26",
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"name": "amount",
"type": "box",
"x": [
3.308984925970435,
3.3493398930877447,
3.2744919564574957
]
},
{
"name": "category=shopping_net",
"type": "box",
"x": [
0.4514044728130102,
0.4568766262382269,
0.4489722456783056
]
},
{
"name": "category=shopping_pos",
"type": "box",
"x": [
0.31098209880292416,
0.2717477288097143,
0.3281372394412756
]
},
{
"name": "category=misc_net",
"type": "box",
"x": [
0.20811662636697292,
0.19702242873609066,
0.2008549328893423
]
},
{
"name": "category=grocery_pos",
"type": "box",
"x": [
0.16108024679124355,
0.18406141363084316,
0.17419015429913998
]
},
{
"name": "gender=F",
"type": "box",
"x": [
0.13460165821015835,
0.1347148772329092,
0.13639475964009762
]
},
{
"name": "gender=M",
"type": "box",
"x": [
0.06523300521075726,
0.07392674498260021,
0.07772778533399105
]
},
{
"name": "category=entertainment",
"type": "box",
"x": [
0.06499864719808102,
0.06474841199815273,
0.06395175121724606
]
},
{
"name": "hour=20",
"type": "box",
"x": [
0.05624440871179104,
0.05221535079181194,
0.05536658130586147
]
}
],
"layout": {
"autosize": true,
"margin": {
"l": 150
},
"showlegend": false,
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#2a3f5f"
},
"error_y": {
"color": "#2a3f5f"
},
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "#E5ECF6",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"baxis": {
"endlinecolor": "#2a3f5f",
"gridcolor": "white",
"linecolor": "white",
"minorgridcolor": "white",
"startlinecolor": "#2a3f5f"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#EBF0F8"
},
"line": {
"color": "white"
}
},
"header": {
"fill": {
"color": "#C8D4E3"
},
"line": {
"color": "white"
}
},
"type": "table"
}
]
},
"layout": {
"font": {
"color": "#FAFAFA",
"family": "Avenir",
"size": 13
},
"hoverlabel": {
"bgcolor": "#122536",
"font": {
"family": "Avenir",
"size": 15
}
},
"hovermode": "closest",
"paper_bgcolor": "#182d41",
"plot_bgcolor": "#182d41",
"title": {
"font": {
"family": "Avenir"
},
"pad": {
"b": 50,
"t": 20
},
"x": 0.05,
"y": 0.95
}
}
},
"title": {
"text": "Feature Importance <sub>(feature.id:11, permute_count:3, top_n:9)</sub><br><br>"
},
"xaxis": {
"autorange": true,
"gridcolor": "#2c3c4a",
"nticks": 15,
"range": [
-0.13095823489129543,
3.532513478770852
],
"tickangle": 45,
"title": {
"text": "Importance<br><sup>[permuted column loss - training loss]</sup>"
},
"type": "linear"
},
"yaxis": {
"autorange": true,
"range": [
-0.5,
8.5
],
"type": "category"
}
}
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuMAAAINCAYAAACUM3FWAAAgAElEQVR4XuydB3gVVbeGP1SqdFREkCYiiIAUQZSiSBEEKdKU3pHeO0iTXqT33ntv0puIoIiCgCBNEFBAICId7l7bO/lDchLWYXJyAvnmPvfxT87eU975JryzZ80+0V7M/P59cCEBEiABEiABEiABEiABEohwAtEo4xHOnBskARIgARIgARIgARIgAUuAMs4gkAAJkAAJkAAJkAAJkICfCFDG/QSemyUBEiABEiABEiABEiAByjgzQAIkQAIkQAIkQAIkQAJ+IkAZ9xN4bpYESIAESIAESIAESIAEKOPMAAmQAAmQAAmQAAmQAAn4iQBl3E/guVkSIAESIAESIAESIAESoIwzAyRAAiRAAiRAAiRAAiTgJwKUcT+B52ZJgARIgARIgARIgARIgDLODJAACZAACZAACZAACZCAnwhQxv0EnpslARIgARIgARIgARIgAco4M0ACJEACJEACJEACJEACfiJAGfcTeG6WBEiABEiABEiABEiABCjjzAAJkAAJkAAJkAAJkAAJ+IkAZdxP4LlZEiABEiABEiABEiABEqCMMwMkQAIkQAIkQAIkQAIk4CcClHE/gedmSYAESIAESIAESIAESIAyzgyQAAmQAAmQAAmQAAmQgJ8IUMb9BJ6bJQESIAESIAESIAESIAHKODNAAiRAAiRAAiRAAiRAAn4iQBn3E3hulgRIgARIgARIgARIgAQo48wACZAACZAACZAACZAACfiJAGXcT+C5WRIgARIgARIgARIgARKgjDMDJEACJEACJEACJEACJOAnApRxP4HnZkmABEiABEiABEiABEiAMs4MkAAJkAAJkAAJkAAJkICfCFDG/QSemyUBEiABEiABEiABEiAByjgzQAIkQAIkQAIkQAIkQAJ+IkAZ9xN4bpYESIAESIAESIAESIAEKOPMAAmQAAmQAAmQAAmQAAn4iQBl3E/guVkSIAESIAESIAESIAESoIwzAyRAAiRAAiRAAiRAAiTgJwKRVsZnjuqDfLmzh4pl3y+/omTVJn7CFrGbPbx9Kf69cRN5P66Oa/9ej9iNc2skQAIkQAIkQAIkQAI+IxDpZfzOnbu4b/4v+LJk9Ua06jYo3ME8Gye2XWdkkl6R8dixYyFvqRo4dfpsuB9zRKxQuEYmphFx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v+php150vok1CqN4Ig6d5/OJOI08CBIgAT8ToIz7+QRw8yRAAiRAAiRAAiRAAlGXAGU86p57HjkJkAAJkAAJkAAJkICfCVDG/XwCuHkSIAESIAESIAESIIGoS4AyHnXPPY+cBEiABEiABEiABEjAzwQo434+Adw8CZAACZAACZAACZBA1CVAGY+6555HTgIkQAIkQAIkQAIk4GcClHE/nwBungRIgARIgARIgARIIOoSoIxH3XPPIycBEiABEiABEiABEvAzAcq4n08AN08CJEACJEACJEACJBB1CVDGo+6555GTAAmQAAmQAAmQAAn4mQBl3M8ngJsnARIgARIgARIgARKIugQo41H33PPISYAESIAESIAESIAE/EyAMu7nE8DNkwAJkAAJkAAJkAAJRF0ClPGoe+555CRAAiRAAiRAAiRAAn4mQBn38wng5kmABEiABEiABEiABKIuAcp41D33PHISIAESIAESIAESIAE/E6CM+/kEcPMkQAIkQAIkQAIkQAJRlwBlPOqeex45CZAACZAACZAACZCAnwlQxv18Arh5EiABEiABEiABEiCBqEuAMh51zz2PnARIgARIgARIgARIwM8EKON+PgHcPAmQAAmQAAmQAAmQQNQlQBmPuueeR04CJEACJEACJEACJOBnApRxP58Abp4ESIAESIAESIAESCDqEqCMR91zzyMnARIgARIgARIgARLwMwHKuJ9PADdPAiRAAiRAAiRAAiQQdQlQxqPuueeRkwAJkAAJkAAJkAAJ+JkAZdzPJ4CbJwESIAESIAESIAESiLoEKONR99zzyEmABEiABEiABEiABPxMgDLu5xPAzZMACZAACZAACZAACURdApTxqHvueeQkQAIkQAIkQAIkQAJ+JkAZ9/MJ4OZJgARIgARIgARIgASiLgHKeNQ99zxyEiABEiABEiABEiABPxOgjPv5BHDzJEACJEACJEACJEACUZcAZTzqnnseOQmQAAmQAAmQAAmQgJ8JUMb9fAK4eRIgARIgARIgARIggahLgDIedc89j5wESIAESIAESIAESMDPBCjjfj4B3DwJkAAJkAAJkAAJkEDUJUAZj7rnnkdOAiRAAiRAAiRAAiTgZwKUcT+fAG6eBEiABEiABEiABEgg6hKgjEfdc88jJwESIAESIAESIAES8DMByrifTwA3TwIkQAIkQAIk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",
"text/html": [
"<div> <div id=\"ca09dcbe-312b-42bf-a547-7340d63b0988\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div> <script type=\"text/javascript\"> require([\"plotly\"], function(Plotly) { window.PLOTLYENV=window.PLOTLYENV || {}; if (document.getElementById(\"ca09dcbe-312b-42bf-a547-7340d63b0988\")) { Plotly.newPlot( \"ca09dcbe-312b-42bf-a547-7340d63b0988\", [{\"name\":\"amount\",\"type\":\"box\",\"x\":[3.308984925970435,3.3493398930877447,3.2744919564574957]},{\"name\":\"category=shopping_net\",\"type\":\"box\",\"x\":[0.4514044728130102,0.4568766262382269,0.4489722456783056]},{\"name\":\"category=shopping_pos\",\"type\":\"box\",\"x\":[0.31098209880292416,0.2717477288097143,0.3281372394412756]},{\"name\":\"category=misc_net\",\"type\":\"box\",\"x\":[0.20811662636697292,0.19702242873609066,0.2008549328893423]},{\"name\":\"category=grocery_pos\",\"type\":\"box\",\"x\":[0.16108024679124355,0.18406141363084316,0.17419015429913998]},{\"name\":\"gender=F\",\"type\":\"box\",\"x\":[0.13460165821015835,0.1347148772329092,0.13639475964009762]},{\"name\":\"gender=M\",\"type\":\"box\",\"x\":[0.06523300521075726,0.07392674498260021,0.07772778533399105]},{\"name\":\"category=entertainment\",\"type\":\"box\",\"x\":[0.06499864719808102,0.06474841199815273,0.06395175121724606]},{\"name\":\"hour=20\",\"type\":\"box\",\"x\":[0.05624440871179104,0.05221535079181194,0.05536658130586147]}], {\"height\":525,\"margin\":{\"l\":150},\"showlegend\":false,\"template\":{\"data\":{\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"choropleth\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"choropleth\"}],\"contour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"contour\"}],\"contourcarpet\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"contourcarpet\"}],\"heatmap\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmap\"}],\"heatmapgl\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmapgl\"}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"histogram2d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2d\"}],\"histogram2dcontour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2dcontour\"}],\"mesh3d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"mesh3d\"}],\"parcoords\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"parcoords\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter\"}],\"scatter3d\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter3d\"}],\"scattercarpet\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattercarpet\"}],\"scattergeo\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergeo\"}],\"scattergl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergl\"}],\"scattermapbox\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattermapbox\"}],\"scatterpolar\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolar\"}],\"scatterpolargl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolargl\"}],\"scatterternary\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterternary\"}],\"surface\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"surface\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}]},\"layout\":{\"font\":{\"color\":\"#FAFAFA\",\"family\":\"Avenir\",\"size\":13},\"hoverlabel\":{\"bgcolor\":\"#122536\",\"font\":{\"family\":\"Avenir\",\"size\":15}},\"hovermode\":\"closest\",\"paper_bgcolor\":\"#182d41\",\"plot_bgcolor\":\"#182d41\",\"title\":{\"font\":{\"family\":\"Avenir\"},\"pad\":{\"b\":50,\"t\":20},\"x\":0.05,\"y\":0.95}}},\"title\":{\"text\":\"Feature Importance <sub>(feature.id:11, permute_count:3, top_n:9)</sub><br><br>\"},\"xaxis\":{\"gridcolor\":\"#2c3c4a\",\"nticks\":15,\"tickangle\":45,\"title\":{\"text\":\"Importance<br><sup>[permuted column loss - training loss]</sup>\"}}}, {\"responsive\": true} ).then(function(){\n",
" \n",
"var gd = document.getElementById('ca09dcbe-312b-42bf-a547-7340d63b0988');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" }) }; }); </script> </div>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"predictor.predictions[0].plot_feature_importance(top_n=9)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ff12e706-461c-4649-b705-1b0ea77a9a26",
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'queue' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-7-fff590d9fae1>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mqueue\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_performance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'queue' is not defined"
]
}
],
"source": [
"queue.plot_performance()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3067d1ab-e6dc-40c4-9d3c-1f293c5b483c",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.12"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment