{"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":"# !kaggle competitions download -c just-the-basics-the-after-party","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from zipfile import ZipFile","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with ZipFile('just-the-basics-the-after-party.zip', 'r') as zipObj:\n#     zipObj.extractall()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.set_theme()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/just-the-basics-the-after-party/train.csv')\ntrain_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for idx, col in enumerate(train_df.columns):\n    train_df = train_df.rename(columns={col: str(idx)})","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['target'] = pd.read_csv('../input/just-the-basics-the-after-party/train_labels.csv')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.describe()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.corr()['target'].sort_values(ascending=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# EDA","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(20,20))\nsns.heatmap(train_df.corr())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.isna().sum().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.countplot(data=train_df, x='target')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(data=train_df, x='0')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(data=train_df, x='1')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, :10])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 10:20])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 20:30])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 30:40])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 40:50])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 50:60])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 60:70])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 70:80])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 80:90])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.pairplot(data=train_df.iloc[:, 90:100])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## EDA results:\n- There are not high correlation between features and target","metadata":{}},{"cell_type":"markdown","source":"# Data preprocessing","metadata":{}},{"cell_type":"code","source":"mean = {}","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def clean_data(df, test=False):\n    global mean\n    if not test:\n        for col in df.columns:\n            mean[col] = df[col].mean()\n    for col in df.columns:\n        df.fillna(mean[col], inplace=True)\n    return df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = clean_data(train_df)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.isna().sum().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pd.read_csv('../input/just-the-basics-the-after-party/test.csv')\ntest_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.isna().sum().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = clean_data(test_df)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.isna().sum().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model defining","metadata":{}},{"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC\nfrom sklearn.ensemble import AdaBoostClassifier, GradientBoostingClassifier, RandomForestClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score, confusion_matrix\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.preprocessing import MinMaxScaler, StandardScaler\nfrom sklearn.model_selection import GridSearchCV\nfrom xgboost import XGBClassifier, XGBRFClassifier\nfrom typing import Union","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = train_df.drop(columns=['target'])\nY = train_df['target']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape, Y.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"algorithms = {\n    'LogisticRegression': LogisticRegression(),\n    'SVC': SVC(),\n    'AdaBoostClassifier': AdaBoostClassifier(),\n    'GradientBoostingClassifier': GradientBoostingClassifier(),\n    'RandomForestClassifier': RandomForestClassifier(),\n    'KNeighborsClassifier': KNeighborsClassifier(),\n    'XGBClassifier': XGBClassifier(),\n    'XGBRFClassifier': XGBRFClassifier()\n}\n\nmodels = {}\n\nparam_grid = {\n    'LogisticRegression': {\n        'C': [1.0, 3.0, 5.0]\n    },\n    'SVC': {\n        'C': [1.0, 3.0, 5.0],\n        'kernel': ['poly', 'rbf', 'sigmoid']\n    },\n    'AdaBoostClassifier': {\n        'n_estimators': [100, 300],\n    },\n    'GradientBoostingClassifier': {\n        'n_estimators': [100, 300],\n        'max_depth': [3, 5, 7]\n    },\n    'RandomForestClassifier': {\n        'n_estimators': [100, 300],\n        'max_depth': [3, 5, 7]\n    },\n    'KNeighborsClassifier': {\n        'n_neighbors': [3, 6, 10]\n    },\n    'XGBClassifier': {\n        'n_estimators': [100, 300],\n        'max_depth': [3, 5, 7]\n    },\n    'XGBRFClassifier': {\n        'n_estimators': [100, 300],\n        'max_depth': [3, 5, 7]\n    }\n}\n\nscores = pd.DataFrame(data={'AUC': []})","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def calculate_performance(model, scores, algorithm=\"\"):\n#     global X, Y\n#     Y_pred = model.predict(X)\n#     acc = accuracy_score(Y, Y_pred)\n#     prec = precision_score(Y, Y_pred)\n#     rec = recall_score(Y, Y_pred)\n#     f1 = f1_score(Y, Y_pred)\n#     scores.loc[algorithm, 'Accuracy'] = acc\n#     scores.loc[algorithm, 'Precision'] = prec\n#     scores.loc[algorithm, 'Recall'] = rec\n#     scores.loc[algorithm, 'F1'] = f1","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def train(scaler: Union['none', 'Standard', 'MinMax']='none'):\n    global models\n    if scaler == 'none':\n        for index, model in algorithms.items():\n            models[index] = GridSearchCV(estimator=model, param_grid=param_grid[index], cv=10, scoring='roc_auc')\n            models[index].fit(X, Y)\n            scores.loc[index, \"AUC\"] = models[index].best_score_\n            print(index)\n            \n    elif scaler == 'Standard':\n        for index, model in algorithms.items():\n            models[index] = make_pipeline(StandardScaler(), GridSearchCV(estimator=model, param_grid=param_grid[index], cv=10, scoring='roc_auc', refit=True))\n            models[index].fit(X, Y)\n            scores.loc[index, \"AUC\"] = models[index]['gridsearchcv'].best_score_\n            print(index)\n    elif scaler == 'MinMax':\n        for index, model in algorithms.items():\n            models[index] = make_pipeline(MinMaxScaler(), GridSearchCV(estimator=model, param_grid=param_grid[index], cv=10, scoring='roc_auc', refit=True))\n            models[index].fit(X, Y)\n            scores.loc[index, \"AUC\"] = models[index]['gridsearchcv'].best_score_\n            print(index)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train('Standard')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores.sort_values(by=['AUC'], ascending=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = test_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test = models['GradientBoostingClassifier']['gridsearchcv'].best_estimator_.predict(X_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"solution = pd.DataFrame({0: Y_test})","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"solution","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"solution.to_csv('submission.csv', sep=',', index=False)","metadata":{},"execution_count":null,"outputs":[]}]}