{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom collections import Counter\nfrom imblearn.over_sampling import RandomOverSampler\nfrom imblearn.under_sampling import RandomUnderSampler","metadata":{"id":"6LZ2DvQCJ8iJ"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def standartization(features):\n    return (features - features.mean(axis = 0)) / features.std(axis = 0)","metadata":{"id":"Y2V-dDI2UWRG"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = '../input/creditcards-fraud-detection/creditcard_train.csv'\n\ndf = pd.read_csv(data)\ndf.head(5)","metadata":{"id":"1ZWcoV2tK5N0","outputId":"4e9f47b1-4c37-4209-ea44-2545fe9659ac"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test = '../input/creditcards-fraud-detection/creditcard_test.csv'\n\ndata_test = pd.read_csv(data_test)\ndata_test.head(5)","metadata":{"id":"h0FbB3NkK8V7","outputId":"ba4de2c9-de1f-4c18-d5e0-92e95fcdf0c3"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('%.2f of data is corrupted ' % ((df.notna().sum(axis=1) < len(df.columns)).sum(axis=0)))","metadata":{"id":"YCHZkyTdLqqM","outputId":"ebdd3f31-5dc3-4264-e8da-34af3e9d4fa2"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.shape(df)","metadata":{"id":"jTHeNKJkVn7J","outputId":"268e2e6f-dacc-409f-f739-623b103fd314"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_prep = df.drop(df[(df.notna().sum(axis=1) < 30)].index).copy()\nnp.shape(df_prep)","metadata":{"id":"V9U-Gv6fVXud","outputId":"58b47cbf-73cb-4694-b0a9-1efd25b6ffae"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dfq = standartization(df_prep.drop(['Class'],axis=1)[::])\ndfq['Class'] = df_prep['Class']\nlen(dfq[dfq.Class == 1]), len(dfq[dfq.Class == 0]) ","metadata":{"id":"nYr7Jd-1Ju-h","outputId":"e15e550f-8891-42ec-a6fc-1cf74be7e646"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_in = dfq.drop(['Class'],axis=1)\nX = np.vstack([df_in[df_in.columns[i]] for i in range(len(df_in.columns))]).T\ny = np.array(dfq['Class'])\n\nprint(Counter(y))\nover = RandomOverSampler(sampling_strategy=0.07)\nX, y = over.fit_resample(X, y)\nprint(Counter(y))\nunder = RandomUnderSampler(sampling_strategy=0.2)\nX, y = under.fit_resample(X, y)\nprint(Counter(y))\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)","metadata":{"id":"FMcFl19CNWsL","outputId":"325453f5-8d6a-42ed-be77-e492de720df4"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"inputs = keras.Input(shape=(len(df.columns) - 1,), name=\"data\")\nx = layers.Dense(64, activation=\"relu\", name=\"dense_1\")(inputs)\nx = layers.Dense(64, activation=\"relu\", name=\"dense_2\")(x)\noutputs = layers.Dense(2, activation=\"softmax\", name=\"predictions\")(x)\n\nmodel = keras.Model(inputs=inputs, outputs=outputs)\nmodel.compile(\n    optimizer=keras.optimizers.RMSprop(learning_rate=1e-3),\n    loss=keras.losses.SparseCategoricalCrossentropy(),\n    metrics=[keras.metrics.SparseCategoricalAccuracy()],\n)","metadata":{"id":"l00UMiojTZox"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"Fit model on training data\")\nhistory = model.fit(\n    X_train,\n    y_train,\n    batch_size=128,\n    epochs=200,\n    # We pass some validation for\n    # monitoring validation loss and metrics\n    # at the end of each epoch\n    validation_data=(X_test, y_test),\n)","metadata":{"id":"HhRKWzEBTF6E","outputId":"efb7f0fb-faca-4f3a-c158-d142e39e94b5"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.evaluate(X_test,  y_test, verbose=2)","metadata":{"id":"mHH9jqq-TRCh","outputId":"bf25a35e-6c8e-45ed-d6dc-628dbf549543"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"real_data = np.vstack([data_test[data_test.columns[i]] for i in range(len(data_test.columns))]).T\ny_prob = model.predict(real_data)\ny_pred = np.argmax(y_prob, axis=1)\nlen(y_pred[y_pred == 0]), np.argsort(y_pred)[y_pred == 1]","metadata":{"id":"5zymEmlcX04k"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame({'Predicted': y_pred}).to_csv('solution.csv', index_label='Id')","metadata":{"id":"Nzqnp8oKX0sc"},"execution_count":null,"outputs":[]}]}