There is a 2 part. need to take dataset from the keggle and please follow the rubric and instruction.

1 answer below »
There is a 2 part. need to take dataset from the keggle and please follow the rubric and instruction.
Answered Same DayMay 11, 2021

Answer To: There is a 2 part. need to take dataset from the keggle and please follow the rubric and...

Rohith answered on May 12 2021
145 Votes
__MACOSX/._57503
57503/.DS_Store
__MACOSX/57503/._.DS_Store
57503/57503_1.html


In [1]:

!wget -O train.csv https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/train.csv
--2020-05-11 16:41:37-- https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/train.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 460676 (450K) [text/plain]
Saving to: ‘train.csv’
train.csv 100%[===================>] 449.88K --.-KB/s in 0.06s
2020-05-11 16:41:38 (7.11 MB/s) - ‘train.csv’ saved [460676/460676]
In [2]:

ls
sample_data/ train.csv
EDA¶
In [3]:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from scipy.stats import norm
from sklearn.preprocessing import StandardScaler
from scipy import stats
import warnings
warnings.filterwarnings('ignore')
%matplotlib inline
/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
import pandas.util.testing as tm
In [0]:

df_train = pd.read_csv('train.csv')

In [5]:

df_train.columns

Out[5]:
Index(['Id', 'MSSubClass', 'MSZoning', 'LotFrontage', 'LotArea', 'Street',
'Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig',
'LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType',
'HouseStyle', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd',
'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType',
'MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',
'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1',
'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'Heating',
'HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF', '2ndFlrSF',
'LowQualFinSF', 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath',
'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr', 'KitchenQual',
'TotRmsAbvGrd', 'Functional', 'Fireplaces', 'FireplaceQu', 'GarageType',
'GarageYrBlt', 'GarageFinish', 'GarageCars', 'GarageArea', 'GarageQual',
'GarageCond', 'PavedDrive', 'WoodDeckSF', 'OpenPorchSF',
'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'PoolQC',
'Fence', 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold', 'SaleType',
'SaleCondition', 'SalePrice'],
dtype='object')
In [6]:

#descriptive statistics summary
df_train['SalePrice'].describe()

Out[6]:
count 1460.000000
mean 180921.195890
std 79442.502883
min 34900.000000
25% 129975.000000
50% 163000.000000
75% 214000.000000
max 755000.000000
Name: SalePrice, dtype: float64
In [7]:

#histogram
sns.distplot(df_train['SalePrice']);
In [8]:

#skewness and kurtosis
print("Skewness: %f" % df_train['SalePrice'].skew())
print("Kurtosis: %f" % df_train['SalePrice'].kurt())
Skewness: 1.882876
Kurtosis: 6.536282
In [9]:

#scatter plot grlivarea/saleprice
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));
In [10]:

#scatter plot totalbsmtsf/saleprice
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));
In [11]:

#box plot overallqual/saleprice
var = 'OverallQual'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(8, 6))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
In [12]:

var = 'YearBuilt'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 8))
fig = sns.boxplot(x=var, y="SalePrice", data=data)
fig.axis(ymin=0, ymax=800000);
plt.xticks(rotation=90);
In [13]:

#correlation matrix
corrmat = df_train.corr()
f, ax = plt.subplots(figsize=(12, 9))
sns.heatmap(corrmat, vmax=.8, square=True);
In [14]:

#saleprice correlation matrix
k = 10 #number of variables for heatmap
cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index
cm = np.corrcoef(df_train[cols].values.T)
sns.set(font_scale=1.25)
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)
plt.show()
In [15]:

#scatterplot
sns.set()
cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']
sns.pairplot(df_train[cols], size = 2.5)
plt.show();
In [16]:

#missing data
total = df_train.isnull().sum().sort_values(ascending=False)
percent = (df_train.isnull().sum()/df_train.isnull().count()).sort_values(ascending=False)
missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])
missing_data.head(20)

Out[16]:
                Total        Percent
        PoolQC        1453        0.995205
        MiscFeature        1406        0.963014
        Alley        1369        0.937671
        Fence        1179        0.807534
        FireplaceQu        690        0.472603
        LotFrontage        259        0.177397
        GarageCond        81        0.055479
        GarageType        81        0.055479
        GarageYrBlt        81        0.055479
        GarageFinish        81        0.055479
        GarageQual        81        0.055479
        BsmtExposure        38        0.026027
        BsmtFinType2        38        0.026027
        BsmtFinType1        37        0.025342
        BsmtCond        37        0.025342
        BsmtQual        37        0.025342
        MasVnrArea        8        0.005479
        MasVnrType        8        0.005479
        Electrical        1        0.000685
        Utilities        0        0.000000
In [17]:

#dealing with missing data
df_train = df_train.drop((missing_data[missing_data['Total'] > 1]).index,1)
df_train = df_train.drop(df_train.loc[df_train['Electrical'].isnull()].index)
df_train.isnull().sum().max() #just checking that there's no missing data missing...

Out[17]:
0
In [18]:

#standardizing data
saleprice_scaled = StandardScaler().fit_transform(df_train['SalePrice'][:,np.newaxis]);
low_range = saleprice_scaled[saleprice_scaled[:,0].argsort()][:10]
high_range= saleprice_scaled[saleprice_scaled[:,0].argsort()][-10:]
print('outer range (low) of the distribution:')
print(low_range)
print('\nouter range (high) of the distribution:')
print(high_range)
outer range (low) of the distribution:
[[-1.83820775]
[-1.83303414]
[-1.80044422]
[-1.78282123]
[-1.77400974]
[-1.62295562]
[-1.6166617 ]
[-1.58519209]
[-1.58519209]
[-1.57269236]]
outer range (high) of the distribution:
[[3.82758058]
[4.0395221 ]
[4.49473628]
[4.70872962]
[4.728631 ]
[5.06034585]
[5.42191907]
[5.58987866]
[7.10041987]
[7.22629831]]
In [19]:

#bivariate analysis saleprice/grlivarea
var = 'GrLivArea'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));
'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.

In [0]:

#deleting points
df_train.sort_values(by = 'GrLivArea', ascending = False)[:2]
df_train = df_train.drop(df_train[df_train['Id'] == 1299].index)
df_train = df_train.drop(df_train[df_train['Id'] == 524].index)

In [21]:

#bivariate analysis saleprice/grlivarea
var = 'TotalBsmtSF'
data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)
data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));
'c' argument looks like a single numeric RGB or RGBA sequence, which should be avoided as value-mapping will have precedence in case its length matches with 'x' & 'y'. Please use a 2-D array with a single row if you really want to specify the same RGB or RGBA value for all points.

In [22]:

#histogram and normal probability plot
sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)
In [0]:

#applying log transformation
df_train['SalePrice'] = np.log(df_train['SalePrice'])

In [24]:

#transformed histogram and normal probability plot
sns.distplot(df_train['SalePrice'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['SalePrice'], plot=plt)
In [25]:

#histogram and normal probability plot
sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)
In [26]:

#transformed histogram and normal probability plot
sns.distplot(df_train['GrLivArea'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['GrLivArea'], plot=plt)
In [27]:

#histogram and normal probability plot
sns.distplot(df_train['TotalBsmtSF'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train['TotalBsmtSF'], plot=plt)
In [0]:

#create column for new variable (one is enough because it's a binary categorical feature)
#if area>0 it gets 1, for area==0 it gets 0
df_train['HasBsmt'] = pd.Series(len(df_train['TotalBsmtSF']), index=df_train.index)
df_train['HasBsmt'] = 0
df_train.loc[df_train['TotalBsmtSF']>0,'HasBsmt'] = 1

In [0]:

#transform data
df_train.loc[df_train['HasBsmt']==1,'TotalBsmtSF'] = np.log(df_train['TotalBsmtSF'])

In [30]:

#histogram and normal probability plot
sns.distplot(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], fit=norm);
fig = plt.figure()
res = stats.probplot(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], plot=plt)
In [31]:

#scatter plot
plt.scatter(df_train['GrLivArea'], df_train['SalePrice']);
In [32]:

#scatter plot
plt.scatter(df_train[df_train['TotalBsmtSF']>0]['TotalBsmtSF'], df_train[df_train['TotalBsmtSF']>0]['SalePrice']);
Regression¶
In [33]:

#import some necessary librairies
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
%matplotlib inline
import matplotlib.pyplot as plt # Matlab-style plotting
import seaborn as sns
color = sns.color_palette()
sns.set_style('darkgrid')
import warnings
def ignore_warn(*args, **kwargs):
pass
warnings.warn = ignore_warn #ignore annoying warning (from sklearn and seaborn)
from scipy import stats
from scipy.stats import norm, skew #for some statistics
pd.set_option('display.float_format', lambda x: '{:.3f}'.format(x)) #Limiting floats output to 3 decimal points
from subprocess import check_output
!wget -O test.csv https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/test.csv
--2020-05-11 16:48:32-- https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/test.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 451405 (441K) [text/plain]
Saving to: ‘test.csv’
test.csv 100%[===================>] 440.83K --.-KB/s in 0.06s
2020-05-11 16:48:32 (6.84 MB/s) - ‘test.csv’ saved [451405/451405]
In [0]:

#Now let's import and put the train and test datasets in pandas dataframe
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

In [35]:

#check the numbers of samples and features
print("The train data size before dropping Id feature is : {} ".format(train.shape))
print("The test data size before dropping Id feature is : {} ".format(test.shape))
#Save the 'Id' column
train_ID = train['Id']
test_ID = test['Id']
#Now drop the 'Id' colum since it's unnecessary for the prediction process.
train.drop("Id", axis = 1, inplace = True)
test.drop("Id", axis = 1, inplace = True)
#check again the data size after dropping the 'Id' variable
print("\nThe train data size after dropping Id feature is : {} ".format(train.shape))
print("The test data size after dropping Id feature is : {} ".format(test.shape))
The train data size before dropping Id feature is : (1460, 81)
The test data size before dropping Id feature is : (1459, 80)
The train data size after dropping Id feature is : (1460, 80)
The test data size after dropping Id feature is : (1459, 79)
Data Preproceesing¶
In [36]:

fig, ax = plt.subplots()
ax.scatter(x = train['GrLivArea'], y = train['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
In [37]:

#Deleting outliers
train = train.drop(train[(train['GrLivArea']>4000) & (train['SalePrice']<300000)].index)
#Check the graphic again
fig, ax = plt.subplots()
ax.scatter(train['GrLivArea'], train['SalePrice'])
plt.ylabel('SalePrice', fontsize=13)
plt.xlabel('GrLivArea', fontsize=13)
plt.show()
In [38]:

sns.distplot(train['SalePrice'] , fit=norm);
# Get the fitted parameters used by the function
(mu, sigma) = norm.fit(train['SalePrice'])
print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))
#Now plot the distribution
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],
loc='best')
plt.ylabel('Frequency')
plt.title('SalePrice distribution')
#Get also the QQ-plot
fig = plt.figure()
res = stats.probplot(train['SalePrice'], plot=plt)
plt.show()
mu = 180932.92 and sigma = 79467.79
In [39]:

#We use the numpy fuction log1p which applies log(1+x) to all elements of the column
train["SalePrice"] = np.log1p(train["SalePrice"])
#Check the new distribution
sns.distplot(train['SalePrice'] , fit=norm);
# Get the fitted parameters used by the function
(mu, sigma) = norm.fit(train['SalePrice'])
print( '\n mu = {:.2f} and sigma = {:.2f}\n'.format(mu, sigma))
#Now plot the distribution
plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],
loc='best')
plt.ylabel('Frequency')
plt.title('SalePrice distribution')
#Get also the QQ-plot
fig = plt.figure()
res = stats.probplot(train['SalePrice'], plot=plt)
plt.show()
mu = 12.02 and sigma = 0.40
Features Engineering¶
In [40]:

ntrain = train.shape[0]
ntest = test.shape[0]
y_train = train.SalePrice.values
all_data = pd.concat((train, test)).reset_index(drop=True)
all_data.drop(['SalePrice'], axis=1, inplace=True)
print("all_data size is : {}".format(all_data.shape))
all_data size is : (2917, 79)
In [41]:

all_data_na = (all_data.isnull().sum() / len(all_data)) * 100
all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)[:30]
missing_data = pd.DataFrame({'Missing Ratio' :all_data_na})
missing_data.head(20)

Out[41]:
                Missing Ratio
        PoolQC        99.691
        MiscFeature        96.400
        Alley        93.212
        Fence        80.425
        FireplaceQu        48.680
        LotFrontage        16.661
        GarageFinish        5.451
        GarageYrBlt        5.451
        GarageQual        5.451
        GarageCond        5.451
        GarageType        5.382
        BsmtExposure        2.811
        BsmtCond        2.811
        BsmtQual        2.777
        BsmtFinType2        2.743
        BsmtFinType1        2.708
        MasVnrType        0.823
        MasVnrArea        0.788
        MSZoning        0.137
        BsmtFullBath        0.069
In [42]:

f, ax = plt.subplots(figsize=(15, 12))
plt.xticks(rotation='90')
sns.barplot(x=all_data_na.index, y=all_data_na)
plt.xlabel('Features', fontsize=15)
plt.ylabel('Percent of missing values', fontsize=15)
plt.title('Percent missing data by feature', fontsize=15)

Out[42]:
Text(0.5, 1.0, 'Percent missing data by feature')

In [43]:

#Correlation map to see how features are correlated with SalePrice
corrmat = train.corr()
plt.subplots(figsize=(12,9))
sns.heatmap(corrmat, vmax=0.9, square=True)

Out[43]:


In [0]:

all_data["PoolQC"] = all_data["PoolQC"].fillna("None")

In [0]:

all_data["MiscFeature"] = all_data["MiscFeature"].fillna("None")

In [0]:

all_data["Alley"] = all_data["Alley"].fillna("None")

In [0]:

all_data["Fence"] = all_data["Fence"].fillna("None")

In [0]:

all_data["FireplaceQu"] = all_data["FireplaceQu"].fillna("None")

In [0]:

#Group by neighborhood and fill in missing value by the median LotFrontage of all the neighborhood
all_data["LotFrontage"] = all_data.groupby("Neighborhood")["LotFrontage"].transform(
lambda x: x.fillna(x.median()))

In [0]:

for col in ('GarageType', 'GarageFinish', 'GarageQual', 'GarageCond'):
all_data[col] = all_data[col].fillna('None')

In [0]:

for col in ('GarageYrBlt', 'GarageArea', 'GarageCars'):
all_data[col] = all_data[col].fillna(0)

In [0]:

for col in ('BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF','TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath'):
all_data[col] = all_data[col].fillna(0)

In [0]:

for col in ('BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2'):
all_data[col] = all_data[col].fillna('None')

In [0]:

all_data["MasVnrType"] = all_data["MasVnrType"].fillna("None")
all_data["MasVnrArea"] = all_data["MasVnrArea"].fillna(0)

In [0]:

all_data['MSZoning'] = all_data['MSZoning'].fillna(all_data['MSZoning'].mode()[0])

In [0]:

all_data = all_data.drop(['Utilities'], axis=1)

In [0]:

all_data["Functional"] = all_data["Functional"].fillna("Typ")

In [0]:

all_data['Electrical'] = all_data['Electrical'].fillna(all_data['Electrical'].mode()[0])

In [0]:

all_data['KitchenQual'] = all_data['KitchenQual'].fillna(all_data['KitchenQual'].mode()[0])

In [0]:

all_data['Exterior1st'] = all_data['Exterior1st'].fillna(all_data['Exterior1st'].mode()[0])
all_data['Exterior2nd'] = all_data['Exterior2nd'].fillna(all_data['Exterior2nd'].mode()[0])

In [0]:

all_data['SaleType'] = all_data['SaleType'].fillna(all_data['SaleType'].mode()[0])

In [0]:

all_data['MSSubClass'] = all_data['MSSubClass'].fillna("None")

In [63]:

#Check remaining missing values if any
all_data_na = (all_data.isnull().sum() / len(all_data)) * 100
all_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)
missing_data = pd.DataFrame({'Missing Ratio' :all_data_na})
missing_data.head()

Out[63]:
                Missing Ratio
In [0]:

#MSSubClass=The building class
all_data['MSSubClass'] = all_data['MSSubClass'].apply(str)
#Changing OverallCond into a categorical variable
all_data['OverallCond'] = all_data['OverallCond'].astype(str)
#Year and month sold are transformed into categorical features.
all_data['YrSold'] = all_data['YrSold'].astype(str)
all_data['MoSold'] = all_data['MoSold'].astype(str)

In [65]:

from sklearn.preprocessing import LabelEncoder
cols = ('FireplaceQu', 'BsmtQual', 'BsmtCond', 'GarageQual', 'GarageCond',
'ExterQual', 'ExterCond','HeatingQC', 'PoolQC', 'KitchenQual', 'BsmtFinType1',
'BsmtFinType2', 'Functional', 'Fence', 'BsmtExposure', 'GarageFinish', 'LandSlope',
'LotShape', 'PavedDrive', 'Street', 'Alley', 'CentralAir', 'MSSubClass', 'OverallCond',
'YrSold', 'MoSold')
# process columns, apply LabelEncoder to categorical features
for c in cols:
lbl = LabelEncoder()
lbl.fit(list(all_data[c].values))
all_data[c] = lbl.transform(list(all_data[c].values))
# shape
print('Shape all_data: {}'.format(all_data.shape))
Shape all_data: (2917, 78)
In [0]:

# Adding total sqfootage feature
all_data['TotalSF'] = all_data['TotalBsmtSF'] + all_data['1stFlrSF'] + all_data['2ndFlrSF']

In [67]:

numeric_feats = all_data.dtypes[all_data.dtypes != "object"].index
# Check the skew of all numerical features
skewed_feats = all_data[numeric_feats].apply(lambda x: skew(x.dropna())).sort_values(ascending=False)
print("\nSkew in numerical features: \n")
skewness = pd.DataFrame({'Skew' :skewed_feats})
skewness.head(10)
Skew in numerical features:
Out[67]:
                Skew
        MiscVal        21.940
        PoolArea        17.689
        LotArea        13.109
        LowQualFinSF        12.085
        3SsnPorch        11.372
        LandSlope        4.973
        KitchenAbvGr        4.301
        BsmtFinSF2        4.145
        EnclosedPorch        4.002
        ScreenPorch        3.945
In [68]:

skewness = skewness[abs(skewness) > 0.75]
print("There are {} skewed numerical features to Box Cox transform".format(skewness.shape[0]))
from scipy.special import boxcox1p
skewed_features = skewness.index
lam = 0.15
for feat in skewed_features:
#all_data[feat] += 1
all_data[feat] = boxcox1p(all_data[feat], lam)

#all_data[skewed_features] = np.log1p(all_data[skewed_features])
There are 59 skewed numerical features to Box Cox transform
In [69]:

all_data = pd.get_dummies(all_data)
print(all_data.shape)
(2917, 220)
In [0]:

train = all_data[:ntrain]
test = all_data[ntrain:]

Modeling¶
In [0]:

from sklearn.linear_model import ElasticNet, Lasso, BayesianRidge, LassoLarsIC
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.kernel_ridge import KernelRidge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import RobustScaler
from sklearn.base import BaseEstimator, TransformerMixin, RegressorMixin, clone
from sklearn.model_selection import KFold, cross_val_score, train_test_split
from sklearn.metrics import mean_squared_error
import xgboost as xgb
import lightgbm as lgb

In [0]:

#Validation function
n_folds = 5
def rmsle_cv(model):
kf = KFold(n_folds, shuffle=True, random_state=42).get_n_splits(train.values)
rmse= np.sqrt(-cross_val_score(model, train.values, y_train, scoring="neg_mean_squared_error", cv = kf))
return(rmse)

In [0]:

lasso = make_pipeline(RobustScaler(), Lasso(alpha =0.0005, random_state=1))

In [0]:

ENet = make_pipeline(RobustScaler(), ElasticNet(alpha=0.0005, l1_ratio=.9, random_state=3))

In [0]:

KRR = KernelRidge(alpha=0.6, kernel='polynomial', degree=2, coef0=2.5)

In [0]:

GBoost = GradientBoostingRegressor(n_estimators=3000, learning_rate=0.05,
max_depth=4, max_features='sqrt',
min_samples_leaf=15, min_samples_split=10,
loss='huber', random_state =5)

In [0]:

# XG Boost
model_xgb = xgb.XGBRegressor(colsample_bytree=0.4603, gamma=0.0468,
learning_rate=0.05, max_depth=3,
min_child_weight=1.7817, n_estimators=2200,
reg_alpha=0.4640, reg_lambda=0.8571,
subsample=0.5213, silent=1,
random_state =7, nthread = -1)

In [0]:

# Light GBM
model_lgb = lgb.LGBMRegressor(objective='regression',num_leaves=5,
learning_rate=0.05, n_estimators=720,
max_bin = 55, bagging_fraction = 0.8,
bagging_freq = 5, feature_fraction = 0.2319,
feature_fraction_seed=9, bagging_seed=9,
min_data_in_leaf =6, min_sum_hessian_in_leaf = 11)

In [79]:

score = rmsle_cv(lasso)
print("\nLasso score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
Lasso score: 0.1115 (0.0074)
In [80]:

score = rmsle_cv(ENet)
print("ElasticNet score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
ElasticNet score: 0.1116 (0.0074)
In [81]:

score = rmsle_cv(KRR)
print("Kernel Ridge score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
Kernel Ridge score: 0.1153 (0.0075)
In [82]:

score = rmsle_cv(GBoost)
print("Gradient Boosting score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
Gradient Boosting score: 0.1167 (0.0083)
In [83]:

score = rmsle_cv(model_xgb)
print("Xgboost score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
Xgboost score: 0.1150 (0.0066)
In [84]:

score = rmsle_cv(model_lgb)
print("LGBM score: {:.4f} ({:.4f})\n" .format(score.mean(), score.std()))
LGBM score: 0.1176 (0.0062)
Stacking models¶
In [0]:

class AveragingModels(BaseEstimator, RegressorMixin, TransformerMixin):
def __init__(self, models):
self.models = models

# we define clones of the original models to fit the data in
def fit(self, X, y):
self.models_ = [clone(x) for x in self.models]

# Train cloned base models
for model in self.models_:
model.fit(X, y)
return self

#Now we do the predictions for cloned models and average them
def predict(self, X):
predictions = np.column_stack([
model.predict(X) for model in self.models_
])
return np.mean(predictions, axis=1)
In [86]:

averaged_models = AveragingModels(models = (ENet, GBoost, KRR, lasso))
score = rmsle_cv(averaged_models)
print(" Averaged base models score: {:.4f} ({:.4f})\n".format(score.mean(), score.std()))
Averaged base models score: 0.1087 (0.0077)
In [0]:

class StackingAveragedModels(BaseEstimator, RegressorMixin, TransformerMixin):
def __init__(self, base_models, meta_model, n_folds=5):
self.base_models = base_models
self.meta_model = meta_model
self.n_folds = n_folds

# We again fit the data on clones of the original models
def fit(self, X, y):
self.base_models_ = [list() for x in self.base_models]
self.meta_model_ = clone(self.meta_model)
kfold = KFold(n_splits=self.n_folds, shuffle=True, random_state=156)

# Train cloned base models then create out-of-fold predictions
# that are needed to train the cloned meta-model
out_of_fold_predictions = np.zeros((X.shape[0], len(self.base_models)))
for i, model in enumerate(self.base_models):
for train_index, holdout_index in kfold.split(X, y):
instance = clone(model)
self.base_models_[i].append(instance)
instance.fit(X[train_index], y[train_index])
y_pred = instance.predict(X[holdout_index])
out_of_fold_predictions[holdout_index, i] = y_pred

# Now train the cloned meta-model using the out-of-fold predictions as new feature
self.meta_model_.fit(out_of_fold_predictions, y)
return self

#Do the predictions of all base models on the test data and use the averaged predictions as
#meta-features for the final prediction which is done by the meta-model
def predict(self, X):
meta_features = np.column_stack([
np.column_stack([model.predict(X) for model in base_models]).mean(axis=1)
for base_models in self.base_models_ ])
return self.meta_model_.predict(meta_features)

In [88]:

stacked_averaged_models = StackingAveragedModels(base_models = (ENet, GBoost, KRR),
meta_model = lasso)
score = rmsle_cv(stacked_averaged_models)
print("Stacking Averaged models score: {:.4f} ({:.4f})".format(score.mean(), score.std()))
Stacking Averaged models score: 0.1081 (0.0073)
In [0]:

def rmsle(y, y_pred):
return np.sqrt(mean_squared_error(y, y_pred))

Final Training and Prediction¶
In [90]:

stacked_averaged_models.fit(train.values, y_train)
stacked_train_pred = stacked_averaged_models.predict(train.values)
stacked_pred = np.expm1(stacked_averaged_models.predict(test.values))
print(rmsle(y_train, stacked_train_pred))
0.07839506096664622
In [91]:

model_xgb.fit(train, y_train)
xgb_train_pred = model_xgb.predict(train)
xgb_pred = np.expm1(model_xgb.predict(test))
print(rmsle(y_train, xgb_train_pred))
0.0788580427618937
In [92]:

model_lgb.fit(train, y_train)
lgb_train_pred = model_lgb.predict(train)
lgb_pred = np.expm1(model_lgb.predict(test.values))
print(rmsle(y_train, lgb_train_pred))
0.07294132053731643
In [93]:

'''RMSE on the entire Train data when averaging'''
print('RMSLE score on train data:')
print(rmsle(y_train,stacked_train_pred*0.70 +
xgb_train_pred*0.15 + lgb_train_pred*0.15 ))
RMSLE score on train data:
0.07566957841091893
In [0]:

ensemble = stacked_pred*0.70 + xgb_pred*0.15 + lgb_pred*0.15

In [0]:

sub = pd.DataFrame()
sub['Id'] = test_ID
sub['SalePrice'] = ensemble

In [96]:

sub.head()

Out[96]:
                Id        SalePrice
        0        1461        119486.247
        1        1462        159579.305
        2        1463        187456.970
        3        1464        195629.664
        4        1465        192512.258
In [0]:

__MACOSX/57503/._57503_1.html
57503/cs-443-and-543-final-project-exam-isyin5im.docx
CS 443 and 543 – Machine Learning – Spring 2020 – Final Project/Exam (200 points)
(DUE MAY
The final project/ final exam will provide you an opportunity to use various machine learning concepts, tools, and techniques to answer real-life case scenarios. It will cover the breadth of the course, including concepts from supervised, unsupervised, and deep learning. Here you will apply the methods you have learned and apply it to various scenarios by developing and evaluating learning models in Python. Your project submission should be in the same format as the previous projects, in Jupyter format, and converted to HTML or PDF. If you have any additional data files, please include those along with work in a ZIP file.
Problem 1 : Predicting house prices (70 points)
When a buyer is seeking a new home, there are many factors that influence price negotiations than number of bedrooms or a white-picket fence. Using the Ames Housing dataset, you will use creative feature engineering and advanced regression techniques in building a model to predict sale price. You may find the dataset and additional information about the data here: https://www.kaggle.com/c/house-prices-advanced-regression-techniques/overview
1) Your model should be developed using creative feature selection and engineering techniques and advanced regression techniques such that you can find the following:
a ) The predictor variables that should be included in the model (5 points)
b) Are there any interactions that should or should not be considered for including factors into the predictive model? (5 points)
2) You should perform appropriate exploratory data analysis (which should help you find the most important variables and gain a better understanding and visualization of the data) and predictive modeling (including identification of a quantitative evaluation measure, and optimization of the learning model by adding features, creating new features, adjusting parameters, etc). (20 points)
3) You will want to assess both simple (linear regression) as well as advanced regression models (including random forests and ensemble methods (gradient boosting)), find ways to optimize your model to minimize predictive error (by assessing K-cross validation, using stochastic gradient descent and ridge regression). (20 points)
4) What is your final regression model and how was it developed? (5 points)
5) Describe the various models you tried to evaluate their predictive power on the Ames Housing dataset. Which ones were the most effective and why? (5 points)
6) What were the metrics and parameters you had to optimize? (5 points)
7) What were the results of this optimizations? How would you evaluate your final predictive model and how might it be improved? (5 points)
Problem 2: Credit card fraud detection (130 points)
The use of credit card transactions as a popular payment for both online and offline transactions has led to an increasing number of daily fraud transactions. Automated methods are thus desired for credit card fraud detection, since it is challenging to accurately and promptly detect fraudulent transactions due to dramatic data imbalance and large variations of fraud transactions.
Your task here is to see how various supervised and unsupervised learning methods perform in detecting credit card fraud. The dataset you will use is the following Credit Card Fraud Detection dataset: https://www.kaggle.com/mlg-ulb/creditcardfraud
1) First you should assess the dataset, provide a description in words, especially as it pertains to how the variables are obtained, and some of its properties. (5 points)
2) Also, describe the preprocessing that was performed to obtain the data and the rationale for it. (10 points)
2) Next you will want to distinguish between normal and abnormal (fraud) credit card transactions. This will involve training classifiers on this dataset through supervised learning techniques and evaluating their performance. Using Python, you will want to compare several widely used approaches used for credit card fraud detection including Logistic Regression (LR), K-nearest neighbors (KNN), Support Vector Machine (SVM), Decision Tree (DT), Random Forest (RF), and eXtreme Gradient Boosting (XGBoost). (30 points)
3) You will also want to detect transactions that could be considered anomalous. First, using Python, attempt some of the widely used clustering algorithms (Kmeans, Gaussian Mixture Models, DBSCAN, Hierarchical Clustering). Describe their effectiveness by assessing their performance towards detecting anomalies in this dataset. (10 points)
4) There has recently been an interest in developing unsupervised generative models for anomaly detection. Generative models are training to model the distribution of the normal transaction data distribution without any annotations. A transaction that does not follow the distribution would be anomalous. Here you will evaluate several such unsupervised approaches used for credit card fraud detection such as Variational Autoencoder (VAE) and Generational Adversarial Networks (GAN), in Python. (30 points)
5) Describe the evaluation metrics you will use to evaluate this kind of dataset. Which ones will be appropriate and why? You should try several suitable methods and evaluate which one may be the most effective based on an appropriate evaluation metric of your choice. Provide your rationale for each method you try to handle the imbalanced dataset. Also provide a rationale for choosing your evaluation metric. (20 points)
6) Assess the various models, adjusting parameters appropriately and performing any necessary optimizations, and provide a visualization. Describe how you select the key parameters for each of the various models. (10 points)
7) What would be your assessment of the performance of the supervised models compared to that of the unsupervised methods? Explain the advantages and disadvantages of using supervised versus unsupervised methods for credit card fraud detection. (10 points)
8) Describe any limitations to your work. Describe further methods you could try to improve performance of credit card fraud detection. (5 points)
__MACOSX/57503/._cs-443-and-543-final-project-exam-isyin5im.docx
57503/57503_2.html


In [1]:

!wget https://raw.githubusercontent.com/nsethi31/Kaggle-Data-Credit-Card-Fraud-Detection/master/creditcard.csv
--2020-05-11 18:09:58-- https://raw.githubusercontent.com/nsethi31/Kaggle-Data-Credit-Card-Fraud-Detection/master/creditcard.csv
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 102634230 (98M) [text/plain]
Saving to: ‘creditcard.csv’
creditcard.csv 100%[===================>] 97.88M 170MB/s in 0.6s
2020-05-11 18:09:59 (170 MB/s) - ‘creditcard.csv’ saved [102634230/102634230]
In [2]:

ls
creditcard.csv sample_data/
Gather Sense of Our Data:¶
The first thing we must do is gather a basic sense of our data. Remember, except for the transaction and amount we dont know what the other columns are (due to privacy reasons). The only thing we know, is that those columns that are unknown have been scaled already.
Summary:¶
        The transaction amount is relatively small.
        The mean of all the mounts made is approximately USD 88.
        There are no "Null" values, so we don't have to work on ways to replace values.
        Most of the transactions were Non-Fraud (99.83%) of the time, while Fraud transactions occurs (017%) of the time in the dataframe.
In [3]:

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA, TruncatedSVD
import matplotlib.patches as mpatches
import time
# Classifier Libraries
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
import collections
# Other Libraries
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from imblearn.pipeline import make_pipeline as imbalanced_make_pipeline
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import NearMiss
from imblearn.metrics import classification_report_imbalanced
from sklearn.metrics import precision_score, recall_score, f1_score, roc_auc_score, accuracy_score, classification_report
from collections import Counter
from sklearn.model_selection import KFold, StratifiedKFold
import warnings
warnings.filterwarnings("ignore")
df = pd.read_csv('creditcard.csv')
df.head()
/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
import pandas.util.testing as tm
/usr/local/lib/python3.6/dist-packages/sklearn/externals/six.py:31: FutureWarning: The module is deprecated in version 0.21 and will be removed in version 0.23 since we've dropped support for Python 2.7. Please rely on the official version of six (https://pypi.org/project/six/).
"(https://pypi.org/project/six/).", FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:144: FutureWarning: The sklearn.neighbors.base module is deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.neighbors. Anything that cannot be imported from sklearn.neighbors is now part of the private API.
warnings.warn(message, FutureWarning)
/usr/local/lib/python3.6/dist-packages/sklearn/utils/deprecation.py:144: FutureWarning: The sklearn.metrics.classification module is deprecated in version 0.22 and will be removed in version 0.24. The corresponding classes / functions should instead be imported from sklearn.metrics. Anything that cannot be imported from sklearn.metrics is now part of the private API.
warnings.warn(message, FutureWarning)
Out[3]:
                Time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Amount        Class
        0        0.0        -1.359807        -0.072781        2.536347        1.378155        -0.338321        0.462388        0.239599        0.098698        0.363787        0.090794        -0.551600        -0.617801        -0.991390        -0.311169        1.468177        -0.470401        0.207971        0.025791        0.403993        0.251412        -0.018307        0.277838        -0.110474        0.066928        0.128539        -0.189115        0.133558        -0.021053        149.62        0
        1        0.0        1.191857        0.266151        0.166480        0.448154        0.060018        -0.082361        -0.078803        0.085102        -0.255425        -0.166974        1.612727        1.065235        0.489095        -0.143772        0.635558        0.463917        -0.114805        -0.183361        -0.145783        -0.069083        -0.225775        -0.638672        0.101288        -0.339846        0.167170        0.125895        -0.008983        0.014724        2.69        0
        2        1.0        -1.358354        -1.340163        1.773209        0.379780        -0.503198        1.800499        0.791461        0.247676        -1.514654        0.207643        0.624501        0.066084        0.717293        -0.165946        2.345865        -2.890083        1.109969        -0.121359        -2.261857        0.524980        0.247998        0.771679        0.909412        -0.689281        -0.327642        -0.139097        -0.055353        -0.059752        378.66        0
        3        1.0        -0.966272        -0.185226        1.792993        -0.863291        -0.010309        1.247203        0.237609        0.377436        -1.387024        -0.054952        -0.226487        0.178228        0.507757        -0.287924        -0.631418        -1.059647        -0.684093        1.965775        -1.232622        -0.208038        -0.108300        0.005274        -0.190321        -1.175575        0.647376        -0.221929        0.062723        0.061458        123.50        0
        4        2.0        -1.158233        0.877737        1.548718        0.403034        -0.407193        0.095921        0.592941        -0.270533        0.817739        0.753074        -0.822843        0.538196        1.345852        -1.119670        0.175121        -0.451449        -0.237033        -0.038195        0.803487        0.408542        -0.009431        0.798278        -0.137458        0.141267        -0.206010        0.502292        0.219422        0.215153        69.99        0
In [4]:

df.describe()

Out[4]:
                Time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Amount        Class
        count        284807.000000        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        2.848070e+05        284807.000000        284807.000000
        mean        94813.859575        1.758743e-12        -8.252298e-13        -9.636929e-13        8.316157e-13        1.591952e-13        4.247354e-13        -3.050180e-13        8.693344e-14        -1.179712e-12        7.094854e-13        1.875015e-12        1.053488e-12        7.137527e-13        -1.491363e-13        -5.225914e-13        -2.280712e-13        -6.428517e-13        4.958987e-13        7.060712e-13        1.766038e-12        -3.406543e-13        -5.713163e-13        -9.725303e-13        1.464139e-12        -6.989087e-13        -5.615260e-13        3.332112e-12        -3.518886e-12        88.349619        0.001727
        std        47488.145955        1.958696e+00        1.651309e+00        1.516255e+00        1.415869e+00        1.380247e+00        1.332271e+00        1.237094e+00        1.194353e+00        1.098632e+00        1.088850e+00        1.020713e+00        9.992014e-01        9.952742e-01        9.585956e-01        9.153160e-01        8.762529e-01        8.493371e-01        8.381762e-01        8.140405e-01        7.709250e-01        7.345240e-01        7.257016e-01        6.244603e-01        6.056471e-01        5.212781e-01        4.822270e-01        4.036325e-01        3.300833e-01        250.120109        0.041527
        min        0.000000        -5.640751e+01        -7.271573e+01        -4.832559e+01        -5.683171e+0
0        -1.137433e+02        -2.616051e+01        -4.355724e+01        -7.321672e+01        -1.343407e+01        -2.458826e+01        -4.797473e+00        -1.868371e+01        -5.791881e+00        -1.921433e+01        -4.498945e+00        -1.412985e+01        -2.516280e+01        -9.498746e+00        -7.213527e+00        -5.449772e+01        -3.483038e+01        -1.093314e+01        -4.480774e+01        -2.836627e+00        -1.029540e+01        -2.604551e+00        -2.256568e+01        -1.543008e+01        0.000000        0.000000
        25%        54201.500000        -9.203734e-01        -5.985499e-01        -8.903648e-01        -8.486401e-01        -6.915971e-01        -7.682956e-01        -5.540759e-01        -2.086297e-01        -6.430976e-01        -5.354257e-01        -7.624942e-01        -4.055715e-01        -6.485393e-01        -4.255740e-01        -5.828843e-01        -4.680368e-01        -4.837483e-01        -4.988498e-01        -4.562989e-01        -2.117214e-01        -2.283949e-01        -5.423504e-01        -1.618463e-01        -3.545861e-01        -3.171451e-01        -3.269839e-01        -7.083953e-02        -5.295979e-02        5.600000        0.000000
        50%        84692.000000        1.810880e-02        6.548556e-02        1.798463e-01        -1.984653e-02        -5.433583e-02        -2.741871e-01        4.010308e-02        2.235804e-02        -5.142873e-02        -9.291738e-02        -3.275735e-02        1.400326e-01        -1.356806e-02        5.060132e-02        4.807155e-02        6.641332e-02        -6.567575e-02        -3.636312e-03        3.734823e-03        -6.248109e-02        -2.945017e-02        6.781943e-03        -1.119293e-02        4.097606e-02        1.659350e-02        -5.213911e-02        1.342146e-03        1.124383e-02        22.000000        0.000000
        75%        139320.500000        1.315642e+00        8.037239e-01        1.027196e+00        7.433413e-01        6.119264e-01        3.985649e-01        5.704361e-01        3.273459e-01        5.971390e-01        4.539234e-01        7.395934e-01        6.182380e-01        6.625050e-01        4.931498e-01        6.488208e-01        5.232963e-01        3.996750e-01        5.008067e-01        4.589494e-01        1.330408e-01        1.863772e-01        5.285536e-01        1.476421e-01        4.395266e-01        3.507156e-01        2.409522e-01        9.104512e-02        7.827995e-02        77.165000        0.000000
        max        172792.000000        2.454930e+00        2.205773e+01        9.382558e+00        1.687534e+01        3.480167e+01        7.330163e+01        1.205895e+02        2.000721e+01        1.559499e+01        2.374514e+01        1.201891e+01        7.848392e+00        7.126883e+00        1.052677e+01        8.877742e+00        1.731511e+01        9.253526e+00        5.041069e+00        5.591971e+00        3.942090e+01        2.720284e+01        1.050309e+01        2.252841e+01        4.584549e+00        7.519589e+00        3.517346e+00        3.161220e+01        3.384781e+01        25691.160000        1.000000
In [5]:

# Good No Null Values!
df.isnull().sum().max()

Out[5]:
0
In [6]:

df.columns

Out[6]:
Index(['Time', 'V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10',
'V11', 'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20',
'V21', 'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount',
'Class'],
dtype='object')
In [7]:

# The classes are heavily skewed we need to solve this issue later.
print('No Frauds', round(df['Class'].value_counts()[0]/len(df) * 100,2), '% of the dataset')
print('Frauds', round(df['Class'].value_counts()[1]/len(df) * 100,2), '% of the dataset')
No Frauds 99.83 % of the dataset
Frauds 0.17 % of the dataset
In [8]:

colors = ["#0101DF", "#DF0101"]
sns.countplot('Class', data=df, palette=colors)
plt.title('Class Distributions \n (0: No Fraud || 1: Fraud)', fontsize=14)

Out[8]:
Text(0.5, 1.0, 'Class Distributions \n (0: No Fraud || 1: Fraud)')

In [9]:

fig, ax = plt.subplots(1, 2, figsize=(18,4))
amount_val = df['Amount'].values
time_val = df['Time'].values
sns.distplot(amount_val, ax=ax[0], color='r')
ax[0].set_title('Distribution of Transaction Amount', fontsize=14)
ax[0].set_xlim([min(amount_val), max(amount_val)])
sns.distplot(time_val, ax=ax[1], color='b')
ax[1].set_title('Distribution of Transaction Time', fontsize=14)
ax[1].set_xlim([min(time_val), max(time_val)])
plt.show()
In [0]:

# Since most of our data has already been scaled we should scale the columns that are left to scale (Amount and Time)
from sklearn.preprocessing import StandardScaler, RobustScaler
# RobustScaler is less prone to outliers.
std_scaler = StandardScaler()
rob_scaler = RobustScaler()
df['scaled_amount'] = rob_scaler.fit_transform(df['Amount'].values.reshape(-1,1))
df['scaled_time'] = rob_scaler.fit_transform(df['Time'].values.reshape(-1,1))
df.drop(['Time','Amount'], axis=1, inplace=True)

In [11]:

scaled_amount = df['scaled_amount']
scaled_time = df['scaled_time']
df.drop(['scaled_amount', 'scaled_time'], axis=1, inplace=True)
df.insert(0, 'scaled_amount', scaled_amount)
df.insert(1, 'scaled_time', scaled_time)
# Amount and Time are Scaled!
df.head()

Out[11]:
                scaled_amount        scaled_time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Class
        0        1.783274        -0.994983        -1.359807        -0.072781        2.536347        1.378155        -0.338321        0.462388        0.239599        0.098698        0.363787        0.090794        -0.551600        -0.617801        -0.991390        -0.311169        1.468177        -0.470401        0.207971        0.025791        0.403993        0.251412        -0.018307        0.277838        -0.110474        0.066928        0.128539        -0.189115        0.133558        -0.021053        0
        1        -0.269825        -0.994983        1.191857        0.266151        0.166480        0.448154        0.060018        -0.082361        -0.078803        0.085102        -0.255425        -0.166974        1.612727        1.065235        0.489095        -0.143772        0.635558        0.463917        -0.114805        -0.183361        -0.145783        -0.069083        -0.225775        -0.638672        0.101288        -0.339846        0.167170        0.125895        -0.008983        0.014724        0
        2        4.983721        -0.994972        -1.358354        -1.340163        1.773209        0.379780        -0.503198        1.800499        0.791461        0.247676        -1.514654        0.207643        0.624501        0.066084        0.717293        -0.165946        2.345865        -2.890083        1.109969        -0.121359        -2.261857        0.524980        0.247998        0.771679        0.909412        -0.689281        -0.327642        -0.139097        -0.055353        -0.059752        0
        3        1.418291        -0.994972        -0.966272        -0.185226        1.792993        -0.863291        -0.010309        1.247203        0.237609        0.377436        -1.387024        -0.054952        -0.226487        0.178228        0.507757        -0.287924        -0.631418        -1.059647        -0.684093        1.965775        -1.232622        -0.208038        -0.108300        0.005274        -0.190321        -1.175575        0.647376        -0.221929        0.062723        0.061458        0
        4        0.670579        -0.994960        -1.158233        0.877737        1.548718        0.403034        -0.407193        0.095921        0.592941        -0.270533        0.817739        0.753074        -0.822843        0.538196        1.345852        -1.119670        0.175121        -0.451449        -0.237033        -0.038195        0.803487        0.408542        -0.009431        0.798278        -0.137458        0.141267        -0.206010        0.502292        0.219422        0.215153        0
In [12]:

from sklearn.model_selection import train_test_split
from sklearn.model_selection import StratifiedShuffleSplit
print('No Frauds', round(df['Class'].value_counts()[0]/len(df) * 100,2), '% of the dataset')
print('Frauds', round(df['Class'].value_counts()[1]/len(df) * 100,2), '% of the dataset')
X = df.drop('Class', axis=1)
y = df['Class']
sss = StratifiedKFold(n_splits=5, random_state=None, shuffle=False)
for train_index, test_index in sss.split(X, y):
print("Train:", train_index, "Test:", test_index)
original_Xtrain, original_Xtest = X.iloc[train_index], X.iloc[test_index]
original_ytrain, original_ytest = y.iloc[train_index], y.iloc[test_index]
# We already have X_train and y_train for undersample data thats why I am using original to distinguish and to not overwrite these variables.
# original_Xtrain, original_Xtest, original_ytrain, original_ytest = train_test_split(X, y, test_size=0.2, random_state=42)
# Check the Distribution of the labels
# Turn into an array
original_Xtrain = original_Xtrain.values
original_Xtest = original_Xtest.values
original_ytrain = original_ytrain.values
original_ytest = original_ytest.values
# See if both the train and test label distribution are similarly distributed
train_unique_label, train_counts_label = np.unique(original_ytrain, return_counts=True)
test_unique_label, test_counts_label = np.unique(original_ytest, return_counts=True)
print('-' * 100)
print('Label Distributions: \n')
print(train_counts_label/ len(original_ytrain))
print(test_counts_label/ len(original_ytest))
No Frauds 99.83 % of the dataset
Frauds 0.17 % of the dataset
Train: [ 30473 30496 31002 ... 284804 284805 284806] Test: [ 0 1 2 ... 57017 57018 57019]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [ 30473 30496 31002 ... 113964 113965 113966]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [ 81609 82400 83053 ... 170946 170947 170948]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [150654 150660 150661 ... 227866 227867 227868]
Train: [ 0 1 2 ... 227866 227867 227868] Test: [212516 212644 213092 ... 284804 284805 284806]
----------------------------------------------------------------------------------------------------
Label Distributions:
[0.99827076 0.00172924]
[0.99827952 0.00172048]
In [13]:

# Since our classes are highly skewed we should make them equivalent in order to have a normal distribution of the classes.
# Lets shuffle the data before creating the subsamples
df = df.sample(frac=1)
# amount of fraud classes 492 rows.
fraud_df = df.loc[df['Class'] == 1]
non_fraud_df = df.loc[df['Class'] == 0][:492]
normal_distributed_df = pd.concat([fraud_df, non_fraud_df])
# Shuffle dataframe rows
new_df = normal_distributed_df.sample(frac=1, random_state=42)
new_df.head()

Out[13]:
                scaled_amount        scaled_time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Class
        70301        -0.293440        -0.362821        -1.309182        2.643591        -0.673922        2.856275        -0.569337        -0.807564        -0.158952        1.101358        -1.636385        1.075114        -0.991935        0.152057        0.380580        1.305396        0.638051        -0.100245        0.540601        -0.061017        0.684912        0.107871        0.205377        0.532638        0.229646        0.401670        -0.838382        0.113539        0.326430        0.243853        0
        239499        0.391253        0.768877        -2.150855        2.187917        -3.430516        0.119476        -0.173210        0.290700        -2.808988        -2.679351        -0.556685        -4.485483        1.903999        -2.644219        -0.982273        -4.691151        -0.693080        -2.553251        -3.483436        -0.064852        1.490329        0.532145        -0.073205        0.561496        -0.075034        -0.437619        0.353841        -0.521339        0.144465        0.026588        1
        242258        0.669322        0.783867        -1.088541        -1.340517        -0.746996        -1.989129        2.299595        -2.267388        0.443727        -0.411735        -1.629431        0.106115        -1.371872        -0.872795        0.421758        0.230802        -0.793717        0.693311        -0.139018        -1.470912        0.111376        0.497916        0.602484        1.133182        0.032524        -0.589040        0.117512        -0.091243        0.040797        0.202447        0
        191267        -0.207084        0.522727        0.290155        0.049243        -0.740524        2.865463        1.395294        -0.535163        0.142543        -0.222770        -1.463691        1.713538        -1.127573        -0.708657        0.272186        0.274710        0.235192        -0.463553        0.472995        -0.447899        1.790924        0.247580        0.337349        1.018191        0.303550        0.833886        -1.222306        2.745261        -0.220402        0.168233        1
        150662        4.108992        0.107626        -5.839192        7.151532        -12.816760        7.031115        -9.651272        -2.938427        -11.543207        4.843627        -3.494276        -13.320789        8.460244        -17.003289        0.101557        -14.094452        0.747031        -12.661696        -18.912494        -6.626975        4.008921        0.055684        2.462056        1.054865        0.530481        0.472670        -0.275998        0.282435        0.104886        0.254417        1
In [14]:

print('Distribution of the Classes in the subsample dataset')
print(new_df['Class'].value_counts()/len(new_df))
sns.countplot('Class', data=new_df, palette=colors)
plt.title('Equally Distributed Classes', fontsize=14)
plt.show()
Distribution of the Classes in the subsample dataset
1 0.5
0 0.5
Name: Class, dtype: float64

In [15]:

# Make sure we use the subsample in our correlation
f, (ax1, ax2) = plt.subplots(2, 1, figsize=(24,20))
# Entire DataFrame
corr = df.corr()
sns.heatmap(corr, cmap='coolwarm_r', annot_kws={'size':20}, ax=ax1)
ax1.set_title("Imbalanced Correlation Matrix \n (don't use for reference)", fontsize=14)
sub_sample_corr = new_df.corr()
sns.heatmap(sub_sample_corr, cmap='coolwarm_r', annot_kws={'size':20}, ax=ax2)
ax2.set_title('SubSample Correlation Matrix \n (use for reference)', fontsize=14)
plt.show()
In [16]:

# Anomaly Detection
from scipy.stats import norm
f, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(20, 6))
v14_fraud_dist = new_df['V14'].loc[new_df['Class'] == 1].values
sns.distplot(v14_fraud_dist,ax=ax1, fit=norm, color='#FB8861')
ax1.set_title('V14 Distribution \n (Fraud Transactions)', fontsize=14)
v12_fraud_dist = new_df['V12'].loc[new_df['Class'] == 1].values
sns.distplot(v12_fraud_dist,ax=ax2, fit=norm, color='#56F9BB')
ax2.set_title('V12 Distribution \n (Fraud Transactions)', fontsize=14)
v10_fraud_dist = new_df['V10'].loc[new_df['Class'] == 1].values
sns.distplot(v10_fraud_dist,ax=ax3, fit=norm, color='#C5B3F9')
ax3.set_title('V10 Distribution \n (Fraud Transactions)', fontsize=14)
plt.show()
In [17]:

f,(ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20,6))
colors = ['#B3F9C5', '#f9c5b3']
# Boxplots with outliers removed
# Feature V14
sns.boxplot(x="Class", y="V14", data=new_df,ax=ax1, palette=colors)
ax1.set_title("V14 Feature \n Reduction of outliers", fontsize=14)
ax1.annotate('Fewer extreme \n outliers', xy=(0.98, -17.5), xytext=(0, -12),
arrowprops=dict(facecolor='black'),
fontsize=14)
# Feature 12
sns.boxplot(x="Class", y="V12", data=new_df, ax=ax2, palette=colors)
ax2.set_title("V12 Feature \n Reduction of outliers", fontsize=14)
ax2.annotate('Fewer extreme \n outliers', xy=(0.98, -17.3), xytext=(0, -12),
arrowprops=dict(facecolor='black'),
fontsize=14)
# Feature V10
sns.boxplot(x="Class", y="V10", data=new_df, ax=ax3, palette=colors)
ax3.set_title("V10 Feature \n Reduction of outliers", fontsize=14)
ax3.annotate('Fewer extreme \n outliers', xy=(0.95, -16.5), xytext=(0, -12),
arrowprops=dict(facecolor='black'),
fontsize=14)
plt.show()
In [18]:

# New_df is from the random undersample data (fewer instances)
X = new_df.drop('Class', axis=1)
y = new_df['Class']
# T-SNE Implementation
t0 = time.time()
X_reduced_tsne = TSNE(n_components=2, random_state=42).fit_transform(X.values)
t1 = time.time()
print("T-SNE took {:.2} s".format(t1 - t0))
# PCA Implementation
t0 = time.time()
X_reduced_pca = PCA(n_components=2, random_state=42).fit_transform(X.values)
t1 = time.time()
print("PCA took {:.2} s".format(t1 - t0))
# TruncatedSVD
t0 = time.time()
X_reduced_svd = TruncatedSVD(n_components=2, algorithm='randomized', random_state=42).fit_transform(X.values)
t1 = time.time()
print("Truncated SVD took {:.2} s".format(t1 - t0))
T-SNE took 6.2 s
PCA took 0.021 s
Truncated SVD took 0.0045 s
In [0]:

# Classifiers

In [0]:

# Undersampling before cross validating (prone to overfit)
X = new_df.drop('Class', axis=1)
y = new_df['Class']

In [0]:

# Our data is already scaled we should split our training and test sets
from sklearn.model_selection import train_test_split
# This is explicitly used for undersampling.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

In [0]:

# Turn the values into an array for feeding the classification algorithms.
X_train = X_train.values
X_test = X_test.values
y_train = y_train.values
y_test = y_test.values

In [0]:

from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier

In [0]:

# Let's implement simple classifiers
classifiers = {
"LogisiticRegression": LogisticRegression(),
"KNearest": KNeighborsClassifier(),
"Support Vector Classifier": SVC(),
"DecisionTreeClassifier": DecisionTreeClassifier(),
"GradientBoostingClassifier":GradientBoostingClassifier(),
"RandomForestClassifier":RandomForestClassifier(),
"DecisionTreeClassifier":DecisionTreeClassifier()
}

In [27]:

# Wow our scores are getting even high scores even when applying cross validation.
from sklearn.model_selection import cross_val_score
for key, classifier in classifiers.items():
classifier.fit(X_train, y_train)
training_score = cross_val_score(classifier, X_train, y_train, cv=5)
print("Classifiers: ", classifier.__class__.__name__, "Has a training score of", round(training_score.mean(), 2) * 100, "% accuracy score")
Classifiers: LogisticRegression Has a training score of 93.0 % accuracy score
Classifiers: KNeighborsClassifier Has a training score of 94.0 % accuracy score
Classifiers: SVC Has a training score of 94.0 % accuracy score
Classifiers: DecisionTreeClassifier Has a training score of 92.0 % accuracy score
Classifiers: GradientBoostingClassifier Has a training score of 94.0 % accuracy score
Classifiers: RandomForestClassifier Has a training score of 94.0 % accuracy score
In [0]:

# Use GridSearchCV to find the best parameters.
from sklearn.model_selection import GridSearchCV
# Logistic Regression
log_reg_params = {"penalty": ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
grid_log_reg = GridSearchCV(LogisticRegression(), log_reg_params)
grid_log_reg.fit(X_train, y_train)
# We automatically get the logistic regression with the best parameters.
log_reg = grid_log_reg.best_estimator_
knears_params = {"n_neighbors": list(range(2,5,1)), 'algorithm': ['auto', 'ball_tree', 'kd_tree', 'brute']}
grid_knears = GridSearchCV(KNeighborsClassifier(), knears_params)
grid_knears.fit(X_train, y_train)
# KNears best estimator
knears_neighbors = grid_knears.best_estimator_
# Support Vector Classifier
svc_params = {'C': [0.5, 0.7, 0.9, 1], 'kernel': ['rbf', 'poly', 'sigmoid', 'linear']}
grid_svc = GridSearchCV(SVC(), svc_params)
grid_svc.fit(X_train, y_train)
# SVC best estimator
svc = grid_svc.best_estimator_
# DecisionTree Classifier
tree_params = {"criterion": ["gini", "entropy"], "max_depth": list(range(2,4,1)),
"min_samples_leaf": list(range(5,7,1))}
grid_tree = GridSearchCV(DecisionTreeClassifier(), tree_params)
grid_tree.fit(X_train, y_train)
# tree best estimator
tree_clf = grid_tree.best_estimator_

In [29]:

# Overfitting Case
log_reg_score = cross_val_score(log_reg, X_train, y_train, cv=5)
print('Logistic Regression Cross Validation Score: ', round(log_reg_score.mean() * 100, 2).astype(str) + '%')
knears_score = cross_val_score(knears_neighbors, X_train, y_train, cv=5)
print('Knears Neighbors Cross Validation Score', round(knears_score.mean() * 100, 2).astype(str) + '%')
svc_score = cross_val_score(svc, X_train, y_train, cv=5)
print('Support Vector Classifier Cross Validation Score', round(svc_score.mean() * 100, 2).astype(str) + '%')
tree_score = cross_val_score(tree_clf, X_train, y_train, cv=5)
print('DecisionTree Classifier Cross Validation Score', round(tree_score.mean() * 100, 2).astype(str) + '%')
Logistic Regression Cross Validation Score: 93.91%
Knears Neighbors Cross Validation Score 93.78%
Support Vector Classifier Cross Validation Score 93.52%
DecisionTree Classifier Cross Validation Score 93.4%
In [30]:

# We will undersample during cross validating
undersample_X = df.drop('Class', axis=1)
undersample_y = df['Class']
for train_index, test_index in sss.split(undersample_X, undersample_y):
print("Train:", train_index, "Test:", test_index)
undersample_Xtrain, undersample_Xtest = undersample_X.iloc[train_index], undersample_X.iloc[test_index]
undersample_ytrain, undersample_ytest = undersample_y.iloc[train_index], undersample_y.iloc[test_index]

undersample_Xtrain = undersample_Xtrain.values
undersample_Xtest = undersample_Xtest.values
undersample_ytrain = undersample_ytrain.values
undersample_ytest = undersample_ytest.values
undersample_accuracy = []
undersample_precision = []
undersample_recall = []
undersample_f1 = []
undersample_auc = []
# Implementing NearMiss Technique
# Distribution of NearMiss (Just to see how it distributes the labels we won't use these variables)
X_nearmiss, y_nearmiss = NearMiss().fit_sample(undersample_X.values, undersample_y.values)
print('NearMiss Label Distribution: {}'.format(Counter(y_nearmiss)))
# Cross Validating the right way
for train, test in sss.split(undersample_Xtrain, undersample_ytrain):
undersample_pipeline = imbalanced_make_pipeline(NearMiss(sampling_strategy='majority'), log_reg) # SMOTE happens during Cross Validation not before..
undersample_model = undersample_pipeline.fit(undersample_Xtrain[train], undersample_ytrain[train])
undersample_prediction = undersample_model.predict(undersample_Xtrain[test])

undersample_accuracy.append(undersample_pipeline.score(original_Xtrain[test], original_ytrain[test]))
undersample_precision.append(precision_score(original_ytrain[test], undersample_prediction))
undersample_recall.append(recall_score(original_ytrain[test], undersample_prediction))
undersample_f1.append(f1_score(original_ytrain[test], undersample_prediction))
undersample_auc.append(roc_auc_score(original_ytrain[test], undersample_prediction))
Train: [ 56955 56956 56957 ... 284804 284805 284806] Test: [ 0 1 2 ... 62025 62116 62782]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [ 56955 56956 56957 ... 113925 113926 113927]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [112573 113154 113303 ... 170882 170916 171814]
Train: [ 0 1 2 ... 284804 284805 284806] Test: [170883 170884 170885 ... 227858 227859 227860]
Train: [ 0 1 2 ... 227858 227859 227860] Test: [218173 218495 218735 ... 284804 284805 284806]
NearMiss Label Distribution: Counter({0: 492, 1: 492})
In [32]:

# Let's Plot LogisticRegression Learning Curve
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import learning_curve
def plot_learning_curve(estimator1, estimator2, estimator3, estimator4, X, y, ylim=None, cv=None,
n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5)):
f, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2,2, figsize=(20,14), sharey=True)
if ylim is not None:
plt.ylim(*ylim)
# First Estimator
train_sizes, train_scores, test_scores = learning_curve(
estimator1, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
ax1.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.1,
color="#ff9124")
ax1.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.1, color="#2492ff")
ax1.plot(train_sizes, train_scores_mean, 'o-', color="#ff9124",
label="Training score")
ax1.plot(train_sizes, test_scores_mean, 'o-', color="#2492ff",
label="Cross-validation score")
ax1.set_title("Logistic Regression Learning Curve", fontsize=14)
ax1.set_xlabel('Training size (m)')
ax1.set_ylabel('Score')
ax1.grid(True)
ax1.legend(loc="best")

# Second Estimator
train_sizes, train_scores, test_scores = learning_curve(
estimator2, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
ax2.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.1,
color="#ff9124")
ax2.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.1, color="#2492ff")
ax2.plot(train_sizes, train_scores_mean, 'o-', color="#ff9124",
label="Training score")
ax2.plot(train_sizes, test_scores_mean, 'o-', color="#2492ff",
label="Cross-validation score")
ax2.set_title("Knears Neighbors Learning Curve", fontsize=14)
ax2.set_xlabel('Training size (m)')
ax2.set_ylabel('Score')
ax2.grid(True)
ax2.legend(loc="best")

# Third Estimator
train_sizes, train_scores, test_scores = learning_curve(
estimator3, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
ax3.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.1,
color="#ff9124")
ax3.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.1, color="#2492ff")
ax3.plot(train_sizes, train_scores_mean, 'o-', color="#ff9124",
label="Training score")
ax3.plot(train_sizes, test_scores_mean, 'o-', color="#2492ff",
label="Cross-validation score")
ax3.set_title("Support Vector Classifier \n Learning Curve", fontsize=14)
ax3.set_xlabel('Training size (m)')
ax3.set_ylabel('Score')
ax3.grid(True)
ax3.legend(loc="best")

# Fourth Estimator
train_sizes, train_scores, test_scores = learning_curve(
estimator4, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores, axis=1)
train_scores_std = np.std(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
test_scores_std = np.std(test_scores, axis=1)
ax4.fill_between(train_sizes, train_scores_mean - train_scores_std,
train_scores_mean + train_scores_std, alpha=0.1,
color="#ff9124")
ax4.fill_between(train_sizes, test_scores_mean - test_scores_std,
test_scores_mean + test_scores_std, alpha=0.1, color="#2492ff")
ax4.plot(train_sizes, train_scores_mean, 'o-', color="#ff9124",
label="Training score")
ax4.plot(train_sizes, test_scores_mean, 'o-', color="#2492ff",
label="Cross-validation score")
ax4.set_title("Decision Tree Classifier \n Learning Curve", fontsize=14)
ax4.set_xlabel('Training size (m)')
ax4.set_ylabel('Score')
ax4.grid(True)
ax4.legend(loc="best")
return plt
cv = ShuffleSplit(n_splits=100, test_size=0.2, random_state=42)
plot_learning_curve(log_reg, knears_neighbors, svc, tree_clf, X_train, y_train, (0.87, 1.01), cv=cv, n_jobs=4)

Out[32]:


In [0]:

from sklearn.metrics import roc_curve
from sklearn.model_selection import cross_val_predict
# Create a DataFrame with all the scores and the classifiers names.
log_reg_pred = cross_val_predict(log_reg, X_train, y_train, cv=5,
method="decision_function")
knears_pred = cross_val_predict(knears_neighbors, X_train, y_train, cv=5)
svc_pred = cross_val_predict(svc, X_train, y_train, cv=5,
method="decision_function")
tree_pred = cross_val_predict(tree_clf, X_train, y_train, cv=5)

In [34]:

from sklearn.metrics import roc_auc_score
print('Logistic Regression: ', roc_auc_score(y_train, log_reg_pred))
print('KNears Neighbors: ', roc_auc_score(y_train, knears_pred))
print('Support Vector Classifier: ', roc_auc_score(y_train, svc_pred))
print('Decision Tree Classifier: ', roc_auc_score(y_train, tree_pred))
Logistic Regression: 0.9771960442117512
KNears Neighbors: 0.9361612048348524
Support Vector Classifier: 0.9823411544179432
Decision Tree Classifier: 0.9332008273544051
In [0]:

from sklearn.metrics import roc_curve
from sklearn.model_selection import cross_val_predict
# Create a DataFrame with all the scores and the classifiers names.
log_reg_pred = cross_val_predict(log_reg, X_train, y_train, cv=5,
method="decision_function")
knears_pred = cross_val_predict(knears_neighbors, X_train, y_train, cv=5)
svc_pred = cross_val_predict(svc, X_train, y_train, cv=5,
method="decision_function")
tree_pred = cross_val_predict(tree_clf, X_train, y_train, cv=5)

In [36]:

from sklearn.metrics import roc_auc_score
print('Logistic Regression: ', roc_auc_score(y_train, log_reg_pred))
print('KNears Neighbors: ', roc_auc_score(y_train, knears_pred))
print('Support Vector Classifier: ', roc_auc_score(y_train, svc_pred))
print('Decision Tree Classifier: ', roc_auc_score(y_train, tree_pred))
Logistic Regression: 0.9771960442117512
KNears Neighbors: 0.9361612048348524
Support Vector Classifier: 0.9823411544179432
Decision Tree Classifier: 0.9332008273544051
In [37]:

log_fpr, log_tpr, log_thresold = roc_curve(y_train, log_reg_pred)
knear_fpr, knear_tpr, knear_threshold = roc_curve(y_train, knears_pred)
svc_fpr, svc_tpr, svc_threshold = roc_curve(y_train, svc_pred)
tree_fpr, tree_tpr, tree_threshold = roc_curve(y_train, tree_pred)
def graph_roc_curve_multiple(log_fpr, log_tpr, knear_fpr, knear_tpr, svc_fpr, svc_tpr, tree_fpr, tree_tpr):
plt.figure(figsize=(16,8))
plt.title('ROC Curve \n Top 4 Classifiers', fontsize=18)
plt.plot(log_fpr, log_tpr, label='Logistic Regression Classifier Score: {:.4f}'.format(roc_auc_score(y_train, log_reg_pred)))
plt.plot(knear_fpr, knear_tpr, label='KNears Neighbors Classifier Score: {:.4f}'.format(roc_auc_score(y_train, knears_pred)))
plt.plot(svc_fpr, svc_tpr, label='Support Vector Classifier Score: {:.4f}'.format(roc_auc_score(y_train, svc_pred)))
plt.plot(tree_fpr, tree_tpr, label='Decision Tree Classifier Score: {:.4f}'.format(roc_auc_score(y_train, tree_pred)))
plt.plot([0, 1], [0, 1], 'k--')
plt.axis([-0.01, 1, 0, 1])
plt.xlabel('False Positive Rate', fontsize=16)
plt.ylabel('True Positive Rate', fontsize=16)
plt.annotate('Minimum ROC Score of 50% \n (This is the minimum score to get)', xy=(0.5, 0.5), xytext=(0.6, 0.3),
arrowprops=dict(facecolor='#6E726D', shrink=0.05),
)
plt.legend()

graph_roc_curve_multiple(log_fpr, log_tpr, knear_fpr, knear_tpr, svc_fpr, svc_tpr, tree_fpr, tree_tpr)
plt.show()
In [38]:

def logistic_roc_curve(log_fpr, log_tpr):
plt.figure(figsize=(12,8))
plt.title('Logistic Regression ROC Curve', fontsize=16)
plt.plot(log_fpr, log_tpr, 'b-', linewidth=2)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlabel('False Positive Rate', fontsize=16)
plt.ylabel('True Positive Rate', fontsize=16)
plt.axis([-0.01,1,0,1])


logistic_roc_curve(log_fpr, log_tpr)
plt.show()
In [0]:

from sklearn.metrics import precision_recall_curve
precision, recall, threshold = precision_recall_curve(y_train, log_reg_pred)

In [40]:

y_pred = log_reg.predict(X_train)
# Overfitting Case
print('---' * 45)
print('Overfitting: \n')
print('Recall Score: {:.2f}'.format(recall_score(y_train, y_pred)))
print('Precision Score: {:.2f}'.format(precision_score(y_train, y_pred)))
print('F1 Score: {:.2f}'.format(f1_score(y_train, y_pred)))
print('Accuracy Score: {:.2f}'.format(accuracy_score(y_train, y_pred)))
print('---' * 45)
# How it should look like
print('---' * 45)
print('How it should be:\n')
print("Accuracy Score: {:.2f}".format(np.mean(undersample_accuracy)))
print("Precision Score: {:.2f}".format(np.mean(undersample_precision)))
print("Recall Score: {:.2f}".format(np.mean(undersample_recall)))
print("F1 Score: {:.2f}".format(np.mean(undersample_f1)))
print('---' * 45)
---------------------------------------------------------------------------------------------------------------------------------------
Overfitting:
Recall Score: 0.92
Precision Score: 0.77
F1 Score: 0.84
Accuracy Score: 0.83
---------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------
How it should be:
Accuracy Score: 0.83
Precision Score: 0.00
Recall Score: 0.18
F1 Score: 0.00
---------------------------------------------------------------------------------------------------------------------------------------
In [41]:

undersample_y_score = log_reg.decision_function(original_Xtest)
from sklearn.metrics import average_precision_score
undersample_average_precision = average_precision_score(original_ytest, undersample_y_score)
print('Average precision-recall score: {0:0.2f}'.format(
undersample_average_precision))
Average precision-recall score: 0.05
In [42]:

from sklearn.metrics import precision_recall_curve
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(12,6))
precision, recall, _ = precision_recall_curve(original_ytest, undersample_y_score)
plt.step(recall, precision, color='#004a93', alpha=0.2,
where='post')
plt.fill_between(recall, precision, step='post', alpha=0.2,
color='#48a6ff')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.ylim([0.0, 1.05])
plt.xlim([0.0, 1.0])
plt.title('UnderSampling Precision-Recall curve: \n Average Precision-Recall Score ={0:0.2f}'.format(
undersample_average_precision), fontsize=16)

Out[42]:
Text(0.5, 1.0, 'UnderSampling Precision-Recall curve: \n Average Precision-Recall Score =0.05')

In [43]:

from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split, RandomizedSearchCV
print('Length of X (train): {} | Length of y (train): {}'.format(len(original_Xtrain), len(original_ytrain)))
print('Length of X (test): {} | Length of y (test): {}'.format(len(original_Xtest), len(original_ytest)))
# List to append the score and then find the average
accuracy_lst = []
precision_lst = []
recall_lst = []
f1_lst = []
auc_lst = []
# Classifier with optimal parameters
# log_reg_sm = grid_log_reg.best_estimator_
log_reg_sm = LogisticRegression()
rand_log_reg = RandomizedSearchCV(LogisticRegression(), log_reg_params, n_iter=4)
# Implementing SMOTE Technique
# Cross Validating the right way
# Parameters
log_reg_params = {"penalty": ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]}
for train, test in sss.split(original_Xtrain, original_ytrain):
pipeline = imbalanced_make_pipeline(SMOTE(sampling_strategy='minority'), rand_log_reg) # SMOTE happens during Cross Validation not before..
model = pipeline.fit(original_Xtrain[train], original_ytrain[train])
best_est = rand_log_reg.best_estimator_
prediction = best_est.predict(original_Xtrain[test])

accuracy_lst.append(pipeline.score(original_Xtrain[test], original_ytrain[test]))
precision_lst.append(precision_score(original_ytrain[test], prediction))
recall_lst.append(recall_score(original_ytrain[test], prediction))
f1_lst.append(f1_score(original_ytrain[test], prediction))
auc_lst.append(roc_auc_score(original_ytrain[test], prediction))

print('---' * 45)
print('')
print("accuracy: {}".format(np.mean(accuracy_lst)))
print("precision: {}".format(np.mean(precision_lst)))
print("recall: {}".format(np.mean(recall_lst)))
print("f1: {}".format(np.mean(f1_lst)))
print('---' * 45)
Length of X (train): 227846 | Length of y (train): 227846
Length of X (test): 56961 | Length of y (test): 56961
---------------------------------------------------------------------------------------------------------------------------------------
accuracy: 0.9419351252041981
precision: 0.06018427458248645
recall: 0.9111976630963973
f1: 0.11112620278189447
---------------------------------------------------------------------------------------------------------------------------------------
In [44]:

labels = ['No Fraud', 'Fraud']
smote_prediction = best_est.predict(original_Xtest)
print(classification_report(original_ytest, smote_prediction, target_names=labels))
precision recall f1-score support
No Fraud 1.00 0.99 0.99 56863
Fraud 0.11 0.86 0.20 98
accuracy 0.99 56961
macro avg 0.55 0.92 0.59 56961
weighted avg 1.00 0.99 0.99 56961
In [45]:

y_score = best_est.decision_function(original_Xtest)
average_precision = average_precision_score(original_ytest, y_score)
print('Average precision-recall score: {0:0.2f}'.format(
average_precision))
fig = plt.figure(figsize=(12,6))
precision, recall, _ = precision_recall_curve(original_ytest, y_score)
plt.step(recall, precision, color='r', alpha=0.2,
where='post')
plt.fill_between(recall, precision, step='post', alpha=0.2,
color='#F59B00')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.ylim([0.0, 1.05])
plt.xlim([0.0, 1.0])
plt.title('OverSampling Precision-Recall curve: \n Average Precision-Recall Score ={0:0.2f}'.format(
average_precision), fontsize=16)
Average precision-recall score: 0.74
Out[45]:
Text(0.5, 1.0, 'OverSampling Precision-Recall curve: \n Average Precision-Recall Score =0.74')

In [0]:

# SMOTE Technique (OverSampling) After splitting and Cross Validating
sm = SMOTE(ratio='minority', random_state=42)
# Xsm_train, ysm_train = sm.fit_sample(X_train, y_train)
# This will be the data were we are going to
Xsm_train, ysm_train = sm.fit_sample(original_Xtrain, original_ytrain)

In [47]:

# We Improve the score by 2% points approximately
# Implement GridSearchCV and the other models.
# Logistic Regression
t0 = time.time()
log_reg_sm = grid_log_reg.best_estimator_
log_reg_sm.fit(Xsm_train, ysm_train)
t1 = time.time()
print("Fitting oversample data took :{} sec".format(t1 - t0))
Fitting oversample data took :9.559972286224365 sec
In [48]:

from sklearn.metrics import confusion_matrix
# Logistic Regression fitted using SMOTE technique
y_pred_log_reg = log_reg_sm.predict(X_test)
# Other models fitted with UnderSampling
y_pred_knear = knears_neighbors.predict(X_test)
y_pred_svc = svc.predict(X_test)
y_pred_tree = tree_clf.predict(X_test)
log_reg_cf = confusion_matrix(y_test, y_pred_log_reg)
kneighbors_cf = confusion_matrix(y_test, y_pred_knear)
svc_cf = confusion_matrix(y_test, y_pred_svc)
tree_cf = confusion_matrix(y_test, y_pred_tree)
fig, ax = plt.subplots(2, 2,figsize=(22,12))
sns.heatmap(log_reg_cf, ax=ax[0][0], annot=True, cmap=plt.cm.copper)
ax[0, 0].set_title("Logistic Regression \n Confusion Matrix", fontsize=14)
ax[0, 0].set_xticklabels(['', ''], fontsize=14, rotation=90)
ax[0, 0].set_yticklabels(['', ''], fontsize=14, rotation=360)
sns.heatmap(kneighbors_cf, ax=ax[0][1], annot=True, cmap=plt.cm.copper)
ax[0][1].set_title("KNearsNeighbors \n Confusion Matrix", fontsize=14)
ax[0][1].set_xticklabels(['', ''], fontsize=14, rotation=90)
ax[0][1].set_yticklabels(['', ''], fontsize=14, rotation=360)
sns.heatmap(svc_cf, ax=ax[1][0], annot=True, cmap=plt.cm.copper)
ax[1][0].set_title("Suppor Vector Classifier \n Confusion Matrix", fontsize=14)
ax[1][0].set_xticklabels(['', ''], fontsize=14, rotation=90)
ax[1][0].set_yticklabels(['', ''], fontsize=14, rotation=360)
sns.heatmap(tree_cf, ax=ax[1][1], annot=True, cmap=plt.cm.copper)
ax[1][1].set_title("DecisionTree Classifier \n Confusion Matrix", fontsize=14)
ax[1][1].set_xticklabels(['', ''], fontsize=14, rotation=90)
ax[1][1].set_yticklabels(['', ''], fontsize=14, rotation=360)
plt.show()
In [49]:

from sklearn.metrics import classification_report
print('Logistic Regression:')
print(classification_report(y_test, y_pred_log_reg))
print('KNears Neighbors:')
print(classification_report(y_test, y_pred_knear))
print('Support Vector Classifier:')
print(classification_report(y_test, y_pred_svc))
print('Support Vector Classifier:')
print(classification_report(y_test, y_pred_tree))
Logistic Regression:
precision recall f1-score support
0 0.90 0.94 0.92 87
1 0.95 0.92 0.94 110
accuracy 0.93 197
macro avg 0.93 0.93 0.93 197
weighted avg 0.93 0.93 0.93 197
KNears Neighbors:
precision recall f1-score support
0 0.87 0.92 0.89 87
1 0.93 0.89 0.91 110
accuracy 0.90 197
macro avg 0.90 0.91 0.90 197
weighted avg 0.91 0.90 0.90 197
Support Vector Classifier:
precision recall f1-score support
0 0.86 0.94 0.90 87
1 0.95 0.88 0.92 110
accuracy 0.91 197
macro avg 0.91 0.91 0.91 197
weighted avg 0.91 0.91 0.91 197
Support Vector Classifier:
precision recall f1-score support
0 0.89 0.93 0.91 87
1 0.94 0.91 0.93 110
accuracy 0.92 197
macro avg 0.92 0.92 0.92 197
weighted avg 0.92 0.92 0.92 197
Neural Nets and other stuff¶
In [50]:

import keras
from keras import backend as K
from keras.models import Sequential
from keras.layers import Activation
from keras.layers.core import Dense
from keras.optimizers import Adam
from keras.metrics import categorical_crossentropy
n_inputs = X_train.shape[1]
undersample_model = Sequential([
Dense(n_inputs, input_shape=(n_inputs, ), activation='relu'),
Dense(32, activation='relu'),
Dense(2, activation='softmax')
])
Using TensorFlow backend.
In [51]:

undersample_model.summary()
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 30) 930
_________________________________________________________________
dense_2 (Dense) (None, 32) 992
_________________________________________________________________
dense_3 (Dense) (None, 2) 66
=================================================================
Total params: 1,988
Trainable params: 1,988
Non-trainable params: 0
_________________________________________________________________
In [0]:

undersample_model.compile(Adam(lr=0.001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

In [53]:

undersample_model.fit(X_train, y_train, validation_split=0.2, batch_size=25, epochs=20, shuffle=True, verbose=2)
Train on 629 samples, validate on 158 samples
Epoch 1/20
- 0s - loss: 0.4561 - accuracy: 0.8283 - val_loss: 0.3323 - val_accuracy: 0.8671
Epoch 2/20
- 0s - loss: 0.2677 - accuracy: 0.9046 - val_loss: 0.2636 - val_accuracy: 0.9177
Epoch 3/20
- 0s - loss: 0.2158 - accuracy: 0.9316 - val_loss: 0.2330 - val_accuracy: 0.9304
Epoch 4/20
- 0s - loss: 0.1805 - accuracy: 0.9412 - val_loss: 0.2107 - val_accuracy: 0.9177
Epoch 5/20
- 0s - loss: 0.1608 - accuracy: 0.9444 - val_loss: 0.1956 - val_accuracy: 0.9304
Epoch 6/20
- 0s - loss: 0.1436 - accuracy: 0.9507 - val_loss: 0.1883 - val_accuracy: 0.9304
Epoch 7/20
- 0s - loss: 0.1334 - accuracy: 0.9523 - val_loss: 0.1792 - val_accuracy: 0.9177
Epoch 8/20
- 0s - loss: 0.1237 - accuracy: 0.9539 - val_loss: 0.1754 - val_accuracy: 0.9114
Epoch 9/20
- 0s - loss: 0.1157 - accuracy: 0.9539 - val_loss: 0.1701 - val_accuracy: 0.9177
Epoch 10/20
- 0s - loss: 0.1078 - accuracy: 0.9555 - val_loss: 0.1686 - val_accuracy: 0.9177
Epoch 11/20
- 0s - loss: 0.1019 - accuracy: 0.9555 - val_loss: 0.1646 - val_accuracy: 0.9177
Epoch 12/20
- 0s - loss: 0.0958 - accuracy: 0.9634 - val_loss: 0.1637 - val_accuracy: 0.9177
Epoch 13/20
- 0s - loss: 0.0917 - accuracy: 0.9650 - val_loss: 0.1601 - val_accuracy: 0.9304
Epoch 14/20
- 0s - loss: 0.0867 - accuracy: 0.9698 - val_loss: 0.1595 - val_accuracy: 0.9241
Epoch 15/20
- 0s - loss: 0.0813 - accuracy: 0.9714 - val_loss: 0.1615 - val_accuracy: 0.9177
Epoch 16/20
- 0s - loss: 0.0786 - accuracy: 0.9634 - val_loss: 0.1583 - val_accuracy: 0.9114
Epoch 17/20
- 0s - loss: 0.0746 - accuracy: 0.9730 - val_loss: 0.1556 - val_accuracy: 0.9177
Epoch 18/20
- 0s - loss: 0.0692 - accuracy: 0.9714 - val_loss: 0.1565 - val_accuracy: 0.9177
Epoch 19/20
- 0s - loss: 0.0654 - accuracy: 0.9746 - val_loss: 0.1584 - val_accuracy: 0.9177
Epoch 20/20
- 0s - loss: 0.0628 - accuracy: 0.9746 - val_loss: 0.1576 - val_accuracy: 0.9304
Out[53]:

In [0]:

undersample_predictions = undersample_model.predict(original_Xtest, batch_size=200, verbose=0)

In [0]:

undersample_fraud_predictions = undersample_model.predict_classes(original_Xtest, batch_size=200, verbose=0)

In [0]:

import itertools
# Create a confusion matrix
def plot_confusion_matrix(cm, classes,
normalize=False,
title='Confusion matrix',
cmap=plt.cm.Blues):
"""
This function prints and plots the confusion matrix.
Normalization can be applied by setting `normalize=True`.
"""
if normalize:
cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
print("Normalized confusion matrix")
else:
print('Confusion matrix, without normalization')
print(cm)
plt.imshow(cm, interpolation='nearest', cmap=cmap)
plt.title(title, fontsize=14)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
fmt = '.2f' if normalize else 'd'
thresh = cm.max() / 2.
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, format(cm[i, j], fmt),
horizontalalignment="center",
color="white" if cm[i, j] > thresh else "black")
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')

In [57]:

undersample_cm = confusion_matrix(original_ytest, undersample_fraud_predictions)
actual_cm = confusion_matrix(original_ytest, original_ytest)
labels = ['No Fraud', 'Fraud']
fig = plt.figure(figsize=(16,8))
fig.add_subplot(221)
plot_confusion_matrix(undersample_cm, labels, title="Random UnderSample \n Confusion Matrix", cmap=plt.cm.Reds)
fig.add_subplot(222)
plot_confusion_matrix(actual_cm, labels, title="Confusion Matrix \n (with 100% accuracy)", cmap=plt.cm.Greens)
Confusion matrix, without normalization
[[54584 2279]
[ 9 89]]
Confusion matrix, without normalization
[[56863 0]
[ 0 98]]

In [0]:

n_inputs = Xsm_train.shape[1]
oversample_model = Sequential([
Dense(n_inputs, input_shape=(n_inputs, ), activation='relu'),
Dense(32, activation='relu'),
Dense(2, activation='softmax')
])

In [0]:

oversample_model.compile(Adam(lr=0.001), loss='sparse_categorical_crossentropy', metrics=['accuracy'])

In [60]:

oversample_model.fit(Xsm_train, ysm_train, validation_split=0.2, batch_size=300, epochs=20, shuffle=True, verbose=2)
Train on 363923 samples, validate on 90981 samples
Epoch 1/20
- 2s - loss: 0.0624 - accuracy: 0.9765 - val_loss: 0.0155 - val_accuracy: 0.9973
Epoch 2/20
- 2s - loss: 0.0126 - accuracy: 0.9974 - val_loss: 0.0075 - val_accuracy: 1.0000
Epoch 3/20
- 2s - loss: 0.0072 - accuracy: 0.9986 - val_loss: 0.0037 - val_accuracy: 1.0000
Epoch 4/20
- 2s - loss: 0.0052 - accuracy: 0.9990 - val_loss: 0.0024 - val_accuracy: 1.0000
Epoch 5/20
- 2s - loss: 0.0038 - accuracy: 0.9993 - val_loss: 0.0018 - val_accuracy: 1.0000
Epoch 6/20
- 2s - loss: 0.0032 - accuracy: 0.9994 - val_loss: 6.7341e-04 - val_accuracy: 1.0000
Epoch 7/20
- 2s - loss: 0.0027 - accuracy: 0.9995 - val_loss: 0.0012 - val_accuracy: 0.9999
Epoch 8/20
- 2s - loss: 0.0026 - accuracy: 0.9995 - val_loss: 5.4168e-04 - val_accuracy: 1.0000
Epoch 9/20
- 2s - loss: 0.0020 - accuracy: 0.9996 - val_loss: 0.0030 - val_accuracy: 0.9999
Epoch 10/20
- 2s - loss: 0.0018 - accuracy: 0.9997 - val_loss: 0.0013 - val_accuracy: 0.9999
Epoch 11/20
- 2s - loss: 0.0018 - accuracy: 0.9996 - val_loss: 4.5583e-04 - val_accuracy: 1.0000
Epoch 12/20
- 2s - loss: 0.0014 - accuracy: 0.9997 - val_loss: 3.1518e-04 - val_accuracy: 1.0000
Epoch 13/20
- 2s - loss: 0.0013 - accuracy: 0.9997 - val_loss: 3.5381e-04 - val_accuracy: 1.0000
Epoch 14/20
- 2s - loss: 0.0012 - accuracy: 0.9997 - val_loss: 8.6079e-04 - val_accuracy: 1.0000
Epoch 15/20
- 2s - loss: 0.0012 - accuracy: 0.9998 - val_loss: 2.2759e-04 - val_accuracy: 1.0000
Epoch 16/20
- 2s - loss: 0.0011 - accuracy: 0.9997 - val_loss: 4.8317e-04 - val_accuracy: 1.0000
Epoch 17/20
- 2s - loss: 0.0010 - accuracy: 0.9998 - val_loss: 3.2697e-04 - val_accuracy: 1.0000
Epoch 18/20
- 2s - loss: 0.0011 - accuracy: 0.9998 - val_loss: 2.1950e-04 - val_accuracy: 1.0000
Epoch 19/20
- 2s - loss: 8.0063e-04 - accuracy: 0.9998 - val_loss: 1.4108e-04 - val_accuracy: 1.0000
Epoch 20/20
- 2s - loss: 9.2644e-04 - accuracy: 0.9998 - val_loss: 0.0013 - val_accuracy: 1.0000
Out[60]:

In [0]:

oversample_predictions = oversample_model.predict(original_Xtest, batch_size=200, verbose=0)

In [0]:

oversample_fraud_predictions = oversample_model.predict_classes(original_Xtest, batch_size=200, verbose=0)

In [63]:

oversample_smote = confusion_matrix(original_ytest, oversample_fraud_predictions)
actual_cm = confusion_matrix(original_ytest, original_ytest)
labels = ['No Fraud', 'Fraud']
fig = plt.figure(figsize=(16,8))
fig.add_subplot(221)
plot_confusion_matrix(oversample_smote, labels, title="OverSample (SMOTE) \n Confusion Matrix", cmap=plt.cm.Oranges)
fig.add_subplot(222)
plot_confusion_matrix(actual_cm, labels, title="Confusion Matrix \n (with 100% accuracy)", cmap=plt.cm.Greens)
Confusion matrix, without normalization
[[56848 15]
[ 30 68]]
Confusion matrix, without normalization
[[56863 0]
[ 0 98]]

Implementing SMOTE on our imbalanced dataset helped us with the imbalance of our labels (more no fraud than fraud transactions). Nevertheless, I still have to state that sometimes the neural network on the oversampled dataset predicts less correct fraud transactions than our model using the undersample dataset. However, remember that the removal of outliers was implemented only on the random undersample dataset and not on the oversampled one. Also, in our undersample data our model is unable to detect for a large number of cases non fraud transactions correctly and instead, misclassifies those non fraud transactions as fraud cases. Imagine that people that were making regular purchases got their card blocked due to the reason that our model classified that transaction as a fraud transaction, this will be a huge disadvantage for the financial institution. The number of customer complaints and customer disatisfaction will increase. The next step of this analysis will be to do an outlier removal on our oversample dataset and see if our accuracy in the test set improves.
Autoencoder¶
In [0]:

import numpy as np
import pandas as pd
import zipfile
from keras.preprocessing.image import ImageDataGenerator, load_img
import tensorflow as tf
from sklearn.preprocessing import StandardScaler
from keras.utils import to_categorical
import matplotlib.pyplot as plt
import random
from subprocess import check_output
from keras.callbacks import EarlyStopping, ReduceLROnPlateau
import os
import pickle
from scipy import stats
import seaborn as sns
from pylab import rcParams
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Model, load_model,Sequential
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.callbacks import ModelCheckpoint, TensorBoard
from tensorflow.keras import regularizers
from sklearn.metrics import confusion_matrix, precision_recall_curve, auc,roc_curve, recall_score, classification_report, f1_score,precision_recall_fscore_support
from sklearn.model_selection import train_test_split
%matplotlib inline

In [65]:

data = pd.read_csv("creditcard.csv")
data.head(10)

Out[65]:
                Time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Amount        Class
        0        0.0        -1.359807        -0.072781        2.536347        1.378155        -0.338321        0.462388        0.239599        0.098698        0.363787        0.090794        -0.551600        -0.617801        -0.991390        -0.311169        1.468177        -0.470401        0.207971        0.025791        0.403993        0.251412        -0.018307        0.277838        -0.110474        0.066928        0.128539        -0.189115        0.133558        -0.021053        149.62        0
        1        0.0        1.191857        0.266151        0.166480        0.448154        0.060018        -0.082361        -0.078803        0.085102        -0.255425        -0.166974        1.612727        1.065235        0.489095        -0.143772        0.635558        0.463917        -0.114805        -0.183361        -0.145783        -0.069083        -0.225775        -0.638672        0.101288        -0.339846        0.167170        0.125895        -0.008983        0.014724        2.69        0
        2        1.0        -1.358354        -1.340163        1.773209        0.379780        -0.503198        1.800499        0.791461        0.247676        -1.514654        0.207643        0.624501        0.066084        0.717293        -0.165946        2.345865        -2.890083        1.109969        -0.121359        -2.261857        0.524980        0.247998        0.771679        0.909412        -0.689281        -0.327642        -0.139097        -0.055353        -0.059752        378.66        0
        3        1.0        -0.966272        -0.185226        1.792993        -0.863291        -0.010309        1.247203        0.237609        0.377436        -1.387024        -0.054952        -0.226487        0.178228        0.507757        -0.287924        -0.631418        -1.059647        -0.684093        1.965775        -1.232622        -0.208038        -0.108300        0.005274        -0.190321        -1.175575        0.647376        -0.221929        0.062723        0.061458        123.50        0
        4        2.0        -1.158233        0.877737        1.548718        0.403034        -0.407193        0.095921        0.592941        -0.270533        0.817739        0.753074        -0.822843        0.538196        1.345852        -1.119670        0.175121        -0.451449        -0.237033        -0.038195        0.803487        0.408542        -0.009431        0.798278        -0.137458        0.141267        -0.206010        0.502292        0.219422        0.215153        69.99        0
        5        2.0        -0.425966        0.960523        1.141109        -0.168252        0.420987        -0.029728        0.476201        0.260314        -0.568671        -0.371407        1.341262        0.359894        -0.358091        -0.137134        0.517617        0.401726        -0.058133        0.068653        -0.033194        0.084968        -0.208254        -0.559825        -0.026398        -0.371427        -0.232794        0.105915        0.253844        0.081080        3.67        0
        6        4.0        1.229658        0.141004        0.045371        1.202613        0.191881        0.272708        -0.005159        0.081213        0.464960        -0.099254        -1.416907        -0.153826        -0.751063        0.167372        0.050144        -0.443587        0.002821        -0.611987        -0.045575        -0.219633        -0.167716        -0.270710        -0.154104        -0.780055        0.750137        -0.257237        0.034507        0.005168        4.99        0
        7        7.0        -0.644269        1.417964        1.074380        -0.492199        0.948934        0.428118        1.120631        -3.807864        0.615375        1.249376        -0.619468        0.291474        1.757964        -1.323865        0.686133        -0.076127        -1.222127        -0.358222        0.324505        -0.156742        1.943465        -1.015455        0.057504        -0.649709        -0.415267        -0.051634        -1.206921        -1.085339        40.80        0
        8        7.0        -0.894286        0.286157        -0.113192        -0.271526        2.669599        3.721818        0.370145        0.851084        -0.392048        -0.410430        -0.705117        -0.110452        -0.286254        0.074355        -0.328783        -0.210077        -0.499768        0.118765        0.570328        0.052736        -0.073425        -0.268092        -0.204233        1.011592        0.373205        -0.384157        0.011747        0.142404        93.20        0
        9        9.0        -0.338262        1.119593        1.044367        -0.222187        0.499361        -0.246761        0.651583        0.069539        -0.736727        -0.366846        1.017614        0.836390        1.006844        -0.443523        0.150219        0.739453        -0.540980        0.476677        0.451773        0.203711        -0.246914        -0.633753        -0.120794        -0.385050        -0.069733        0.094199        0.246219        0.083076        3.68        0
In [66]:

# Check how much examples we have per Class
count_classes = pd.value_counts(data['Class'], sort = True).sort_index()
df = pd.DataFrame({'Class0':count_classes[0], 'Class1*100':count_classes[1]*100}, index=['N']) #
df.plot(kind='bar')
plt.title("Histogram")
plt.xlabel("Class")
plt.ylabel("Count")
print("count for each class : \n\n" + str(count_classes) + "\n")
print ('percent of fraud : ' + str(100*count_classes[1]/(sum(count_classes))) + "%")
count for each class :
0 284315
1 492
Name: Class, dtype: int64
percent of fraud : 0.1727485630620034%

In [67]:

data['Amount'] = StandardScaler().fit_transform(data['Amount'].values.reshape(-1, 1))
#data['Time'] = StandardScaler().fit_transform(data['Time'].values.reshape(-1, 1))
data = data.drop(['Time'],axis=1) #,'Amount'
data.head()

Out[67]:
                V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Amount        Class
        0        -1.359807        -0.072781        2.536347        1.378155        -0.338321        0.462388        0.239599        0.098698        0.363787        0.090794        -0.551600        -0.617801        -0.991390        -0.311169        1.468177        -0.470401        0.207971        0.025791        0.403993        0.251412        -0.018307        0.277838        -0.110474        0.066928        0.128539        -0.189115        0.133558        -0.021053        0.244964        0
        1        1.191857        0.266151        0.166480        0.448154        0.060018        -0.082361        -0.078803        0.085102        -0.255425        -0.166974        1.612727        1.065235        0.489095        -0.143772        0.635558        0.463917        -0.114805        -0.183361        -0.145783        -0.069083        -0.225775        -0.638672        0.101288        -0.339846        0.167170        0.125895        -0.008983        0.014724        -0.342475        0
        2        -1.358354        -1.340163        1.773209        0.379780        -0.503198        1.800499        0.791461        0.247676        -1.514654        0.207643        0.624501        0.066084        0.717293        -0.165946        2.345865        -2.890083        1.109969        -0.121359        -2.261857        0.524980        0.247998        0.771679        0.909412        -0.689281        -0.327642        -0.139097        -0.055353        -0.059752        1.160686        0
        3        -0.966272        -0.185226        1.792993        -0.863291        -0.010309        1.247203        0.237609        0.377436        -1.387024        -0.054952        -0.226487        0.178228        0.507757        -0.287924        -0.631418        -1.059647        -0.684093        1.965775        -1.232622        -0.208038        -0.108300        0.005274        -0.190321        -1.175575        0.647376        -0.221929        0.062723        0.061458        0.140534        0
        4        -1.158233        0.877737        1.548718        0.403034        -0.407193        0.095921        0.592941        -0.270533        0.817739        0.753074        -0.822843        0.538196        1.345852        -1.119670        0.175121        -0.451449        -0.237033        -0.038195        0.803487        0.408542        -0.009431        0.798278        -0.137458        0.141267        -0.206010        0.502292        0.219422        0.215153        -0.073403        0
In [0]:

# Test train split
bad_data = data[data['Class'] == 1]
bad_data2=bad_data['Class']
bad_data=bad_data.drop(['Class'], axis=1)
X_train, X_test = train_test_split(data, test_size=0.2, random_state=42)
X_train = X_train[X_train['Class']==0]
X_train = X_train.drop(['Class'], axis=1)
y_test = X_test['Class']
X_test = X_test.drop(['Class'], axis=1)
X_train = X_train.values
X_test = X_test.values
X_test2=np.concatenate([bad_data, X_test])
y_test2 = np.concatenate([bad_data2, y_test])

In [0]:

# Model params
input_dim = X_train.shape[1]
encoding_dim = 14
nb_epoch = 15
batch_size = 32

In [70]:

input_layer = Input(shape=(input_dim, ))
encoder = Dense(18, activation="relu")(input_layer)
encoder = Dense(encoding_dim, activation="relu", activity_regularizer=regularizers.l2(10e-3))(encoder) #regularizers.l1(10e-5)
encoder = Dense(int(encoding_dim / 2)+2, activation="relu")(encoder)
decoder = Dense(encoding_dim, activation='relu')(encoder)
decoder = Dense(input_dim, activation='relu')(decoder)
autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer='adam', loss='mean_squared_error', metrics=['accuracy'])
autoencoder.summary()
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 29)] 0
_________________________________________________________________
dense (Dense) (None, 18) 540
_________________________________________________________________
dense_1 (Dense) (None, 14) 266
_________________________________________________________________
dense_2 (Dense) (None, 9) 135
_________________________________________________________________
dense_3 (Dense) (None, 14) 140
_________________________________________________________________
dense_4 (Dense) (None, 29) 435
=================================================================
Total params: 1,516
Trainable params: 1,516
Non-trainable params: 0
_________________________________________________________________
In [71]:

checkpointer = ModelCheckpoint(filepath="fraud_model.h5",verbose=0,save_best_only=True)
tensorboard = TensorBoard(log_dir='./logs',histogram_freq=0,write_graph=True,write_images=True)
history = autoencoder.fit(X_train, X_train,epochs=nb_epoch,batch_size=batch_size,shuffle=True,validation_data=(X_test2, X_test2),verbose=1,callbacks=[checkpointer, tensorboard]).history
Epoch 1/15
7108/7108 [==============================] - 16s 2ms/step - loss: 0.8198 - accuracy: 0.5712 - val_loss: 1.0197 - val_accuracy: 0.6713
Epoch 2/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7421 - accuracy: 0.6959 - val_loss: 0.9948 - val_accuracy: 0.7038
Epoch 3/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7225 - accuracy: 0.7296 - val_loss: 0.9727 - val_accuracy: 0.7415
Epoch 4/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7134 - accuracy: 0.7466 - val_loss: 0.9709 - val_accuracy: 0.7461
Epoch 5/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7088 - accuracy: 0.7547 - val_loss: 0.9629 - val_accuracy: 0.7603
Epoch 6/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7066 - accuracy: 0.7601 - val_loss: 0.9603 - val_accuracy: 0.7593
Epoch 7/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7047 - accuracy: 0.7632 - val_loss: 0.9668 - val_accuracy: 0.7578
Epoch 8/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7028 - accuracy: 0.7642 - val_loss: 0.9641 - val_accuracy: 0.7572
Epoch 9/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7026 - accuracy: 0.7631 - val_loss: 0.9557 - val_accuracy: 0.7661
Epoch 10/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.7010 - accuracy: 0.7654 - val_loss: 0.9526 - val_accuracy: 0.7703
Epoch 11/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.6981 - accuracy: 0.7754 - val_loss: 0.9522 - val_accuracy: 0.7840
Epoch 12/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.6957 - accuracy: 0.7816 - val_loss: 0.9471 - val_accuracy: 0.7827
Epoch 13/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.6950 - accuracy: 0.7843 - val_loss: 0.9482 - val_accuracy: 0.7806
Epoch 14/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.6936 - accuracy: 0.7851 - val_loss: 0.9494 - val_accuracy: 0.7936
Epoch 15/15
7108/7108 [==============================] - 14s 2ms/step - loss: 0.6919 - accuracy: 0.7891 - val_loss: 0.9458 - val_accuracy: 0.7838
In [72]:

autoencoder = load_model('fraud_model.h5')
plt.figure(figsize=(12,12))
plt.subplot(321)
plt.plot(history['loss'])
plt.plot(history['val_loss'])
plt.title('Model loss')
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train loss', 'test loss']);#loc='upper right'
plt.subplot(322)
plt.plot(history['accuracy'])
plt.plot(history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.ylim(0.4,1.1)
plt.legend(['train accuracy','test accuracy']);#loc='upper right'
In [0]:

predictions = autoencoder.predict(X_test2)
mse = np.mean(np.power(X_test2 - predictions, 2), axis=1)
error_df = pd.DataFrame({'reconstruction_error': mse,
'true_class': y_test2})

In [74]:

precision, recall, th = precision_recall_curve(error_df.true_class, error_df.reconstruction_error)
auprc = auc(recall, precision)
plt.plot(recall, precision, 'b')
plt.title('Precision Vs Recall over Threshold')
plt.xlabel('recall')
plt.ylabel('precision')
plt.legend(['AUPRC = %0.4f'% auprc])
plt.show()
In [75]:

F1_score=[]
F1_score = 2 * (precision * recall) / (precision + recall)
print('Maximal F1 Score : ', str(max(F1_score)))
optimal_th = th[np.argmax(F1_score)]
Maximal F1 Score : 0.5047770700636943
In [76]:

plt.plot(th, precision[1:], 'r', label='Threshold-Precision curve')
plt.plot(th, recall[1:], 'b', label='Threshold-Recall curve')
plt.plot(th, F1_score[1:], 'g', label='Threshold-Recall curve')
plt.title('Precision & Recall & F1 score Vs Threshold')
plt.xlabel('threshold')
plt.ylabel('Precision & Recall & F1')
plt.legend(['Precision','Recall', 'F1 score'])
plt.show()
In [77]:

groups = error_df.groupby('true_class')
fig, ax = plt.subplots()
for name, group in groups:
ax.plot(group.index, group.reconstruction_error, marker='o', ms=3.5, linestyle='',
label= "Fraud" if name == 1 else "Normal")
ax.hlines(optimal_th, ax.get_xlim()[0], ax.get_xlim()[1], colors="r", zorder=100, label='Threshold')
ax.legend()
plt.title("MSE error Vs Data point index")
plt.ylabel("MSE error")
plt.xlabel("Data point index")
plt.show();
Gan¶
In [0]:

df = pd.read_csv('creditcard.csv')

In [116]:

df.head()

Out[116]:
                Time        V1        V2        V3        V4        V5        V6        V7        V8        V9        V10        V11        V12        V13        V14        V15        V16        V17        V18        V19        V20        V21        V22        V23        V24        V25        V26        V27        V28        Amount        Class
        0        0.0        -1.359807        -0.072781        2.536347        1.378155        -0.338321        0.462388        0.239599        0.098698        0.363787        0.090794        -0.551600        -0.617801        -0.991390        -0.311169        1.468177        -0.470401        0.207971        0.025791        0.403993        0.251412        -0.018307        0.277838        -0.110474        0.066928        0.128539        -0.189115        0.133558        -0.021053        149.62        0
        1        0.0        1.191857        0.266151        0.166480        0.448154        0.060018        -0.082361        -0.078803        0.085102        -0.255425        -0.166974        1.612727        1.065235        0.489095        -0.143772        0.635558        0.463917        -0.114805        -0.183361        -0.145783        -0.069083        -0.225775        -0.638672        0.101288        -0.339846        0.167170        0.125895        -0.008983        0.014724        2.69        0
        2        1.0        -1.358354        -1.340163        1.773209        0.379780        -0.503198        1.800499        0.791461        0.247676        -1.514654        0.207643        0.624501        0.066084        0.717293        -0.165946        2.345865        -2.890083        1.109969        -0.121359        -2.261857        0.524980        0.247998        0.771679        0.909412        -0.689281        -0.327642        -0.139097        -0.055353        -0.059752        378.66        0
        3        1.0        -0.966272        -0.185226        1.792993        -0.863291        -0.010309        1.247203        0.237609        0.377436        -1.387024        -0.054952        -0.226487        0.178228        0.507757        -0.287924        -0.631418        -1.059647        -0.684093        1.965775        -1.232622        -0.208038        -0.108300        0.005274        -0.190321        -1.175575        0.647376        -0.221929        0.062723        0.061458        123.50        0
        4        2.0        -1.158233        0.877737        1.548718        0.403034        -0.407193        0.095921        0.592941        -0.270533        0.817739        0.753074        -0.822843        0.538196        1.345852        -1.119670        0.175121        -0.451449        -0.237033        -0.038195        0.803487        0.408542        -0.009431        0.798278        -0.137458        0.141267        -0.206010        0.502292        0.219422        0.215153        69.99        0
In [0]:

df = df.drop('Time',axis=1)

In [0]:

X = df.drop('Class',axis=1).values
y = df['Class'].values

In [119]:

X.shape

Out[119]:
(284807, 29)
In [0]:

X -= X.min(axis=0)
X /= X.max(axis=0)

In [121]:

X.mean()

Out[121]:
0.5213456986239168
In [122]:

X.shape

Out[122]:
(284807, 29)
In [0]:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train,y_test = train_test_split(X,y,test_size=0.1)

In [0]:

import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt
from keras.layers import Input, Embedding, multiply, BatchNormalization
from keras.models import Model, Sequential
from keras.layers.core import Reshape, Dense, Dropout, Flatten
from keras.layers.advanced_activations import LeakyReLU
from keras.layers.convolutional import Conv2D, UpSampling2D
from keras.datasets import mnist
from keras.optimizers import Adam
from keras import backend as K
from keras import initializers
from keras.utils import to_categorical
# The results are a little better when the dimensionality of the random vector is only 10.
# The dimensionality has been left at 100 for consistency with other GAN implementations.
randomDim = 100

In [0]:

def build_generator(latent_dim,data_dim):
model = Sequential()
model.add(Dense(16, input_dim=latent_dim))

model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(32, input_dim=latent_dim))

model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dense(data_dim,activation='tanh'))
model.summary()
noise = Input(shape=(latent_dim,))
img = model(noise)
return Model(noise, img)

In [126]:

generator = build_generator(latent_dim=10,data_dim=29)
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_14 (Dense) (None, 16) 176
_________________________________________________________________
leaky_re_lu_5 (LeakyReLU) (None, 16) 0
_________________________________________________________________
batch_normalization_4 (Batch (None, 16) 64
_________________________________________________________________
dense_15 (Dense) (None, 32) 544
_________________________________________________________________
leaky_re_lu_6 (LeakyReLU) (None, 32) 0
_________________________________________________________________
batch_normalization_5 (Batch (None, 32) 128
_________________________________________________________________
dense_16 (Dense) (None, 29) 957
=================================================================
Total params: 1,869
Trainable params: 1,773
Non-trainable params: 96
_________________________________________________________________
In [0]:

def build_discriminator(data_dim,num_classes):
model = Sequential()
model.add(Dense(31,input_dim=data_dim))
model.add(LeakyReLU(alpha=0.2))
model.add(BatchNormalization(momentum=0.8))
model.add(Dropout(0.25))
model.add(Dense(16,input_dim=data_dim))
model.add(LeakyReLU(alpha=0.2))

model.summary()
img = Input(shape=(data_dim,))
features = model(img)
valid = Dense(1, activation="sigmoid")(features)
label = Dense(num_classes+1, activation="softmax")(features)
return Model(img, [valid, label])

In [128]:

discriminator = build_discriminator(data_dim=29,num_classes=2)
Model: "sequential_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_17 (Dense) (None, 31) 930
_________________________________________________________________
leaky_re_lu_7 (LeakyReLU) (None, 31) 0
_________________________________________________________________
batch_normalization_6 (Batch (None, 31) 124
_________________________________________________________________
dropout_2 (Dropout) (None, 31) 0
_________________________________________________________________
dense_18 (Dense) (None, 16) 512
_________________________________________________________________
leaky_re_lu_8 (LeakyReLU) (None, 16) 0
=================================================================
Total params: 1,566
Trainable params: 1,504
Non-trainable params: 62
_________________________________________________________________
In [0]:

optimizer = Adam(0.0002, 0.5)
discriminator.compile(loss=['binary_crossentropy', 'categorical_crossentropy'],
loss_weights=[0.5, 0.5],
optimizer=optimizer,
metrics=['accuracy'])

In [0]:

noise = Input(shape=(10,))
img = generator(noise)
discriminator.trainable = False
valid,_ = discriminator(img)
combined = Model(noise , valid)
combined.compile(loss=['binary_crossentropy'],
optimizer=optimizer)

In [131]:

X_train.shape

Out[131]:
(256326, 29)
In [0]:

from imblearn.under_sampling import RandomUnderSampler

In [0]:

rus = RandomUnderSampler(random_state=42)

In [0]:

X_res, y_res = rus.fit_sample(X, y)

In [135]:

X_res.shape

Out[135]:
(984, 29)
In [136]:

from sklearn.metrics import accuracy_score, f1_score
X_res -= X_res.min()
X_res /= X_res.max()
X_test -= X_test.min()
X_test /= X_test.max()
X_test_res, y_test_res = rus.fit_sample(X_test,y_test)
y_res.shape

Out[136]:
(984,)
In [0]:

def train(X_train,y_train,
X_test,y_test,
generator,discriminator,
combined,
num_classes,
epochs,
batch_size=128):

f1_progress = []
half_batch = int(batch_size / 2)
noise_until = epochs
# Class weights:
# To balance the difference in occurences of digit class labels.
# 50% of labels that the discriminator trains on are 'fake'.
# Weight = 1 / frequency
cw1 = {0: 1, 1: 1}
cw2 = {i: num_classes / half_batch for i in range(num_classes)}
cw2[num_classes] = 1 / half_batch
for epoch in range(epochs):
# ---------------------
# Train Discriminator
# ---------------------
# Select a random half batch of images
idx = np.random.randint(0, X_train.shape[0], half_batch)
imgs = X_train[idx]
# Sample noise and generate a half batch of new images
noise = np.random.normal(0, 1, (half_batch, 10))
gen_imgs = generator.predict(noise)
valid = np.ones((half_batch, 1))
fake = np.zeros((half_batch, 1))
labels = to_categorical(y_train[idx], num_classes=num_classes+1)
fake_labels = to_categorical(np.full((half_batch, 1), num_classes), num_classes=num_classes+1)
# Train the discriminator
d_loss_real = discriminator.train_on_batch(imgs, [valid, labels], class_weight=[cw1, cw2])
d_loss_fake = discriminator.train_on_batch(gen_imgs, [fake, fake_labels], class_weight=[cw1, cw2])
d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
# ---------------------
# Train Generator
# ---------------------
noise = np.random.normal(0, 1, (batch_size, 10))
validity = np.ones((batch_size, 1))
# Train the generator
g_loss = combined.train_on_batch(noise, validity, class_weight=[cw1, cw2])
# Plot the progress
print ("%d [D loss: %f, acc: %.2f%%, op_acc: %.2f%%] [G loss: %f]" % (epoch, d_loss[0], 100*d_loss[3], 100*d_loss[4], g_loss))

if epoch % 10 == 0:
_,y_pred = discriminator.predict(X_test,batch_size=batch_size)
#print(y_pred.shape)
y_pred = np.argmax(y_pred[:,:-1],axis=1)

f1 = f1_score(y_test,y_pred)
print('Epoch: {}, F1: {:.5f}, F1P: {}'.format(epoch,f1,len(f1_progress)))
f1_progress.append(f1)

return f1_progress

In [0]:

f1_p = train(X_res,y_res,
X_test,y_test,
generator,discriminator,
combined,
num_classes=2,
epochs=10,
batch_size=128)

In [0]:

fig = plt.figure(figsize=(10,7))
plt.plot(f1_p)
plt.xlabel('10 Epochs')
plt.ylabel('F1 Score Validation')
57503/57503_1.ipynb
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "57503-1.ipynb",
"provenance": [],
"collapsed_sections": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "code",
"metadata": {
"id": "jJjPXKyBmOI8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
},
"outputId": "66bad2ef-ff82-4a67-97d6-0ff2d86fe75c"
},
"source": [
"!wget -O train.csv https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/train.csv"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"--2020-05-11 16:41:37-- https://raw.githubusercontent.com/tiwari91/Housing-Prices/master/train.csv\n",
"Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 151.101.0.133, 151.101.64.133, 151.101.128.133, ...\n",
"Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|151.101.0.133|:443... connected.\n",
"HTTP request sent, awaiting response... 200 OK\n",
"Length: 460676 (450K) [text/plain]\n",
"Saving to: ‘train.csv’\n",
"\n",
"\rtrain.csv 0%[ ] 0 --.-KB/s \rtrain.csv 100%[===================>] 449.88K --.-KB/s in 0.06s \n",
"\n",
"2020-05-11 16:41:38 (7.11 MB/s) - ‘train.csv’ saved [460676/460676]\n",
"\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "CW5XtIbQnBiZ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "61495621-c974-498a-bcd0-e53b8ced767a"
},
"source": [
"ls"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"\u001b[0m\u001b[01;34msample_data\u001b[0m/ train.csv\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "F9hfwkjKnco-",
"colab_type": "text"
},
"source": [
"#EDA"
]
},
{
"cell_type": "code",
"metadata": {
"id": "3AYb5FCynWCp",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 71
},
"outputId": "23eeb5d8-2d68-4563-be88-4f639f0b2df4"
},
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import numpy as np\n",
"from scipy.stats import norm\n",
"from sklearn.preprocessing import StandardScaler\n",
"from scipy import stats\n",
"import warnings\n",
"warnings.filterwarnings('ignore')\n",
"%matplotlib inline"
],
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n",
" import pandas.util.testing as tm\n"
],
"name": "stderr"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "kNLij4WDnfJt",
"colab_type": "code",
"colab": {}
},
"source": [
"df_train = pd.read_csv('train.csv')"
],
"execution_count": 0,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "_mXbLSwNnmV8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 323
},
"outputId": "93a5a935-1531-4f20-c0a0-de57a970847e"
},
"source": [
"df_train.columns"
],
"execution_count": 5,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"Index(['Id', 'MSSubClass', 'MSZoning', 'LotFrontage', 'LotArea', 'Street',\n",
" 'Alley', 'LotShape', 'LandContour', 'Utilities', 'LotConfig',\n",
" 'LandSlope', 'Neighborhood', 'Condition1', 'Condition2', 'BldgType',\n",
" 'HouseStyle', 'OverallQual', 'OverallCond', 'YearBuilt', 'YearRemodAdd',\n",
" 'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType',\n",
" 'MasVnrArea', 'ExterQual', 'ExterCond', 'Foundation', 'BsmtQual',\n",
" 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinSF1',\n",
" 'BsmtFinType2', 'BsmtFinSF2', 'BsmtUnfSF', 'TotalBsmtSF', 'Heating',\n",
" 'HeatingQC', 'CentralAir', 'Electrical', '1stFlrSF', '2ndFlrSF',\n",
" 'LowQualFinSF', 'GrLivArea', 'BsmtFullBath', 'BsmtHalfBath', 'FullBath',\n",
" 'HalfBath', 'BedroomAbvGr', 'KitchenAbvGr', 'KitchenQual',\n",
" 'TotRmsAbvGrd', 'Functional', 'Fireplaces', 'FireplaceQu', 'GarageType',\n",
" 'GarageYrBlt', 'GarageFinish', 'GarageCars', 'GarageArea', 'GarageQual',\n",
" 'GarageCond', 'PavedDrive', 'WoodDeckSF', 'OpenPorchSF',\n",
" 'EnclosedPorch', '3SsnPorch', 'ScreenPorch', 'PoolArea', 'PoolQC',\n",
" 'Fence', 'MiscFeature', 'MiscVal', 'MoSold', 'YrSold', 'SaleType',\n",
" 'SaleCondition', 'SalePrice'],\n",
" dtype='object')"
]
},
"metadata": {
"tags": []
},
"execution_count": 5
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "m0jbURLqnnsm",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 170
},
"outputId": "be116276-ff8d-405e-ef48-026b37a20f78"
},
"source": [
"#descriptive statistics summary\n",
"df_train['SalePrice'].describe()"
],
"execution_count": 6,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": [
"count 1460.000000\n",
"mean 180921.195890\n",
"std 79442.502883\n",
"min 34900.000000\n",
"25% 129975.000000\n",
"50% 163000.000000\n",
"75% 214000.000000\n",
"max 755000.000000\n",
"Name: SalePrice, dtype: float64"
]
},
"metadata": {
"tags": []
},
"execution_count": 6
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "oH1MnZQ9nqd7",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 290
},
"outputId": "67a5b064-ac8c-4aa4-e36e-111060ab31e0"
},
"source": [
"#histogram\n",
"sns.distplot(df_train['SalePrice']);"
],
"execution_count": 7,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAW0AAAERCAYAAACw4faYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3deXxcZ33v8c9vZqTRvlmybNmWHTu2E8eJndhJ7EASEyCELXB74TZsBQp1C7QFulC4cEvh3vbeXtre0gKFsBdISBPCFpYkBUJYndiO49iJ90WLrcXWrtE6eu4f58iWFS0je2bOjOb7fr3m5ZkzZ875eWb01aPnPOc55pxDRESyQyjoAkREJHEKbRGRLKLQFhHJIgptEZEsotAWEckiCm0RkSySstA2sy+ZWZuZ7UvS9urN7BEze87MnjWzFcnYrohINkllS/srwB1J3N6/A59wzl0J3AC0JXHbIiJZIWWh7Zx7HOiYuMzMVpnZj81sl5n9wsyuSGRbZrYOiDjnHvW33eeciyW/ahGRzJbuPu27gT9xzm0C/gL4TIKvWwN0mdmDZvaUmX3CzMIpq1JEJENF0rUjMysBbgLuN7PxxVH/ud8BPj7Fy5qdcy/Dq/Nm4FqgAbgPeBvwxdRWLSKSWdIW2nit+i7n3MbJTzjnHgQenOG1TcAe59wxADP7DrAFhbaI5Ji0dY8453qA42b2egDzbEjw5U8CFWZW4z++DXg2BWWKiGS0VA75uxf4DbDWzJrM7B3Am4B3mNnTwH7gNYlsyzkXx+sD/4mZPQMY8PnUVC4ikrlMU7OKiGQPnREpIpJFUnIgsrq62q1YsSIVmxYRmZd27dp1xjlXM9t6KQntFStWsHPnzlRsWkRkXjKzk4msp+4REZEsotAWEckiCm0RkSyi0BYRySIKbRGRLKLQFhHJIgptEZEsotAWEckiCm0RkSySzvm0c8o9OxqmXP7GG+vTXImIzCdqaYuIZBGFtohIFkkotM3s/Wa238z2mdm9ZlaQ6sJEROT5Zg1tM1sC/Cmw2Tm3HggDd6W6MBEReb5Eu0ciQKGZRYAi4FTqShIRkenMGtrOuWbgH4AG4DTQ7Zx7ZPJ6ZrbdzHaa2c729vbkVyoiIrMP+TOzSrwL8F4GdAH3m9mbnXNfn7iec+5u4G6AzZs368KT05hqKKCGAYpIohLpHnkJcNw51+6cGwEeBG5KbVkiIjKVREK7AdhiZkVmZsCLgedSW5aIiEwlkT7tHcADwG7gGf81d6e4LhERmUJCp7E75z4KfDTFtYiIyCx0RqSISBZRaIuIZBGFtohIFlFoi4hkEYW2iEgWUWiLiGQRhbaISBZRaIuIZBFdIzJNDrf10tw5QCRkVBbnc1VdedAliUgWUminwWh8jHufaGBwZOzcsndvW8XSyqIAqxKRbKTukTQ43NbH4MgYb75xOR+84wryIyF+c/Rs0GWJSBZSaKfB001dFOaFWbuolLLCPK6rr2Rvczd9Q6NBlyYiWUahnWLDo2McON3L+iXlhEMGwNaVC4iPOZ443hFwdSKSbRTaKXawtZfh+BjXLD1/4LGmNMqa2hJ2HD9LfEwX+RGRxCm0U2xvUxel0QiXVRdfsHzrymp6B0fZf6o7oMpEJBsptFNocCTOwRavayRkdsFzq2tLKI1G2H+qJ6DqRCQbzRraZrbWzPZMuPWY2fvSUVy2O3m2n9Exx7q6suc9FzJjdW0pR9r6GI2PTfFqEZHnS+RyYwedcxudcxuBTUAM+HbKK5sHWnqGAKgrL5zy+TW1JQyMxNnT2JXOskQki821e+TFwFHn3MlUFDPftPYMUl6YR2F+eMrnVy8sxYDHDrantzARyVpzDe27gHunesLMtpvZTjPb2d6uEAJo6R6ktiw67fOF+WHqFxTx2KG2NFYlItks4dA2s3zgTuD+qZ53zt3tnNvsnNtcU1OTrPqyVnzM0d47xKKyghnXW1tbyr7mHtp6B9NUmYhks7m0tF8O7HbOtaaqmPnkTN8QceeonSW019SWAvD4oTPpKEtEstxcQvsNTNM1Is/X0uO1nBeVzxzai8sLqCmN8thBdZGIyOwSCm0zKwZeCjyY2nLmj9buQUIGNSXT92kDmBm3rqnhF4fPaOifiMwqodB2zvU75xY453T6XoJaegapLokSCc/+Fm9bW0P3wIiG/onIrDSfdoq09gwmPF/2zZfXEA4Zjx1sZ/OKqnPL79nR8Lx133hjfdJqFJHso9PYU6BvaJTO2Mis/dnjyovyuK6+QkP/RGRWCu0UONjSCzDrcL+Jtq1dqKF/IjIrhXYKjIf2bMP9Jrp1jTe2XUP/RGQmCu0UONjSQ34kREVRXsKvuaquTEP/RGRWCu0UOH42RnVJ/vOmY53J+NC/xw+1a+ifiExLoZ0CTR0xqopnHp89lRetXUjP4ChPaeifiExDoZ1k8TFHU+cAVXPoGhl385pq8sLGI/tbUlCZiMwHCu0ka+0ZZDg+RmVx/pxfW1aQx02rqnl4fyvO6dqRIvJ8Cu0ka+yIAVBVNPfQBnjZVYto6IhxsLU3mWWJyDyh0E6yhvHQvoiWNsBL19ViBg/v02SKIvJ8Cu0ka+yIETLvLMeLUVMaZVN9JQ+rX1tEpqDQTrLGzgEWlxcSCV38W3v7VbU8e7qHjv7hJFYmIvOBQjvJGjpiLKua+kK+iXrZVYsAeO50TzJKEpF5RKGdZA0dMeqrEpvdbzrLFxRzxaJS9p9SaIvIhRTaSTQwHKe9d4hlCU7JOpPbr1rEybP99A2NJqEyEZkvEr1yTYWZPWBmB8zsOTPbmurCslFTpzdypH7BpYf2y66qxQEH1EUiIhMk2tL+JPBj59wVwAbgudSVlL0a/dBedondIwDrFpdRUZSnLhIRucCsoW1m5cAtwBcBnHPDzjlNjjGFhrN+aCehe8TMuGpxGUfb+xgaiV/y9kRkfkjkcmOXAe3Al81sA7ALeK9zrn/iSma2HdgOUF+fm5fEaugYoDAvTHXJ3E6smeqyYgDr6sr51dGzHGrr4+ol5ckoUUSyXCLdIxHgOuDfnHPXAv3AByev5Jy72zm32Tm3uaamJsllZofGTm/kiM1hStaZLF9QRHF+mP2ndD1lEfEkEtpNQJNzbof/+AG8EJdJGpMwRnuikBlXLi7jYEsvo2OaY1tEEght51wL0Ghma/1FLwaeTWlVWcg5559Yc+n92RNdsaiUodExGjsGkrpdEclOifRpA/wJ8A0zyweOAW9PXUnZqTM2Qmw4ztIkHIScaGVNCSGDI229XFZdnNRti0j2SSi0nXN7gM0priVr3bOjgeZOryV8rL1v2gOLF6MgL8zSyiIOt/Xx0nVJ26yIZCmdEZkkXQPe5E4VFzmP9kxWLyyhuXOA2LDOjhTJdQrtJOmKjQBQUXhxU7LO5PKFJTjgaHv/rOuKyPym0E6SrtgweWGjKD+c9G0vrSwiGglxpE1XsxHJdQrtJOkaGKGiKD9pY7QnCoeMVTUlHG7r07UjRXKcQjtJumIjKekaGXf5whK6YiOc8E+VF5HcpNBOkq7YcEoOQo5bvbAEgF8ebk/ZPkQk8ym0k2B4dIz+4TiVF3ldyERUFedTWhBh18nOlO1DRDKfQjsJxof7laewe8TMWFZZxFONmmBRJJcptJOge3y4Xwq7RwDqq4o4eTbGmb6hlO5HRDKXQjsJxsdop7J7BDh37ck9DWpti+QqhXYSdA4MEzIoLUhtaC+pLCQSMnY3qF9bJFcptJOgOzZCWUEe4VDyx2hPlBcOsa6uTKEtksMU2knQGRuhIsVdI+OuXVbB3qZuRuOaX1skFym0k6BrILVjtCe6bnklseE4B1t1SrtILlJoX6L4mKNnILVnQ050XX0lALt1MFIkJym0L1FrzyBjDsrT1D2ytLKQ6pJ8nlK/tkhOSugiCGZ2AugF4sCoc04XRPA1d3kXP6hMU/eImXFtfaWG/YnkqLm0tF/knNuowL7QKT+009U9AnD1knKOnemnd3AkbfsUkcyg7pFL1ORfZixdByIB1i8pA+C50zoYKZJrEg1tBzxiZrvMbPtUK5jZdjPbaWY729tzZya6U10DFOWHyY+k7/ff+rpyAPY1d6dtnyKSGRJNmhc6564DXg68x8xumbyCc+5u59xm59zmmpqapBaZyZq7BtI2RnvcwrICakqj7Dul0BbJNQmFtnOu2f+3Dfg2cEMqi8omzZ0DVBSmr2tk3Pq6MvY396R9vyISrFlD28yKzax0/D5wO7Av1YVlA+ccpwJoaQOsX1LO4bZeBobjad+3iAQnkZZ2LfBLM3saeAL4gXPux6ktKzt0D4zQPxxP60HIcVfVlTPm4ECLWtsiuWTWcdrOuWPAhjTUknXOjRxJ43C/e3Y0ANAZ8y688OVfneC507288cb6tNUgIsHRkL9LcG6MdgDdIxWFeRTmhc/VICK5QaF9CZq70j9Ge5yZsaSikFPdCm2RXKLQvgTNnQMU5IUozg8Hsv+6igJau4cYHdM0rSK5QqF9CU51D1BXUYhZai9+MJ26ikLiztHWo2tGiuQKhfYlaO4cYElFYWD7r/P3rX5tkdyh0L4EzV2DgYZ2VXE+0UjoXN+6iMx/Cu2LNDgS50zfUKChHTJjcXmhWtoiOUShfZHGg7IuwNAGWFJRQEvPoK4ZKZIjFNoX6VTXIABLKoMN7bqKQkbijmNn+gOtQ0TSQ6F9kZq7YgCBdo/A+Za+pmkVyQ0K7YvU3DlAyGBReUGgdVSXRMkLG/s0459ITlBoX6TmrkFqywrICwf7FoZDxqKyAs2tLZIjFNoXqbkrFnjXyLi6ikKePdXD2JgLuhQRSTGF9kVq6hwI/CDkuCUVhfQNjXKyIxZ0KSKSYgrtizASH+NU1wD1VUVBlwLoYKRILlFoX4RTXQOMOViWIaG9sGz8YKRCW2S+Szi0zSxsZk+Z2UOpLCgbNPjdEJnS0o6EQly5uIw9jV1BlyIiKTaXlvZ7gedSVUg2ybTQBriuvpK9Td06M1JknksotM1sKfBK4AupLSc7NHYMkB8OUVsW7Bjtia5bXsnASJwDLb1BlyIiKZRoS/ufgQ8A0zbjzGy7me00s53t7e1JKS5TNXbEWFpZSDgUzDzaU9m0vBKAXSc7A65ERFJp1tA2s1cBbc65XTOt55y72zm32Tm3uaamJmkFZqKGjljGHIQcV1deQG1ZlN0NCm2R+SyRlvYLgDvN7ATwTeA2M/t6SqvKcA0dsYzqzwbvmpGblleqpS0yz80a2s65DznnljrnVgB3AT91zr055ZVlqO7YCN0DIxkX2uAdjGzqHKCtdzDoUkQkRTROe44aO72RI5nWPQJwbb3Xr737pIb+icxXcwpt59xjzrlXpaqYbJCJw/3GrV9SRn44pH5tkXlMLe05Gg/tZVWZMe/IRNFImPVLytitfm2ReUuhPUcNHTGqivMpLcgLupQpbVpeyd7mbgZH4kGXIiIpoNCeo8YMHO430U2rqhkeHeOJ4x1BlyIiKaDQnqNMHO430ZaVC8iPhHjs4Pw+wUkkVym052A0PkZz5wD1GdifPa4wP8yWlQt47FBb0KWISAootOfgdPcgo2Muo1vaANvW1HCsvZ9GXRRBZN5RaM/BybOZO0Z7om1rvWkEHjuo1rbIfKPQnoPjZ/oAWFVTEnAlM7usupj6qiL1a4vMQwrtOTja3k9xfpiFpdGgS5mRmbFtbQ2/PnpWQ/9E5hmF9hwcP9PPZTXFmGXOlKzT2ba2hoGRuIb+icwzCu05OHamj8uqM7trZNzWldUU54d5aO+poEsRkSRSaCdoaDROU+cAK6uLgy4lIYX5YV5x9WJ+sPc0seHRoMsRkSRRaCfo5NkYzsHKmuwIbYDXb15G/3CcHz7TEnQpIpIkkaALyBbH2r2RIysztHvknh0Nz1v2hhuWsWJBEffvbOR1m5YGUJWIJJta2gk6dqYfgBXVmT1GeyIz43WblrLjeAcNZ3Wijch8oJZ2go6197OwNJqxs/tN53euW8o/PnqIB3Y18me3rwWmbpW/8cb6dJcmIhdh1tA2swLgcSDqr/+Ac+6jqS4saJOD7YnjHVnVnz2urqKQm1fXcN/ORt5z2+VEI+GgSxKRS5BI98gQcJtzbgOwEbjDzLaktqzMc6ZvKGuG+032zhdeRmvPEN99SsP/RLLdrC1t55wD+vyHef7NpbKoTBMbGiU2HKc7Njxl10Kmu3l1NVfVlfHZx4/yX3VAUiSrJdSnbWZhYBdwOfBp59yOKdbZDmwHqK+fX/2jZ/qGAKguyezT1yeb+Avm6iXlfPPJRv7Hd/axfkl5gFWJyKVIaPSIcy7unNsILAVuMLP1U6xzt3Nus3Nuc01NTbLrDNSZvmEAqjN8zpGZrF9STlVxPo8fbsf740lEstFcr8beBfwMuCM15WSm9r4hQgaVRflBl3LRQmbcsrqGps4Bjrb3B12OiFykWUPbzGrMrMK/Xwi8FDiQ6sIySXvvEAuKo4RDmT9R1Eyura+grCDCTw9onm2RbJVIS3sx8DMz2ws8CTzqnHsotWVlltaeQRaWZW/XyLi8cIibV9dw4mw/x8+otS2SjWYNbefcXufctc65a5xz651zH09HYZliJD5GR/8wtWUFQZeSFNevqKI4GuFnuqqNSFbSaeyzaO8dwsG8Ce38SIibL6/mSFufriEpkoUU2rNo7RkEoDaLR45MduNlVRTmhdXaFslCCu1ZtPYMETZjQZaN0Z5JNC/MCy6v5kBLL6e6BoIuR0TmQKE9i7beQapL87N+5MhkN61aQEFeSK1tkSyj0J5Fa8/gvOnPnqggL8zWlQvYf6rnXBeQiGQ+hfYMhkbjdMZGWFg6/0Ib4AWrqsmPqLUtkk0U2jNo6/HmHFk0D8ZoT6UoGmHLZVU809TNCY3bFskKCu0ZtPV63QYL52H3yLgXXF5NOGR87vGjQZciIglQaM+gtWeISMioKs7eOUdmU1qQx6bllTywq4mWbvVti2Q6hfYMWnsGWVgaJWTza+TIZDevrmHMwRd+cSzoUkRkFgrtGczXkSOTVRXn8+prFnPPEw109g8HXY6IzEChPY3Y8Cg9g6Pzuj97ondtu5zYcJyv/uZE0KWIyAwU2tM47ffv1pXnRmivXVTKS66s5cu/OkH/0GjQ5YjINBTa0xgP7UU5EtoA737RKroHRrj3iey7DqZIrlBoT+N01wClBRFKC/KCLiVtrquvZMvKKj7/i2MMjcaDLkdEpqDQnsbp7kEW51Are9y7t11Oa88QD+5uDroUEZlCIpcbW2ZmPzOzZ81sv5m9Nx2FBWlwJE5b7yB15YVBl5J2N6+u5uol5XzmsSMMj44FXY6ITJJIS3sU+HPn3DpgC/AeM1uX2rKCdaStjzEHiytyL7TNjD+/fQ2NHQN8Y8fJoMsRkUkSudzYaefcbv9+L/AcsCTVhQXp2VM9ADnZPQJw65oablq1gH/96RF6B0eCLkdEJphTn7aZrQCuBXakophMsf9UN/mR0Lw+fX0mZsaHXn4lHf3DfO7nOktSJJMkHNpmVgJ8C3ifc65niue3m9lOM9vZ3t6ezBrT7tnTPSwuK5j3p6/P5Oql5bx6Qx1f+OUxzUkikkESCm0zy8ML7G845x6cah3n3N3Ouc3Ouc01NTXJrDGtxsYcz53uZXFFbnaNTPSBl63FOfifP3g26FJExJfI6BEDvgg855z7p9SXFKzGzhh9Q6MszsGRI5Mtqyrij190OT/Ye5rHD2X3X08i80UiLe0XAG8BbjOzPf7tFSmuKzD7c/wg5GTlhXksKM7n/fft4au/PsE9O3S2pEiQEhk98kvnnDnnrnHObfRvP0xHcUHY29RNXthyYna/RETCIe7cWMfZ/mEeP6zWtkjQIkEXkGmebuziysVl5IVz62TRmVrQqxeWcvWScn5+sJ2NSyvSWJWITJZbyTSL+Jhjb1MXG5cpmCZ75dWLCYeM7+89hXMu6HJEcpZCe4Kj7X30D8fZoNbk85QV5vGSK2s51NrHw/tbgi5HJGcptCfY09AFwAa1tKe0ZeUCFpcX8LHvP6s5t0UCotCeYE9TF6UFEVZWFwddSkYKh4zXbKjjdPcgn/zJ4aDLEclJCu0Jnm7sYsPSCkKh3D0Tcjb1C4q56/plfPGXxznY0ht0OSI5R6NHfAPDcQ609PKuW1cFXUrGu7ymhGgkxPav7WT7zSsx/3T/N95YH3BlIvOfWtq+/ae6iY859WcnoCga4Y6rFnHybIyn/OMAIpIeCm3fnsbxg5DlAVeSHa5bXkl9VRE/2nea2LAOSoqki0Lbt6exiyUVhSws1ZmQiQiZ8ZqNdQyMxHlkf2vQ5YjkDIU24Jxj18lONtara2QuFpcXsnXlAp480UFjRyzockRygkIbOHk2xunuQbasXBB0KVnnxVfWUloQ4bt7momP6UxJkVRTaAO/OXYWgK0K7TkryAvziqsXc6p7kK//VteUFEk1DfkDfnP0LDWlUVbV6KSai3H1knJ2nuzkHx4+yMuvXpTQcYGpJqjSkEGR2eV8S9s5x2+OnWXrygXnxhvL3JgZd26oY2h0jL/7wXNBlyMyr+V8aB9t76e9d4itq9Q1cimqS6L80bZVfGfPKX74zOmgyxGZt3I+tNWfnTzvedEqrq2v4C/uf5oDLc+79rOIJEEi14j8kpm1mdm+dBSUbr89epZFZQUsX1AUdClZLxoJ89k3b6IkGmH7v++iKzYcdEki804iLe2vAHekuI5AOOf47bGzbF2l/uxkqS0r4HNv2URL9yCv/+xvONyqSaVEkimRa0Q+DnSkoZa0O9DSy9n+YXWNJNm19ZV85e3X0xkb5s5P/Yqv//YkgyPxoMsSmReS1qdtZtvNbKeZ7Wxvz44LwD68vwUz2HZFTdClzDs3XV7ND//0ZjYsK+cj39nHDX/7n/z3bz/Dzw+1K8BFLkHSxmk75+4G7gbYvHlzVpwa9+N9LVy/vErzjaTIwrIC7nnnFn599Czf2t3Eg7ubuGdHA9FIiNW1pdy6uoYllYVBlymSVXL25Jqj7X0caOnlo69eF3Qp81ooZLxwdTUvXF3N3/2Xq9lx/CyPHWznm082sK+5m9ULS3jttUuoLMoPulSRrJCzof3jfd7Fae9YvyjgSnJHYX6YbWsXsm3tQuqrinjieAc/O9jGp356hN+9flnQ5YlkhVlD28zuBbYB1WbWBHzUOffFVBeWaj985jTX1lewuFx/nifLXE5NL8gLc8uaGtbVlXHPjga++usT1FcV8fsvvCzVZYpktVlD2zn3hnQUkk4NZ2PsP9XDh19xZdClzHtTBflE1SVR/ujWVfzHzkY+/tCzhAze9gIFt8h0crJ75If7vNOs1TWSGfIjId5wQz2PH27nb77/LJFwiDdvWR50WSIZKedOY4+POe7Z0cCm5ZUsq9JZkJkiHDI+9cZrue2KhXzkO/u478mZW+giuSrnQvuR/S00dMR4p/pOM040EuYzb7qOW9bU8MEHn+Fbu5qCLkkk4+RcaH/+F8eoryri9qvUNZKJCvLC3P2WTdy0agF/+cDTfHdPc9AliWSUnOrT3nWyg90NXXzszqsIh7y5RmY7UCbpM/GzeOmVizjVNcj779tDJBTildcsDrAykcyRUy3tzz9+nPLCPF6/eWnQpcgs8iMhfm/rcpZVFfHebz7FQ3tPBV2SSEbImZb2zhMdPLy/hVvX1vCdpxQA2SAaCfO2rSt46JnT/PE9T/HLw2f4yKvWURKd/mury5jJfJcTLe3BkTh/9a29lBflcesaTQ6VTaJ5Ye75gxt51zZvLPfL/t/jfPpnR2jqjE37mviYY8xlxfQ3InOWEy3tz/zsCEfb+3nbTSuIRsJBlyNzFI2E+as7ruDFVyzk7398gE88fJBPPHyQ6pJ8KovyKcgL0z80Su/QKF2xYUbijpBBaUEelUV5tPYMcuvaGjYurSAU0rzpkt3MpaBFsnnzZrdz586kb/di7Gvu5rWf/hV3bqhj84qqoMuRizC5e6OxI8b/+sFzdPQPExseZSQ+RjQSpiAvTEEkRH5eiHjc0TM4QlvvEM1dAzgH9VVFvOnGev7b5mVUFmuCKsksZrbLObd5tvXmdUu7sSPG27/yJNUlUf7Hq9bxI3+SKMluy6qK5tTN9fL1i3jsUBv3PtHI//7RAf7x0UO8+po63rJ1ORuWluuqRZJV5m1on+kb4i1f3MHw6Bj3/9FWtaxy2Pgv69duXMKWlQvYcews3997im/tbuLqJeW8ZctyXrVhMUX58/bHQeaRedk9cvJsP+/86k4aO2N8451b2LS8EtCYbDlvaCROJBLia785waHWPqKREC+8vJptVyxk49IK1iwq0fEPSauc7R75+aF2/vBrOzGMN924nIMtvRxs0cVl5ULRPC+Q37p1BSfOxtjX3M3uhk5+cqANgEjIWF1byvq6MtbVlbGmtpTVtSXUlETVnSKBmjct7e7YCJ945ADf2NFAbWkBb96ynCp1icgcOOfo6B/mVPcgp7oGzt36h89f07IwL0xtWZSFZQW88urFrK4tYU1tKdUl0QArl/kgZ1raA8Nx7t/VyCf/8zCdsWHeunUFKxYUkx/JiSHokkRmxoKSKAtKoly9pBzwgrx3aJS2niFaewZp6x2ktWeIvU1dPHG849xrq4rzWb3QC/DO2DDlhXmUF+ZRVphHSTSiqWYlaRIKbTO7A/gkEAa+4Jz7PymtahbOOZ5p7uaHz7TwzScb6IqNcP2KSv7mzhu4qq5cfdeSNGZGWUEeZQV5XL6w5Nxy5xwvvrKWQ629HGrt5XBrH4faevn2U830DY1esI2Qwb89dpTF5QUsKi+grqKQRWUFFzyuLomemw/nUgyOxOkdHOXeHQ2YeVPeRsIhIiHjTVvqyQ+Hcr57Z7p8yJYzZxO53FgY+DTwUqAJeNLMvuecezYVBTnnGIk7hkbjDI2OMTgS50zfMK09gxxp6+PZUz3sOtlJS88gIYOXXFnL9ltWsml5Zc5/GSV9zIxFfujeMmH4oXOOz//iON0DI/QMjNDt36qK8zndPcC+5m4efbaVodGxC7YXDhkLS6NUFuVTXphHRZF3K/ZHtIw5cDicg+H4GD0DI/QMjkWqd9EAAApdSURBVPr/jtAzMErP4AjDk7Y70ccfepZIyCjKD1McjXg3/35RfphIKEQo5P3fQmaE7PzZpfExR3yMc/fPL3PkhUPn/qoon3QrKxzfT4TiaJiSaIRoJEwohLc/Iyk/t2NjjqHRMWLDowyMxBkYjhMbjp97b3oHz79PO092MDgyxsBwnMGROA6IRkL8/FAbxfkRiqJhSgvyqPA/B+//kn/uMynKixAOG5GQEQ4ZYbO0nrSVSEv7BuCIc+4YgJl9E3gNkPTQ3vCxR+gZHGGmbvZlVYVsWl7Ji65YyG1XLFS/tQRmuhZbSTRCSTTCkoqprz/qnGNgOE734PlQ90J+lIHhUUbHxjjS1kfXwAj9Q6MYXrAZgHkBU1aQR2lhHrGhUYrzIywojlKYF/JOMMoLE/W7B+NjjlH/dlVdGbHhUfqH4vQPjRIbjtM3NMqJs/0Mj44RH3M4wDkoLYgw5ty58PYC3egeGCbk1xIyw8yIj40xMDLGwEicweE48TkeJwv5fxGE/F8W47+czm1lwi8s579//uIZs2K6fUUjYQrzwxTkhSiIhDHz/kI5cSZGbMR7f3oGRhgdS3zj4+9RTWmUX33wtrkVNUeJhPYSoHHC4ybgxskrmdl2YLv/sM/MDl56eQBUA2fGH5wEfgl8Jkkbv0gX1JRBMrGuTKwJMrOuTKwJMrOuTKyJw1BtH7rouhI68JG0A5HOubuBu5O1vXFmtjORI6rplIk1QWbWlYk1QWbWlYk1QWbWlYk1QXrqSmSIRTOwbMLjpf4yERFJs0RC+0lgtZldZmb5wF3A91JbloiITGXW7hHn3KiZ/THwMN6Qvy855/anvLLzkt7lkgSZWBNkZl2ZWBNkZl2ZWBNkZl2ZWBOkoa6UnBEpIiKpodMGRUSyiEJbRCSbOOcy8gbcARwEjgAfTOJ2vwS0AfsmLKsCHgUO+/9W+ssN+Be/hr3AdRNe81Z//cPAWycs3wQ847/mXzjfBTXlPvznlgE/wzthaT/w3qDrAgqAJ4Cn/Zo+5i+/DNjhb+c+IN9fHvUfH/GfXzFh3x/ylx8EXjbbZzzdPiZ9jmHgKeChTKgLOOG/v3uAnUF/fhNeVwE8ABwAngO2BlkXsNZ/j8ZvPcD7MuS9ej/ed30fcC/ez0BGfN8vqDMdAXwRwRoGjgIrgXy84FiXpG3fAlzHhaH9f8ffROCDwN/7918B/Mj/4mwBdkz48I/5/1b698e/ZE/465r/2pfPtA//8eLxLyNQChwC1gVZl79eiX8/z/9SbQH+A7jLX/5Z4F3+/XcDn/Xv3wXc599f539+Uf/LedT/fKf9jKfbx6TP8c+Aezgf2oHWhRfa1ZNqDPR75S/7KvBO/34+XogHXteEn/MWvJNKgv4ZXAIcBwonfNZvm+4zJ83f9wvet3QHcoLBuhV4eMLjDwEfSuL2V3BhaB8EFvv3FwMH/fufA94weT3gDcDnJiz/nL9sMXBgwvJz6023j2nq+y7eXC8ZURdQBOzGOxP2DBCZ/DnhjS7a6t+P+OvZ5M9ufL3pPmP/NVPuY8K6S4GfALcBD830mnTVxdShHejnB5TjBZFlUl0T1r8d+FUm1MT5M7+r/O/JQ8DLpvvMSeP3ffItU/u0pzp1fkkK91frnDvt328BamepY6blTVMsn2kfFzCzFcC1eC3bQOsys7CZ7cHrTnoUr6XQ5ZwbnWI75/btP98NLLiIWhfMsI9x/wx8ABifHWmm16SrLgc8Yma7/CkdIPjv1WVAO/BlM3vKzL5gZsUZUNe4u/C6IWZaPy01OeeagX8AGoDTeN+TXQT/vXqeTA3twDjv150LYh9mVgJ8C3ifc64n6Lqcc3Hn3Ea8lu0NwBWp3H8izOxVQJtzblfQtUzyQufcdcDLgfeY2S0TnwzoexXB6wr8N+fctUA/XrdA0HXhn6h3J3B/IuunuiYzq8SbCO8yoA4oxuuDzjiZGtrpPnW+1cwWA/j/ts1Sx0zLl06xfKZ94C/LwwvsbzjnHsyUugCcc114B0q3AhVmFpliO+f27T9fDpy9iFrPzrAPgBcAd5rZCeCbeF0knwy6Lr+lhnOuDfg23i+5oD+/JqDJObfDf/wAXogHXRd4v9x2O+daZ1k/XTW9BDjunGt3zo0AD+J914L+vj9PpoZ2uk+d/x7ekWj8f787YfnvmWcL0O3/efUwcLuZVfq/oW/H64c6DfSY2RbzJgn+vUnbmmof+Ot+EXjOOfdPmVCXmdWYWYV/vxCvj/05vPB+3TQ1jW/ndcBP/dbM94C7zCxqZpcBq/EOFE35GfuvmW4fOOc+5Jxb6pxb4b/mp865NwVZl5kVm1np+H3/fd8X5Ofnv1ctQKOZrfUXvRhvhFKgdfnewPmukZnWT1dNDcAWMyvyXzf+XgX6fZ/STB3eQd7wjhofwutH/XASt3svXp/VCF5L5B14/Uo/wRsK9J9Alb+u4V0A4ijeEKLNE7bz+3hDdI4Ab5+wfDPeD+xR4FOcH2405T78516I96faXs4PhXpFkHUB1+ANqdvrv+6v/eUr/S/hEbw/baP+8gL/8RH/+ZUT9v1hf78H8Y/kz/QZT7ePKT7LbZwfPRJYXf7ypzk/PPLDs7y3afle+c9vBHb6n+N38EZaBP19L8ZrYZZPWJYJ79XH8IZG7gO+hjcCJGO+7+M3ncYuIpJFMrV7REREpqDQFhHJIgptEZEsotAWEckiCm0RkSyi0JaMZWYfNrP9ZrbXzPaY2Y0zrPsVM3vddM9PWOe4v63dZrZ1mvU+bmYvudT6RVIhaVdjF0kmP1BfhTf74ZCZVePNjnap/tI594CZ3Y43ydA1k/Ybds79dRL2I5ISamlLploMnHHODQE45844506Z2V+b2ZNmts/M7vbPXruAmW0ys5+bN3nTw+OnLk/yOHC5v/4JM/t7M9sNvH5iq93MrjezX5vZ02b2hJmVmjeR1if8Ovaa2R+m7m0QuZBCWzLVI8AyMztkZp8xs1v95Z9yzl3vnFsPFOK1xs8xbw6XfwVe55zbhHfRi7+dYvuvxjvDbtxZ59x1zrlvTthWPt6k9O91zm3Am59iAO8s2m7n3PXA9cAf+Kcsi6ScukckIznn+sxsE3Az8CLgPjP7INBrZh/Am+O7Cu+08e9PeOlaYD3wqN8ID+NNWzDuE2b2EbwpS98xYfl9U5SxFjjtnHvSr6kHwO9auWZCH3o53hwTxy/+fyySGIW2ZCznXBx4DHjMzJ4B/hCvD3qzc67RzP4Gbw6IiQzY75yb8iAjfp/2FMv751CaAX/inHt4Dq8RSQp1j0hGMrO1ZrZ6wqKNeBPwAJwxb+7xqUaLHARqxkeGmFmemV11kWUcBBab2fX+tkrNm0LzYeBdflcMZrbGn91PJOXU0pZMVQL8qz897CjeDGjbgS68Wdha8Ka7vIBzbtjvtvgXMyvH+47/M143ypz42/pdv45CvP7slwBfwLtk3W7/QGg78No5/w9FLoJm+RMRySLqHhERySIKbRGRLKLQFhHJIgptEZEsotAWEckiCm0RkSyi0BYRySL/H2LFk5+pt1VcAAAAAElFTkSuQmCC\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Q6xMxh-WnrzF",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 51
},
"outputId": "f1776cf8-1151-4198-8571-b77dd7ebc78a"
},
"source": [
"#skewness and kurtosis\n",
"print(\"Skewness: %f\" % df_train['SalePrice'].skew())\n",
"print(\"Kurtosis: %f\" % df_train['SalePrice'].kurt())"
],
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": [
"Skewness: 1.882876\n",
"Kurtosis: 6.536282\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "YP-afCi8ntiC",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
},
"outputId": "7ec30a92-1d44-438d-ed18-e42178b9f80a"
},
"source": [
"#scatter plot grlivarea/saleprice\n",
"var = 'GrLivArea'\n",
"data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)\n",
"data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));"
],
"execution_count": 9,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "LxboFmwlnvIF",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 283
},
"outputId": "4b9b643f-2069-495c-a0eb-3e3d299f33a3"
},
"source": [
"#scatter plot totalbsmtsf/saleprice\n",
"var = 'TotalBsmtSF'\n",
"data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)\n",
"data.plot.scatter(x=var, y='SalePrice', ylim=(0,800000));"
],
"execution_count": 10,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "vb2huMC3nwm9",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 392
},
"outputId": "9e4bc69a-3ad6-4dff-bd1e-e24040443514"
},
"source": [
"#box plot overallqual/saleprice\n",
"var = 'OverallQual'\n",
"data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)\n",
"f, ax = plt.subplots(figsize=(8, 6))\n",
"fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
"fig.axis(ymin=0, ymax=800000);"
],
"execution_count": 11,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "QwEPtYGhnyA8",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 516
},
"outputId": "b2acec40-166f-4b59-dab0-9d2240d92a66"
},
"source": [
"var = 'YearBuilt'\n",
"data = pd.concat([df_train['SalePrice'], df_train[var]], axis=1)\n",
"f, ax = plt.subplots(figsize=(16, 8))\n",
"fig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\n",
"fig.axis(ymin=0, ymax=800000);\n",
"plt.xticks(rotation=90);"
],
"execution_count": 12,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "x4PDb_55nzee",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 607
},
"outputId": "22ff6923-eb2c-4fda-db1b-04b09eb0d16c"
},
"source": [
"#correlation matrix\n",
"corrmat = df_train.corr()\n",
"f, ax = plt.subplots(figsize=(12, 9))\n",
"sns.heatmap(corrmat, vmax=.8, square=True);"
],
"execution_count": 13,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": [],
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "3fnH5Q92n1VQ",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 365
},
"outputId": "5eb95b02-18c7-45b1-b4f6-1746cda5b668"
},
"source": [
"#saleprice correlation matrix\n",
"k = 10 #number of variables for heatmap\n",
"cols = corrmat.nlargest(k, 'SalePrice')['SalePrice'].index\n",
"cm = np.corrcoef(df_train[cols].values.T)\n",
"sns.set(font_scale=1.25)\n",
"hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 10}, yticklabels=cols.values, xticklabels=cols.values)\n",
"plt.show()\n"
],
"execution_count": 14,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"tags": []
}
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "SHMuUHAdn30X",
"colab_type": "code",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 1000
},
"outputId": "0038c305-6e1c-4ffe-dd7d-64d3888db2ac"
},
"source": [
"#scatterplot\n",
"sns.set()\n",
"cols = ['SalePrice', 'OverallQual', 'GrLivArea', 'GarageCars', 'TotalBsmtSF', 'FullBath', 'YearBuilt']\n",
"sns.pairplot(df_train[cols], size = 2.5)\n",
"plt.show();"
],
"execution_count": 15,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here