{"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":"markdown","source":"\n# Work Plan for the Project\n\nI have divided the work into 2 notebooks. I think it is cleaner and shorter to keep notebooks seperated\n\n1. Data Preprocessing, Feature Engineering, EDA & Feature Importance Analysis \n    - Data Understanding\n    - Preprocess null values (Imputation)\n    - Create New Features (Categorical Feature Interactions, Binning, Percentiles, etc.)  \n    \nhttps://www.kaggle.com/emreuzel/titanic-datapreprocessing-feature-engineering/edit\n\n\n2. EDA & Feature Importance\n\n    - Exploratory data analysis for every feature\n    - Correlation Matrix \n    - Feature Importance Analysis using Cramer V Stat\n    \nhttps://www.kaggle.com/code/emreuzel/eda-and-feature-importance/edit/run/102506103\n\n\n \n3. ML models (This Notebook)\n\n    - Applying ML models\n    \n\n*I would be glad if you look into my work and give feedback by notes and upvotes. Thanks!*","metadata":{}},{"cell_type":"markdown","source":"# Libraries","metadata":{}},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom sklearn.preprocessing import OneHotEncoder\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.express as px\nfrom warnings import simplefilter\nimport scipy.stats as ss\nimport math\n\nimport optuna\n\n\n#CV-Scaling-Metrics\nfrom sklearn.model_selection import StratifiedKFold, KFold, cross_val_score\nfrom sklearn.preprocessing import RobustScaler\nfrom sklearn import metrics\n\n#PCA, Feature Engineering, etc. \nfrom sklearn.decomposition import PCA\nfrom sklearn.cluster import KMeans\nfrom sklearn import tree\n\nimport graphviz.backend as be\n\n\n#Models\nfrom sklearn.tree import DecisionTreeClassifier \nfrom sklearn.ensemble import RandomForestClassifier, VotingClassifier\nfrom sklearn.tree import ExtraTreeClassifier \nfrom xgboost import XGBClassifier \nfrom lightgbm import LGBMClassifier\nfrom sklearn.svm import SVC\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\nfrom sklearn import linear_model\nfrom catboost import CatBoostClassifier\nfrom sklearn.naive_bayes import GaussianNB, MultinomialNB, ComplementNB, BernoulliNB, CategoricalNB\nfrom sklearn.neighbors import KNeighborsClassifier\n\n\nsimplefilter(\"ignore\", category=RuntimeWarning)\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-08-07T20:12:01.045508Z","iopub.execute_input":"2022-08-07T20:12:01.045852Z","iopub.status.idle":"2022-08-07T20:12:01.068127Z","shell.execute_reply.started":"2022-08-07T20:12:01.045829Z","shell.execute_reply":"2022-08-07T20:12:01.067248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Read Data & Apply Necessary Preprocessing\n","metadata":{}},{"cell_type":"code","source":"df_train = pd.read_csv('/kaggle/input/titanic-train-ready/df_train.csv', index_col = 0)\ndf_test = pd.read_csv('/kaggle/input/titanic-train-ready/df_test.csv', index_col = 0)\n\ncat_cols = list(df_train.drop(columns = ['Survived', 'PassengerId', 'Name', 'Ticket', 'Fare', 'Age', 'percentile_Age', 'percentile_Fare', 'SibSp', 'Parch', 'Fare_logged', 'Age_logged', 'family_size', 'Ticket_count']).columns)\n\nsingle_cols = ['Pclass', 'Sex', 'Embarked', 'title', 'new_cabin', 'is_alone','family_size_category']\ndouble_cols = ['Sex__Pclass', 'Sex__Embarked', 'Sex__fare_bin', 'Sex__Age_binned', 'Pclass__Embarked', 'Pclass__fare_bin', 'Embarked__Age_binned', 'fare_bin__Age_binned', 'Pclass__title', 'title__fare_bin', 'Embarked__fare_bin', 'Pclass__Age_binned']\ntriple_cols = ['Sex__Pclass__Embarked', 'Sex__Pclass__fare_bin', 'Sex__Pclass__Age', 'Sex__Pclass__Age_binned']\n\n\ndef model_data(df_train, dropped_cols):\n    df_train = df_train.drop(columns = dropped_cols)\n    return df_train\n\ndf_train = model_data(df_train, ['Name',  'PassengerId',])\n#df_test  = model_data(df_test, ['Name',  'PassengerId',])\n\n\nnumeric_cols = ['SibSp', 'Parch', 'Fare', 'Age', 'Age_binned', 'fare_bin', 'Age_logged', 'Fare_logged', 'percentile_Age', 'percentile_Fare']\n\ndef scale_dataframe(df_train):\n    robustscaler = RobustScaler()\n    df_train[numeric_cols] = robustscaler.fit_transform(df_train[numeric_cols])\n    return df_train\n\n#df_train = scale_dataframe(df_train)\n#df_test = scale_dataframe(df_test)\n\n\n","metadata":{"execution":{"iopub.status.busy":"2022-08-07T19:59:58.520472Z","iopub.execute_input":"2022-08-07T19:59:58.521170Z","iopub.status.idle":"2022-08-07T19:59:58.580880Z","shell.execute_reply.started":"2022-08-07T19:59:58.521145Z","shell.execute_reply":"2022-08-07T19:59:58.580365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Functions\n\nBelow, you can find both model functions and feature engineering functions like 'pca_implementer and kmeans_implementer'. These functions are written in order to use easily in the prediction pipeline.","metadata":{}},{"cell_type":"code","source":"def dec_tree_classifier(xtrain, ytrain, max_depth_val, max_features_val, min_samples_leaf_val):\n    clf = dtc(random_state = 42, max_depth = max_depth_val, max_features = max_features_val, min_samples_leaf = min_samples_leaf_val)\n    clf.fit(xtrain, ytrain)\n    return clf    \n\ndef neural_nets_classifier(xtrain, ytrain):\n    model = keras.Sequential([\n        layers.Dense(32, activation = 'relu'), \n        layers.Dense(32, activation = 'relu'), \n        layers.Dense(1, activation = 'sigmoid')\n    ])\n    \n    model.compile(optimizer = 'rmsprop',\n                 loss = 'binary_crossentropy',\n                 metrics = ['accuracy'])\n    model.fit(xtrain, ytrain, epochs = 20, batch_size = 512)\n\n    return model\n\ndef log_reg_classifier(xtrain, ytrain):\n    model = linear_model.LogisticRegression()\n    model.fit(xtrain, ytrain)\n    return model\n\ndef onehot_encoder(df_train, single_cols):\n    dummied_df = pd.get_dummies(df_train[single_cols])\n    new_df = df_train.drop(columns = single_cols)\n    df_train = pd.concat([new_df, dummied_df], axis = 1 )\n    return df_train\n\ndef target_encoder(xtrainfull, xtrain, xval, cat_cols):\n    for col in cat_cols:\n        new_list= xtrainfull.groupby(col)[\"Survived\"].transform(\"mean\")\n        xtrain_new = pd.merge(xtrain[col], new_list, right_index = True, left_index = True)\n        the_series_0 = list(np.array(xtrain_new.iloc[:, 0])) \n        the_series_1 = list(np.array(xtrain_new.iloc[:, 1]))\n        key_dict = dict(zip(the_series_0,the_series_1))\n        xtrain = xtrain.replace({col: key_dict})\n        xval = xval.replace({col: key_dict})\n    return xtrain, xval\n\ndef pca_implementer(xtrain, xval):\n    #PCA implementation Starts\n    pca = PCA(n_components = 2)\n    pca.fit(xtrain)\n    x_train_pca = pca.transform(xtrain)\n    x_val_pca = pca.transform(xval)\n        \n    x_train_pca = pd.DataFrame(x_train_pca, columns = ['PCA_1', 'PCA_2'])\n    x_val_pca = pd.DataFrame(x_val_pca, columns = ['PCA_1', 'PCA_2'])\n    x_train_pca.fillna(0, inplace = True)\n    x_val_pca.fillna(0, inplace = True)\n        \n    xtrain.reset_index(drop = True, inplace = True)\n    xval.reset_index(drop = True, inplace = True)\n        \n        \n        \n    initial_columns = list(xtrain.columns)\n    initial_columns.extend(['PCA_1', 'PCA_2'])\n    xtrain = pd.concat([xtrain, x_train_pca], axis = 1, ignore_index =True)\n    xval = pd.concat([xval, x_val_pca], axis = 1, ignore_index = True)\n        \n    xtrain.columns = initial_columns\n    xval.columns = initial_columns\n    #PCA implementation Ends\n    \n    return xtrain, xval\n\n\ndef kmeans_implementer(xtrain, xval):\n    for k in [2]:\n        kmeans = KMeans(n_clusters=k)\n        k_clusters = kmeans.fit_predict(xtrain)\n        xtrain['k_clusters_' + str(k)] = k_clusters\n            \n    for k in [2]:\n        kmeans = KMeans(n_clusters=k)\n        k_clusters = kmeans.fit_predict(xval)\n        xval['k_clusters_' + str(k)] = k_clusters\n        \n    return xtrain, xval\n\n\ndef number_of_same_ticket_people(xtrain, xval):\n\n     \n    xtrain['survived_ticket']= np.nan\n    xtrain['number_of_supportage']= np.nan\n\n    xval['survived_ticket']= np.nan\n    xval['number_of_supportage']= np.nan\n\n    for ind in xtrain.index:\n        the_ticket = xtrain.loc[ind, 'Ticket']\n        if len(xtrain[xtrain.Ticket == the_ticket]) >1:\n            new_df = xtrainfull.drop(ind)\n            mean_survive = new_df.groupby(by = 'Ticket').mean()\n            count_survive = new_df.groupby(by = 'Ticket').count()\n            xtrain.loc[ind, 'survived_ticket']= mean_survive[mean_survive.index == the_ticket]['Survived'][0]\n            xtrain.loc[ind, 'number_of_supportage']= count_survive[count_survive.index == the_ticket]['Pclass'][0]\n        else:\n            pass\n\n    for ind in xval.index:\n        the_ticket = xval.loc[ind, 'Ticket']\n        if len(xtrain[xtrain.Ticket == the_ticket]) >1:\n            new_df = xtrainfull\n            mean_survive = new_df.groupby(by = 'Ticket').mean()\n            count_survive = new_df.groupby(by = 'Ticket').count()\n            print(mean_survive[mean_survive.index == the_ticket]['Survived'])\n            xval.loc[ind, 'survived_ticket']= mean_survive[mean_survive.index == the_ticket]['Survived'][0]\n            xval.loc[ind, 'number_of_supportage']= count_survive[count_survive.index == the_ticket]['Pclass'][0]\n        else:\n            pass\n        \n        \n    xtrain.drop(columns = ['Ticket'], inplace = True)\n    xval.drop(columns = ['Ticket'], inplace = True)\n    \n    return xtrain, xval\n\n\ndef rf_feature_importance(xtrain , ytrain):\n    rf = RandomForestRegressor(n_estimators=200)\n    rf.fit(xtrain, y_train)\n    sorted_idx = rf.feature_importances_.argsort()\n    plt.barh(xtrain.columns[sorted_idx], rf.feature_importances_[sorted_idx])\n    plt.xlabel(\"Random Forest Feature Importance\")\n    plt.show()\n    \n","metadata":{"execution":{"iopub.status.busy":"2022-08-07T19:59:58.582089Z","iopub.execute_input":"2022-08-07T19:59:58.582699Z","iopub.status.idle":"2022-08-07T19:59:58.606737Z","shell.execute_reply.started":"2022-08-07T19:59:58.582668Z","shell.execute_reply":"2022-08-07T19:59:58.605900Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modelling","metadata":{}},{"cell_type":"code","source":"df_train['cv']= np.nan\ndf_train = df_train.copy()\nfor  i in range(4):\n    if i == 3:\n        df_train.loc[(200* i): , 'cv'] = i\n    else:\n        df_train.loc[(200* i): (200 * (i+1)), 'cv'] = i","metadata":{"execution":{"iopub.status.busy":"2022-08-07T19:59:59.443688Z","iopub.execute_input":"2022-08-07T19:59:59.443903Z","iopub.status.idle":"2022-08-07T19:59:59.452967Z","shell.execute_reply.started":"2022-08-07T19:59:59.443883Z","shell.execute_reply":"2022-08-07T19:59:59.451736Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_total_accuracy = []\nval_total_accuracy = []\n\nfor i in range(4):\n    df_valx = df_train[df_train.cv == i]\n    df_trainx = df_train[df_train.cv != i]\n        \n    xtrain = df_trainx.drop(columns = ['Survived', 'cv'])\n    xval = df_valx.drop(columns = ['Survived', 'cv'])\n\n    ytrain = df_trainx.Survived\n    yval = df_valx.Survived\n    \n    train_cols = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'family_size', 'is_alone' ]\n    cat_cols = ['Pclass', 'Sex', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'is_alone']\n        #train_cols = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare','Embarked', 'title', 'fare_bin', 'Age_binned','Sex__Pclass',  'Pclass__Embarked', 'Pclass__fare_bin','family_size', 'is_alone',]\n        #train_cols = ['Sex', 'Pclass', 'Embarked', 'Fare', 'Age', 'family_size', ]\n        #train_cols = ['Sex', 'Pclass', 'Embarked', 'Fare_logged', 'Age_logged']\n        #train_cols = ['Sex__Pclass__Embarked']\n        #train_cols = ['Sex', 'Pclass', 'Fare', 'Age']\n\n    xtrain = xtrain[train_cols]\n    xval = xval[train_cols]\n        \n    xtrainfull = pd.concat([xtrain, ytrain], axis = 1).copy()\n\n    #xtrain = onehot_encoder(xtrain, train_cols)\n    #xval = onehot_encoder(xval, train_cols)\n    \n    xtrain, xval = target_encoder(xtrainfull, xtrain, xval, cat_cols)\n        #print(xtrain)\n        #single_cols = ['Sex', 'Pclass', 'Embarked', 'fare_bin' ]\n        #xtrain, xval = target_encoder(xtrainfull, xtrain, xval, train_cols)\n        \n    #clf = XGBClassifier(max_depth = 2, n_estimators = 50, subsample = 0.5, min_child_weight = 5)\n    clf = RandomForestClassifier(max_depth = 20, n_estimators = 1000, min_samples_split=5, min_samples_leaf=5,\n                                 n_jobs = -1, random_state = 42  )\n        \n        #clf = DecisionTreeClassifier(max_depth = , min_samples_split = 20, min_samples_leaf = 20, )\n        \n\n    \n    clf.fit(xtrain, ytrain)\n    train_preds = clf.predict_proba(xtrain)\n    val_preds = clf.predict_proba(xval)\n    train_preds = (train_preds[:, 1] > 0.53) *1\n    val_preds = (val_preds[:, 1] > 0.53) *1\n\n    print('CV', str(i+1), ': The training results: Accuracy:', metrics.accuracy_score(ytrain, train_preds))\n    print('CV', str(i+1), ': The validation results: Accuracy:', metrics.accuracy_score(yval, val_preds))\n    \n    train_total_accuracy.append(metrics.accuracy_score(ytrain, train_preds))\n    val_total_accuracy.append(metrics.accuracy_score(ytrain, train_preds))\n    \nprint('General training accuracy score:', np.mean(train_total_accuracy))\nprint('General validation accuracy score:', np.mean(val_total_accuracy))","metadata":{"execution":{"iopub.status.busy":"2022-08-07T20:31:44.702159Z","iopub.execute_input":"2022-08-07T20:31:44.703008Z","iopub.status.idle":"2022-08-07T20:31:55.386393Z","shell.execute_reply.started":"2022-08-07T20:31:44.702981Z","shell.execute_reply":"2022-08-07T20:31:55.385837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Hyperparameter Optimization: Optuna","metadata":{}},{"cell_type":"code","source":"def objective(trial):\n    train_total_accuracy = []\n    val_total_accuracy = []\n    for i in range(4):\n        df_valx = df_train[df_train.cv == i]\n        df_trainx = df_train[df_train.cv != i]\n\n        xtrain = df_trainx.drop(columns = ['Survived', 'cv'])\n        xval = df_valx.drop(columns = ['Survived', 'cv'])\n\n        ytrain = df_trainx.Survived\n        yval = df_valx.Survived\n\n        train_cols = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'family_size', 'is_alone' ]\n        cat_cols = ['Pclass', 'Sex', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'is_alone']\n            #train_cols = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare','Embarked', 'title', 'fare_bin', 'Age_binned','Sex__Pclass',  'Pclass__Embarked', 'Pclass__fare_bin','family_size', 'is_alone',]\n            #train_cols = ['Sex', 'Pclass', 'Embarked', 'Fare', 'Age', 'family_size', ]\n            #train_cols = ['Sex', 'Pclass', 'Embarked', 'Fare_logged', 'Age_logged']\n            #train_cols = ['Sex__Pclass__Embarked']\n            #train_cols = ['Sex', 'Pclass', 'Fare', 'Age']\n\n        xtrain = xtrain[train_cols]\n        xval = xval[train_cols]\n\n        xtrainfull = pd.concat([xtrain, ytrain], axis = 1).copy()\n\n        #xtrain = onehot_encoder(xtrain, train_cols)\n        #xval = onehot_encoder(xval, train_cols)\n\n        xtrain, xval = target_encoder(xtrainfull, xtrain, xval, cat_cols)\n            #print(xtrain)\n            #single_cols = ['Sex', 'Pclass', 'Embarked', 'fare_bin' ]\n            #xtrain, xval = target_encoder(xtrainfull, xtrain, xval, train_cols)\n\n        #clf = XGBClassifier(max_depth = 2, n_estimators = 50, subsample = 0.5, min_child_weight = 5)\n        clf = RandomForestClassifier(max_depth = 10, n_estimators = 1000, min_samples_split=10, min_samples_leaf=10,\n                                     n_jobs = -1, random_state = 42  )\n\n            #clf = DecisionTreeClassifier(max_depth = , min_samples_split = 20, min_samples_leaf = 20, )\n\n\n        max_depth = trial.suggest_int('max_depth', 5,  20)\n        min_samples_split= int(trial.suggest_int('min_samples_split', 5, 20))\n        min_samples_leaf= trial.suggest_int('min_samples_leaf', 5, 20)\n\n        clf = RandomForestClassifier(n_estimators=500, max_depth=max_depth, min_samples_split = min_samples_split,\n                                     min_samples_leaf = min_samples_leaf, n_jobs =-1, random_state =42)\n\n        clf.fit(xtrain, ytrain)\n        train_preds = clf.predict_proba(xtrain)\n        val_preds = clf.predict_proba(xval)\n        train_preds = (train_preds[:, 1] > 0.53) *1\n        val_preds = (val_preds[:, 1] > 0.53) *1\n\n        train_total_accuracy.append(metrics.accuracy_score(ytrain, train_preds))\n        val_total_accuracy.append(metrics.accuracy_score(ytrain, train_preds))\n    \n    \n    \n    \n    return np.mean(val_total_accuracy)","metadata":{"execution":{"iopub.status.busy":"2022-08-07T20:21:12.249309Z","iopub.execute_input":"2022-08-07T20:21:12.249611Z","iopub.status.idle":"2022-08-07T20:21:12.261733Z","shell.execute_reply.started":"2022-08-07T20:21:12.249587Z","shell.execute_reply":"2022-08-07T20:21:12.261042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Open the cells below if you would like to run optuna for hyper-parameter optimization. \n\n- Although the resulting best parameters are showing great results with validation, they are not the best ones for test set. Therefore, for the test set, the parameters are chosen with trial and error methodology.","metadata":{}},{"cell_type":"code","source":"#study = optuna.create_study(direction='maximize')\n#study.optimize(objective, n_trials=100)","metadata":{"execution":{"iopub.status.busy":"2022-08-07T20:38:36.812000Z","iopub.execute_input":"2022-08-07T20:38:36.812328Z","iopub.status.idle":"2022-08-07T20:38:36.815520Z","shell.execute_reply.started":"2022-08-07T20:38:36.812304Z","shell.execute_reply":"2022-08-07T20:38:36.814884Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#print(study.best_trial, '\\n \\n')\n#print(study.best_params)","metadata":{"execution":{"iopub.status.busy":"2022-08-07T20:32:50.225710Z","iopub.execute_input":"2022-08-07T20:32:50.226797Z","iopub.status.idle":"2022-08-07T20:32:50.231644Z","shell.execute_reply.started":"2022-08-07T20:32:50.226757Z","shell.execute_reply":"2022-08-07T20:32:50.230867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction","metadata":{}},{"cell_type":"code","source":"train_cols = ['Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'family_size', 'is_alone' ]\ncat_cols = ['Pclass', 'Sex', 'fare_bin', 'Embarked', 'title', 'Sex__Pclass', 'is_alone']\n\nxtrain = df_train.drop(columns =['Survived'])\nytrain = df_train.Survived\n\nxtest= model_data(df_test, ['Name',  'PassengerId',])\n\nxtrain = xtrain[train_cols]\nxtest = xtest[train_cols]\n\n\nxtrainfull = pd.concat([xtrain, ytrain], axis = 1)\nxtrain, xtest = target_encoder(xtrainfull, xtrain, xtest, cat_cols)\n\nclf = RandomForestClassifier(max_depth = 10, n_estimators = 1000, min_samples_split=10, min_samples_leaf=10,\n                                 n_jobs = -1, random_state = 42  )\n\n\n\nclf.fit(xtrain, ytrain)\ntrain_preds = clf.predict_proba(xtrain)\ntest_preds = clf.predict_proba(xtest)\ntrain_preds = (train_preds[:, 1] > 0.53) *1\ntest_preds = (test_preds[:, 1] > 0.53) *1\n\n\nprint('The training results:', metrics.accuracy_score(ytrain, train_preds))\n#print('The training results:', metrics.accuracy_score(yval, test_preds))","metadata":{"execution":{"iopub.status.busy":"2022-08-07T20:35:56.522854Z","iopub.execute_input":"2022-08-07T20:35:56.523145Z","iopub.status.idle":"2022-08-07T20:35:58.049453Z","shell.execute_reply.started":"2022-08-07T20:35:56.523122Z","shell.execute_reply":"2022-08-07T20:35:58.048615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.DataFrame(np.stack([df_test.PassengerId, test_preds], axis = 1), columns = ['PassengerId', 'Survived'])\nsubmission.to_csv('submission.csv', index = False)","metadata":{"execution":{"iopub.status.busy":"2022-08-07T18:20:34.166742Z","iopub.execute_input":"2022-08-07T18:20:34.167412Z","iopub.status.idle":"2022-08-07T18:20:34.175452Z","shell.execute_reply.started":"2022-08-07T18:20:34.167378Z","shell.execute_reply":"2022-08-07T18:20:34.174599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}