{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Imports","metadata":{}},{"cell_type":"code","source":"import functools\nimport os\nimport random\nimport warnings\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport optuna\nimport pandas as pd\nimport seaborn as sns\nimport xgboost as xgb\nfrom sklearn import metrics\nfrom sklearn.experimental import enable_iterative_imputer\nfrom sklearn.impute import IterativeImputer, SimpleImputer\nfrom sklearn.preprocessing import MinMaxScaler, OneHotEncoder, OrdinalEncoder\nfrom sklearnex import patch_sklearn\n\npatch_sklearn()\nwarnings.filterwarnings(\"ignore\")\n\nsns.set_theme()\nsns.set_style(\"ticks\")\nsns.despine()\n\n%matplotlib inline","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-11-30T06:13:27.002939Z","iopub.execute_input":"2022-11-30T06:13:27.003873Z","iopub.status.idle":"2022-11-30T06:13:28.829392Z","shell.execute_reply.started":"2022-11-30T06:13:27.003756Z","shell.execute_reply":"2022-11-30T06:13:28.828323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def seed_everything(seed=42):\n    random.seed(seed)\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    np.random.seed(seed)\n    \nseed_everything()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:28.831511Z","iopub.execute_input":"2022-11-30T06:13:28.833328Z","iopub.status.idle":"2022-11-30T06:13:28.839064Z","shell.execute_reply.started":"2022-11-30T06:13:28.833279Z","shell.execute_reply":"2022-11-30T06:13:28.837983Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Configuration","metadata":{}},{"cell_type":"code","source":"class Config:\n    DATA_DIR = \"../input/home-loan-prediction-prepared-datasets\"\n    \n    N_TRIALS = 100\n    \n    EVAL_METRIC = \"logloss\"\n    \n    DEFAULT_VALUES = {\n        \"max_depth\": 6,\n        \"n_estimators\": 100,\n        \"alpha\": 0.0,\n        \"lambda\": 1.0,\n        \"learning_rate\": 0.3,\n        \"colsample_bytree\": 1.0,\n        \"colsample_bylevel\": 1.0,\n        \"min_child_weight\": 1.0,\n        \"scale_pos_weight\": 1.0,\n        \"sampling_method\": \"uniform\",\n        \"early_stopping_rounds\": None,\n    }\n    \n    STATIC_PARAMS = {\n        \"tree_method\": \"gpu_hist\",\n        \"use_label_encoder\": False,\n        \"n_jobs\": 2,\n        \"predictor\": \"gpu_predictor\",\n        \"max_bin\": 1024,\n        \"eval_metric\": EVAL_METRIC,\n    }\n    \n    @classmethod\n    def filepath(cls, filename):\n        return os.path.join(cls.DATA_DIR, filename)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:28.841512Z","iopub.execute_input":"2022-11-30T06:13:28.842350Z","iopub.status.idle":"2022-11-30T06:13:28.851992Z","shell.execute_reply.started":"2022-11-30T06:13:28.842313Z","shell.execute_reply":"2022-11-30T06:13:28.850942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load Dataset","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv(Config.filepath(\"train_with_new_features.csv\"))\ntest_df = pd.read_csv(Config.filepath(\"test_with_new_features.csv\"))","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:28.855461Z","iopub.execute_input":"2022-11-30T06:13:28.855866Z","iopub.status.idle":"2022-11-30T06:13:34.023155Z","shell.execute_reply.started":"2022-11-30T06:13:28.855830Z","shell.execute_reply":"2022-11-30T06:13:34.022195Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.024650Z","iopub.execute_input":"2022-11-30T06:13:34.025348Z","iopub.status.idle":"2022-11-30T06:13:34.062666Z","shell.execute_reply.started":"2022-11-30T06:13:34.025309Z","shell.execute_reply":"2022-11-30T06:13:34.061613Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.064540Z","iopub.execute_input":"2022-11-30T06:13:34.064920Z","iopub.status.idle":"2022-11-30T06:13:34.092644Z","shell.execute_reply.started":"2022-11-30T06:13:34.064883Z","shell.execute_reply":"2022-11-30T06:13:34.091523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training Loop","metadata":{}},{"cell_type":"code","source":"def train(df, test_df, params, verbose=True):\n    # Create copies so that original datatsets do not change\n    df = df.copy()\n    df[\"preds\"] = pd.NA\n    \n    drop = [\"target\", \"preds\", \"kfold\"]\n    \n    # Add static params - Parameters that are not tuned\n    params.update(Config.STATIC_PARAMS)\n    \n    # For storing total accuracy across folds for averaging\n    total_f1 = 0.0\n    \n    # Empty list for storing test predictions in each fold\n    test_preds = []\n    \n    for fold in range(5):\n        train = df[df[\"kfold\"] != fold]\n        \n        # Get training features and labels\n        y_train = train[\"target\"]\n        X_train = train.drop(drop, axis=1)\n        \n        val = df[df[\"kfold\"] == fold]\n        \n        # Get validation features and labels\n        y_val = val[\"target\"]\n        X_val = val.drop(drop, axis=1)\n        \n        # Initialize model\n        clf = xgb.XGBClassifier(**params)\n        \n        # Train model on training set\n        clf.fit(\n            X=X_train,\n            y=y_train,\n            eval_set=[(X_train, y_train), (X_val, y_val)],\n            verbose=False,\n        )\n        \n        # Make predictions on validation set\n        val_pred = clf.predict(X_val)\n        f1 = metrics.f1_score(y_val, val_pred, average=\"macro\")\n        \n        # Report accuracy if verbose is True\n        if verbose is True:\n            print(f\"Fold {fold + 1} - Macro F1 = {f1: .4f}\")\n        \n        # Add to total accuracy\n        total_f1 += f1\n        \n        # Make predictions on validation set again\n        # But this time in terms of probabilities\n        # And store in the df\n        # These will be used in the meta model\n        df.loc[val.index, \"preds\"] = clf.predict_proba(X_val)[:, 1]\n        \n        # Get the test predictions for this fold in terms of probability\n        test_preds.append(clf.predict_proba(test_df)[:, 1])\n        \n    avg_f1 = total_f1 / 5\n    \n    if verbose is True:\n        print(f\"Overall ROC AUC = {avg_f1: .4f}\")   \n    \n    # Calculate final test predictions\n    test_preds = np.vstack(test_preds)\n    test_preds = test_preds.mean(axis=0)\n    \n    # Return val preds, test preds and overall accuracy\n    return df[\"preds\"].values, test_preds, avg_f1","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.094861Z","iopub.execute_input":"2022-11-30T06:13:34.095428Z","iopub.status.idle":"2022-11-30T06:13:34.107789Z","shell.execute_reply.started":"2022-11-30T06:13:34.095392Z","shell.execute_reply":"2022-11-30T06:13:34.106751Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Optuna Objective","metadata":{}},{"cell_type":"code","source":"def objective(trial, train_df, test_df):\n    params = {\n        \"max_depth\": trial.suggest_int(\"max_depth\", 1, 11),\n        \"n_estimators\": trial.suggest_int(\"n_estimators\", 5, 500),\n        \"alpha\": trial.suggest_uniform(\"alpha\", 0.0, 5.0),\n        \"lambda\": trial.suggest_float(\"lambda\", 1.0, 5.0, log=True),\n        \"learning_rate\": trial.suggest_float(\"learning_rate\", 0.03, 0.8, log=True),\n        \"scale_pos_weight\": trial.suggest_float(\"scale_pos_weight\", 1, 20, log=True),\n        \"colsample_bytree\": trial.suggest_float(\"colsample_bytree\", 0.2, 1.0),\n        \"colsample_bylevel\": trial.suggest_float(\"colsample_bylevel\", 0.2, 1.0),\n        \"min_child_weight\": trial.suggest_uniform(\"min_child_weight\", 1, 100),\n        \"sampling_method\": trial.suggest_categorical(\"sampling_method\", [\"uniform\", \"gradient_based\"]),\n        \"early_stopping_rounds\": trial.suggest_int(\"early_stopping_rounds\", 5, 20, step=5)\n    }\n    \n    obs_k = f\"validation_1-{Config.EVAL_METRIC}\"\n    params[\"callbacks\"] = [optuna.integration.XGBoostPruningCallback(trial, obs_k)]\n    \n    _, _, f1 = train(df=train_df, test_df=test_df, params=params, verbose=False)\n    return f1","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.109386Z","iopub.execute_input":"2022-11-30T06:13:34.110094Z","iopub.status.idle":"2022-11-30T06:13:34.122531Z","shell.execute_reply.started":"2022-11-30T06:13:34.109985Z","shell.execute_reply":"2022-11-30T06:13:34.121472Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Hyperparameter Search","metadata":{}},{"cell_type":"code","source":"def hyperparameter_search(train_df, test_df, n_trials=Config.N_TRIALS, gc_after_trial=False):\n    _objective = functools.partial(objective, train_df=train_df, test_df=test_df)\n    \n    pruner = optuna.pruners.HyperbandPruner()\n    \n    sampler = optuna.samplers.TPESampler(seed=42)\n    study = optuna.create_study(\n        direction=\"maximize\",\n        pruner=pruner,\n        sampler=sampler,\n    )\n    \n    study.optimize(_objective, n_trials=n_trials, gc_after_trial=gc_after_trial)\n\n    return study.best_params","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.124092Z","iopub.execute_input":"2022-11-30T06:13:34.124536Z","iopub.status.idle":"2022-11-30T06:13:34.135867Z","shell.execute_reply.started":"2022-11-30T06:13:34.124499Z","shell.execute_reply":"2022-11-30T06:13:34.135041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preprocessing Before Encoding Categorical Features","metadata":{}},{"cell_type":"code","source":"cat_feats = pd.read_csv(Config.filepath(\"categorical_features.csv\"))\ncat_feats = cat_feats[\"column\"].to_list()\n\nnum_feats = pd.read_csv(Config.filepath(\"numerical_features.csv\"))\nnum_feats = num_feats[\"column\"].to_list()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.140357Z","iopub.execute_input":"2022-11-30T06:13:34.140648Z","iopub.status.idle":"2022-11-30T06:13:34.159039Z","shell.execute_reply.started":"2022-11-30T06:13:34.140621Z","shell.execute_reply":"2022-11-30T06:13:34.158254Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"imputer = IterativeImputer(max_iter=100)\nscaler = MinMaxScaler()\ncat_imputer = SimpleImputer(strategy=\"most_frequent\")\n\ntrain_df[num_feats] = imputer.fit_transform(train_df[num_feats])\ntrain_df[num_feats] = scaler.fit_transform(train_df[num_feats])\ntrain_df[cat_feats] = cat_imputer.fit_transform(train_df[cat_feats])","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:13:34.162082Z","iopub.execute_input":"2022-11-30T06:13:34.162339Z","iopub.status.idle":"2022-11-30T06:14:44.205509Z","shell.execute_reply.started":"2022-11-30T06:13:34.162316Z","shell.execute_reply":"2022-11-30T06:14:44.204485Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df[num_feats] = imputer.transform(test_df[num_feats])\ntest_df[num_feats] = scaler.transform(test_df[num_feats])\ntest_df[cat_feats] = cat_imputer.transform(test_df[cat_feats])","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:14:44.206996Z","iopub.execute_input":"2022-11-30T06:14:44.207674Z","iopub.status.idle":"2022-11-30T06:14:49.821697Z","shell.execute_reply.started":"2022-11-30T06:14:44.207636Z","shell.execute_reply":"2022-11-30T06:14:49.820578Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# XGBoost with Label Encoding","metadata":{}},{"cell_type":"code","source":"encoder = OrdinalEncoder(handle_unknown=\"use_encoded_value\", unknown_value=-1)\n\ntrain_le_df = train_df.copy()\ntrain_le_df[cat_feats] = encoder.fit_transform(train_le_df[cat_feats])\n\ntest_le_df = test_df.copy()\ntest_le_df[cat_feats] = encoder.transform(test_le_df[cat_feats])","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:14:49.823488Z","iopub.execute_input":"2022-11-30T06:14:49.823884Z","iopub.status.idle":"2022-11-30T06:15:04.186189Z","shell.execute_reply.started":"2022-11-30T06:14:49.823847Z","shell.execute_reply":"2022-11-30T06:15:04.185205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_le_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:15:04.187720Z","iopub.execute_input":"2022-11-30T06:15:04.188131Z","iopub.status.idle":"2022-11-30T06:15:04.219024Z","shell.execute_reply.started":"2022-11-30T06:15:04.188085Z","shell.execute_reply":"2022-11-30T06:15:04.218030Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_le_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:15:04.220462Z","iopub.execute_input":"2022-11-30T06:15:04.221240Z","iopub.status.idle":"2022-11-30T06:15:04.251546Z","shell.execute_reply.started":"2022-11-30T06:15:04.221189Z","shell.execute_reply":"2022-11-30T06:15:04.250444Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Find Optimal Hyperparameters","metadata":{}},{"cell_type":"code","source":"train_le_df = train_le_df.drop(\"sk_id_curr\", axis=1)\n\ntest_sk_id = test_le_df[\"sk_id_curr\"].to_numpy()\ntest_le_df = test_le_df.drop(\"sk_id_curr\", axis=1)\n\nbest_params = hyperparameter_search(train_df=train_le_df, test_df=test_le_df)","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2022-11-30T06:15:10.580876Z","iopub.execute_input":"2022-11-30T06:15:10.581599Z","iopub.status.idle":"2022-11-30T06:25:27.457472Z","shell.execute_reply.started":"2022-11-30T06:15:10.581545Z","shell.execute_reply":"2022-11-30T06:25:27.456436Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_params","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:26:48.682834Z","iopub.execute_input":"2022-11-30T06:26:48.683232Z","iopub.status.idle":"2022-11-30T06:26:48.690162Z","shell.execute_reply.started":"2022-11-30T06:26:48.683201Z","shell.execute_reply":"2022-11-30T06:26:48.689067Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train Model with Optimal Hyperparameters","metadata":{}},{"cell_type":"code","source":"train_preds, test_preds, f1 = train(\n    df=train_le_df,\n    test_df=test_le_df,\n    params=best_params,\n    verbose=True\n)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:26:52.463423Z","iopub.execute_input":"2022-11-30T06:26:52.463785Z","iopub.status.idle":"2022-11-30T06:27:18.790787Z","shell.execute_reply.started":"2022-11-30T06:26:52.463753Z","shell.execute_reply":"2022-11-30T06:27:18.789719Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Create Submission","metadata":{}},{"cell_type":"code","source":"submission_le = pd.DataFrame({\"SK_ID_CURR\": test_sk_id, \"TARGET\": (test_preds >= 0.5).astype(int)})\nsubmission_le.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:27:25.708951Z","iopub.execute_input":"2022-11-30T06:27:25.709373Z","iopub.status.idle":"2022-11-30T06:27:25.721458Z","shell.execute_reply.started":"2022-11-30T06:27:25.709341Z","shell.execute_reply":"2022-11-30T06:27:25.720393Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_le.to_csv(\"./submission_le.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T06:27:28.625969Z","iopub.execute_input":"2022-11-30T06:27:28.626362Z","iopub.status.idle":"2022-11-30T06:27:28.738710Z","shell.execute_reply.started":"2022-11-30T06:27:28.626331Z","shell.execute_reply":"2022-11-30T06:27:28.737808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# XGBoost with One-Hot Encoding","metadata":{}},{"cell_type":"code","source":"encoder = OneHotEncoder(handle_unknown=\"ignore\", drop=\"if_binary\")\n\ntrain_ohe_df = train_df.copy()\n\nencoded_features = encoder.fit_transform(train_ohe_df[cat_feats])\nencoded_features = encoded_features.toarray()\n\ntrain_ohe_df = train_ohe_df.drop(cat_feats, axis=1)\nencoded_cols = encoder.get_feature_names_out()\n\ntrain_ohe_df[encoded_cols] = encoded_features","metadata":{"execution":{"iopub.status.busy":"2022-11-30T04:51:34.790153Z","iopub.execute_input":"2022-11-30T04:51:34.790509Z","iopub.status.idle":"2022-11-30T04:51:40.649017Z","shell.execute_reply.started":"2022-11-30T04:51:34.790480Z","shell.execute_reply":"2022-11-30T04:51:40.648004Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ohe_df = test_df.copy()\n\nencoded_features = encoder.transform(test_ohe_df[cat_feats])\nencoded_features = encoded_features.toarray()\n\ntest_ohe_df = test_ohe_df.drop(cat_feats, axis=1)\nencoded_cols = encoder.get_feature_names_out()\n\ntest_ohe_df[encoded_cols] = encoded_features","metadata":{"execution":{"iopub.status.busy":"2022-11-30T04:51:40.651100Z","iopub.execute_input":"2022-11-30T04:51:40.651478Z","iopub.status.idle":"2022-11-30T04:51:44.544914Z","shell.execute_reply.started":"2022-11-30T04:51:40.651441Z","shell.execute_reply":"2022-11-30T04:51:44.543910Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_ohe_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T04:51:44.546621Z","iopub.execute_input":"2022-11-30T04:51:44.547021Z","iopub.status.idle":"2022-11-30T04:51:44.577534Z","shell.execute_reply.started":"2022-11-30T04:51:44.546983Z","shell.execute_reply":"2022-11-30T04:51:44.576428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_ohe_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T04:51:44.579854Z","iopub.execute_input":"2022-11-30T04:51:44.580312Z","iopub.status.idle":"2022-11-30T04:51:44.611870Z","shell.execute_reply.started":"2022-11-30T04:51:44.580277Z","shell.execute_reply":"2022-11-30T04:51:44.610837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Find Optimal Hyperparameters","metadata":{}},{"cell_type":"code","source":"train_ohe_df = train_ohe_df.drop(\"sk_id_curr\", axis=1)\n\ntest_sk_id = test_ohe_df[\"sk_id_curr\"].to_numpy()\ntest_ohe_df = test_ohe_df.drop(\"sk_id_curr\", axis=1)\n\nbest_params = hyperparameter_search(train_df=train_ohe_df, test_df=test_ohe_df, gc_after_trial=True)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T04:51:49.064103Z","iopub.execute_input":"2022-11-30T04:51:49.064708Z","iopub.status.idle":"2022-11-30T05:14:53.283177Z","shell.execute_reply.started":"2022-11-30T04:51:49.064670Z","shell.execute_reply":"2022-11-30T05:14:53.282191Z"},"_kg_hide-output":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_params","metadata":{"execution":{"iopub.status.busy":"2022-11-30T05:15:02.071090Z","iopub.execute_input":"2022-11-30T05:15:02.071758Z","iopub.status.idle":"2022-11-30T05:15:02.077879Z","shell.execute_reply.started":"2022-11-30T05:15:02.071721Z","shell.execute_reply":"2022-11-30T05:15:02.076986Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Train Model with Optimal Hyperparameters","metadata":{}},{"cell_type":"code","source":"train_preds, test_preds, f1 = train(\n    df=train_ohe_df,\n    test_df=test_ohe_df,\n    params=best_params,\n    verbose=True\n)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T05:15:07.476656Z","iopub.execute_input":"2022-11-30T05:15:07.477100Z","iopub.status.idle":"2022-11-30T05:15:57.843277Z","shell.execute_reply.started":"2022-11-30T05:15:07.477065Z","shell.execute_reply":"2022-11-30T05:15:57.842185Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Create Submission","metadata":{}},{"cell_type":"code","source":"submission_ohe = pd.DataFrame({\"SK_ID_CURR\": test_sk_id, \"TARGET\": (test_preds >= 0.5).astype(int)})\nsubmission_ohe.head()","metadata":{"execution":{"iopub.status.busy":"2022-11-30T05:16:03.459697Z","iopub.execute_input":"2022-11-30T05:16:03.460093Z","iopub.status.idle":"2022-11-30T05:16:03.473217Z","shell.execute_reply.started":"2022-11-30T05:16:03.460058Z","shell.execute_reply":"2022-11-30T05:16:03.472009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_ohe.to_csv(\"./submission_ohe.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2022-11-30T05:16:08.983332Z","iopub.execute_input":"2022-11-30T05:16:08.983686Z","iopub.status.idle":"2022-11-30T05:16:09.104687Z","shell.execute_reply.started":"2022-11-30T05:16:08.983657Z","shell.execute_reply":"2022-11-30T05:16:09.103760Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}