{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","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"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":50160,"databundleVersionId":7921029,"sourceType":"competition"}],"dockerImageVersionId":30665,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import polars as pl\ndef set_table_dtypes(df: pl.DataFrame) -> pl.DataFrame:\n    for col in df.columns:\n        if col[-1] == \"D\":\n            df = df.with_columns(pl.col(col).str.strptime(pl.Date, \"%Y-%m-%d\").alias(col))\n        elif col[-1] in [\"M\", \"T\"]:\n            df = df.with_columns(pl.col(col).cast(pl.Utf8).alias(col))\n        elif col[-1] in [\"P\", \"A\"]:\n            df = df.with_columns(pl.col(col).cast(pl.Float64).alias(col))\n        elif col[-1] == \"L\":\n            non_null_values = df.filter(pl.col(col).is_not_null())[col].limit(1).to_list()\n            if non_null_values:\n                first_non_null = non_null_values[0]\n                if isinstance(first_non_null, bool):\n                    df = df.with_columns(pl.col(col).cast(pl.Boolean).alias(col))\n                elif isinstance(first_non_null, (float, int)):\n                    df = df.with_columns(pl.col(col).cast(pl.Float64).alias(col))\n                else:\n                    df = df.with_columns(pl.col(col).cast(pl.Utf8).alias(col))\n    return df\n\nimport gc\n\n# join train data\n\ntrain_basetable = pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_base.csv\")\ndef process_week_num(week_num):\n    return week_num % 52 if week_num >= 52 else week_num\ntrain_basetable = train_basetable.with_columns(\n    pl.col(\"WEEK_NUM\").map_elements(process_week_num).alias(\"WEEK_NUM\")\n)\ntrain_basetable = train_basetable.drop(['date_decision','MONTH'])\n\n\ntrain_static = pl.concat(\n    [\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_static_0_0.csv\").pipe(set_table_dtypes),\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_static_0_1.csv\").pipe(set_table_dtypes)\n    ],\n    how=\"vertical_relaxed\",\n)\ncolumns_of_interest = [\n    'case_id',\n    'price_1097A',\n    'numrejects9m_859L',\n    'pctinstlsallpaidlate1d_3546856L',\n    'totalsettled_863A',\n    'maxannuity_159A',\n    'disbursedcredamount_1113A',\n    'maxdpdlast24m_143P',\n    'maxdpdlast12m_727P',\n    'avgdpdtolclosure24_3658938P',\n    'numinstlswithdpd10_728L',\n    'annuity_780A',\n    'maxdpdtolerance_374P',\n    'credamount_770A',\n    'maxdebt4_972A'\n]\ntrain_static = train_static[columns_of_interest]\ntrain_basetable = train_basetable.join(train_static, on='case_id', how='left')\ndel columns_of_interest,train_static\ngc.collect()\n\n\ntrain_person_1 = (\n    pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_person_1.csv\").pipe(set_table_dtypes)\n    .select(['case_id', 'mainoccupationinc_384A', 'num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_person_1, on='case_id', how='left')\ndel train_person_1\ngc.collect()\n\ntrain_other_1 = pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_other_1.csv\").pipe(set_table_dtypes)\ntrain_other_1 = (\n    train_other_1\n    .select(['case_id', 'amtdepositbalance_4809441A','amtdebitincoming_4809443A','amtdebitoutgoing_4809440A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_other_1, on='case_id', how='left')\ndel train_other_1\ngc.collect()\n\ntrain_deposit_1 = pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_deposit_1.csv\").pipe(set_table_dtypes)\ndeposit_sums = (\n    train_deposit_1\n    .group_by('case_id')\n    .agg(pl.sum('amount_416A').alias('deposit'))\n)\ntrain_deposit_1 = train_deposit_1.join(deposit_sums, on='case_id', how='left')\ntrain_deposit_1 = (\n    train_deposit_1\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n    .drop('contractenddate_991D')\n    .drop('openingdate_313D')\n    .drop('amount_416A')\n)\ntrain_basetable = train_basetable.join(train_deposit_1, on='case_id', how='left')\ndel train_deposit_1\ngc.collect()\n\n\ntrain_credit_bureau_a_1 = pl.concat(\n    [\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_0.csv\").pipe(set_table_dtypes),\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_1.csv\").pipe(set_table_dtypes),\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_2.csv\").pipe(set_table_dtypes),\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_3.csv\").pipe(set_table_dtypes)\n    ],\n    how=\"vertical_relaxed\",\n)\ntrain_credit_bureau_a_1 = (\n    train_credit_bureau_a_1\n    .select(['case_id', 'debtoutstand_525A', 'totaloutstanddebtvalue_39A','overdueamountmax2_14A',\n             'overdueamountmax_155A','monthlyinstlamount_332A','dpdmax_139P','numberofoverdueinstlmax_1039L','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_credit_bureau_a_1, on='case_id', how='left')\ndel train_credit_bureau_a_1\ngc.collect()\n\n\ntrain_credit_bureau_b_1 = pl.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_b_1.csv').pipe(set_table_dtypes)\ntrain_credit_bureau_b_1 = (\n    train_credit_bureau_b_1\n    .select(['case_id', 'totalamount_881A','dpdmax_851P','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_credit_bureau_b_1, on='case_id', how='left')\ndel train_credit_bureau_b_1\ngc.collect()\n\n\ntrain_credit_bureau_b_2 = pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_b_2.csv\").pipe(set_table_dtypes)\nsums = (\n    train_credit_bureau_b_2\n    .group_by('case_id')\n    .agg([\n        pl.sum('pmts_dpdvalue_108P').alias('all_pmts_dpdvalue_108P'),\n        pl.sum('pmts_pmtsoverdue_635A').alias('all_pmts_pmtsoverdue_635A')\n    ])\n)\ntrain_credit_bureau_b_2 = train_credit_bureau_b_2.join(sums, on='case_id', how='left')\ntrain_credit_bureau_b_2 = train_credit_bureau_b_2.sort([\"case_id\"])\ntrain_credit_bureau_b_2 = train_credit_bureau_b_2.unique(subset=['case_id'], keep='first')\ntrain_credit_bureau_b_2 = train_credit_bureau_b_2.select(['case_id', 'all_pmts_dpdvalue_108P','all_pmts_pmtsoverdue_635A'])\ntrain_basetable = train_basetable.join(train_credit_bureau_b_2, on='case_id', how='left')\ndel train_credit_bureau_b_2\ngc.collect()\n\n\ntrain_tax_registry_a_1 = pl.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_a_1.csv').pipe(set_table_dtypes)\ntrain_tax_registry_a_1 = (\n    train_tax_registry_a_1\n    .select(['case_id', 'amount_4527230A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_tax_registry_a_1, on='case_id', how='left')\ndel train_tax_registry_a_1\ngc.collect()\n\n\ntrain_tax_registry_b_1 = pl.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_b_1.csv').pipe(set_table_dtypes)\ntrain_tax_registry_b_1 = (\n    train_tax_registry_b_1\n    .select(['case_id', 'amount_4917619A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_tax_registry_b_1, on='case_id', how='left')\ndel train_tax_registry_b_1\ngc.collect()\n\n\ntrain_tax_registry_c_1 = pl.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_c_1.csv').pipe(set_table_dtypes)\ntrain_tax_registry_c_1 = (\n    train_tax_registry_c_1\n    .select(['case_id', 'pmtamount_36A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_tax_registry_c_1, on='case_id', how='left')\ndel train_tax_registry_c_1\ngc.collect()\n\n\ntrain_debitcard_1 = pl.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_debitcard_1.csv').pipe(set_table_dtypes)\ntrain_debitcard_1 = train_debitcard_1.with_columns([\n    pl.col(\"last180dayaveragebalance_704A\").cast(pl.Float64),\n    pl.col(\"last180dayturnover_1134A\").cast(pl.Float64)\n])\ncredit_balance = (\n    train_debitcard_1\n    .group_by('case_id')\n    .agg([\n        pl.sum('last180dayaveragebalance_704A').alias('all_last180dayaveragebalance_704A'),\n        pl.sum(\"last180dayturnover_1134A\").alias('all_last180dayturnover_1134A')\n    ])\n)\ntrain_debitcard_1 = train_debitcard_1.join(credit_balance, on='case_id', how='left')\ntrain_debitcard_1 = (\n    train_debitcard_1\n    .select(['case_id', 'all_last180dayaveragebalance_704A','all_last180dayturnover_1134A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_debitcard_1, on='case_id', how='left')\ndel train_debitcard_1\ngc.collect()\n\ntrain_applprev_1 = pl.concat(\n    [\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_applprev_1_0.csv\").pipe(set_table_dtypes),\n        pl.read_csv(\"/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_applprev_1_1.csv\").pipe(set_table_dtypes)\n    ],\n    how=\"vertical_relaxed\",\n)\ntrain_applprev_1 = (\n    train_applprev_1\n    .select(['case_id', 'annuity_853A','mainoccupationinc_437A','num_group1'])\n    .filter(pl.col('num_group1') == 0)\n    .drop('num_group1')\n)\ntrain_basetable = train_basetable.join(train_applprev_1, on='case_id', how='left')\ndel train_applprev_1\ngc.collect()\n\n\ntrain_basetable = train_basetable.sort(\"case_id\")\ntrain_basetable = train_basetable.to_pandas()\ntrain_basetable.to_csv(\"/kaggle/working/train_basetable_merged.csv\",index=False)\ntrain_basetable_shared_features = train_basetable.dropna(axis=1, how='any')\ntrain_basetable_shared_features.to_csv(\"/kaggle/working/train_basetable_merged_shared_features.csv\",index=False)\n\ndel train_basetable\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2024-03-29T16:08:00.901146Z","iopub.execute_input":"2024-03-29T16:08:00.901510Z","iopub.status.idle":"2024-03-29T16:13:04.701485Z","shell.execute_reply.started":"2024-03-29T16:08:00.901482Z","shell.execute_reply":"2024-03-29T16:13:04.700591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\n\nimport logging\nlogging.getLogger().setLevel(logging.ERROR)\n\nfrom sklearnex import patch_sklearn\npatch_sklearn()\n\n\ndf = pd.read_csv(\"/kaggle/working/train_basetable_merged.csv\",index_col='case_id')\n\n\nmajority_class = df[df.target == 0]\nminority_class = df[df.target == 1]\n\nminority_sample = minority_class.sample(n=1000, random_state=10) \nmajority_sample = majority_class.sample(n=31847, random_state=10)\ntest_set = pd.concat([minority_sample, majority_sample])\n\ntest_set_shared = test_set[['WEEK_NUM','target','numrejects9m_859L','disbursedcredamount_1113A','annuity_780A','credamount_770A','mainoccupationinc_384A']]\n\ndf = df.drop(minority_sample.index)\ndf = df.drop(majority_sample.index)\ndf.to_csv(\"/kaggle/working/train.csv\")\n\ndf_shared = df[['WEEK_NUM','target','numrejects9m_859L','disbursedcredamount_1113A','annuity_780A','credamount_770A','mainoccupationinc_384A']]\ndf_shared.to_csv(\"/kaggle/working/train_shared.csv\")\n\ntest_y = test_set['target']\ntest_X = test_set.drop('target',axis = 1)\n\ntest_y_shared = test_set_shared['target']\ntest_X_shared = test_set_shared.drop('target',axis = 1)\n\ntest_y = test_y.sort_index()\ntest_X = test_X.sort_index()\n\n\ntest_y.to_csv('/kaggle/working/test_y.csv')\ntest_X.to_csv('/kaggle/working/test_X.csv')\n","metadata":{"execution":{"iopub.status.busy":"2024-03-29T16:13:04.703127Z","iopub.execute_input":"2024-03-29T16:13:04.703423Z","iopub.status.idle":"2024-03-29T16:14:06.758622Z","shell.execute_reply.started":"2024-03-29T16:13:04.703388Z","shell.execute_reply":"2024-03-29T16:14:06.757569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_y_shared = test_set_shared['target']\ntest_X_shared = test_set_shared.drop('target',axis = 1)\ntest_y_shared = test_y_shared.sort_index()\ntest_X_shared = test_X_shared.sort_index()\ntest_y_shared.to_csv('/kaggle/working/test_y_shared.csv')\ntest_X_shared.to_csv('/kaggle/working/test_X_shared.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-29T16:14:06.759980Z","iopub.execute_input":"2024-03-29T16:14:06.760335Z","iopub.status.idle":"2024-03-29T16:14:07.022518Z","shell.execute_reply.started":"2024-03-29T16:14:06.760304Z","shell.execute_reply":"2024-03-29T16:14:07.021657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.ensemble import StackingClassifier\nfrom lightgbm import LGBMClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.utils import resample\n\n\n\ntrain_data = pd.read_csv('/kaggle/working/train.csv', index_col='case_id')\n\nmodels = {}\n\n\ndef assessment(csv_name):\n    case_ids = []\n    all_predictions = []\n    df = pd.read_csv(csv_name, index_col='case_id')\n\n    for i in range(len(df)):\n\n        sample = df.iloc[i]\n        #print(sample.name)\n        case_ids.append(sample.name)\n        sample = sample.dropna()\n        non_null_columns = sample.index.tolist()\n        sample_dict = {col: [val] for col, val in zip(non_null_columns, sample.values)}\n        sample = pd.DataFrame(sample_dict)\n        sample.columns = sample.columns.map(str)\n        sample = sample.astype('float32')\n        columns_key = '_'.join(non_null_columns)\n\n        if columns_key not in models:\n\n            non_null_columns_target = non_null_columns.copy()\n            non_null_columns_target.append('target')\n            chosen = train_data[non_null_columns_target]\n            chosen = chosen.dropna()\n\n            majority_class = chosen[chosen.target == 0]\n            minority_class = chosen[chosen.target == 1]\n\n            if len(minority_class) <= 3 or len(majority_class) <= 3:\n                all_predictions.append(0)\n\n            else:\n                majority_downsampled = resample(majority_class,\n                                                replace=False,\n                                                n_samples=len(minority_class) * 7,\n                                                random_state=10)\n                chosen = pd.concat([majority_downsampled, minority_class])\n\n                X = chosen.drop('target', axis=1)\n                X.columns = X.columns.map(str)\n                X = X.astype('float32')\n                y = chosen['target']\n\n                base_learner = [('lgb', LGBMClassifier(verbose=-1, device='gpu',gpu_platform_id=0, gpu_device_id=0, n_estimators=300, learning_rate=0.05,\n                                                       max_depth=15, num_leaves=25, random_state=10,\n                                                       force_col_wise=True, objective= 'binary', metric= 'binary_logloss,auc'))]\n                meta_learner = LogisticRegression(random_state=10, n_jobs=-1, max_iter=1000)\n                cv_method = StratifiedKFold(n_splits=4, shuffle=True, random_state=10)\n                stacked_model = StackingClassifier(\n                    estimators=base_learner,\n                    final_estimator=meta_learner,\n                    stack_method='predict_proba',\n                    cv=cv_method\n                )\n\n                stacked_model.fit(X, y)\n                result = stacked_model.predict_proba(sample)\n                all_predictions.append(result[:, 1][0])\n                models[columns_key] = stacked_model\n\n        else:\n            result = models[columns_key].predict_proba(sample)\n            all_predictions.append(result[:, 1][0])\n\n    output = {\n        'case_id': case_ids,\n        'score': all_predictions\n    }\n    df = pd.DataFrame(output)\n\n    return df","metadata":{"execution":{"iopub.status.busy":"2024-03-29T16:14:07.024737Z","iopub.execute_input":"2024-03-29T16:14:07.025045Z","iopub.status.idle":"2024-03-29T16:14:16.583500Z","shell.execute_reply.started":"2024-03-29T16:14:07.025019Z","shell.execute_reply":"2024-03-29T16:14:16.582455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results = assessment('test_X.csv')\nresults.set_index('case_id', inplace=True)\nsorted_df = results.sort_index()\nsorted_df.to_csv('/kaggle/working/submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-29T16:14:16.584838Z","iopub.execute_input":"2024-03-29T16:14:16.585229Z","iopub.status.idle":"2024-03-29T17:37:32.982461Z","shell.execute_reply.started":"2024-03-29T16:14:16.585197Z","shell.execute_reply":"2024-03-29T17:37:32.981675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.metrics import f1_score\n\npredict = sorted_df['score'].values\ntrue = test_y.values\n\nauc = roc_auc_score(true, predict)\nprint(auc)\n\ny_pred = np.where(predict >= 0.35, 1, 0)\nf1 = f1_score(true, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:31:57.872850Z","iopub.execute_input":"2024-03-29T18:31:57.873697Z","iopub.status.idle":"2024-03-29T18:31:57.901702Z","shell.execute_reply.started":"2024-03-29T18:31:57.873664Z","shell.execute_reply":"2024-03-29T18:31:57.900875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv('/kaggle/working/train.csv', index_col='case_id')\n\nmodels_LGBM = {}\n\n\ndef assessment_LGBM(csv_name):\n    case_ids = []\n    all_predictions = []\n    df = pd.read_csv(csv_name, index_col='case_id')\n\n    for i in range(len(df)):\n\n        sample = df.iloc[i]\n        #print(sample.name)\n        case_ids.append(sample.name)\n        sample = sample.dropna()\n        non_null_columns = sample.index.tolist()\n        sample_dict = {col: [val] for col, val in zip(non_null_columns, sample.values)}\n        sample = pd.DataFrame(sample_dict)\n        sample.columns = sample.columns.map(str)\n        sample = sample.astype('float32')\n        columns_key = '_'.join(non_null_columns)\n\n        if columns_key not in models_LGBM:\n\n            non_null_columns_target = non_null_columns.copy()\n            non_null_columns_target.append('target')\n            chosen = train_data[non_null_columns_target]\n            chosen = chosen.dropna()\n\n            majority_class = chosen[chosen.target == 0]\n            minority_class = chosen[chosen.target == 1]\n\n            if len(minority_class) <= 3 or len(majority_class) <= 3:\n                all_predictions.append(0)\n\n            else:\n                majority_downsampled = resample(majority_class,\n                                                replace=False,\n                                                n_samples=len(minority_class) * 7,\n                                                random_state=10)\n                chosen = pd.concat([majority_downsampled, minority_class])\n\n                X = chosen.drop('target', axis=1)\n                X.columns = X.columns.map(str)\n                X = X.astype('float32')\n                y = chosen['target']\n\n                model = LGBMClassifier(verbose=-1, device='gpu',gpu_platform_id=0, gpu_device_id=0, n_estimators=300, learning_rate=0.05,\n                                                       max_depth=15, num_leaves=25, random_state=10,\n                                                       force_col_wise=True, objective= 'binary', metric= 'binary_logloss,auc')\n\n                model.fit(X, y)\n                result = model.predict_proba(sample)\n                all_predictions.append(result[:, 1][0])\n                models_LGBM[columns_key] = model\n\n        else:\n            result = models_LGBM[columns_key].predict_proba(sample)\n            all_predictions.append(result[:, 1][0])\n\n    output = {\n        'case_id': case_ids,\n        'score': all_predictions\n    }\n    df = pd.DataFrame(output)\n\n    return df","metadata":{"execution":{"iopub.status.busy":"2024-03-29T17:37:33.020219Z","iopub.execute_input":"2024-03-29T17:37:33.020557Z","iopub.status.idle":"2024-03-29T17:37:38.564432Z","shell.execute_reply.started":"2024-03-29T17:37:33.020527Z","shell.execute_reply":"2024-03-29T17:37:38.563382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results_LGBM = assessment_LGBM('test_X.csv')\nresults_LGBM.set_index('case_id', inplace=True)\nsorted_df_LGBM = results_LGBM.sort_index()\nsorted_df_LGBM.to_csv('/kaggle/working/submission_LGBM.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-29T17:37:38.565652Z","iopub.execute_input":"2024-03-29T17:37:38.565964Z","iopub.status.idle":"2024-03-29T17:57:21.024727Z","shell.execute_reply.started":"2024-03-29T17:37:38.565916Z","shell.execute_reply":"2024-03-29T17:57:21.023687Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = sorted_df_LGBM['score'].values\ntrue = test_y.values\n\nauc = roc_auc_score(true, predict)\nprint(auc)\n\ny_pred = np.where(predict >= 0.35, 1, 0)\nf1 = f1_score(true, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:32:41.753409Z","iopub.execute_input":"2024-03-29T18:32:41.754376Z","iopub.status.idle":"2024-03-29T18:32:41.783308Z","shell.execute_reply.started":"2024-03-29T18:32:41.754331Z","shell.execute_reply":"2024-03-29T18:32:41.782397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_data = pd.read_csv('/kaggle/working/train.csv', index_col='case_id')\n\nmodels_LR = {}\n\n\ndef assessment_LR(csv_name):\n    case_ids = []\n    all_predictions = []\n    df = pd.read_csv(csv_name, index_col='case_id')\n\n    for i in range(len(df)):\n\n        sample = df.iloc[i]\n        #print(sample.name)\n        case_ids.append(sample.name)\n        sample = sample.dropna()\n        non_null_columns = sample.index.tolist()\n        sample_dict = {col: [val] for col, val in zip(non_null_columns, sample.values)}\n        sample = pd.DataFrame(sample_dict)\n        sample.columns = sample.columns.map(str)\n        sample = sample.astype('float32')\n        columns_key = '_'.join(non_null_columns)\n\n        if columns_key not in models_LR:\n\n            non_null_columns_target = non_null_columns.copy()\n            non_null_columns_target.append('target')\n            chosen = train_data[non_null_columns_target]\n            chosen = chosen.dropna()\n\n            majority_class = chosen[chosen.target == 0]\n            minority_class = chosen[chosen.target == 1]\n\n            if len(minority_class) <= 3 or len(majority_class) <= 3:\n                all_predictions.append(0)\n\n            else:\n                majority_downsampled = resample(majority_class,\n                                                replace=False,\n                                                n_samples=len(minority_class) * 7,\n                                                random_state=10)\n                chosen = pd.concat([majority_downsampled, minority_class])\n\n                X = chosen.drop('target', axis=1)\n                X.columns = X.columns.map(str)\n                X = X.astype('float32')\n                y = chosen['target']\n\n                model = LogisticRegression(random_state=10, n_jobs=-1, max_iter=1000)\n                \n                model.fit(X, y)\n                result = model.predict_proba(sample)\n                all_predictions.append(result[:, 1][0])\n                models_LR[columns_key] = model\n\n        else:\n            result = models_LR[columns_key].predict_proba(sample)\n            all_predictions.append(result[:, 1][0])\n\n    output = {\n        'case_id': case_ids,\n        'score': all_predictions\n    }\n    df = pd.DataFrame(output)\n\n    return df","metadata":{"execution":{"iopub.status.busy":"2024-03-29T17:57:21.061668Z","iopub.execute_input":"2024-03-29T17:57:21.062025Z","iopub.status.idle":"2024-03-29T17:57:26.819923Z","shell.execute_reply.started":"2024-03-29T17:57:21.061998Z","shell.execute_reply":"2024-03-29T17:57:26.818918Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import warnings\nfrom sklearn.exceptions import ConvergenceWarning\nwarnings.filterwarnings(\"ignore\", category=ConvergenceWarning)\n\nresults_LR = assessment_LR('test_X.csv')\nresults_LR.set_index('case_id', inplace=True)\nsorted_df_LR = results_LR.sort_index()\nsorted_df_LR.to_csv('/kaggle/working/submission_LR.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-29T17:57:26.821090Z","iopub.execute_input":"2024-03-29T17:57:26.821374Z","iopub.status.idle":"2024-03-29T18:07:20.551199Z","shell.execute_reply.started":"2024-03-29T17:57:26.821351Z","shell.execute_reply":"2024-03-29T18:07:20.550340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = sorted_df_LR['score'].values\ntrue = test_y.values\n\nauc = roc_auc_score(true, predict)\nprint(auc)\n\ny_pred = np.where(predict >= 0.35, 1, 0)\nf1 = f1_score(true, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:07:20.552430Z","iopub.execute_input":"2024-03-29T18:07:20.552777Z","iopub.status.idle":"2024-03-29T18:07:20.581560Z","shell.execute_reply.started":"2024-03-29T18:07:20.552748Z","shell.execute_reply":"2024-03-29T18:07:20.580683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_learner = [('lgb', LGBMClassifier(verbose=-1, device='gpu',gpu_platform_id=0, gpu_device_id=0, n_estimators=300, learning_rate=0.05,\n                                                       max_depth=15, num_leaves=25, random_state=10,\n                                                       force_col_wise=True, objective= 'binary', metric= 'binary_logloss,auc'))]\nmeta_learner = LogisticRegression(random_state=10, n_jobs=-1, max_iter=1000)\ncv_method = StratifiedKFold(n_splits=4, shuffle=True, random_state=10)\nstacked_model = StackingClassifier(\n                    estimators=base_learner,\n                    final_estimator=meta_learner,\n                    stack_method='predict_proba',\n                    cv=cv_method\n                )\n\n\ndf_shared_X = df_shared.drop('target',axis=1)\ndf_shared_y = df_shared['target']\nmajority_downsampled = resample(df_shared_X,\n                                replace=False,\n                                n_samples=len(df_shared[df_shared_y == 1]) * 7,\n                                random_state=10)\nresampled_y = df_shared_y.loc[majority_downsampled.index]\n\nstacked_model.fit(majority_downsampled, resampled_y)\nresult = stacked_model.predict_proba(test_X_shared)\n\nauc = roc_auc_score(test_y_shared.values, result[:, 1])\nprint(auc)\nprint(result)\ny_pred = np.where(result[:, 1] >= 0.35, 1, 0)\nf1 = f1_score(test_y_shared.values, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:07:20.582655Z","iopub.execute_input":"2024-03-29T18:07:20.582960Z","iopub.status.idle":"2024-03-29T18:07:37.759833Z","shell.execute_reply.started":"2024-03-29T18:07:20.582907Z","shell.execute_reply":"2024-03-29T18:07:37.758884Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = LogisticRegression(random_state=10, n_jobs=-1, max_iter=1000)\n\ndf_shared_X = df_shared.drop('target',axis=1)\ndf_shared_y = df_shared['target']\nmajority_downsampled = resample(df_shared_X,\n                                replace=False,\n                                n_samples=len(df_shared[df_shared_y == 1]) * 7,\n                                random_state=10)\nresampled_y = df_shared_y.loc[majority_downsampled.index]\n\nmodel.fit(majority_downsampled, resampled_y)\nresult = model.predict_proba(test_X_shared)\n\nauc = roc_auc_score(test_y_shared.values, result[:, 1])\nprint(auc)\n\ny_pred = np.where(result[:, 1] >= 0.35, 1, 0)\nf1 = f1_score(test_y_shared.values, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:07:37.761138Z","iopub.execute_input":"2024-03-29T18:07:37.761496Z","iopub.status.idle":"2024-03-29T18:07:38.128172Z","shell.execute_reply.started":"2024-03-29T18:07:37.761464Z","shell.execute_reply":"2024-03-29T18:07:38.127141Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.metrics import f1_score\nimport pandas as pd\nfrom sklearn.ensemble import StackingClassifier\nfrom lightgbm import LGBMClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.utils import resample\n\nmodel = LGBMClassifier(verbose=-1, device='gpu',gpu_platform_id=0, gpu_device_id=0, n_estimators=300, learning_rate=0.05,\n                                                       max_depth=15, num_leaves=25, random_state=10,\n                                                       force_col_wise=True, objective= 'binary', metric= 'binary_logloss,auc')\n\ndf_shared_X = df_shared.drop('target',axis=1)\ndf_shared_y = df_shared['target']\nmajority_downsampled = resample(df_shared_X,\n                                replace=False,\n                                n_samples=len(df_shared[df_shared_y == 1]) * 7,\n                                random_state=10)\nresampled_y = df_shared_y.loc[majority_downsampled.index]\n\nmodel.fit(majority_downsampled, resampled_y)\nresult = model.predict_proba(test_X_shared)\n\nauc = roc_auc_score(test_y_shared.values, result[:, 1])\nprint(auc)\nprint(result)\ny_pred = np.where(result[:, 1] >= 0.35, 1, 0)\nf1 = f1_score(test_y_shared.values, y_pred, average='binary')\nprint(f\"F1 Score: {f1}\")","metadata":{"execution":{"iopub.status.busy":"2024-03-29T18:07:38.129248Z","iopub.execute_input":"2024-03-29T18:07:38.129524Z","iopub.status.idle":"2024-03-29T18:07:41.903421Z","shell.execute_reply.started":"2024-03-29T18:07:38.129500Z","shell.execute_reply":"2024-03-29T18:07:41.902482Z"},"trusted":true},"execution_count":null,"outputs":[]}]}