import numpy as np
import pandas as pd
import pandas as pd
df = pd.read_csv("/kaggle/input/creditcardfraud/creditcard.csv")
df.head()
features = df.drop("Class",axis=1)
labels = df.loc[:,['Class']]
labels.head()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
X_train.head()
X_train.shape
from tensorflow import keras
from keras import Sequential,layers,optimizers,metrics,losses
from keras.layers import Dense,Conv1D,LSTM,MaxPooling1D,Input
from tensorflow.python.keras.models import Model
import numpy as np
inputs = Input(((X_train.shape[1],1)))
x = Conv1D(filters=256, kernel_size=5 ,padding="same", activation="relu")(inputs)
x = MaxPooling1D(pool_size=2)(x)
x = LSTM(64)(x)
x = Dense(64,activation='relu')(x)
predictions = Dense(units=1, activation='sigmoid')(x)
model = Model(inputs=inputs, outputs=predictions)
# model = Sequential()
# model.add(Conv1D(filters=256, kernel_size=5, padding='same', activation='relu', inputs = Input(((X_train.shape[1],1))) ))
# model.add(MaxPooling1D(pool_size=2))
# model.add(LSTM(64))
# # model.add(Dense(64,activation='relu'))
# model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
h = model.fit(x=X_train, y=y_train, batch_size=64, epochs=5,validation_split=0.1)
# h = model.fit(x=X_train, y=y_train, batch_size=64, epochs=5, validation_data=(X_val,y_val))
import matplotlib.pyplot as plt
print(h.history.keys())
# summarize history for accuracy
plt.plot(h.history['accuracy'])
plt.plot(h.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
# summarize history for loss
plt.plot(h.history['loss'])
plt.plot(h.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
preds = model.predict(X_test)
print(len(np.round(preds)[np.round(preds)==1]))
print(len(np.round(preds)[np.round(preds)==0]))
print(y_test[0:5])
print(np.round(preds)[:5])
from sklearn.metrics import accuracy_score
acc_score = accuracy_score(y_test, np.round(preds))
print(acc_score)
output = X_test
output['fraud']=y_test
output['fraud_pred']=np.round(preds)
output['fraud_pred']=output['fraud_pred'].apply(lambda x:int(x))
output.head()
errors = output[output['fraud']!=output['fraud_pred']]
errors
acc = 1 - len(errors)/len(output)
print('acc from pandas ',acc)
print('acc from sklearn ',acc_score)