{"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 seaborn as sns\nimport matplotlib.pyplot as plt\n\nfrom tensorflow import keras\n\nfrom sklearn import svm, neighbors\nfrom sklearn.preprocessing import LabelEncoder, OneHotEncoder, MinMaxScaler\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.ensemble import RandomForestClassifier\nfrom xgboost import XGBClassifier\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import RepeatedStratifiedKFold\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-03T20:41:15.670950Z","iopub.execute_input":"2022-08-03T20:41:15.671360Z","iopub.status.idle":"2022-08-03T20:41:15.687821Z","shell.execute_reply.started":"2022-08-03T20:41:15.671323Z","shell.execute_reply":"2022-08-03T20:41:15.686595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 1. Get the Data","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv(\"../input/titanic/train.csv\")\ntest = pd.read_csv(\"../input/titanic/test.csv\")\n\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:15.717665Z","iopub.execute_input":"2022-08-03T20:41:15.718039Z","iopub.status.idle":"2022-08-03T20:41:15.748347Z","shell.execute_reply.started":"2022-08-03T20:41:15.718005Z","shell.execute_reply":"2022-08-03T20:41:15.747248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:15.753863Z","iopub.execute_input":"2022-08-03T20:41:15.754191Z","iopub.status.idle":"2022-08-03T20:41:15.770657Z","shell.execute_reply.started":"2022-08-03T20:41:15.754158Z","shell.execute_reply":"2022-08-03T20:41:15.769503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:15.790821Z","iopub.execute_input":"2022-08-03T20:41:15.791165Z","iopub.status.idle":"2022-08-03T20:41:15.807802Z","shell.execute_reply.started":"2022-08-03T20:41:15.791135Z","shell.execute_reply":"2022-08-03T20:41:15.806891Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2. Exploratory Data Analysis (EDA)","metadata":{}},{"cell_type":"code","source":"surv = {0: \"No\", 1: \"Yes\"}\ntrain_sns = pd.read_csv(\"../input/titanic/train.csv\")\ntrain_sns[\"Survived\"] = [surv[i] for i in list(train_sns[\"Survived\"])]\nsns.histplot(train_sns, x=\"Survived\", hue=\"Sex\", multiple=\"dodge\", shrink=.8)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:15.817311Z","iopub.execute_input":"2022-08-03T20:41:15.817689Z","iopub.status.idle":"2022-08-03T20:41:15.998572Z","shell.execute_reply.started":"2022-08-03T20:41:15.817648Z","shell.execute_reply":"2022-08-03T20:41:15.997566Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(train_sns, x=\"Survived\", hue=\"Pclass\", multiple=\"dodge\", shrink=.8)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.000036Z","iopub.execute_input":"2022-08-03T20:41:16.000345Z","iopub.status.idle":"2022-08-03T20:41:16.200058Z","shell.execute_reply.started":"2022-08-03T20:41:16.000314Z","shell.execute_reply":"2022-08-03T20:41:16.199235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.boxplot(data=train_sns, x=\"Survived\", y=\"Age\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.201518Z","iopub.execute_input":"2022-08-03T20:41:16.201938Z","iopub.status.idle":"2022-08-03T20:41:16.349599Z","shell.execute_reply.started":"2022-08-03T20:41:16.201907Z","shell.execute_reply":"2022-08-03T20:41:16.348503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.boxplot(data=train_sns, x=\"Survived\", y=\"Fare\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.351384Z","iopub.execute_input":"2022-08-03T20:41:16.351741Z","iopub.status.idle":"2022-08-03T20:41:16.485634Z","shell.execute_reply.started":"2022-08-03T20:41:16.351708Z","shell.execute_reply":"2022-08-03T20:41:16.484789Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.boxplot(data=train_sns, x=\"Survived\", y=\"SibSp\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.486722Z","iopub.execute_input":"2022-08-03T20:41:16.487128Z","iopub.status.idle":"2022-08-03T20:41:16.630962Z","shell.execute_reply.started":"2022-08-03T20:41:16.487097Z","shell.execute_reply":"2022-08-03T20:41:16.630172Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.boxplot(data=train_sns, x=\"Survived\", y=\"Parch\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.632045Z","iopub.execute_input":"2022-08-03T20:41:16.632475Z","iopub.status.idle":"2022-08-03T20:41:16.766335Z","shell.execute_reply.started":"2022-08-03T20:41:16.632444Z","shell.execute_reply":"2022-08-03T20:41:16.765546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(train_sns, x=\"Survived\", hue=\"Embarked\", multiple=\"dodge\", shrink=.8)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:16.767390Z","iopub.execute_input":"2022-08-03T20:41:16.767818Z","iopub.status.idle":"2022-08-03T20:41:17.007920Z","shell.execute_reply.started":"2022-08-03T20:41:16.767787Z","shell.execute_reply":"2022-08-03T20:41:17.006891Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3. Data Preparation","metadata":{}},{"cell_type":"code","source":"cols = [\"Pclass\", \"Sex\", \"Age\", \"Parch\", \"Fare\", \"Embarked\"]\ncat_cols = [\"Pclass\", \"Sex\", \"Embarked\"]\n\ntrain = train[[\"Survived\"] + cols]\ntest = test[cols]","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.010769Z","iopub.execute_input":"2022-08-03T20:41:17.011351Z","iopub.status.idle":"2022-08-03T20:41:17.020149Z","shell.execute_reply.started":"2022-08-03T20:41:17.011305Z","shell.execute_reply":"2022-08-03T20:41:17.019213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.info()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.022580Z","iopub.execute_input":"2022-08-03T20:41:17.022971Z","iopub.status.idle":"2022-08-03T20:41:17.044314Z","shell.execute_reply.started":"2022-08-03T20:41:17.022930Z","shell.execute_reply":"2022-08-03T20:41:17.043337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def age_class(age):\n    if age >= 0 and age < 10:\n        return 1\n    elif age >= 10 and age < 15:\n        return 2\n    elif age >= 15 and age < 20:\n        return 3\n    elif age >= 20 and age < 30:\n        return 4\n    elif age >= 30 and age < 40:\n        return 5\n    elif age >= 50 and age < 60:\n        return 6\n    elif age <= 60 and age < 70:\n        return 7\n    else:\n        return 8\n    \ndef transform_df(df):\n    \n    #handling missing values\n    df[\"Age\"] = df[\"Age\"].fillna(df[[\"Age\"]].dropna().values.mean())\n    df[\"Fare\"] = df[\"Fare\"].fillna(df[[\"Fare\"]].dropna().values.mean())\n    \n    #turning Age column into categorial column\n    df[\"Age\"] = df.Age.apply(lambda x: age_class(x))\n\n    cat_cols = [\"Pclass\", \"Sex\", \"Embarked\", \"Age\"]\n    df = pd.get_dummies(df, columns=cat_cols)\n    return df\n    \ndef custom_pipeline(df):\n    \n    df = transform_df(df)\n    \n    try:\n        y = df[\"Survived\"].values\n        X = df.drop([\"Survived\"], axis=1).values\n        \n        min_max_scaler = MinMaxScaler()\n        X = min_max_scaler.fit_transform(X)\n        \n        return X, y\n    \n    except:\n        X = df.values\n        \n        min_max_scaler = MinMaxScaler()\n        X = min_max_scaler.fit_transform(X)\n        \n        return X","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.045747Z","iopub.execute_input":"2022-08-03T20:41:17.046307Z","iopub.status.idle":"2022-08-03T20:41:17.060009Z","shell.execute_reply.started":"2022-08-03T20:41:17.046265Z","shell.execute_reply":"2022-08-03T20:41:17.058985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X, y = custom_pipeline(train)\n\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=0)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.061396Z","iopub.execute_input":"2022-08-03T20:41:17.061977Z","iopub.status.idle":"2022-08-03T20:41:17.096812Z","shell.execute_reply.started":"2022-08-03T20:41:17.061935Z","shell.execute_reply":"2022-08-03T20:41:17.095614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.shape, X_val.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.098331Z","iopub.execute_input":"2022-08-03T20:41:17.098774Z","iopub.status.idle":"2022-08-03T20:41:17.104915Z","shell.execute_reply.started":"2022-08-03T20:41:17.098727Z","shell.execute_reply":"2022-08-03T20:41:17.104170Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 4. Machine Learning","metadata":{}},{"cell_type":"markdown","source":"## 4.1 Support Vector Machine","metadata":{}},{"cell_type":"code","source":"svc = svm.SVC(kernel='rbf', C=20)\nmodel_svm = svc.fit(X_train, y_train)\nscore = np.mean(np.equal(model_svm.predict(X_val), y_val))\nprint(f\"Score: {score*100}%\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.106085Z","iopub.execute_input":"2022-08-03T20:41:17.106728Z","iopub.status.idle":"2022-08-03T20:41:17.157299Z","shell.execute_reply.started":"2022-08-03T20:41:17.106692Z","shell.execute_reply":"2022-08-03T20:41:17.156199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.2 k Nearest Neighbors","metadata":{}},{"cell_type":"code","source":"neighb = neighbors.KNeighborsClassifier(n_neighbors = 50, weights = 'distance')\nneighb_model = neighb.fit(X_train, y_train)\nscore = np.mean(np.equal(neighb_model.predict(X_val), y_val))\nprint(f\"Score: {score*100}%\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.160387Z","iopub.execute_input":"2022-08-03T20:41:17.160758Z","iopub.status.idle":"2022-08-03T20:41:17.185256Z","shell.execute_reply.started":"2022-08-03T20:41:17.160725Z","shell.execute_reply":"2022-08-03T20:41:17.183979Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.3 Random Forest Regressor","metadata":{}},{"cell_type":"code","source":"rand_for = RandomForestClassifier(max_depth=25, random_state=0, n_estimators=10,\n                                 min_samples_split=10)\nrand_for_model = rand_for.fit(X_train, y_train)\nscore = np.mean(np.equal(rand_for_model.predict(X_val), y_val))\nprint(f\"Score: {score*100}%\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.190764Z","iopub.execute_input":"2022-08-03T20:41:17.194714Z","iopub.status.idle":"2022-08-03T20:41:17.286119Z","shell.execute_reply.started":"2022-08-03T20:41:17.194655Z","shell.execute_reply":"2022-08-03T20:41:17.284616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.4 Neural Network","metadata":{}},{"cell_type":"code","source":"nn_model = keras.models.Sequential([\n    keras.layers.Flatten(input_shape=X_train.shape[1:]),\n    keras.layers.Dropout(0.2),\n    keras.layers.Dense(100, activation=\"relu\"),\n    keras.layers.Dropout(0.2),\n    keras.layers.Dense(200, activation=\"relu\"),\n    keras.layers.Dropout(0.2),\n    keras.layers.Dense(50, activation=\"relu\"),\n    keras.layers.Dense(1, activation=\"sigmoid\")\n])\n\nnn_model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n\nhistory = nn_model.fit(X_train, y_train,\n                       batch_size=20,\n                       epochs=30,\n                       validation_data=(X_val, y_val))","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:17.293056Z","iopub.execute_input":"2022-08-03T20:41:17.293551Z","iopub.status.idle":"2022-08-03T20:41:22.081034Z","shell.execute_reply.started":"2022-08-03T20:41:17.293498Z","shell.execute_reply":"2022-08-03T20:41:22.079978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.5 XGBoost","metadata":{}},{"cell_type":"code","source":"xgb_model = XGBClassifier()\ncv = RepeatedStratifiedKFold(n_splits=10, n_repeats=2, random_state=1)\nn_scores = cross_val_score(xgb_model, X_train, y_train, \n                           scoring='roc_auc', cv=cv, n_jobs=-1, error_score='raise')","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:41:22.082559Z","iopub.execute_input":"2022-08-03T20:41:22.082855Z","iopub.status.idle":"2022-08-03T20:45:38.900871Z","shell.execute_reply.started":"2022-08-03T20:41:22.082825Z","shell.execute_reply":"2022-08-03T20:45:38.899750Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print('AUC: %.3f (%.3f)' % (np.mean(n_scores), np.std(n_scores)))\nxgb_model.fit(X_train, y_train)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:45:38.905575Z","iopub.execute_input":"2022-08-03T20:45:38.907481Z","iopub.status.idle":"2022-08-03T20:45:39.012481Z","shell.execute_reply.started":"2022-08-03T20:45:38.907433Z","shell.execute_reply":"2022-08-03T20:45:39.011427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score = np.mean(np.equal(xgb_model.predict(X_val), y_val))\nprint(f\"Score: {score*100}%\")","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:45:39.013694Z","iopub.execute_input":"2022-08-03T20:45:39.013978Z","iopub.status.idle":"2022-08-03T20:45:39.026267Z","shell.execute_reply.started":"2022-08-03T20:45:39.013950Z","shell.execute_reply":"2022-08-03T20:45:39.025504Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 5. Submission","metadata":{}},{"cell_type":"code","source":"sample_submission = pd.read_csv(\"../input/titanic/gender_submission.csv\")\nsample_submission.head()","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:45:39.030109Z","iopub.execute_input":"2022-08-03T20:45:39.031657Z","iopub.status.idle":"2022-08-03T20:45:39.051977Z","shell.execute_reply.started":"2022-08-03T20:45:39.031613Z","shell.execute_reply":"2022-08-03T20:45:39.051205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = custom_pipeline(test)\npredictions = xgb_model.predict(X_test)\n\nsubmission = sample_submission.copy()\nsubmission[\"Survived\"] = predictions\nsubmission.to_csv(\"./submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:45:39.078877Z","iopub.execute_input":"2022-08-03T20:45:39.079193Z","iopub.status.idle":"2022-08-03T20:45:39.116821Z","shell.execute_reply.started":"2022-08-03T20:45:39.079161Z","shell.execute_reply":"2022-08-03T20:45:39.115935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sum(submission.Survived)","metadata":{"execution":{"iopub.status.busy":"2022-08-03T20:45:39.118356Z","iopub.execute_input":"2022-08-03T20:45:39.118928Z","iopub.status.idle":"2022-08-03T20:45:39.127074Z","shell.execute_reply.started":"2022-08-03T20:45:39.118882Z","shell.execute_reply":"2022-08-03T20:45:39.126076Z"},"trusted":true},"execution_count":null,"outputs":[]}]}