{"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":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","papermill":{"duration":0.037684,"end_time":"2022-07-07T19:50:49.993017","exception":false,"start_time":"2022-07-07T19:50:49.955333","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:06.620379Z","iopub.execute_input":"2022-07-08T10:13:06.621169Z","iopub.status.idle":"2022-07-08T10:13:06.637528Z","shell.execute_reply.started":"2022-07-08T10:13:06.621098Z","shell.execute_reply":"2022-07-08T10:13:06.636135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Approach\n1. Import libraries\n2. Load data\n2. Impute outliers with median (columns)\n3. Filling null values with `median`(num) & `most_frequent`(cat)\n3. Get best Mutual Information columns\n4. Create new columns with them\n5. Select useful features\n6. Extract numerical and categorical columns\n7. Make Pipeline\n8. Do hyperparameter tuning with cross-validation (`XGBClassifier`)\n9. Check MAE score\n10. Select best parameters\n11. Train model\n12. Predict `Survived` on `test_data`\n13. Submit predictions","metadata":{"papermill":{"duration":0.015191,"end_time":"2022-07-07T19:50:50.024664","exception":false,"start_time":"2022-07-07T19:50:50.009473","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"## 1. Importing required libraries","metadata":{"papermill":{"duration":0.016397,"end_time":"2022-07-07T19:50:50.056781","exception":false,"start_time":"2022-07-07T19:50:50.040384","status":"completed"},"tags":[]}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n%matplotlib inline\nfrom collections import Counter\nfrom xgboost import XGBClassifier\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.feature_selection import mutual_info_classif","metadata":{"papermill":{"duration":1.675362,"end_time":"2022-07-07T19:50:51.747136","exception":false,"start_time":"2022-07-07T19:50:50.071774","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:06.644308Z","iopub.execute_input":"2022-07-08T10:13:06.644932Z","iopub.status.idle":"2022-07-08T10:13:07.287781Z","shell.execute_reply.started":"2022-07-08T10:13:06.644896Z","shell.execute_reply":"2022-07-08T10:13:07.286434Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2. Load data","metadata":{"papermill":{"duration":0.014665,"end_time":"2022-07-07T19:50:51.776784","exception":false,"start_time":"2022-07-07T19:50:51.762119","status":"completed"},"tags":[]}},{"cell_type":"code","source":"data = pd.read_csv(\"../input/titanic/train.csv\", index_col=\"PassengerId\")\ntest_data = pd.read_csv(\"../input/titanic/test.csv\", index_col=\"PassengerId\")\n\ndata.head()","metadata":{"papermill":{"duration":0.080095,"end_time":"2022-07-07T19:50:51.871945","exception":false,"start_time":"2022-07-07T19:50:51.791850","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:07.289189Z","iopub.execute_input":"2022-07-08T10:13:07.289524Z","iopub.status.idle":"2022-07-08T10:13:07.323137Z","shell.execute_reply.started":"2022-07-08T10:13:07.289495Z","shell.execute_reply":"2022-07-08T10:13:07.321801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Imputing outliers with their column's median value","metadata":{"papermill":{"duration":0.014467,"end_time":"2022-07-07T19:50:51.901382","exception":false,"start_time":"2022-07-07T19:50:51.886915","status":"completed"},"tags":[]}},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.scatterplot(x=data[\"Fare\"], y=data.index, hue=\"Survived\", data=data)","metadata":{"papermill":{"duration":0.356846,"end_time":"2022-07-07T19:50:52.272943","exception":false,"start_time":"2022-07-07T19:50:51.916097","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:07.325703Z","iopub.execute_input":"2022-07-08T10:13:07.326556Z","iopub.status.idle":"2022-07-08T10:13:07.625868Z","shell.execute_reply.started":"2022-07-08T10:13:07.326505Z","shell.execute_reply":"2022-07-08T10:13:07.624391Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"outliers = data[data[\"Fare\"]>200].index\noutliers","metadata":{"papermill":{"duration":0.028912,"end_time":"2022-07-07T19:50:52.320180","exception":false,"start_time":"2022-07-07T19:50:52.291268","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:07.627223Z","iopub.execute_input":"2022-07-08T10:13:07.628126Z","iopub.status.idle":"2022-07-08T10:13:07.636185Z","shell.execute_reply.started":"2022-07-08T10:13:07.628079Z","shell.execute_reply":"2022-07-08T10:13:07.635178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.loc[outliers, \"Fare\"] = data[\"Fare\"].median()","metadata":{"papermill":{"duration":0.028725,"end_time":"2022-07-07T19:50:52.366048","exception":false,"start_time":"2022-07-07T19:50:52.337323","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:07.637335Z","iopub.execute_input":"2022-07-08T10:13:07.638211Z","iopub.status.idle":"2022-07-08T10:13:07.651905Z","shell.execute_reply.started":"2022-07-08T10:13:07.638153Z","shell.execute_reply":"2022-07-08T10:13:07.650587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12, 6))\nsns.scatterplot(x=data[\"Fare\"], y=data.index, hue=\"Survived\", data=data)","metadata":{"papermill":{"duration":0.30914,"end_time":"2022-07-07T19:50:52.692020","exception":false,"start_time":"2022-07-07T19:50:52.382880","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:07.653536Z","iopub.execute_input":"2022-07-08T10:13:07.653991Z","iopub.status.idle":"2022-07-08T10:13:07.944381Z","shell.execute_reply.started":"2022-07-08T10:13:07.653941Z","shell.execute_reply":"2022-07-08T10:13:07.943155Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4. Filling null values with `median`(num) & `most_frequent`(cat)","metadata":{}},{"cell_type":"code","source":"def impute_data(data, num_strategy=\"median\", cat_strategy=\"most_frequent\"):\n    X = data.copy()\n    index = X.index\n    num_cols = X.select_dtypes(exclude=\"object\").columns\n    cat_cols = X.select_dtypes(\"object\").columns    \n    \n    num_imputer = SimpleImputer(strategy=num_strategy)\n    cat_imputer = SimpleImputer(strategy=cat_strategy)\n    \n    X[num_cols] = pd.DataFrame(num_imputer.fit_transform(X[num_cols]), index=index, columns=num_cols)\n    X[cat_cols] = pd.DataFrame(cat_imputer.fit_transform(X[cat_cols]), index=index, columns=cat_cols)\n    return X","metadata":{"papermill":{"duration":0.030093,"end_time":"2022-07-07T19:50:52.777484","exception":false,"start_time":"2022-07-07T19:50:52.747391","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:08.756117Z","iopub.execute_input":"2022-07-08T10:13:08.756529Z","iopub.status.idle":"2022-07-08T10:13:08.764033Z","shell.execute_reply.started":"2022-07-08T10:13:08.756492Z","shell.execute_reply":"2022-07-08T10:13:08.763088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = data.copy()\nY = X.pop(\"Survived\")\nX = impute_data(X)\ntest_data = impute_data(test_data)\n\nX.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:09.185961Z","iopub.execute_input":"2022-07-08T10:13:09.186550Z","iopub.status.idle":"2022-07-08T10:13:09.234654Z","shell.execute_reply.started":"2022-07-08T10:13:09.186515Z","shell.execute_reply":"2022-07-08T10:13:09.233763Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 5. Getting best Mutual Information columns","metadata":{"papermill":{"duration":0.018098,"end_time":"2022-07-07T19:50:52.729098","exception":false,"start_time":"2022-07-07T19:50:52.711000","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def get_mi_score(X, y):\n    # impute only if anything is missing, else use as it is\n    X = impute_data(X) if X.isnull().sum().any() else X.copy()\n    \n    # Converting values of discrete features to numerical values\n    for col in X.select_dtypes([\"object\"]):\n        X[col] = X[col].factorize()[0]\n    \n    discrete_features = X.dtypes == int\n    mi_scores = mutual_info_classif(X, y, discrete_features=discrete_features, random_state=0)\n    mi_scores = pd.Series(mi_scores, name=\"MI Scores\", index=X.columns).sort_values(ascending=False)\n    return mi_scores","metadata":{"papermill":{"duration":0.029848,"end_time":"2022-07-07T19:50:52.825609","exception":false,"start_time":"2022-07-07T19:50:52.795761","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:10.029620Z","iopub.execute_input":"2022-07-08T10:13:10.030262Z","iopub.status.idle":"2022-07-08T10:13:10.037849Z","shell.execute_reply.started":"2022-07-08T10:13:10.030225Z","shell.execute_reply":"2022-07-08T10:13:10.036526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mi_scores = get_mi_score(X, Y)\nmi_scores","metadata":{"papermill":{"duration":0.088219,"end_time":"2022-07-07T19:50:52.932108","exception":false,"start_time":"2022-07-07T19:50:52.843889","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:10.398189Z","iopub.execute_input":"2022-07-08T10:13:10.398823Z","iopub.status.idle":"2022-07-08T10:13:10.448708Z","shell.execute_reply.started":"2022-07-08T10:13:10.398769Z","shell.execute_reply":"2022-07-08T10:13:10.447404Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data[mi_scores.index]","metadata":{"papermill":{"duration":0.045462,"end_time":"2022-07-07T19:50:52.995975","exception":false,"start_time":"2022-07-07T19:50:52.950513","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:10.842130Z","iopub.execute_input":"2022-07-08T10:13:10.842514Z","iopub.status.idle":"2022-07-08T10:13:10.867486Z","shell.execute_reply.started":"2022-07-08T10:13:10.842484Z","shell.execute_reply":"2022-07-08T10:13:10.865764Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 6. Creating new columns","metadata":{"papermill":{"duration":0.018809,"end_time":"2022-07-07T19:50:53.132854","exception":false,"start_time":"2022-07-07T19:50:53.114045","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"#### Creating 2 new columns `Tikcet_code`, `Ticket_number` from `Ticket` column","metadata":{"papermill":{"duration":0.018545,"end_time":"2022-07-07T19:50:53.170348","exception":false,"start_time":"2022-07-07T19:50:53.151803","status":"completed"},"tags":[]}},{"cell_type":"code","source":"data[\"Ticket\"].value_counts()","metadata":{"papermill":{"duration":0.031724,"end_time":"2022-07-07T19:50:53.095362","exception":false,"start_time":"2022-07-07T19:50:53.063638","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:12.124564Z","iopub.execute_input":"2022-07-08T10:13:12.125292Z","iopub.status.idle":"2022-07-08T10:13:12.136986Z","shell.execute_reply.started":"2022-07-08T10:13:12.125248Z","shell.execute_reply":"2022-07-08T10:13:12.136009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def split_tickets(tickets):\n    raw_tickets = [i.split(\" \") for i in tickets]\n    for ticket in raw_tickets:\n        if len(ticket) == 3:\n            if ticket[1][0].isdigit():\n                ticket[1:] = [ticket[1] + ticket[2]]\n            else:    # if 2nd element is word \n                ticket[:2] = [ticket[0] + ticket[1]]\n\n        if len(ticket) != 2:\n            ticket[:-1] = [\"missing\"]\n    \n    # Getting mode of ticket code, 1st is \"missing\", using second\n    common_ticket_codes = Counter([i[0] for i in raw_tickets]).most_common(2)\n    mode_ticket_code = common_ticket_codes[1][0] if common_ticket_codes[0][0]==\"missing\" else common_ticket_codes[0][0]\n\n    tickets_df = pd.DataFrame(raw_tickets, columns=[\"Ticket_code\", \"Ticket_number\"], index=tickets.index)\n    return tickets_df.replace({\"missing\": mode_ticket_code})","metadata":{"papermill":{"duration":0.030484,"end_time":"2022-07-07T19:50:53.219711","exception":false,"start_time":"2022-07-07T19:50:53.189227","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:12.618254Z","iopub.execute_input":"2022-07-08T10:13:12.619666Z","iopub.status.idle":"2022-07-08T10:13:12.629721Z","shell.execute_reply.started":"2022-07-08T10:13:12.619603Z","shell.execute_reply":"2022-07-08T10:13:12.628310Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_tickets_df = split_tickets(data[\"Ticket\"])\nnew_tickets_df","metadata":{"papermill":{"duration":0.028923,"end_time":"2022-07-07T19:50:53.267282","exception":false,"start_time":"2022-07-07T19:50:53.238359","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:13.692856Z","iopub.execute_input":"2022-07-08T10:13:13.693558Z","iopub.status.idle":"2022-07-08T10:13:13.710215Z","shell.execute_reply.started":"2022-07-08T10:13:13.693510Z","shell.execute_reply":"2022-07-08T10:13:13.709135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(new_tickets_df)","metadata":{"papermill":{"duration":0.031835,"end_time":"2022-07-07T19:50:53.317892","exception":false,"start_time":"2022-07-07T19:50:53.286057","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:14.182458Z","iopub.execute_input":"2022-07-08T10:13:14.183169Z","iopub.status.idle":"2022-07-08T10:13:14.192234Z","shell.execute_reply.started":"2022-07-08T10:13:14.183123Z","shell.execute_reply":"2022-07-08T10:13:14.191021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"papermill":{"duration":0.045492,"end_time":"2022-07-07T19:50:53.382487","exception":false,"start_time":"2022-07-07T19:50:53.336995","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:14.709420Z","iopub.execute_input":"2022-07-08T10:13:14.710218Z","iopub.status.idle":"2022-07-08T10:13:14.736688Z","shell.execute_reply.started":"2022-07-08T10:13:14.710173Z","shell.execute_reply":"2022-07-08T10:13:14.735277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `Total_members` by counting total from `SibSp` and `Parch`","metadata":{"papermill":{"duration":0.019352,"end_time":"2022-07-07T19:50:53.420817","exception":false,"start_time":"2022-07-07T19:50:53.401465","status":"completed"},"tags":[]}},{"cell_type":"code","source":"X[\"Total_members\"] = X[[\"SibSp\", \"Parch\"]].sum(axis=1)","metadata":{"papermill":{"duration":0.030394,"end_time":"2022-07-07T19:50:53.470142","exception":false,"start_time":"2022-07-07T19:50:53.439748","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:15.786594Z","iopub.execute_input":"2022-07-08T10:13:15.787030Z","iopub.status.idle":"2022-07-08T10:13:15.796027Z","shell.execute_reply.started":"2022-07-08T10:13:15.786991Z","shell.execute_reply":"2022-07-08T10:13:15.795048Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"papermill":{"duration":0.047256,"end_time":"2022-07-07T19:50:53.536805","exception":false,"start_time":"2022-07-07T19:50:53.489549","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:16.207109Z","iopub.execute_input":"2022-07-08T10:13:16.207833Z","iopub.status.idle":"2022-07-08T10:13:16.234224Z","shell.execute_reply.started":"2022-07-08T10:13:16.207774Z","shell.execute_reply":"2022-07-08T10:13:16.233075Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"num_to_float_cols = [\"Pclass\", \"Age\", \"SibSp\", \"Parch\", \"Total_members\"]\nX[num_to_float_cols] = X[num_to_float_cols].astype(int)","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:16.699334Z","iopub.execute_input":"2022-07-08T10:13:16.700126Z","iopub.status.idle":"2022-07-08T10:13:16.708320Z","shell.execute_reply.started":"2022-07-08T10:13:16.700078Z","shell.execute_reply":"2022-07-08T10:13:16.706752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:17.105842Z","iopub.execute_input":"2022-07-08T10:13:17.106248Z","iopub.status.idle":"2022-07-08T10:13:17.129554Z","shell.execute_reply.started":"2022-07-08T10:13:17.106218Z","shell.execute_reply":"2022-07-08T10:13:17.128227Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mi_scores","metadata":{"papermill":{"duration":0.033059,"end_time":"2022-07-07T19:50:53.589266","exception":false,"start_time":"2022-07-07T19:50:53.556207","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:17.716841Z","iopub.execute_input":"2022-07-08T10:13:17.717242Z","iopub.status.idle":"2022-07-08T10:13:17.725875Z","shell.execute_reply.started":"2022-07-08T10:13:17.717212Z","shell.execute_reply":"2022-07-08T10:13:17.724406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `PclassRatio` from count of each `Pclass`","metadata":{"papermill":{"duration":0.019501,"end_time":"2022-07-07T19:50:53.682644","exception":false,"start_time":"2022-07-07T19:50:53.663143","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def create_pclass_ratios(data):\n    raw_pclassratio = pd.DataFrame(\n        round(\n              (data.groupby(\"Pclass\")[\"Pclass\"].agg(\"count\") / data.Pclass.count()) * 100, \n              2)\n        )\n    raw_pclassratio.rename(columns={\"Pclass\": \"PclassRatio\"}, inplace=True)\n    \n    pclass_ratios = []\n    for i in data[\"Pclass\"]:\n        pclass_ratios.append(raw_pclassratio.loc[i, \"PclassRatio\"])\n    return pclass_ratios","metadata":{"papermill":{"duration":0.031685,"end_time":"2022-07-07T19:50:53.734187","exception":false,"start_time":"2022-07-07T19:50:53.702502","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:18.997463Z","iopub.execute_input":"2022-07-08T10:13:18.998279Z","iopub.status.idle":"2022-07-08T10:13:19.004186Z","shell.execute_reply.started":"2022-07-08T10:13:18.998233Z","shell.execute_reply":"2022-07-08T10:13:19.003297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"PclassRatio\"] = create_pclass_ratios(X)\nX","metadata":{"papermill":{"duration":0.065285,"end_time":"2022-07-07T19:50:53.819932","exception":false,"start_time":"2022-07-07T19:50:53.754647","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:19.457376Z","iopub.execute_input":"2022-07-08T10:13:19.458221Z","iopub.status.idle":"2022-07-08T10:13:19.507885Z","shell.execute_reply.started":"2022-07-08T10:13:19.458158Z","shell.execute_reply":"2022-07-08T10:13:19.506642Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `PclassAvgFare` column based on `Fare` as per `Pclass`","metadata":{"papermill":{"duration":0.020068,"end_time":"2022-07-07T19:50:53.860198","exception":false,"start_time":"2022-07-07T19:50:53.840130","status":"completed"},"tags":[]}},{"cell_type":"code","source":"def create_avg_pclass_fares(data):\n    average_fares_pclass = pd.DataFrame(data.groupby(\"Pclass\")[\"Fare\"].mean())\n    average_fares_pclass\n\n    fares = []\n    for i in data[\"Pclass\"]:\n        fares.append(average_fares_pclass.loc[i, \"Fare\"])\n    return fares","metadata":{"papermill":{"duration":0.03028,"end_time":"2022-07-07T19:50:53.910788","exception":false,"start_time":"2022-07-07T19:50:53.880508","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:20.630696Z","iopub.execute_input":"2022-07-08T10:13:20.631283Z","iopub.status.idle":"2022-07-08T10:13:20.638179Z","shell.execute_reply.started":"2022-07-08T10:13:20.631239Z","shell.execute_reply":"2022-07-08T10:13:20.637048Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"PclassAvgFare\"] = create_avg_pclass_fares(X)\nX","metadata":{"papermill":{"duration":0.068684,"end_time":"2022-07-07T19:50:53.999699","exception":false,"start_time":"2022-07-07T19:50:53.931015","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:21.074109Z","iopub.execute_input":"2022-07-08T10:13:21.074821Z","iopub.status.idle":"2022-07-08T10:13:21.112501Z","shell.execute_reply.started":"2022-07-08T10:13:21.074763Z","shell.execute_reply":"2022-07-08T10:13:21.111086Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `TotalCabins` by counting no. of cabins in each row","metadata":{}},{"cell_type":"code","source":"def create_total_cabins(data):\n    index = data.index\n    total_cabins = [len(i.split(\" \")) for i in data[\"Cabin\"]]\n    return pd.Series(total_cabins, index=index, name=\"TotalCabins\")","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:21.961641Z","iopub.execute_input":"2022-07-08T10:13:21.962995Z","iopub.status.idle":"2022-07-08T10:13:21.968325Z","shell.execute_reply.started":"2022-07-08T10:13:21.962941Z","shell.execute_reply":"2022-07-08T10:13:21.967374Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"TotalCabins\"] = create_total_cabins(X)\nX","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:22.400696Z","iopub.execute_input":"2022-07-08T10:13:22.401350Z","iopub.status.idle":"2022-07-08T10:13:22.428728Z","shell.execute_reply.started":"2022-07-08T10:13:22.401299Z","shell.execute_reply":"2022-07-08T10:13:22.427538Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `SexRatio` based on `Sex`","metadata":{}},{"cell_type":"code","source":"def create_sex_ratio(data):\n    ratio = round((data.groupby(\"Sex\")[\"Sex\"].agg(\"count\") / len(data)) * 100, 2)\n    ratio_list = []\n    for i in data[\"Sex\"]:\n        ratio_list.append(ratio.loc[i])\n    return pd.DataFrame(ratio_list, index=data.index, columns=[\"SexRatio\"])","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:23.378926Z","iopub.execute_input":"2022-07-08T10:13:23.379322Z","iopub.status.idle":"2022-07-08T10:13:23.385784Z","shell.execute_reply.started":"2022-07-08T10:13:23.379291Z","shell.execute_reply":"2022-07-08T10:13:23.384128Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(create_sex_ratio(X))\nX","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:23.788456Z","iopub.execute_input":"2022-07-08T10:13:23.788894Z","iopub.status.idle":"2022-07-08T10:13:23.832230Z","shell.execute_reply.started":"2022-07-08T10:13:23.788854Z","shell.execute_reply":"2022-07-08T10:13:23.830970Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `EmbarkedRatio` based on `Embarked location`","metadata":{}},{"cell_type":"code","source":"X[\"Embarked\"].value_counts()","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:24.648315Z","iopub.execute_input":"2022-07-08T10:13:24.649394Z","iopub.status.idle":"2022-07-08T10:13:24.658482Z","shell.execute_reply.started":"2022-07-08T10:13:24.649342Z","shell.execute_reply":"2022-07-08T10:13:24.657455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def create_embarkment_ratio(data):\n    ratio = round((data.groupby(\"Embarked\")[\"Embarked\"].agg(\"count\") / len(data)) * 100, 2)\n    ratio_list = []\n    for i in data[\"Embarked\"]:\n        ratio_list.append(ratio.loc[i])\n    return pd.DataFrame(ratio_list, index=data.index, columns=[\"EmbarkedRatio\"])","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:25.453339Z","iopub.execute_input":"2022-07-08T10:13:25.454103Z","iopub.status.idle":"2022-07-08T10:13:25.462255Z","shell.execute_reply.started":"2022-07-08T10:13:25.454055Z","shell.execute_reply":"2022-07-08T10:13:25.461275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(create_embarkment_ratio(X))\nX","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:26.452029Z","iopub.execute_input":"2022-07-08T10:13:26.452687Z","iopub.status.idle":"2022-07-08T10:13:26.491076Z","shell.execute_reply.started":"2022-07-08T10:13:26.452609Z","shell.execute_reply":"2022-07-08T10:13:26.489935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### checking MI score again on new columns","metadata":{"papermill":{"duration":0.020484,"end_time":"2022-07-07T19:50:54.042760","exception":false,"start_time":"2022-07-07T19:50:54.022276","status":"completed"},"tags":[]}},{"cell_type":"code","source":"mi_scores = get_mi_score(X, Y)\nmi_scores","metadata":{"papermill":{"duration":0.103214,"end_time":"2022-07-07T19:50:54.166678","exception":false,"start_time":"2022-07-07T19:50:54.063464","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:28.168679Z","iopub.execute_input":"2022-07-08T10:13:28.169119Z","iopub.status.idle":"2022-07-08T10:13:28.235786Z","shell.execute_reply.started":"2022-07-08T10:13:28.169074Z","shell.execute_reply":"2022-07-08T10:13:28.234469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating same features for our `test_data`","metadata":{"papermill":{"duration":0.020575,"end_time":"2022-07-07T19:50:54.207995","exception":false,"start_time":"2022-07-07T19:50:54.187420","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_data = test_data.join(split_tickets(test_data[\"Ticket\"]))","metadata":{"papermill":{"duration":0.036054,"end_time":"2022-07-07T19:50:54.265032","exception":false,"start_time":"2022-07-07T19:50:54.228978","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:37.118609Z","iopub.execute_input":"2022-07-08T10:13:37.119488Z","iopub.status.idle":"2022-07-08T10:13:37.130766Z","shell.execute_reply.started":"2022-07-08T10:13:37.119437Z","shell.execute_reply":"2022-07-08T10:13:37.128864Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data[\"PclassRatio\"] = create_pclass_ratios(test_data)\ntest_data[\"PclassAvgFare\"] = create_avg_pclass_fares(test_data)","metadata":{"papermill":{"duration":0.047615,"end_time":"2022-07-07T19:50:54.333854","exception":false,"start_time":"2022-07-07T19:50:54.286239","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:37.541810Z","iopub.execute_input":"2022-07-08T10:13:37.542775Z","iopub.status.idle":"2022-07-08T10:13:37.561380Z","shell.execute_reply.started":"2022-07-08T10:13:37.542731Z","shell.execute_reply":"2022-07-08T10:13:37.559944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data[\"Total_members\"] = test_data[[\"SibSp\", \"Parch\"]].sum(axis=1)","metadata":{"papermill":{"duration":0.033632,"end_time":"2022-07-07T19:50:54.388537","exception":false,"start_time":"2022-07-07T19:50:54.354905","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:38.053563Z","iopub.execute_input":"2022-07-08T10:13:38.053980Z","iopub.status.idle":"2022-07-08T10:13:38.063815Z","shell.execute_reply.started":"2022-07-08T10:13:38.053946Z","shell.execute_reply":"2022-07-08T10:13:38.062654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data[\"TotalCabins\"] = create_total_cabins(test_data)","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:38.418767Z","iopub.execute_input":"2022-07-08T10:13:38.419225Z","iopub.status.idle":"2022-07-08T10:13:38.426246Z","shell.execute_reply.started":"2022-07-08T10:13:38.419191Z","shell.execute_reply":"2022-07-08T10:13:38.424684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = test_data.join(create_sex_ratio(test_data))","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:38.820739Z","iopub.execute_input":"2022-07-08T10:13:38.821509Z","iopub.status.idle":"2022-07-08T10:13:38.837161Z","shell.execute_reply.started":"2022-07-08T10:13:38.821462Z","shell.execute_reply":"2022-07-08T10:13:38.835466Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = test_data.join(create_embarkment_ratio(test_data))","metadata":{"execution":{"iopub.status.busy":"2022-07-08T10:13:39.172980Z","iopub.execute_input":"2022-07-08T10:13:39.173802Z","iopub.status.idle":"2022-07-08T10:13:39.186022Z","shell.execute_reply.started":"2022-07-08T10:13:39.173742Z","shell.execute_reply":"2022-07-08T10:13:39.184781Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.head()","metadata":{"papermill":{"duration":0.045996,"end_time":"2022-07-07T19:50:54.455247","exception":false,"start_time":"2022-07-07T19:50:54.409251","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:13:39.668181Z","iopub.execute_input":"2022-07-08T10:13:39.668589Z","iopub.status.idle":"2022-07-08T10:13:39.691462Z","shell.execute_reply.started":"2022-07-08T10:13:39.668551Z","shell.execute_reply":"2022-07-08T10:13:39.690307Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 7. Selecting useful features","metadata":{"papermill":{"duration":0.021219,"end_time":"2022-07-07T19:50:54.498156","exception":false,"start_time":"2022-07-07T19:50:54.476937","status":"completed"},"tags":[]}},{"cell_type":"code","source":"useful_features = mi_scores.index\nX = X[useful_features]\ntest_data = test_data[useful_features]\nuseful_features","metadata":{"papermill":{"duration":0.037715,"end_time":"2022-07-07T19:50:54.557360","exception":false,"start_time":"2022-07-07T19:50:54.519645","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:14:15.574478Z","iopub.execute_input":"2022-07-08T10:14:15.574921Z","iopub.status.idle":"2022-07-08T10:14:15.586280Z","shell.execute_reply.started":"2022-07-08T10:14:15.574884Z","shell.execute_reply":"2022-07-08T10:14:15.585202Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 8. Extracting numerical and categorical columns","metadata":{"papermill":{"duration":0.021315,"end_time":"2022-07-07T19:50:54.600161","exception":false,"start_time":"2022-07-07T19:50:54.578846","status":"completed"},"tags":[]}},{"cell_type":"code","source":"num_cols = X.select_dtypes(exclude=\"object\").columns\ncat_cols = X.select_dtypes(\"object\").columns\nnum_cols, cat_cols","metadata":{"papermill":{"duration":0.037076,"end_time":"2022-07-07T19:50:54.658475","exception":false,"start_time":"2022-07-07T19:50:54.621399","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:14:18.054306Z","iopub.execute_input":"2022-07-08T10:14:18.054912Z","iopub.status.idle":"2022-07-08T10:14:18.064758Z","shell.execute_reply.started":"2022-07-08T10:14:18.054879Z","shell.execute_reply":"2022-07-08T10:14:18.063748Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 9. Making Pipeline","metadata":{"papermill":{"duration":0.021025,"end_time":"2022-07-07T19:50:54.700929","exception":false,"start_time":"2022-07-07T19:50:54.679904","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class CreatePipeline:\n    \"\"\"Create Pipeline\n    methods:\n        pipeline: Create Final Pipeline\n        \n        create_model: Create the provided model\n        \n        numerical_transformer: Transform numerical cols\n        \n        categorical_transformer: Transform categorical cols \\\n        OneHotEncoding / OrdinalEncoding\n        \n        data_preprocessor: Preprocess the data using ColumnTransformer     \n        \"\"\"\n    \n    def pipeline(self, *, preprocessor, model, verbose=False):\n        \"\"\"Creates pipeline\n        params:\n            preprocessor\n            model\n        \"\"\"\n        steps = [(\"preprocessor\", preprocessor),\n                 (\"model\", model)]\n        return Pipeline(steps=steps, verbose=verbose)\n    \n    \n    def numerical_transformer(self, *, strategy=\"mean\", **params):\n        \"\"\"Transform numerical columns using `SimpleImputer`.\n        params:\n            strategy: \"mean\" | \"median\" | \"most_frequent\" | \"constant\"\n            **params: extra keyword args for SimpleImputer\"\"\"\n        \n        transformer = SimpleImputer(strategy=strategy, **params)\n        return transformer\n\n    \n    def categorical_transformer(self, *, \n                                imp_strategy=\"most_frequent\", \n                                encoder_type=\"Ordinal\", \n                                imp_params={}, encoder_params={}):\n        \"\"\"Transform categorical columns by making Pipeline\n        `SimpleImputer` | `OneHotEncoder` | `OrdinalEncoder`.\n        args:\n            imp_strategy: strategy for imputer values can be\n                \"most_frequent\" | \"constant\"\n            encoder_type: encoder type,\n                \"Ordinal\" | \"OneHot\"\n        kwargs:\n            imp_params: keyword args for `SimpleImputer`.\n            encoder_params: keyword args for encoder.`\n        \"\"\"\n        if not encoder_type in (\"Ordinal\", \"OneHot\"):\n            raise ValueError(f\"Inappropriate value for encoder_type passed: {encoder_type}\\\n            Takes one of 'Ordinal' | 'OneHot'.\")\n        \n        encoder = OrdinalEncoder if encoder_type==\"Ordinal\" else OneHotEncoder\n        transformer = Pipeline(steps=[\n            (\"imputer\", SimpleImputer(strategy=imp_strategy, **imp_params)),\n            (encoder_type, encoder(**encoder_params))\n        ])\n        return transformer\n    \n    \n    def data_preprocessor(self, *, transformers):\n        \"\"\"Preprocess the data using `ColumnTransformer`.\n        Pass extact list of transformers\n        to be passed in `ColumnTransformer`.\n        each tuple consist of: (transformer_name,\n                                transformer,\n                                list_of_columns).\"\"\"\n        preprocessor = ColumnTransformer(transformers=transformers)\n        return preprocessor\n    \n    \n    def create_model(self, *, model, random_state=0, n_estimators=1000, **kwargs):\n        \"\"\"Creates the model.\n        **kwargs: keyword args for model.\"\"\"\n        my_model = model(random_state=random_state, n_estimators=n_estimators, **kwargs)\n        return my_model","metadata":{"papermill":{"duration":0.041661,"end_time":"2022-07-07T19:50:54.765091","exception":false,"start_time":"2022-07-07T19:50:54.723430","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:14:20.153292Z","iopub.execute_input":"2022-07-08T10:14:20.153704Z","iopub.status.idle":"2022-07-08T10:14:20.167342Z","shell.execute_reply.started":"2022-07-08T10:14:20.153671Z","shell.execute_reply":"2022-07-08T10:14:20.165996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cp = CreatePipeline()\nnum_transformer = cp.numerical_transformer(strategy=\"median\")\ncat_transformer = cp.categorical_transformer(encoder_type=\"OneHot\", encoder_params={\"handle_unknown\": \"ignore\"})\npreprocessor = cp.data_preprocessor(\n                    transformers=[(\"num\", num_transformer, num_cols),\n                                  (\"cat\", cat_transformer, cat_cols)\n                                 ])","metadata":{"papermill":{"duration":0.035426,"end_time":"2022-07-07T19:50:54.824056","exception":false,"start_time":"2022-07-07T19:50:54.788630","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:14:20.811888Z","iopub.execute_input":"2022-07-08T10:14:20.812637Z","iopub.status.idle":"2022-07-08T10:14:20.817665Z","shell.execute_reply.started":"2022-07-08T10:14:20.812596Z","shell.execute_reply":"2022-07-08T10:14:20.816850Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 10. Doing hyperparameter tuning with cross-validation (`XGBClassifier`)","metadata":{"papermill":{"duration":0.020913,"end_time":"2022-07-07T19:50:54.866416","exception":false,"start_time":"2022-07-07T19:50:54.845503","status":"completed"},"tags":[]}},{"cell_type":"code","source":"n_estimators = [500, 750, 1000]\nmax_depths = [5, 10]\nlearning_rate = [0.05, 0.1]\nmaes = {}\ni = 0\nfor n in n_estimators:\n    for md in max_depths:\n        for rate in learning_rate:\n            i += 1\n            model = cp.create_model(model=XGBClassifier, n_estimators=n, max_depth=md, learning_rate=rate)\n            pipeline = cp.pipeline(preprocessor=preprocessor, model=model)\n            scores = -1 * cross_val_score(pipeline, X, Y, cv=10, verbose=True,\n                                    scoring=\"neg_mean_absolute_error\")\n            mae = scores.mean()\n            maes[i] = [n, md, rate, mae]","metadata":{"papermill":{"duration":475.068072,"end_time":"2022-07-07T19:58:49.955770","exception":false,"start_time":"2022-07-07T19:50:54.887698","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:14:22.090932Z","iopub.execute_input":"2022-07-08T10:14:22.091378Z","iopub.status.idle":"2022-07-08T10:22:23.351217Z","shell.execute_reply.started":"2022-07-08T10:14:22.091340Z","shell.execute_reply":"2022-07-08T10:22:23.349064Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 11. Checking MAE scores","metadata":{"papermill":{"duration":0.022838,"end_time":"2022-07-07T19:58:50.002122","exception":false,"start_time":"2022-07-07T19:58:49.979284","status":"completed"},"tags":[]}},{"cell_type":"code","source":"for i in maes:\n    n, md, rate, mae = maes[i]\n    print(f\"{i}.\\tN_estimators: {n}\\tmax_depth: {md}\\tlearning_rate: {rate}\\tMAE: {mae}\")","metadata":{"papermill":{"duration":0.036553,"end_time":"2022-07-07T19:58:50.063011","exception":false,"start_time":"2022-07-07T19:58:50.026458","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:22:23.354737Z","iopub.execute_input":"2022-07-08T10:22:23.355126Z","iopub.status.idle":"2022-07-08T10:22:23.362086Z","shell.execute_reply.started":"2022-07-08T10:22:23.355093Z","shell.execute_reply":"2022-07-08T10:22:23.360605Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"min(maes, key=lambda x: maes[x][3])","metadata":{"papermill":{"duration":0.032963,"end_time":"2022-07-07T19:58:50.118855","exception":false,"start_time":"2022-07-07T19:58:50.085892","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:22:55.028308Z","iopub.execute_input":"2022-07-08T10:22:55.029035Z","iopub.status.idle":"2022-07-08T10:22:55.036684Z","shell.execute_reply.started":"2022-07-08T10:22:55.028993Z","shell.execute_reply":"2022-07-08T10:22:55.035484Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 12. Selecting best parameters\n#### `n_estimators: 750`\n#### `learning_rate: 0.05`\n#### `max_depth: 5`\n#### `MAE: 0.17390761548064917`","metadata":{"papermill":{"duration":0.021979,"end_time":"2022-07-07T19:58:50.163149","exception":false,"start_time":"2022-07-07T19:58:50.141170","status":"completed"},"tags":[]}},{"cell_type":"code","source":"best_n_estimators = 750\nbest_max_depth = 5\nbest_rate = 0.05","metadata":{"papermill":{"duration":0.031179,"end_time":"2022-07-07T19:58:50.216654","exception":false,"start_time":"2022-07-07T19:58:50.185475","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:23:45.545286Z","iopub.execute_input":"2022-07-08T10:23:45.546612Z","iopub.status.idle":"2022-07-08T10:23:45.551348Z","shell.execute_reply.started":"2022-07-08T10:23:45.546556Z","shell.execute_reply":"2022-07-08T10:23:45.550541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 13. Training model on best parameters","metadata":{"papermill":{"duration":0.022002,"end_time":"2022-07-07T19:58:50.260948","exception":false,"start_time":"2022-07-07T19:58:50.238946","status":"completed"},"tags":[]}},{"cell_type":"code","source":"model = cp.create_model(model=XGBClassifier, n_estimators=best_n_estimators, learning_rate=best_rate, max_depth=best_max_depth)\npipeline = cp.pipeline(preprocessor=preprocessor, model=model)\npipeline.fit(X, Y)","metadata":{"papermill":{"duration":5.650867,"end_time":"2022-07-07T19:58:55.934275","exception":false,"start_time":"2022-07-07T19:58:50.283408","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:23:47.111637Z","iopub.execute_input":"2022-07-08T10:23:47.112007Z","iopub.status.idle":"2022-07-08T10:23:51.524825Z","shell.execute_reply.started":"2022-07-08T10:23:47.111978Z","shell.execute_reply":"2022-07-08T10:23:51.523669Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 14. Predicting `Survived` on `test_data`","metadata":{"papermill":{"duration":0.023337,"end_time":"2022-07-07T19:58:55.981252","exception":false,"start_time":"2022-07-07T19:58:55.957915","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_preds = pipeline.predict(test_data)\ntest_preds","metadata":{"papermill":{"duration":0.063876,"end_time":"2022-07-07T19:58:56.069076","exception":false,"start_time":"2022-07-07T19:58:56.005200","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:24:02.184389Z","iopub.execute_input":"2022-07-08T10:24:02.185395Z","iopub.status.idle":"2022-07-08T10:24:02.223501Z","shell.execute_reply.started":"2022-07-08T10:24:02.185349Z","shell.execute_reply":"2022-07-08T10:24:02.222524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 15. Submitting predictions","metadata":{"papermill":{"duration":0.023252,"end_time":"2022-07-07T19:58:56.117038","exception":false,"start_time":"2022-07-07T19:58:56.093786","status":"completed"},"tags":[]}},{"cell_type":"code","source":"output = pd.DataFrame({\"PassengerId\": test_data.index, \"Survived\": test_preds})\noutput.to_csv(\"./submission_8.csv\", index=False)","metadata":{"papermill":{"duration":0.038436,"end_time":"2022-07-07T19:58:56.178948","exception":false,"start_time":"2022-07-07T19:58:56.140512","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:24:06.151893Z","iopub.execute_input":"2022-07-08T10:24:06.152523Z","iopub.status.idle":"2022-07-08T10:24:06.161458Z","shell.execute_reply.started":"2022-07-08T10:24:06.152489Z","shell.execute_reply":"2022-07-08T10:24:06.160641Z"},"trusted":true},"execution_count":null,"outputs":[]}]}