{"cells":[{"metadata":{},"cell_type":"markdown","source":"Its Easy, Effective and Simple !!\n\nIn just five steps:\n1. Loading.\n2. Encoding.\n3. Model Creation.\n4. Model Execution.\n5. Getting Result.\n\n**Happy learning**\n\nUp-Vote if u liked it ^.^"},{"metadata":{"id":"uzif63jKyUiA","colab_type":"code","colab":{},"trusted":false},"cell_type":"code","source":"# STEP-1\nimport category_encoders as ce\nimport pandas as pd\nimport numpy as np\n\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import Sequential\nfrom tensorflow.keras.layers import MaxPool1D, Flatten, Dense, Dropout, BatchNormalization\nfrom tensorflow.keras.optimizers import Adam\nfrom tensorflow.keras.callbacks import ModelCheckpoint, EarlyStopping\nfrom tensorflow.keras import callbacks\n\nfrom sklearn.metrics import accuracy_score, roc_auc_score, auc\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn import metrics, preprocessing\nfrom tensorflow.keras import backend as K","execution_count":0,"outputs":[]},{"metadata":{"id":"NH2pILEexznD","colab_type":"code","colab":{},"trusted":false},"cell_type":"code","source":"sample_submission = pd.read_csv(\"../input/cat-in-the-dat-ii/sample_submission.csv\")\ntest = pd.read_csv(\"../input/cat-in-the-dat-ii/test.csv\")\ntrain = pd.read_csv(\"../input/cat-in-the-dat-ii/train.csv\")","execution_count":0,"outputs":[]},{"metadata":{"id":"XwdonHWAz4aR","colab_type":"code","colab":{},"trusted":false},"cell_type":"code","source":"# STEP-2\ndef encoding(train, test, smooth):\n    print('Target encoding...')\n    train.sort_index(inplace=True)\n    target = train['target']\n    test_id = test['id']\n    train.drop(['target', 'id'], axis=1, inplace=True)\n    test.drop('id', axis=1, inplace=True)\n    cat_feat_to_encode = train.columns.tolist()\n    smoothing=smooth\n    oof = pd.DataFrame([])\n    for tr_idx, oof_idx in StratifiedKFold(n_splits=5, random_state=2020, shuffle=True).split(train, target):\n        ce_target_encoder = ce.TargetEncoder(cols = cat_feat_to_encode, smoothing=smoothing)\n        ce_target_encoder.fit(train.iloc[tr_idx, :], target.iloc[tr_idx])\n        oof = oof.append(ce_target_encoder.transform(train.iloc[oof_idx, :]), ignore_index=False)\n    ce_target_encoder = ce.TargetEncoder(cols = cat_feat_to_encode, smoothing=smoothing)\n    ce_target_encoder.fit(train, target)\n    train = oof.sort_index()\n    test = ce_target_encoder.transform(test)\n    features = list(train)\n    print('Target encoding done!')\n    return train, test, test_id, features, target","execution_count":0,"outputs":[]},{"metadata":{"id":"eBzFUcFMz7I9","colab_type":"code","outputId":"491b28ab-d864-4149-ee0d-be5d97b9a86f","colab":{"base_uri":"https://localhost:8080/","height":52},"trusted":false},"cell_type":"code","source":"# Encoding\ntrain, test, test_id, features, target = encoding(train, test, 0.3)","execution_count":0,"outputs":[]},{"metadata":{"id":"eJK8kMHTz9gB","colab_type":"code","colab":{},"trusted":false},"cell_type":"code","source":"train['target']=target\nscaler=StandardScaler()\n\ntest_data=scaler.fit_transform(test[features])\ntest_data=test_data.reshape(test_data.shape[0],test_data.shape[1],1)","execution_count":0,"outputs":[]},{"metadata":{"id":"F8rlOCH221Bd","colab_type":"code","colab":{},"trusted":false},"cell_type":"code","source":"# STEP-3\n\ndef NN_model():\n  # model\n  model=Sequential()\n  model.add(Flatten(input_shape=(23,1)))\n\n  model.add(Dense(64, activation='relu'))\n  model.add(BatchNormalization())\n  model.add(Dropout(0.2))\n\n  model.add(Dense(128, activation='relu'))\n  model.add(BatchNormalization())\n  model.add(Dropout(0.2))\n\n  model.add(Dense(256, activation='relu'))\n  model.add(Dropout(0.3))\n\n  model.add(Dense(1,activation='sigmoid'))\n\n  model.compile(optimizer=Adam(lr=1e-3), loss='binary_crossentropy', metrics=['accuracy'])\n\n  return model","execution_count":0,"outputs":[]},{"metadata":{"id":"buM38ArZ2_pz","colab_type":"code","outputId":"5ea4c503-c475-4beb-edfc-8f9da4efc9fc","colab":{"base_uri":"https://localhost:8080/","height":401},"trusted":false},"cell_type":"code","source":"# STEP-4\n\noof_preds = np.zeros((len(train)))\ntest_preds = np.zeros((len(test)))\n\nskf = StratifiedKFold(n_splits=10)\nfor train_index, test_index in skf.split(train, train.target.values):\n    \n    # Setting train and test dataset :-\n    \n    X_train, X_test = train.iloc[train_index, :], train.iloc[test_index, :] # for setting X_train and X_test every fold\n\n    X_train = X_train.reset_index(drop=True)\n    X_test = X_test.reset_index(drop=True)\n\n    y_train, y_test = X_train.target, X_test.target # setting y_train and y_test\n\n\n    #----------------------------------------------------------#\n    # data preparation\n\n    X_train=scaler.fit_transform(X_train[features])\n    X_test=scaler.fit_transform(X_test[features])\n\n    y_train=y_train.to_numpy()\n    y_test=y_test.to_numpy()\n\n    X_train=X_train.reshape(X_train.shape[0],X_train.shape[1],1)\n    X_test=X_test.reshape(X_test.shape[0],X_test.shape[1],1)\n\n    #----------------------------------------------------------#\n\n    #set early stopping criteria\n    es = callbacks.EarlyStopping(monitor='val_accuracy', min_delta=0.001, patience=5,verbose=1, mode='max', baseline=None, restore_best_weights=True)\n    rlr = callbacks.ReduceLROnPlateau(monitor='val_accuracy', factor=0.5,patience=3, min_lr=1e-6, mode='max', verbose=1)\n\n    model = NN_model() #model creation\n    class_weight = {0: 0.25, 1: 0.75}\n    model.fit(X_train, y_train, epochs=25, batch_size=1024, callbacks=[es, rlr], verbose=1,validation_data=(X_test, y_test), class_weight=class_weight) \n\n    #----------------------------------------------------------#\n    #validation\n    \n    valid_fold_preds = model.predict(X_test)\n    test_fold_preds = model.predict(test_data)\n    oof_preds[test_index] = valid_fold_preds.ravel()\n    test_preds += test_fold_preds.ravel()\n    print(metrics.roc_auc_score(y_test, valid_fold_preds))\n    K.clear_session()","execution_count":0,"outputs":[]},{"metadata":{"id":"aBso5uTS70el","colab_type":"code","outputId":"1fdc4b7a-1a5f-469b-fef7-f17dcb21fe4b","colab":{"base_uri":"https://localhost:8080/","height":34},"trusted":false},"cell_type":"code","source":"# STEP-5\n\ntest_preds /= 10\nprint(\"Saving submission file\")\nsubmission = pd.DataFrame.from_dict({\n    'id': test_id,\n    'target': test_preds\n})\nsubmission.to_csv(\"submission.csv\", index=False)","execution_count":0,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Please UP-Vote my solution if you guys liked it !!!**"}],"metadata":{"colab":{"name":"TE+DL.ipynb","provenance":[],"collapsed_sections":[],"machine_shape":"hm"},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"nbformat":4,"nbformat_minor":1}