{"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.043253,"end_time":"2022-07-08T10:24:35.757290","exception":false,"start_time":"2022-07-08T10:24:35.714037","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:35.372063Z","iopub.execute_input":"2022-07-08T10:50:35.373292Z","iopub.status.idle":"2022-07-08T10:50:35.389073Z","shell.execute_reply.started":"2022-07-08T10:50:35.373141Z","shell.execute_reply":"2022-07-08T10:50:35.387923Z"},"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.017945,"end_time":"2022-07-08T10:24:35.795142","exception":false,"start_time":"2022-07-08T10:24:35.777197","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"## 1. Importing required libraries","metadata":{"papermill":{"duration":0.018463,"end_time":"2022-07-08T10:24:35.833463","exception":false,"start_time":"2022-07-08T10:24:35.815000","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.721415,"end_time":"2022-07-08T10:24:37.573372","exception":false,"start_time":"2022-07-08T10:24:35.851957","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:35.390617Z","iopub.execute_input":"2022-07-08T10:50:35.391593Z","iopub.status.idle":"2022-07-08T10:50:36.037307Z","shell.execute_reply.started":"2022-07-08T10:50:35.391557Z","shell.execute_reply":"2022-07-08T10:50:36.036056Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2. Load data","metadata":{"papermill":{"duration":0.018273,"end_time":"2022-07-08T10:24:37.611536","exception":false,"start_time":"2022-07-08T10:24:37.593263","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.090662,"end_time":"2022-07-08T10:24:37.721187","exception":false,"start_time":"2022-07-08T10:24:37.630525","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.039043Z","iopub.execute_input":"2022-07-08T10:50:36.039468Z","iopub.status.idle":"2022-07-08T10:50:36.073643Z","shell.execute_reply.started":"2022-07-08T10:50:36.039432Z","shell.execute_reply":"2022-07-08T10:50:36.072448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Imputing outliers with their column's median value","metadata":{"papermill":{"duration":0.018589,"end_time":"2022-07-08T10:24:37.759571","exception":false,"start_time":"2022-07-08T10:24:37.740982","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.386047,"end_time":"2022-07-08T10:24:38.164514","exception":false,"start_time":"2022-07-08T10:24:37.778467","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.077438Z","iopub.execute_input":"2022-07-08T10:50:36.078092Z","iopub.status.idle":"2022-07-08T10:50:36.415171Z","shell.execute_reply.started":"2022-07-08T10:50:36.078042Z","shell.execute_reply":"2022-07-08T10:50:36.414308Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"outliers = data[data[\"Fare\"]>200].index\noutliers","metadata":{"papermill":{"duration":0.035342,"end_time":"2022-07-08T10:24:38.220707","exception":false,"start_time":"2022-07-08T10:24:38.185365","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.416448Z","iopub.execute_input":"2022-07-08T10:50:36.417324Z","iopub.status.idle":"2022-07-08T10:50:36.426168Z","shell.execute_reply.started":"2022-07-08T10:50:36.417288Z","shell.execute_reply":"2022-07-08T10:50:36.424782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data.loc[outliers, \"Fare\"] = data[\"Fare\"].median()","metadata":{"papermill":{"duration":0.036305,"end_time":"2022-07-08T10:24:38.277618","exception":false,"start_time":"2022-07-08T10:24:38.241313","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.428172Z","iopub.execute_input":"2022-07-08T10:50:36.429165Z","iopub.status.idle":"2022-07-08T10:50:36.437512Z","shell.execute_reply.started":"2022-07-08T10:50:36.429117Z","shell.execute_reply":"2022-07-08T10:50:36.436451Z"},"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.309244,"end_time":"2022-07-08T10:24:38.608021","exception":false,"start_time":"2022-07-08T10:24:38.298777","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.438925Z","iopub.execute_input":"2022-07-08T10:50:36.439292Z","iopub.status.idle":"2022-07-08T10:50:36.750531Z","shell.execute_reply.started":"2022-07-08T10:50:36.439251Z","shell.execute_reply":"2022-07-08T10:50:36.749364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4. Filling null values with `median`(num) & `most_frequent`(cat)","metadata":{"papermill":{"duration":0.022047,"end_time":"2022-07-08T10:24:38.652097","exception":false,"start_time":"2022-07-08T10:24:38.630050","status":"completed"},"tags":[]}},{"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.036374,"end_time":"2022-07-08T10:24:38.710270","exception":false,"start_time":"2022-07-08T10:24:38.673896","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.752121Z","iopub.execute_input":"2022-07-08T10:50:36.752781Z","iopub.status.idle":"2022-07-08T10:50:36.760790Z","shell.execute_reply.started":"2022-07-08T10:50:36.752741Z","shell.execute_reply":"2022-07-08T10:50:36.759636Z"},"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":{"papermill":{"duration":0.07977,"end_time":"2022-07-08T10:24:38.811627","exception":false,"start_time":"2022-07-08T10:24:38.731857","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.762010Z","iopub.execute_input":"2022-07-08T10:50:36.762360Z","iopub.status.idle":"2022-07-08T10:50:36.819823Z","shell.execute_reply.started":"2022-07-08T10:50:36.762328Z","shell.execute_reply":"2022-07-08T10:50:36.818588Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 5. Getting best Mutual Information columns","metadata":{"papermill":{"duration":0.021589,"end_time":"2022-07-08T10:24:38.854967","exception":false,"start_time":"2022-07-08T10:24:38.833378","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.036181,"end_time":"2022-07-08T10:24:38.914372","exception":false,"start_time":"2022-07-08T10:24:38.878191","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.821217Z","iopub.execute_input":"2022-07-08T10:50:36.821575Z","iopub.status.idle":"2022-07-08T10:50:36.830108Z","shell.execute_reply.started":"2022-07-08T10:50:36.821545Z","shell.execute_reply":"2022-07-08T10:50:36.828808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mi_scores = get_mi_score(X, Y)\nmi_scores","metadata":{"papermill":{"duration":0.088004,"end_time":"2022-07-08T10:24:39.024562","exception":false,"start_time":"2022-07-08T10:24:38.936558","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.831779Z","iopub.execute_input":"2022-07-08T10:50:36.832253Z","iopub.status.idle":"2022-07-08T10:50:36.887154Z","shell.execute_reply.started":"2022-07-08T10:50:36.832202Z","shell.execute_reply":"2022-07-08T10:50:36.885928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data[mi_scores.index]","metadata":{"papermill":{"duration":0.053365,"end_time":"2022-07-08T10:24:39.099888","exception":false,"start_time":"2022-07-08T10:24:39.046523","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.888729Z","iopub.execute_input":"2022-07-08T10:50:36.890619Z","iopub.status.idle":"2022-07-08T10:50:36.916628Z","shell.execute_reply.started":"2022-07-08T10:50:36.890567Z","shell.execute_reply":"2022-07-08T10:50:36.915445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 6. Creating new columns","metadata":{"papermill":{"duration":0.022183,"end_time":"2022-07-08T10:24:39.144951","exception":false,"start_time":"2022-07-08T10:24:39.122768","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"#### Creating 2 new columns `Tikcet_code`, `Ticket_number` from `Ticket` column","metadata":{"papermill":{"duration":0.022244,"end_time":"2022-07-08T10:24:39.190001","exception":false,"start_time":"2022-07-08T10:24:39.167757","status":"completed"},"tags":[]}},{"cell_type":"code","source":"data[\"Ticket\"].value_counts()","metadata":{"papermill":{"duration":0.039203,"end_time":"2022-07-08T10:24:39.252069","exception":false,"start_time":"2022-07-08T10:24:39.212866","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.922750Z","iopub.execute_input":"2022-07-08T10:50:36.923574Z","iopub.status.idle":"2022-07-08T10:50:36.934275Z","shell.execute_reply.started":"2022-07-08T10:50:36.923534Z","shell.execute_reply":"2022-07-08T10:50:36.933110Z"},"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.038932,"end_time":"2022-07-08T10:24:39.315042","exception":false,"start_time":"2022-07-08T10:24:39.276110","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.936424Z","iopub.execute_input":"2022-07-08T10:50:36.936864Z","iopub.status.idle":"2022-07-08T10:50:36.947125Z","shell.execute_reply.started":"2022-07-08T10:50:36.936830Z","shell.execute_reply":"2022-07-08T10:50:36.946154Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"new_tickets_df = split_tickets(data[\"Ticket\"])\nnew_tickets_df","metadata":{"papermill":{"duration":0.046761,"end_time":"2022-07-08T10:24:39.385423","exception":false,"start_time":"2022-07-08T10:24:39.338662","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.948557Z","iopub.execute_input":"2022-07-08T10:50:36.949386Z","iopub.status.idle":"2022-07-08T10:50:36.974017Z","shell.execute_reply.started":"2022-07-08T10:50:36.949340Z","shell.execute_reply":"2022-07-08T10:50:36.972842Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(new_tickets_df)","metadata":{"papermill":{"duration":0.040118,"end_time":"2022-07-08T10:24:39.449168","exception":false,"start_time":"2022-07-08T10:24:39.409050","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.977566Z","iopub.execute_input":"2022-07-08T10:50:36.978328Z","iopub.status.idle":"2022-07-08T10:50:36.986412Z","shell.execute_reply.started":"2022-07-08T10:50:36.978289Z","shell.execute_reply":"2022-07-08T10:50:36.985152Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"papermill":{"duration":0.06156,"end_time":"2022-07-08T10:24:39.535088","exception":false,"start_time":"2022-07-08T10:24:39.473528","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:36.987992Z","iopub.execute_input":"2022-07-08T10:50:36.989048Z","iopub.status.idle":"2022-07-08T10:50:37.022666Z","shell.execute_reply.started":"2022-07-08T10:50:36.989001Z","shell.execute_reply":"2022-07-08T10:50:37.021531Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `Total_members` by counting total from `SibSp` and `Parch`","metadata":{"papermill":{"duration":0.024597,"end_time":"2022-07-08T10:24:39.584849","exception":false,"start_time":"2022-07-08T10:24:39.560252","status":"completed"},"tags":[]}},{"cell_type":"code","source":"X[\"Total_members\"] = X[[\"SibSp\", \"Parch\"]].sum(axis=1)","metadata":{"papermill":{"duration":0.036983,"end_time":"2022-07-08T10:24:39.645295","exception":false,"start_time":"2022-07-08T10:24:39.608312","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.024244Z","iopub.execute_input":"2022-07-08T10:50:37.024572Z","iopub.status.idle":"2022-07-08T10:50:37.033037Z","shell.execute_reply.started":"2022-07-08T10:50:37.024542Z","shell.execute_reply":"2022-07-08T10:50:37.031843Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"papermill":{"duration":0.059843,"end_time":"2022-07-08T10:24:39.728684","exception":false,"start_time":"2022-07-08T10:24:39.668841","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.034504Z","iopub.execute_input":"2022-07-08T10:50:37.035613Z","iopub.status.idle":"2022-07-08T10:50:37.068825Z","shell.execute_reply.started":"2022-07-08T10:50:37.035560Z","shell.execute_reply":"2022-07-08T10:50:37.067868Z"},"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":{"papermill":{"duration":0.041201,"end_time":"2022-07-08T10:24:39.793815","exception":false,"start_time":"2022-07-08T10:24:39.752614","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.070281Z","iopub.execute_input":"2022-07-08T10:50:37.070841Z","iopub.status.idle":"2022-07-08T10:50:37.082305Z","shell.execute_reply.started":"2022-07-08T10:50:37.070797Z","shell.execute_reply":"2022-07-08T10:50:37.081303Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X","metadata":{"papermill":{"duration":0.057867,"end_time":"2022-07-08T10:24:39.875906","exception":false,"start_time":"2022-07-08T10:24:39.818039","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.083698Z","iopub.execute_input":"2022-07-08T10:50:37.084321Z","iopub.status.idle":"2022-07-08T10:50:37.114130Z","shell.execute_reply.started":"2022-07-08T10:50:37.084287Z","shell.execute_reply":"2022-07-08T10:50:37.112945Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mi_scores","metadata":{"papermill":{"duration":0.038561,"end_time":"2022-07-08T10:24:39.939198","exception":false,"start_time":"2022-07-08T10:24:39.900637","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.115585Z","iopub.execute_input":"2022-07-08T10:50:37.116614Z","iopub.status.idle":"2022-07-08T10:50:37.124818Z","shell.execute_reply.started":"2022-07-08T10:50:37.116572Z","shell.execute_reply":"2022-07-08T10:50:37.123493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `PclassRatio` from count of each `Pclass`","metadata":{"papermill":{"duration":0.024335,"end_time":"2022-07-08T10:24:39.988423","exception":false,"start_time":"2022-07-08T10:24:39.964088","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.037217,"end_time":"2022-07-08T10:24:40.050473","exception":false,"start_time":"2022-07-08T10:24:40.013256","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.126282Z","iopub.execute_input":"2022-07-08T10:50:37.127117Z","iopub.status.idle":"2022-07-08T10:50:37.136703Z","shell.execute_reply.started":"2022-07-08T10:50:37.127067Z","shell.execute_reply":"2022-07-08T10:50:37.135585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"PclassRatio\"] = create_pclass_ratios(X)\nX","metadata":{"papermill":{"duration":0.075199,"end_time":"2022-07-08T10:24:40.150210","exception":false,"start_time":"2022-07-08T10:24:40.075011","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.138027Z","iopub.execute_input":"2022-07-08T10:50:37.139031Z","iopub.status.idle":"2022-07-08T10:50:37.183282Z","shell.execute_reply.started":"2022-07-08T10:50:37.138985Z","shell.execute_reply":"2022-07-08T10:50:37.182389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `PclassAvgFare` column based on `Fare` as per `Pclass`","metadata":{"papermill":{"duration":0.025093,"end_time":"2022-07-08T10:24:40.201150","exception":false,"start_time":"2022-07-08T10:24:40.176057","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.036497,"end_time":"2022-07-08T10:24:40.263155","exception":false,"start_time":"2022-07-08T10:24:40.226658","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.184515Z","iopub.execute_input":"2022-07-08T10:50:37.185018Z","iopub.status.idle":"2022-07-08T10:50:37.190273Z","shell.execute_reply.started":"2022-07-08T10:50:37.184986Z","shell.execute_reply":"2022-07-08T10:50:37.189420Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"PclassAvgFare\"] = create_avg_pclass_fares(X)\nX","metadata":{"papermill":{"duration":0.075738,"end_time":"2022-07-08T10:24:40.364028","exception":false,"start_time":"2022-07-08T10:24:40.288290","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.191395Z","iopub.execute_input":"2022-07-08T10:50:37.191923Z","iopub.status.idle":"2022-07-08T10:50:37.241272Z","shell.execute_reply.started":"2022-07-08T10:50:37.191887Z","shell.execute_reply":"2022-07-08T10:50:37.240128Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `TotalCabins` by counting no. of cabins in each row","metadata":{"papermill":{"duration":0.025554,"end_time":"2022-07-08T10:24:40.415357","exception":false,"start_time":"2022-07-08T10:24:40.389803","status":"completed"},"tags":[]}},{"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":{"papermill":{"duration":0.037029,"end_time":"2022-07-08T10:24:40.478822","exception":false,"start_time":"2022-07-08T10:24:40.441793","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.242714Z","iopub.execute_input":"2022-07-08T10:50:37.243430Z","iopub.status.idle":"2022-07-08T10:50:37.249396Z","shell.execute_reply.started":"2022-07-08T10:50:37.243393Z","shell.execute_reply":"2022-07-08T10:50:37.248259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X[\"TotalCabins\"] = create_total_cabins(X)\nX","metadata":{"papermill":{"duration":0.059406,"end_time":"2022-07-08T10:24:40.564101","exception":false,"start_time":"2022-07-08T10:24:40.504695","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.250920Z","iopub.execute_input":"2022-07-08T10:50:37.251898Z","iopub.status.idle":"2022-07-08T10:50:37.293523Z","shell.execute_reply.started":"2022-07-08T10:50:37.251847Z","shell.execute_reply":"2022-07-08T10:50:37.292296Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `SexRatio` based on `Sex`","metadata":{"papermill":{"duration":0.027518,"end_time":"2022-07-08T10:24:40.617810","exception":false,"start_time":"2022-07-08T10:24:40.590292","status":"completed"},"tags":[]}},{"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":{"papermill":{"duration":0.038631,"end_time":"2022-07-08T10:24:40.682887","exception":false,"start_time":"2022-07-08T10:24:40.644256","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.295080Z","iopub.execute_input":"2022-07-08T10:50:37.295555Z","iopub.status.idle":"2022-07-08T10:50:37.302806Z","shell.execute_reply.started":"2022-07-08T10:50:37.295508Z","shell.execute_reply":"2022-07-08T10:50:37.301978Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(create_sex_ratio(X))\nX","metadata":{"papermill":{"duration":0.081498,"end_time":"2022-07-08T10:24:40.791277","exception":false,"start_time":"2022-07-08T10:24:40.709779","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.304012Z","iopub.execute_input":"2022-07-08T10:50:37.304345Z","iopub.status.idle":"2022-07-08T10:50:37.359434Z","shell.execute_reply.started":"2022-07-08T10:50:37.304315Z","shell.execute_reply":"2022-07-08T10:50:37.358247Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating `EmbarkedRatio` based on `Embarked location`","metadata":{"papermill":{"duration":0.026519,"end_time":"2022-07-08T10:24:40.844932","exception":false,"start_time":"2022-07-08T10:24:40.818413","status":"completed"},"tags":[]}},{"cell_type":"code","source":"X[\"Embarked\"].value_counts()","metadata":{"papermill":{"duration":0.03973,"end_time":"2022-07-08T10:24:40.911663","exception":false,"start_time":"2022-07-08T10:24:40.871933","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.361563Z","iopub.execute_input":"2022-07-08T10:50:37.362352Z","iopub.status.idle":"2022-07-08T10:50:37.372308Z","shell.execute_reply.started":"2022-07-08T10:50:37.362301Z","shell.execute_reply":"2022-07-08T10:50:37.371278Z"},"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":{"papermill":{"duration":0.03787,"end_time":"2022-07-08T10:24:40.976318","exception":false,"start_time":"2022-07-08T10:24:40.938448","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.373550Z","iopub.execute_input":"2022-07-08T10:50:37.374096Z","iopub.status.idle":"2022-07-08T10:50:37.383695Z","shell.execute_reply.started":"2022-07-08T10:50:37.374063Z","shell.execute_reply":"2022-07-08T10:50:37.382551Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = X.join(create_embarkment_ratio(X))\nX","metadata":{"papermill":{"duration":0.08229,"end_time":"2022-07-08T10:24:41.085747","exception":false,"start_time":"2022-07-08T10:24:41.003457","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.385201Z","iopub.execute_input":"2022-07-08T10:50:37.385586Z","iopub.status.idle":"2022-07-08T10:50:37.436644Z","shell.execute_reply.started":"2022-07-08T10:50:37.385553Z","shell.execute_reply":"2022-07-08T10:50:37.435867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### checking MI score again on new columns","metadata":{"papermill":{"duration":0.027116,"end_time":"2022-07-08T10:24:41.140145","exception":false,"start_time":"2022-07-08T10:24:41.113029","status":"completed"},"tags":[]}},{"cell_type":"code","source":"mi_scores = get_mi_score(X, Y)\nmi_scores","metadata":{"papermill":{"duration":0.097221,"end_time":"2022-07-08T10:24:41.264796","exception":false,"start_time":"2022-07-08T10:24:41.167575","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.437810Z","iopub.execute_input":"2022-07-08T10:50:37.438675Z","iopub.status.idle":"2022-07-08T10:50:37.503881Z","shell.execute_reply.started":"2022-07-08T10:50:37.438623Z","shell.execute_reply":"2022-07-08T10:50:37.502683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Creating same features for our `test_data`","metadata":{"papermill":{"duration":0.02756,"end_time":"2022-07-08T10:24:41.319837","exception":false,"start_time":"2022-07-08T10:24:41.292277","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_data = test_data.join(split_tickets(test_data[\"Ticket\"]))","metadata":{"papermill":{"duration":0.042451,"end_time":"2022-07-08T10:24:41.389854","exception":false,"start_time":"2022-07-08T10:24:41.347403","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.505392Z","iopub.execute_input":"2022-07-08T10:50:37.506442Z","iopub.status.idle":"2022-07-08T10:50:37.516906Z","shell.execute_reply.started":"2022-07-08T10:50:37.506396Z","shell.execute_reply":"2022-07-08T10:50:37.515593Z"},"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.058436,"end_time":"2022-07-08T10:24:41.476104","exception":false,"start_time":"2022-07-08T10:24:41.417668","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.518739Z","iopub.execute_input":"2022-07-08T10:50:37.519626Z","iopub.status.idle":"2022-07-08T10:50:37.542892Z","shell.execute_reply.started":"2022-07-08T10:50:37.519441Z","shell.execute_reply":"2022-07-08T10:50:37.542048Z"},"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.041765,"end_time":"2022-07-08T10:24:41.546715","exception":false,"start_time":"2022-07-08T10:24:41.504950","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.544189Z","iopub.execute_input":"2022-07-08T10:50:37.544755Z","iopub.status.idle":"2022-07-08T10:50:37.552306Z","shell.execute_reply.started":"2022-07-08T10:50:37.544720Z","shell.execute_reply":"2022-07-08T10:50:37.551187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data[\"TotalCabins\"] = create_total_cabins(test_data)","metadata":{"papermill":{"duration":0.040063,"end_time":"2022-07-08T10:24:41.614754","exception":false,"start_time":"2022-07-08T10:24:41.574691","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.553720Z","iopub.execute_input":"2022-07-08T10:50:37.554088Z","iopub.status.idle":"2022-07-08T10:50:37.565880Z","shell.execute_reply.started":"2022-07-08T10:50:37.554055Z","shell.execute_reply":"2022-07-08T10:50:37.564991Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = test_data.join(create_sex_ratio(test_data))","metadata":{"papermill":{"duration":0.050351,"end_time":"2022-07-08T10:24:41.693136","exception":false,"start_time":"2022-07-08T10:24:41.642785","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.567384Z","iopub.execute_input":"2022-07-08T10:50:37.568009Z","iopub.status.idle":"2022-07-08T10:50:37.587389Z","shell.execute_reply.started":"2022-07-08T10:50:37.567968Z","shell.execute_reply":"2022-07-08T10:50:37.586198Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = test_data.join(create_embarkment_ratio(test_data))","metadata":{"papermill":{"duration":0.054489,"end_time":"2022-07-08T10:24:41.775004","exception":false,"start_time":"2022-07-08T10:24:41.720515","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.595258Z","iopub.execute_input":"2022-07-08T10:50:37.596304Z","iopub.status.idle":"2022-07-08T10:50:37.612512Z","shell.execute_reply.started":"2022-07-08T10:50:37.596246Z","shell.execute_reply":"2022-07-08T10:50:37.611375Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data.head()","metadata":{"papermill":{"duration":0.061036,"end_time":"2022-07-08T10:24:41.864026","exception":false,"start_time":"2022-07-08T10:24:41.802990","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.613965Z","iopub.execute_input":"2022-07-08T10:50:37.615168Z","iopub.status.idle":"2022-07-08T10:50:37.644311Z","shell.execute_reply.started":"2022-07-08T10:50:37.615115Z","shell.execute_reply":"2022-07-08T10:50:37.642932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 7. Selecting useful features","metadata":{"papermill":{"duration":0.028367,"end_time":"2022-07-08T10:24:41.920979","exception":false,"start_time":"2022-07-08T10:24:41.892612","status":"completed"},"tags":[]}},{"cell_type":"code","source":"useful_features = mi_scores[mi_scores > 0.030].index\nX = X[useful_features]\ntest_data = test_data[useful_features]\nuseful_features","metadata":{"papermill":{"duration":0.044034,"end_time":"2022-07-08T10:24:41.994404","exception":false,"start_time":"2022-07-08T10:24:41.950370","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.646158Z","iopub.execute_input":"2022-07-08T10:50:37.647066Z","iopub.status.idle":"2022-07-08T10:50:37.661066Z","shell.execute_reply.started":"2022-07-08T10:50:37.647012Z","shell.execute_reply":"2022-07-08T10:50:37.659621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 8. Extracting numerical and categorical columns","metadata":{"papermill":{"duration":0.027438,"end_time":"2022-07-08T10:24:42.049989","exception":false,"start_time":"2022-07-08T10:24:42.022551","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.043654,"end_time":"2022-07-08T10:24:42.122040","exception":false,"start_time":"2022-07-08T10:24:42.078386","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.662944Z","iopub.execute_input":"2022-07-08T10:50:37.663468Z","iopub.status.idle":"2022-07-08T10:50:37.677133Z","shell.execute_reply.started":"2022-07-08T10:50:37.663420Z","shell.execute_reply":"2022-07-08T10:50:37.675683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 9. Making Pipeline","metadata":{"papermill":{"duration":0.027878,"end_time":"2022-07-08T10:24:42.177935","exception":false,"start_time":"2022-07-08T10:24:42.150057","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.047725,"end_time":"2022-07-08T10:24:42.253887","exception":false,"start_time":"2022-07-08T10:24:42.206162","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.679148Z","iopub.execute_input":"2022-07-08T10:50:37.679962Z","iopub.status.idle":"2022-07-08T10:50:37.696013Z","shell.execute_reply.started":"2022-07-08T10:50:37.679908Z","shell.execute_reply":"2022-07-08T10:50:37.694471Z"},"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.04013,"end_time":"2022-07-08T10:24:42.323002","exception":false,"start_time":"2022-07-08T10:24:42.282872","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.697780Z","iopub.execute_input":"2022-07-08T10:50:37.698544Z","iopub.status.idle":"2022-07-08T10:50:37.710941Z","shell.execute_reply.started":"2022-07-08T10:50:37.698492Z","shell.execute_reply":"2022-07-08T10:50:37.709877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 10. Doing hyperparameter tuning with cross-validation (`XGBClassifier`)","metadata":{"papermill":{"duration":0.027873,"end_time":"2022-07-08T10:24:42.379070","exception":false,"start_time":"2022-07-08T10:24:42.351197","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":469.046986,"end_time":"2022-07-08T10:32:31.457603","exception":false,"start_time":"2022-07-08T10:24:42.410617","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:50:37.712827Z","iopub.execute_input":"2022-07-08T10:50:37.713548Z","iopub.status.idle":"2022-07-08T10:58:20.110154Z","shell.execute_reply.started":"2022-07-08T10:50:37.713505Z","shell.execute_reply":"2022-07-08T10:58:20.109250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 11. Checking MAE scores","metadata":{"papermill":{"duration":0.028294,"end_time":"2022-07-08T10:32:31.514810","exception":false,"start_time":"2022-07-08T10:32:31.486516","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.040548,"end_time":"2022-07-08T10:32:31.584263","exception":false,"start_time":"2022-07-08T10:32:31.543715","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:58:20.114166Z","iopub.execute_input":"2022-07-08T10:58:20.114886Z","iopub.status.idle":"2022-07-08T10:58:20.124414Z","shell.execute_reply.started":"2022-07-08T10:58:20.114845Z","shell.execute_reply":"2022-07-08T10:58:20.123377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"min(maes, key=lambda x: maes[x][3])","metadata":{"papermill":{"duration":0.040406,"end_time":"2022-07-08T10:32:31.653691","exception":false,"start_time":"2022-07-08T10:32:31.613285","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T10:58:20.126197Z","iopub.execute_input":"2022-07-08T10:58:20.127357Z","iopub.status.idle":"2022-07-08T10:58:20.142152Z","shell.execute_reply.started":"2022-07-08T10:58:20.127318Z","shell.execute_reply":"2022-07-08T10:58:20.141260Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 12. Selecting best parameters\n#### `n_estimators: 500`\n#### `learning_rate: 0.05`\n#### `max_depth: 5`\n#### `MAE: 0.17838951310861423`","metadata":{"papermill":{"duration":0.029168,"end_time":"2022-07-08T10:32:31.712021","exception":false,"start_time":"2022-07-08T10:32:31.682853","status":"completed"},"tags":[]}},{"cell_type":"code","source":"best_n_estimators = 500\nbest_max_depth = 5\nbest_rate = 0.05","metadata":{"papermill":{"duration":0.039185,"end_time":"2022-07-08T10:32:31.782005","exception":false,"start_time":"2022-07-08T10:32:31.742820","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T11:04:16.713024Z","iopub.execute_input":"2022-07-08T11:04:16.713461Z","iopub.status.idle":"2022-07-08T11:04:16.718503Z","shell.execute_reply.started":"2022-07-08T11:04:16.713425Z","shell.execute_reply":"2022-07-08T11:04:16.717324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 13. Training model on best parameters","metadata":{"papermill":{"duration":0.028076,"end_time":"2022-07-08T10:32:31.838978","exception":false,"start_time":"2022-07-08T10:32:31.810902","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":3.513565,"end_time":"2022-07-08T10:32:35.381382","exception":false,"start_time":"2022-07-08T10:32:31.867817","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T11:04:17.544504Z","iopub.execute_input":"2022-07-08T11:04:17.545181Z","iopub.status.idle":"2022-07-08T11:04:19.829627Z","shell.execute_reply.started":"2022-07-08T11:04:17.545146Z","shell.execute_reply":"2022-07-08T11:04:19.828283Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 14. Predicting `Survived` on `test_data`","metadata":{"papermill":{"duration":0.028107,"end_time":"2022-07-08T10:32:35.438247","exception":false,"start_time":"2022-07-08T10:32:35.410140","status":"completed"},"tags":[]}},{"cell_type":"code","source":"test_preds = pipeline.predict(test_data)\ntest_preds","metadata":{"papermill":{"duration":0.082837,"end_time":"2022-07-08T10:32:35.549765","exception":false,"start_time":"2022-07-08T10:32:35.466928","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T11:04:19.831517Z","iopub.execute_input":"2022-07-08T11:04:19.831832Z","iopub.status.idle":"2022-07-08T11:04:19.867297Z","shell.execute_reply.started":"2022-07-08T11:04:19.831803Z","shell.execute_reply":"2022-07-08T11:04:19.866323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 15. Submitting predictions","metadata":{"papermill":{"duration":0.029177,"end_time":"2022-07-08T10:32:35.608970","exception":false,"start_time":"2022-07-08T10:32:35.579793","status":"completed"},"tags":[]}},{"cell_type":"code","source":"output = pd.DataFrame({\"PassengerId\": test_data.index, \"Survived\": test_preds})\noutput.to_csv(\"./submission_9.csv\", index=False)","metadata":{"papermill":{"duration":0.044848,"end_time":"2022-07-08T10:32:35.683531","exception":false,"start_time":"2022-07-08T10:32:35.638683","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2022-07-08T11:04:22.576196Z","iopub.execute_input":"2022-07-08T11:04:22.577243Z","iopub.status.idle":"2022-07-08T11:04:22.586354Z","shell.execute_reply.started":"2022-07-08T11:04:22.577173Z","shell.execute_reply":"2022-07-08T11:04:22.585489Z"},"trusted":true},"execution_count":null,"outputs":[]}]}