{"metadata":{"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":50160,"databundleVersionId":7921029,"sourceType":"competition"},{"sourceId":162314401,"sourceType":"kernelVersion"},{"sourceId":162317063,"sourceType":"kernelVersion"}],"dockerImageVersionId":30674,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Adding more features for AutoML models\n  \n<div class=\"alert alert-block alert-warning\" style=\"font-size:14px; font-family:verdana; line-height: 1.7em;\">\n    📌 &nbsp; My idea here was to add Count Encoding of data(pl.String)\n</div>\n\n<div class=\"alert alert-block alert-warning\" style=\"font-size:14px; font-family:verdana; line-height: 1.7em;\">\n    📌 &nbsp; Next Idea: I dont use depth2 data except bureau_b.\n</div>\n\n# Resource  \n- [Training notebook](https://www.kaggle.com/code/vladislavkolesov/home-credit-automl-training)# Reference \nreference notebook: \n- [1] [home-credit-baseline](https://www.kaggle.com/code/greysky/home-credit-baseline)\n- [2] [home-credit-baseline-max-min-features](https://www.kaggle.com/code/stechparme/home-credit-baseline-max-min-features)","metadata":{"_uuid":"74a65a7b-0bec-47dc-9b61-8e8107c04d76","_cell_guid":"91e811a2-e6b2-4acf-b31d-818f3f3c7bb4","trusted":true}},{"cell_type":"code","source":"!python -m pip install --no-index --find-links=/kaggle/input/autogluon-pkgs autogluon > /dev/null\n!python -m pip install --no-index --find-links=/kaggle/input/ray-pkgs --upgrade --force-reinstall -q ray==2.6.3\n# tips: https://github.com/autogluon/autogluon/issues/3365","metadata":{"_uuid":"167195fc-bfbe-408c-885f-abf81f775840","_cell_guid":"c8dc2bc8-0bc6-4d15-ab9e-8f544282e365","collapsed":false,"_kg_hide-output":true,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T03:59:58.215088Z","iopub.execute_input":"2024-03-31T03:59:58.215932Z","iopub.status.idle":"2024-03-31T04:03:52.271208Z","shell.execute_reply.started":"2024-03-31T03:59:58.215892Z","shell.execute_reply":"2024-03-31T04:03:52.270241Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\nimport gc\nfrom glob import glob\nfrom pathlib import Path\nfrom datetime import datetime\nimport numpy as np\nimport pandas as pd\nimport polars as pl\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import StratifiedGroupKFold\nfrom sklearn.base import BaseEstimator, RegressorMixin\nimport joblib\nimport lightgbm as lgb\nimport warnings\nwarnings.simplefilter(action='ignore', category=FutureWarning)\n\nfrom autogluon.tabular import TabularDataset, TabularPredictor","metadata":{"_uuid":"98c0c081-9b27-439e-abb1-1bd74f4fb9be","_cell_guid":"7eef6798-c3ce-4632-ae85-56bff5025fbe","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:03:58.685315Z","iopub.execute_input":"2024-03-31T04:03:58.685810Z","iopub.status.idle":"2024-03-31T04:04:04.890413Z","shell.execute_reply.started":"2024-03-31T04:03:58.685770Z","shell.execute_reply":"2024-03-31T04:04:04.889591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pipeline","metadata":{"_uuid":"37491315-03e2-4a50-83b6-ad03f92d29a7","_cell_guid":"858ef3ce-d67e-4f21-9c94-949fec6feb2a","trusted":true}},{"cell_type":"code","source":"class Pipeline:\n    @staticmethod\n    def set_table_dtypes(df): #Standardize the dtype.\n        for col in df.columns:\n            if col in [\"case_id\", \"WEEK_NUM\", \"num_group1\", \"num_group2\"]:\n                df = df.with_columns(pl.col(col).cast(pl.Int64))\n            elif col in [\"date_decision\"]:\n                df = df.with_columns(pl.col(col).cast(pl.Date))\n            elif col[-1] in (\"P\", \"A\"):\n                df = df.with_columns(pl.col(col).cast(pl.Float64))\n            elif col[-1] in (\"M\",):\n                df = df.with_columns(pl.col(col).cast(pl.String))\n            elif col[-1] in (\"D\",):\n                df = df.with_columns(pl.col(col).cast(pl.Date))            \n\n        return df\n    \n    @staticmethod\n    def handle_dates(df): #Change the feature for D to the difference in days from date_decision.\n        for col in df.columns:\n            if col[-1] in (\"D\",):\n                df = df.with_columns(pl.col(col) - pl.col(\"date_decision\"))\n                df = df.with_columns(pl.col(col).dt.total_days())\n                \n        df = df.drop(\"date_decision\", \"MONTH\")\n\n        return df\n    \n    @staticmethod\n    def filter_cols(df): #Remove those with an average is_null exceeding 0.95 and those that do not fall within the range 1 < nunique < 200.\n        for col in df.columns:\n            if col not in [\"target\", \"case_id\", \"WEEK_NUM\"]:\n                isnull = df[col].is_null().mean()\n\n                if isnull > 0.50:\n                    df = df.drop(col)\n\n        for col in df.columns:\n            if (col not in [\"target\", \"case_id\", \"WEEK_NUM\"]) & (df[col].dtype == pl.String):\n                freq = df[col].n_unique()\n\n                if (freq == 1) | (freq > 200):\n                    df = df.drop(col)\n\n        return df","metadata":{"_uuid":"b17abf82-3f00-46db-9fc9-11f8cd3e0594","_cell_guid":"1c8eea2b-008e-49d6-af1d-03a970c201f7","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:10.392765Z","iopub.execute_input":"2024-03-31T04:04:10.393890Z","iopub.status.idle":"2024-03-31T04:04:10.407557Z","shell.execute_reply.started":"2024-03-31T04:04:10.393855Z","shell.execute_reply":"2024-03-31T04:04:10.405700Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Automatic Aggregation","metadata":{"_uuid":"678e783a-8a87-479e-b2ea-bb3413ecf39b","_cell_guid":"0c9f6954-003f-47f1-8913-65c647ec6959","trusted":true}},{"cell_type":"code","source":"class Aggregator:\n    @staticmethod\n    def num_expr(df): #Extract the maximum and minimum values for features P and A, and add them as additional features.\n        cols = [col for col in df.columns if col[-1] in (\"P\", \"A\")]\n\n        expr_max = [pl.max(col).alias(f\"max_{col}\") for col in cols]\n        expr_min = [pl.min(col).alias(f\"min_{col}\") for col in cols]\n        expr_std = [pl.std(col).alias(f\"std_{col}\") for col in cols]\n        expr_mean = [pl.mean(col).alias(f\"meam_{col}\") for col in cols]\n\n        return expr_max, expr_min, expr_mean, expr_std\n\n    @staticmethod\n    def date_expr(df): #Extract the maximum and minimum values for features D, and add them as additional features.\n        cols = [col for col in df.columns if col[-1] in (\"D\",)]\n\n        expr_max = [pl.max(col).alias(f\"max_{col}\") for col in cols]\n        expr_min = [pl.min(col).alias(f\"min_{col}\") for col in cols]\n        expr_std = [pl.std(col).alias(f\"std_{col}\") for col in cols]\n        expr_mean = [pl.mean(col).alias(f\"meam_{col}\") for col in cols]\n\n        return expr_max, expr_min, expr_mean, expr_std\n\n\n    @staticmethod\n    def str_expr(df): #Extract the maximum and minimum values for features M, and add them as additional features.\n        cols = [col for col in df.columns if col[-1] in (\"M\",)]\n        \n        expr_max = [pl.max(col).alias(f\"max_{col}\") for col in cols]\n        expr_min = [pl.min(col).alias(f\"min_{col}\") for col in cols]\n        expr_std = [pl.std(col).alias(f\"std_{col}\") for col in cols]\n        expr_mean = [pl.mean(col).alias(f\"meam_{col}\") for col in cols]\n\n\n        return expr_max, expr_min, expr_mean, expr_std\n\n\n    @staticmethod\n    def other_expr(df): #Extract the maximum and minimum values for features T and L, and add them as additional features.\n        cols = [col for col in df.columns if col[-1] in (\"T\", \"L\")]\n        \n        expr_max = [pl.max(col).alias(f\"max_{col}\") for col in cols]\n        expr_min = [pl.min(col).alias(f\"min_{col}\") for col in cols]\n        expr_std = [pl.std(col).alias(f\"std_{col}\") for col in cols]\n        expr_mean = [pl.mean(col).alias(f\"meam_{col}\") for col in cols]\n\n\n        return expr_max, expr_min, expr_mean, expr_std\n\n    \n    @staticmethod\n    def count_expr(df): #Extract the maximum and minimum values for each num_group and add them as additional features.\n        cols = [col for col in df.columns if \"num_group\" in col]\n\n        expr_max = [pl.max(col).alias(f\"max_{col}\") for col in cols]\n        expr_min = [pl.min(col).alias(f\"min_{col}\") for col in cols]\n        expr_std = [pl.std(col).alias(f\"std_{col}\") for col in cols]\n        expr_mean = [pl.mean(col).alias(f\"meam_{col}\") for col in cols]\n\n        return expr_max, expr_min, expr_mean, expr_std\n\n    @staticmethod\n    def get_exprs(df): #Execute the above function and return the result.\n        maxexprs = Aggregator.num_expr(df)[0] + \\\n                Aggregator.date_expr(df)[0] + \\\n                Aggregator.str_expr(df)[0] + \\\n                Aggregator.other_expr(df)[0] + \\\n                Aggregator.count_expr(df)[0]\n        \n        minexprs = Aggregator.num_expr(df)[1] + \\\n                Aggregator.date_expr(df)[1] + \\\n                Aggregator.str_expr(df)[1] + \\\n                Aggregator.other_expr(df)[1] + \\\n                Aggregator.count_expr(df)[1]\n        \n        stdexprs = Aggregator.num_expr(df)[2] + \\\n                Aggregator.date_expr(df)[2] + \\\n                Aggregator.str_expr(df)[2] + \\\n                Aggregator.other_expr(df)[2] + \\\n                Aggregator.count_expr(df)[2]\n        \n        meanexprs = Aggregator.num_expr(df)[3] + \\\n                Aggregator.date_expr(df)[3] + \\\n                Aggregator.str_expr(df)[3] + \\\n                Aggregator.other_expr(df)[3] + \\\n                Aggregator.count_expr(df)[3]\n\n\n        return maxexprs, minexprs, stdexprs, meanexprs","metadata":{"_uuid":"68a46e65-e6a1-4f9b-9341-cf78c7019bb9","_cell_guid":"ccbdfe54-4f97-41f5-98c9-348db2c98d3a","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:11.896963Z","iopub.execute_input":"2024-03-31T04:04:11.897606Z","iopub.status.idle":"2024-03-31T04:04:11.928556Z","shell.execute_reply.started":"2024-03-31T04:04:11.897559Z","shell.execute_reply":"2024-03-31T04:04:11.927010Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# File I/O","metadata":{"_uuid":"7a9e84b5-d577-4c89-83dd-30b65ef804e0","_cell_guid":"31e9148b-d0b6-469e-9611-ce5eaf3d312b","trusted":true}},{"cell_type":"code","source":"def read_file(path, depth=None): \n    df = pl.read_parquet(path)\n    df = df.pipe(Pipeline.set_table_dtypes)\n    \n    if depth in [1, 2]:\n        maxexprs, minexprs, stdexprs, meanexprs = Aggregator.get_exprs(df)\n        df = df.group_by(\"case_id\").agg(*maxexprs, *minexprs, *stdexprs, *meanexprs)\n    \n    return df\n\ndef read_files(regex_path, depth=None):\n    chunks = []\n    for path in glob(str(regex_path)):\n        chunks.append(pl.read_parquet(path).pipe(Pipeline.set_table_dtypes))\n        \n    df = pl.concat(chunks, how=\"vertical_relaxed\")\n    if depth in [1, 2]:\n        maxexprs, minexprs, stdexprs, meanexprs = Aggregator.get_exprs(df)\n        df = df.group_by(\"case_id\").agg(*maxexprs, *minexprs, *stdexprs, *meanexprs)\n    \n    return df","metadata":{"_uuid":"8b6c4a9c-2459-4e46-8772-d3a1004a337b","_cell_guid":"7defbb8d-f262-462a-af0b-c1635c95963c","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:12.360543Z","iopub.execute_input":"2024-03-31T04:04:12.360910Z","iopub.status.idle":"2024-03-31T04:04:12.369132Z","shell.execute_reply.started":"2024-03-31T04:04:12.360882Z","shell.execute_reply":"2024-03-31T04:04:12.368004Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature Engineering","metadata":{"_uuid":"9a3d4e45-f202-4500-a842-bb10e9736a92","_cell_guid":"4630245c-dd40-454b-a844-a284c54d9af8","trusted":true}},{"cell_type":"code","source":"def feature_eng(df_base, depth_0, depth_1, depth_2):\n    df_base = (\n        df_base\n        .with_columns(\n            month_decision = pl.col(\"date_decision\").dt.month(),\n            weekday_decision = pl.col(\"date_decision\").dt.weekday(),\n        )\n    )\n        \n    for i, df in enumerate(depth_0 + depth_1 + depth_2):\n        df_base = df_base.join(df, how=\"left\", on=\"case_id\", suffix=f\"_{i}\")\n        \n    df_base = df_base.pipe(Pipeline.handle_dates)\n    \n    return df_base","metadata":{"_uuid":"ab52754d-374e-4c53-bea5-57988f9eafdb","_cell_guid":"2140daed-b672-4ecf-b312-0a9ac25f17cd","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:12.697796Z","iopub.execute_input":"2024-03-31T04:04:12.698159Z","iopub.status.idle":"2024-03-31T04:04:12.704474Z","shell.execute_reply.started":"2024-03-31T04:04:12.698131Z","shell.execute_reply":"2024-03-31T04:04:12.703457Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def to_pandas(df_data, cat_cols=None):\n    df_data = df_data.to_pandas()\n    \n    if cat_cols is None:\n        cat_cols = list(df_data.select_dtypes(\"object\").columns)\n    \n    df_data[cat_cols] = df_data[cat_cols].astype(\"category\")\n    \n    return df_data, cat_cols","metadata":{"_uuid":"affe084c-738f-47a7-8dd1-2f85ec9697e4","_cell_guid":"9a96a357-b567-45d6-a54c-e79422017563","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:12.855788Z","iopub.execute_input":"2024-03-31T04:04:12.856137Z","iopub.status.idle":"2024-03-31T04:04:12.861412Z","shell.execute_reply.started":"2024-03-31T04:04:12.856110Z","shell.execute_reply":"2024-03-31T04:04:12.860511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Configuration","metadata":{"_uuid":"d98d07a1-72d7-4c42-aa7c-02e2c1b9ae55","_cell_guid":"42bc860e-b109-4b7f-9829-9264155d4a8c","trusted":true}},{"cell_type":"code","source":"# sample = pd.read_csv(\"home-credit-credit-risk-model-stability/sample_submission.csv\")\nsample = pd.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/sample_submission.csv\")\nDRY_RUN = False # True if sample.shape[0] == 10 else False\nPRESETS = \"optimize_for_deployment\" #\"best_quality\", \"high_quality\", \"good_quality\", \"medium_quality\", \"optimize_for_deployment\"","metadata":{"_uuid":"5c306ae8-8ffd-4c8d-a59c-aefb6e53db25","_cell_guid":"a2620c7b-7c1d-4737-ae70-17fc18811a5e","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:13.157289Z","iopub.execute_input":"2024-03-31T04:04:13.158115Z","iopub.status.idle":"2024-03-31T04:04:13.171543Z","shell.execute_reply.started":"2024-03-31T04:04:13.158071Z","shell.execute_reply":"2024-03-31T04:04:13.170776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ROOT            = Path(\"home-credit-credit-risk-model-stability\")\nROOT            = Path(\"/kaggle/input/home-credit-credit-risk-model-stability\")\nTRAIN_DIR       = ROOT / \"parquet_files\" / \"train\"\nTEST_DIR        = ROOT / \"parquet_files\" / \"test\"\nEXPERIMENT_NAME = \"CNT_Encoding\"","metadata":{"_uuid":"bccc8f44-f7bc-4c87-a733-6e4684c1baa3","_cell_guid":"b69d1493-24cc-470b-81a7-e919d1eb497c","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:13.804238Z","iopub.execute_input":"2024-03-31T04:04:13.804697Z","iopub.status.idle":"2024-03-31T04:04:13.809408Z","shell.execute_reply.started":"2024-03-31T04:04:13.804668Z","shell.execute_reply":"2024-03-31T04:04:13.808511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Train Files Read & Feature Engineering","metadata":{"_uuid":"cf5471ef-196b-4809-8517-196501ee29a1","_cell_guid":"7cdf005d-8bac-43dc-8b49-d566a7d71a6c","trusted":true}},{"cell_type":"code","source":"data_store = {\n    \"df_base\": read_file(TRAIN_DIR / \"train_base.parquet\"),\n    \"depth_0\": [\n        read_file(TRAIN_DIR / \"train_static_cb_0.parquet\"),\n        read_files(TRAIN_DIR / \"train_static_0_*.parquet\"),\n    ],\n    \"depth_1\": [\n        read_files(TRAIN_DIR / \"train_applprev_1_*.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_tax_registry_a_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_tax_registry_b_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_tax_registry_c_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_credit_bureau_b_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_other_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_person_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_deposit_1.parquet\", 1),\n        read_file(TRAIN_DIR / \"train_debitcard_1.parquet\", 1),\n    ],\n    \"depth_2\": [\n        read_file(TRAIN_DIR / \"train_credit_bureau_b_2.parquet\", 2),\n    ]\n}","metadata":{"_uuid":"59a6b585-eec1-4536-a8be-8957ca05e2c6","_cell_guid":"70b834e4-abad-4384-b0aa-9fcc7eb4814a","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:14.707359Z","iopub.execute_input":"2024-03-31T04:04:14.707798Z","iopub.status.idle":"2024-03-31T04:04:57.811452Z","shell.execute_reply.started":"2024-03-31T04:04:14.707758Z","shell.execute_reply":"2024-03-31T04:04:57.810520Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = feature_eng(**data_store)\n\nprint(\"train data shape:\\t\", df_train.shape)\ndel data_store\ngc.collect()","metadata":{"_uuid":"8e01c70b-62ce-48c1-894a-ab97a8504254","_cell_guid":"3a25580f-7ce3-4109-85ce-a07f743a517a","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:04:57.813042Z","iopub.execute_input":"2024-03-31T04:04:57.813362Z","iopub.status.idle":"2024-03-31T04:05:13.439661Z","shell.execute_reply.started":"2024-03-31T04:04:57.813338Z","shell.execute_reply":"2024-03-31T04:05:13.438698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature Elimination","metadata":{"_uuid":"8e60f1d6-8d2b-46c5-b404-5953ecf0e8d8","_cell_guid":"4ab8b1e9-3c34-4651-b962-02a5f952b08b","trusted":true}},{"cell_type":"code","source":"# drop_cols = ['assignmentdate_238D',\n#  'assignmentdate_4527235D',\n#  'birthdate_574D',\n#  'dateofbirth_342D',\n#  'for3years_128L',\n#  'for3years_504L',\n#  'for3years_584L',\n#  'formonth_118L',\n#  'formonth_206L',\n#  'formonth_535L',\n#  'forquarter_1017L',\n#  'forquarter_462L',\n#  'forquarter_634L',\n#  'fortoday_1092L',\n#  'forweek_1077L',\n#  'forweek_528L',\n#  'forweek_601L',\n#  'foryear_618L',\n#  'foryear_818L',\n#  'foryear_850L',\n#  'pmtaverage_3A',\n#  'pmtaverage_4527227A',\n#  'pmtcount_4527229L',\n#  'pmtcount_693L',\n#  'pmtscount_423L',\n#  'pmtssum_45A',\n#  'requesttype_4525192L',\n#  'responsedate_1012D',\n#  'responsedate_4527233D',\n#  'riskassesment_302T',\n#  'riskassesment_940T',\n#  'cardtype_51L',\n#  'clientscnt_136L',\n#  'equalityempfrom_62L',\n#  'inittransactionamount_650A',\n#  'interestrategrace_34L',\n#  'lastdependentsnum_448L',\n#  'lastotherinc_902A',\n#  'lastotherlnsexpense_631A',\n#  'lastrepayingdate_696D',\n#  'maxannuity_4075009A',\n#  'validfrom_1069D',\n#  'meam_cancelreason_3545846M',\n#  'meam_district_544M',\n#  'meam_education_1138M',\n#  'meam_postype_4733339M',\n#  'meam_profession_152M',\n#  'meam_rejectreason_755M',\n#  'meam_rejectreasonclient_4145042M',\n#  'meam_credacc_status_367L',\n#  'meam_credtype_587L',\n#  'meam_familystate_726L',\n#  'meam_inittransactioncode_279L',\n#  'meam_status_219L',\n#  'std_approvaldate_319D',\n#  'std_creationdate_885D',\n#  'std_dateactivated_425D',\n#  'std_dtlastpmt_581D',\n#  'std_dtlastpmtallstes_3545839D',\n#  'std_employedfrom_700D',\n#  'std_firstnonzeroinstldate_307D',\n#  'std_cancelreason_3545846M',\n#  'std_district_544M',\n#  'std_education_1138M',\n#  'std_postype_4733339M',\n#  'std_profession_152M',\n#  'std_rejectreason_755M',\n#  'std_rejectreasonclient_4145042M',\n#  'std_credacc_status_367L',\n#  'std_credtype_587L',\n#  'std_familystate_726L',\n#  'std_inittransactioncode_279L',\n#  'std_status_219L',\n#  'max_amount_4527230A',\n#  'max_recorddate_4527225D',\n#  'max_name_4527232M',\n#  'max_num_group1_3',\n#  'min_amount_4527230A',\n#  'min_recorddate_4527225D',\n#  'min_name_4527232M',\n#  'min_num_group1_3',\n#  'meam_amount_4527230A',\n#  'meam_recorddate_4527225D',\n#  'meam_name_4527232M',\n#  'meam_num_group1_3',\n#  'std_amount_4527230A',\n#  'std_recorddate_4527225D',\n#  'std_name_4527232M',\n#  'std_num_group1_3',\n#  'meam_name_4917606M',\n#  'std_deductiondate_4917603D',\n#  'std_name_4917606M',\n#  'max_pmtamount_36A',\n#  'max_processingdate_168D',\n#  'max_employername_160M',\n#  'max_num_group1_5',\n#  'min_pmtamount_36A',\n#  'min_processingdate_168D',\n#  'min_employername_160M',\n#  'min_num_group1_5',\n#  'meam_pmtamount_36A',\n#  'meam_processingdate_168D',\n#  'meam_employername_160M',\n#  'meam_num_group1_5',\n#  'std_pmtamount_36A',\n#  'std_processingdate_168D',\n#  'std_employername_160M',\n#  'std_num_group1_5',\n#  'max_amount_1115A',\n#  'max_credlmt_1052A',\n#  'max_credlmt_228A',\n#  'max_credlmt_3940954A',\n#  'max_debtpastduevalue_732A',\n#  'max_debtvalue_227A',\n#  'max_dpd_550P',\n#  'max_dpd_733P',\n#  'max_dpdmax_851P',\n#  'max_installmentamount_644A',\n#  'max_installmentamount_833A',\n#  'max_instlamount_892A',\n#  'max_maxdebtpduevalodued_3940955A',\n#  'max_overdueamountmax_950A',\n#  'max_pmtdaysoverdue_1135P',\n#  'max_residualamount_1093A',\n#  'max_residualamount_127A',\n#  'max_residualamount_3940956A',\n#  'max_totalamount_503A',\n#  'max_totalamount_881A',\n#  'max_contractdate_551D',\n#  'max_contractmaturitydate_151D',\n#  'max_lastupdate_260D',\n#  'max_classificationofcontr_1114M',\n#  'max_contractst_516M',\n#  'max_contracttype_653M',\n#  'max_credor_3940957M',\n#  'max_periodicityofpmts_997M',\n#  'max_pmtmethod_731M',\n#  'max_purposeofcred_722M',\n#  'max_subjectrole_326M',\n#  'max_subjectrole_43M',\n#  'max_credquantity_1099L',\n#  'max_credquantity_984L',\n#  'max_dpdmaxdatemonth_804T',\n#  'max_dpdmaxdateyear_742T',\n#  'max_interesteffectiverate_369L',\n#  'max_interestrateyearly_538L',\n#  'max_numberofinstls_810L',\n#  'max_overdueamountmaxdatemonth_494T',\n#  'max_overdueamountmaxdateyear_432T',\n#  'max_periodicityofpmts_997L',\n#  'max_pmtnumpending_403L',\n#  'max_num_group1_6',\n#  'min_amount_1115A',\n#  'min_credlmt_1052A',\n#  'min_credlmt_228A',\n#  'min_credlmt_3940954A',\n#  'min_debtpastduevalue_732A',\n#  'min_debtvalue_227A',\n#  'min_dpd_550P',\n#  'min_dpd_733P',\n#  'min_dpdmax_851P',\n#  'min_installmentamount_644A',\n#  'min_installmentamount_833A',\n#  'min_instlamount_892A',\n#  'min_maxdebtpduevalodued_3940955A',\n#  'min_overdueamountmax_950A',\n#  'min_pmtdaysoverdue_1135P',\n#  'min_residualamount_1093A',\n#  'min_residualamount_127A',\n#  'min_residualamount_3940956A',\n#  'min_totalamount_503A',\n#  'min_totalamount_881A',\n#  'min_contractdate_551D',\n#  'min_contractmaturitydate_151D',\n#  'min_lastupdate_260D',\n#  'min_classificationofcontr_1114M',\n#  'min_contractst_516M',\n#  'min_contracttype_653M',\n#  'min_credor_3940957M',\n#  'min_periodicityofpmts_997M',\n#  'min_pmtmethod_731M',\n#  'min_purposeofcred_722M',\n#  'min_subjectrole_326M',\n#  'min_subjectrole_43M',\n#  'min_credquantity_1099L',\n#  'min_credquantity_984L',\n#  'min_dpdmaxdatemonth_804T',\n#  'min_dpdmaxdateyear_742T',\n#  'min_interesteffectiverate_369L',\n#  'min_interestrateyearly_538L',\n#  'min_numberofinstls_810L',\n#  'min_overdueamountmaxdatemonth_494T',\n#  'min_overdueamountmaxdateyear_432T',\n#  'min_periodicityofpmts_997L',\n#  'min_pmtnumpending_403L',\n#  'min_num_group1_6',\n#  'meam_amount_1115A',\n#  'meam_credlmt_1052A',\n#  'meam_credlmt_228A',\n#  'meam_credlmt_3940954A',\n#  'meam_debtpastduevalue_732A',\n#  'meam_debtvalue_227A',\n#  'meam_dpd_550P',\n#  'meam_dpd_733P',\n#  'meam_dpdmax_851P',\n#  'meam_installmentamount_644A',\n#  'meam_installmentamount_833A',\n#  'meam_instlamount_892A',\n#  'meam_maxdebtpduevalodued_3940955A',\n#  'meam_overdueamountmax_950A',\n#  'meam_pmtdaysoverdue_1135P',\n#  'meam_residualamount_1093A',\n#  'meam_residualamount_127A',\n#  'meam_residualamount_3940956A',\n#  'meam_totalamount_503A',\n#  'meam_totalamount_881A',\n#  'meam_contractdate_551D',\n#  'meam_contractmaturitydate_151D',\n#  'meam_lastupdate_260D',\n#  'meam_classificationofcontr_1114M',\n#  'meam_contractst_516M',\n#  'meam_contracttype_653M',\n#  'meam_credor_3940957M',\n#  'meam_periodicityofpmts_997M',\n#  'meam_pmtmethod_731M',\n#  'meam_purposeofcred_722M',\n#  'meam_subjectrole_326M',\n#  'meam_subjectrole_43M',\n#  'meam_credquantity_1099L',\n#  'meam_credquantity_984L',\n#  'meam_dpdmaxdatemonth_804T',\n#  'meam_dpdmaxdateyear_742T',\n#  'meam_interesteffectiverate_369L',\n#  'meam_interestrateyearly_538L',\n#  'meam_numberofinstls_810L',\n#  'meam_overdueamountmaxdatemonth_494T',\n#  'meam_overdueamountmaxdateyear_432T',\n#  'meam_periodicityofpmts_997L',\n#  'meam_pmtnumpending_403L',\n#  'meam_num_group1_6',\n#  'std_amount_1115A',\n#  'std_credlmt_1052A',\n#  'std_credlmt_228A',\n#  'std_credlmt_3940954A',\n#  'std_debtpastduevalue_732A',\n#  'std_debtvalue_227A',\n#  'std_dpd_550P',\n#  'std_dpd_733P',\n#  'std_dpdmax_851P',\n#  'std_installmentamount_644A',\n#  'std_installmentamount_833A',\n#  'std_instlamount_892A',\n#  'std_maxdebtpduevalodued_3940955A',\n#  'std_overdueamountmax_950A',\n#  'std_pmtdaysoverdue_1135P',\n#  'std_residualamount_1093A',\n#  'std_residualamount_127A',\n#  'std_residualamount_3940956A',\n#  'std_totalamount_503A',\n#  'std_totalamount_881A',\n#  'std_contractdate_551D',\n#  'std_contractmaturitydate_151D',\n#  'std_lastupdate_260D',\n#  'std_classificationofcontr_1114M',\n#  'std_contractst_516M',\n#  'std_contracttype_653M',\n#  'std_credor_3940957M',\n#  'std_periodicityofpmts_997M',\n#  'std_pmtmethod_731M',\n#  'std_purposeofcred_722M',\n#  'std_subjectrole_326M',\n#  'std_subjectrole_43M',\n#  'std_credquantity_1099L',\n#  'std_credquantity_984L',\n#  'std_dpdmaxdatemonth_804T',\n#  'std_dpdmaxdateyear_742T',\n#  'std_interesteffectiverate_369L',\n#  'std_interestrateyearly_538L',\n#  'std_numberofinstls_810L',\n#  'std_overdueamountmaxdatemonth_494T',\n#  'std_overdueamountmaxdateyear_432T',\n#  'std_periodicityofpmts_997L',\n#  'std_pmtnumpending_403L',\n#  'std_num_group1_6',\n#  'std_amtdebitincoming_4809443A',\n#  'std_amtdebitoutgoing_4809440A',\n#  'std_amtdepositbalance_4809441A',\n#  'std_amtdepositincoming_4809444A',\n#  'std_amtdepositoutgoing_4809442A',\n#  'std_num_group1_7',\n#  'max_empl_employedtotal_800L',\n#  'max_empl_industry_691L',\n#  'min_empl_employedtotal_800L',\n#  'min_empl_industry_691L',\n#  'meam_contaddr_district_15M',\n#  'meam_contaddr_zipcode_807M',\n#  'meam_education_927M',\n#  'meam_empladdr_district_926M',\n#  'meam_empladdr_zipcode_114M',\n#  'meam_language1_981M',\n#  'meam_registaddr_district_1083M',\n#  'meam_registaddr_zipcode_184M',\n#  'meam_empl_employedtotal_800L',\n#  'meam_empl_industry_691L',\n#  'meam_familystate_447L',\n#  'meam_gender_992L',\n#  'meam_housetype_905L',\n#  'meam_housingtype_772L',\n#  'meam_incometype_1044T',\n#  'meam_maritalst_703L',\n#  'meam_relationshiptoclient_415T',\n#  'meam_relationshiptoclient_642T',\n#  'meam_role_1084L',\n#  'meam_role_993L',\n#  'meam_sex_738L',\n#  'meam_type_25L',\n#  'std_mainoccupationinc_384A',\n#  'std_birth_259D',\n#  'std_birthdate_87D',\n#  'std_empl_employedfrom_271D',\n#  'std_contaddr_district_15M',\n#  'std_contaddr_zipcode_807M',\n#  'std_education_927M',\n#  'std_empladdr_district_926M',\n#  'std_empladdr_zipcode_114M',\n#  'std_language1_981M',\n#  'std_registaddr_district_1083M',\n#  'std_registaddr_zipcode_184M',\n#  'std_childnum_185L',\n#  'std_contaddr_matchlist_1032L',\n#  'std_contaddr_smempladdr_334L',\n#  'std_empl_employedtotal_800L',\n#  'std_empl_industry_691L',\n#  'std_familystate_447L',\n#  'std_gender_992L',\n#  'std_housetype_905L',\n#  'std_housingtype_772L',\n#  'std_incometype_1044T',\n#  'std_maritalst_703L',\n#  'std_relationshiptoclient_415T',\n#  'std_relationshiptoclient_642T',\n#  'std_remitter_829L',\n#  'std_role_1084L',\n#  'std_role_993L',\n#  'std_safeguarantyflag_411L',\n#  'std_sex_738L',\n#  'std_type_25L',\n#  'max_amount_416A',\n#  'max_contractenddate_991D',\n#  'max_openingdate_313D',\n#  'max_num_group1_9',\n#  'min_amount_416A',\n#  'min_contractenddate_991D',\n#  'min_openingdate_313D',\n#  'min_num_group1_9',\n#  'meam_amount_416A',\n#  'meam_contractenddate_991D',\n#  'meam_openingdate_313D',\n#  'meam_num_group1_9',\n#  'std_amount_416A',\n#  'std_contractenddate_991D',\n#  'std_openingdate_313D',\n#  'std_num_group1_9',\n#  'max_last180dayaveragebalance_704A',\n#  'max_last180dayturnover_1134A',\n#  'max_last30dayturnover_651A',\n#  'max_openingdate_857D',\n#  'max_num_group1_10',\n#  'min_last180dayaveragebalance_704A',\n#  'min_last180dayturnover_1134A',\n#  'min_last30dayturnover_651A',\n#  'min_openingdate_857D',\n#  'min_num_group1_10',\n#  'meam_last180dayaveragebalance_704A',\n#  'meam_last180dayturnover_1134A',\n#  'meam_last30dayturnover_651A',\n#  'meam_openingdate_857D',\n#  'meam_num_group1_10',\n#  'std_last180dayaveragebalance_704A',\n#  'std_last180dayturnover_1134A',\n#  'std_last30dayturnover_651A',\n#  'std_openingdate_857D',\n#  'std_num_group1_10',\n#  'max_pmts_dpdvalue_108P',\n#  'max_pmts_pmtsoverdue_635A',\n#  'max_pmts_date_1107D',\n#  'max_num_group1_11',\n#  'max_num_group2',\n#  'min_pmts_dpdvalue_108P',\n#  'min_pmts_pmtsoverdue_635A',\n#  'min_pmts_date_1107D',\n#  'min_num_group1_11',\n#  'min_num_group2',\n#  'meam_pmts_dpdvalue_108P',\n#  'meam_pmts_pmtsoverdue_635A',\n#  'meam_pmts_date_1107D',\n#  'meam_num_group1_11',\n#  'meam_num_group2',\n#  'std_pmts_dpdvalue_108P',\n#  'std_pmts_pmtsoverdue_635A',\n#  'std_pmts_date_1107D',\n#  'std_num_group1_11',\n#  'std_num_group2']","metadata":{"execution":{"iopub.status.busy":"2024-03-31T04:05:19.046107Z","iopub.execute_input":"2024-03-31T04:05:19.046437Z","iopub.status.idle":"2024-03-31T04:05:19.074537Z","shell.execute_reply.started":"2024-03-31T04:05:19.046411Z","shell.execute_reply":"2024-03-31T04:05:19.073528Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n# df_train = df_train.drop(drop_cols)\ndf_train = df_train.pipe(Pipeline.filter_cols)\nprint(\"train data shape:\\t\", df_train.shape)","metadata":{"_uuid":"f9a8d3d9-0f63-4a5f-865f-7473e99560e0","_cell_guid":"16cedd3e-ab9e-4e7e-ab90-6c1ea79ece68","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:05:23.824317Z","iopub.execute_input":"2024-03-31T04:05:23.824986Z","iopub.status.idle":"2024-03-31T04:05:27.146200Z","shell.execute_reply.started":"2024-03-31T04:05:23.824955Z","shell.execute_reply":"2024-03-31T04:05:27.145277Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# CountEncoding","metadata":{"_uuid":"5a7a4839-90a0-4ebb-9805-8cdc64657052","_cell_guid":"50a6597c-6760-4696-b8e0-02669db07a5f","trusted":true}},{"cell_type":"code","source":"cnt_encoding_cols = df_train.select(pl.selectors.by_dtype([pl.String])).columns\n\nmappings = {}\nfor col in cnt_encoding_cols:\n    mappings[col] = df_train.group_by(col).len()\n\ndf_train_lazy = df_train.select(mappings.keys()).lazy()\n# df_train_lazy = pl.LazyFrame(df_train.select('case_id'))\n\nfor col, mapping in mappings.items():\n    remapping = {category: count for category, count in mapping.rows()}\n    remapping[None] = -2\n    expr = pl.col(col).replace(\n                remapping,\n                default=-1,\n            )\n    df_train_lazy = df_train_lazy.with_columns(expr.alias(col + '_cnt'))\n    del col, mapping, remapping\n    gc.collect()\n\ndel mappings\ntransformed_train = df_train_lazy.collect()\n\ndf_train = pl.concat([df_train, transformed_train.select(\"^*cnt$\")], how='horizontal')\ndel transformed_train, cnt_encoding_cols\ngc.collect()","metadata":{"_uuid":"6bc1fac6-2213-45f1-b47b-1187a3a4f09f","_cell_guid":"9a85834f-8f6e-48c5-b216-d3a9c44437ae","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:05:30.310210Z","iopub.execute_input":"2024-03-31T04:05:30.310564Z","iopub.status.idle":"2024-03-31T04:05:43.461075Z","shell.execute_reply.started":"2024-03-31T04:05:30.310538Z","shell.execute_reply":"2024-03-31T04:05:43.458798Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pandas Conversion","metadata":{"_uuid":"efb10be3-cac8-4906-97c7-ab7eeedc1d7d","_cell_guid":"877d2676-b891-434c-808c-ebd6d959bb95","trusted":true}},{"cell_type":"code","source":"df_train, cat_cols = to_pandas(df_train)","metadata":{"_uuid":"811fe30c-49a0-4bfb-888c-b376b2b91952","_cell_guid":"66895692-1290-482a-b427-fd1db7aa5a7e","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:05:43.462899Z","iopub.execute_input":"2024-03-31T04:05:43.463310Z","iopub.status.idle":"2024-03-31T04:06:05.415658Z","shell.execute_reply.started":"2024-03-31T04:05:43.463269Z","shell.execute_reply":"2024-03-31T04:06:05.414812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(df_train.shape)\ndf_train.head()","metadata":{"_uuid":"9cc6a4b7-63c5-40a0-8b14-048a8f088fd9","_cell_guid":"3aabcdc7-38aa-4206-9496-79d2cfceccae","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:06:05.417380Z","iopub.execute_input":"2024-03-31T04:06:05.417752Z","iopub.status.idle":"2024-03-31T04:06:05.446289Z","shell.execute_reply.started":"2024-03-31T04:06:05.417718Z","shell.execute_reply":"2024-03-31T04:06:05.445362Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Garbage Collection","metadata":{"_uuid":"24acd853-1eab-4102-9b0e-6e59ad7e57a5","_cell_guid":"abf1c898-3cf2-4ebd-8575-e28bb44567ff","trusted":true}},{"cell_type":"code","source":"def reduce_mem_usage(df):\n    \"\"\" iterate through all the columns of a dataframe and modify the data type\n        to reduce memory usage.        \n    \"\"\"\n    start_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n    \n    for col in df.columns:\n        col_type = df[col].dtype\n        if str(col_type)==\"category\":\n            continue\n        \n        if col_type != object:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == 'int':\n                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)  \n            else:\n                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                    df[col] = df[col].astype(np.float16)\n                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)\n        else:\n            df[col] = df[col].astype('category')\n    end_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n    \n    return df","metadata":{"_uuid":"f067fe7c-980e-4723-9adc-37caa3306c1d","_cell_guid":"1bd49d36-bb97-4a64-bacc-86e634df4f62","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:06:08.976325Z","iopub.execute_input":"2024-03-31T04:06:08.976689Z","iopub.status.idle":"2024-03-31T04:06:08.991188Z","shell.execute_reply.started":"2024-03-31T04:06:08.976664Z","shell.execute_reply":"2024-03-31T04:06:08.990197Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = reduce_mem_usage(df_train)\n\ngc.collect()","metadata":{"_uuid":"f025acd8-7b01-461c-aa2e-20f9b6160cf2","_cell_guid":"271ced04-b9c5-4f61-b76c-cd3deb4d742c","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:06:09.419293Z","iopub.execute_input":"2024-03-31T04:06:09.420276Z","iopub.status.idle":"2024-03-31T04:06:17.053821Z","shell.execute_reply.started":"2024-03-31T04:06:09.420232Z","shell.execute_reply":"2024-03-31T04:06:17.052929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training","metadata":{"_uuid":"8553d3bd-d38e-4a82-aa36-d3fc6efd1feb","_cell_guid":"2c7d4e90-9880-44df-9063-9d81585d2a09","trusted":true}},{"cell_type":"code","source":"if DRY_RUN:\n    print(f\"df_train.shape : {df_train.shape} --> \", end=\"\")\n    df_train = df_train.iloc[:1000]\n    print( df_train.shape )","metadata":{"_uuid":"2ef6e88c-89ef-4e28-83b8-de47c49d9b2f","_cell_guid":"a2faf417-30a3-46f0-a004-5e9468dcaf2c","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:06:20.805574Z","iopub.execute_input":"2024-03-31T04:06:20.805910Z","iopub.status.idle":"2024-03-31T04:06:20.810641Z","shell.execute_reply.started":"2024-03-31T04:06:20.805884Z","shell.execute_reply":"2024-03-31T04:06:20.809625Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"weeks = df_train[\"WEEK_NUM\"]\ndf_train = df_train.drop(\n    columns=[\"case_id\", \"WEEK_NUM\"])","metadata":{"_uuid":"46764b2c-b82f-4bdd-87a7-ea5fec9bf052","_cell_guid":"1010b432-4207-4bf7-bdf9-7e210de4e12a","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:07:03.122633Z","iopub.execute_input":"2024-03-31T04:07:03.123314Z","iopub.status.idle":"2024-03-31T04:07:04.750126Z","shell.execute_reply.started":"2024-03-31T04:07:03.123281Z","shell.execute_reply":"2024-03-31T04:07:04.749159Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hyperparameters = {\n#     'GBM': {\n#         'enable_categorical': True,\n#         'eval_metric': 'auc',\n#         'subsample': 1,\n#         'colsample_bytree': 1,\n#         'min_child_weight': 1,\n#         'max_depth': 10,\n#         'gamma': 0.7,\n#         'reg_alpha' :0.7,\n#         # \"device\": \"gpu\",\n#         'random_state': 42,\n#     }\n# }","metadata":{"_uuid":"a1a77489-3ed2-4a1f-bc40-b37edb6eff2d","_cell_guid":"8e155bcd-b9d0-4a24-948a-b6dd7138e882","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:07:05.415143Z","iopub.execute_input":"2024-03-31T04:07:05.416001Z","iopub.status.idle":"2024-03-31T04:07:05.420516Z","shell.execute_reply.started":"2024-03-31T04:07:05.415965Z","shell.execute_reply":"2024-03-31T04:07:05.419524Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cv = StratifiedGroupKFold(n_splits=5, shuffle=False)\nfor i, (idx_train, idx_valid) in enumerate(cv.split(df_train, df_train[\"target\"], groups=weeks)):\n    fold_train = df_train.iloc[idx_train]\n    fold_valid = df_train.iloc[idx_valid]\n    gc.collect()\n    \n    train_data = TabularDataset(fold_train)\n    valid_data = TabularDataset(fold_valid)\n    del fold_train, fold_valid\n    \n    predictor = TabularPredictor(\n    label=\"target\",\n    problem_type=\"binary\",\n    eval_metric=\"roc_auc\",\n    path=f\"autoglueon/{EXPERIMENT_NAME}\",\n    \n    )\n\n    predictor.fit(\n    train_data,\n    tuning_data=valid_data,\n    save_space=True,\n    presets=PRESETS,\n    # use_bag_holdout=True,\n    time_limit=18000,\n    # hyperparameters=hyperparameters\n    )\n    del train_data, valid_data, predictor\n    gc.collect()\n    break","metadata":{"_uuid":"a9dfc36c-b755-465e-8a9a-58dc10877e5c","_cell_guid":"45f3d02a-9bb8-4bf3-991d-2a4514eff267","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-03-31T04:07:05.844806Z","iopub.execute_input":"2024-03-31T04:07:05.845162Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Training Result","metadata":{"_uuid":"6bcc97a9-ade3-4d12-8772-4f6883195728","_cell_guid":"719fe0bd-de81-4b3d-9af1-959f5b7285ef","trusted":true}},{"cell_type":"code","source":"predictor = TabularPredictor.load(f\"/kaggle/working/autoglueon/{EXPERIMENT_NAME}\")\npredictor.leaderboard()","metadata":{"_uuid":"7e32d9e4-7171-4293-8a83-204967e6639d","_cell_guid":"6bf8d438-21c1-43f0-a723-874b4692e5db","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_lb = predictor.leaderboard()\nfrom matplotlib import pyplot as plt\nplt.scatter( df_lb[\"score_val\"], df_lb[\"model\"] )\nplt.grid()\nplt.xlabel(\"CV(roc_auc)\")\nplt.ylabel(\"Model name\")\nplt.show()","metadata":{"_uuid":"7abb88a1-3013-48f1-af49-8355afebc48d","_cell_guid":"60288464-1f37-454d-89dc-f62766c88e97","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"execution_count":null,"outputs":[]}]}