{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"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":"none","dataSources":[{"sourceId":50160,"databundleVersionId":7921029,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false},"colab":{"provenance":[]}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# G14 Notebook\n\nWelcome to the G14's notebook for the Home Credit Kaggle competition. The goal of this competition is to determine how likely a customer is going to default on an issued loan. The main difference between the [first](https://www.kaggle.com/c/home-credit-default-risk) and this competition is that now your submission will be scored with a custom metric that will take into account how well the model performs in future. A decline in performance will be penalized. The goal is to create a model that is stable and performs well in the future.\n\nIn this notebook you will see how to:\n* Load the data\n* Join tables with Polars - a DataFrame library implemented in Rust language, designed to be blazingy fast and memory efficient.  \n* Create simple aggregation features\n* Train a LightGBM model\n* Create a submission table\n\n## Load the data","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","id":"UT9kpBithazL"}},{"cell_type":"code","source":"import polars as pl\nimport numpy as np\nimport pandas as pd\nimport lightgbm as lgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import roc_auc_score\n\ndataPath = \"/kaggle/input/home-credit-credit-risk-model-stability/\"","metadata":{"id":"Mm_NGuihhazM","execution":{"iopub.status.busy":"2024-04-22T00:44:54.022225Z","iopub.execute_input":"2024-04-22T00:44:54.022627Z","iopub.status.idle":"2024-04-22T00:44:59.928601Z","shell.execute_reply.started":"2024-04-22T00:44:54.022597Z","shell.execute_reply":"2024-04-22T00:44:59.927286Z"},"trusted":true},"execution_count":1,"outputs":[]},{"cell_type":"code","source":"def set_table_dtypes(df: pl.DataFrame) -> pl.DataFrame:\n    # implement here all desired dtypes for tables\n    # the following is just an example\n    for col in df.columns:\n        # last letter of column name will help you determine the type\n        if col[-1] in (\"P\", \"A\"):\n            df = df.with_columns(pl.col(col).cast(pl.Float64).alias(col))\n\n    return df\n\ndef convert_strings(df: pd.DataFrame) -> pd.DataFrame:\n    for col in df.columns:\n        if df[col].dtype.name in ['object', 'string']:\n            df[col] = df[col].astype(\"string\").astype('category')\n            current_categories = df[col].cat.categories\n            new_categories = current_categories.to_list() + [\"Unknown\"]\n            new_dtype = pd.CategoricalDtype(categories=new_categories, ordered=True)\n            df[col] = df[col].astype(new_dtype)\n    return df","metadata":{"id":"So9JN4arhazM","execution":{"iopub.status.busy":"2024-04-22T00:44:59.931032Z","iopub.execute_input":"2024-04-22T00:44:59.932394Z","iopub.status.idle":"2024-04-22T00:44:59.944564Z","shell.execute_reply.started":"2024-04-22T00:44:59.932346Z","shell.execute_reply":"2024-04-22T00:44:59.942742Z"},"trusted":true},"execution_count":2,"outputs":[]},{"cell_type":"code","source":"train_basetable = pl.read_csv(dataPath + \"csv_files/train/train_base.csv\")\ntrain_static = pl.concat(\n    [\n        pl.read_csv(dataPath + \"csv_files/train/train_static_0_0.csv\").pipe(set_table_dtypes),\n        pl.read_csv(dataPath + \"csv_files/train/train_static_0_1.csv\").pipe(set_table_dtypes),\n    ],\n    how=\"vertical_relaxed\",\n)\ntrain_static_cb = pl.read_csv(dataPath + \"csv_files/train/train_static_cb_0.csv\").pipe(set_table_dtypes)\ntrain_person_1 = pl.read_csv(dataPath + \"csv_files/train/train_person_1.csv\").pipe(set_table_dtypes)\ntrain_credit_bureau_b_2 = pl.read_csv(dataPath + \"csv_files/train/train_credit_bureau_b_2.csv\").pipe(set_table_dtypes)","metadata":{"id":"BokoNCmAhazM","execution":{"iopub.status.busy":"2024-04-22T00:44:59.94643Z","iopub.execute_input":"2024-04-22T00:44:59.946847Z","iopub.status.idle":"2024-04-22T00:45:20.491242Z","shell.execute_reply.started":"2024-04-22T00:44:59.946808Z","shell.execute_reply":"2024-04-22T00:45:20.490264Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"test_basetable = pl.read_csv(dataPath + \"csv_files/test/test_base.csv\")\ntest_static = pl.concat(\n    [\n        pl.read_csv(dataPath + \"csv_files/test/test_static_0_0.csv\").pipe(set_table_dtypes),\n        pl.read_csv(dataPath + \"csv_files/test/test_static_0_1.csv\").pipe(set_table_dtypes),\n        pl.read_csv(dataPath + \"csv_files/test/test_static_0_2.csv\").pipe(set_table_dtypes),\n    ],\n    how=\"vertical_relaxed\",\n)\ntest_static_cb = pl.read_csv(dataPath + \"csv_files/test/test_static_cb_0.csv\").pipe(set_table_dtypes)\ntest_person_1 = pl.read_csv(dataPath + \"csv_files/test/test_person_1.csv\").pipe(set_table_dtypes)\ntest_credit_bureau_b_2 = pl.read_csv(dataPath + \"csv_files/test/test_credit_bureau_b_2.csv\").pipe(set_table_dtypes)","metadata":{"id":"-W_f8daUhazN","execution":{"iopub.status.busy":"2024-04-22T00:45:20.494592Z","iopub.execute_input":"2024-04-22T00:45:20.495878Z","iopub.status.idle":"2024-04-22T00:45:20.572387Z","shell.execute_reply.started":"2024-04-22T00:45:20.495829Z","shell.execute_reply":"2024-04-22T00:45:20.570741Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"markdown","source":"## Feature engineering\n\nIn this part, we can see a simple example of joining tables via `case_id`. Here the loading and joining is done with polars library. Polars library is blazingly fast and has much smaller memory footprint than pandas.","metadata":{"id":"qwO6_7-ZhazN"}},{"cell_type":"code","source":"# We need to use aggregation functions in tables with depth > 1, so tables that contain num_group1 column or\n# also num_group2 column.\ntrain_person_1_feats_1 = train_person_1.group_by(\"case_id\").agg(\n    pl.col(\"mainoccupationinc_384A\").max().alias(\"mainoccupationinc_384A_max\"),\n    (pl.col(\"incometype_1044T\") == \"SELFEMPLOYED\").max().alias(\"mainoccupationinc_384A_any_selfemployed\")\n)\n\n# Here num_group1=0 has special meaning, it is the person who applied for the loan.\ntrain_person_1_feats_2 = train_person_1.select([\"case_id\", \"num_group1\", \"housetype_905L\"]).filter(\n    pl.col(\"num_group1\") == 0\n).drop(\"num_group1\").rename({\"housetype_905L\": \"person_housetype\"})\n\n# Here we have num_goup1 and num_group2, so we need to aggregate again.\ntrain_credit_bureau_b_2_feats = train_credit_bureau_b_2.group_by(\"case_id\").agg(\n    pl.col(\"pmts_pmtsoverdue_635A\").max().alias(\"pmts_pmtsoverdue_635A_max\"),\n    (pl.col(\"pmts_dpdvalue_108P\") > 31).max().alias(\"pmts_dpdvalue_108P_over31\")\n)\n\n# We will process in this examples only A-type and M-type columns, so we need to select them.\nselected_static_cols = []\nfor col in train_static.columns:\n    if col[-1] in (\"A\", \"M\"):\n        selected_static_cols.append(col)\nprint(selected_static_cols)\n\nselected_static_cb_cols = []\nfor col in train_static_cb.columns:\n    if col[-1] in (\"A\", \"M\"):\n        selected_static_cb_cols.append(col)\nprint(selected_static_cb_cols)\n\n# Join all tables together.\ndata = train_basetable.join(\n    train_static.select([\"case_id\"]+selected_static_cols), how=\"left\", on=\"case_id\"\n).join(\n    train_static_cb.select([\"case_id\"]+selected_static_cb_cols), how=\"left\", on=\"case_id\"\n).join(\n    train_person_1_feats_1, how=\"left\", on=\"case_id\"\n).join(\n    train_person_1_feats_2, how=\"left\", on=\"case_id\"\n).join(\n    train_credit_bureau_b_2_feats, how=\"left\", on=\"case_id\"\n)","metadata":{"id":"GIqz49P_hazN","colab":{"base_uri":"https://localhost:8080/"},"outputId":"e34be669-f60e-444b-91c3-a572e792dedf","execution":{"iopub.status.busy":"2024-04-22T00:45:20.575816Z","iopub.execute_input":"2024-04-22T00:45:20.576718Z","iopub.status.idle":"2024-04-22T00:45:23.64295Z","shell.execute_reply.started":"2024-04-22T00:45:20.576658Z","shell.execute_reply":"2024-04-22T00:45:23.641679Z"},"trusted":true},"execution_count":5,"outputs":[{"name":"stdout","text":"['amtinstpaidbefduel24m_4187115A', 'annuity_780A', 'annuitynextmonth_57A', 'avginstallast24m_3658937A', 'avglnamtstart24m_4525187A', 'avgoutstandbalancel6m_4187114A', 'avgpmtlast12m_4525200A', 'credamount_770A', 'currdebt_22A', 'currdebtcredtyperange_828A', 'disbursedcredamount_1113A', 'downpmt_116A', 'inittransactionamount_650A', 'lastapprcommoditycat_1041M', 'lastapprcommoditytypec_5251766M', 'lastapprcredamount_781A', 'lastcancelreason_561M', 'lastotherinc_902A', 'lastotherlnsexpense_631A', 'lastrejectcommoditycat_161M', 'lastrejectcommodtypec_5251769M', 'lastrejectcredamount_222A', 'lastrejectreason_759M', 'lastrejectreasonclient_4145040M', 'maininc_215A', 'maxannuity_159A', 'maxannuity_4075009A', 'maxdebt4_972A', 'maxinstallast24m_3658928A', 'maxlnamtstart6m_4525199A', 'maxoutstandbalancel12m_4187113A', 'maxpmtlast3m_4525190A', 'previouscontdistrict_112M', 'price_1097A', 'sumoutstandtotal_3546847A', 'sumoutstandtotalest_4493215A', 'totaldebt_9A', 'totalsettled_863A', 'totinstallast1m_4525188A']\n['description_5085714M', 'education_1103M', 'education_88M', 'maritalst_385M', 'maritalst_893M', 'pmtaverage_3A', 'pmtaverage_4527227A', 'pmtaverage_4955615A', 'pmtssum_45A']\n","output_type":"stream"}]},{"cell_type":"code","source":"test_person_1_feats_1 = test_person_1.group_by(\"case_id\").agg(\n    pl.col(\"mainoccupationinc_384A\").max().alias(\"mainoccupationinc_384A_max\"),\n    (pl.col(\"incometype_1044T\") == \"SELFEMPLOYED\").max().alias(\"mainoccupationinc_384A_any_selfemployed\")\n)\n\ntest_person_1_feats_2 = test_person_1.select([\"case_id\", \"num_group1\", \"housetype_905L\"]).filter(\n    pl.col(\"num_group1\") == 0\n).drop(\"num_group1\").rename({\"housetype_905L\": \"person_housetype\"})\n\ntest_credit_bureau_b_2_feats = test_credit_bureau_b_2.group_by(\"case_id\").agg(\n    pl.col(\"pmts_pmtsoverdue_635A\").max().alias(\"pmts_pmtsoverdue_635A_max\"),\n    (pl.col(\"pmts_dpdvalue_108P\") > 31).max().alias(\"pmts_dpdvalue_108P_over31\")\n)\n\ndata_submission = test_basetable.join(\n    test_static.select([\"case_id\"]+selected_static_cols), how=\"left\", on=\"case_id\"\n).join(\n    test_static_cb.select([\"case_id\"]+selected_static_cb_cols), how=\"left\", on=\"case_id\"\n).join(\n    test_person_1_feats_1, how=\"left\", on=\"case_id\"\n).join(\n    test_person_1_feats_2, how=\"left\", on=\"case_id\"\n).join(\n    test_credit_bureau_b_2_feats, how=\"left\", on=\"case_id\"\n)","metadata":{"id":"0Dut4oHchazN","execution":{"iopub.status.busy":"2024-04-22T00:45:23.644376Z","iopub.execute_input":"2024-04-22T00:45:23.645641Z","iopub.status.idle":"2024-04-22T00:45:23.66302Z","shell.execute_reply.started":"2024-04-22T00:45:23.645601Z","shell.execute_reply":"2024-04-22T00:45:23.661482Z"},"trusted":true},"execution_count":6,"outputs":[]},{"cell_type":"markdown","source":"# **Feature Analysis**","metadata":{"id":"xadvPZhFhazN"}},{"cell_type":"markdown","source":"# EDA","metadata":{"id":"clv3igyThazN"}},{"cell_type":"code","source":"pd_df = data.to_pandas() # dask, koalas : some alternatives foe EDA\nprint('Polar Dataframe')\nprint(type(pd_df))\nprint('Overall data analytics')\nprint(pd_df.describe())\nprint('Data types')\nprint(pd_df.dtypes)\n","metadata":{"id":"7XW-T4JUhazN","colab":{"base_uri":"https://localhost:8080/"},"outputId":"86016ca0-12f3-492b-ef56-d7fc5d85b3f0","execution":{"iopub.status.busy":"2024-04-22T00:45:23.665414Z","iopub.execute_input":"2024-04-22T00:45:23.666404Z","iopub.status.idle":"2024-04-22T00:45:29.208639Z","shell.execute_reply.started":"2024-04-22T00:45:23.666365Z","shell.execute_reply":"2024-04-22T00:45:29.207602Z"},"trusted":true},"execution_count":7,"outputs":[{"name":"stdout","text":"Polar Dataframe\n<class 'pandas.core.frame.DataFrame'>\nOverall data analytics\n            case_id         MONTH      WEEK_NUM        target  \\\ncount  1.526659e+06  1.526659e+06  1.526659e+06  1.526659e+06   \nmean   1.286077e+06  2.019363e+05  4.076904e+01  3.143728e-02   \nstd    7.189466e+05  4.473597e+01  2.379798e+01  1.744964e-01   \nmin    0.000000e+00  2.019010e+05  0.000000e+00  0.000000e+00   \n25%    7.661975e+05  2.019060e+05  2.300000e+01  0.000000e+00   \n50%    1.357358e+06  2.019100e+05  4.000000e+01  0.000000e+00   \n75%    1.739022e+06  2.020010e+05  5.500000e+01  0.000000e+00   \nmax    2.703454e+06  2.020100e+05  9.100000e+01  1.000000e+00   \n\n       amtinstpaidbefduel24m_4187115A  annuity_780A  annuitynextmonth_57A  \\\ncount                    9.655350e+05  1.526659e+06          1.526655e+06   \nmean                     5.595833e+04  4.039207e+03          1.435775e+03   \nstd                      7.161417e+04  3.006608e+03          2.807021e+03   \nmin                      0.000000e+00  8.080000e+01          0.000000e+00   \n25%                      7.419200e+03  1.967600e+03          0.000000e+00   \n50%                      2.975840e+04  3.151800e+03          0.000000e+00   \n75%                      7.630295e+04  5.231400e+03          2.029400e+03   \nmax                      1.408010e+06  1.060070e+05          8.750000e+04   \n\n       avginstallast24m_3658937A  avglnamtstart24m_4525187A  \\\ncount              901784.000000              162509.000000   \nmean                 5401.587636               44717.566753   \nstd                  6531.562344               44844.786730   \nmin                     0.000000                   0.000000   \n25%                  2528.400100               15682.601000   \n50%                  4068.600000               28419.400000   \n75%                  6551.800300               56334.200000   \nmax                496148.800000              513520.000000   \n\n       avgoutstandbalancel6m_4187114A  ...  sumoutstandtotalest_4493215A  \\\ncount                    6.854780e+05  ...                  6.860130e+05   \nmean                     4.598483e+04  ...                  2.830974e+04   \nstd                      6.399392e+04  ...                  6.050010e+04   \nmin                     -7.588198e+06  ...                 -2.504400e+04   \n25%                      8.708660e+03  ...                  0.000000e+00   \n50%                      2.275459e+04  ...                  0.000000e+00   \n75%                      5.542953e+04  ...                  2.798400e+04   \nmax                      1.131136e+06  ...                  1.085048e+06   \n\n       totaldebt_9A  totalsettled_863A  totinstallast1m_4525188A  \\\ncount  1.526656e+06       1.526655e+06             352448.000000   \nmean   1.968312e+04       9.223817e+04              10411.377565   \nstd    5.083603e+04       1.623358e+05              16222.912082   \nmin    0.000000e+00       0.000000e+00                  0.214000   \n25%    0.000000e+00       0.000000e+00               3309.314000   \n50%    0.000000e+00       3.597766e+04               6221.200000   \n75%    1.349310e+04       1.188157e+05              11685.000000   \nmax    1.210629e+06       4.803504e+07             794899.200000   \n\n       pmtaverage_3A  pmtaverage_4527227A  pmtaverage_4955615A    pmtssum_45A  \\\ncount  143589.000000        114978.000000         71845.000000  572638.000000   \nmean     9303.171700         10033.556094         17651.732489   13199.935970   \nstd      5562.386995          5455.843604          6871.642301   18117.218312   \nmin         0.000000             4.200000             4.400000       0.000000   \n25%      6590.600000          7192.000000         13664.601000    3156.400100   \n50%      7305.900000          7553.000000         15765.200000    8391.900000   \n75%     13023.900000         13464.400000         21840.000000   16992.000000   \nmax    145257.400000        205848.610000         99085.400000  476843.400000   \n\n       mainoccupationinc_384A_max  pmts_pmtsoverdue_635A_max  \ncount                1.526659e+06               36415.000000  \nmean                 5.770748e+04                  36.426704  \nstd                  3.334830e+04                1547.789956  \nmin                  0.000000e+00                   0.000000  \n25%                  3.600000e+04                   0.000000  \n50%                  5.000000e+04                   0.000000  \n75%                  7.000000e+04                   2.600000  \nmax                  2.000000e+05              147470.610000  \n\n[8 rows x 41 columns]\nData types\ncase_id                                      int64\ndate_decision                               object\nMONTH                                        int64\nWEEK_NUM                                     int64\ntarget                                       int64\namtinstpaidbefduel24m_4187115A             float64\nannuity_780A                               float64\nannuitynextmonth_57A                       float64\navginstallast24m_3658937A                  float64\navglnamtstart24m_4525187A                  float64\navgoutstandbalancel6m_4187114A             float64\navgpmtlast12m_4525200A                     float64\ncredamount_770A                            float64\ncurrdebt_22A                               float64\ncurrdebtcredtyperange_828A                 float64\ndisbursedcredamount_1113A                  float64\ndownpmt_116A                               float64\ninittransactionamount_650A                 float64\nlastapprcommoditycat_1041M                  object\nlastapprcommoditytypec_5251766M             object\nlastapprcredamount_781A                    float64\nlastcancelreason_561M                       object\nlastotherinc_902A                          float64\nlastotherlnsexpense_631A                   float64\nlastrejectcommoditycat_161M                 object\nlastrejectcommodtypec_5251769M              object\nlastrejectcredamount_222A                  float64\nlastrejectreason_759M                       object\nlastrejectreasonclient_4145040M             object\nmaininc_215A                               float64\nmaxannuity_159A                            float64\nmaxannuity_4075009A                        float64\nmaxdebt4_972A                              float64\nmaxinstallast24m_3658928A                  float64\nmaxlnamtstart6m_4525199A                   float64\nmaxoutstandbalancel12m_4187113A            float64\nmaxpmtlast3m_4525190A                      float64\npreviouscontdistrict_112M                   object\nprice_1097A                                float64\nsumoutstandtotal_3546847A                  float64\nsumoutstandtotalest_4493215A               float64\ntotaldebt_9A                               float64\ntotalsettled_863A                          float64\ntotinstallast1m_4525188A                   float64\ndescription_5085714M                        object\neducation_1103M                             object\neducation_88M                               object\nmaritalst_385M                              object\nmaritalst_893M                              object\npmtaverage_3A                              float64\npmtaverage_4527227A                        float64\npmtaverage_4955615A                        float64\npmtssum_45A                                float64\nmainoccupationinc_384A_max                 float64\nmainoccupationinc_384A_any_selfemployed       bool\nperson_housetype                            object\npmts_pmtsoverdue_635A_max                  float64\npmts_dpdvalue_108P_over31                   object\ndtype: object\n","output_type":"stream"}]},{"cell_type":"markdown","source":"# Correlation Analysis\n\ncorrelation matrix performed on Int and Float values within dataset. No features have a strong relationship with the target feature.","metadata":{"id":"g60hL44jhazO"}},{"cell_type":"code","source":"\n\n#Correlation Analysis\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nnumerical_columns = pd_df.select_dtypes(include=['float64', 'int64']).columns\n\n# Subset DataFrame with numerical columns\nnumerical_df = pd_df[numerical_columns]\n\n# Example 1: Correlation Analysis\ncorrelation_matrix = numerical_df.corr()\n\n# Set up the matplotlib figure\nplt.figure(figsize=(12, 10))\n\n# Draw the heatmap\nsns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=\".2f\")\n\n# Rotate column labels\nplt.xticks(rotation=45)  # Rotate x-axis labels by 45 degrees\n\n# Set the title\nplt.title('Correlation Matrix of Numerical Columns')\n\n# Show the plot\nplt.show()\n\nthreshold = 0.8  # Adjust as needed\n\n# Extract pairs of columns with high correlation\nhigh_correlation_pairs = []\n\n# Loop through the correlation matrix\nfor i in range(len(correlation_matrix.columns)):\n    for j in range(i+1, len(correlation_matrix.columns)):\n        if abs(correlation_matrix.iloc[i, j]) >= threshold:\n            pair = (correlation_matrix.columns[i], correlation_matrix.columns[j], correlation_matrix.iloc[i, j])\n            high_correlation_pairs.append(pair)\n\n# Print high correlation pairs\nprint(\"Pairs with correlation coefficient >= \", threshold)\nfor pair in high_correlation_pairs:\n    print(pair)\n\ntarget_correlation = correlation_matrix['target'].drop('target')  # Drop target variable itself\ntarget_correlation_with_target = target_correlation.abs().sort_values(ascending=False)\nprint(\"\\nCorrelation with Target:\")\nprint(target_correlation_with_target)","metadata":{"id":"U5J-p5CzhazO","colab":{"base_uri":"https://localhost:8080/","height":1000},"outputId":"d6997d83-8ed6-4c7b-c47f-eb6ebde04f6b","execution":{"iopub.status.busy":"2024-04-22T00:45:29.210532Z","iopub.execute_input":"2024-04-22T00:45:29.210963Z","iopub.status.idle":"2024-04-22T00:45:40.600503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Drop the highly correlated columns from each pair, which aren't related to the target value","metadata":{"id":"e6vDYX1ghazO"}},{"cell_type":"code","source":"# Pairs with correlation coefficient >= 0.8\ncorrelated_pairs = [\n    #('MONTH', 'WEEK_NUM'),\n    ('amtinstpaidbefduel24m_4187115A', 'maxdebt4_972A'),\n    ('annuity_780A', 'credamount_770A'),\n    ('avginstallast24m_3658937A', 'avgpmtlast12m_4525200A'),\n    ('avgoutstandbalancel6m_4187114A', 'currdebt_22A'),\n    ('avgoutstandbalancel6m_4187114A', 'maxoutstandbalancel12m_4187113A'),\n    ('avgoutstandbalancel6m_4187114A', 'sumoutstandtotal_3546847A'),\n    ('avgoutstandbalancel6m_4187114A', 'sumoutstandtotalest_4493215A'),\n    ('avgoutstandbalancel6m_4187114A', 'totaldebt_9A'),\n    ('credamount_770A', 'disbursedcredamount_1113A'),\n    ('currdebt_22A', 'maxoutstandbalancel12m_4187113A'),\n    ('currdebt_22A', 'sumoutstandtotal_3546847A'),\n    ('currdebt_22A', 'sumoutstandtotalest_4493215A'),\n    ('currdebt_22A', 'totaldebt_9A'),\n    ('disbursedcredamount_1113A', 'inittransactionamount_650A'),\n    ('inittransactionamount_650A', 'price_1097A'),\n    ('maxoutstandbalancel12m_4187113A', 'sumoutstandtotal_3546847A'),\n    ('maxoutstandbalancel12m_4187113A', 'sumoutstandtotalest_4493215A'),\n    ('maxoutstandbalancel12m_4187113A', 'totaldebt_9A'),\n    ('maxpmtlast3m_4525190A', 'totinstallast1m_4525188A'),\n    ('sumoutstandtotal_3546847A', 'sumoutstandtotalest_4493215A'),\n    ('sumoutstandtotal_3546847A', 'totaldebt_9A'),\n    ('sumoutstandtotalest_4493215A', 'totaldebt_9A'),\n    ('pmtaverage_3A', 'pmtaverage_4527227A'),\n    ('pmtaverage_4527227A', 'pmtaverage_4955615A')\n]\n\n# Correlation of each column with the target variable\ncorrelation_with_target = {\n    'pmtaverage_4527227A': 0.056869,\n    'pmtaverage_3A': 0.052846,\n    'pmtssum_45A': 0.045376,\n    'amtinstpaidbefduel24m_4187115A': 0.045047,\n    'pmtaverage_4955615A': 0.043715,\n    'avglnamtstart24m_4525187A': 0.029916,\n    'disbursedcredamount_1113A': 0.027877,\n    'sumoutstandtotalest_4493215A': 0.027050,\n    'price_1097A': 0.026889,\n    'credamount_770A': 0.026277,\n    'maxdebt4_972A': 0.025744,\n    'sumoutstandtotal_3546847A': 0.021917,\n    'totaldebt_9A': 0.021764,\n    'currdebt_22A': 0.021745,\n    'totalsettled_863A': 0.019596,\n    'avgoutstandbalancel6m_4187114A': 0.017543,\n    'currdebtcredtyperange_828A': 0.017442,\n    'annuity_780A': 0.013838,\n    'maxannuity_159A': 0.013249,\n    'inittransactionamount_650A': 0.013203,\n    'pmts_pmtsoverdue_635A_max': 0.012941,\n    'lastotherlnsexpense_631A': 0.012272,\n    'maininc_215A': 0.011394,\n    'lastrejectcredamount_222A': 0.011019,\n    'lastotherinc_902A': 0.010642,\n    'maxannuity_4075009A': 0.010332,\n    'lastapprcredamount_781A': 0.008283,\n    'maxoutstandbalancel12m_4187113A': 0.006408,\n    'annuitynextmonth_57A': 0.006378,\n    'mainoccupationinc_384A_max': 0.006057,\n    'avginstallast24m_3658937A': 0.005615,\n    'downpmt_116A': 0.005212,\n    'MONTH': 0.004875,\n    'case_id': 0.003834,\n    'maxlnamtstart6m_4525199A': 0.003773,\n    #'WEEK_NUM': 0.002969,\n    'totinstallast1m_4525188A': 0.002263,\n    'avgpmtlast12m_4525200A': 0.001701,\n    'maxinstallast24m_3658928A': 0.001042,\n    'maxpmtlast3m_4525190A': 0.000932\n}\n\n# Dictionary to store the selected column from each pair\nselected_columns = {}\n\n# Iterate through correlated pairs\nfor pair in correlated_pairs:\n    column1, column2 = pair\n    # Choose the column with the lower absolute correlation with the target\n    if abs(correlation_with_target[column1]) < abs(correlation_with_target[column2]):\n        selected_columns[pair] = column1\n    else:\n        selected_columns[pair] = column2\n\n# Print the selected columns\nfor pair, column in selected_columns.items():\n#     print(f\"Column from pair {pair} with lower correlation to target: {column}\")\n      print(column)\n","metadata":{"id":"ezx0TIzKhazO","colab":{"base_uri":"https://localhost:8080/"},"outputId":"2a51bfd7-125d-4c41-8d55-448fe707c4b8","execution":{"iopub.status.busy":"2024-04-22T00:45:40.60219Z","iopub.execute_input":"2024-04-22T00:45:40.602576Z","iopub.status.idle":"2024-04-22T00:45:40.623168Z"},"trusted":true},"execution_count":null,"outputs":[{"name":"stdout","text":"maxdebt4_972A\nannuity_780A\navgpmtlast12m_4525200A\navgoutstandbalancel6m_4187114A\nmaxoutstandbalancel12m_4187113A\navgoutstandbalancel6m_4187114A\navgoutstandbalancel6m_4187114A\navgoutstandbalancel6m_4187114A\ncredamount_770A\nmaxoutstandbalancel12m_4187113A\ncurrdebt_22A\ncurrdebt_22A\ncurrdebt_22A\ninittransactionamount_650A\ninittransactionamount_650A\nmaxoutstandbalancel12m_4187113A\nmaxoutstandbalancel12m_4187113A\nmaxoutstandbalancel12m_4187113A\nmaxpmtlast3m_4525190A\nsumoutstandtotal_3546847A\ntotaldebt_9A\ntotaldebt_9A\npmtaverage_3A\npmtaverage_4955615A\n","output_type":"stream"}]},{"cell_type":"code","source":"columns_to_drop = []\n\nfor pair, column in selected_columns.items():\n    columns_to_drop.append(column)\n\n# Drop columns from the main DataFrame\npd_df.drop(columns=columns_to_drop, inplace=True)\npd_df","metadata":{"id":"e0FDG6A6hazO","colab":{"base_uri":"https://localhost:8080/","height":439},"outputId":"4f9b7755-7c0c-46af-fdb4-e16c75a20fee","execution":{"iopub.status.busy":"2024-04-22T00:45:40.628211Z","iopub.execute_input":"2024-04-22T00:45:40.628648Z","iopub.status.idle":"2024-04-22T00:45:42.338853Z","shell.execute_reply.started":"2024-04-22T00:45:40.628564Z","shell.execute_reply":"2024-04-22T00:45:42.336869Z"},"trusted":true},"execution_count":10,"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":"         case_id date_decision   MONTH  WEEK_NUM  target  \\\n0              0    2019-01-03  201901         0       0   \n1              1    2019-01-03  201901         0       0   \n2              2    2019-01-04  201901         0       0   \n3              3    2019-01-03  201901         0       0   \n4              4    2019-01-04  201901         0       1   \n...          ...           ...     ...       ...     ...   \n1526654  2703450    2020-10-05  202010        91       0   \n1526655  2703451    2020-10-05  202010        91       0   \n1526656  2703452    2020-10-05  202010        91       0   \n1526657  2703453    2020-10-05  202010        91       0   \n1526658  2703454    2020-10-05  202010        91       0   \n\n         amtinstpaidbefduel24m_4187115A  annuitynextmonth_57A  \\\n0                                   NaN                   0.0   \n1                                   NaN                   0.0   \n2                                   NaN                   0.0   \n3                                   NaN                   0.0   \n4                                   NaN                   0.0   \n...                                 ...                   ...   \n1526654                       176561.36                   0.0   \n1526655                       301276.47                6191.6   \n1526656                        14232.40                   0.0   \n1526657                       197371.58                2827.2   \n1526658                        82949.60                2986.8   \n\n         avginstallast24m_3658937A  avglnamtstart24m_4525187A  \\\n0                              NaN                        NaN   \n1                              NaN                        NaN   \n2                              NaN                        NaN   \n3                              NaN                        NaN   \n4                              NaN                        NaN   \n...                            ...                        ...   \n1526654                  7356.8003                        NaN   \n1526655                 12553.2000                        NaN   \n1526656                  2662.4001                        NaN   \n1526657                  8212.6010                        NaN   \n1526658                  6405.4000                    15998.0   \n\n         currdebtcredtyperange_828A  ...  education_88M  maritalst_385M  \\\n0                               0.0  ...           None            None   \n1                               0.0  ...           None            None   \n2                               0.0  ...           None            None   \n3                               0.0  ...           None            None   \n4                               0.0  ...           None            None   \n...                             ...  ...            ...             ...   \n1526654                         0.0  ...       a55475b1        a55475b1   \n1526655                     68098.4  ...       a55475b1        a55475b1   \n1526656                         0.0  ...       a55475b1        a55475b1   \n1526657                     46806.6  ...       a55475b1        3439d993   \n1526658                         0.0  ...       a55475b1        b6cabe76   \n\n        maritalst_893M pmtaverage_4527227A  pmtssum_45A  \\\n0                 None                 NaN          NaN   \n1                 None                 NaN          NaN   \n2                 None                 NaN          NaN   \n3                 None                 NaN          NaN   \n4                 None                 NaN          NaN   \n...                ...                 ...          ...   \n1526654       a55475b1                 NaN          NaN   \n1526655       a55475b1                 NaN          NaN   \n1526656       a55475b1                 NaN          NaN   \n1526657       a55475b1                 NaN          NaN   \n1526658       a55475b1                 NaN          NaN   \n\n        mainoccupationinc_384A_max  mainoccupationinc_384A_any_selfemployed  \\\n0                          10800.0                                    False   \n1                          10000.0                                    False   \n2                          14000.0                                    False   \n3                          10000.0                                    False   \n4                          24000.0                                    False   \n...                            ...                                      ...   \n1526654                    40000.0                                    False   \n1526655                    36800.0                                    False   \n1526656                    30000.0                                    False   \n1526657                    30000.0                                    False   \n1526658                    39400.0                                    False   \n\n         person_housetype pmts_pmtsoverdue_635A_max pmts_dpdvalue_108P_over31  \n0                    None                       NaN                      None  \n1                    None                       NaN                      None  \n2                    None                       NaN                      None  \n3                    None                       NaN                      None  \n4                    None                       NaN                      None  \n...                   ...                       ...                       ...  \n1526654             OWNED                       NaN                      None  \n1526655              None                       NaN                      None  \n1526656              None                       NaN                      None  \n1526657              None                       NaN                      None  \n1526658              None                       NaN                      None  \n\n[1526659 rows x 45 columns]","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>case_id</th>\n      <th>date_decision</th>\n      <th>MONTH</th>\n      <th>WEEK_NUM</th>\n      <th>target</th>\n      <th>amtinstpaidbefduel24m_4187115A</th>\n      <th>annuitynextmonth_57A</th>\n      <th>avginstallast24m_3658937A</th>\n      <th>avglnamtstart24m_4525187A</th>\n      <th>currdebtcredtyperange_828A</th>\n      <th>...</th>\n      <th>education_88M</th>\n      <th>maritalst_385M</th>\n      <th>maritalst_893M</th>\n      <th>pmtaverage_4527227A</th>\n      <th>pmtssum_45A</th>\n      <th>mainoccupationinc_384A_max</th>\n      <th>mainoccupationinc_384A_any_selfemployed</th>\n      <th>person_housetype</th>\n      <th>pmts_pmtsoverdue_635A_max</th>\n      <th>pmts_dpdvalue_108P_over31</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>2019-01-03</td>\n      <td>201901</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>10800.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>2019-01-03</td>\n      <td>201901</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>10000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>2019-01-04</td>\n      <td>201901</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>14000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3</td>\n      <td>2019-01-03</td>\n      <td>201901</td>\n      <td>0</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>10000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>4</td>\n      <td>2019-01-04</td>\n      <td>201901</td>\n      <td>0</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>24000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>1526654</th>\n      <td>2703450</td>\n      <td>2020-10-05</td>\n      <td>202010</td>\n      <td>91</td>\n      <td>0</td>\n      <td>176561.36</td>\n      <td>0.0</td>\n      <td>7356.8003</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>40000.0</td>\n      <td>False</td>\n      <td>OWNED</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1526655</th>\n      <td>2703451</td>\n      <td>2020-10-05</td>\n      <td>202010</td>\n      <td>91</td>\n      <td>0</td>\n      <td>301276.47</td>\n      <td>6191.6</td>\n      <td>12553.2000</td>\n      <td>NaN</td>\n      <td>68098.4</td>\n      <td>...</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36800.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1526656</th>\n      <td>2703452</td>\n      <td>2020-10-05</td>\n      <td>202010</td>\n      <td>91</td>\n      <td>0</td>\n      <td>14232.40</td>\n      <td>0.0</td>\n      <td>2662.4001</td>\n      <td>NaN</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>30000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1526657</th>\n      <td>2703453</td>\n      <td>2020-10-05</td>\n      <td>202010</td>\n      <td>91</td>\n      <td>0</td>\n      <td>197371.58</td>\n      <td>2827.2</td>\n      <td>8212.6010</td>\n      <td>NaN</td>\n      <td>46806.6</td>\n      <td>...</td>\n      <td>a55475b1</td>\n      <td>3439d993</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>30000.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1526658</th>\n      <td>2703454</td>\n      <td>2020-10-05</td>\n      <td>202010</td>\n      <td>91</td>\n      <td>0</td>\n      <td>82949.60</td>\n      <td>2986.8</td>\n      <td>6405.4000</td>\n      <td>15998.0</td>\n      <td>0.0</td>\n      <td>...</td>\n      <td>a55475b1</td>\n      <td>b6cabe76</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>39400.0</td>\n      <td>False</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n    </tr>\n  </tbody>\n</table>\n<p>1526659 rows × 45 columns</p>\n</div>"},"metadata":{}}]},{"cell_type":"markdown","source":"drop the less correlated columns","metadata":{"id":"_n83ddlEhazO"}},{"cell_type":"markdown","source":"# Handling Nan Vaues","metadata":{"id":"XHDUzxQrhazP"}},{"cell_type":"code","source":"pd_df.isnull().sum()","metadata":{"id":"xePbLjeqhazP","colab":{"base_uri":"https://localhost:8080/"},"outputId":"c80cc22e-1e68-404c-8162-cda53b39bc9f","execution":{"iopub.status.busy":"2024-04-22T00:45:42.340951Z","iopub.execute_input":"2024-04-22T00:45:42.341383Z","iopub.status.idle":"2024-04-22T00:45:44.749394Z","shell.execute_reply.started":"2024-04-22T00:45:42.341353Z","shell.execute_reply":"2024-04-22T00:45:44.748337Z"},"trusted":true},"execution_count":11,"outputs":[{"execution_count":11,"output_type":"execute_result","data":{"text/plain":"case_id                                          0\ndate_decision                                    0\nMONTH                                            0\nWEEK_NUM                                         0\ntarget                                           0\namtinstpaidbefduel24m_4187115A              561124\nannuitynextmonth_57A                             4\navginstallast24m_3658937A                   624875\navglnamtstart24m_4525187A                  1364150\ncurrdebtcredtyperange_828A                       4\ndisbursedcredamount_1113A                        0\ndownpmt_116A                                     0\nlastapprcommoditycat_1041M                       0\nlastapprcommoditytypec_5251766M                  0\nlastapprcredamount_781A                     442041\nlastcancelreason_561M                            0\nlastotherinc_902A                          1523603\nlastotherlnsexpense_631A                   1523601\nlastrejectcommoditycat_161M                      0\nlastrejectcommodtypec_5251769M                   0\nlastrejectcredamount_222A                   769046\nlastrejectreason_759M                            0\nlastrejectreasonclient_4145040M                  0\nmaininc_215A                                511255\nmaxannuity_159A                             306019\nmaxannuity_4075009A                        1450726\nmaxinstallast24m_3658928A                   624875\nmaxlnamtstart6m_4525199A                   1032856\npreviouscontdistrict_112M                        0\nprice_1097A                                 223240\nsumoutstandtotalest_4493215A                840646\ntotalsettled_863A                                4\ntotinstallast1m_4525188A                   1174211\ndescription_5085714M                         26183\neducation_1103M                              26183\neducation_88M                                26183\nmaritalst_385M                               26183\nmaritalst_893M                               26183\npmtaverage_4527227A                        1411681\npmtssum_45A                                 954021\nmainoccupationinc_384A_max                       0\nmainoccupationinc_384A_any_selfemployed          0\nperson_housetype                           1425841\npmts_pmtsoverdue_635A_max                  1490244\npmts_dpdvalue_108P_over31                  1490244\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"null_counts = pd_df.isnull().sum()\ncolumns_to_drop = null_counts[null_counts < 5].index\n\n# Drop rows where any of the specified columns have null values\npd_df_filtered = pd_df.dropna(subset=columns_to_drop)","metadata":{"id":"ee5OYtw4hazP","execution":{"iopub.status.busy":"2024-04-22T00:45:44.75112Z","iopub.execute_input":"2024-04-22T00:45:44.751904Z","iopub.status.idle":"2024-04-22T00:45:49.56323Z","shell.execute_reply.started":"2024-04-22T00:45:44.751852Z","shell.execute_reply":"2024-04-22T00:45:49.561662Z"},"trusted":true},"execution_count":12,"outputs":[]},{"cell_type":"code","source":"null_counts = pd_df_filtered.isnull().sum()\ncolumns_with_null_values = null_counts[null_counts > 0].index","metadata":{"id":"-n3A66sihazP","execution":{"iopub.status.busy":"2024-04-22T00:45:49.565335Z","iopub.execute_input":"2024-04-22T00:45:49.565945Z","iopub.status.idle":"2024-04-22T00:45:52.017785Z","shell.execute_reply.started":"2024-04-22T00:45:49.565877Z","shell.execute_reply":"2024-04-22T00:45:52.016671Z"},"trusted":true},"execution_count":13,"outputs":[]},{"cell_type":"code","source":"# Iterate through columns with null values\nfor column in columns_with_null_values:\n    print(\"Column:\", column)\n    print(pd_df_filtered[column].value_counts())\n    print()","metadata":{"id":"ZomDTQ2-hazP","colab":{"base_uri":"https://localhost:8080/"},"outputId":"bc72589e-4b47-4f1e-87ca-6e160b0ba815","execution":{"iopub.status.busy":"2024-04-22T00:45:52.019184Z","iopub.execute_input":"2024-04-22T00:45:52.020845Z","iopub.status.idle":"2024-04-22T00:45:54.446956Z","shell.execute_reply.started":"2024-04-22T00:45:52.020795Z","shell.execute_reply":"2024-04-22T00:45:54.445781Z"},"trusted":true},"execution_count":14,"outputs":[{"name":"stdout","text":"Column: amtinstpaidbefduel24m_4187115A\namtinstpaidbefduel24m_4187115A\n0.00         161063\n800.00           89\n6000.00          84\n4000.00          79\n13998.00         76\n              ...  \n154158.00         1\n31457.40          1\n197189.20         1\n84353.69          1\n82949.60          1\nName: count, Length: 610152, dtype: int64\n\nColumn: avginstallast24m_3658937A\navginstallast24m_3658937A\n800.00000      217\n2000.00000     206\n600.00000      194\n1999.80000     161\n667.20000      150\n              ... \n97268.00000      1\n25699.60000      1\n22737.80000      1\n570.60004        1\n17366.40000      1\nName: count, Length: 92853, dtype: int64\n\nColumn: avglnamtstart24m_4525187A\navglnamtstart24m_4525187A\n100000.0    2182\n40000.0     1037\n20000.0     1034\n60000.0      920\n150000.0     866\n            ... \n29839.6        1\n45003.2        1\n18600.4        1\n6490.6         1\n18680.6        1\nName: count, Length: 57039, dtype: int64\n\nColumn: lastapprcredamount_781A\nlastapprcredamount_781A\n0.0000         57679\n100000.0000    37549\n20000.0000     23968\n40000.0000     23577\n60000.0000     20633\n               ...  \n57450.0000         1\n6488.8003          1\n81888.0000         1\n19499.8000         1\n166065.8000        1\nName: count, Length: 129485, dtype: int64\n\nColumn: lastotherinc_902A\nlastotherinc_902A\n0.2000        2353\n0.0000         453\n3000.0000       25\n6000.0000       21\n30000.0000      17\n              ... \n6437.2000        1\n4928.8003        1\n13200.0000       1\n10507.2000       1\n8303.2000        1\nName: count, Length: 101, dtype: int64\n\nColumn: lastotherlnsexpense_631A\nlastotherlnsexpense_631A\n0.0        1859\n30000.0      68\n200.0        67\n20000.0      62\n400.0        48\n           ... \n39600.0       1\n96000.0       1\n2800.0        1\n2860.0        1\n880.0         1\nName: count, Length: 232, dtype: int64\n\nColumn: lastrejectcredamount_222A\nlastrejectcredamount_222A\n100000.000    56728\n60000.000     43182\n0.000         41303\n40000.000     40769\n20000.000     37582\n              ...  \n8347.000          1\n18191.201         1\n111768.400        1\n20040.800         1\n93969.200         1\nName: count, Length: 76040, dtype: int64\n\nColumn: maininc_215A\nmaininc_215A\n40000.0    94979\n30000.0    84774\n50000.0    83968\n60000.0    70515\n70000.0    44879\n           ...  \n51284.2        1\n62052.8        1\n1351.6         1\n29093.0        1\n9088.2         1\nName: count, Length: 7738, dtype: int64\n\nColumn: maxannuity_159A\nmaxannuity_159A\n0.000        149016\n4000.000      10864\n2000.000       8423\n6000.000       8158\n3000.000       7533\n              ...  \n8273.257          1\n9913.544          1\n34719.070         1\n13521.200         1\n16148.929         1\nName: count, Length: 351075, dtype: int64\n\nColumn: maxannuity_4075009A\nmaxannuity_4075009A\n150000.0    2084\n200000.0    1270\n16060.0     1068\n14440.0      985\n400000.0     834\n            ... \n66040.0        1\n78460.0        1\n85380.0        1\n76980.0        1\n60900.0        1\nName: count, Length: 4621, dtype: int64\n\nColumn: maxinstallast24m_3658928A\nmaxinstallast24m_3658928A\n800.000       1772\n600.000        675\n1000.000       427\n2000.000       310\n3000.000       187\n              ... \n14031.601        1\n26868.201        1\n25556.201        1\n132006.000       1\n40499.800        1\nName: count, Length: 205591, dtype: int64\n\nColumn: maxlnamtstart6m_4525199A\nmaxlnamtstart6m_4525199A\n100000.000    3885\n0.000         2425\n40000.000     1382\n150000.000    1320\n60000.000     1296\n              ... \n47806.600        1\n33874.800        1\n13351.000        1\n52527.402        1\n55411.800        1\nName: count, Length: 229584, dtype: int64\n\nColumn: price_1097A\nprice_1097A\n0.000         164190\n17998.000       6426\n23998.000       5496\n19998.000       5292\n13998.000       5175\n               ...  \n85782.000          1\n55444.000          1\n15375.601          1\n271912.000         1\n79358.000          1\nName: count, Length: 173566, dtype: int64\n\nColumn: sumoutstandtotalest_4493215A\nsumoutstandtotalest_4493215A\n0.00000         364587\n10.00000           148\n11998.00000        124\n9998.00000         118\n7998.00000         108\n                 ...  \n6534.27830           1\n264839.60000         1\n14874.71300          1\n338.80002            1\n8919.20000           1\nName: count, Length: 252286, dtype: int64\n\nColumn: totinstallast1m_4525188A\ntotinstallast1m_4525188A\n600.000      775\n1200.000     461\n2000.000     219\n3000.000     169\n4000.000     158\n            ... \n72853.555      1\n26113.256      1\n16944.357      1\n13971.950      1\n40499.805      1\nName: count, Length: 130315, dtype: int64\n\nColumn: description_5085714M\ndescription_5085714M\na55475b1    1316123\n2fc785b2     184349\nName: count, dtype: int64\n\nColumn: education_1103M\neducation_1103M\na55475b1    859958\n6b2ae0fa    452449\n717ddd49    135342\n39a0853f     47140\nc8e1a1d0      5583\nName: count, dtype: int64\n\nColumn: education_88M\neducation_88M\na55475b1    1484956\n6b2ae0fa      11673\n717ddd49       3280\na34a13c8        437\nc8e1a1d0        126\nName: count, dtype: int64\n\nColumn: maritalst_385M\nmaritalst_385M\na55475b1    661588\n3439d993    550336\na7fcb6e5    201050\nb6cabe76     55900\n38c061ee     26851\necd83604      4747\nName: count, dtype: int64\n\nColumn: maritalst_893M\nmaritalst_893M\na55475b1    1479299\n46b968c3      13889\n1a19667c       5321\n977b2a70       1196\ne18430ff        678\necd83604         89\nName: count, dtype: int64\n\nColumn: pmtaverage_4527227A\npmtaverage_4527227A\n7222.2     6173\n7512.0     5844\n7223.4     3927\n7553.0     3395\n7222.6     2341\n           ... \n4947.6        1\n14228.8       1\n9779.8        1\n31933.8       1\n4329.0        1\nName: count, Length: 30526, dtype: int64\n\nColumn: pmtssum_45A\npmtssum_45A\n0.0000        90374\n5100.0000      7001\n6000.0000      3235\n2550.0000      2525\n850.0000       1747\n              ...  \n7736.0923         1\n18628.9730        1\n21144.0000        1\n22248.3800        1\n23062.0000        1\nName: count, Length: 265229, dtype: int64\n\nColumn: person_housetype\nperson_housetype\nOWNED           94076\nPARENTAL         4212\nFLAT             1501\nCOMPANY_FLAT      641\nCOOP_FLAT         222\nSTATE_FLAT        166\nName: count, dtype: int64\n\nColumn: pmts_pmtsoverdue_635A_max\npmts_pmtsoverdue_635A_max\n0.00000      20304\n0.20000       2247\n0.40000        785\n0.60000        639\n0.80000        638\n             ...  \n268.80002        1\n366.20000        1\n724.00000        1\n207.80000        1\n628.40000        1\nName: count, Length: 1725, dtype: int64\n\nColumn: pmts_dpdvalue_108P_over31\npmts_dpdvalue_108P_over31\nFalse    20603\nTrue     15812\nName: count, dtype: int64\n\n","output_type":"stream"}]},{"cell_type":"markdown","source":"Need to impute some columns","metadata":{}},{"cell_type":"code","source":"# Array containing column names where avg won't be a good fit for imputation\nspecified_columns = [\n    'amtinstpaidbefduel24m_4187115A', 'lastotherinc_902A', 'lastotherlnsexpense_631A',\n    'maxoutstandbalancel12m_4187113A', 'sumoutstandtotal_3546847A', 'sumoutstandtotalest_4493215A',\n    'description_5085714M', 'education_1103M', 'education_88M', 'maritalst_893M',\n    'pmtssum_45A', 'person_housetype', 'pmts_pmtsoverdue_635A_max'\n]\n\n# Select only numeric columns, excluding specified columns\nnumeric_columns = pd_df_filtered.select_dtypes(include=[np.number]).columns\n# columns_for_mean_imputation = [col for col in numeric_columns if col not in specified_columns and col in columns_with_null_values]\ncolumns_for_mean_imputation = [col for col in numeric_columns if col in columns_with_null_values]\n#  FOR NOW, REMOVED THE  col not in specified_columns and (I.E. doing mean imputation for all numerical columns containing NaN values)\n\n# Calculate means excluding specified columns\nmeans = pd_df_filtered[columns_for_mean_imputation].mean()\n\n# Replace NaN values with the mean for each eligible column\nfor column in columns_for_mean_imputation:\n    pd_df_filtered.loc[pd_df_filtered[column].isna(), column] = means[column]\n\n\nprint(pd_df_filtered)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:45:54.448344Z","iopub.execute_input":"2024-04-22T00:45:54.448695Z","iopub.status.idle":"2024-04-22T00:45:55.813115Z","shell.execute_reply.started":"2024-04-22T00:45:54.448665Z","shell.execute_reply":"2024-04-22T00:45:55.812092Z"},"trusted":true},"execution_count":15,"outputs":[{"name":"stdout","text":"         case_id date_decision   MONTH  WEEK_NUM  target  \\\n0              0    2019-01-03  201901         0       0   \n1              1    2019-01-03  201901         0       0   \n2              2    2019-01-04  201901         0       0   \n3              3    2019-01-03  201901         0       0   \n4              4    2019-01-04  201901         0       1   \n...          ...           ...     ...       ...     ...   \n1526654  2703450    2020-10-05  202010        91       0   \n1526655  2703451    2020-10-05  202010        91       0   \n1526656  2703452    2020-10-05  202010        91       0   \n1526657  2703453    2020-10-05  202010        91       0   \n1526658  2703454    2020-10-05  202010        91       0   \n\n         amtinstpaidbefduel24m_4187115A  annuitynextmonth_57A  \\\n0                          55958.371939                   0.0   \n1                          55958.371939                   0.0   \n2                          55958.371939                   0.0   \n3                          55958.371939                   0.0   \n4                          55958.371939                   0.0   \n...                                 ...                   ...   \n1526654                   176561.360000                   0.0   \n1526655                   301276.470000                6191.6   \n1526656                    14232.400000                   0.0   \n1526657                   197371.580000                2827.2   \n1526658                    82949.600000                2986.8   \n\n         avginstallast24m_3658937A  avglnamtstart24m_4525187A  \\\n0                      5401.590717               44717.566753   \n1                      5401.590717               44717.566753   \n2                      5401.590717               44717.566753   \n3                      5401.590717               44717.566753   \n4                      5401.590717               44717.566753   \n...                            ...                        ...   \n1526654                7356.800300               44717.566753   \n1526655               12553.200000               44717.566753   \n1526656                2662.400100               44717.566753   \n1526657                8212.601000               44717.566753   \n1526658                6405.400000               15998.000000   \n\n         currdebtcredtyperange_828A  ...  education_88M  maritalst_385M  \\\n0                               0.0  ...           None            None   \n1                               0.0  ...           None            None   \n2                               0.0  ...           None            None   \n3                               0.0  ...           None            None   \n4                               0.0  ...           None            None   \n...                             ...  ...            ...             ...   \n1526654                         0.0  ...       a55475b1        a55475b1   \n1526655                     68098.4  ...       a55475b1        a55475b1   \n1526656                         0.0  ...       a55475b1        a55475b1   \n1526657                     46806.6  ...       a55475b1        3439d993   \n1526658                         0.0  ...       a55475b1        b6cabe76   \n\n        maritalst_893M pmtaverage_4527227A  pmtssum_45A  \\\n0                 None        10033.556094  13199.93597   \n1                 None        10033.556094  13199.93597   \n2                 None        10033.556094  13199.93597   \n3                 None        10033.556094  13199.93597   \n4                 None        10033.556094  13199.93597   \n...                ...                 ...          ...   \n1526654       a55475b1        10033.556094  13199.93597   \n1526655       a55475b1        10033.556094  13199.93597   \n1526656       a55475b1        10033.556094  13199.93597   \n1526657       a55475b1        10033.556094  13199.93597   \n1526658       a55475b1        10033.556094  13199.93597   \n\n        mainoccupationinc_384A_max  mainoccupationinc_384A_any_selfemployed  \\\n0                          10800.0                                    False   \n1                          10000.0                                    False   \n2                          14000.0                                    False   \n3                          10000.0                                    False   \n4                          24000.0                                    False   \n...                            ...                                      ...   \n1526654                    40000.0                                    False   \n1526655                    36800.0                                    False   \n1526656                    30000.0                                    False   \n1526657                    30000.0                                    False   \n1526658                    39400.0                                    False   \n\n         person_housetype pmts_pmtsoverdue_635A_max pmts_dpdvalue_108P_over31  \n0                    None                 36.426704                      None  \n1                    None                 36.426704                      None  \n2                    None                 36.426704                      None  \n3                    None                 36.426704                      None  \n4                    None                 36.426704                      None  \n...                   ...                       ...                       ...  \n1526654             OWNED                 36.426704                      None  \n1526655              None                 36.426704                      None  \n1526656              None                 36.426704                      None  \n1526657              None                 36.426704                      None  \n1526658              None                 36.426704                      None  \n\n[1526655 rows x 45 columns]\n","output_type":"stream"}]},{"cell_type":"code","source":"pd_df_filtered.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:45:55.814684Z","iopub.execute_input":"2024-04-22T00:45:55.815153Z","iopub.status.idle":"2024-04-22T00:45:58.237794Z","shell.execute_reply.started":"2024-04-22T00:45:55.815116Z","shell.execute_reply":"2024-04-22T00:45:58.236185Z"},"trusted":true},"execution_count":16,"outputs":[{"execution_count":16,"output_type":"execute_result","data":{"text/plain":"case_id                                          0\ndate_decision                                    0\nMONTH                                            0\nWEEK_NUM                                         0\ntarget                                           0\namtinstpaidbefduel24m_4187115A                   0\nannuitynextmonth_57A                             0\navginstallast24m_3658937A                        0\navglnamtstart24m_4525187A                        0\ncurrdebtcredtyperange_828A                       0\ndisbursedcredamount_1113A                        0\ndownpmt_116A                                     0\nlastapprcommoditycat_1041M                       0\nlastapprcommoditytypec_5251766M                  0\nlastapprcredamount_781A                          0\nlastcancelreason_561M                            0\nlastotherinc_902A                                0\nlastotherlnsexpense_631A                         0\nlastrejectcommoditycat_161M                      0\nlastrejectcommodtypec_5251769M                   0\nlastrejectcredamount_222A                        0\nlastrejectreason_759M                            0\nlastrejectreasonclient_4145040M                  0\nmaininc_215A                                     0\nmaxannuity_159A                                  0\nmaxannuity_4075009A                              0\nmaxinstallast24m_3658928A                        0\nmaxlnamtstart6m_4525199A                         0\npreviouscontdistrict_112M                        0\nprice_1097A                                      0\nsumoutstandtotalest_4493215A                     0\ntotalsettled_863A                                0\ntotinstallast1m_4525188A                         0\ndescription_5085714M                         26183\neducation_1103M                              26183\neducation_88M                                26183\nmaritalst_385M                               26183\nmaritalst_893M                               26183\npmtaverage_4527227A                              0\npmtssum_45A                                      0\nmainoccupationinc_384A_max                       0\nmainoccupationinc_384A_any_selfemployed          0\nperson_housetype                           1425837\npmts_pmtsoverdue_635A_max                        0\npmts_dpdvalue_108P_over31                  1490240\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"columns_to_one_hot_encode = [\n    'description_5085714M', 'education_1103M', 'education_88M',\n    'maritalst_385M', 'maritalst_893M', 'person_housetype',\n    'pmts_dpdvalue_108P_over31'\n]\n\n# Perform one-hot encoding and treat NaN as a separate category\nfor column in columns_to_one_hot_encode:\n    # Use get_dummies to encode the data, treating NaN as its own category\n    encoded_columns = pd.get_dummies(pd_df_filtered[column], prefix=column, dummy_na=True)\n    # Drop the original column as it is now encoded\n    pd_df_filtered = pd_df_filtered.drop(column, axis=1)\n    # Join the encoded columns to the original DataFrame\n    pd_df_filtered = pd_df_filtered.join(encoded_columns)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:45:58.240138Z","iopub.execute_input":"2024-04-22T00:45:58.240646Z","iopub.status.idle":"2024-04-22T00:46:05.993917Z","shell.execute_reply.started":"2024-04-22T00:45:58.240606Z","shell.execute_reply":"2024-04-22T00:46:05.992654Z"},"trusted":true},"execution_count":17,"outputs":[]},{"cell_type":"code","source":"pd_df_filtered['target'].value_counts()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:46:05.995519Z","iopub.execute_input":"2024-04-22T00:46:05.995992Z","iopub.status.idle":"2024-04-22T00:46:06.024733Z","shell.execute_reply.started":"2024-04-22T00:46:05.995953Z","shell.execute_reply":"2024-04-22T00:46:06.022943Z"},"trusted":true},"execution_count":18,"outputs":[{"execution_count":18,"output_type":"execute_result","data":{"text/plain":"target\n0    1478661\n1      47994\nName: count, dtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"# Set display options to show all rows and columns without truncation\npd.set_option('display.max_rows', None)\npd.set_option('display.max_columns', None)\npd.set_option('display.width', None)\npd.set_option('display.max_colwidth', None)\n\nnum_columns = pd_df_filtered.shape[1]\n\n# Print the number of columns\nprint(\"Number of columns:\", num_columns)\npd_df_filtered.dtypes","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:46:06.026738Z","iopub.execute_input":"2024-04-22T00:46:06.027271Z","iopub.status.idle":"2024-04-22T00:46:06.046435Z","shell.execute_reply.started":"2024-04-22T00:46:06.027229Z","shell.execute_reply":"2024-04-22T00:46:06.04526Z"},"trusted":true},"execution_count":19,"outputs":[{"name":"stdout","text":"Number of columns: 77\n","output_type":"stream"},{"execution_count":19,"output_type":"execute_result","data":{"text/plain":"case_id                                      int64\ndate_decision                               object\nMONTH                                        int64\nWEEK_NUM                                     int64\ntarget                                       int64\namtinstpaidbefduel24m_4187115A             float64\nannuitynextmonth_57A                       float64\navginstallast24m_3658937A                  float64\navglnamtstart24m_4525187A                  float64\ncurrdebtcredtyperange_828A                 float64\ndisbursedcredamount_1113A                  float64\ndownpmt_116A                               float64\nlastapprcommoditycat_1041M                  object\nlastapprcommoditytypec_5251766M             object\nlastapprcredamount_781A                    float64\nlastcancelreason_561M                       object\nlastotherinc_902A                          float64\nlastotherlnsexpense_631A                   float64\nlastrejectcommoditycat_161M                 object\nlastrejectcommodtypec_5251769M              object\nlastrejectcredamount_222A                  float64\nlastrejectreason_759M                       object\nlastrejectreasonclient_4145040M             object\nmaininc_215A                               float64\nmaxannuity_159A                            float64\nmaxannuity_4075009A                        float64\nmaxinstallast24m_3658928A                  float64\nmaxlnamtstart6m_4525199A                   float64\npreviouscontdistrict_112M                   object\nprice_1097A                                float64\nsumoutstandtotalest_4493215A               float64\ntotalsettled_863A                          float64\ntotinstallast1m_4525188A                   float64\npmtaverage_4527227A                        float64\npmtssum_45A                                float64\nmainoccupationinc_384A_max                 float64\nmainoccupationinc_384A_any_selfemployed       bool\npmts_pmtsoverdue_635A_max                  float64\ndescription_5085714M_2fc785b2                 bool\ndescription_5085714M_a55475b1                 bool\ndescription_5085714M_nan                      bool\neducation_1103M_39a0853f                      bool\neducation_1103M_6b2ae0fa                      bool\neducation_1103M_717ddd49                      bool\neducation_1103M_a55475b1                      bool\neducation_1103M_c8e1a1d0                      bool\neducation_1103M_nan                           bool\neducation_88M_6b2ae0fa                        bool\neducation_88M_717ddd49                        bool\neducation_88M_a34a13c8                        bool\neducation_88M_a55475b1                        bool\neducation_88M_c8e1a1d0                        bool\neducation_88M_nan                             bool\nmaritalst_385M_3439d993                       bool\nmaritalst_385M_38c061ee                       bool\nmaritalst_385M_a55475b1                       bool\nmaritalst_385M_a7fcb6e5                       bool\nmaritalst_385M_b6cabe76                       bool\nmaritalst_385M_ecd83604                       bool\nmaritalst_385M_nan                            bool\nmaritalst_893M_1a19667c                       bool\nmaritalst_893M_46b968c3                       bool\nmaritalst_893M_977b2a70                       bool\nmaritalst_893M_a55475b1                       bool\nmaritalst_893M_e18430ff                       bool\nmaritalst_893M_ecd83604                       bool\nmaritalst_893M_nan                            bool\nperson_housetype_COMPANY_FLAT                 bool\nperson_housetype_COOP_FLAT                    bool\nperson_housetype_FLAT                         bool\nperson_housetype_OWNED                        bool\nperson_housetype_PARENTAL                     bool\nperson_housetype_STATE_FLAT                   bool\nperson_housetype_nan                          bool\npmts_dpdvalue_108P_over31_False               bool\npmts_dpdvalue_108P_over31_True                bool\npmts_dpdvalue_108P_over31_nan                 bool\ndtype: object"},"metadata":{}}]},{"cell_type":"code","source":"pd_df = pd_df_filtered","metadata":{"execution":{"iopub.status.busy":"2024-04-22T00:46:06.047692Z","iopub.execute_input":"2024-04-22T00:46:06.048148Z","iopub.status.idle":"2024-04-22T00:46:06.059993Z","shell.execute_reply.started":"2024-04-22T00:46:06.048113Z","shell.execute_reply":"2024-04-22T00:46:06.058716Z"},"trusted":true},"execution_count":20,"outputs":[]},{"cell_type":"code","source":"#Convert date_decision to weekday and month decision\n\npd_df[\"date_decision\"] = pd.to_datetime(pd_df[\"date_decision\"])  # Ensure it's a datetime type\n\n# Create new columns for month and weekday\npd_df[\"month_decision\"] =pd_df[\"date_decision\"].dt.month\npd_df[\"weekday_decision\"] = pd_df[\"date_decision\"].dt.weekday  # 0=Monday, 6=Sunday\n\npd_df.drop(columns=['date_decision','MONTH'], inplace=True)\npd_df","metadata":{"id":"SCjSqr94hazT","execution":{"iopub.status.busy":"2024-04-22T00:46:06.062851Z","iopub.execute_input":"2024-04-22T00:46:06.063477Z","iopub.status.idle":"2024-04-22T01:11:15.069649Z","shell.execute_reply.started":"2024-04-22T00:46:06.063441Z","shell.execute_reply":"2024-04-22T01:11:15.067199Z"},"trusted":true},"execution_count":21,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)","Cell \u001b[0;32mIn[21], line 10\u001b[0m\n\u001b[1;32m      7\u001b[0m pd_df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mweekday_decision\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m pd_df[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdate_decision\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mdt\u001b[38;5;241m.\u001b[39mweekday  \u001b[38;5;66;03m# 0=Monday, 6=Sunday\u001b[39;00m\n\u001b[1;32m      9\u001b[0m pd_df\u001b[38;5;241m.\u001b[39mdrop(columns\u001b[38;5;241m=\u001b[39m[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdate_decision\u001b[39m\u001b[38;5;124m'\u001b[39m,\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mMONTH\u001b[39m\u001b[38;5;124m'\u001b[39m], inplace\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m---> 10\u001b[0m pd_df\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/core/displayhook.py:268\u001b[0m, in \u001b[0;36mDisplayHook.__call__\u001b[0;34m(self, result)\u001b[0m\n\u001b[1;32m    266\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstart_displayhook()\n\u001b[1;32m    267\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mwrite_output_prompt()\n\u001b[0;32m--> 268\u001b[0m format_dict, md_dict \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompute_format_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresult\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    269\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mupdate_user_ns(result)\n\u001b[1;32m    270\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfill_exec_result(result)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/core/displayhook.py:157\u001b[0m, in \u001b[0;36mDisplayHook.compute_format_data\u001b[0;34m(self, result)\u001b[0m\n\u001b[1;32m    127\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mcompute_format_data\u001b[39m(\u001b[38;5;28mself\u001b[39m, result):\n\u001b[1;32m    128\u001b[0m \u001b[38;5;250m    \u001b[39m\u001b[38;5;124;03m\"\"\"Compute format data of the object to be displayed.\u001b[39;00m\n\u001b[1;32m    129\u001b[0m \n\u001b[1;32m    130\u001b[0m \u001b[38;5;124;03m    The format data is a generalization of the :func:`repr` of an object.\u001b[39;00m\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    155\u001b[0m \n\u001b[1;32m    156\u001b[0m \u001b[38;5;124;03m    \"\"\"\u001b[39;00m\n\u001b[0;32m--> 157\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshell\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdisplay_formatter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mformat\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresult\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/core/formatters.py:179\u001b[0m, in \u001b[0;36mDisplayFormatter.format\u001b[0;34m(self, obj, include, exclude)\u001b[0m\n\u001b[1;32m    177\u001b[0m md \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m    178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[43mformatter\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[1;32m    181\u001b[0m     \u001b[38;5;66;03m# FIXME: log the exception\u001b[39;00m\n\u001b[1;32m    182\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/decorator.py:232\u001b[0m, in \u001b[0;36mdecorate.<locals>.fun\u001b[0;34m(*args, **kw)\u001b[0m\n\u001b[1;32m    230\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m kwsyntax:\n\u001b[1;32m    231\u001b[0m     args, kw \u001b[38;5;241m=\u001b[39m fix(args, kw, sig)\n\u001b[0;32m--> 232\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mcaller\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfunc\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mextras\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/core/formatters.py:223\u001b[0m, in \u001b[0;36mcatch_format_error\u001b[0;34m(method, self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    221\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"show traceback on failed format call\"\"\"\u001b[39;00m\n\u001b[1;32m    222\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 223\u001b[0m     r \u001b[38;5;241m=\u001b[39m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    224\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m:\n\u001b[1;32m    225\u001b[0m     \u001b[38;5;66;03m# don't warn on NotImplementedErrors\u001b[39;00m\n\u001b[1;32m    226\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_return(\u001b[38;5;28;01mNone\u001b[39;00m, args[\u001b[38;5;241m0\u001b[39m])\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/core/formatters.py:708\u001b[0m, in \u001b[0;36mPlainTextFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m    701\u001b[0m stream \u001b[38;5;241m=\u001b[39m StringIO()\n\u001b[1;32m    702\u001b[0m printer \u001b[38;5;241m=\u001b[39m pretty\u001b[38;5;241m.\u001b[39mRepresentationPrinter(stream, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mverbose,\n\u001b[1;32m    703\u001b[0m     \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_width, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnewline,\n\u001b[1;32m    704\u001b[0m     max_seq_length\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmax_seq_length,\n\u001b[1;32m    705\u001b[0m     singleton_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msingleton_printers,\n\u001b[1;32m    706\u001b[0m     type_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtype_printers,\n\u001b[1;32m    707\u001b[0m     deferred_pprinters\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdeferred_printers)\n\u001b[0;32m--> 708\u001b[0m \u001b[43mprinter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpretty\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    709\u001b[0m printer\u001b[38;5;241m.\u001b[39mflush()\n\u001b[1;32m    710\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m stream\u001b[38;5;241m.\u001b[39mgetvalue()\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/lib/pretty.py:410\u001b[0m, in \u001b[0;36mRepresentationPrinter.pretty\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m    407\u001b[0m                         \u001b[38;5;28;01mreturn\u001b[39;00m meth(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m    408\u001b[0m                 \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mcls\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mobject\u001b[39m \\\n\u001b[1;32m    409\u001b[0m                         \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mcallable\u001b[39m(\u001b[38;5;28mcls\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__dict__\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__repr__\u001b[39m\u001b[38;5;124m'\u001b[39m)):\n\u001b[0;32m--> 410\u001b[0m                     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_repr_pprint\u001b[49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcycle\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    412\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m _default_pprint(obj, \u001b[38;5;28mself\u001b[39m, cycle)\n\u001b[1;32m    413\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/IPython/lib/pretty.py:778\u001b[0m, in \u001b[0;36m_repr_pprint\u001b[0;34m(obj, p, cycle)\u001b[0m\n\u001b[1;32m    776\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"A pprint that just redirects to the normal repr function.\"\"\"\u001b[39;00m\n\u001b[1;32m    777\u001b[0m \u001b[38;5;66;03m# Find newlines and replace them with p.break_()\u001b[39;00m\n\u001b[0;32m--> 778\u001b[0m output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mrepr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mobj\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    779\u001b[0m lines \u001b[38;5;241m=\u001b[39m output\u001b[38;5;241m.\u001b[39msplitlines()\n\u001b[1;32m    780\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m p\u001b[38;5;241m.\u001b[39mgroup():\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/frame.py:1214\u001b[0m, in \u001b[0;36mDataFrame.__repr__\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m   1211\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m buf\u001b[38;5;241m.\u001b[39mgetvalue()\n\u001b[1;32m   1213\u001b[0m repr_params \u001b[38;5;241m=\u001b[39m fmt\u001b[38;5;241m.\u001b[39mget_dataframe_repr_params()\n\u001b[0;32m-> 1214\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_string\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mrepr_params\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/util/_decorators.py:333\u001b[0m, in \u001b[0;36mdeprecate_nonkeyword_arguments.<locals>.decorate.<locals>.wrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    327\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(args) \u001b[38;5;241m>\u001b[39m num_allow_args:\n\u001b[1;32m    328\u001b[0m     warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[1;32m    329\u001b[0m         msg\u001b[38;5;241m.\u001b[39mformat(arguments\u001b[38;5;241m=\u001b[39m_format_argument_list(allow_args)),\n\u001b[1;32m    330\u001b[0m         \u001b[38;5;167;01mFutureWarning\u001b[39;00m,\n\u001b[1;32m    331\u001b[0m         stacklevel\u001b[38;5;241m=\u001b[39mfind_stack_level(),\n\u001b[1;32m    332\u001b[0m     )\n\u001b[0;32m--> 333\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/frame.py:1394\u001b[0m, in \u001b[0;36mDataFrame.to_string\u001b[0;34m(self, buf, columns, col_space, header, index, na_rep, formatters, float_format, sparsify, index_names, justify, max_rows, max_cols, show_dimensions, decimal, line_width, min_rows, max_colwidth, encoding)\u001b[0m\n\u001b[1;32m   1375\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m option_context(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdisplay.max_colwidth\u001b[39m\u001b[38;5;124m\"\u001b[39m, max_colwidth):\n\u001b[1;32m   1376\u001b[0m     formatter \u001b[38;5;241m=\u001b[39m fmt\u001b[38;5;241m.\u001b[39mDataFrameFormatter(\n\u001b[1;32m   1377\u001b[0m         \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m   1378\u001b[0m         columns\u001b[38;5;241m=\u001b[39mcolumns,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   1392\u001b[0m         decimal\u001b[38;5;241m=\u001b[39mdecimal,\n\u001b[1;32m   1393\u001b[0m     )\n\u001b[0;32m-> 1394\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfmt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mDataFrameRenderer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mformatter\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_string\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   1395\u001b[0m \u001b[43m        \u001b[49m\u001b[43mbuf\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbuf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1396\u001b[0m \u001b[43m        \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1397\u001b[0m \u001b[43m        \u001b[49m\u001b[43mline_width\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mline_width\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1398\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/format.py:962\u001b[0m, in \u001b[0;36mDataFrameRenderer.to_string\u001b[0;34m(self, buf, encoding, line_width)\u001b[0m\n\u001b[1;32m    959\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpandas\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mio\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mformats\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mstring\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m StringFormatter\n\u001b[1;32m    961\u001b[0m string_formatter \u001b[38;5;241m=\u001b[39m StringFormatter(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfmt, line_width\u001b[38;5;241m=\u001b[39mline_width)\n\u001b[0;32m--> 962\u001b[0m string \u001b[38;5;241m=\u001b[39m \u001b[43mstring_formatter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mto_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    963\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m save_to_buffer(string, buf\u001b[38;5;241m=\u001b[39mbuf, encoding\u001b[38;5;241m=\u001b[39mencoding)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/string.py:29\u001b[0m, in \u001b[0;36mStringFormatter.to_string\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     28\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mto_string\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[0;32m---> 29\u001b[0m     text \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_string_representation\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     30\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfmt\u001b[38;5;241m.\u001b[39mshould_show_dimensions:\n\u001b[1;32m     31\u001b[0m         text \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mtext\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfmt\u001b[38;5;241m.\u001b[39mdimensions_info\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/string.py:51\u001b[0m, in \u001b[0;36mStringFormatter._get_string_representation\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m     48\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39madj\u001b[38;5;241m.\u001b[39madjoin(\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m*\u001b[39mstrcols)\n\u001b[1;32m     50\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_need_to_wrap_around:\n\u001b[0;32m---> 51\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_join_multiline\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstrcols\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     53\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fit_strcols_to_terminal_width(strcols)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/string.py:149\u001b[0m, in \u001b[0;36mStringFormatter._join_multiline\u001b[0;34m(self, strcols_input)\u001b[0m\n\u001b[1;32m    147\u001b[0m         \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m    148\u001b[0m             row\u001b[38;5;241m.\u001b[39mappend([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m*\u001b[39m nrows)\n\u001b[0;32m--> 149\u001b[0m     str_lst\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madj\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43madjoin\u001b[49m\u001b[43m(\u001b[49m\u001b[43madjoin_width\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mrow\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[1;32m    150\u001b[0m     start \u001b[38;5;241m=\u001b[39m end\n\u001b[1;32m    151\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(str_lst)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/printing.py:525\u001b[0m, in \u001b[0;36m_TextAdjustment.adjoin\u001b[0;34m(self, space, *lists, **kwargs)\u001b[0m\n\u001b[1;32m    524\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21madjoin\u001b[39m(\u001b[38;5;28mself\u001b[39m, space: \u001b[38;5;28mint\u001b[39m, \u001b[38;5;241m*\u001b[39mlists, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mstr\u001b[39m:\n\u001b[0;32m--> 525\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43madjoin\u001b[49m\u001b[43m(\u001b[49m\u001b[43mspace\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mlists\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstrlen\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mlen\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjustfunc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mjustify\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/io/formats/printing.py:58\u001b[0m, in \u001b[0;36madjoin\u001b[0;34m(space, *lists, **kwargs)\u001b[0m\n\u001b[1;32m     56\u001b[0m     nl \u001b[38;5;241m=\u001b[39m justfunc(lst, lengths[i], mode\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mleft\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m     57\u001b[0m     nl \u001b[38;5;241m=\u001b[39m ([\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m*\u001b[39m lengths[i]] \u001b[38;5;241m*\u001b[39m (maxLen \u001b[38;5;241m-\u001b[39m \u001b[38;5;28mlen\u001b[39m(lst))) \u001b[38;5;241m+\u001b[39m nl\n\u001b[0;32m---> 58\u001b[0m     \u001b[43mnewLists\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mappend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnl\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m     59\u001b[0m toJoin \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mzip\u001b[39m(\u001b[38;5;241m*\u001b[39mnewLists)\n\u001b[1;32m     60\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39mjoin(lines) \u001b[38;5;28;01mfor\u001b[39;00m lines \u001b[38;5;129;01min\u001b[39;00m toJoin)\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "],"ename":"KeyboardInterrupt","evalue":"","output_type":"error"}]},{"cell_type":"code","source":"len(pd_df.columns)","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"N1-GTyM_NhTe","outputId":"b8d61ce6-f820-4cb7-ff46-eab698b73f36","execution":{"iopub.status.busy":"2024-04-22T01:12:42.014188Z","iopub.execute_input":"2024-04-22T01:12:42.014642Z","iopub.status.idle":"2024-04-22T01:12:42.024209Z","shell.execute_reply.started":"2024-04-22T01:12:42.014613Z","shell.execute_reply":"2024-04-22T01:12:42.022462Z"},"trusted":true},"execution_count":22,"outputs":[{"execution_count":22,"output_type":"execute_result","data":{"text/plain":"77"},"metadata":{}}]},{"cell_type":"code","source":"pd_df.columns","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:12:43.635779Z","iopub.execute_input":"2024-04-22T01:12:43.636318Z","iopub.status.idle":"2024-04-22T01:12:43.646657Z","shell.execute_reply.started":"2024-04-22T01:12:43.636284Z","shell.execute_reply":"2024-04-22T01:12:43.645613Z"},"trusted":true},"execution_count":23,"outputs":[{"execution_count":23,"output_type":"execute_result","data":{"text/plain":"Index(['case_id', 'WEEK_NUM', 'target', 'amtinstpaidbefduel24m_4187115A',\n       'annuitynextmonth_57A', 'avginstallast24m_3658937A',\n       'avglnamtstart24m_4525187A', 'currdebtcredtyperange_828A',\n       'disbursedcredamount_1113A', 'downpmt_116A',\n       'lastapprcommoditycat_1041M', 'lastapprcommoditytypec_5251766M',\n       'lastapprcredamount_781A', 'lastcancelreason_561M', 'lastotherinc_902A',\n       'lastotherlnsexpense_631A', 'lastrejectcommoditycat_161M',\n       'lastrejectcommodtypec_5251769M', 'lastrejectcredamount_222A',\n       'lastrejectreason_759M', 'lastrejectreasonclient_4145040M',\n       'maininc_215A', 'maxannuity_159A', 'maxannuity_4075009A',\n       'maxinstallast24m_3658928A', 'maxlnamtstart6m_4525199A',\n       'previouscontdistrict_112M', 'price_1097A',\n       'sumoutstandtotalest_4493215A', 'totalsettled_863A',\n       'totinstallast1m_4525188A', 'pmtaverage_4527227A', 'pmtssum_45A',\n       'mainoccupationinc_384A_max', 'mainoccupationinc_384A_any_selfemployed',\n       'pmts_pmtsoverdue_635A_max', 'description_5085714M_2fc785b2',\n       'description_5085714M_a55475b1', 'description_5085714M_nan',\n       'education_1103M_39a0853f', 'education_1103M_6b2ae0fa',\n       'education_1103M_717ddd49', 'education_1103M_a55475b1',\n       'education_1103M_c8e1a1d0', 'education_1103M_nan',\n       'education_88M_6b2ae0fa', 'education_88M_717ddd49',\n       'education_88M_a34a13c8', 'education_88M_a55475b1',\n       'education_88M_c8e1a1d0', 'education_88M_nan',\n       'maritalst_385M_3439d993', 'maritalst_385M_38c061ee',\n       'maritalst_385M_a55475b1', 'maritalst_385M_a7fcb6e5',\n       'maritalst_385M_b6cabe76', 'maritalst_385M_ecd83604',\n       'maritalst_385M_nan', 'maritalst_893M_1a19667c',\n       'maritalst_893M_46b968c3', 'maritalst_893M_977b2a70',\n       'maritalst_893M_a55475b1', 'maritalst_893M_e18430ff',\n       'maritalst_893M_ecd83604', 'maritalst_893M_nan',\n       'person_housetype_COMPANY_FLAT', 'person_housetype_COOP_FLAT',\n       'person_housetype_FLAT', 'person_housetype_OWNED',\n       'person_housetype_PARENTAL', 'person_housetype_STATE_FLAT',\n       'person_housetype_nan', 'pmts_dpdvalue_108P_over31_False',\n       'pmts_dpdvalue_108P_over31_True', 'pmts_dpdvalue_108P_over31_nan',\n       'month_decision', 'weekday_decision'],\n      dtype='object')"},"metadata":{}}]},{"cell_type":"code","source":"pd_df.head(5)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:12:46.326597Z","iopub.execute_input":"2024-04-22T01:12:46.327011Z","iopub.status.idle":"2024-04-22T01:12:46.400854Z","shell.execute_reply.started":"2024-04-22T01:12:46.326982Z","shell.execute_reply":"2024-04-22T01:12:46.399397Z"},"trusted":true},"execution_count":24,"outputs":[{"execution_count":24,"output_type":"execute_result","data":{"text/plain":"   case_id  WEEK_NUM  target  amtinstpaidbefduel24m_4187115A  \\\n0        0         0       0                    55958.371939   \n1        1         0       0                    55958.371939   \n2        2         0       0                    55958.371939   \n3        3         0       0                    55958.371939   \n4        4         0       1                    55958.371939   \n\n   annuitynextmonth_57A  avginstallast24m_3658937A  avglnamtstart24m_4525187A  \\\n0                   0.0                5401.590717               44717.566753   \n1                   0.0                5401.590717               44717.566753   \n2                   0.0                5401.590717               44717.566753   \n3                   0.0                5401.590717               44717.566753   \n4                   0.0                5401.590717               44717.566753   \n\n   currdebtcredtyperange_828A  disbursedcredamount_1113A  downpmt_116A  \\\n0                         0.0                    30000.0           0.0   \n1                         0.0                    19999.8           0.0   \n2                         0.0                    78000.0           0.0   \n3                         0.0                    40000.0           0.0   \n4                         0.0                    44000.0           0.0   \n\n  lastapprcommoditycat_1041M lastapprcommoditytypec_5251766M  \\\n0                   a55475b1                        a55475b1   \n1                   a55475b1                        a55475b1   \n2                   a55475b1                        a55475b1   \n3                   a55475b1                        a55475b1   \n4                   a55475b1                        a55475b1   \n\n   lastapprcredamount_781A lastcancelreason_561M  lastotherinc_902A  \\\n0             36890.370898              a55475b1         782.262163   \n1             36890.370898              a55475b1         782.262163   \n2             36890.370898              a55475b1         782.262163   \n3             36890.370898           P94_109_143         782.262163   \n4             36890.370898             P24_27_36         782.262163   \n\n   lastotherlnsexpense_631A lastrejectcommoditycat_161M  \\\n0               9367.174166                    a55475b1   \n1               9367.174166                    a55475b1   \n2               9367.174166                    a55475b1   \n3               9367.174166                    a55475b1   \n4               9367.174166                    a55475b1   \n\n  lastrejectcommodtypec_5251769M  lastrejectcredamount_222A  \\\n0                       a55475b1               51049.111779   \n1                       a55475b1               51049.111779   \n2                       a55475b1               10000.000000   \n3                       a55475b1               59999.800000   \n4                       a55475b1               51049.111779   \n\n  lastrejectreason_759M lastrejectreasonclient_4145040M  maininc_215A  \\\n0              a55475b1                        a55475b1  49485.688836   \n1              a55475b1                        a55475b1  49485.688836   \n2              a55475b1                        a55475b1  49485.688836   \n3           P94_109_143                        a55475b1  49485.688836   \n4              a55475b1                        a55475b1  49485.688836   \n\n   maxannuity_159A  maxannuity_4075009A  maxinstallast24m_3658928A  \\\n0              0.0         41559.724362               15394.124674   \n1              0.0         41559.724362               15394.124674   \n2              0.0         41559.724362               15394.124674   \n3              0.0         41559.724362               15394.124674   \n4              0.0         41559.724362               15394.124674   \n\n   maxlnamtstart6m_4525199A previouscontdistrict_112M   price_1097A  \\\n0              44908.606292                  a55475b1  34464.999507   \n1              44908.606292                  a55475b1  34464.999507   \n2              44908.606292                  a55475b1  34464.999507   \n3              44908.606292                  a55475b1  34464.999507   \n4              44908.606292                  a55475b1  34464.999507   \n\n   sumoutstandtotalest_4493215A  totalsettled_863A  totinstallast1m_4525188A  \\\n0                  28309.777969                0.0              10411.377565   \n1                  28309.777969                0.0              10411.377565   \n2                  28309.777969                0.0              10411.377565   \n3                  28309.777969                0.0              10411.377565   \n4                  28309.777969                0.0              10411.377565   \n\n   pmtaverage_4527227A  pmtssum_45A  mainoccupationinc_384A_max  \\\n0         10033.556094  13199.93597                     10800.0   \n1         10033.556094  13199.93597                     10000.0   \n2         10033.556094  13199.93597                     14000.0   \n3         10033.556094  13199.93597                     10000.0   \n4         10033.556094  13199.93597                     24000.0   \n\n   mainoccupationinc_384A_any_selfemployed  pmts_pmtsoverdue_635A_max  \\\n0                                    False                  36.426704   \n1                                    False                  36.426704   \n2                                    False                  36.426704   \n3                                    False                  36.426704   \n4                                    False                  36.426704   \n\n   description_5085714M_2fc785b2  description_5085714M_a55475b1  \\\n0                          False                          False   \n1                          False                          False   \n2                          False                          False   \n3                          False                          False   \n4                          False                          False   \n\n   description_5085714M_nan  education_1103M_39a0853f  \\\n0                      True                     False   \n1                      True                     False   \n2                      True                     False   \n3                      True                     False   \n4                      True                     False   \n\n   education_1103M_6b2ae0fa  education_1103M_717ddd49  \\\n0                     False                     False   \n1                     False                     False   \n2                     False                     False   \n3                     False                     False   \n4                     False                     False   \n\n   education_1103M_a55475b1  education_1103M_c8e1a1d0  education_1103M_nan  \\\n0                     False                     False                 True   \n1                     False                     False                 True   \n2                     False                     False                 True   \n3                     False                     False                 True   \n4                     False                     False                 True   \n\n   education_88M_6b2ae0fa  education_88M_717ddd49  education_88M_a34a13c8  \\\n0                   False                   False                   False   \n1                   False                   False                   False   \n2                   False                   False                   False   \n3                   False                   False                   False   \n4                   False                   False                   False   \n\n   education_88M_a55475b1  education_88M_c8e1a1d0  education_88M_nan  \\\n0                   False                   False               True   \n1                   False                   False               True   \n2                   False                   False               True   \n3                   False                   False               True   \n4                   False                   False               True   \n\n   maritalst_385M_3439d993  maritalst_385M_38c061ee  maritalst_385M_a55475b1  \\\n0                    False                    False                    False   \n1                    False                    False                    False   \n2                    False                    False                    False   \n3                    False                    False                    False   \n4                    False                    False                    False   \n\n   maritalst_385M_a7fcb6e5  maritalst_385M_b6cabe76  maritalst_385M_ecd83604  \\\n0                    False                    False                    False   \n1                    False                    False                    False   \n2                    False                    False                    False   \n3                    False                    False                    False   \n4                    False                    False                    False   \n\n   maritalst_385M_nan  maritalst_893M_1a19667c  maritalst_893M_46b968c3  \\\n0                True                    False                    False   \n1                True                    False                    False   \n2                True                    False                    False   \n3                True                    False                    False   \n4                True                    False                    False   \n\n   maritalst_893M_977b2a70  maritalst_893M_a55475b1  maritalst_893M_e18430ff  \\\n0                    False                    False                    False   \n1                    False                    False                    False   \n2                    False                    False                    False   \n3                    False                    False                    False   \n4                    False                    False                    False   \n\n   maritalst_893M_ecd83604  maritalst_893M_nan  person_housetype_COMPANY_FLAT  \\\n0                    False                True                          False   \n1                    False                True                          False   \n2                    False                True                          False   \n3                    False                True                          False   \n4                    False                True                          False   \n\n   person_housetype_COOP_FLAT  person_housetype_FLAT  person_housetype_OWNED  \\\n0                       False                  False                   False   \n1                       False                  False                   False   \n2                       False                  False                   False   \n3                       False                  False                   False   \n4                       False                  False                   False   \n\n   person_housetype_PARENTAL  person_housetype_STATE_FLAT  \\\n0                      False                        False   \n1                      False                        False   \n2                      False                        False   \n3                      False                        False   \n4                      False                        False   \n\n   person_housetype_nan  pmts_dpdvalue_108P_over31_False  \\\n0                  True                            False   \n1                  True                            False   \n2                  True                            False   \n3                  True                            False   \n4                  True                            False   \n\n   pmts_dpdvalue_108P_over31_True  pmts_dpdvalue_108P_over31_nan  \\\n0                           False                           True   \n1                           False                           True   \n2                           False                           True   \n3                           False                           True   \n4                           False                           True   \n\n   month_decision  weekday_decision  \n0               1                 3  \n1               1                 3  \n2               1                 4  \n3               1                 3  \n4               1                 4  ","text/html":"<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>case_id</th>\n      <th>WEEK_NUM</th>\n      <th>target</th>\n      <th>amtinstpaidbefduel24m_4187115A</th>\n      <th>annuitynextmonth_57A</th>\n      <th>avginstallast24m_3658937A</th>\n      <th>avglnamtstart24m_4525187A</th>\n      <th>currdebtcredtyperange_828A</th>\n      <th>disbursedcredamount_1113A</th>\n      <th>downpmt_116A</th>\n      <th>lastapprcommoditycat_1041M</th>\n      <th>lastapprcommoditytypec_5251766M</th>\n      <th>lastapprcredamount_781A</th>\n      <th>lastcancelreason_561M</th>\n      <th>lastotherinc_902A</th>\n      <th>lastotherlnsexpense_631A</th>\n      <th>lastrejectcommoditycat_161M</th>\n      <th>lastrejectcommodtypec_5251769M</th>\n      <th>lastrejectcredamount_222A</th>\n      <th>lastrejectreason_759M</th>\n      <th>lastrejectreasonclient_4145040M</th>\n      <th>maininc_215A</th>\n      <th>maxannuity_159A</th>\n      <th>maxannuity_4075009A</th>\n      <th>maxinstallast24m_3658928A</th>\n      <th>maxlnamtstart6m_4525199A</th>\n      <th>previouscontdistrict_112M</th>\n      <th>price_1097A</th>\n      <th>sumoutstandtotalest_4493215A</th>\n      <th>totalsettled_863A</th>\n      <th>totinstallast1m_4525188A</th>\n      <th>pmtaverage_4527227A</th>\n      <th>pmtssum_45A</th>\n      <th>mainoccupationinc_384A_max</th>\n      <th>mainoccupationinc_384A_any_selfemployed</th>\n      <th>pmts_pmtsoverdue_635A_max</th>\n      <th>description_5085714M_2fc785b2</th>\n      <th>description_5085714M_a55475b1</th>\n      <th>description_5085714M_nan</th>\n      <th>education_1103M_39a0853f</th>\n      <th>education_1103M_6b2ae0fa</th>\n      <th>education_1103M_717ddd49</th>\n      <th>education_1103M_a55475b1</th>\n      <th>education_1103M_c8e1a1d0</th>\n      <th>education_1103M_nan</th>\n      <th>education_88M_6b2ae0fa</th>\n      <th>education_88M_717ddd49</th>\n      <th>education_88M_a34a13c8</th>\n      <th>education_88M_a55475b1</th>\n      <th>education_88M_c8e1a1d0</th>\n      <th>education_88M_nan</th>\n      <th>maritalst_385M_3439d993</th>\n      <th>maritalst_385M_38c061ee</th>\n      <th>maritalst_385M_a55475b1</th>\n      <th>maritalst_385M_a7fcb6e5</th>\n      <th>maritalst_385M_b6cabe76</th>\n      <th>maritalst_385M_ecd83604</th>\n      <th>maritalst_385M_nan</th>\n      <th>maritalst_893M_1a19667c</th>\n      <th>maritalst_893M_46b968c3</th>\n      <th>maritalst_893M_977b2a70</th>\n      <th>maritalst_893M_a55475b1</th>\n      <th>maritalst_893M_e18430ff</th>\n      <th>maritalst_893M_ecd83604</th>\n      <th>maritalst_893M_nan</th>\n      <th>person_housetype_COMPANY_FLAT</th>\n      <th>person_housetype_COOP_FLAT</th>\n      <th>person_housetype_FLAT</th>\n      <th>person_housetype_OWNED</th>\n      <th>person_housetype_PARENTAL</th>\n      <th>person_housetype_STATE_FLAT</th>\n      <th>person_housetype_nan</th>\n      <th>pmts_dpdvalue_108P_over31_False</th>\n      <th>pmts_dpdvalue_108P_over31_True</th>\n      <th>pmts_dpdvalue_108P_over31_nan</th>\n      <th>month_decision</th>\n      <th>weekday_decision</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>0</td>\n      <td>0</td>\n      <td>55958.371939</td>\n      <td>0.0</td>\n      <td>5401.590717</td>\n      <td>44717.566753</td>\n      <td>0.0</td>\n      <td>30000.0</td>\n      <td>0.0</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>36890.370898</td>\n      <td>a55475b1</td>\n      <td>782.262163</td>\n      <td>9367.174166</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>51049.111779</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>49485.688836</td>\n      <td>0.0</td>\n      <td>41559.724362</td>\n      <td>15394.124674</td>\n      <td>44908.606292</td>\n      <td>a55475b1</td>\n      <td>34464.999507</td>\n      <td>28309.777969</td>\n      <td>0.0</td>\n      <td>10411.377565</td>\n      <td>10033.556094</td>\n      <td>13199.93597</td>\n      <td>10800.0</td>\n      <td>False</td>\n      <td>36.426704</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>55958.371939</td>\n      <td>0.0</td>\n      <td>5401.590717</td>\n      <td>44717.566753</td>\n      <td>0.0</td>\n      <td>19999.8</td>\n      <td>0.0</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>36890.370898</td>\n      <td>a55475b1</td>\n      <td>782.262163</td>\n      <td>9367.174166</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>51049.111779</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>49485.688836</td>\n      <td>0.0</td>\n      <td>41559.724362</td>\n      <td>15394.124674</td>\n      <td>44908.606292</td>\n      <td>a55475b1</td>\n      <td>34464.999507</td>\n      <td>28309.777969</td>\n      <td>0.0</td>\n      <td>10411.377565</td>\n      <td>10033.556094</td>\n      <td>13199.93597</td>\n      <td>10000.0</td>\n      <td>False</td>\n      <td>36.426704</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>0</td>\n      <td>0</td>\n      <td>55958.371939</td>\n      <td>0.0</td>\n      <td>5401.590717</td>\n      <td>44717.566753</td>\n      <td>0.0</td>\n      <td>78000.0</td>\n      <td>0.0</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>36890.370898</td>\n      <td>a55475b1</td>\n      <td>782.262163</td>\n      <td>9367.174166</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>10000.000000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>49485.688836</td>\n      <td>0.0</td>\n      <td>41559.724362</td>\n      <td>15394.124674</td>\n      <td>44908.606292</td>\n      <td>a55475b1</td>\n      <td>34464.999507</td>\n      <td>28309.777969</td>\n      <td>0.0</td>\n      <td>10411.377565</td>\n      <td>10033.556094</td>\n      <td>13199.93597</td>\n      <td>14000.0</td>\n      <td>False</td>\n      <td>36.426704</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>1</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3</td>\n      <td>0</td>\n      <td>0</td>\n      <td>55958.371939</td>\n      <td>0.0</td>\n      <td>5401.590717</td>\n      <td>44717.566753</td>\n      <td>0.0</td>\n      <td>40000.0</td>\n      <td>0.0</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>36890.370898</td>\n      <td>P94_109_143</td>\n      <td>782.262163</td>\n      <td>9367.174166</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>59999.800000</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>49485.688836</td>\n      <td>0.0</td>\n      <td>41559.724362</td>\n      <td>15394.124674</td>\n      <td>44908.606292</td>\n      <td>a55475b1</td>\n      <td>34464.999507</td>\n      <td>28309.777969</td>\n      <td>0.0</td>\n      <td>10411.377565</td>\n      <td>10033.556094</td>\n      <td>13199.93597</td>\n      <td>10000.0</td>\n      <td>False</td>\n      <td>36.426704</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>4</td>\n      <td>0</td>\n      <td>1</td>\n      <td>55958.371939</td>\n      <td>0.0</td>\n      <td>5401.590717</td>\n      <td>44717.566753</td>\n      <td>0.0</td>\n      <td>44000.0</td>\n      <td>0.0</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>36890.370898</td>\n      <td>P24_27_36</td>\n      <td>782.262163</td>\n      <td>9367.174166</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>51049.111779</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>49485.688836</td>\n      <td>0.0</td>\n      <td>41559.724362</td>\n      <td>15394.124674</td>\n      <td>44908.606292</td>\n      <td>a55475b1</td>\n      <td>34464.999507</td>\n      <td>28309.777969</td>\n      <td>0.0</td>\n      <td>10411.377565</td>\n      <td>10033.556094</td>\n      <td>13199.93597</td>\n      <td>24000.0</td>\n      <td>False</td>\n      <td>36.426704</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>False</td>\n      <td>False</td>\n      <td>True</td>\n      <td>1</td>\n      <td>4</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}]},{"cell_type":"code","source":"pd_df.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:13:06.22715Z","iopub.execute_input":"2024-04-22T01:13:06.227576Z","iopub.status.idle":"2024-04-22T01:13:07.664939Z","shell.execute_reply.started":"2024-04-22T01:13:06.227547Z","shell.execute_reply":"2024-04-22T01:13:07.663991Z"},"trusted":true},"execution_count":25,"outputs":[{"execution_count":25,"output_type":"execute_result","data":{"text/plain":"case_id                                    0\nWEEK_NUM                                   0\ntarget                                     0\namtinstpaidbefduel24m_4187115A             0\nannuitynextmonth_57A                       0\navginstallast24m_3658937A                  0\navglnamtstart24m_4525187A                  0\ncurrdebtcredtyperange_828A                 0\ndisbursedcredamount_1113A                  0\ndownpmt_116A                               0\nlastapprcommoditycat_1041M                 0\nlastapprcommoditytypec_5251766M            0\nlastapprcredamount_781A                    0\nlastcancelreason_561M                      0\nlastotherinc_902A                          0\nlastotherlnsexpense_631A                   0\nlastrejectcommoditycat_161M                0\nlastrejectcommodtypec_5251769M             0\nlastrejectcredamount_222A                  0\nlastrejectreason_759M                      0\nlastrejectreasonclient_4145040M            0\nmaininc_215A                               0\nmaxannuity_159A                            0\nmaxannuity_4075009A                        0\nmaxinstallast24m_3658928A                  0\nmaxlnamtstart6m_4525199A                   0\npreviouscontdistrict_112M                  0\nprice_1097A                                0\nsumoutstandtotalest_4493215A               0\ntotalsettled_863A                          0\ntotinstallast1m_4525188A                   0\npmtaverage_4527227A                        0\npmtssum_45A                                0\nmainoccupationinc_384A_max                 0\nmainoccupationinc_384A_any_selfemployed    0\npmts_pmtsoverdue_635A_max                  0\ndescription_5085714M_2fc785b2              0\ndescription_5085714M_a55475b1              0\ndescription_5085714M_nan                   0\neducation_1103M_39a0853f                   0\neducation_1103M_6b2ae0fa                   0\neducation_1103M_717ddd49                   0\neducation_1103M_a55475b1                   0\neducation_1103M_c8e1a1d0                   0\neducation_1103M_nan                        0\neducation_88M_6b2ae0fa                     0\neducation_88M_717ddd49                     0\neducation_88M_a34a13c8                     0\neducation_88M_a55475b1                     0\neducation_88M_c8e1a1d0                     0\neducation_88M_nan                          0\nmaritalst_385M_3439d993                    0\nmaritalst_385M_38c061ee                    0\nmaritalst_385M_a55475b1                    0\nmaritalst_385M_a7fcb6e5                    0\nmaritalst_385M_b6cabe76                    0\nmaritalst_385M_ecd83604                    0\nmaritalst_385M_nan                         0\nmaritalst_893M_1a19667c                    0\nmaritalst_893M_46b968c3                    0\nmaritalst_893M_977b2a70                    0\nmaritalst_893M_a55475b1                    0\nmaritalst_893M_e18430ff                    0\nmaritalst_893M_ecd83604                    0\nmaritalst_893M_nan                         0\nperson_housetype_COMPANY_FLAT              0\nperson_housetype_COOP_FLAT                 0\nperson_housetype_FLAT                      0\nperson_housetype_OWNED                     0\nperson_housetype_PARENTAL                  0\nperson_housetype_STATE_FLAT                0\nperson_housetype_nan                       0\npmts_dpdvalue_108P_over31_False            0\npmts_dpdvalue_108P_over31_True             0\npmts_dpdvalue_108P_over31_nan              0\nmonth_decision                             0\nweekday_decision                           0\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"pd_df.dtypes","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:13:11.772719Z","iopub.execute_input":"2024-04-22T01:13:11.773232Z","iopub.status.idle":"2024-04-22T01:13:11.787646Z","shell.execute_reply.started":"2024-04-22T01:13:11.773199Z","shell.execute_reply":"2024-04-22T01:13:11.786132Z"},"trusted":true},"execution_count":26,"outputs":[{"execution_count":26,"output_type":"execute_result","data":{"text/plain":"case_id                                      int64\nWEEK_NUM                                     int64\ntarget                                       int64\namtinstpaidbefduel24m_4187115A             float64\nannuitynextmonth_57A                       float64\navginstallast24m_3658937A                  float64\navglnamtstart24m_4525187A                  float64\ncurrdebtcredtyperange_828A                 float64\ndisbursedcredamount_1113A                  float64\ndownpmt_116A                               float64\nlastapprcommoditycat_1041M                  object\nlastapprcommoditytypec_5251766M             object\nlastapprcredamount_781A                    float64\nlastcancelreason_561M                       object\nlastotherinc_902A                          float64\nlastotherlnsexpense_631A                   float64\nlastrejectcommoditycat_161M                 object\nlastrejectcommodtypec_5251769M              object\nlastrejectcredamount_222A                  float64\nlastrejectreason_759M                       object\nlastrejectreasonclient_4145040M             object\nmaininc_215A                               float64\nmaxannuity_159A                            float64\nmaxannuity_4075009A                        float64\nmaxinstallast24m_3658928A                  float64\nmaxlnamtstart6m_4525199A                   float64\npreviouscontdistrict_112M                   object\nprice_1097A                                float64\nsumoutstandtotalest_4493215A               float64\ntotalsettled_863A                          float64\ntotinstallast1m_4525188A                   float64\npmtaverage_4527227A                        float64\npmtssum_45A                                float64\nmainoccupationinc_384A_max                 float64\nmainoccupationinc_384A_any_selfemployed       bool\npmts_pmtsoverdue_635A_max                  float64\ndescription_5085714M_2fc785b2                 bool\ndescription_5085714M_a55475b1                 bool\ndescription_5085714M_nan                      bool\neducation_1103M_39a0853f                      bool\neducation_1103M_6b2ae0fa                      bool\neducation_1103M_717ddd49                      bool\neducation_1103M_a55475b1                      bool\neducation_1103M_c8e1a1d0                      bool\neducation_1103M_nan                           bool\neducation_88M_6b2ae0fa                        bool\neducation_88M_717ddd49                        bool\neducation_88M_a34a13c8                        bool\neducation_88M_a55475b1                        bool\neducation_88M_c8e1a1d0                        bool\neducation_88M_nan                             bool\nmaritalst_385M_3439d993                       bool\nmaritalst_385M_38c061ee                       bool\nmaritalst_385M_a55475b1                       bool\nmaritalst_385M_a7fcb6e5                       bool\nmaritalst_385M_b6cabe76                       bool\nmaritalst_385M_ecd83604                       bool\nmaritalst_385M_nan                            bool\nmaritalst_893M_1a19667c                       bool\nmaritalst_893M_46b968c3                       bool\nmaritalst_893M_977b2a70                       bool\nmaritalst_893M_a55475b1                       bool\nmaritalst_893M_e18430ff                       bool\nmaritalst_893M_ecd83604                       bool\nmaritalst_893M_nan                            bool\nperson_housetype_COMPANY_FLAT                 bool\nperson_housetype_COOP_FLAT                    bool\nperson_housetype_FLAT                         bool\nperson_housetype_OWNED                        bool\nperson_housetype_PARENTAL                     bool\nperson_housetype_STATE_FLAT                   bool\nperson_housetype_nan                          bool\npmts_dpdvalue_108P_over31_False               bool\npmts_dpdvalue_108P_over31_True                bool\npmts_dpdvalue_108P_over31_nan                 bool\nmonth_decision                               int32\nweekday_decision                             int32\ndtype: object"},"metadata":{}}]},{"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\ncols = pd_df.select_dtypes(include=['category', 'object']).columns\n\nfor col in cols:\n    le = LabelEncoder()\n    pd_df[col] = le.fit_transform(pd_df[col])","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:13:14.649965Z","iopub.execute_input":"2024-04-22T01:13:14.650444Z","iopub.status.idle":"2024-04-22T01:13:18.029345Z","shell.execute_reply.started":"2024-04-22T01:13:14.65041Z","shell.execute_reply":"2024-04-22T01:13:18.027812Z"},"trusted":true},"execution_count":27,"outputs":[]},{"cell_type":"code","source":"pd_df.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:13:20.264476Z","iopub.execute_input":"2024-04-22T01:13:20.264936Z","iopub.status.idle":"2024-04-22T01:13:20.412774Z","shell.execute_reply.started":"2024-04-22T01:13:20.264887Z","shell.execute_reply":"2024-04-22T01:13:20.411931Z"},"trusted":true},"execution_count":28,"outputs":[{"execution_count":28,"output_type":"execute_result","data":{"text/plain":"case_id                                    0\nWEEK_NUM                                   0\ntarget                                     0\namtinstpaidbefduel24m_4187115A             0\nannuitynextmonth_57A                       0\navginstallast24m_3658937A                  0\navglnamtstart24m_4525187A                  0\ncurrdebtcredtyperange_828A                 0\ndisbursedcredamount_1113A                  0\ndownpmt_116A                               0\nlastapprcommoditycat_1041M                 0\nlastapprcommoditytypec_5251766M            0\nlastapprcredamount_781A                    0\nlastcancelreason_561M                      0\nlastotherinc_902A                          0\nlastotherlnsexpense_631A                   0\nlastrejectcommoditycat_161M                0\nlastrejectcommodtypec_5251769M             0\nlastrejectcredamount_222A                  0\nlastrejectreason_759M                      0\nlastrejectreasonclient_4145040M            0\nmaininc_215A                               0\nmaxannuity_159A                            0\nmaxannuity_4075009A                        0\nmaxinstallast24m_3658928A                  0\nmaxlnamtstart6m_4525199A                   0\npreviouscontdistrict_112M                  0\nprice_1097A                                0\nsumoutstandtotalest_4493215A               0\ntotalsettled_863A                          0\ntotinstallast1m_4525188A                   0\npmtaverage_4527227A                        0\npmtssum_45A                                0\nmainoccupationinc_384A_max                 0\nmainoccupationinc_384A_any_selfemployed    0\npmts_pmtsoverdue_635A_max                  0\ndescription_5085714M_2fc785b2              0\ndescription_5085714M_a55475b1              0\ndescription_5085714M_nan                   0\neducation_1103M_39a0853f                   0\neducation_1103M_6b2ae0fa                   0\neducation_1103M_717ddd49                   0\neducation_1103M_a55475b1                   0\neducation_1103M_c8e1a1d0                   0\neducation_1103M_nan                        0\neducation_88M_6b2ae0fa                     0\neducation_88M_717ddd49                     0\neducation_88M_a34a13c8                     0\neducation_88M_a55475b1                     0\neducation_88M_c8e1a1d0                     0\neducation_88M_nan                          0\nmaritalst_385M_3439d993                    0\nmaritalst_385M_38c061ee                    0\nmaritalst_385M_a55475b1                    0\nmaritalst_385M_a7fcb6e5                    0\nmaritalst_385M_b6cabe76                    0\nmaritalst_385M_ecd83604                    0\nmaritalst_385M_nan                         0\nmaritalst_893M_1a19667c                    0\nmaritalst_893M_46b968c3                    0\nmaritalst_893M_977b2a70                    0\nmaritalst_893M_a55475b1                    0\nmaritalst_893M_e18430ff                    0\nmaritalst_893M_ecd83604                    0\nmaritalst_893M_nan                         0\nperson_housetype_COMPANY_FLAT              0\nperson_housetype_COOP_FLAT                 0\nperson_housetype_FLAT                      0\nperson_housetype_OWNED                     0\nperson_housetype_PARENTAL                  0\nperson_housetype_STATE_FLAT                0\nperson_housetype_nan                       0\npmts_dpdvalue_108P_over31_False            0\npmts_dpdvalue_108P_over31_True             0\npmts_dpdvalue_108P_over31_nan              0\nmonth_decision                             0\nweekday_decision                           0\ndtype: int64"},"metadata":{}}]},{"cell_type":"code","source":"len(pd_df.columns)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:13:23.940199Z","iopub.execute_input":"2024-04-22T01:13:23.940756Z","iopub.status.idle":"2024-04-22T01:13:23.94932Z","shell.execute_reply.started":"2024-04-22T01:13:23.940717Z","shell.execute_reply":"2024-04-22T01:13:23.947958Z"},"trusted":true},"execution_count":29,"outputs":[{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"77"},"metadata":{}}]},{"cell_type":"code","source":"from imblearn.over_sampling import SMOTE\nfrom sklearn.model_selection import train_test_split\n\n\nX = pd_df.drop('target', axis=1)\ny = pd_df['target']\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=42)\nX_valid, X_test, y_valid, y_test = train_test_split(X_test, y_test, test_size=0.5, stratify=y_test, random_state=42)\n\n\nsmote = SMOTE(random_state=42)\n\n\nX_train_smote, y_train_smote = smote.fit_resample(X_train, y_train)\nX_valid_smote, y_valid_smote = smote.fit_resample(X_valid, y_valid)\nX_test_smote, y_test_smote = smote.fit_resample(X_test, y_test)\n\n# Checking the new class distribution\nprint(pd.Series(y_train_smote).value_counts())\n\n# Combining the features and target columns to create complete datasets\ndf_train = pd.concat([X_train_smote, y_train_smote], axis=1)  # Full training set\ndf_valid = pd.concat([X_valid_smote, y_valid_smote], axis=1)  # Full validation set\ndf_test = pd.concat([X_test_smote, y_test_smote], axis=1)  # Full test set\n\n# Optional: Check class distribution in the new datasets\nprint(\"Train class distribution:\")\nprint(df_train['target'].value_counts())\nprint(\"Validation class distribution:\")\nprint(df_valid['target'].value_counts())\nprint(\"Test class distribution:\")\nprint(df_test['target'].value_counts())","metadata":{"id":"7r71r31uhazT","execution":{"iopub.status.busy":"2024-04-22T05:16:02.456591Z","iopub.execute_input":"2024-04-22T05:16:02.456992Z","iopub.status.idle":"2024-04-22T05:16:02.894806Z","shell.execute_reply.started":"2024-04-22T05:16:02.45696Z","shell.execute_reply":"2024-04-22T05:16:02.89325Z"},"trusted":true},"execution_count":3,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[3], line 5\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mimblearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mover_sampling\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SMOTE\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmodel_selection\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m train_test_split\n\u001b[0;32m----> 5\u001b[0m X \u001b[38;5;241m=\u001b[39m \u001b[43mpd_df\u001b[49m\u001b[38;5;241m.\u001b[39mdrop(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtarget\u001b[39m\u001b[38;5;124m'\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m      6\u001b[0m y \u001b[38;5;241m=\u001b[39m pd_df[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtarget\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m      8\u001b[0m X_train, X_test, y_train, y_test \u001b[38;5;241m=\u001b[39m train_test_split(X, y, test_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.3\u001b[39m, stratify\u001b[38;5;241m=\u001b[39my, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m42\u001b[39m)\n","\u001b[0;31mNameError\u001b[0m: name 'pd_df' is not defined"],"ename":"NameError","evalue":"name 'pd_df' is not defined","output_type":"error"}]},{"cell_type":"markdown","source":"#**Training Models**\n\nIn this section, we are going to train several ensemble models and apply cross validation to select the best model based on performance.\n\n* LightGBM\n* XGboost\n* CatBoost\n* AdaBoost\n* HistGradientBoostingClassifier\n* SVM\n","metadata":{"id":"r20H2IcmxR_D"}},{"cell_type":"markdown","source":"## LightGBM","metadata":{}},{"cell_type":"code","source":"import lightgbm as lgb\nlgb_train = lgb.Dataset(X_train_smote, label=y_train_smote)\nlgb_valid = lgb.Dataset(X_valid_smote, label=y_valid_smote, reference=lgb_train)\n\nparams = {\n    \"boosting_type\": \"gbdt\",  # Gradient boosting decision tree algorithm\n    \"objective\": \"binary\",  # Binary log loss classification (binary classification problem)\n    \"metric\": \"auc\",  # The metric to be used for validation data is AUC (Area Under Curve)\n    \"max_depth\": 6,  # Maximum tree depth for base learners\n    \"num_leaves\": 40,  # Maximum tree leaves for base learners\n    \"learning_rate\": 0.01,  # Boosting learning rate\n    \"feature_fraction\": 0.8,  # Subsample ratio of columns when constructing each tree\n    \"bagging_fraction\": 0.7,  # Subsample ratio of the training instance (prevents overfitting)\n    \"bagging_freq\": 5,  # Frequency for bagging (k means perform bagging at every k iteration)\n    \"n_estimators\": 2050,  # Number of boosted trees to fit\n    \"verbose\": -1,  # Controls the level of LightGBM's verbosity (less verbose)\n    \"min_child_samples\": 30,  # Minimum number of data needed in a child (leaf)\n    \"min_split_gain\": 0.1,  # Minimum loss reduction required to make a further partition on a leaf node of the tree\n    \"reg_alpha\": 0.51,  # L1 regularization term on weights (increases model's generalization)\n    \"reg_lambda\": 0.5  # L2 regularization term on weights (prevents overfitting)\n}\n\n\ngbm = lgb.train(\n    params,\n    lgb_train,\n    valid_sets=lgb_valid,\n    callbacks=[lgb.log_evaluation(50)]\n)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import GroupKFold, StratifiedGroupKFold\nimport lightgbm as lgb\nX = df_train.drop(columns=[\"target\", \"case_id\", \"WEEK_NUM\"])\ny = df_train[\"target\"]\nweeks = df_train[\"WEEK_NUM\"]\n\ncv = StratifiedGroupKFold(n_splits=5, shuffle=False)\n\nparams = {\n    \"boosting_type\": \"gbdt\",\n    \"objective\": \"binary\",\n    \"metric\": \"auc\",\n    \"max_depth\": 10,  \n    \"learning_rate\": 0.05,\n    \"n_estimators\": 2000,  \n    \"colsample_bytree\": 0.8,\n    \"colsample_bynode\": 0.8,\n    \"verbose\": -1,\n    \"random_state\": 42,\n    \"reg_alpha\": 0.1,\n    \"reg_lambda\": 10,\n    \"extra_trees\":True,\n    'num_leaves':64, \n    \"verbose\": -1,\n}\n\nfitted_models = []\nbest_model = None\nauc_scores_light = []\nmodel_filename = \"best_lightgbm_model.joblib\"\n\n\nfor idx_train, idx_valid in cv.split(X, y, groups=weeks):\n    X_train, y_train = X.iloc[idx_train], y.iloc[idx_train]\n    X_valid, y_valid = X.iloc[idx_valid], y.iloc[idx_valid]\n    \n    model = lgb.LGBMClassifier(**params)\n    model.fit(\n        X_train, y_train,\n        eval_set = [(X_valid, y_valid)],\n        callbacks = [lgb.log_evaluation(200), lgb.early_stopping(60)] )\n    fitted_models.append(model)\n    \n    y_pred_valid = model.predict_proba(X_valid)[:,1]\n    auc_score = roc_auc_score(y_valid, y_pred_valid)\n    auc_scores_light.append(auc_score)\n    \nprint(\"CV AUC scores: \", auc_scores_light)\nprint(\"Maximum CV AUC score: \", max(auc_scores_light))\n\n# Check if this fold's AUC is the best\n    if auc > best_auc:\n        best_auc = auc\n        best_model = model  # Store the best model\n    # Save the best model to a file\n    if best_model:\n        joblib.dump(best_model, model_filename)  # Save the best model","metadata":{"execution":{"iopub.status.busy":"2024-04-22T01:16:31.463327Z","iopub.execute_input":"2024-04-22T01:16:31.464571Z","iopub.status.idle":"2024-04-22T03:41:15.543074Z","shell.execute_reply.started":"2024-04-22T01:16:31.464533Z","shell.execute_reply":"2024-04-22T03:41:15.540917Z"},"trusted":true},"execution_count":31,"outputs":[{"name":"stdout","text":"Training until validation scores don't improve for 60 rounds\n[200]\tvalid_0's auc: 0.966148\n[400]\tvalid_0's auc: 0.972297\n[600]\tvalid_0's auc: 0.975275\n[800]\tvalid_0's auc: 0.976949\n[1000]\tvalid_0's auc: 0.978289\n[1200]\tvalid_0's auc: 0.979295\n[1400]\tvalid_0's auc: 0.980047\n[1600]\tvalid_0's auc: 0.980693\n[1800]\tvalid_0's auc: 0.981155\n[2000]\tvalid_0's auc: 0.981522\nDid not meet early stopping. Best iteration is:\n[1999]\tvalid_0's auc: 0.981522\nTraining until validation scores don't improve for 60 rounds\n[200]\tvalid_0's auc: 0.968077\n[400]\tvalid_0's auc: 0.973743\n[600]\tvalid_0's auc: 0.976642\n[800]\tvalid_0's auc: 0.978411\n[1000]\tvalid_0's auc: 0.9796\n[1200]\tvalid_0's auc: 0.980547\n[1400]\tvalid_0's auc: 0.981224\n[1600]\tvalid_0's auc: 0.981764\n[1800]\tvalid_0's auc: 0.982254\n[2000]\tvalid_0's auc: 0.982644\nDid not meet early stopping. Best iteration is:\n[2000]\tvalid_0's auc: 0.982644\nTraining until validation scores don't improve for 60 rounds\n[200]\tvalid_0's auc: 0.969118\n[400]\tvalid_0's auc: 0.974691\n[600]\tvalid_0's auc: 0.977323\n[800]\tvalid_0's auc: 0.979059\n[1000]\tvalid_0's auc: 0.980174\n[1200]\tvalid_0's auc: 0.980982\n[1400]\tvalid_0's auc: 0.981627\n[1600]\tvalid_0's auc: 0.982157\n[1800]\tvalid_0's auc: 0.982574\n[2000]\tvalid_0's auc: 0.982989\nDid not meet early stopping. Best iteration is:\n[2000]\tvalid_0's auc: 0.982989\nTraining until validation scores don't improve for 60 rounds\n[200]\tvalid_0's auc: 0.968779\n[400]\tvalid_0's auc: 0.974009\n[600]\tvalid_0's auc: 0.976533\n[800]\tvalid_0's auc: 0.978146\n[1000]\tvalid_0's auc: 0.979276\n[1200]\tvalid_0's auc: 0.980093\n[1400]\tvalid_0's auc: 0.980713\n[1600]\tvalid_0's auc: 0.981234\n[1800]\tvalid_0's auc: 0.981712\n[2000]\tvalid_0's auc: 0.982047\nDid not meet early stopping. Best iteration is:\n[2000]\tvalid_0's auc: 0.982047\nTraining until validation scores don't improve for 60 rounds\n[200]\tvalid_0's auc: 0.959163\n[400]\tvalid_0's auc: 0.966329\n[600]\tvalid_0's auc: 0.969613\n[800]\tvalid_0's auc: 0.971745\n[1000]\tvalid_0's auc: 0.973211\n[1200]\tvalid_0's auc: 0.974378\n[1400]\tvalid_0's auc: 0.975291\n[1600]\tvalid_0's auc: 0.976081\n[1800]\tvalid_0's auc: 0.976677\n[2000]\tvalid_0's auc: 0.977164\nDid not meet early stopping. Best iteration is:\n[2000]\tvalid_0's auc: 0.977164\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[31], line 46\u001b[0m\n\u001b[1;32m     43\u001b[0m     auc_score \u001b[38;5;241m=\u001b[39m roc_auc_score(y_valid, y_pred_valid)\n\u001b[1;32m     44\u001b[0m     auc_scores_light\u001b[38;5;241m.\u001b[39mappend(auc_score)\n\u001b[0;32m---> 46\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCV AUC scores: \u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[43mcv_scores\u001b[49m)\n\u001b[1;32m     47\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMaximum CV AUC score: \u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mmax\u001b[39m(cv_scores))\n","\u001b[0;31mNameError\u001b[0m: name 'cv_scores' is not defined"],"ename":"NameError","evalue":"name 'cv_scores' is not defined","output_type":"error"}]},{"cell_type":"code","source":"print(\"Maximum CV AUC score: \", max(auc_scores_light))","metadata":{"execution":{"iopub.status.busy":"2024-04-22T04:12:22.404838Z","iopub.execute_input":"2024-04-22T04:12:22.405973Z","iopub.status.idle":"2024-04-22T04:12:22.414484Z","shell.execute_reply.started":"2024-04-22T04:12:22.40593Z","shell.execute_reply":"2024-04-22T04:12:22.412834Z"},"trusted":true},"execution_count":33,"outputs":[{"name":"stdout","text":"Maximum CV AUC score:  0.9829892414109191\n","output_type":"stream"}]},{"cell_type":"code","source":"# Plot the AUC scores for each fold\nplt.plot(range(1, 6), auc_scores_light, marker='o', linestyle='-', color='b')\nplt.title(\"AUC for each Cross-Validation Fold\")\nplt.xlabel(\"Fold\")\nplt.ylabel(\"AUC\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-04-22T04:32:29.468153Z","iopub.execute_input":"2024-04-22T04:32:29.470554Z","iopub.status.idle":"2024-04-22T04:32:30.203182Z","shell.execute_reply.started":"2024-04-22T04:32:29.470475Z","shell.execute_reply":"2024-04-22T04:32:30.201223Z"},"trusted":true},"execution_count":54,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 640x480 with 1 Axes>","image/png":"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"},"metadata":{}}]},{"cell_type":"code","source":"import joblib\nfrom sklearn.metrics import roc_auc_score\n\n# Load the best model from the saved file\nbest_model = joblib.load(\"best_lightgbm_model.joblib\")\n\n# Use the model to predict on the untrained data\npredictions_test = best_model.predict(X_test_smote)\n\n# Calculate AUC score on the test set\nauc_test = roc_auc_score(y_test_smote, predictions_test)\n\nprint(f\"Test AUC: {auc_test}\")","metadata":{"execution":{"iopub.status.busy":"2024-04-22T05:24:52.787835Z","iopub.execute_input":"2024-04-22T05:24:52.788812Z","iopub.status.idle":"2024-04-22T05:24:52.865968Z","shell.execute_reply.started":"2024-04-22T05:24:52.788775Z","shell.execute_reply":"2024-04-22T05:24:52.864566Z"},"trusted":true},"execution_count":4,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)","Cell \u001b[0;32mIn[4], line 5\u001b[0m\n\u001b[1;32m      2\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01msklearn\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmetrics\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m roc_auc_score\n\u001b[1;32m      4\u001b[0m \u001b[38;5;66;03m# Load the best model from the saved file\u001b[39;00m\n\u001b[0;32m----> 5\u001b[0m best_model \u001b[38;5;241m=\u001b[39m \u001b[43mjoblib\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mbest_lightgbm_model.joblib\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m      7\u001b[0m \u001b[38;5;66;03m# Use the model to predict on the untrained data\u001b[39;00m\n\u001b[1;32m      8\u001b[0m predictions_test \u001b[38;5;241m=\u001b[39m best_model\u001b[38;5;241m.\u001b[39mpredict(X_test_smote)\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/joblib/numpy_pickle.py:650\u001b[0m, in \u001b[0;36mload\u001b[0;34m(filename, mmap_mode)\u001b[0m\n\u001b[1;32m    648\u001b[0m         obj \u001b[38;5;241m=\u001b[39m _unpickle(fobj)\n\u001b[1;32m    649\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m--> 650\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mrb\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[1;32m    651\u001b[0m         \u001b[38;5;28;01mwith\u001b[39;00m _read_fileobject(f, filename, mmap_mode) \u001b[38;5;28;01mas\u001b[39;00m fobj:\n\u001b[1;32m    652\u001b[0m             \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(fobj, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m    653\u001b[0m                 \u001b[38;5;66;03m# if the returned file object is a string, this means we\u001b[39;00m\n\u001b[1;32m    654\u001b[0m                 \u001b[38;5;66;03m# try to load a pickle file generated with an version of\u001b[39;00m\n\u001b[1;32m    655\u001b[0m                 \u001b[38;5;66;03m# Joblib so we load it with joblib compatibility function.\u001b[39;00m\n","\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'best_lightgbm_model.joblib'"],"ename":"FileNotFoundError","evalue":"[Errno 2] No such file or directory: 'best_lightgbm_model.joblib'","output_type":"error"}]},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"from sklearn.base import BaseEstimator, RegressorMixin\nclass VotingModel(BaseEstimator, RegressorMixin):\n    def __init__(self, estimators):\n        super().__init__()\n        self.estimators = estimators\n        \n    def fit(self, X, y=None):\n        return self\n    \n    def predict(self, X):\n        y_preds = [estimator.predict(X) for estimator in self.estimators]\n        return np.mean(y_preds, axis=0)\n    \n    def predict_proba(self, X):\n        \n        y_preds = [estimator.predict_proba(X) for estimator in self.estimators[:5]]\n        \n        X[cat_cols] = X[cat_cols].astype(\"category\")\n        y_preds += [estimator.predict_proba(X) for estimator in self.estimators[5:10]]\n        y_preds+=y_preds #tang trong so\n        y_preds += [estimator.predict_proba(X) for estimator in self.estimators[10:]]\n        print(len(y_preds))\n        return np.mean(y_preds, axis=0)\n\nmodel = VotingModel(fitted_models)","metadata":{"execution":{"iopub.status.busy":"2024-04-22T05:26:03.864189Z","iopub.execute_input":"2024-04-22T05:26:03.864982Z","iopub.status.idle":"2024-04-22T05:26:03.899055Z","shell.execute_reply.started":"2024-04-22T05:26:03.864949Z","shell.execute_reply":"2024-04-22T05:26:03.897782Z"},"trusted":true},"execution_count":6,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[6], line 25\u001b[0m\n\u001b[1;32m     22\u001b[0m         \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28mlen\u001b[39m(y_preds))\n\u001b[1;32m     23\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m np\u001b[38;5;241m.\u001b[39mmean(y_preds, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m---> 25\u001b[0m model \u001b[38;5;241m=\u001b[39m VotingModel(\u001b[43mfitted_models\u001b[49m)\n","\u001b[0;31mNameError\u001b[0m: name 'fitted_models' is not defined"],"ename":"NameError","evalue":"name 'fitted_models' is not defined","output_type":"error"}]},{"cell_type":"code","source":"df_test = df_test.drop(columns=[\"WEEK_NUM\"])\ndf_test = df_test.set_index(\"case_id\")","metadata":{"execution":{"iopub.status.busy":"2024-04-22T05:09:24.941561Z","iopub.execute_input":"2024-04-22T05:09:24.942017Z","iopub.status.idle":"2024-04-22T05:09:24.996085Z","shell.execute_reply.started":"2024-04-22T05:09:24.941986Z","shell.execute_reply":"2024-04-22T05:09:24.994011Z"},"trusted":true},"execution_count":67,"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyError\u001b[0m                                  Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_33/631971335.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[0;31m#X_test_smote = X_test_smote.drop(columns=[\"case_id\", \"WEEK_NUM\"])\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mX_test_smote\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mX_test_smote\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"case_id\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0mlgb_pred\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSeries\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict_proba\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mX_test_smote\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX_test_smote\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mindex\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/opt/conda/lib/python3.10/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, keys, drop, append, inplace, verify_integrity)\u001b[0m\n\u001b[1;32m   6118\u001b[0m                     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mfound\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6119\u001b[0m                         \u001b[0mmissing\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcol\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6120\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6121\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mmissing\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6122\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"None of {missing} are in the columns\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   6123\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6124\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0minplace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   6125\u001b[0m             \u001b[0mframe\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mKeyError\u001b[0m: \"None of ['case_id'] are in the columns\""],"ename":"KeyError","evalue":"\"None of ['case_id'] are in the columns\"","output_type":"error"}]},{"cell_type":"code","source":"ROOT = '/kaggle/input/home-credit-credit-risk-model-stability'\n\ny_pred = pd.Series(model.predict_proba(df_test)[:, 1], index=df_test.index)\n\ndf_subm = pd.read_csv(ROOT / \"sample_submission.csv\")\ndf_subm = df_subm.set_index(\"case_id\")\n\ndf_subm[\"score\"] = y_pred\ndf_subm.to_csv(\"submission.csv\")\ndf_subm","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}