{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.11","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"tpuV5e8","dataSources":[{"sourceId":50160,"databundleVersionId":7921029,"sourceType":"competition"},{"sourceId":11886274,"sourceType":"datasetVersion","datasetId":7470743},{"sourceId":11891198,"sourceType":"datasetVersion","datasetId":7474091}],"dockerImageVersionId":31012,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\n\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:19:25.09156Z","iopub.execute_input":"2025-11-08T07:19:25.091832Z","iopub.status.idle":"2025-11-08T07:19:27.573598Z","shell.execute_reply.started":"2025-11-08T07:19:25.091809Z","shell.execute_reply":"2025-11-08T07:19:27.572281Z"}},"outputs":[{"name":"stdout","text":"/kaggle/input/home-credit-credit-risk-model-stability/sample_submission.csv\n/kaggle/input/home-credit-credit-risk-model-stability/feature_definitions.csv\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_deposit_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_applprev_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_static_cb_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_static_0_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_1_3.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_1_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_tax_registry_b_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_static_0_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_3.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_9.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_debitcard_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_1_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_11.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_applprev_1_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_1_4.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_tax_registry_c_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_applprev_1_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_tax_registry_a_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_6.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_5.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_b_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_other_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_static_0_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_applprev_1_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_base.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_person_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_7.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_10.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_b_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_8.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_1_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_credit_bureau_a_2_4.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_person_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_c_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_3.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_b_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_cb_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_other_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_6.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_a_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_b_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_b_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_7.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_deposit_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_debitcard_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_5.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_4.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_9.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_3.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_10.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_2_8.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_2.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_1.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_0.parquet\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_6.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_11.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_9.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_base.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_1_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_b_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_10.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_4.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_static_0_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_static_cb_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_b_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_tax_registry_b_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_person_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_person_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_8.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_applprev_1_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_applprev_1_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_1_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_applprev_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_7.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_other_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_tax_registry_c_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_1_3.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_static_0_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_5.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_1_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_debitcard_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_1_4.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_deposit_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_static_0_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_applprev_1_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_tax_registry_a_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/test/test_credit_bureau_a_2_3.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_3.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_static_cb_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_applprev_1_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_person_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_base.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_a_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_static_0_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_applprev_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_6.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_person_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_1_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_c_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_4.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_9.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_3.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_7.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_b_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_2.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_static_0_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_deposit_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_10.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_tax_registry_b_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_applprev_1_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_8.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_5.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_b_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_credit_bureau_a_2_0.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_other_1.csv\n/kaggle/input/home-credit-credit-risk-model-stability/csv_files/train/train_debitcard_1.csv\n/kaggle/input/home-data/train_static_0.csv\n/kaggle/input/home-data/train_static_cb_0.csv\n/kaggle/input/home-data/train_credit_bureau_a_2_fts.csv\n/kaggle/input/home-data/train_applprev_2_feature.csv\n/kaggle/input/home-data/depth_0.csv\n/kaggle/input/home-applprev-2-agg-features/train_applprev_2_feature.csv\n","output_type":"stream"}],"execution_count":1},{"cell_type":"code","source":"import psutil\nmem = psutil.virtual_memory()\nprint(f\"Total RAM: {mem.total / (1024**3):.2f} GB\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:19:27.57424Z","iopub.execute_input":"2025-11-08T07:19:27.57461Z","iopub.status.idle":"2025-11-08T07:19:27.595103Z","shell.execute_reply.started":"2025-11-08T07:19:27.574589Z","shell.execute_reply":"2025-11-08T07:19:27.591664Z"}},"outputs":[{"name":"stdout","text":"Total RAM: 31.35 GB\n","output_type":"stream"}],"execution_count":2},{"cell_type":"code","source":"!nproc\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:04.469562Z","iopub.execute_input":"2025-11-08T07:22:04.470353Z","iopub.status.idle":"2025-11-08T07:22:04.59424Z","shell.execute_reply.started":"2025-11-08T07:22:04.47032Z","shell.execute_reply":"2025-11-08T07:22:04.593247Z"}},"outputs":[{"name":"stdout","text":"4\n","output_type":"stream"}],"execution_count":6},{"cell_type":"code","source":"!free -h\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:05.649168Z","iopub.execute_input":"2025-11-08T07:22:05.649496Z","iopub.status.idle":"2025-11-08T07:22:05.776598Z","shell.execute_reply.started":"2025-11-08T07:22:05.649469Z","shell.execute_reply":"2025-11-08T07:22:05.775277Z"}},"outputs":[{"name":"stdout","text":"               total        used        free      shared  buff/cache   available\nMem:            31Gi       847Mi        23Gi       2.0Mi       7.2Gi        30Gi\nSwap:             0B          0B          0B\n","output_type":"stream"}],"execution_count":7},{"cell_type":"code","source":"!pip install pyspark","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:19:27.957287Z","iopub.execute_input":"2025-11-08T07:19:27.957692Z","iopub.status.idle":"2025-11-08T07:19:33.114143Z","shell.execute_reply.started":"2025-11-08T07:19:27.957648Z","shell.execute_reply":"2025-11-08T07:19:33.113012Z"}},"outputs":[{"name":"stdout","text":"Requirement already satisfied: pyspark in /usr/local/lib/python3.11/dist-packages (3.5.4)\nRequirement already satisfied: py4j==0.10.9.7 in /usr/local/lib/python3.11/dist-packages (from pyspark) (0.10.9.7)\n","output_type":"stream"}],"execution_count":5},{"cell_type":"markdown","source":"# 1. Import Libraries","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:08.124697Z","iopub.execute_input":"2025-11-08T07:22:08.125112Z","iopub.status.idle":"2025-11-08T07:22:09.20638Z","shell.execute_reply.started":"2025-11-08T07:22:08.125081Z","shell.execute_reply":"2025-11-08T07:22:09.205591Z"}},"outputs":[],"execution_count":8},{"cell_type":"markdown","source":"# 2. Configuration","metadata":{}},{"cell_type":"code","source":"import warnings\n\n# Pandas configuration\npd.set_option('display.max_columns', None)\npd.set_option('display.max_rows',100)\npd.set_option('display.float_format',lambda x: '%.3f'%x)\n\n# Seaborn configuration\nsns.set_palette('viridis')\nsns.set_context('notebook')\n\n# Warning turning off\nwarnings.filterwarnings('ignore')\n\n# Matplotlib configuration\n%matplotlib inline\nplt.style.use('seaborn-whitegrid')\nplt.rcParams['figure.figsize'] = (12,6)\nplt.rcParams['figure.dpi'] = 100\nplt.rcParams['font.size'] = 14\nplt.rcParams['axes.labelsize'] = 14\nplt.rcParams['axes.titlesize'] = 18\n\n# Reload Automation lib\n%load_ext autoreload\n%autoreload 2\n\nimport logging\nlogger = logging.getLogger(\"py4j\")\nlogger.setLevel(logging.ERROR)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:09.207694Z","iopub.execute_input":"2025-11-08T07:22:09.208089Z","iopub.status.idle":"2025-11-08T07:22:09.254678Z","shell.execute_reply.started":"2025-11-08T07:22:09.208048Z","shell.execute_reply":"2025-11-08T07:22:09.253867Z"}},"outputs":[],"execution_count":9},{"cell_type":"markdown","source":"# Function","metadata":{}},{"cell_type":"code","source":"import glob\nfrom pyspark.sql import SparkSession\n\npath = '/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/'\n\ndef dataloader(prefix):\n    files = glob.glob(f\"{path}{prefix}*.parquet\")\n\n    # spark read file with regex pattern\n    df_all = spark.read.parquet(f\"{path}{prefix}*.parquet\")\n    total_rows_all = df_all.count()\n\n    # df dict\n    individual_dfs = {}\n    total_rows_individual = 0\n\n    for i, file in enumerate(files):\n        df = spark.read.parquet(file)\n        row_count = df.count()\n        print(f\"File {i}: {file} → {row_count} rows\")\n\n        # save df with prefix + sub\n        individual_dfs[f\"{prefix}_{i}\"] = df\n        total_rows_individual += row_count\n\n    # compare\n    print(f\"Tổng số dòng (đọc chung):      {total_rows_all}\")\n    print(f\"Tổng số dòng (đọc riêng lẻ):   {total_rows_individual}\")\n\n    if total_rows_all == total_rows_individual:\n        print(\"✅ Số dòng khớp nhau\")\n    else:\n        print(\"❌ Số dòng KHÔNG khớp\")\n\n    return df_all, individual_dfs\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:10.659787Z","iopub.execute_input":"2025-11-08T07:22:10.660178Z","iopub.status.idle":"2025-11-08T07:22:11.069367Z","shell.execute_reply.started":"2025-11-08T07:22:10.660155Z","shell.execute_reply":"2025-11-08T07:22:11.068491Z"}},"outputs":[],"execution_count":10},{"cell_type":"markdown","source":"# 3. Spark Session","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pyspark\nfrom pyspark.sql import SparkSession\nspark = SparkSession.builder\\\n        .appName('HomeCredit')\\\n        .master(\"local[*]\")\\\n        .getOrCreate()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:13.427957Z","iopub.execute_input":"2025-11-08T07:22:13.428393Z","iopub.status.idle":"2025-11-08T07:22:21.939091Z","shell.execute_reply.started":"2025-11-08T07:22:13.428371Z","shell.execute_reply":"2025-11-08T07:22:21.938034Z"}},"outputs":[{"name":"stderr","text":"Setting default log level to \"WARN\".\nTo adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).\n25/11/08 07:22:19 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable\n","output_type":"stream"}],"execution_count":11},{"cell_type":"code","source":"from pyspark.sql.functions import col","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:21.940851Z","iopub.execute_input":"2025-11-08T07:22:21.941139Z","iopub.status.idle":"2025-11-08T07:22:21.976224Z","shell.execute_reply.started":"2025-11-08T07:22:21.941116Z","shell.execute_reply":"2025-11-08T07:22:21.975196Z"}},"outputs":[],"execution_count":12},{"cell_type":"code","source":"feature = pd.read_csv('/kaggle/input/home-credit-credit-risk-model-stability/feature_definitions.csv')\nfeature","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:21.977234Z","iopub.execute_input":"2025-11-08T07:22:21.977525Z","iopub.status.idle":"2025-11-08T07:22:22.052452Z","shell.execute_reply.started":"2025-11-08T07:22:21.977503Z","shell.execute_reply":"2025-11-08T07:22:22.05158Z"}},"outputs":[{"execution_count":13,"output_type":"execute_result","data":{"text/plain":"                     Variable  \\\n0              actualdpd_943P   \n1     actualdpdtolerance_344P   \n2        addres_district_368M   \n3            addres_role_871L   \n4             addres_zip_823M   \n..                        ...   \n460  totinstallast1m_4525188A   \n461        twobodfilling_608L   \n462                  type_25L   \n463            typesuite_864L   \n464           validfrom_1069D   \n\n                                           Description  \n0    Days Past Due (DPD) of previous contract (actu...  \n1                        DPD of client with tolerance.  \n2                    District of the person's address.  \n3                            Role of person's address.  \n4                             Zip code of the address.  \n..                                                 ...  \n460  Total amount of monthly instalments paid in th...  \n461                       Type of application process.  \n462                          Contact type of a person.  \n463  Persons accompanying the client during the loa...  \n464      Date since the client has an active campaign.  \n\n[465 rows x 2 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>Variable</th>\n      <th>Description</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>actualdpd_943P</td>\n      <td>Days Past Due (DPD) of previous contract (actu...</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>actualdpdtolerance_344P</td>\n      <td>DPD of client with tolerance.</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>addres_district_368M</td>\n      <td>District of the person's address.</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>addres_role_871L</td>\n      <td>Role of person's address.</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>addres_zip_823M</td>\n      <td>Zip code of the address.</td>\n    </tr>\n    <tr>\n      <th>...</th>\n      <td>...</td>\n      <td>...</td>\n    </tr>\n    <tr>\n      <th>460</th>\n      <td>totinstallast1m_4525188A</td>\n      <td>Total amount of monthly instalments paid in th...</td>\n    </tr>\n    <tr>\n      <th>461</th>\n      <td>twobodfilling_608L</td>\n      <td>Type of application process.</td>\n    </tr>\n    <tr>\n      <th>462</th>\n      <td>type_25L</td>\n      <td>Contact type of a person.</td>\n    </tr>\n    <tr>\n      <th>463</th>\n      <td>typesuite_864L</td>\n      <td>Persons accompanying the client during the loa...</td>\n    </tr>\n    <tr>\n      <th>464</th>\n      <td>validfrom_1069D</td>\n      <td>Date since the client has an active campaign.</td>\n    </tr>\n  </tbody>\n</table>\n<p>465 rows × 2 columns</p>\n</div>"},"metadata":{}}],"execution_count":13},{"cell_type":"markdown","source":"# 4. Read file","metadata":{}},{"cell_type":"markdown","source":"## Phân tích sơ bộ:\n\nĐây là bài toán dùng lịch sử tín dụng để dự đoán khách hàng có khả năng vỡ nợ.\nNghĩa là, chúng ta sử dụng data quá khứ, gồm các thuộc tính, bao gồm những thông tin khách hàng, lịch sử tín dụng để dự đoán sự vỡ nợ của khách hàng.\n\nCác solution của bài toán đã tạo những feature thực sự không có ý nghĩa, hoặc sai.\nVí dụ, trong bài toán có tạo những feature liên quan đến lịch sử sử dụng tìn dụng, sau đó đem hết data này đưa vào 1 model và chỉ liên tục đổi model/ thuật toán để lấy cái két quả cao nhất.\nTuy nhiên cách này cực kì sai. Thứ nhất, nếu như quan tâm đến bảng Application Previous - tức là vận dụng cả lịch sử trong quá trình dự đoán. Nếu vậy hãy nhìn lại 1 chút. Trong data train của chúng ta, có những khách hàng không hề có lịch sử dùng tín dụng. Nếu tính các feature liên quan đến lịch sử tín dụng, thì các khách hàng sẽ auto null (không phải bằng 0, ví dụ Trung bình số tiền vay, thì bằng 0 khác với null). \n\nDo đó, chia bài toán ra làm 3 model khác nhau:\n- Model 1 phân loại: KH có 1 đơn dược duyệt trong lịch sử, và hiện tại duyệt VS KH 1 đơn được duyệt trong lịch sử và hiện tại KHÔNG được duyệt\n- Model 2 phân loại: KH có ít nhất 2 đơn dược duyệt trong lịch sử, và hiện tại duyệt VS KH ít nhất 2 đơn được duyệt trong lịch sử và hiện tại KHÔNG được duyệt\n- Model 3 phân loại: KH có apply trong quá khứ, những không được duyệt, và hiện tại được duyệt VS KH có apply trong quá khứ, nhưng không được duyệt và bây giờ KHÔNG được duyệt\n- Model 4 phân loại: KH không hề có đơn apply trong quá khứ, giờ lại được duyệt VS KH không hề có đơn apply trong quá khứ, và giờ KHÔNG được duyệt\n ","metadata":{}},{"cell_type":"markdown","source":"### Base file","metadata":{}},{"cell_type":"code","source":"# Base file\ntrain_base, train_base_dfs = dataloader('train_base')\n\n# Check Dup\n# 1. Check dup in Case_id\nprint(\"1: Check duplicates in Case ID\")\nprint('Total unique case_id in the base file: ', train_base.select(col('case_id')).distinct().count())\nprint('Total ROW in base file: ', train_base.select(col('case_id')).distinct().count())\nif train_base.select(col('case_id')).distinct().count() == train_base.select(col('case_id')).distinct().count():\n    print('No duplicated')\nelse: print('Has duplicated')\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:30.696899Z","iopub.execute_input":"2025-11-08T07:22:30.697204Z","iopub.status.idle":"2025-11-08T07:22:49.972785Z","shell.execute_reply.started":"2025-11-08T07:22:30.697182Z","shell.execute_reply":"2025-11-08T07:22:49.971498Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet → 1526659 rows\nTổng số dòng (đọc chung):      1526659\nTổng số dòng (đọc riêng lẻ):   1526659\n✅ Số dòng khớp nhau\n1: Check duplicates in Case ID\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"name":"stdout","text":"Total unique case_id in the base file:  1526659\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"name":"stdout","text":"Total ROW in base file:  1526659\n","output_type":"stream"},{"name":"stderr","text":"[Stage 28:==========================================================>                   (3 + 1) / 4]\r","output_type":"stream"},{"name":"stdout","text":"No duplicated\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"}],"execution_count":14},{"cell_type":"code","source":"# Print Schema\ntrain_base.printSchema()\n\n# Show top 5\ntrain_base.show(5)\n\n# Show Target Distribution\ntrain_base.groupBy('target').count().show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:22:49.974534Z","iopub.execute_input":"2025-11-08T07:22:49.974861Z","iopub.status.idle":"2025-11-08T07:22:52.445991Z","shell.execute_reply.started":"2025-11-08T07:22:49.974837Z","shell.execute_reply":"2025-11-08T07:22:52.444505Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- date_decision: string (nullable = true)\n |-- MONTH: long (nullable = true)\n |-- WEEK_NUM: long (nullable = true)\n |-- target: long (nullable = true)\n\n+-------+-------------+------+--------+------+\n|case_id|date_decision| MONTH|WEEK_NUM|target|\n+-------+-------------+------+--------+------+\n|      0|   2019-01-03|201901|       0|     0|\n|      1|   2019-01-03|201901|       0|     0|\n|      2|   2019-01-04|201901|       0|     0|\n|      3|   2019-01-03|201901|       0|     0|\n|      4|   2019-01-04|201901|       0|     1|\n+-------+-------------+------+--------+------+\nonly showing top 5 rows\n\n+------+-------+\n|target|  count|\n+------+-------+\n|     0|1478665|\n|     1|  47994|\n+------+-------+\n\n","output_type":"stream"}],"execution_count":15},{"cell_type":"markdown","source":"#### Conclusion:\ntrain_base chứa toàn bộ các case chúng ta dùng làm đầu vào để dự đoán ai là người có khả năng vỡ nợ (label là 1)\n- Có 1526659 case_id\n- Các cột của train_base là: case_id ứng với mã định danh, date_decision: hành động duyệt hay không, và các biến liên quan tới ngày, tuần và tháng\n- Tỉ lệ của 2 lớp target là: 1.478.665;/47.994\n","metadata":{}},{"cell_type":"markdown","source":"## Static: Depth 0 Features\nDepth 0 chính là những file chưa data tĩnh, chiều là case_id, nghĩa là các bảng này đều có case_id là primary key, là distinct value theo dòng ở bảng này. Các bảng này sẽ chứa thông tin của từng case_id (tính từ lúc chốt snapshot)\n\n**Depth 0 Static gồm 2 bảng:**\n- train_static_0\n- train_static_cb_0","metadata":{}},{"cell_type":"markdown","source":"### train_static_0:\nĐây là file chứa ","metadata":{}},{"cell_type":"code","source":"train_static_0, train_static_0_dfs = dataloader('train_static_0')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:02.166071Z","iopub.execute_input":"2025-11-08T07:24:02.166685Z","iopub.status.idle":"2025-11-08T07:24:04.001459Z","shell.execute_reply.started":"2025-11-08T07:24:02.166661Z","shell.execute_reply":"2025-11-08T07:24:04.00064Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_0.parquet → 1003757 rows\nFile 1: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_1.parquet → 522902 rows\nTổng số dòng (đọc chung):      1526659\nTổng số dòng (đọc riêng lẻ):   1526659\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":16},{"cell_type":"code","source":"# train_static_0.coalesce(1).write.option(\"header\", \"true\").mode(\"overwrite\").csv(\"/kaggle/working/train_static_0\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:04.433461Z","iopub.execute_input":"2025-11-08T07:24:04.433791Z","iopub.status.idle":"2025-11-08T07:24:04.459425Z","shell.execute_reply.started":"2025-11-08T07:24:04.433767Z","shell.execute_reply":"2025-11-08T07:24:04.458176Z"}},"outputs":[],"execution_count":17},{"cell_type":"code","source":"# Print Schema\ntrain_static_0.printSchema()\n\n# Show top 5\ntrain_static_0.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:04.761222Z","iopub.execute_input":"2025-11-08T07:24:04.761508Z","iopub.status.idle":"2025-11-08T07:24:07.482503Z","shell.execute_reply.started":"2025-11-08T07:24:04.761487Z","shell.execute_reply":"2025-11-08T07:24:07.481513Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- actualdpdtolerance_344P: double (nullable = true)\n |-- amtinstpaidbefduel24m_4187115A: double (nullable = true)\n |-- annuity_780A: double (nullable = true)\n |-- annuitynextmonth_57A: double (nullable = true)\n |-- applicationcnt_361L: double (nullable = true)\n |-- applications30d_658L: double (nullable = true)\n |-- applicationscnt_1086L: double (nullable = true)\n |-- applicationscnt_464L: double (nullable = true)\n |-- applicationscnt_629L: double (nullable = true)\n |-- applicationscnt_867L: double (nullable = true)\n |-- avgdbddpdlast24m_3658932P: double (nullable = true)\n |-- avgdbddpdlast3m_4187120P: double (nullable = true)\n |-- avgdbdtollast24m_4525197P: double (nullable = true)\n |-- avgdpdtolclosure24_3658938P: double (nullable = true)\n |-- avginstallast24m_3658937A: double (nullable = true)\n |-- avglnamtstart24m_4525187A: double (nullable = true)\n |-- avgmaxdpdlast9m_3716943P: double (nullable = true)\n |-- avgoutstandbalancel6m_4187114A: double (nullable = true)\n |-- avgpmtlast12m_4525200A: double (nullable = true)\n |-- bankacctype_710L: string (nullable = true)\n |-- cardtype_51L: string (nullable = true)\n |-- clientscnt12m_3712952L: double (nullable = true)\n |-- clientscnt3m_3712950L: double (nullable = true)\n |-- clientscnt6m_3712949L: double (nullable = true)\n |-- clientscnt_100L: double (nullable = true)\n |-- clientscnt_1022L: double (nullable = true)\n |-- clientscnt_1071L: double (nullable = true)\n |-- clientscnt_1130L: double (nullable = true)\n |-- clientscnt_136L: double (nullable = true)\n |-- clientscnt_157L: double (nullable = true)\n |-- clientscnt_257L: double (nullable = true)\n |-- clientscnt_304L: double (nullable = true)\n |-- clientscnt_360L: double (nullable = true)\n |-- clientscnt_493L: double (nullable = true)\n |-- clientscnt_533L: double (nullable = true)\n |-- clientscnt_887L: double (nullable = true)\n |-- clientscnt_946L: double (nullable = true)\n |-- cntincpaycont9m_3716944L: double (nullable = true)\n |-- cntpmts24_3658933L: double (nullable = true)\n |-- commnoinclast6m_3546845L: double (nullable = true)\n |-- credamount_770A: double (nullable = true)\n |-- credtype_322L: string (nullable = true)\n |-- currdebt_22A: double (nullable = true)\n |-- currdebtcredtyperange_828A: double (nullable = true)\n |-- datefirstoffer_1144D: string (nullable = true)\n |-- datelastinstal40dpd_247D: string (nullable = true)\n |-- datelastunpaid_3546854D: string (nullable = true)\n |-- daysoverduetolerancedd_3976961L: double (nullable = true)\n |-- deferredmnthsnum_166L: double (nullable = true)\n |-- disbursedcredamount_1113A: double (nullable = true)\n |-- disbursementtype_67L: string (nullable = true)\n |-- downpmt_116A: double (nullable = true)\n |-- dtlastpmtallstes_4499206D: string (nullable = true)\n |-- eir_270L: double (nullable = true)\n |-- equalitydataagreement_891L: boolean (nullable = true)\n |-- equalityempfrom_62L: boolean (nullable = true)\n |-- firstclxcampaign_1125D: string (nullable = true)\n |-- firstdatedue_489D: string (nullable = true)\n |-- homephncnt_628L: double (nullable = true)\n |-- inittransactionamount_650A: double (nullable = true)\n |-- inittransactioncode_186L: string (nullable = true)\n |-- interestrate_311L: double (nullable = true)\n |-- interestrategrace_34L: double (nullable = true)\n |-- isbidproduct_1095L: boolean (nullable = true)\n |-- isbidproductrequest_292L: boolean (nullable = true)\n |-- isdebitcard_729L: boolean (nullable = true)\n |-- lastactivateddate_801D: string (nullable = true)\n |-- lastapplicationdate_877D: string (nullable = true)\n |-- lastapprcommoditycat_1041M: string (nullable = true)\n |-- lastapprcommoditytypec_5251766M: string (nullable = true)\n |-- lastapprcredamount_781A: double (nullable = true)\n |-- lastapprdate_640D: string (nullable = true)\n |-- lastcancelreason_561M: string (nullable = true)\n |-- lastdelinqdate_224D: string (nullable = true)\n |-- lastdependentsnum_448L: double (nullable = true)\n |-- lastotherinc_902A: double (nullable = true)\n |-- lastotherlnsexpense_631A: double (nullable = true)\n |-- lastrejectcommoditycat_161M: string (nullable = true)\n |-- lastrejectcommodtypec_5251769M: string (nullable = true)\n |-- lastrejectcredamount_222A: double (nullable = true)\n |-- lastrejectdate_50D: string (nullable = true)\n |-- lastrejectreason_759M: string (nullable = true)\n |-- lastrejectreasonclient_4145040M: string (nullable = true)\n |-- lastrepayingdate_696D: string (nullable = true)\n |-- lastst_736L: string (nullable = true)\n |-- maininc_215A: double (nullable = true)\n |-- mastercontrelectronic_519L: double (nullable = true)\n |-- mastercontrexist_109L: double (nullable = true)\n |-- maxannuity_159A: double (nullable = true)\n |-- maxannuity_4075009A: double (nullable = true)\n |-- maxdbddpdlast1m_3658939P: double (nullable = true)\n |-- maxdbddpdtollast12m_3658940P: double (nullable = true)\n |-- maxdbddpdtollast6m_4187119P: double (nullable = true)\n |-- maxdebt4_972A: double (nullable = true)\n |-- maxdpdfrom6mto36m_3546853P: double (nullable = true)\n |-- maxdpdinstldate_3546855D: string (nullable = true)\n |-- maxdpdinstlnum_3546846P: double (nullable = true)\n |-- maxdpdlast12m_727P: double (nullable = true)\n |-- maxdpdlast24m_143P: double (nullable = true)\n |-- maxdpdlast3m_392P: double (nullable = true)\n |-- maxdpdlast6m_474P: double (nullable = true)\n |-- maxdpdlast9m_1059P: double (nullable = true)\n |-- maxdpdtolerance_374P: double (nullable = true)\n |-- maxinstallast24m_3658928A: double (nullable = true)\n |-- maxlnamtstart6m_4525199A: double (nullable = true)\n |-- maxoutstandbalancel12m_4187113A: double (nullable = true)\n |-- maxpmtlast3m_4525190A: double (nullable = true)\n |-- mindbddpdlast24m_3658935P: double (nullable = true)\n |-- mindbdtollast24m_4525191P: double (nullable = true)\n |-- mobilephncnt_593L: double (nullable = true)\n |-- monthsannuity_845L: double (nullable = true)\n |-- numactivecreds_622L: double (nullable = true)\n |-- numactivecredschannel_414L: double (nullable = true)\n |-- numactiverelcontr_750L: double (nullable = true)\n |-- numcontrs3months_479L: double (nullable = true)\n |-- numincomingpmts_3546848L: double (nullable = true)\n |-- numinstlallpaidearly3d_817L: double (nullable = true)\n |-- numinstls_657L: double (nullable = true)\n |-- numinstlsallpaid_934L: double (nullable = true)\n |-- numinstlswithdpd10_728L: double (nullable = true)\n |-- numinstlswithdpd5_4187116L: double (nullable = true)\n |-- numinstlswithoutdpd_562L: double (nullable = true)\n |-- numinstmatpaidtearly2d_4499204L: double (nullable = true)\n |-- numinstpaid_4499208L: double (nullable = true)\n |-- numinstpaidearly3d_3546850L: double (nullable = true)\n |-- numinstpaidearly3dest_4493216L: double (nullable = true)\n |-- numinstpaidearly5d_1087L: double (nullable = true)\n |-- numinstpaidearly5dest_4493211L: double (nullable = true)\n |-- numinstpaidearly5dobd_4499205L: double (nullable = true)\n |-- numinstpaidearly_338L: double (nullable = true)\n |-- numinstpaidearlyest_4493214L: double (nullable = true)\n |-- numinstpaidlastcontr_4325080L: double (nullable = true)\n |-- numinstpaidlate1d_3546852L: double (nullable = true)\n |-- numinstregularpaid_973L: double (nullable = true)\n |-- numinstregularpaidest_4493210L: double (nullable = true)\n |-- numinsttopaygr_769L: double (nullable = true)\n |-- numinsttopaygrest_4493213L: double (nullable = true)\n |-- numinstunpaidmax_3546851L: double (nullable = true)\n |-- numinstunpaidmaxest_4493212L: double (nullable = true)\n |-- numnotactivated_1143L: double (nullable = true)\n |-- numpmtchanneldd_318L: double (nullable = true)\n |-- numrejects9m_859L: double (nullable = true)\n |-- opencred_647L: boolean (nullable = true)\n |-- paytype1st_925L: string (nullable = true)\n |-- paytype_783L: string (nullable = true)\n |-- payvacationpostpone_4187118D: string (nullable = true)\n |-- pctinstlsallpaidearl3d_427L: double (nullable = true)\n |-- pctinstlsallpaidlat10d_839L: double (nullable = true)\n |-- pctinstlsallpaidlate1d_3546856L: double (nullable = true)\n |-- pctinstlsallpaidlate4d_3546849L: double (nullable = true)\n |-- pctinstlsallpaidlate6d_3546844L: double (nullable = true)\n |-- pmtnum_254L: double (nullable = true)\n |-- posfpd10lastmonth_333P: double (nullable = true)\n |-- posfpd30lastmonth_3976960P: double (nullable = true)\n |-- posfstqpd30lastmonth_3976962P: double (nullable = true)\n |-- previouscontdistrict_112M: string (nullable = true)\n |-- price_1097A: double (nullable = true)\n |-- sellerplacecnt_915L: double (nullable = true)\n |-- sellerplacescnt_216L: double (nullable = true)\n |-- sumoutstandtotal_3546847A: double (nullable = true)\n |-- sumoutstandtotalest_4493215A: double (nullable = true)\n |-- totaldebt_9A: double (nullable = true)\n |-- totalsettled_863A: double (nullable = true)\n |-- totinstallast1m_4525188A: double (nullable = true)\n |-- twobodfilling_608L: string (nullable = true)\n |-- typesuite_864L: string (nullable = true)\n |-- validfrom_1069D: string (nullable = true)\n\n","output_type":"stream"},{"name":"stderr","text":"25/11/08 07:24:04 WARN SparkStringUtils: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.sql.debug.maxToStringFields'.\n                                                                                                    \r","output_type":"stream"},{"execution_count":18,"output_type":"execute_result","data":{"text/plain":"   case_id  actualdpdtolerance_344P  amtinstpaidbefduel24m_4187115A  \\\n0        0                      NaN                             NaN   \n1        1                      NaN                             NaN   \n2        2                      NaN                             NaN   \n3        3                      NaN                             NaN   \n4        4                      NaN                             NaN   \n\n   annuity_780A  annuitynextmonth_57A  applicationcnt_361L  \\\n0      1917.600                 0.000                0.000   \n1      3134.000                 0.000                0.000   \n2      4937.000                 0.000                0.000   \n3      4643.600                 0.000                0.000   \n4      3390.200                 0.000                0.000   \n\n   applications30d_658L  applicationscnt_1086L  applicationscnt_464L  \\\n0                 0.000                  0.000                 0.000   \n1                 0.000                  0.000                 0.000   \n2                 0.000                  0.000                 0.000   \n3                 1.000                  0.000                 2.000   \n4                 1.000                  0.000                 0.000   \n\n   applicationscnt_629L  applicationscnt_867L  avgdbddpdlast24m_3658932P  \\\n0                 0.000                 0.000                        NaN   \n1                 0.000                 0.000                        NaN   \n2                 0.000                 0.000                        NaN   \n3                 0.000                 1.000                        NaN   \n4                 0.000                 1.000                        NaN   \n\n   avgdbddpdlast3m_4187120P  avgdbdtollast24m_4525197P  \\\n0                       NaN                        NaN   \n1                       NaN                        NaN   \n2                       NaN                        NaN   \n3                       NaN                        NaN   \n4                       NaN                        NaN   \n\n   avgdpdtolclosure24_3658938P  avginstallast24m_3658937A  \\\n0                          NaN                        NaN   \n1                          NaN                        NaN   \n2                          NaN                        NaN   \n3                          NaN                        NaN   \n4                          NaN                        NaN   \n\n   avglnamtstart24m_4525187A  avgmaxdpdlast9m_3716943P  \\\n0                        NaN                       NaN   \n1                        NaN                       NaN   \n2                        NaN                       NaN   \n3                        NaN                       NaN   \n4                        NaN                       NaN   \n\n   avgoutstandbalancel6m_4187114A  avgpmtlast12m_4525200A bankacctype_710L  \\\n0                             NaN                     NaN             None   \n1                             NaN                     NaN             None   \n2                             NaN                     NaN             None   \n3                             NaN                     NaN             None   \n4                             NaN                     NaN             None   \n\n  cardtype_51L  clientscnt12m_3712952L  clientscnt3m_3712950L  \\\n0         None                   0.000                  0.000   \n1         None                   0.000                  0.000   \n2         None                   0.000                  0.000   \n3         None                   0.000                  0.000   \n4         None                   0.000                  0.000   \n\n   clientscnt6m_3712949L  clientscnt_100L  clientscnt_1022L  clientscnt_1071L  \\\n0                  0.000            0.000             0.000             0.000   \n1                  0.000            0.000             0.000             0.000   \n2                  0.000            0.000             0.000             0.000   \n3                  0.000            0.000             0.000             0.000   \n4                  0.000            0.000             0.000             0.000   \n\n   clientscnt_1130L  clientscnt_136L  clientscnt_157L  clientscnt_257L  \\\n0             0.000              NaN            0.000            0.000   \n1             0.000            0.000            3.000            0.000   \n2             0.000              NaN            0.000            0.000   \n3             1.000              NaN            0.000            0.000   \n4             0.000              NaN            0.000            0.000   \n\n   clientscnt_304L  clientscnt_360L  clientscnt_493L  clientscnt_533L  \\\n0            0.000            0.000            0.000            0.000   \n1            0.000            0.000            0.000            0.000   \n2            0.000            0.000            0.000            0.000   \n3            0.000            0.000            0.000            0.000   \n4            0.000            0.000            0.000            0.000   \n\n   clientscnt_887L  clientscnt_946L  cntincpaycont9m_3716944L  \\\n0            0.000            0.000                       NaN   \n1            0.000            0.000                       NaN   \n2            0.000            0.000                       NaN   \n3            0.000            0.000                       NaN   \n4            0.000            0.000                       NaN   \n\n   cntpmts24_3658933L  commnoinclast6m_3546845L  credamount_770A  \\\n0                 NaN                     0.000        30000.000   \n1                 NaN                     0.000        19999.800   \n2                 NaN                       NaN        78000.000   \n3                 NaN                     0.000        40000.000   \n4                 NaN                     0.000        44000.000   \n\n  credtype_322L  currdebt_22A  currdebtcredtyperange_828A  \\\n0           CAL         0.000                       0.000   \n1           CAL         0.000                       0.000   \n2           CAL         0.000                       0.000   \n3           CAL         0.000                       0.000   \n4           CAL         0.000                       0.000   \n\n  datefirstoffer_1144D datelastinstal40dpd_247D datelastunpaid_3546854D  \\\n0                 None                     None                    None   \n1                 None                     None                    None   \n2                 None                     None                    None   \n3                 None                     None                    None   \n4                 None                     None                    None   \n\n   daysoverduetolerancedd_3976961L  deferredmnthsnum_166L  \\\n0                              NaN                  0.000   \n1                              NaN                  0.000   \n2                              NaN                  0.000   \n3                              NaN                  0.000   \n4                              NaN                  0.000   \n\n   disbursedcredamount_1113A disbursementtype_67L  downpmt_116A  \\\n0                  30000.000                  GBA         0.000   \n1                  19999.800                  GBA         0.000   \n2                  78000.000                  GBA         0.000   \n3                  40000.000                  GBA         0.000   \n4                  44000.000                  GBA         0.000   \n\n  dtlastpmtallstes_4499206D  eir_270L equalitydataagreement_891L  \\\n0                      None     0.450                       None   \n1                      None     0.300                       None   \n2                      None     0.450                       None   \n3                      None     0.420                       True   \n4                      None     0.450                       None   \n\n  equalityempfrom_62L firstclxcampaign_1125D firstdatedue_489D  \\\n0                None                   None              None   \n1                None                   None              None   \n2                None                   None              None   \n3                True                   None              None   \n4                None                   None              None   \n\n   homephncnt_628L  inittransactionamount_650A inittransactioncode_186L  \\\n0            0.000                         NaN                     CASH   \n1            0.000                         NaN                     CASH   \n2            1.000                         NaN                     CASH   \n3            0.000                         NaN                     CASH   \n4            1.000                         NaN                     CASH   \n\n   interestrate_311L  interestrategrace_34L  isbidproduct_1095L  \\\n0              0.450                    NaN               False   \n1              0.300                  0.000               False   \n2              0.450                    NaN               False   \n3              0.420                  0.000               False   \n4              0.450                    NaN               False   \n\n  isbidproductrequest_292L isdebitcard_729L lastactivateddate_801D  \\\n0                     None             None                   None   \n1                     None             None                   None   \n2                     None             None                   None   \n3                     None             None                   None   \n4                     None             None                   None   \n\n  lastapplicationdate_877D lastapprcommoditycat_1041M  \\\n0                     None                   a55475b1   \n1                     None                   a55475b1   \n2               2013-04-03                   a55475b1   \n3               2019-01-07                   a55475b1   \n4               2019-01-08                   a55475b1   \n\n  lastapprcommoditytypec_5251766M  lastapprcredamount_781A lastapprdate_640D  \\\n0                        a55475b1                      NaN              None   \n1                        a55475b1                      NaN              None   \n2                        a55475b1                      NaN              None   \n3                        a55475b1                      NaN              None   \n4                        a55475b1                      NaN              None   \n\n  lastcancelreason_561M lastdelinqdate_224D  lastdependentsnum_448L  \\\n0              a55475b1                None                     NaN   \n1              a55475b1                None                     NaN   \n2              a55475b1                None                     NaN   \n3           P94_109_143                None                     NaN   \n4             P24_27_36                None                     NaN   \n\n   lastotherinc_902A  lastotherlnsexpense_631A lastrejectcommoditycat_161M  \\\n0                NaN                       NaN                    a55475b1   \n1                NaN                       NaN                    a55475b1   \n2                NaN                       NaN                    a55475b1   \n3                NaN                       NaN                    a55475b1   \n4                NaN                       NaN                    a55475b1   \n\n  lastrejectcommodtypec_5251769M  lastrejectcredamount_222A  \\\n0                       a55475b1                        NaN   \n1                       a55475b1                        NaN   \n2                       a55475b1                  10000.000   \n3                       a55475b1                  59999.800   \n4                       a55475b1                        NaN   \n\n  lastrejectdate_50D lastrejectreason_759M lastrejectreasonclient_4145040M  \\\n0               None              a55475b1                        a55475b1   \n1               None              a55475b1                        a55475b1   \n2         2013-04-03              a55475b1                        a55475b1   \n3         2019-01-07           P94_109_143                        a55475b1   \n4               None              a55475b1                        a55475b1   \n\n  lastrepayingdate_696D lastst_736L  maininc_215A  mastercontrelectronic_519L  \\\n0                  None        None           NaN                       0.000   \n1                  None        None           NaN                       0.000   \n2                  None           D           NaN                       0.000   \n3                  None           D           NaN                       0.000   \n4                  None           T           NaN                       0.000   \n\n   mastercontrexist_109L  maxannuity_159A  maxannuity_4075009A  \\\n0                  0.000            0.000                  NaN   \n1                  0.000            0.000                  NaN   \n2                  0.000            0.000                  NaN   \n3                  0.000            0.000                  NaN   \n4                  0.000            0.000                  NaN   \n\n   maxdbddpdlast1m_3658939P  maxdbddpdtollast12m_3658940P  \\\n0                       NaN                           NaN   \n1                       NaN                           NaN   \n2                       NaN                           NaN   \n3                       NaN                           NaN   \n4                       NaN                           NaN   \n\n   maxdbddpdtollast6m_4187119P  maxdebt4_972A  maxdpdfrom6mto36m_3546853P  \\\n0                          NaN          0.000                       0.000   \n1                          NaN          0.000                       0.000   \n2                          NaN          0.000                         NaN   \n3                          NaN          0.000                       0.000   \n4                          NaN          0.000                       0.000   \n\n  maxdpdinstldate_3546855D  maxdpdinstlnum_3546846P  maxdpdlast12m_727P  \\\n0                     None                      NaN               0.000   \n1                     None                      NaN               0.000   \n2                     None                      NaN               0.000   \n3                     None                      NaN               0.000   \n4                     None                      NaN               0.000   \n\n   maxdpdlast24m_143P  maxdpdlast3m_392P  maxdpdlast6m_474P  \\\n0               0.000              0.000              0.000   \n1               0.000              0.000              0.000   \n2               0.000              0.000              0.000   \n3               0.000              0.000              0.000   \n4               0.000              0.000              0.000   \n\n   maxdpdlast9m_1059P  maxdpdtolerance_374P  maxinstallast24m_3658928A  \\\n0               0.000                 0.000                        NaN   \n1               0.000                 0.000                        NaN   \n2               0.000                 0.000                        NaN   \n3               0.000                 0.000                        NaN   \n4               0.000                 0.000                        NaN   \n\n   maxlnamtstart6m_4525199A  maxoutstandbalancel12m_4187113A  \\\n0                       NaN                              NaN   \n1                       NaN                              NaN   \n2                       NaN                              NaN   \n3                       NaN                              NaN   \n4                       NaN                              NaN   \n\n   maxpmtlast3m_4525190A  mindbddpdlast24m_3658935P  \\\n0                    NaN                        NaN   \n1                    NaN                        NaN   \n2                    NaN                        NaN   \n3                    NaN                        NaN   \n4                    NaN                        NaN   \n\n   mindbdtollast24m_4525191P  mobilephncnt_593L  monthsannuity_845L  \\\n0                        NaN              1.000                 NaN   \n1                        NaN              1.000                 NaN   \n2                        NaN              2.000                 NaN   \n3                        NaN              1.000                 NaN   \n4                        NaN              1.000                 NaN   \n\n   numactivecreds_622L  numactivecredschannel_414L  numactiverelcontr_750L  \\\n0                0.000                       0.000                   0.000   \n1                0.000                       0.000                   0.000   \n2                0.000                       0.000                   0.000   \n3                0.000                       0.000                   0.000   \n4                0.000                       0.000                   0.000   \n\n   numcontrs3months_479L  numincomingpmts_3546848L  \\\n0                  0.000                       NaN   \n1                  0.000                       NaN   \n2                  0.000                       NaN   \n3                  1.000                       NaN   \n4                  0.000                       NaN   \n\n   numinstlallpaidearly3d_817L  numinstls_657L  numinstlsallpaid_934L  \\\n0                          NaN           0.000                    NaN   \n1                          NaN           0.000                    NaN   \n2                          NaN           0.000                    NaN   \n3                          NaN           0.000                    NaN   \n4                          NaN           0.000                    NaN   \n\n   numinstlswithdpd10_728L  numinstlswithdpd5_4187116L  \\\n0                      NaN                         NaN   \n1                      NaN                         NaN   \n2                      NaN                         NaN   \n3                      NaN                         NaN   \n4                      NaN                         NaN   \n\n   numinstlswithoutdpd_562L  numinstmatpaidtearly2d_4499204L  \\\n0                       NaN                              NaN   \n1                       NaN                              NaN   \n2                       NaN                              NaN   \n3                       NaN                              NaN   \n4                       NaN                              NaN   \n\n   numinstpaid_4499208L  numinstpaidearly3d_3546850L  \\\n0                   NaN                          NaN   \n1                   NaN                          NaN   \n2                   NaN                          NaN   \n3                   NaN                          NaN   \n4                   NaN                          NaN   \n\n   numinstpaidearly3dest_4493216L  numinstpaidearly5d_1087L  \\\n0                             NaN                       NaN   \n1                             NaN                       NaN   \n2                             NaN                       NaN   \n3                             NaN                       NaN   \n4                             NaN                       NaN   \n\n   numinstpaidearly5dest_4493211L  numinstpaidearly5dobd_4499205L  \\\n0                             NaN                             NaN   \n1                             NaN                             NaN   \n2                             NaN                             NaN   \n3                             NaN                             NaN   \n4                             NaN                             NaN   \n\n   numinstpaidearly_338L  numinstpaidearlyest_4493214L  \\\n0                    NaN                           NaN   \n1                    NaN                           NaN   \n2                    NaN                           NaN   \n3                    NaN                           NaN   \n4                    NaN                           NaN   \n\n   numinstpaidlastcontr_4325080L  numinstpaidlate1d_3546852L  \\\n0                            NaN                         NaN   \n1                            NaN                         NaN   \n2                            NaN                         NaN   \n3                            NaN                         NaN   \n4                            NaN                         NaN   \n\n   numinstregularpaid_973L  numinstregularpaidest_4493210L  \\\n0                      NaN                             NaN   \n1                      NaN                             NaN   \n2                      NaN                             NaN   \n3                      NaN                             NaN   \n4                      NaN                             NaN   \n\n   numinsttopaygr_769L  numinsttopaygrest_4493213L  numinstunpaidmax_3546851L  \\\n0                  NaN                         NaN                        NaN   \n1                  NaN                         NaN                        NaN   \n2                  NaN                         NaN                        NaN   \n3                  NaN                         NaN                        NaN   \n4                  NaN                         NaN                        NaN   \n\n   numinstunpaidmaxest_4493212L  numnotactivated_1143L  numpmtchanneldd_318L  \\\n0                           NaN                  0.000                 0.000   \n1                           NaN                  0.000                 0.000   \n2                           NaN                  0.000                 0.000   \n3                           NaN                  0.000                 0.000   \n4                           NaN                  0.000                 0.000   \n\n   numrejects9m_859L opencred_647L paytype1st_925L paytype_783L  \\\n0              0.000          None           OTHER        OTHER   \n1              0.000          None           OTHER        OTHER   \n2              0.000         False           OTHER        OTHER   \n3              1.000         False           OTHER        OTHER   \n4              0.000         False           OTHER        OTHER   \n\n  payvacationpostpone_4187118D  pctinstlsallpaidearl3d_427L  \\\n0                         None                          NaN   \n1                         None                          NaN   \n2                         None                          NaN   \n3                         None                          NaN   \n4                         None                          NaN   \n\n   pctinstlsallpaidlat10d_839L  pctinstlsallpaidlate1d_3546856L  \\\n0                          NaN                              NaN   \n1                          NaN                              NaN   \n2                          NaN                              NaN   \n3                          NaN                              NaN   \n4                          NaN                              NaN   \n\n   pctinstlsallpaidlate4d_3546849L  pctinstlsallpaidlate6d_3546844L  \\\n0                              NaN                              NaN   \n1                              NaN                              NaN   \n2                              NaN                              NaN   \n3                              NaN                              NaN   \n4                              NaN                              NaN   \n\n   pmtnum_254L  posfpd10lastmonth_333P  posfpd30lastmonth_3976960P  \\\n0       24.000                   0.000                       0.000   \n1       18.000                   0.000                       0.000   \n2       36.000                   0.000                       0.000   \n3       12.000                   0.000                       0.000   \n4       24.000                   0.000                       0.000   \n\n   posfstqpd30lastmonth_3976962P previouscontdistrict_112M  price_1097A  \\\n0                            NaN                  a55475b1          NaN   \n1                            NaN                  a55475b1          NaN   \n2                            NaN                  a55475b1          NaN   \n3                            NaN                  a55475b1          NaN   \n4                            NaN                  a55475b1          NaN   \n\n   sellerplacecnt_915L  sellerplacescnt_216L  sumoutstandtotal_3546847A  \\\n0                0.000                 0.000                        NaN   \n1                0.000                 0.000                        NaN   \n2                0.000                 0.000                        NaN   \n3                1.000                 1.000                        NaN   \n4                0.000                 0.000                        NaN   \n\n   sumoutstandtotalest_4493215A  totaldebt_9A  totalsettled_863A  \\\n0                           NaN         0.000              0.000   \n1                           NaN         0.000              0.000   \n2                           NaN         0.000              0.000   \n3                           NaN         0.000              0.000   \n4                           NaN         0.000              0.000   \n\n   totinstallast1m_4525188A twobodfilling_608L typesuite_864L validfrom_1069D  \n0                       NaN                 BO           None            None  \n1                       NaN                 BO           None            None  \n2                       NaN                 BO             AL            None  \n3                       NaN                 BO             AL            None  \n4                       NaN                 BO             AL            None  ","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>actualdpdtolerance_344P</th>\n      <th>amtinstpaidbefduel24m_4187115A</th>\n      <th>annuity_780A</th>\n      <th>annuitynextmonth_57A</th>\n      <th>applicationcnt_361L</th>\n      <th>applications30d_658L</th>\n      <th>applicationscnt_1086L</th>\n      <th>applicationscnt_464L</th>\n      <th>applicationscnt_629L</th>\n      <th>applicationscnt_867L</th>\n      <th>avgdbddpdlast24m_3658932P</th>\n      <th>avgdbddpdlast3m_4187120P</th>\n      <th>avgdbdtollast24m_4525197P</th>\n      <th>avgdpdtolclosure24_3658938P</th>\n      <th>avginstallast24m_3658937A</th>\n      <th>avglnamtstart24m_4525187A</th>\n      <th>avgmaxdpdlast9m_3716943P</th>\n      <th>avgoutstandbalancel6m_4187114A</th>\n      <th>avgpmtlast12m_4525200A</th>\n      <th>bankacctype_710L</th>\n      <th>cardtype_51L</th>\n      <th>clientscnt12m_3712952L</th>\n      <th>clientscnt3m_3712950L</th>\n      <th>clientscnt6m_3712949L</th>\n      <th>clientscnt_100L</th>\n      <th>clientscnt_1022L</th>\n      <th>clientscnt_1071L</th>\n      <th>clientscnt_1130L</th>\n      <th>clientscnt_136L</th>\n      <th>clientscnt_157L</th>\n      <th>clientscnt_257L</th>\n      <th>clientscnt_304L</th>\n      <th>clientscnt_360L</th>\n      <th>clientscnt_493L</th>\n      <th>clientscnt_533L</th>\n      <th>clientscnt_887L</th>\n      <th>clientscnt_946L</th>\n      <th>cntincpaycont9m_3716944L</th>\n      <th>cntpmts24_3658933L</th>\n      <th>commnoinclast6m_3546845L</th>\n      <th>credamount_770A</th>\n      <th>credtype_322L</th>\n      <th>currdebt_22A</th>\n      <th>currdebtcredtyperange_828A</th>\n      <th>datefirstoffer_1144D</th>\n      <th>datelastinstal40dpd_247D</th>\n      <th>datelastunpaid_3546854D</th>\n      <th>daysoverduetolerancedd_3976961L</th>\n      <th>deferredmnthsnum_166L</th>\n      <th>disbursedcredamount_1113A</th>\n      <th>disbursementtype_67L</th>\n      <th>downpmt_116A</th>\n      <th>dtlastpmtallstes_4499206D</th>\n      <th>eir_270L</th>\n      <th>equalitydataagreement_891L</th>\n      <th>equalityempfrom_62L</th>\n      <th>firstclxcampaign_1125D</th>\n      <th>firstdatedue_489D</th>\n      <th>homephncnt_628L</th>\n      <th>inittransactionamount_650A</th>\n      <th>inittransactioncode_186L</th>\n      <th>interestrate_311L</th>\n      <th>interestrategrace_34L</th>\n      <th>isbidproduct_1095L</th>\n      <th>isbidproductrequest_292L</th>\n      <th>isdebitcard_729L</th>\n      <th>lastactivateddate_801D</th>\n      <th>lastapplicationdate_877D</th>\n      <th>lastapprcommoditycat_1041M</th>\n      <th>lastapprcommoditytypec_5251766M</th>\n      <th>lastapprcredamount_781A</th>\n      <th>lastapprdate_640D</th>\n      <th>lastcancelreason_561M</th>\n      <th>lastdelinqdate_224D</th>\n      <th>lastdependentsnum_448L</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>lastrejectdate_50D</th>\n      <th>lastrejectreason_759M</th>\n      <th>lastrejectreasonclient_4145040M</th>\n      <th>lastrepayingdate_696D</th>\n      <th>lastst_736L</th>\n      <th>maininc_215A</th>\n      <th>mastercontrelectronic_519L</th>\n      <th>mastercontrexist_109L</th>\n      <th>maxannuity_159A</th>\n      <th>maxannuity_4075009A</th>\n      <th>maxdbddpdlast1m_3658939P</th>\n      <th>maxdbddpdtollast12m_3658940P</th>\n      <th>maxdbddpdtollast6m_4187119P</th>\n      <th>maxdebt4_972A</th>\n      <th>maxdpdfrom6mto36m_3546853P</th>\n      <th>maxdpdinstldate_3546855D</th>\n      <th>maxdpdinstlnum_3546846P</th>\n      <th>maxdpdlast12m_727P</th>\n      <th>maxdpdlast24m_143P</th>\n      <th>maxdpdlast3m_392P</th>\n      <th>maxdpdlast6m_474P</th>\n      <th>maxdpdlast9m_1059P</th>\n      <th>maxdpdtolerance_374P</th>\n      <th>maxinstallast24m_3658928A</th>\n      <th>maxlnamtstart6m_4525199A</th>\n      <th>maxoutstandbalancel12m_4187113A</th>\n      <th>maxpmtlast3m_4525190A</th>\n      <th>mindbddpdlast24m_3658935P</th>\n      <th>mindbdtollast24m_4525191P</th>\n      <th>mobilephncnt_593L</th>\n      <th>monthsannuity_845L</th>\n      <th>numactivecreds_622L</th>\n      <th>numactivecredschannel_414L</th>\n      <th>numactiverelcontr_750L</th>\n      <th>numcontrs3months_479L</th>\n      <th>numincomingpmts_3546848L</th>\n      <th>numinstlallpaidearly3d_817L</th>\n      <th>numinstls_657L</th>\n      <th>numinstlsallpaid_934L</th>\n      <th>numinstlswithdpd10_728L</th>\n      <th>numinstlswithdpd5_4187116L</th>\n      <th>numinstlswithoutdpd_562L</th>\n      <th>numinstmatpaidtearly2d_4499204L</th>\n      <th>numinstpaid_4499208L</th>\n      <th>numinstpaidearly3d_3546850L</th>\n      <th>numinstpaidearly3dest_4493216L</th>\n      <th>numinstpaidearly5d_1087L</th>\n      <th>numinstpaidearly5dest_4493211L</th>\n      <th>numinstpaidearly5dobd_4499205L</th>\n      <th>numinstpaidearly_338L</th>\n      <th>numinstpaidearlyest_4493214L</th>\n      <th>numinstpaidlastcontr_4325080L</th>\n      <th>numinstpaidlate1d_3546852L</th>\n      <th>numinstregularpaid_973L</th>\n      <th>numinstregularpaidest_4493210L</th>\n      <th>numinsttopaygr_769L</th>\n      <th>numinsttopaygrest_4493213L</th>\n      <th>numinstunpaidmax_3546851L</th>\n      <th>numinstunpaidmaxest_4493212L</th>\n      <th>numnotactivated_1143L</th>\n      <th>numpmtchanneldd_318L</th>\n      <th>numrejects9m_859L</th>\n      <th>opencred_647L</th>\n      <th>paytype1st_925L</th>\n      <th>paytype_783L</th>\n      <th>payvacationpostpone_4187118D</th>\n      <th>pctinstlsallpaidearl3d_427L</th>\n      <th>pctinstlsallpaidlat10d_839L</th>\n      <th>pctinstlsallpaidlate1d_3546856L</th>\n      <th>pctinstlsallpaidlate4d_3546849L</th>\n      <th>pctinstlsallpaidlate6d_3546844L</th>\n      <th>pmtnum_254L</th>\n      <th>posfpd10lastmonth_333P</th>\n      <th>posfpd30lastmonth_3976960P</th>\n      <th>posfstqpd30lastmonth_3976962P</th>\n      <th>previouscontdistrict_112M</th>\n      <th>price_1097A</th>\n      <th>sellerplacecnt_915L</th>\n      <th>sellerplacescnt_216L</th>\n      <th>sumoutstandtotal_3546847A</th>\n      <th>sumoutstandtotalest_4493215A</th>\n      <th>totaldebt_9A</th>\n      <th>totalsettled_863A</th>\n      <th>totinstallast1m_4525188A</th>\n      <th>twobodfilling_608L</th>\n      <th>typesuite_864L</th>\n      <th>validfrom_1069D</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1917.600</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>30000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>30000.000</td>\n      <td>GBA</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0.450</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>CASH</td>\n      <td>0.450</td>\n      <td>NaN</td>\n      <td>False</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>OTHER</td>\n      <td>OTHER</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>BO</td>\n      <td>None</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3134.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>3.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>19999.800</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>19999.800</td>\n      <td>GBA</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0.300</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>CASH</td>\n      <td>0.300</td>\n      <td>0.000</td>\n      <td>False</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>OTHER</td>\n      <td>OTHER</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>18.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>BO</td>\n      <td>None</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>4937.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>78000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>78000.000</td>\n      <td>GBA</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0.450</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>CASH</td>\n      <td>0.450</td>\n      <td>NaN</td>\n      <td>False</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2013-04-03</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>10000.000</td>\n      <td>2013-04-03</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>D</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>False</td>\n      <td>OTHER</td>\n      <td>OTHER</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>BO</td>\n      <td>AL</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>3</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>4643.600</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>0.000</td>\n      <td>2.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>40000.000</td>\n      <td>GBA</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0.420</td>\n      <td>True</td>\n      <td>True</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>CASH</td>\n      <td>0.420</td>\n      <td>0.000</td>\n      <td>False</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-01-07</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P94_109_143</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>59999.800</td>\n      <td>2019-01-07</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>D</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>False</td>\n      <td>OTHER</td>\n      <td>OTHER</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>BO</td>\n      <td>AL</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>4</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3390.200</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>44000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>44000.000</td>\n      <td>GBA</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0.450</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>CASH</td>\n      <td>0.450</td>\n      <td>NaN</td>\n      <td>False</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-01-08</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P24_27_36</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>T</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>False</td>\n      <td>OTHER</td>\n      <td>OTHER</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>BO</td>\n      <td>AL</td>\n      <td>None</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":18},{"cell_type":"markdown","source":"#### Conclusion: \nStatic_0: Đây là bảng thông tin của từng case mà được đem lên để dùng cho quá trình predict.\n","metadata":{}},{"cell_type":"code","source":"# train_static_cb_0\ntrain_static_cb_0, train_static_cb_0_dfs = dataloader('train_static_cb_0')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:15.396039Z","iopub.execute_input":"2025-11-08T07:24:15.396389Z","iopub.status.idle":"2025-11-08T07:24:16.104939Z","shell.execute_reply.started":"2025-11-08T07:24:15.396356Z","shell.execute_reply":"2025-11-08T07:24:16.103884Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_cb_0.parquet → 1500476 rows\nTổng số dòng (đọc chung):      1500476\nTổng số dòng (đọc riêng lẻ):   1500476\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":19},{"cell_type":"code","source":"# train_static_cb_0.coalesce(1).write.option(\"header\", \"true\").mode(\"overwrite\").csv(\"/kaggle/working/train_static_cb_0\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:16.628608Z","iopub.execute_input":"2025-11-08T07:24:16.629254Z","iopub.status.idle":"2025-11-08T07:24:16.653658Z","shell.execute_reply.started":"2025-11-08T07:24:16.629227Z","shell.execute_reply":"2025-11-08T07:24:16.652763Z"}},"outputs":[],"execution_count":20},{"cell_type":"code","source":"# Print Schema\ntrain_static_cb_0.printSchema()\n\n# Show top 5\ntrain_static_cb_0.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:24:17.116319Z","iopub.execute_input":"2025-11-08T07:24:17.116616Z","iopub.status.idle":"2025-11-08T07:24:17.770709Z","shell.execute_reply.started":"2025-11-08T07:24:17.116595Z","shell.execute_reply":"2025-11-08T07:24:17.769093Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- assignmentdate_238D: string (nullable = true)\n |-- assignmentdate_4527235D: string (nullable = true)\n |-- assignmentdate_4955616D: string (nullable = true)\n |-- birthdate_574D: string (nullable = true)\n |-- contractssum_5085716L: double (nullable = true)\n |-- dateofbirth_337D: string (nullable = true)\n |-- dateofbirth_342D: string (nullable = true)\n |-- days120_123L: double (nullable = true)\n |-- days180_256L: double (nullable = true)\n |-- days30_165L: double (nullable = true)\n |-- days360_512L: double (nullable = true)\n |-- days90_310L: double (nullable = true)\n |-- description_5085714M: string (nullable = true)\n |-- education_1103M: string (nullable = true)\n |-- education_88M: string (nullable = true)\n |-- firstquarter_103L: double (nullable = true)\n |-- for3years_128L: double (nullable = true)\n |-- for3years_504L: double (nullable = true)\n |-- for3years_584L: double (nullable = true)\n |-- formonth_118L: double (nullable = true)\n |-- formonth_206L: double (nullable = true)\n |-- formonth_535L: double (nullable = true)\n |-- forquarter_1017L: double (nullable = true)\n |-- forquarter_462L: double (nullable = true)\n |-- forquarter_634L: double (nullable = true)\n |-- fortoday_1092L: double (nullable = true)\n |-- forweek_1077L: double (nullable = true)\n |-- forweek_528L: double (nullable = true)\n |-- forweek_601L: double (nullable = true)\n |-- foryear_618L: double (nullable = true)\n |-- foryear_818L: double (nullable = true)\n |-- foryear_850L: double (nullable = true)\n |-- fourthquarter_440L: double (nullable = true)\n |-- maritalst_385M: string (nullable = true)\n |-- maritalst_893M: string (nullable = true)\n |-- numberofqueries_373L: double (nullable = true)\n |-- pmtaverage_3A: double (nullable = true)\n |-- pmtaverage_4527227A: double (nullable = true)\n |-- pmtaverage_4955615A: double (nullable = true)\n |-- pmtcount_4527229L: double (nullable = true)\n |-- pmtcount_4955617L: double (nullable = true)\n |-- pmtcount_693L: double (nullable = true)\n |-- pmtscount_423L: double (nullable = true)\n |-- pmtssum_45A: double (nullable = true)\n |-- requesttype_4525192L: string (nullable = true)\n |-- responsedate_1012D: string (nullable = true)\n |-- responsedate_4527233D: string (nullable = true)\n |-- responsedate_4917613D: string (nullable = true)\n |-- riskassesment_302T: string (nullable = true)\n |-- riskassesment_940T: double (nullable = true)\n |-- secondquarter_766L: double (nullable = true)\n |-- thirdquarter_1082L: double (nullable = true)\n\n","output_type":"stream"},{"execution_count":21,"output_type":"execute_result","data":{"text/plain":"   case_id assignmentdate_238D assignmentdate_4527235D  \\\n0      357                None                    None   \n1      381                None                    None   \n2      388                None                    None   \n3      405                None                    None   \n4      409                None                    None   \n\n  assignmentdate_4955616D birthdate_574D  contractssum_5085716L  \\\n0                    None     1988-04-01                    NaN   \n1                    None     1973-11-01                    NaN   \n2                    None     1989-04-01                    NaN   \n3                    None     1974-03-01                    NaN   \n4                    None     1993-06-01                    NaN   \n\n  dateofbirth_337D dateofbirth_342D  days120_123L  days180_256L  days30_165L  \\\n0             None             None           NaN           NaN          NaN   \n1             None             None           NaN           NaN          NaN   \n2       1989-04-01             None         6.000         8.000        2.000   \n3       1974-03-01             None         0.000         0.000        0.000   \n4       1993-06-01             None         2.000         3.000        0.000   \n\n   days360_512L  days90_310L description_5085714M education_1103M  \\\n0           NaN          NaN             a55475b1        a55475b1   \n1           NaN          NaN             a55475b1        a55475b1   \n2        10.000        4.000             a55475b1        a55475b1   \n3         1.000        0.000             a55475b1        a55475b1   \n4         3.000        1.000             a55475b1        717ddd49   \n\n  education_88M  firstquarter_103L  for3years_128L  for3years_504L  \\\n0      a55475b1                NaN             NaN             NaN   \n1      a55475b1                NaN             NaN             NaN   \n2      a55475b1              2.000             NaN             NaN   \n3      a55475b1              0.000             NaN             NaN   \n4      a55475b1              4.000             NaN             NaN   \n\n   for3years_584L  formonth_118L  formonth_206L  formonth_535L  \\\n0             NaN            NaN            NaN            NaN   \n1             NaN            NaN            NaN            NaN   \n2             NaN            NaN            NaN            NaN   \n3             NaN            NaN            NaN            NaN   \n4             NaN            NaN            NaN            NaN   \n\n   forquarter_1017L  forquarter_462L  forquarter_634L  fortoday_1092L  \\\n0               NaN              NaN              NaN             NaN   \n1               NaN              NaN              NaN             NaN   \n2               NaN              NaN              NaN             NaN   \n3               NaN              NaN              NaN             NaN   \n4               NaN              NaN              NaN             NaN   \n\n   forweek_1077L  forweek_528L  forweek_601L  foryear_618L  foryear_818L  \\\n0            NaN           NaN           NaN           NaN           NaN   \n1            NaN           NaN           NaN           NaN           NaN   \n2            NaN           NaN           NaN           NaN           NaN   \n3            NaN           NaN           NaN           NaN           NaN   \n4            NaN           NaN           NaN           NaN           NaN   \n\n   foryear_850L  fourthquarter_440L maritalst_385M maritalst_893M  \\\n0           NaN                 NaN       a55475b1       a55475b1   \n1           NaN                 NaN       a55475b1       a55475b1   \n2           NaN               6.000       a55475b1       a55475b1   \n3           NaN               4.000       a55475b1       a55475b1   \n4           NaN               1.000       a7fcb6e5       a55475b1   \n\n   numberofqueries_373L  pmtaverage_3A  pmtaverage_4527227A  \\\n0                   NaN            NaN                  NaN   \n1                   NaN            NaN                  NaN   \n2                10.000            NaN                  NaN   \n3                 1.000            NaN                  NaN   \n4                 3.000            NaN                  NaN   \n\n   pmtaverage_4955615A  pmtcount_4527229L  pmtcount_4955617L  pmtcount_693L  \\\n0                  NaN                NaN                NaN            NaN   \n1                  NaN                NaN                NaN            NaN   \n2                  NaN                NaN                NaN            NaN   \n3                  NaN                NaN                NaN            NaN   \n4                  NaN                NaN                NaN            NaN   \n\n   pmtscount_423L  pmtssum_45A requesttype_4525192L responsedate_1012D  \\\n0           6.000     6301.400                 None         2019-01-25   \n1           6.000     4019.600                 None         2019-01-25   \n2           6.000    14548.000                 None         2019-01-28   \n3           6.000    10498.240                 None         2019-01-21   \n4           7.000     6344.880                 None         2019-01-21   \n\n  responsedate_4527233D responsedate_4917613D riskassesment_302T  \\\n0                  None                  None               None   \n1                  None                  None               None   \n2                  None                  None               None   \n3                  None                  None               None   \n4                  None                  None               None   \n\n   riskassesment_940T  secondquarter_766L  thirdquarter_1082L  \n0                 NaN                 NaN                 NaN  \n1                 NaN                 NaN                 NaN  \n2                 NaN               3.000               5.000  \n3                 NaN               2.000               0.000  \n4                 NaN               0.000               4.000  ","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>assignmentdate_238D</th>\n      <th>assignmentdate_4527235D</th>\n      <th>assignmentdate_4955616D</th>\n      <th>birthdate_574D</th>\n      <th>contractssum_5085716L</th>\n      <th>dateofbirth_337D</th>\n      <th>dateofbirth_342D</th>\n      <th>days120_123L</th>\n      <th>days180_256L</th>\n      <th>days30_165L</th>\n      <th>days360_512L</th>\n      <th>days90_310L</th>\n      <th>description_5085714M</th>\n      <th>education_1103M</th>\n      <th>education_88M</th>\n      <th>firstquarter_103L</th>\n      <th>for3years_128L</th>\n      <th>for3years_504L</th>\n      <th>for3years_584L</th>\n      <th>formonth_118L</th>\n      <th>formonth_206L</th>\n      <th>formonth_535L</th>\n      <th>forquarter_1017L</th>\n      <th>forquarter_462L</th>\n      <th>forquarter_634L</th>\n      <th>fortoday_1092L</th>\n      <th>forweek_1077L</th>\n      <th>forweek_528L</th>\n      <th>forweek_601L</th>\n      <th>foryear_618L</th>\n      <th>foryear_818L</th>\n      <th>foryear_850L</th>\n      <th>fourthquarter_440L</th>\n      <th>maritalst_385M</th>\n      <th>maritalst_893M</th>\n      <th>numberofqueries_373L</th>\n      <th>pmtaverage_3A</th>\n      <th>pmtaverage_4527227A</th>\n      <th>pmtaverage_4955615A</th>\n      <th>pmtcount_4527229L</th>\n      <th>pmtcount_4955617L</th>\n      <th>pmtcount_693L</th>\n      <th>pmtscount_423L</th>\n      <th>pmtssum_45A</th>\n      <th>requesttype_4525192L</th>\n      <th>responsedate_1012D</th>\n      <th>responsedate_4527233D</th>\n      <th>responsedate_4917613D</th>\n      <th>riskassesment_302T</th>\n      <th>riskassesment_940T</th>\n      <th>secondquarter_766L</th>\n      <th>thirdquarter_1082L</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>357</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1988-04-01</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>6301.400</td>\n      <td>None</td>\n      <td>2019-01-25</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>381</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1973-11-01</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>4019.600</td>\n      <td>None</td>\n      <td>2019-01-25</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>388</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1989-04-01</td>\n      <td>NaN</td>\n      <td>1989-04-01</td>\n      <td>None</td>\n      <td>6.000</td>\n      <td>8.000</td>\n      <td>2.000</td>\n      <td>10.000</td>\n      <td>4.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>2.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>10.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>14548.000</td>\n      <td>None</td>\n      <td>2019-01-28</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>3.000</td>\n      <td>5.000</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>405</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1974-03-01</td>\n      <td>NaN</td>\n      <td>1974-03-01</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>0.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>4.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>1.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>10498.240</td>\n      <td>None</td>\n      <td>2019-01-21</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>2.000</td>\n      <td>0.000</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>409</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>1993-06-01</td>\n      <td>NaN</td>\n      <td>1993-06-01</td>\n      <td>None</td>\n      <td>2.000</td>\n      <td>3.000</td>\n      <td>0.000</td>\n      <td>3.000</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>717ddd49</td>\n      <td>a55475b1</td>\n      <td>4.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1.000</td>\n      <td>a7fcb6e5</td>\n      <td>a55475b1</td>\n      <td>3.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>7.000</td>\n      <td>6344.880</td>\n      <td>None</td>\n      <td>2019-01-21</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>4.000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":21},{"cell_type":"markdown","source":"### Conclusion:\nĐây là các thông tin thêm của từng case, lưu ý, chỉ có 1 vài đơn có thôi \n","metadata":{}},{"cell_type":"code","source":"train_static_0.select(\"case_id\").distinct().count()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:28:03.054669Z","iopub.execute_input":"2025-11-08T07:28:03.05566Z","iopub.status.idle":"2025-11-08T07:28:04.729607Z","shell.execute_reply.started":"2025-11-08T07:28:03.055633Z","shell.execute_reply":"2025-11-08T07:28:04.728786Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"1526659"},"metadata":{}}],"execution_count":29},{"cell_type":"code","source":"train_base.select(\"case_id\").distinct().count()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:28:26.525219Z","iopub.execute_input":"2025-11-08T07:28:26.525536Z","iopub.status.idle":"2025-11-08T07:28:27.758498Z","shell.execute_reply.started":"2025-11-08T07:28:26.525512Z","shell.execute_reply":"2025-11-08T07:28:27.757651Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":30,"output_type":"execute_result","data":{"text/plain":"1526659"},"metadata":{}}],"execution_count":30},{"cell_type":"code","source":"train_0 = train_base.join(train_static_0, on=\"case_id\", how=\"left\")  \n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:25:38.551352Z","iopub.execute_input":"2025-11-08T07:25:38.551641Z","iopub.status.idle":"2025-11-08T07:25:38.625871Z","shell.execute_reply.started":"2025-11-08T07:25:38.55162Z","shell.execute_reply":"2025-11-08T07:25:38.624804Z"}},"outputs":[],"execution_count":24},{"cell_type":"code","source":"train_0.filter(\n    (train_0.actualdpdtolerance_344P.isNull()) \n).distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:35:30.678716Z","iopub.execute_input":"2025-11-08T07:35:30.679099Z","iopub.status.idle":"2025-11-08T07:36:04.052285Z","shell.execute_reply.started":"2025-11-08T07:35:30.679079Z","shell.execute_reply":"2025-11-08T07:36:04.050457Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":35,"output_type":"execute_result","data":{"text/plain":"418178"},"metadata":{}}],"execution_count":35},{"cell_type":"code","source":"train_0.filter(\n    (train_0.actualdpdtolerance_344P.isNull()) &(train_0.target ==1 )\n).distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:36:42.004911Z","iopub.execute_input":"2025-11-08T07:36:42.005353Z","iopub.status.idle":"2025-11-08T07:37:05.11366Z","shell.execute_reply.started":"2025-11-08T07:36:42.005317Z","shell.execute_reply":"2025-11-08T07:37:05.112796Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":37,"output_type":"execute_result","data":{"text/plain":"11785"},"metadata":{}}],"execution_count":37},{"cell_type":"code","source":"36209 - 1072272","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_0.filter(\n    (train_0.actualdpdtolerance_344P.isNull()) &(train_0.target ==0 )\n).distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T07:36:04.053503Z","iopub.execute_input":"2025-11-08T07:36:04.053828Z","iopub.status.idle":"2025-11-08T07:36:42.003192Z","shell.execute_reply.started":"2025-11-08T07:36:04.053802Z","shell.execute_reply":"2025-11-08T07:36:42.001829Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":36,"output_type":"execute_result","data":{"text/plain":"406393"},"metadata":{}}],"execution_count":36},{"cell_type":"code","source":"# Chọn dữ liệu không null\ndf1 = train_0.filter((train_0.actualdpdtolerance_344P.isNotNull()) & (train_0.target == 1))\ndf0 = train_0.filter((train_0.actualdpdtolerance_344P.isNotNull()) & (train_0.target == 0))\n\n# Lấy histogram (bin=10 ví dụ)\nhist1 = df1.select(\"actualdpdtolerance_344P\").rdd.flatMap(lambda x: x).histogram(10)\nhist0 = df0.select(\"actualdpdtolerance_344P\").rdd.flatMap(lambda x: x).histogram(10)\n\nprint(\"Target=1 histogram:\", hist1)\nprint(\"Target=0 histogram:\", hist0)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T08:09:35.186461Z","iopub.execute_input":"2025-11-08T08:09:35.186875Z","iopub.status.idle":"2025-11-08T08:09:47.716036Z","shell.execute_reply.started":"2025-11-08T08:09:35.186849Z","shell.execute_reply":"2025-11-08T08:09:47.715017Z"}},"outputs":[{"name":"stderr","text":"[Stage 162:=========================================================>                   (3 + 1) / 4]\r","output_type":"stream"},{"name":"stdout","text":"Target=1 histogram: ([0.0, 179.9, 359.8, 539.7, 719.6, 899.5, 1079.4, 1259.3, 1439.2, 1619.1000000000001, 1799.0], [36204, 3, 0, 0, 0, 0, 0, 0, 0, 2])\nTarget=0 histogram: ([0.0, 420.6, 841.2, 1261.8000000000002, 1682.4, 2103.0, 2523.6000000000004, 2944.2000000000003, 3364.8, 3785.4, 4206.0], [1072250, 0, 4, 3, 6, 3, 1, 0, 3, 2])\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"}],"execution_count":41},{"cell_type":"code","source":"from pyspark.sql.functions import col, when, count, year, month\nimport matplotlib.pyplot as plt\n\n# Thêm cột year và month\ndf_count = train_0.withColumn(\"year\", year(col(\"date_decision\"))) \\\n                  .withColumn(\"month\", month(col(\"date_decision\"))) \\\n                  .groupBy(\"year\", \"month\").agg(\n                      count(when(col(\"actualdpdtolerance_344P\").isNull(), 1)).alias(\"null_count\"),\n                      count(when(col(\"actualdpdtolerance_344P\").isNotNull(), 1)).alias(\"not_null_count\")\n                  )\n\n# Sắp xếp theo year, month\ndf_count_pd = df_count.orderBy(\"year\", \"month\").toPandas()\n\n# Tạo cột year-month cho trục x\ndf_count_pd[\"year_month\"] = df_count_pd[\"year\"].astype(str) + \"-\" + df_count_pd[\"month\"].astype(str).str.zfill(2)\n\n# Vẽ line chart\nplt.figure(figsize=(12,6))\nplt.plot(df_count_pd[\"year_month\"], df_count_pd[\"null_count\"], label=\"Null\", marker='o')\nplt.plot(df_count_pd[\"year_month\"], df_count_pd[\"not_null_count\"], label=\"Not Null\", marker='o')\nplt.xlabel(\"Year-Month\")\nplt.ylabel(\"Count\")\nplt.title(\"Number of Null / Not Null actualdpdtolerance_344P by Year-Month\")\nplt.xticks(rotation=45)\nplt.legend()\nplt.tight_layout()\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T08:14:42.481259Z","iopub.execute_input":"2025-11-08T08:14:42.481603Z","iopub.status.idle":"2025-11-08T08:14:45.161099Z","shell.execute_reply.started":"2025-11-08T08:14:42.481578Z","shell.execute_reply":"2025-11-08T08:14:45.160172Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 1200x600 with 1 Axes>","image/png":"iVBORw0KGgoAAAANSUhEUgAABJoAAAJCCAYAAACI1K3+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd1xV9f8H8Ne9l71BBBFUHFwQBQEH7gS3Zm6z1MqWaWppWa4yTa3UtDQ1NetX+i23ubc4cSsOloDiAAGZsse95/cH3pvIhgvnAq/n4+FDvWe9zh3n3vu+nyERBEEAERERERERERFRJUnFDkBERERERERERLUDC01ERERERERERKQRLDQREREREREREZFGsNBEREREREREREQawUITERERERERERFpBAtNRERERERERESkESw0ERERERERERGRRrDQREREREREREREGsFCExERERERERERaQQLTURU66xatQrOzs4YN26c2FGqVE5ODr755ht07NgRrVq1wrBhw8SOVKriHhtnZ2c4Ozvj0qVL5d7nlStX4OzsjI8++khTMekl48aNg7OzM1atWqW+7dKlS+rHjYo3c+ZMODs7Y+bMmeXarqj7vCpV5jVYHtV9XkQvq+hrkuhlqvdBT09PsaMQaR0WmohI/QXD29sbSUlJZV6fxPXHH3/gn3/+QVJSEtzc3NC0adNSt3n8+LH68evbty9ycnLKtL6vr6+mYmucv78/AKBTp06lrltTz3/Xrl3q3F9++WWZ1+cXKSIqyunTpzFx4kR06dIFrVq1Qvv27TFmzBhs2rSp1OviiwIDA+Hq6lru4mFp2714zSvqj6enJ/r164dvvvkGERERZT6uNvjhhx/Un7kSExNLXT80NBStWrWCs7Mztm/fXg0JNUv1A5OzszPGjx9fpm0EQYCPj0+1FcCJSPNYaCIiteTkZPz4449ix6AyOnHiBADg9ddfx5YtW8r92EVGRmLjxo1VEa1aXbhwAUDZCk0vEuv833nnnUoVrvbs2YOrV69qMFHttGbNGjg7O+Px48diR6nR5syZwx8WahFBEDB37lx8+OGHOHnyJExMTODt7Y369evj6tWrWLhwId544w2kpaWVuq+8vDzMmTMHCoWiXBnKs52Ojg569uxZ4I+vry9atmyJ2NhY/PPPPxg8eDD+/fffcmUQ05QpU2Bvb4/k5GQs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ttvtuO+++1yGTKWlpUhOTgYAlJWVub1v5MiRsNlsWLBgARo1aoTvf//7VR7bt29fAMCOHTsq7Nu1axc8PT0RGRl51w3lZz3di5+PiIiIzMQzmoiIiIgqMXLkSKSlpeH3v/89iouLER0djZs3byIjIwM7d+7EjBkznMdGRkYiMzMTCQkJ6Nu3Ly5fvoyVK1di6NChOHHiBD744AP885//RFhYmNv6QkJCEBwcjKNHjyI2NhaNGzeu8tigoCDExcUhJSUFLVq0QP/+/WGz2bBr1y78/e9/x7hx4xAYGHjXDeXrOO3ZswfBwcFo27YtQkNDv/HPRERERObjoImIiIioEhaLBWvWrMGKFSuwc+dOJCUlwcfHB1arFa+++iqGDBniPHbOnDnw8fFBSkoK1qxZg86dO2Py5MkYNGgQLl++jNTUVEybNg1vv/22WxtHjBiBuXPnVrkI+J1eeeUVdOrUCWlpadi8eTO8vLzQqVMnzJs3DyNHjvxG99+hQwc888wzSElJwYwZMzBlyhQOmoiIiOo5D/mqVSGJiIiIiIiIiIiqiWs0ERERERERERGRW3DQREREREREREREbsFBExERERERERERuQUHTURERERERERE5BYcNBERERERERERkVtw0ERERERERERERG7BQRMREREREREREbkFB01EREREREREROQWHDQREREREREREZFbcNBERERERERERERuwUETERERERERERG5BQdNRERERERERETkFhw0ERERERERERGRW/wX8ypqlk+h32wAAAAASUVORK5CYII=\n"},"metadata":{}},{"name":"stderr","text":"----------------------------------------\nException occurred during processing of request from ('127.0.0.1', 59274)\nTraceback (most recent call last):\n  File \"/usr/lib/python3.11/socketserver.py\", line 317, in _handle_request_noblock\n    self.process_request(request, client_address)\n  File \"/usr/lib/python3.11/socketserver.py\", line 348, in process_request\n    self.finish_request(request, client_address)\n  File \"/usr/lib/python3.11/socketserver.py\", line 361, in finish_request\n    self.RequestHandlerClass(request, client_address, self)\n  File \"/usr/lib/python3.11/socketserver.py\", line 755, in __init__\n    self.handle()\n  File \"/usr/local/lib/python3.11/dist-packages/pyspark/accumulators.py\", line 295, in handle\n    poll(accum_updates)\n  File \"/usr/local/lib/python3.11/dist-packages/pyspark/accumulators.py\", line 267, in poll\n    if self.rfile in r and func():\n                           ^^^^^^\n  File \"/usr/local/lib/python3.11/dist-packages/pyspark/accumulators.py\", line 271, in accum_updates\n    num_updates = read_int(self.rfile)\n                  ^^^^^^^^^^^^^^^^^^^^\n  File \"/usr/local/lib/python3.11/dist-packages/pyspark/serializers.py\", line 596, in read_int\n    raise EOFError\nEOFError\n----------------------------------------\n","output_type":"stream"}],"execution_count":45},{"cell_type":"markdown","source":"## Static: Depth 1 & Depth 2 Features\nDepth 1 chính là độ sâu thứ 2, nghĩa là nếu muốn sử dụng depth 1 thì phải aggregate về depth 0, theo chiều case, nói cách khác, depth 1 đang không theo chiều primary key là case_id\n\nDepth 2 là độ sâu thứ 3, nghĩa là ta phải aggregate về depth 1 và từ depth 1 ta phải aggregate về depth 0, từ đó mới có feature cho model\n\n","metadata":{}},{"cell_type":"markdown","source":"### Applprev\nApplprev nghĩa là Application Previous, nghĩa là các đơn apply trước đó, tình trạng của nó như thế nào. \n\nNghĩa là nếu bạn apply thì bạn sẽ có data chỗ này, còn nếu như là khách hàng mới hoàn toàn thì bạn sẽ không có.\nQuy trình xử lý sẽ từ depth 2 về depth 1 và từ depth 1 về depth 0\nTrong quá trình xử lý sẽ đi sâu về ý nghĩa của feature\n","metadata":{}},{"cell_type":"code","source":"train_applprev_2, train_applprev_2_dfs = dataloader('train_applprev_2')\n\ntrain_applprev_1, train_applprev_1_dfs = dataloader('train_applprev_1')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T08:05:28.314068Z","iopub.execute_input":"2025-11-08T08:05:28.31606Z","iopub.status.idle":"2025-11-08T08:05:30.135816Z","shell.execute_reply.started":"2025-11-08T08:05:28.316002Z","shell.execute_reply":"2025-11-08T08:05:30.134938Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_2.parquet → 14075487 rows\nTổng số dòng (đọc chung):      14075487\nTổng số dòng (đọc riêng lẻ):   14075487\n✅ Số dòng khớp nhau\nFile 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_1.parquet → 2638295 rows\nFile 1: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_0.parquet → 3887684 rows\nTổng số dòng (đọc chung):      6525979\nTổng số dòng (đọc riêng lẻ):   6525979\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":38},{"cell_type":"code","source":"applprev2 = spark.read.option(\"header\", \"true\").option(\"inferSchema\", \"true\").csv(\"/kaggle/input/home-applprev-2-agg-features\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T08:05:30.137478Z","iopub.execute_input":"2025-11-08T08:05:30.137834Z","iopub.status.idle":"2025-11-08T08:06:00.101724Z","shell.execute_reply.started":"2025-11-08T08:05:30.137809Z","shell.execute_reply":"2025-11-08T08:06:00.100703Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"}],"execution_count":39},{"cell_type":"markdown","source":"##### Note:\nCác feature 2 đã được tính thông qua /kaggle/input/home-applprev-2-agg-features, có thể sử dụng để làm việc với feature 1 rồi:\n","metadata":{}},{"cell_type":"code","source":"train_applprev_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-08T08:06:00.102997Z","iopub.execute_input":"2025-11-08T08:06:00.103313Z","iopub.status.idle":"2025-11-08T08:06:00.803241Z","shell.execute_reply.started":"2025-11-08T08:06:00.103287Z","shell.execute_reply":"2025-11-08T08:06:00.802083Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":40,"output_type":"execute_result","data":{"text/plain":"   case_id  actualdpd_943P  annuity_853A approvaldate_319D  \\\n0        2           0.000       640.200              None   \n1        2           0.000      1682.400              None   \n2        3           0.000      6140.000              None   \n3        4           0.000      2556.600              None   \n4        5           0.000           NaN              None   \n\n   byoccupationinc_3656910L cancelreason_3545846M  childnum_21L  \\\n0                       NaN              a55475b1         0.000   \n1                       NaN              a55475b1         0.000   \n2                       NaN           P94_109_143           NaN   \n3                       NaN             P24_27_36           NaN   \n4                       NaN           P85_114_140           NaN   \n\n  creationdate_885D  credacc_actualbalance_314A  credacc_credlmt_575A  \\\n0        2013-04-03                         NaN                 0.000   \n1        2013-04-03                         NaN                 0.000   \n2        2019-01-07                         NaN                 0.000   \n3        2019-01-08                         NaN                 0.000   \n4        2019-01-16                         NaN                   NaN   \n\n   credacc_maxhisbal_375A  credacc_minhisbal_90A credacc_status_367L  \\\n0                     NaN                    NaN                None   \n1                     NaN                    NaN                None   \n2                     NaN                    NaN                None   \n3                     NaN                    NaN                None   \n4                     NaN                    NaN                None   \n\n   credacc_transactions_402L  credamount_590A credtype_587L  currdebt_94A  \\\n0                        NaN        10000.000           CAL           NaN   \n1                        NaN        16000.000           CAL           NaN   \n2                        NaN        59999.800           CAL           NaN   \n3                        NaN        40000.000           CAL           NaN   \n4                        NaN              NaN          None           NaN   \n\n  dateactivated_425D district_544M  downpmt_134A dtlastpmt_581D  \\\n0               None  P136_108_173         0.000           None   \n1               None  P136_108_173         0.000           None   \n2               None   P131_33_167         0.000           None   \n3               None   P194_82_174         0.000           None   \n4               None    P54_133_26           NaN           None   \n\n  dtlastpmtallstes_3545839D education_1138M employedfrom_700D  \\\n0                      None      P97_36_170        2010-02-15   \n1                      None      P97_36_170        2010-02-15   \n2                      None      P97_36_170        2018-05-15   \n3                      None        a55475b1              None   \n4                      None        a55475b1              None   \n\n  familystate_726L firstnonzeroinstldate_307D inittransactioncode_279L  \\\n0           SINGLE                 2013-05-04                     CASH   \n1           SINGLE                 2013-05-04                     CASH   \n2          MARRIED                 2019-02-07                     CASH   \n3             None                 2019-02-08                     CASH   \n4             None                       None                     None   \n\n   isbidproduct_390L isdebitcard_527L  mainoccupationinc_437A  \\\n0              False             None                8200.000   \n1              False             None                8200.000   \n2              False             None               11000.000   \n3              False             None               16000.000   \n4              False             None               62000.000   \n\n   maxdpdtolerance_577P  num_group1  outstandingdebt_522A  pmtnum_8L  \\\n0                   NaN           0                   NaN     24.000   \n1                   NaN           1                   NaN     12.000   \n2                   NaN           0                   NaN     12.000   \n3                   NaN           0                   NaN     24.000   \n4                   NaN           0                   NaN        NaN   \n\n  postype_4733339M profession_152M rejectreason_755M  \\\n0         a55475b1        a55475b1          a55475b1   \n1         a55475b1        a55475b1          a55475b1   \n2         a55475b1        a55475b1       P94_109_143   \n3         a55475b1        a55475b1          a55475b1   \n4         a55475b1        a55475b1          a55475b1   \n\n  rejectreasonclient_4145042M  revolvingaccount_394A status_219L  tenor_203L  \n0                    a55475b1                    NaN           D      24.000  \n1                    a55475b1                    NaN           D      12.000  \n2                    a55475b1                    NaN           D      12.000  \n3                    a55475b1                    NaN           T      24.000  \n4                    a55475b1                    NaN           T         NaN  ","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>actualdpd_943P</th>\n      <th>annuity_853A</th>\n      <th>approvaldate_319D</th>\n      <th>byoccupationinc_3656910L</th>\n      <th>cancelreason_3545846M</th>\n      <th>childnum_21L</th>\n      <th>creationdate_885D</th>\n      <th>credacc_actualbalance_314A</th>\n      <th>credacc_credlmt_575A</th>\n      <th>credacc_maxhisbal_375A</th>\n      <th>credacc_minhisbal_90A</th>\n      <th>credacc_status_367L</th>\n      <th>credacc_transactions_402L</th>\n      <th>credamount_590A</th>\n      <th>credtype_587L</th>\n      <th>currdebt_94A</th>\n      <th>dateactivated_425D</th>\n      <th>district_544M</th>\n      <th>downpmt_134A</th>\n      <th>dtlastpmt_581D</th>\n      <th>dtlastpmtallstes_3545839D</th>\n      <th>education_1138M</th>\n      <th>employedfrom_700D</th>\n      <th>familystate_726L</th>\n      <th>firstnonzeroinstldate_307D</th>\n      <th>inittransactioncode_279L</th>\n      <th>isbidproduct_390L</th>\n      <th>isdebitcard_527L</th>\n      <th>mainoccupationinc_437A</th>\n      <th>maxdpdtolerance_577P</th>\n      <th>num_group1</th>\n      <th>outstandingdebt_522A</th>\n      <th>pmtnum_8L</th>\n      <th>postype_4733339M</th>\n      <th>profession_152M</th>\n      <th>rejectreason_755M</th>\n      <th>rejectreasonclient_4145042M</th>\n      <th>revolvingaccount_394A</th>\n      <th>status_219L</th>\n      <th>tenor_203L</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>2</td>\n      <td>0.000</td>\n      <td>640.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2013-04-03</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P136_108_173</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2010-02-15</td>\n      <td>SINGLE</td>\n      <td>2013-05-04</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>8200.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>2</td>\n      <td>0.000</td>\n      <td>1682.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2013-04-03</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>16000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P136_108_173</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2010-02-15</td>\n      <td>SINGLE</td>\n      <td>2013-05-04</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>8200.000</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>3</td>\n      <td>0.000</td>\n      <td>6140.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2019-01-07</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>59999.800</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P131_33_167</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2018-05-15</td>\n      <td>MARRIED</td>\n      <td>2019-02-07</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>11000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>4</td>\n      <td>0.000</td>\n      <td>2556.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P24_27_36</td>\n      <td>NaN</td>\n      <td>2019-01-08</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P194_82_174</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-02-08</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>24.000</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>5</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P85_114_140</td>\n      <td>NaN</td>\n      <td>2019-01-16</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P54_133_26</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>False</td>\n      <td>None</td>\n      <td>62000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":40},{"cell_type":"code","source":"from pyspark.sql import functions as F\n\ndf_summary = (\n    train_applprev_1\n    .groupBy(\"case_id\")\n    .agg(\n        F.count(\"*\").alias(\"num_apply\"),\n        F.sum(F.when(F.col(\"approvaldate_319D\").isNotNull(), 1).otherwise(0)).alias(\"num_apply_approval\"),\n        F.sum(F.when(F.col(\"approvaldate_319D\").isNull(), 1).otherwise(0)).alias(\"num_apply_not_approval\")\n    )\n)\n\ndf_summary.show(10, truncate=False)\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:34:52.942938Z","iopub.execute_input":"2025-06-13T09:34:52.944477Z","iopub.status.idle":"2025-06-13T09:34:52.977356Z","shell.execute_reply.started":"2025-06-13T09:34:52.94443Z","shell.execute_reply":"2025-06-13T09:34:52.975769Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- actualdpd_943P: double (nullable = true)\n |-- annuity_853A: double (nullable = true)\n |-- approvaldate_319D: string (nullable = true)\n |-- byoccupationinc_3656910L: double (nullable = true)\n |-- cancelreason_3545846M: string (nullable = true)\n |-- childnum_21L: double (nullable = true)\n |-- creationdate_885D: string (nullable = true)\n |-- credacc_actualbalance_314A: double (nullable = true)\n |-- credacc_credlmt_575A: double (nullable = true)\n |-- credacc_maxhisbal_375A: double (nullable = true)\n |-- credacc_minhisbal_90A: double (nullable = true)\n |-- credacc_status_367L: string (nullable = true)\n |-- credacc_transactions_402L: double (nullable = true)\n |-- credamount_590A: double (nullable = true)\n |-- credtype_587L: string (nullable = true)\n |-- currdebt_94A: double (nullable = true)\n |-- dateactivated_425D: string (nullable = true)\n |-- district_544M: string (nullable = true)\n |-- downpmt_134A: double (nullable = true)\n |-- dtlastpmt_581D: string (nullable = true)\n |-- dtlastpmtallstes_3545839D: string (nullable = true)\n |-- education_1138M: string (nullable = true)\n |-- employedfrom_700D: string (nullable = true)\n |-- familystate_726L: string (nullable = true)\n |-- firstnonzeroinstldate_307D: string (nullable = true)\n |-- inittransactioncode_279L: string (nullable = true)\n |-- isbidproduct_390L: boolean (nullable = true)\n |-- isdebitcard_527L: boolean (nullable = true)\n |-- mainoccupationinc_437A: double (nullable = true)\n |-- maxdpdtolerance_577P: double (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- outstandingdebt_522A: double (nullable = true)\n |-- pmtnum_8L: double (nullable = true)\n |-- postype_4733339M: string (nullable = true)\n |-- profession_152M: string (nullable = true)\n |-- rejectreason_755M: string (nullable = true)\n |-- rejectreasonclient_4145042M: string (nullable = true)\n |-- revolvingaccount_394A: double (nullable = true)\n |-- status_219L: string (nullable = true)\n |-- tenor_203L: double (nullable = true)\n\n","output_type":"stream"}],"execution_count":17},{"cell_type":"code","source":"train_applprev = train_applprev_1.join(\n    applprev2,\n    on=['case_id', 'num_group1'],\n    how='left'\n)\ntrain_applprev.limit(50).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:34:52.978786Z","iopub.execute_input":"2025-06-13T09:34:52.979181Z","iopub.status.idle":"2025-06-13T09:35:27.830655Z","shell.execute_reply.started":"2025-06-13T09:34:52.979153Z","shell.execute_reply":"2025-06-13T09:35:27.829512Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":18,"output_type":"execute_result","data":{"text/plain":"    case_id  num_group1  actualdpd_943P  annuity_853A approvaldate_319D  \\\n0         3           0           0.000      6140.000              None   \n1         4           0           0.000      2556.600              None   \n2        13           0           0.000      5069.600              None   \n3        13           1           0.000      5334.800              None   \n4        14           1           0.000      4178.000        2018-10-11   \n5        18           0           0.000         0.000        2018-12-31   \n6        24           1           0.000      1045.000              None   \n7        30           2           0.000      5801.600              None   \n8        36           0           0.000      4199.600              None   \n9        41           1           0.000      2858.600              None   \n10       52           0           0.000      6108.400              None   \n11    40791           1           0.000      2320.800              None   \n12    40791           2           0.000      2541.200              None   \n13    40865           0           0.000           NaN              None   \n14    40865           1           0.000      3795.200              None   \n15    40881           4           0.000      3089.400        2019-10-28   \n16    40881           7           0.000      2098.400              None   \n17    40887           0           0.000      3845.400              None   \n18    40893           0           0.000      7638.000              None   \n19    40903           1           0.000      3875.600              None   \n20    40905           0           0.000      5466.600              None   \n21    40906           0           0.000       599.800              None   \n22    40906           2           0.000           NaN              None   \n23    40907           1           0.000      7085.000              None   \n24    40909           0           0.000      1877.200              None   \n25  1482874           1           0.000      1118.800        2018-09-10   \n26  1482874           2           0.000      2670.000        2018-06-02   \n27  1482874           5           0.000      1085.200        2014-12-06   \n28  1482875           1           0.000     14292.601        2018-08-03   \n29  1482875           3           0.000      5500.200              None   \n30  1482877           2           0.000      4098.000        2018-01-27   \n31  1482879           1           0.000      3642.800        2013-03-06   \n32  1482879           2           0.000      3730.400        2013-02-26   \n33  1482881           2           0.000      2472.600              None   \n34  1482881           6           0.000       848.800              None   \n35  1482882           1           0.000      3835.000              None   \n36  1482882           2           0.000      4197.600              None   \n37  1482882           3           0.000      1172.800        2014-06-18   \n38  1482883           3           0.000      1905.800        2011-04-13   \n39  1482883           7           0.000      2388.000              None   \n40  1482885           0           0.000      1752.400        2018-12-05   \n41  1915444           6           0.000      3840.600              None   \n42  1915444           7           0.000       938.600              None   \n43  1915444           9           0.000      2302.200        2013-09-11   \n44  1915448           1           0.000       126.200              None   \n45  1915448           2           0.000       315.400              None   \n46  1915448           5           0.000       378.400              None   \n47  1915448           8           0.000        63.200              None   \n48  1915448          12           0.000       382.000              None   \n49  1915448          14           0.000       382.000              None   \n\n    byoccupationinc_3656910L cancelreason_3545846M  childnum_21L  \\\n0                        NaN           P94_109_143           NaN   \n1                        NaN             P24_27_36           NaN   \n2                        NaN           P94_109_143           NaN   \n3                        NaN           P94_109_143           NaN   \n4                        NaN              a55475b1           NaN   \n5                        NaN           P73_130_169           NaN   \n6                      1.000              a55475b1         2.000   \n7                        NaN              a55475b1         0.000   \n8                        NaN             P53_10_15           NaN   \n9                      1.000              a55475b1         1.000   \n10                       NaN          P141_135_146           NaN   \n11                     1.000              a55475b1         0.000   \n12                     1.000              a55475b1         0.000   \n13                       NaN           P94_109_143           NaN   \n14                       NaN           P94_109_143         0.000   \n15                       NaN              a55475b1           NaN   \n16                       NaN           P94_109_143           NaN   \n17                       NaN             P24_27_36           NaN   \n18                       NaN            P19_105_83           NaN   \n19                       NaN           P94_109_143         3.000   \n20                       NaN              a55475b1         1.000   \n21                       NaN           P94_109_143           NaN   \n22                       NaN             P120_0_10           NaN   \n23                       NaN           P94_109_143           NaN   \n24                       NaN             P30_86_84           NaN   \n25                       NaN              a55475b1           NaN   \n26                       NaN              a55475b1           NaN   \n27                     1.000              a55475b1         0.000   \n28                       NaN              a55475b1           NaN   \n29                       NaN           P94_109_143           NaN   \n30                       NaN              a55475b1           NaN   \n31                 15000.000              a55475b1         0.000   \n32                 20000.000           P73_130_169         0.000   \n33                       NaN           P94_109_143           NaN   \n34                       NaN           P94_109_143           NaN   \n35                     1.000              a55475b1         1.000   \n36                     1.000              a55475b1         1.000   \n37                     1.000              a55475b1         2.000   \n38                       NaN              a55475b1         3.000   \n39                       NaN              a55475b1         3.000   \n40                       NaN              a55475b1           NaN   \n41                     1.000              a55475b1         0.000   \n42                     1.000              a55475b1         0.000   \n43                 30000.000              a55475b1         0.000   \n44                       NaN           P94_109_143           NaN   \n45                       NaN           P94_109_143           NaN   \n46                       NaN             P52_67_90           NaN   \n47                       NaN             P52_67_90           NaN   \n48                       NaN             P52_67_90           NaN   \n49                       NaN             P52_67_90           NaN   \n\n   creationdate_885D  credacc_actualbalance_314A  credacc_credlmt_575A  \\\n0         2019-01-07                         NaN                 0.000   \n1         2019-01-08                         NaN                 0.000   \n2         2018-08-20                         NaN                 0.000   \n3         2017-08-22                         NaN                 0.000   \n4         2018-10-11                         NaN                 0.000   \n5         2018-12-31                         NaN             40600.000   \n6         2014-07-12                         NaN                 0.000   \n7         2013-11-22                         NaN                 0.000   \n8         2019-01-02                         NaN                 0.000   \n9         2014-07-28                         NaN                 0.000   \n10        2019-01-17                         NaN                 0.000   \n11        2014-12-28                         NaN                 0.000   \n12        2014-12-28                         NaN                 0.000   \n13        2017-12-30                         NaN                   NaN   \n14        2017-12-29                         NaN                 0.000   \n15        2019-10-28                         NaN                 0.000   \n16        2018-06-06                         NaN                 0.000   \n17        2019-07-16                         NaN                 0.000   \n18        2019-12-17                         NaN                 0.000   \n19        2016-10-07                         NaN                 0.000   \n20        2010-01-09                         NaN                 0.000   \n21        2018-06-30                         NaN                 0.000   \n22        2018-05-11                         NaN                   NaN   \n23        2017-05-31                         NaN                 0.000   \n24        2019-12-22                         NaN                 0.000   \n25        2018-09-10                         NaN                 0.000   \n26        2018-06-02                         NaN                 0.000   \n27        2014-12-06                         NaN                 0.000   \n28        2018-08-03                         NaN                 0.000   \n29        2017-11-11                         NaN                 0.000   \n30        2018-01-27                         NaN                 0.000   \n31        2013-03-06                         NaN                 0.000   \n32        2013-02-26                         NaN                 0.000   \n33        2018-12-01                         NaN                 0.000   \n34        2016-09-14                         NaN                 0.000   \n35        2014-12-22                         NaN                 0.000   \n36        2014-11-18                         NaN                 0.000   \n37        2014-06-18                         NaN                 0.000   \n38        2011-04-13                         NaN                 0.000   \n39        2011-03-04                         NaN                 0.000   \n40        2018-12-05                         NaN                 0.000   \n41        2015-03-16                         NaN                 0.000   \n42        2014-08-31                         NaN                 0.000   \n43        2013-09-11                         NaN                 0.000   \n44        2020-08-05                         NaN                 0.000   \n45        2020-07-31                         NaN                 0.000   \n46        2020-07-17                         NaN                 0.000   \n47        2020-07-13                         NaN                 0.000   \n48        2020-07-03                         NaN                 0.000   \n49        2020-06-21                         NaN                 0.000   \n\n    credacc_maxhisbal_375A  credacc_minhisbal_90A credacc_status_367L  \\\n0                      NaN                    NaN                None   \n1                      NaN                    NaN                None   \n2                      NaN                    NaN                None   \n3                      NaN                    NaN                None   \n4                      NaN                    NaN                None   \n5                      NaN                    NaN                None   \n6                      NaN                    NaN                None   \n7                      NaN                    NaN                None   \n8                      NaN                    NaN                None   \n9                      NaN                    NaN                None   \n10                     NaN                    NaN                None   \n11                     NaN                    NaN                None   \n12                     NaN                    NaN                None   \n13                     NaN                    NaN                None   \n14                     NaN                    NaN                None   \n15                     NaN                    NaN                None   \n16                     NaN                    NaN                None   \n17                     NaN                    NaN                None   \n18                     NaN                    NaN                None   \n19                     NaN                    NaN                None   \n20                     NaN                    NaN                None   \n21                     NaN                    NaN                None   \n22                     NaN                    NaN                None   \n23                     NaN                    NaN                None   \n24                     NaN                    NaN                None   \n25                     NaN                    NaN                None   \n26                     NaN                    NaN                None   \n27                     NaN                    NaN                None   \n28                     NaN                    NaN                None   \n29                     NaN                    NaN                None   \n30                     NaN                    NaN                None   \n31                     NaN                    NaN                None   \n32                     NaN                    NaN                None   \n33                     NaN                    NaN                None   \n34                     NaN                    NaN                None   \n35                     NaN                    NaN                None   \n36                     NaN                    NaN                None   \n37                     NaN                    NaN                None   \n38                     NaN                    NaN                None   \n39                     NaN                    NaN                None   \n40                     NaN                    NaN                None   \n41                     NaN                    NaN                None   \n42                     NaN                    NaN                None   \n43                     NaN                    NaN                None   \n44                     NaN                    NaN                None   \n45                     NaN                    NaN                None   \n46                     NaN                    NaN                None   \n47                     NaN                    NaN                None   \n48                     NaN                    NaN                None   \n49                     NaN                    NaN                None   \n\n    credacc_transactions_402L  credamount_590A credtype_587L  currdebt_94A  \\\n0                         NaN        59999.800           CAL           NaN   \n1                         NaN        40000.000           CAL           NaN   \n2                         NaN        40000.000           CAL           NaN   \n3                         NaN        40000.000           CAL           NaN   \n4                         NaN        11994.000           COL         0.000   \n5                         NaN        40600.000           REL           NaN   \n6                         NaN         5520.000           COL         0.000   \n7                         NaN        28998.000           COL           NaN   \n8                         NaN        40000.000           CAL           NaN   \n9                         NaN        17144.000           COL         0.000   \n10                        NaN       100000.000           CAL           NaN   \n11                        NaN        27830.000           COL         0.000   \n12                        NaN        58239.800           COL         0.000   \n13                        NaN              NaN          None           NaN   \n14                        NaN        18280.000           COL           NaN   \n15                        NaN         8740.000           COL      2977.330   \n16                        NaN         5660.000           COL           NaN   \n17                        NaN        50000.000           CAL           NaN   \n18                        NaN       200000.000           CAL           NaN   \n19                        NaN        60000.000           CAL           NaN   \n20                        NaN        56340.000           COL         0.000   \n21                        NaN         3393.000           COL           NaN   \n22                        NaN              NaN          None           NaN   \n23                        NaN        64000.000           COL           NaN   \n24                        NaN        10000.000           CAL           NaN   \n25                        NaN         2980.000           COL         0.000   \n26                        NaN        31998.000           COL         0.000   \n27                        NaN        30460.600           COL         0.000   \n28                        NaN       138167.800           COL         0.000   \n29                        NaN        65958.000           COL           NaN   \n30                        NaN        41646.000           COL         0.000   \n31                        NaN        30000.000           CAL         0.000   \n32                        NaN        40000.000           CAL         0.000   \n33                        NaN        20000.000           CAL           NaN   \n34                        NaN         6000.000           CAL           NaN   \n35                        NaN        60000.000           CAL         0.000   \n36                        NaN        40000.000           CAL         0.000   \n37                        NaN         8525.000           COL         0.000   \n38                        NaN        26000.000           CAL         0.000   \n39                        NaN        40000.000           CAL         0.000   \n40                        NaN         7300.000           COL         0.000   \n41                        NaN        60000.000           CAL         0.000   \n42                        NaN        32265.800           COL         0.000   \n43                        NaN        30000.000           CAL         0.000   \n44                        NaN         4000.000           CAL           NaN   \n45                        NaN        10000.000           CAL           NaN   \n46                        NaN        12000.000           CAL           NaN   \n47                        NaN         2000.000           CAL           NaN   \n48                        NaN        10000.000           CAL           NaN   \n49                        NaN        10000.000           CAL           NaN   \n\n   dateactivated_425D district_544M  downpmt_134A dtlastpmt_581D  \\\n0                None   P131_33_167         0.000           None   \n1                None   P194_82_174         0.000           None   \n2                None   P120_80_181         0.000           None   \n3                None   P120_80_181         0.000           None   \n4          2018-10-19  P205_129_155         0.000     2019-01-10   \n5                None   P197_47_166         0.000           None   \n6                None  P106_139_158         0.000           None   \n7                None   P197_47_166      4000.000           None   \n8                None     P16_86_94         0.000           None   \n9                None  P181_116_184         0.000           None   \n10               None    P31_88_142         0.000           None   \n11               None      a55475b1         0.000           None   \n12               None      a55475b1         0.000           None   \n13               None   P82_154_182           NaN           None   \n14               None   P82_154_182         0.000           None   \n15         2019-11-06   P186_84_175         0.000           None   \n16               None   P186_84_175         0.000           None   \n17               None      a55475b1         0.000           None   \n18               None      a55475b1         0.000           None   \n19               None   P131_33_167         0.000           None   \n20               None      a55475b1         0.000           None   \n21               None   P157_94_145         5.000           None   \n22               None   P157_94_145           NaN           None   \n23               None    P19_11_176         0.000           None   \n24               None      a55475b1         0.000           None   \n25         2018-09-12     P123_6_84         0.000     2018-09-24   \n26         2018-06-12     P123_6_84         0.000     2019-06-02   \n27         2014-12-09      a55475b1         0.000     2016-07-30   \n28         2018-08-07   P131_33_167         0.000     2019-08-01   \n29               None      a55475b1         0.000           None   \n30         2018-02-02   P85_130_149         0.000     2019-01-26   \n31         2013-03-06   P123_39_170         0.000           None   \n32               None   P123_39_170         0.000           None   \n33               None   P115_26_169         0.000           None   \n34               None   P115_26_169         0.000           None   \n35               None    P19_11_176         0.000           None   \n36               None    P19_11_176         0.000           None   \n37         2014-06-19      a55475b1      2000.000           None   \n38         2011-04-14     P89_71_50         0.000           None   \n39               None     P89_71_50         0.000           None   \n40         2018-12-13   P156_128_17         0.000     2019-04-22   \n41               None    P54_133_26         0.000           None   \n42               None    P54_133_26         0.000           None   \n43         2013-09-11    P54_133_26         0.000           None   \n44               None  P174_104_184         0.000           None   \n45               None  P174_104_184         0.000           None   \n46               None      a55475b1         0.000           None   \n47               None      a55475b1         0.000           None   \n48               None      a55475b1         0.000           None   \n49               None      a55475b1         0.000           None   \n\n   dtlastpmtallstes_3545839D education_1138M employedfrom_700D  \\\n0                       None      P97_36_170        2018-05-15   \n1                       None        a55475b1              None   \n2                       None        a55475b1              None   \n3                       None        a55475b1              None   \n4                 2019-01-10      P97_36_170        2007-01-15   \n5                       None      P97_36_170        2008-02-06   \n6                       None      P97_36_170        2012-05-15   \n7                       None     P33_146_175        2009-06-15   \n8                       None        a55475b1              None   \n9                       None      P97_36_170        2011-01-15   \n10                      None      P97_36_170              None   \n11                      None      P97_36_170        2013-04-15   \n12                      None      P97_36_170        2013-04-15   \n13                      None        a55475b1              None   \n14                      None      P97_36_170              None   \n15                2019-12-28      P97_36_170        2018-01-15   \n16                      None        a55475b1              None   \n17                      None        a55475b1              None   \n18                      None        a55475b1              None   \n19                      None      P97_36_170              None   \n20                      None      P97_36_170        2008-04-15   \n21                      None        a55475b1              None   \n22                      None        a55475b1              None   \n23                      None        a55475b1              None   \n24                      None        a55475b1              None   \n25                2018-09-24        a55475b1              None   \n26                2019-06-02        a55475b1              None   \n27                2016-07-30      P97_36_170        2006-05-15   \n28                2019-08-01        a55475b1              None   \n29                      None        a55475b1              None   \n30                2019-01-26        a55475b1              None   \n31                      None      P97_36_170        2001-08-15   \n32                      None      P97_36_170        2000-08-15   \n33                      None        a55475b1              None   \n34                      None        a55475b1              None   \n35                      None      P97_36_170        2009-05-15   \n36                      None      P97_36_170        2008-05-15   \n37                      None      P97_36_170        2008-11-15   \n38                      None     P33_146_175        2010-11-15   \n39                      None     P33_146_175        2010-11-15   \n40                2019-04-22        a55475b1              None   \n41                      None      P97_36_170              None   \n42                      None      P97_36_170              None   \n43                      None     P33_146_175              None   \n44                      None        a55475b1              None   \n45                      None        a55475b1              None   \n46                      None        a55475b1              None   \n47                      None        a55475b1              None   \n48                      None        a55475b1              None   \n49                      None        a55475b1              None   \n\n   familystate_726L firstnonzeroinstldate_307D inittransactioncode_279L  \\\n0           MARRIED                 2019-02-07                     CASH   \n1              None                 2019-02-08                     CASH   \n2              None                 2018-09-20                     CASH   \n3              None                 2017-09-22                     CASH   \n4           MARRIED                 2018-11-10                      POS   \n5           MARRIED                       None                      NDF   \n6           MARRIED                 2014-08-11                      POS   \n7            SINGLE                 2013-12-22                      POS   \n8              None                 2019-02-02                     CASH   \n9           MARRIED                 2014-08-28                      POS   \n10          MARRIED                 2019-02-17                     CASH   \n11           SINGLE                 2015-01-28                      POS   \n12           SINGLE                 2015-01-28                      POS   \n13             None                       None                     None   \n14          MARRIED                 2018-01-29                      POS   \n15          MARRIED                 2019-11-28                      POS   \n16             None                 2018-07-07                      POS   \n17             None                 2019-08-16                     CASH   \n18             None                 2020-01-17                     CASH   \n19           SINGLE                 2016-11-06                     CASH   \n20           SINGLE                 2010-02-09                      POS   \n21             None                 2018-07-30                      POS   \n22             None                       None                     None   \n23             None                 2017-07-01                      POS   \n24             None                 2020-01-22                     CASH   \n25             None                 2018-10-11                      POS   \n26          MARRIED                 2018-07-03                      POS   \n27           SINGLE                 2015-01-05                      POS   \n28             None                 2018-09-03                      POS   \n29             None                 2017-12-12                      POS   \n30          MARRIED                 2018-02-27                      POS   \n31           SINGLE                 2013-04-06                     CASH   \n32           SINGLE                 2013-04-02                     CASH   \n33             None                 2018-12-31                     CASH   \n34             None                 2016-10-15                     CASH   \n35          MARRIED                 2015-01-22                     CASH   \n36          MARRIED                 2014-12-18                     CASH   \n37          MARRIED                 2014-07-18                      POS   \n38          MARRIED                 2011-05-14                     CASH   \n39          MARRIED                 2011-04-01                     CASH   \n40             None                 2019-01-04                      POS   \n41          WIDOWED                 2015-04-16                     CASH   \n42          WIDOWED                 2014-10-01                      POS   \n43          WIDOWED                 2013-10-12                     CASH   \n44             None                 2020-09-05                     CASH   \n45             None                 2020-08-31                     CASH   \n46             None                 2020-08-17                     CASH   \n47             None                 2020-08-11                     CASH   \n48             None                 2020-08-02                     CASH   \n49             None                 2020-07-21                     CASH   \n\n    isbidproduct_390L isdebitcard_527L  mainoccupationinc_437A  \\\n0               False             None               11000.000   \n1               False             None               16000.000   \n2               False             None               64000.000   \n3               False             None               64000.000   \n4               False             None               50000.000   \n5               False            False               50000.000   \n6               False             None               30000.000   \n7               False             None               34000.000   \n8               False             None               40000.000   \n9               False             None               24000.000   \n10              False             None               84000.000   \n11              False             None               16000.000   \n12              False             None               22000.000   \n13              False             None               32000.000   \n14              False             None               32000.000   \n15              False             None               36000.000   \n16              False             None               30000.000   \n17              False             None               30000.000   \n18              False             None               60000.000   \n19              False             None               30000.000   \n20              False             None               18000.000   \n21              False             None              110000.000   \n22              False             None              180000.000   \n23              False             None               60000.000   \n24              False             None               30000.000   \n25              False             None               50000.000   \n26              False             None               76000.000   \n27              False             None               60000.000   \n28              False             None              100000.000   \n29              False             None              100000.000   \n30              False             None               48000.000   \n31              False             None               16000.000   \n32              False             None               16000.000   \n33              False             None               40000.000   \n34              False             None               30000.000   \n35              False             None               22000.000   \n36              False             None               12400.000   \n37              False             None               20000.000   \n38              False             None                5600.000   \n39              False             None                6000.000   \n40              False             None               44800.000   \n41              False             None               36000.000   \n42              False             None               16000.000   \n43              False             None               11600.000   \n44              False             None               14000.000   \n45              False             None               14000.000   \n46              False             None               14000.000   \n47              False             None               14000.000   \n48              False             None               14000.000   \n49              False             None               14000.000   \n\n    maxdpdtolerance_577P  outstandingdebt_522A  pmtnum_8L postype_4733339M  \\\n0                    NaN                   NaN     12.000         a55475b1   \n1                    NaN                   NaN     24.000         a55475b1   \n2                    NaN                   NaN     12.000         a55475b1   \n3                    NaN                   NaN     12.000         a55475b1   \n4                  0.000                 0.000      3.000         a55475b1   \n5                    NaN                   NaN        NaN         a55475b1   \n6                    NaN                 0.000      6.000         a55475b1   \n7                    NaN                   NaN      5.000         a55475b1   \n8                    NaN                   NaN     12.000         a55475b1   \n9                    NaN                 0.000      6.000         a55475b1   \n10                   NaN                   NaN     36.000         a55475b1   \n11                   NaN                 0.000     12.000      P60_146_156   \n12                   NaN                 0.000     24.000     P177_117_192   \n13                   NaN                   NaN        NaN     P177_117_192   \n14                   NaN                   NaN      6.000     P177_117_192   \n15                 0.000              3068.000      3.000      P149_40_170   \n16                   NaN                   NaN      3.000     P177_117_192   \n17                   NaN                   NaN     15.000      P67_102_161   \n18                   NaN                   NaN     36.000      P67_102_161   \n19                   NaN                   NaN     36.000       P46_145_78   \n20                   NaN                 0.000     18.000     P177_117_192   \n21                   NaN                   NaN      6.000     P177_117_192   \n22                   NaN                   NaN        NaN     P177_117_192   \n23                   NaN                   NaN     12.000      P149_40_170   \n24                   NaN                   NaN      6.000      P67_102_161   \n25                 0.000                 0.000      3.000         a55475b1   \n26                 0.000                 0.000     16.000         a55475b1   \n27                 0.000                 0.000     36.000         a55475b1   \n28                 1.000                 0.000     12.000         a55475b1   \n29                   NaN                   NaN     12.000         a55475b1   \n30                 1.000                 0.000     12.000         a55475b1   \n31                 0.000                 0.000     12.000         a55475b1   \n32                   NaN                 0.000     18.000         a55475b1   \n33                   NaN                   NaN     12.000         a55475b1   \n34                   NaN                   NaN     10.000         a55475b1   \n35                   NaN                 0.000     24.000         a55475b1   \n36                   NaN                 0.000     12.000         a55475b1   \n37               183.000                 0.000     10.000         a55475b1   \n38                 0.000                 0.000     24.000         a55475b1   \n39                   NaN                 0.000     36.000         a55475b1   \n40                 0.000                 0.000      5.000         a55475b1   \n41                   NaN                 0.000     24.000     P177_117_192   \n42                   NaN                 0.000     36.000     P177_117_192   \n43                59.000                 0.000     24.000       P46_145_78   \n44                   NaN                   NaN     48.000       P46_145_78   \n45                   NaN                   NaN     48.000       P46_145_78   \n46                   NaN                   NaN     48.000       P46_145_78   \n47                   NaN                   NaN     48.000       P46_145_78   \n48                   NaN                   NaN     36.000      P67_102_161   \n49                   NaN                   NaN     36.000      P67_102_161   \n\n   profession_152M rejectreason_755M rejectreasonclient_4145042M  \\\n0         a55475b1       P94_109_143                    a55475b1   \n1         a55475b1          a55475b1                    a55475b1   \n2         a55475b1       P94_109_143                    a55475b1   \n3         a55475b1       P94_109_143                    a55475b1   \n4         a55475b1          a55475b1                    a55475b1   \n5         a55475b1          a55475b1                    a55475b1   \n6         a55475b1          a55475b1                    a55475b1   \n7         a55475b1          a55475b1                    a55475b1   \n8         a55475b1         P53_10_15                    a55475b1   \n9         a55475b1          a55475b1                    a55475b1   \n10        a55475b1          a55475b1                    a55475b1   \n11        a55475b1          a55475b1                    a55475b1   \n12        a55475b1          a55475b1                    a55475b1   \n13        a55475b1       P94_109_143                 P94_109_143   \n14        a55475b1        P99_56_166                 P94_109_143   \n15        a55475b1          a55475b1                    a55475b1   \n16        a55475b1        P99_56_166                 P94_109_143   \n17        a55475b1          a55475b1                    a55475b1   \n18        a55475b1          a55475b1                    a55475b1   \n19        a55475b1       P196_88_176                 P94_109_143   \n20        a55475b1          a55475b1                    a55475b1   \n21        a55475b1       P94_109_143                 P94_109_143   \n22        a55475b1          a55475b1                    a55475b1   \n23        a55475b1        P198_131_9                 P94_109_143   \n24        a55475b1        P99_56_166                   P30_86_84   \n25        a55475b1          a55475b1                    a55475b1   \n26        a55475b1          a55475b1                    a55475b1   \n27        a55475b1          a55475b1                    a55475b1   \n28        a55475b1          a55475b1                    a55475b1   \n29        a55475b1        P99_56_166                 P94_109_143   \n30        a55475b1          a55475b1                    a55475b1   \n31        a55475b1          a55475b1                    a55475b1   \n32        a55475b1          a55475b1                    a55475b1   \n33        a55475b1       P94_109_143                 P94_109_143   \n34        a55475b1        P99_56_166                 P94_109_143   \n35        a55475b1          a55475b1                    a55475b1   \n36        a55475b1          a55475b1                    a55475b1   \n37        a55475b1          a55475b1                    a55475b1   \n38        a55475b1          a55475b1                    a55475b1   \n39        a55475b1          a55475b1                    a55475b1   \n40        a55475b1          a55475b1                    a55475b1   \n41        a55475b1          a55475b1                    a55475b1   \n42        a55475b1          a55475b1                    a55475b1   \n43        a55475b1          a55475b1                    a55475b1   \n44        a55475b1          a55475b1                 P94_109_143   \n45        a55475b1          a55475b1                 P94_109_143   \n46        a55475b1        P99_56_166                   P52_67_90   \n47        a55475b1        P99_56_166                   P52_67_90   \n48        a55475b1        P99_56_166                   P52_67_90   \n49        a55475b1        P99_56_166                   P52_67_90   \n\n    revolvingaccount_394A status_219L  tenor_203L  \\\n0                     NaN           D      12.000   \n1                     NaN           T      24.000   \n2                     NaN           D      12.000   \n3                     NaN           D      12.000   \n4                     NaN           K       3.000   \n5                     NaN           T         NaN   \n6                     NaN           D       6.000   \n7                     NaN           D       5.000   \n8                     NaN           D      12.000   \n9                     NaN           D       6.000   \n10                    NaN           T      36.000   \n11                    NaN           D      12.000   \n12                    NaN           D      24.000   \n13                    NaN           D         NaN   \n14                    NaN           D       6.000   \n15                    NaN           A       3.000   \n16                    NaN           D       3.000   \n17                    NaN           T      15.000   \n18                    NaN           T      36.000   \n19                    NaN           D      36.000   \n20                    NaN           D      18.000   \n21                    NaN           D       6.000   \n22                    NaN           T         NaN   \n23                    NaN           D      12.000   \n24                    NaN           D       6.000   \n25                    NaN           K       3.000   \n26                    NaN           K      16.000   \n27                    NaN           K      36.000   \n28                    NaN           K      12.000   \n29                    NaN           D      12.000   \n30                    NaN           K      12.000   \n31                    NaN           K      12.000   \n32                    NaN           T      18.000   \n33                    NaN           D      12.000   \n34                    NaN           D      10.000   \n35                    NaN           D      24.000   \n36                    NaN           D      12.000   \n37                    NaN           K      10.000   \n38                    NaN           K      24.000   \n39                    NaN           D      36.000   \n40                    NaN           K       5.000   \n41                    NaN           D      24.000   \n42                    NaN           D      36.000   \n43                    NaN           K      24.000   \n44                    NaN           D      48.000   \n45                    NaN           D      48.000   \n46                    NaN           D      48.000   \n47                    NaN           D      48.000   \n48                    NaN           D      36.000   \n49                    NaN           D      36.000   \n\n    cacccardblochreas_147M_nunique cacccardblochreas_147M_mode  \\\n0                                1                     Unknown   \n1                                1                     Unknown   \n2                                1                     Unknown   \n3                                1                     Unknown   \n4                                1                     Unknown   \n5                                1                     Unknown   \n6                                1                     Unknown   \n7                                1                     Unknown   \n8                                1                     Unknown   \n9                                1                     Unknown   \n10                               1                     Unknown   \n11                               1                     Unknown   \n12                               1                     Unknown   \n13                               1                     Unknown   \n14                               1                     Unknown   \n15                               1                     Unknown   \n16                               1                     Unknown   \n17                               1                     Unknown   \n18                               1                     Unknown   \n19                               1                     Unknown   \n20                               1                     Unknown   \n21                               1                     Unknown   \n22                               1                     Unknown   \n23                               1                     Unknown   \n24                               1                     Unknown   \n25                               1                    a55475b1   \n26                               1                    a55475b1   \n27                               1                    a55475b1   \n28                               1                    a55475b1   \n29                               1                    a55475b1   \n30                               1                    a55475b1   \n31                               1                    a55475b1   \n32                               1                    a55475b1   \n33                               1                    a55475b1   \n34                               1                    a55475b1   \n35                               1                    a55475b1   \n36                               1                    a55475b1   \n37                               1                    a55475b1   \n38                               1                    a55475b1   \n39                               1                    a55475b1   \n40                               1                    a55475b1   \n41                               1                    a55475b1   \n42                               1                    a55475b1   \n43                               1                    a55475b1   \n44                               1                    a55475b1   \n45                               1                    a55475b1   \n46                               1                    a55475b1   \n47                               1                    a55475b1   \n48                               1                    a55475b1   \n49                               1                    a55475b1   \n\n    cacccardblochreas_147M_P23_105_103_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    cacccardblochreas_147M_P19_60_110_count  \\\n0                                         1   \n1                                         1   \n2                                         1   \n3                                         1   \n4                                         1   \n5                                         1   \n6                                         1   \n7                                         1   \n8                                         1   \n9                                         1   \n10                                        1   \n11                                        1   \n12                                        1   \n13                                        1   \n14                                        1   \n15                                        1   \n16                                        1   \n17                                        1   \n18                                        1   \n19                                        1   \n20                                        1   \n21                                        1   \n22                                        1   \n23                                        1   \n24                                        1   \n25                                        1   \n26                                        1   \n27                                        1   \n28                                        1   \n29                                        1   \n30                                        1   \n31                                        1   \n32                                        1   \n33                                        1   \n34                                        1   \n35                                        1   \n36                                        1   \n37                                        1   \n38                                        1   \n39                                        1   \n40                                        1   \n41                                        1   \n42                                        1   \n43                                        1   \n44                                        1   \n45                                        1   \n46                                        1   \n47                                        1   \n48                                        1   \n49                                        1   \n\n    cacccardblochreas_147M_P41_107_150_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    cacccardblochreas_147M_P127_74_114_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    cacccardblochreas_147M_P133_119_56_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    cacccardblochreas_147M_P33_145_161_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    cacccardblochreas_147M_a55475b1_count  \\\n0                                       1   \n1                                       1   \n2                                       1   \n3                                       1   \n4                                       1   \n5                                       1   \n6                                       1   \n7                                       1   \n8                                       1   \n9                                       1   \n10                                      1   \n11                                      1   \n12                                      1   \n13                                      1   \n14                                      1   \n15                                      1   \n16                                      1   \n17                                      1   \n18                                      1   \n19                                      1   \n20                                      1   \n21                                      1   \n22                                      1   \n23                                      1   \n24                                      1   \n25                                      1   \n26                                      1   \n27                                      1   \n28                                      1   \n29                                      1   \n30                                      1   \n31                                      1   \n32                                      1   \n33                                      1   \n34                                      1   \n35                                      1   \n36                                      1   \n37                                      1   \n38                                      1   \n39                                      1   \n40                                      1   \n41                                      1   \n42                                      1   \n43                                      1   \n44                                      1   \n45                                      1   \n46                                      1   \n47                                      1   \n48                                      1   \n49                                      1   \n\n    cacccardblochreas_147M_Unknown_count  \\\n0                                      1   \n1                                      1   \n2                                      1   \n3                                      1   \n4                                      1   \n5                                      1   \n6                                      1   \n7                                      1   \n8                                      1   \n9                                      1   \n10                                     1   \n11                                     1   \n12                                     1   \n13                                     1   \n14                                     1   \n15                                     1   \n16                                     1   \n17                                     1   \n18                                     1   \n19                                     1   \n20                                     1   \n21                                     1   \n22                                     1   \n23                                     1   \n24                                     1   \n25                                     1   \n26                                     1   \n27                                     1   \n28                                     1   \n29                                     1   \n30                                     1   \n31                                     1   \n32                                     1   \n33                                     1   \n34                                     1   \n35                                     1   \n36                                     1   \n37                                     1   \n38                                     1   \n39                                     1   \n40                                     1   \n41                                     1   \n42                                     1   \n43                                     1   \n44                                     1   \n45                                     1   \n46                                     1   \n47                                     1   \n48                                     1   \n49                                     1   \n\n    cacccardblochreas_147M_P17_56_144_count  \\\n0                                         1   \n1                                         1   \n2                                         1   \n3                                         1   \n4                                         1   \n5                                         1   \n6                                         1   \n7                                         1   \n8                                         1   \n9                                         1   \n10                                        1   \n11                                        1   \n12                                        1   \n13                                        1   \n14                                        1   \n15                                        1   \n16                                        1   \n17                                        1   \n18                                        1   \n19                                        1   \n20                                        1   \n21                                        1   \n22                                        1   \n23                                        1   \n24                                        1   \n25                                        1   \n26                                        1   \n27                                        1   \n28                                        1   \n29                                        1   \n30                                        1   \n31                                        1   \n32                                        1   \n33                                        1   \n34                                        1   \n35                                        1   \n36                                        1   \n37                                        1   \n38                                        1   \n39                                        1   \n40                                        1   \n41                                        1   \n42                                        1   \n43                                        1   \n44                                        1   \n45                                        1   \n46                                        1   \n47                                        1   \n48                                        1   \n49                                        1   \n\n    cacccardblochreas_147M_P201_63_60_count  conts_type_509L_nunique  \\\n0                                         1                        3   \n1                                         1                        2   \n2                                         1                        1   \n3                                         1                        1   \n4                                         1                        3   \n5                                         1                        2   \n6                                         1                        3   \n7                                         1                        3   \n8                                         1                        1   \n9                                         1                        2   \n10                                        1                        1   \n11                                        1                        2   \n12                                        1                        2   \n13                                        1                        1   \n14                                        1                        2   \n15                                        1                        2   \n16                                        1                        2   \n17                                        1                        2   \n18                                        1                        1   \n19                                        1                        3   \n20                                        1                        3   \n21                                        1                        1   \n22                                        1                        1   \n23                                        1                        2   \n24                                        1                        1   \n25                                        1                        2   \n26                                        1                        2   \n27                                        1                        3   \n28                                        1                        2   \n29                                        1                        1   \n30                                        1                        2   \n31                                        1                        3   \n32                                        1                        3   \n33                                        1                        1   \n34                                        1                        2   \n35                                        1                        3   \n36                                        1                        3   \n37                                        1                        3   \n38                                        1                        3   \n39                                        1                        3   \n40                                        1                        2   \n41                                        1                        3   \n42                                        1                        3   \n43                                        1                        2   \n44                                        1                        2   \n45                                        1                        2   \n46                                        1                        2   \n47                                        1                        2   \n48                                        1                        2   \n49                                        1                        2   \n\n   conts_type_509L_mode  conts_type_509L_PRIMARY_MOBILE_count  \\\n0        PRIMARY_MOBILE                                     1   \n1        PRIMARY_MOBILE                                     1   \n2        PRIMARY_MOBILE                                     1   \n3        PRIMARY_MOBILE                                     1   \n4        PRIMARY_MOBILE                                     1   \n5        PRIMARY_MOBILE                                     1   \n6            HOME_PHONE                                     1   \n7            HOME_PHONE                                     1   \n8        PRIMARY_MOBILE                                     1   \n9      EMPLOYMENT_PHONE                                     1   \n10       PRIMARY_MOBILE                                     1   \n11     EMPLOYMENT_PHONE                                     1   \n12     EMPLOYMENT_PHONE                                     1   \n13       PRIMARY_MOBILE                                     1   \n14              Unknown                                     1   \n15                PHONE                                     1   \n16           HOME_PHONE                                     1   \n17       PRIMARY_MOBILE                                     1   \n18       PRIMARY_MOBILE                                     1   \n19              Unknown                                     1   \n20       PRIMARY_MOBILE                                     1   \n21       PRIMARY_MOBILE                                     1   \n22       PRIMARY_MOBILE                                     1   \n23       PRIMARY_MOBILE                                     1   \n24       PRIMARY_MOBILE                                     1   \n25           HOME_PHONE                                     1   \n26              Unknown                                     1   \n27           HOME_PHONE                                     1   \n28       PRIMARY_MOBILE                                     1   \n29       PRIMARY_MOBILE                                     1   \n30           HOME_PHONE                                     1   \n31           HOME_PHONE                                     1   \n32     EMPLOYMENT_PHONE                                     1   \n33       PRIMARY_MOBILE                                     1   \n34              Unknown                                     1   \n35     EMPLOYMENT_PHONE                                     1   \n36     EMPLOYMENT_PHONE                                     1   \n37     EMPLOYMENT_PHONE                                     1   \n38       PRIMARY_MOBILE                                     1   \n39           HOME_PHONE                                     1   \n40       PRIMARY_MOBILE                                     1   \n41           HOME_PHONE                                     1   \n42           HOME_PHONE                                     1   \n43              Unknown                                     1   \n44           HOME_PHONE                                     1   \n45       PRIMARY_MOBILE                                     1   \n46       PRIMARY_MOBILE                                     1   \n47       PRIMARY_MOBILE                                     1   \n48           HOME_PHONE                                     1   \n49           HOME_PHONE                                     1   \n\n    conts_type_509L_EMPLOYMENT_PHONE_count  \\\n0                                        1   \n1                                        1   \n2                                        1   \n3                                        1   \n4                                        1   \n5                                        1   \n6                                        1   \n7                                        1   \n8                                        1   \n9                                        1   \n10                                       1   \n11                                       1   \n12                                       1   \n13                                       1   \n14                                       1   \n15                                       1   \n16                                       1   \n17                                       1   \n18                                       1   \n19                                       1   \n20                                       1   \n21                                       1   \n22                                       1   \n23                                       1   \n24                                       1   \n25                                       1   \n26                                       1   \n27                                       1   \n28                                       1   \n29                                       1   \n30                                       1   \n31                                       1   \n32                                       1   \n33                                       1   \n34                                       1   \n35                                       1   \n36                                       1   \n37                                       1   \n38                                       1   \n39                                       1   \n40                                       1   \n41                                       1   \n42                                       1   \n43                                       1   \n44                                       1   \n45                                       1   \n46                                       1   \n47                                       1   \n48                                       1   \n49                                       1   \n\n    conts_type_509L_ALTERNATIVE_PHONE_count  conts_type_509L_WHATSAPP_count  \\\n0                                         1                               1   \n1                                         1                               1   \n2                                         1                               1   \n3                                         1                               1   \n4                                         1                               1   \n5                                         1                               1   \n6                                         1                               1   \n7                                         1                               1   \n8                                         1                               1   \n9                                         1                               1   \n10                                        1                               1   \n11                                        1                               1   \n12                                        1                               1   \n13                                        1                               1   \n14                                        1                               1   \n15                                        1                               1   \n16                                        1                               1   \n17                                        1                               1   \n18                                        1                               1   \n19                                        1                               1   \n20                                        1                               1   \n21                                        1                               1   \n22                                        1                               1   \n23                                        1                               1   \n24                                        1                               1   \n25                                        1                               1   \n26                                        1                               1   \n27                                        1                               1   \n28                                        1                               1   \n29                                        1                               1   \n30                                        1                               1   \n31                                        1                               1   \n32                                        1                               1   \n33                                        1                               1   \n34                                        1                               1   \n35                                        1                               1   \n36                                        1                               1   \n37                                        1                               1   \n38                                        1                               1   \n39                                        1                               1   \n40                                        1                               1   \n41                                        1                               1   \n42                                        1                               1   \n43                                        1                               1   \n44                                        1                               1   \n45                                        1                               1   \n46                                        1                               1   \n47                                        1                               1   \n48                                        1                               1   \n49                                        1                               1   \n\n    conts_type_509L_SKYPE_count  conts_type_509L_PRIMARY_EMAIL_count  \\\n0                             1                                    1   \n1                             1                                    1   \n2                             1                                    1   \n3                             1                                    1   \n4                             1                                    1   \n5                             1                                    1   \n6                             1                                    1   \n7                             1                                    1   \n8                             1                                    1   \n9                             1                                    1   \n10                            1                                    1   \n11                            1                                    1   \n12                            1                                    1   \n13                            1                                    1   \n14                            1                                    1   \n15                            1                                    1   \n16                            1                                    1   \n17                            1                                    1   \n18                            1                                    1   \n19                            1                                    1   \n20                            1                                    1   \n21                            1                                    1   \n22                            1                                    1   \n23                            1                                    1   \n24                            1                                    1   \n25                            1                                    1   \n26                            1                                    1   \n27                            1                                    1   \n28                            1                                    1   \n29                            1                                    1   \n30                            1                                    1   \n31                            1                                    1   \n32                            1                                    1   \n33                            1                                    1   \n34                            1                                    1   \n35                            1                                    1   \n36                            1                                    1   \n37                            1                                    1   \n38                            1                                    1   \n39                            1                                    1   \n40                            1                                    1   \n41                            1                                    1   \n42                            1                                    1   \n43                            1                                    1   \n44                            1                                    1   \n45                            1                                    1   \n46                            1                                    1   \n47                            1                                    1   \n48                            1                                    1   \n49                            1                                    1   \n\n    conts_type_509L_PHONE_count  conts_type_509L_HOME_PHONE_count  \\\n0                             1                                 1   \n1                             1                                 1   \n2                             1                                 1   \n3                             1                                 1   \n4                             1                                 1   \n5                             1                                 1   \n6                             1                                 1   \n7                             1                                 1   \n8                             1                                 1   \n9                             1                                 1   \n10                            1                                 1   \n11                            1                                 1   \n12                            1                                 1   \n13                            1                                 1   \n14                            1                                 1   \n15                            1                                 1   \n16                            1                                 1   \n17                            1                                 1   \n18                            1                                 1   \n19                            1                                 1   \n20                            1                                 1   \n21                            1                                 1   \n22                            1                                 1   \n23                            1                                 1   \n24                            1                                 1   \n25                            1                                 1   \n26                            1                                 1   \n27                            1                                 1   \n28                            1                                 1   \n29                            1                                 1   \n30                            1                                 1   \n31                            1                                 1   \n32                            1                                 1   \n33                            1                                 1   \n34                            1                                 1   \n35                            1                                 1   \n36                            1                                 1   \n37                            1                                 1   \n38                            1                                 1   \n39                            1                                 1   \n40                            1                                 1   \n41                            1                                 1   \n42                            1                                 1   \n43                            1                                 1   \n44                            1                                 1   \n45                            1                                 1   \n46                            1                                 1   \n47                            1                                 1   \n48                            1                                 1   \n49                            1                                 1   \n\n    conts_type_509L_SECONDARY_MOBILE_count  conts_type_509L_Unknown_count  \\\n0                                        1                              1   \n1                                        1                              1   \n2                                        1                              1   \n3                                        1                              1   \n4                                        1                              1   \n5                                        1                              1   \n6                                        1                              1   \n7                                        1                              1   \n8                                        1                              1   \n9                                        1                              1   \n10                                       1                              1   \n11                                       1                              1   \n12                                       1                              1   \n13                                       1                              1   \n14                                       1                              1   \n15                                       1                              1   \n16                                       1                              1   \n17                                       1                              1   \n18                                       1                              1   \n19                                       1                              1   \n20                                       1                              1   \n21                                       1                              1   \n22                                       1                              1   \n23                                       1                              1   \n24                                       1                              1   \n25                                       1                              1   \n26                                       1                              1   \n27                                       1                              1   \n28                                       1                              1   \n29                                       1                              1   \n30                                       1                              1   \n31                                       1                              1   \n32                                       1                              1   \n33                                       1                              1   \n34                                       1                              1   \n35                                       1                              1   \n36                                       1                              1   \n37                                       1                              1   \n38                                       1                              1   \n39                                       1                              1   \n40                                       1                              1   \n41                                       1                              1   \n42                                       1                              1   \n43                                       1                              1   \n44                                       1                              1   \n45                                       1                              1   \n46                                       1                              1   \n47                                       1                              1   \n48                                       1                              1   \n49                                       1                              1   \n\n    credacc_cards_status_52L_nunique credacc_cards_status_52L_mode  \\\n0                                  1                       Unknown   \n1                                  1                       Unknown   \n2                                  1                       Unknown   \n3                                  1                       Unknown   \n4                                  1                       Unknown   \n5                                  1                       Unknown   \n6                                  1                       Unknown   \n7                                  1                       Unknown   \n8                                  1                       Unknown   \n9                                  1                       Unknown   \n10                                 1                       Unknown   \n11                                 1                       Unknown   \n12                                 1                       Unknown   \n13                                 1                       Unknown   \n14                                 1                       Unknown   \n15                                 1                       Unknown   \n16                                 1                       Unknown   \n17                                 1                       Unknown   \n18                                 1                       Unknown   \n19                                 1                       Unknown   \n20                                 1                       Unknown   \n21                                 1                       Unknown   \n22                                 1                       Unknown   \n23                                 1                       Unknown   \n24                                 1                       Unknown   \n25                                 1                       Unknown   \n26                                 1                       Unknown   \n27                                 1                       Unknown   \n28                                 1                       Unknown   \n29                                 1                       Unknown   \n30                                 1                       Unknown   \n31                                 1                       Unknown   \n32                                 1                       Unknown   \n33                                 1                       Unknown   \n34                                 1                       Unknown   \n35                                 1                       Unknown   \n36                                 1                       Unknown   \n37                                 1                       Unknown   \n38                                 1                       Unknown   \n39                                 1                       Unknown   \n40                                 1                       Unknown   \n41                                 1                       Unknown   \n42                                 1                       Unknown   \n43                                 1                       Unknown   \n44                                 1                       Unknown   \n45                                 1                       Unknown   \n46                                 1                       Unknown   \n47                                 1                       Unknown   \n48                                 1                       Unknown   \n49                                 1                       Unknown   \n\n    credacc_cards_status_52L_INACTIVE_count  \\\n0                                         1   \n1                                         1   \n2                                         1   \n3                                         1   \n4                                         1   \n5                                         1   \n6                                         1   \n7                                         1   \n8                                         1   \n9                                         1   \n10                                        1   \n11                                        1   \n12                                        1   \n13                                        1   \n14                                        1   \n15                                        1   \n16                                        1   \n17                                        1   \n18                                        1   \n19                                        1   \n20                                        1   \n21                                        1   \n22                                        1   \n23                                        1   \n24                                        1   \n25                                        1   \n26                                        1   \n27                                        1   \n28                                        1   \n29                                        1   \n30                                        1   \n31                                        1   \n32                                        1   \n33                                        1   \n34                                        1   \n35                                        1   \n36                                        1   \n37                                        1   \n38                                        1   \n39                                        1   \n40                                        1   \n41                                        1   \n42                                        1   \n43                                        1   \n44                                        1   \n45                                        1   \n46                                        1   \n47                                        1   \n48                                        1   \n49                                        1   \n\n    credacc_cards_status_52L_RENEWED_count  \\\n0                                        1   \n1                                        1   \n2                                        1   \n3                                        1   \n4                                        1   \n5                                        1   \n6                                        1   \n7                                        1   \n8                                        1   \n9                                        1   \n10                                       1   \n11                                       1   \n12                                       1   \n13                                       1   \n14                                       1   \n15                                       1   \n16                                       1   \n17                                       1   \n18                                       1   \n19                                       1   \n20                                       1   \n21                                       1   \n22                                       1   \n23                                       1   \n24                                       1   \n25                                       1   \n26                                       1   \n27                                       1   \n28                                       1   \n29                                       1   \n30                                       1   \n31                                       1   \n32                                       1   \n33                                       1   \n34                                       1   \n35                                       1   \n36                                       1   \n37                                       1   \n38                                       1   \n39                                       1   \n40                                       1   \n41                                       1   \n42                                       1   \n43                                       1   \n44                                       1   \n45                                       1   \n46                                       1   \n47                                       1   \n48                                       1   \n49                                       1   \n\n    credacc_cards_status_52L_ACTIVE_count  \\\n0                                       1   \n1                                       1   \n2                                       1   \n3                                       1   \n4                                       1   \n5                                       1   \n6                                       1   \n7                                       1   \n8                                       1   \n9                                       1   \n10                                      1   \n11                                      1   \n12                                      1   \n13                                      1   \n14                                      1   \n15                                      1   \n16                                      1   \n17                                      1   \n18                                      1   \n19                                      1   \n20                                      1   \n21                                      1   \n22                                      1   \n23                                      1   \n24                                      1   \n25                                      1   \n26                                      1   \n27                                      1   \n28                                      1   \n29                                      1   \n30                                      1   \n31                                      1   \n32                                      1   \n33                                      1   \n34                                      1   \n35                                      1   \n36                                      1   \n37                                      1   \n38                                      1   \n39                                      1   \n40                                      1   \n41                                      1   \n42                                      1   \n43                                      1   \n44                                      1   \n45                                      1   \n46                                      1   \n47                                      1   \n48                                      1   \n49                                      1   \n\n    credacc_cards_status_52L_BLOCKED_count  \\\n0                                        1   \n1                                        1   \n2                                        1   \n3                                        1   \n4                                        1   \n5                                        1   \n6                                        1   \n7                                        1   \n8                                        1   \n9                                        1   \n10                                       1   \n11                                       1   \n12                                       1   \n13                                       1   \n14                                       1   \n15                                       1   \n16                                       1   \n17                                       1   \n18                                       1   \n19                                       1   \n20                                       1   \n21                                       1   \n22                                       1   \n23                                       1   \n24                                       1   \n25                                       1   \n26                                       1   \n27                                       1   \n28                                       1   \n29                                       1   \n30                                       1   \n31                                       1   \n32                                       1   \n33                                       1   \n34                                       1   \n35                                       1   \n36                                       1   \n37                                       1   \n38                                       1   \n39                                       1   \n40                                       1   \n41                                       1   \n42                                       1   \n43                                       1   \n44                                       1   \n45                                       1   \n46                                       1   \n47                                       1   \n48                                       1   \n49                                       1   \n\n    credacc_cards_status_52L_Unknown_count  \\\n0                                        1   \n1                                        1   \n2                                        1   \n3                                        1   \n4                                        1   \n5                                        1   \n6                                        1   \n7                                        1   \n8                                        1   \n9                                        1   \n10                                       1   \n11                                       1   \n12                                       1   \n13                                       1   \n14                                       1   \n15                                       1   \n16                                       1   \n17                                       1   \n18                                       1   \n19                                       1   \n20                                       1   \n21                                       1   \n22                                       1   \n23                                       1   \n24                                       1   \n25                                       1   \n26                                       1   \n27                                       1   \n28                                       1   \n29                                       1   \n30                                       1   \n31                                       1   \n32                                       1   \n33                                       1   \n34                                       1   \n35                                       1   \n36                                       1   \n37                                       1   \n38                                       1   \n39                                       1   \n40                                       1   \n41                                       1   \n42                                       1   \n43                                       1   \n44                                       1   \n45                                       1   \n46                                       1   \n47                                       1   \n48                                       1   \n49                                       1   \n\n    credacc_cards_status_52L_CANCELLED_count  \\\n0                                          1   \n1                                          1   \n2                                          1   \n3                                          1   \n4                                          1   \n5                                          1   \n6                                          1   \n7                                          1   \n8                                          1   \n9                                          1   \n10                                         1   \n11                                         1   \n12                                         1   \n13                                         1   \n14                                         1   \n15                                         1   \n16                                         1   \n17                                         1   \n18                                         1   \n19                                         1   \n20                                         1   \n21                                         1   \n22                                         1   \n23                                         1   \n24                                         1   \n25                                         1   \n26                                         1   \n27                                         1   \n28                                         1   \n29                                         1   \n30                                         1   \n31                                         1   \n32                                         1   \n33                                         1   \n34                                         1   \n35                                         1   \n36                                         1   \n37                                         1   \n38                                         1   \n39                                         1   \n40                                         1   \n41                                         1   \n42                                         1   \n43                                         1   \n44                                         1   \n45                                         1   \n46                                         1   \n47                                         1   \n48                                         1   \n49                                         1   \n\n    credacc_cards_status_52L_UNCONFIRMED_count  num_group2_count  \n0                                            1                 3  \n1                                            1                 2  \n2                                            1                 1  \n3                                            1                 1  \n4                                            1                 3  \n5                                            1                 2  \n6                                            1                 3  \n7                                            1                 3  \n8                                            1                 1  \n9                                            1                 2  \n10                                           1                 1  \n11                                           1                 2  \n12                                           1                 2  \n13                                           1                 1  \n14                                           1                 3  \n15                                           1                 2  \n16                                           1                 2  \n17                                           1                 2  \n18                                           1                 1  \n19                                           1                 4  \n20                                           1                 3  \n21                                           1                 1  \n22                                           1                 1  \n23                                           1                 2  \n24                                           1                 1  \n25                                           1                 2  \n26                                           1                 2  \n27                                           1                 3  \n28                                           1                 2  \n29                                           1                 1  \n30                                           1                 2  \n31                                           1                 3  \n32                                           1                 3  \n33                                           1                 1  \n34                                           1                 2  \n35                                           1                 3  \n36                                           1                 3  \n37                                           1                 3  \n38                                           1                 3  \n39                                           1                 3  \n40                                           1                 2  \n41                                           1                 3  \n42                                           1                 3  \n43                                           1                 3  \n44                                           1                 2  \n45                                           1                 2  \n46                                           1                 2  \n47                                           1                 2  \n48                                           1                 2  \n49                                           1                 2  ","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>num_group1</th>\n      <th>actualdpd_943P</th>\n      <th>annuity_853A</th>\n      <th>approvaldate_319D</th>\n      <th>byoccupationinc_3656910L</th>\n      <th>cancelreason_3545846M</th>\n      <th>childnum_21L</th>\n      <th>creationdate_885D</th>\n      <th>credacc_actualbalance_314A</th>\n      <th>credacc_credlmt_575A</th>\n      <th>credacc_maxhisbal_375A</th>\n      <th>credacc_minhisbal_90A</th>\n      <th>credacc_status_367L</th>\n      <th>credacc_transactions_402L</th>\n      <th>credamount_590A</th>\n      <th>credtype_587L</th>\n      <th>currdebt_94A</th>\n      <th>dateactivated_425D</th>\n      <th>district_544M</th>\n      <th>downpmt_134A</th>\n      <th>dtlastpmt_581D</th>\n      <th>dtlastpmtallstes_3545839D</th>\n      <th>education_1138M</th>\n      <th>employedfrom_700D</th>\n      <th>familystate_726L</th>\n      <th>firstnonzeroinstldate_307D</th>\n      <th>inittransactioncode_279L</th>\n      <th>isbidproduct_390L</th>\n      <th>isdebitcard_527L</th>\n      <th>mainoccupationinc_437A</th>\n      <th>maxdpdtolerance_577P</th>\n      <th>outstandingdebt_522A</th>\n      <th>pmtnum_8L</th>\n      <th>postype_4733339M</th>\n      <th>profession_152M</th>\n      <th>rejectreason_755M</th>\n      <th>rejectreasonclient_4145042M</th>\n      <th>revolvingaccount_394A</th>\n      <th>status_219L</th>\n      <th>tenor_203L</th>\n      <th>cacccardblochreas_147M_nunique</th>\n      <th>cacccardblochreas_147M_mode</th>\n      <th>cacccardblochreas_147M_P23_105_103_count</th>\n      <th>cacccardblochreas_147M_P19_60_110_count</th>\n      <th>cacccardblochreas_147M_P41_107_150_count</th>\n      <th>cacccardblochreas_147M_P127_74_114_count</th>\n      <th>cacccardblochreas_147M_P133_119_56_count</th>\n      <th>cacccardblochreas_147M_P33_145_161_count</th>\n      <th>cacccardblochreas_147M_a55475b1_count</th>\n      <th>cacccardblochreas_147M_Unknown_count</th>\n      <th>cacccardblochreas_147M_P17_56_144_count</th>\n      <th>cacccardblochreas_147M_P201_63_60_count</th>\n      <th>conts_type_509L_nunique</th>\n      <th>conts_type_509L_mode</th>\n      <th>conts_type_509L_PRIMARY_MOBILE_count</th>\n      <th>conts_type_509L_EMPLOYMENT_PHONE_count</th>\n      <th>conts_type_509L_ALTERNATIVE_PHONE_count</th>\n      <th>conts_type_509L_WHATSAPP_count</th>\n      <th>conts_type_509L_SKYPE_count</th>\n      <th>conts_type_509L_PRIMARY_EMAIL_count</th>\n      <th>conts_type_509L_PHONE_count</th>\n      <th>conts_type_509L_HOME_PHONE_count</th>\n      <th>conts_type_509L_SECONDARY_MOBILE_count</th>\n      <th>conts_type_509L_Unknown_count</th>\n      <th>credacc_cards_status_52L_nunique</th>\n      <th>credacc_cards_status_52L_mode</th>\n      <th>credacc_cards_status_52L_INACTIVE_count</th>\n      <th>credacc_cards_status_52L_RENEWED_count</th>\n      <th>credacc_cards_status_52L_ACTIVE_count</th>\n      <th>credacc_cards_status_52L_BLOCKED_count</th>\n      <th>credacc_cards_status_52L_Unknown_count</th>\n      <th>credacc_cards_status_52L_CANCELLED_count</th>\n      <th>credacc_cards_status_52L_UNCONFIRMED_count</th>\n      <th>num_group2_count</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>3</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>6140.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2019-01-07</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>59999.800</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P131_33_167</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2018-05-15</td>\n      <td>MARRIED</td>\n      <td>2019-02-07</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>11000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>4</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>2556.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P24_27_36</td>\n      <td>NaN</td>\n      <td>2019-01-08</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P194_82_174</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-02-08</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>13</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>5069.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-08-20</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P120_80_181</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-09-20</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>64000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>13</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>5334.800</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2017-08-22</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P120_80_181</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2017-09-22</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>64000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>14</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>4178.000</td>\n      <td>2018-10-11</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-10-11</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>11994.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-10-19</td>\n      <td>P205_129_155</td>\n      <td>0.000</td>\n      <td>2019-01-10</td>\n      <td>2019-01-10</td>\n      <td>P97_36_170</td>\n      <td>2007-01-15</td>\n      <td>MARRIED</td>\n      <td>2018-11-10</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>50000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>3.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>3.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>18</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>2018-12-31</td>\n      <td>NaN</td>\n      <td>P73_130_169</td>\n      <td>NaN</td>\n      <td>2018-12-31</td>\n      <td>NaN</td>\n      <td>40600.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40600.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P197_47_166</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2008-02-06</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>50000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>24</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>1045.000</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>2.000</td>\n      <td>2014-07-12</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>5520.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P106_139_158</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2012-05-15</td>\n      <td>MARRIED</td>\n      <td>2014-08-11</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>6.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>6.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>30</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>5801.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2013-11-22</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>28998.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P197_47_166</td>\n      <td>4000.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P33_146_175</td>\n      <td>2009-06-15</td>\n      <td>SINGLE</td>\n      <td>2013-12-22</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>34000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>5.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>5.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>36</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>4199.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P53_10_15</td>\n      <td>NaN</td>\n      <td>2019-01-02</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P16_86_94</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-02-02</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>40000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P53_10_15</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>41</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>2858.600</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>1.000</td>\n      <td>2014-07-28</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>17144.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P181_116_184</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2011-01-15</td>\n      <td>MARRIED</td>\n      <td>2014-08-28</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>24000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>6.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>6.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>52</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>6108.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P141_135_146</td>\n      <td>NaN</td>\n      <td>2019-01-17</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P31_88_142</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>None</td>\n      <td>MARRIED</td>\n      <td>2019-02-17</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>84000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>40791</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>2320.800</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2014-12-28</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>27830.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2013-04-15</td>\n      <td>SINGLE</td>\n      <td>2015-01-28</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>12.000</td>\n      <td>P60_146_156</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>40791</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>2541.200</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2014-12-28</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>58239.800</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2013-04-15</td>\n      <td>SINGLE</td>\n      <td>2015-01-28</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>22000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>24.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>40865</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2017-12-30</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P82_154_182</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>False</td>\n      <td>None</td>\n      <td>32000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>40865</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>3795.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>0.000</td>\n      <td>2017-12-29</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>18280.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P82_154_182</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>None</td>\n      <td>MARRIED</td>\n      <td>2018-01-29</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>32000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>6.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>40881</td>\n      <td>4</td>\n      <td>0.000</td>\n      <td>3089.400</td>\n      <td>2019-10-28</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2019-10-28</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>8740.000</td>\n      <td>COL</td>\n      <td>2977.330</td>\n      <td>2019-11-06</td>\n      <td>P186_84_175</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>2019-12-28</td>\n      <td>P97_36_170</td>\n      <td>2018-01-15</td>\n      <td>MARRIED</td>\n      <td>2019-11-28</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>36000.000</td>\n      <td>0.000</td>\n      <td>3068.000</td>\n      <td>3.000</td>\n      <td>P149_40_170</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>A</td>\n      <td>3.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>40881</td>\n      <td>7</td>\n      <td>0.000</td>\n      <td>2098.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-06-06</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>5660.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P186_84_175</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-07-07</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>3.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>40887</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>3845.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P24_27_36</td>\n      <td>NaN</td>\n      <td>2019-07-16</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>50000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-08-16</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>15.000</td>\n      <td>P67_102_161</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>15.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>40893</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>7638.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P19_105_83</td>\n      <td>NaN</td>\n      <td>2019-12-17</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>200000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-01-17</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>P67_102_161</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>19</th>\n      <td>40903</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>3875.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>3.000</td>\n      <td>2016-10-07</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>60000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P131_33_167</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>None</td>\n      <td>SINGLE</td>\n      <td>2016-11-06</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>P196_88_176</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>4</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>40905</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>5466.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>1.000</td>\n      <td>2010-01-09</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>56340.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2008-04-15</td>\n      <td>SINGLE</td>\n      <td>2010-02-09</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>18000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>18.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>18.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>21</th>\n      <td>40906</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>599.800</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-06-30</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>3393.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P157_94_145</td>\n      <td>5.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-07-30</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>110000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>6.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>40906</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P120_0_10</td>\n      <td>NaN</td>\n      <td>2018-05-11</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P157_94_145</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>False</td>\n      <td>None</td>\n      <td>180000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>40907</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>7085.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2017-05-31</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>64000.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P19_11_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2017-07-01</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>P149_40_170</td>\n      <td>a55475b1</td>\n      <td>P198_131_9</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>24</th>\n      <td>40909</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>1877.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P30_86_84</td>\n      <td>NaN</td>\n      <td>2019-12-22</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-01-22</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>6.000</td>\n      <td>P67_102_161</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P30_86_84</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>6.000</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>1482874</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>1118.800</td>\n      <td>2018-09-10</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-09-10</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>2980.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-09-12</td>\n      <td>P123_6_84</td>\n      <td>0.000</td>\n      <td>2018-09-24</td>\n      <td>2018-09-24</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-10-11</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>50000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>3.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>3.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>26</th>\n      <td>1482874</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>2670.000</td>\n      <td>2018-06-02</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-06-02</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>31998.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-06-12</td>\n      <td>P123_6_84</td>\n      <td>0.000</td>\n      <td>2019-06-02</td>\n      <td>2019-06-02</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>MARRIED</td>\n      <td>2018-07-03</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>76000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>16.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>16.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>27</th>\n      <td>1482874</td>\n      <td>5</td>\n      <td>0.000</td>\n      <td>1085.200</td>\n      <td>2014-12-06</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2014-12-06</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>30460.600</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2014-12-09</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2016-07-30</td>\n      <td>2016-07-30</td>\n      <td>P97_36_170</td>\n      <td>2006-05-15</td>\n      <td>SINGLE</td>\n      <td>2015-01-05</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>60000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>36.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>28</th>\n      <td>1482875</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>14292.601</td>\n      <td>2018-08-03</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-08-03</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>138167.800</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-08-07</td>\n      <td>P131_33_167</td>\n      <td>0.000</td>\n      <td>2019-08-01</td>\n      <td>2019-08-01</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-09-03</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>100000.000</td>\n      <td>1.000</td>\n      <td>0.000</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>29</th>\n      <td>1482875</td>\n      <td>3</td>\n      <td>0.000</td>\n      <td>5500.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2017-11-11</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>65958.000</td>\n      <td>COL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2017-12-12</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>100000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>30</th>\n      <td>1482877</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>4098.000</td>\n      <td>2018-01-27</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-01-27</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>41646.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-02-02</td>\n      <td>P85_130_149</td>\n      <td>0.000</td>\n      <td>2019-01-26</td>\n      <td>2019-01-26</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>MARRIED</td>\n      <td>2018-02-27</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>48000.000</td>\n      <td>1.000</td>\n      <td>0.000</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>31</th>\n      <td>1482879</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>3642.800</td>\n      <td>2013-03-06</td>\n      <td>15000.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2013-03-06</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>30000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>2013-03-06</td>\n      <td>P123_39_170</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2001-08-15</td>\n      <td>SINGLE</td>\n      <td>2013-04-06</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>1482879</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>3730.400</td>\n      <td>2013-02-26</td>\n      <td>20000.000</td>\n      <td>P73_130_169</td>\n      <td>0.000</td>\n      <td>2013-02-26</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P123_39_170</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2000-08-15</td>\n      <td>SINGLE</td>\n      <td>2013-04-02</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>18.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>18.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>33</th>\n      <td>1482881</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>2472.600</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-12-01</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>20000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P115_26_169</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2018-12-31</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>40000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>1482881</td>\n      <td>6</td>\n      <td>0.000</td>\n      <td>848.800</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2016-09-14</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>6000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P115_26_169</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2016-10-15</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>10.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>10.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>35</th>\n      <td>1482882</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>3835.000</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>1.000</td>\n      <td>2014-12-22</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>60000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P19_11_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2009-05-15</td>\n      <td>MARRIED</td>\n      <td>2015-01-22</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>22000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>36</th>\n      <td>1482882</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>4197.600</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>1.000</td>\n      <td>2014-11-18</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P19_11_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2008-05-15</td>\n      <td>MARRIED</td>\n      <td>2014-12-18</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>12400.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>12.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>12.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>1482882</td>\n      <td>3</td>\n      <td>0.000</td>\n      <td>1172.800</td>\n      <td>2014-06-18</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>2.000</td>\n      <td>2014-06-18</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>8525.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2014-06-19</td>\n      <td>a55475b1</td>\n      <td>2000.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2008-11-15</td>\n      <td>MARRIED</td>\n      <td>2014-07-18</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>20000.000</td>\n      <td>183.000</td>\n      <td>0.000</td>\n      <td>10.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>10.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>EMPLOYMENT_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>38</th>\n      <td>1482883</td>\n      <td>3</td>\n      <td>0.000</td>\n      <td>1905.800</td>\n      <td>2011-04-13</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>3.000</td>\n      <td>2011-04-13</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>26000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>2011-04-14</td>\n      <td>P89_71_50</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P33_146_175</td>\n      <td>2010-11-15</td>\n      <td>MARRIED</td>\n      <td>2011-05-14</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>5600.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>39</th>\n      <td>1482883</td>\n      <td>7</td>\n      <td>0.000</td>\n      <td>2388.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>3.000</td>\n      <td>2011-03-04</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>40000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P89_71_50</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P33_146_175</td>\n      <td>2010-11-15</td>\n      <td>MARRIED</td>\n      <td>2011-04-01</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>6000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>36.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>40</th>\n      <td>1482885</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>1752.400</td>\n      <td>2018-12-05</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>2018-12-05</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>7300.000</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>2018-12-13</td>\n      <td>P156_128_17</td>\n      <td>0.000</td>\n      <td>2019-04-22</td>\n      <td>2019-04-22</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2019-01-04</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>44800.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>5.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>5.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>1915444</td>\n      <td>6</td>\n      <td>0.000</td>\n      <td>3840.600</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2015-03-16</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>60000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P54_133_26</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>None</td>\n      <td>WIDOWED</td>\n      <td>2015-04-16</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>36000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>24.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>1915444</td>\n      <td>7</td>\n      <td>0.000</td>\n      <td>938.600</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2014-08-31</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>32265.800</td>\n      <td>COL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P54_133_26</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>None</td>\n      <td>WIDOWED</td>\n      <td>2014-10-01</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>None</td>\n      <td>16000.000</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>36.000</td>\n      <td>P177_117_192</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>43</th>\n      <td>1915444</td>\n      <td>9</td>\n      <td>0.000</td>\n      <td>2302.200</td>\n      <td>2013-09-11</td>\n      <td>30000.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2013-09-11</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>30000.000</td>\n      <td>CAL</td>\n      <td>0.000</td>\n      <td>2013-09-11</td>\n      <td>P54_133_26</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P33_146_175</td>\n      <td>None</td>\n      <td>WIDOWED</td>\n      <td>2013-10-12</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>11600.000</td>\n      <td>59.000</td>\n      <td>0.000</td>\n      <td>24.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>K</td>\n      <td>24.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>3</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>1915448</td>\n      <td>1</td>\n      <td>0.000</td>\n      <td>126.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2020-08-05</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>4000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P174_104_184</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-09-05</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>48.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>48.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>45</th>\n      <td>1915448</td>\n      <td>2</td>\n      <td>0.000</td>\n      <td>315.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2020-07-31</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P174_104_184</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-08-31</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>48.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>48.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>46</th>\n      <td>1915448</td>\n      <td>5</td>\n      <td>0.000</td>\n      <td>378.400</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>2020-07-17</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>12000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-08-17</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>48.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>48.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>47</th>\n      <td>1915448</td>\n      <td>8</td>\n      <td>0.000</td>\n      <td>63.200</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>2020-07-13</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>2000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-08-11</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>48.000</td>\n      <td>P46_145_78</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>48.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>PRIMARY_MOBILE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>48</th>\n      <td>1915448</td>\n      <td>12</td>\n      <td>0.000</td>\n      <td>382.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>2020-07-03</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-08-02</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>P67_102_161</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n    <tr>\n      <th>49</th>\n      <td>1915448</td>\n      <td>14</td>\n      <td>0.000</td>\n      <td>382.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>2020-06-21</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>CAL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2020-07-21</td>\n      <td>CASH</td>\n      <td>False</td>\n      <td>None</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>36.000</td>\n      <td>P67_102_161</td>\n      <td>a55475b1</td>\n      <td>P99_56_166</td>\n      <td>P52_67_90</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>36.000</td>\n      <td>1</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n      <td>HOME_PHONE</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>Unknown</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>2</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":18},{"cell_type":"code","source":"train_applprev.count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:35:27.831854Z","iopub.execute_input":"2025-06-13T09:35:27.832145Z","iopub.status.idle":"2025-06-13T09:35:51.132185Z","shell.execute_reply.started":"2025-06-13T09:35:27.832122Z","shell.execute_reply":"2025-06-13T09:35:51.130234Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":19,"output_type":"execute_result","data":{"text/plain":"6525979"},"metadata":{}}],"execution_count":19},{"cell_type":"code","source":"train_applprev.select('case_id').distinct().count()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:35:51.13319Z","iopub.execute_input":"2025-06-13T09:35:51.13356Z","iopub.status.idle":"2025-06-13T09:35:52.659429Z","shell.execute_reply.started":"2025-06-13T09:35:51.133524Z","shell.execute_reply":"2025-06-13T09:35:52.65824Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":20,"output_type":"execute_result","data":{"text/plain":"1221522"},"metadata":{}}],"execution_count":20},{"cell_type":"markdown","source":"### Conclusion:\nCó 1221522 case đã từng apply trong quá khứ (vừa được duyệt, vừa được không), có những case không được duyệt case nào.","metadata":{}},{"cell_type":"markdown","source":"### Credit Bureau a\nĐây là các thông tin từ cục tín dụng - Credit Bureau, chỉ khi có apply đơn trong quá khứ thì mới có data.","metadata":{}},{"cell_type":"code","source":"train_credit_bureau_a_1, train_credit_bureau_a_1_dfs = dataloader('train_credit_bureau_a_1')\ntrain_credit_bureau_a_1.select(col('case_id')).distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:07.327482Z","iopub.execute_input":"2025-06-13T07:48:07.327791Z","iopub.status.idle":"2025-06-13T07:48:12.056093Z","shell.execute_reply.started":"2025-06-13T07:48:07.327766Z","shell.execute_reply":"2025-06-13T07:48:12.054733Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_3.parquet → 2079323 rows\nFile 1: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_2.parquet → 3743810 rows\nFile 2: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_0.parquet → 4108212 rows\nFile 3: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_1.parquet → 6009192 rows\nTổng số dòng (đọc chung):      15940537\nTổng số dòng (đọc riêng lẻ):   15940537\n✅ Số dòng khớp nhau\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":27,"output_type":"execute_result","data":{"text/plain":"1386273"},"metadata":{}}],"execution_count":27},{"cell_type":"code","source":"train_credit_bureau_a_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:12.066597Z","iopub.execute_input":"2025-06-13T07:48:12.067449Z","iopub.status.idle":"2025-06-13T07:48:12.096357Z","shell.execute_reply.started":"2025-06-13T07:48:12.06742Z","shell.execute_reply":"2025-06-13T07:48:12.095121Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- annualeffectiverate_199L: double (nullable = true)\n |-- annualeffectiverate_63L: double (nullable = true)\n |-- classificationofcontr_13M: string (nullable = true)\n |-- classificationofcontr_400M: string (nullable = true)\n |-- contractst_545M: string (nullable = true)\n |-- contractst_964M: string (nullable = true)\n |-- contractsum_5085717L: double (nullable = true)\n |-- credlmt_230A: double (nullable = true)\n |-- credlmt_935A: double (nullable = true)\n |-- dateofcredend_289D: string (nullable = true)\n |-- dateofcredend_353D: string (nullable = true)\n |-- dateofcredstart_181D: string (nullable = true)\n |-- dateofcredstart_739D: string (nullable = true)\n |-- dateofrealrepmt_138D: string (nullable = true)\n |-- debtoutstand_525A: double (nullable = true)\n |-- debtoverdue_47A: double (nullable = true)\n |-- description_351M: string (nullable = true)\n |-- dpdmax_139P: double (nullable = true)\n |-- dpdmax_757P: double (nullable = true)\n |-- dpdmaxdatemonth_442T: double (nullable = true)\n |-- dpdmaxdatemonth_89T: double (nullable = true)\n |-- dpdmaxdateyear_596T: double (nullable = true)\n |-- dpdmaxdateyear_896T: double (nullable = true)\n |-- financialinstitution_382M: string (nullable = true)\n |-- financialinstitution_591M: string (nullable = true)\n |-- instlamount_768A: double (nullable = true)\n |-- instlamount_852A: double (nullable = true)\n |-- interestrate_508L: double (nullable = true)\n |-- lastupdate_1112D: string (nullable = true)\n |-- lastupdate_388D: string (nullable = true)\n |-- monthlyinstlamount_332A: double (nullable = true)\n |-- monthlyinstlamount_674A: double (nullable = true)\n |-- nominalrate_281L: double (nullable = true)\n |-- nominalrate_498L: double (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- numberofcontrsvalue_258L: double (nullable = true)\n |-- numberofcontrsvalue_358L: double (nullable = true)\n |-- numberofinstls_229L: double (nullable = true)\n |-- numberofinstls_320L: double (nullable = true)\n |-- numberofoutstandinstls_520L: double (nullable = true)\n |-- numberofoutstandinstls_59L: double (nullable = true)\n |-- numberofoverdueinstlmax_1039L: double (nullable = true)\n |-- numberofoverdueinstlmax_1151L: double (nullable = true)\n |-- numberofoverdueinstlmaxdat_148D: string (nullable = true)\n |-- numberofoverdueinstlmaxdat_641D: string (nullable = true)\n |-- numberofoverdueinstls_725L: double (nullable = true)\n |-- numberofoverdueinstls_834L: double (nullable = true)\n |-- outstandingamount_354A: double (nullable = true)\n |-- outstandingamount_362A: double (nullable = true)\n |-- overdueamount_31A: double (nullable = true)\n |-- overdueamount_659A: double (nullable = true)\n |-- overdueamountmax2_14A: double (nullable = true)\n |-- overdueamountmax2_398A: double (nullable = true)\n |-- overdueamountmax2date_1002D: string (nullable = true)\n |-- overdueamountmax2date_1142D: string (nullable = true)\n |-- overdueamountmax_155A: double (nullable = true)\n |-- overdueamountmax_35A: double (nullable = true)\n |-- overdueamountmaxdatemonth_284T: double (nullable = true)\n |-- overdueamountmaxdatemonth_365T: double (nullable = true)\n |-- overdueamountmaxdateyear_2T: double (nullable = true)\n |-- overdueamountmaxdateyear_994T: double (nullable = true)\n |-- periodicityofpmts_1102L: double (nullable = true)\n |-- periodicityofpmts_837L: double (nullable = true)\n |-- prolongationcount_1120L: double (nullable = true)\n |-- prolongationcount_599L: double (nullable = true)\n |-- purposeofcred_426M: string (nullable = true)\n |-- purposeofcred_874M: string (nullable = true)\n |-- refreshdate_3813885D: string (nullable = true)\n |-- residualamount_488A: double (nullable = true)\n |-- residualamount_856A: double (nullable = true)\n |-- subjectrole_182M: string (nullable = true)\n |-- subjectrole_93M: string (nullable = true)\n |-- totalamount_6A: double (nullable = true)\n |-- totalamount_996A: double (nullable = true)\n |-- totaldebtoverduevalue_178A: double (nullable = true)\n |-- totaldebtoverduevalue_718A: double (nullable = true)\n |-- totaloutstanddebtvalue_39A: double (nullable = true)\n |-- totaloutstanddebtvalue_668A: double (nullable = true)\n\n","output_type":"stream"}],"execution_count":28},{"cell_type":"code","source":"train_credit_bureau_a_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:12.097894Z","iopub.execute_input":"2025-06-13T07:48:12.098236Z","iopub.status.idle":"2025-06-13T07:48:12.881021Z","shell.execute_reply.started":"2025-06-13T07:48:12.098206Z","shell.execute_reply":"2025-06-13T07:48:12.880019Z"}},"outputs":[{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"   case_id  annualeffectiverate_199L  annualeffectiverate_63L  \\\n0    19694                       NaN                      NaN   \n1    19694                       NaN                      NaN   \n2    19694                       NaN                      NaN   \n3    19694                       NaN                      NaN   \n4    19694                       NaN                      NaN   \n\n  classificationofcontr_13M classificationofcontr_400M contractst_545M  \\\n0                  ea6782cc                   a55475b1        7241344e   \n1                  ea6782cc                   a55475b1        7241344e   \n2                  a55475b1                   a55475b1        a55475b1   \n3                  a55475b1                   a55475b1        a55475b1   \n4                  a55475b1                   a55475b1        a55475b1   \n\n  contractst_964M  contractsum_5085717L  credlmt_230A  credlmt_935A  \\\n0        a55475b1                   NaN           NaN         0.000   \n1        a55475b1                   NaN           NaN           NaN   \n2        a55475b1                   NaN           NaN           NaN   \n3        a55475b1                   NaN           NaN           NaN   \n4        a55475b1                   NaN           NaN           NaN   \n\n  dateofcredend_289D dateofcredend_353D dateofcredstart_181D  \\\n0         2020-09-29               None                 None   \n1         2020-04-14               None                 None   \n2               None               None                 None   \n3               None               None                 None   \n4               None               None                 None   \n\n  dateofcredstart_739D dateofrealrepmt_138D  debtoutstand_525A  \\\n0           2014-09-29                 None          43315.260   \n1           2016-04-14                 None                NaN   \n2                 None                 None                NaN   \n3                 None                 None                NaN   \n4                 None                 None                NaN   \n\n   debtoverdue_47A description_351M  dpdmax_139P  dpdmax_757P  \\\n0            0.000         a55475b1       20.000          NaN   \n1              NaN         a55475b1       19.000          NaN   \n2              NaN         a55475b1          NaN          NaN   \n3              NaN         a55475b1          NaN          NaN   \n4              NaN         a55475b1          NaN          NaN   \n\n   dpdmaxdatemonth_442T  dpdmaxdatemonth_89T  dpdmaxdateyear_596T  \\\n0                   NaN               12.000             2017.000   \n1                   NaN                3.000             2018.000   \n2                   NaN                  NaN                  NaN   \n3                   NaN                  NaN                  NaN   \n4                   NaN                  NaN                  NaN   \n\n   dpdmaxdateyear_896T financialinstitution_382M financialinstitution_591M  \\\n0                  NaN                  a55475b1                P204_66_73   \n1                  NaN                  a55475b1              P150_136_157   \n2                  NaN                  a55475b1                  a55475b1   \n3                  NaN                  a55475b1                  a55475b1   \n4                  NaN                  a55475b1                  a55475b1   \n\n   instlamount_768A  instlamount_852A  interestrate_508L lastupdate_1112D  \\\n0             0.000               NaN                NaN       2019-06-27   \n1               NaN               NaN                NaN       2019-07-03   \n2               NaN               NaN                NaN             None   \n3               NaN               NaN                NaN             None   \n4               NaN               NaN                NaN             None   \n\n  lastupdate_388D  monthlyinstlamount_332A  monthlyinstlamount_674A  \\\n0            None                    0.000                      NaN   \n1            None                 5155.542                      NaN   \n2            None                      NaN                      NaN   \n3            None                      NaN                      NaN   \n4            None                      NaN                      NaN   \n\n   nominalrate_281L  nominalrate_498L  num_group1  numberofcontrsvalue_258L  \\\n0               NaN               NaN           0                     2.000   \n1               NaN               NaN           1                       NaN   \n2               NaN               NaN           2                       NaN   \n3               NaN               NaN           3                       NaN   \n4               NaN               NaN           4                       NaN   \n\n   numberofcontrsvalue_358L  numberofinstls_229L  numberofinstls_320L  \\\n0                     8.000                  NaN                  NaN   \n1                       NaN                  NaN               47.000   \n2                       NaN                  NaN                  NaN   \n3                       NaN                  NaN                  NaN   \n4                       NaN                  NaN                  NaN   \n\n   numberofoutstandinstls_520L  numberofoutstandinstls_59L  \\\n0                          NaN                         NaN   \n1                          NaN                       9.000   \n2                          NaN                         NaN   \n3                          NaN                         NaN   \n4                          NaN                         NaN   \n\n   numberofoverdueinstlmax_1039L  numberofoverdueinstlmax_1151L  \\\n0                         22.000                            NaN   \n1                         21.000                            NaN   \n2                            NaN                            NaN   \n3                            NaN                            NaN   \n4                            NaN                            NaN   \n\n  numberofoverdueinstlmaxdat_148D numberofoverdueinstlmaxdat_641D  \\\n0                            None                      2017-11-21   \n1                            None                      2018-03-08   \n2                            None                            None   \n3                            None                            None   \n4                            None                            None   \n\n   numberofoverdueinstls_725L  numberofoverdueinstls_834L  \\\n0                       0.000                         NaN   \n1                       0.000                         NaN   \n2                         NaN                         NaN   \n3                         NaN                         NaN   \n4                         NaN                         NaN   \n\n   outstandingamount_354A  outstandingamount_362A  overdueamount_31A  \\\n0                     NaN                     NaN                NaN   \n1                     NaN               43315.260                NaN   \n2                     NaN                     NaN                NaN   \n3                     NaN                     NaN                NaN   \n4                     NaN                     NaN                NaN   \n\n   overdueamount_659A  overdueamountmax2_14A  overdueamountmax2_398A  \\\n0               0.000               2967.666                     NaN   \n1               0.000               5155.344                     NaN   \n2                 NaN                    NaN                     NaN   \n3                 NaN                    NaN                     NaN   \n4                 NaN                    NaN                     NaN   \n\n  overdueamountmax2date_1002D overdueamountmax2date_1142D  \\\n0                        None                  2018-03-31   \n1                        None                  2017-01-19   \n2                        None                        None   \n3                        None                        None   \n4                        None                        None   \n\n   overdueamountmax_155A  overdueamountmax_35A  \\\n0               2967.666                   NaN   \n1               5061.540                   NaN   \n2                    NaN                   NaN   \n3                    NaN                   NaN   \n4                    NaN                   NaN   \n\n   overdueamountmaxdatemonth_284T  overdueamountmaxdatemonth_365T  \\\n0                             NaN                           4.000   \n1                             NaN                          10.000   \n2                             NaN                             NaN   \n3                             NaN                             NaN   \n4                             NaN                             NaN   \n\n   overdueamountmaxdateyear_2T  overdueamountmaxdateyear_994T  \\\n0                     2018.000                            NaN   \n1                     2017.000                            NaN   \n2                          NaN                            NaN   \n3                          NaN                            NaN   \n4                          NaN                            NaN   \n\n   periodicityofpmts_1102L  periodicityofpmts_837L  prolongationcount_1120L  \\\n0                      NaN                     NaN                      NaN   \n1                      NaN                  30.000                      NaN   \n2                      NaN                     NaN                      NaN   \n3                      NaN                     NaN                      NaN   \n4                      NaN                     NaN                      NaN   \n\n   prolongationcount_599L purposeofcred_426M purposeofcred_874M  \\\n0                     NaN           60c73645           a55475b1   \n1                     NaN           96a8fdfe           a55475b1   \n2                     NaN           a55475b1           a55475b1   \n3                     NaN           a55475b1           a55475b1   \n4                     NaN           a55475b1           a55475b1   \n\n  refreshdate_3813885D  residualamount_488A  residualamount_856A  \\\n0                 None                  NaN                0.000   \n1                 None                  NaN                  NaN   \n2           2019-07-10                  NaN                  NaN   \n3           2019-07-10                  NaN                  NaN   \n4           2019-07-10                  NaN                  NaN   \n\n  subjectrole_182M subjectrole_93M  totalamount_6A  totalamount_996A  \\\n0         ab3c25cf        ab3c25cf             NaN               NaN   \n1         a55475b1        a55475b1             NaN        170000.000   \n2         a55475b1        a55475b1             NaN               NaN   \n3         a55475b1        a55475b1             NaN               NaN   \n4         a55475b1        a55475b1             NaN               NaN   \n\n   totaldebtoverduevalue_178A  totaldebtoverduevalue_718A  \\\n0                       0.000                       0.000   \n1                         NaN                         NaN   \n2                         NaN                         NaN   \n3                         NaN                         NaN   \n4                         NaN                         NaN   \n\n   totaloutstanddebtvalue_39A  totaloutstanddebtvalue_668A  \n0                   43315.260                        0.000  \n1                         NaN                          NaN  \n2                         NaN                          NaN  \n3                         NaN                          NaN  \n4                         NaN                          NaN  ","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>annualeffectiverate_199L</th>\n      <th>annualeffectiverate_63L</th>\n      <th>classificationofcontr_13M</th>\n      <th>classificationofcontr_400M</th>\n      <th>contractst_545M</th>\n      <th>contractst_964M</th>\n      <th>contractsum_5085717L</th>\n      <th>credlmt_230A</th>\n      <th>credlmt_935A</th>\n      <th>dateofcredend_289D</th>\n      <th>dateofcredend_353D</th>\n      <th>dateofcredstart_181D</th>\n      <th>dateofcredstart_739D</th>\n      <th>dateofrealrepmt_138D</th>\n      <th>debtoutstand_525A</th>\n      <th>debtoverdue_47A</th>\n      <th>description_351M</th>\n      <th>dpdmax_139P</th>\n      <th>dpdmax_757P</th>\n      <th>dpdmaxdatemonth_442T</th>\n      <th>dpdmaxdatemonth_89T</th>\n      <th>dpdmaxdateyear_596T</th>\n      <th>dpdmaxdateyear_896T</th>\n      <th>financialinstitution_382M</th>\n      <th>financialinstitution_591M</th>\n      <th>instlamount_768A</th>\n      <th>instlamount_852A</th>\n      <th>interestrate_508L</th>\n      <th>lastupdate_1112D</th>\n      <th>lastupdate_388D</th>\n      <th>monthlyinstlamount_332A</th>\n      <th>monthlyinstlamount_674A</th>\n      <th>nominalrate_281L</th>\n      <th>nominalrate_498L</th>\n      <th>num_group1</th>\n      <th>numberofcontrsvalue_258L</th>\n      <th>numberofcontrsvalue_358L</th>\n      <th>numberofinstls_229L</th>\n      <th>numberofinstls_320L</th>\n      <th>numberofoutstandinstls_520L</th>\n      <th>numberofoutstandinstls_59L</th>\n      <th>numberofoverdueinstlmax_1039L</th>\n      <th>numberofoverdueinstlmax_1151L</th>\n      <th>numberofoverdueinstlmaxdat_148D</th>\n      <th>numberofoverdueinstlmaxdat_641D</th>\n      <th>numberofoverdueinstls_725L</th>\n      <th>numberofoverdueinstls_834L</th>\n      <th>outstandingamount_354A</th>\n      <th>outstandingamount_362A</th>\n      <th>overdueamount_31A</th>\n      <th>overdueamount_659A</th>\n      <th>overdueamountmax2_14A</th>\n      <th>overdueamountmax2_398A</th>\n      <th>overdueamountmax2date_1002D</th>\n      <th>overdueamountmax2date_1142D</th>\n      <th>overdueamountmax_155A</th>\n      <th>overdueamountmax_35A</th>\n      <th>overdueamountmaxdatemonth_284T</th>\n      <th>overdueamountmaxdatemonth_365T</th>\n      <th>overdueamountmaxdateyear_2T</th>\n      <th>overdueamountmaxdateyear_994T</th>\n      <th>periodicityofpmts_1102L</th>\n      <th>periodicityofpmts_837L</th>\n      <th>prolongationcount_1120L</th>\n      <th>prolongationcount_599L</th>\n      <th>purposeofcred_426M</th>\n      <th>purposeofcred_874M</th>\n      <th>refreshdate_3813885D</th>\n      <th>residualamount_488A</th>\n      <th>residualamount_856A</th>\n      <th>subjectrole_182M</th>\n      <th>subjectrole_93M</th>\n      <th>totalamount_6A</th>\n      <th>totalamount_996A</th>\n      <th>totaldebtoverduevalue_178A</th>\n      <th>totaldebtoverduevalue_718A</th>\n      <th>totaloutstanddebtvalue_39A</th>\n      <th>totaloutstanddebtvalue_668A</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>19694</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>ea6782cc</td>\n      <td>a55475b1</td>\n      <td>7241344e</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>2020-09-29</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2014-09-29</td>\n      <td>None</td>\n      <td>43315.260</td>\n      <td>0.000</td>\n      <td>a55475b1</td>\n      <td>20.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>12.000</td>\n      <td>2017.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>P204_66_73</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2019-06-27</td>\n      <td>None</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2.000</td>\n      <td>8.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>22.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>2017-11-21</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>2967.666</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>2018-03-31</td>\n      <td>2967.666</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>4.000</td>\n      <td>2018.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>60c73645</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>ab3c25cf</td>\n      <td>ab3c25cf</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>43315.260</td>\n      <td>0.000</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>19694</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>ea6782cc</td>\n      <td>a55475b1</td>\n      <td>7241344e</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2020-04-14</td>\n      <td>None</td>\n      <td>None</td>\n      <td>2016-04-14</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>19.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3.000</td>\n      <td>2018.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>P150_136_157</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2019-07-03</td>\n      <td>None</td>\n      <td>5155.542</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>47.000</td>\n      <td>NaN</td>\n      <td>9.000</td>\n      <td>21.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>2018-03-08</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>43315.260</td>\n      <td>NaN</td>\n      <td>0.000</td>\n      <td>5155.344</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>2017-01-19</td>\n      <td>5061.540</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>10.000</td>\n      <td>2017.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>30.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>96a8fdfe</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>170000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>19694</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>2019-07-10</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>19694</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>3</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>2019-07-10</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>19694</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>4</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>2019-07-10</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":29},{"cell_type":"code","source":"train_credit_bureau_a_1.select(col('case_id')).distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:12.882186Z","iopub.execute_input":"2025-06-13T07:48:12.882471Z","iopub.status.idle":"2025-06-13T07:48:14.887675Z","shell.execute_reply.started":"2025-06-13T07:48:12.882451Z","shell.execute_reply":"2025-06-13T07:48:14.886501Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"execution_count":30,"output_type":"execute_result","data":{"text/plain":"1386273"},"metadata":{}}],"execution_count":30},{"cell_type":"code","source":"# train_credit_bureau_a_2, train_credit_bureau_a_2_dfs = dataloader('train_credit_bureau_a_2')\n# # train_credit_bureau_a_2.select(col('case_id')).distinct().count()\n# # train_credit_bureau_a_2.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:14.888754Z","iopub.execute_input":"2025-06-13T07:48:14.88917Z","iopub.status.idle":"2025-06-13T07:48:14.915683Z","shell.execute_reply.started":"2025-06-13T07:48:14.889142Z","shell.execute_reply":"2025-06-13T07:48:14.914782Z"}},"outputs":[],"execution_count":31},{"cell_type":"markdown","source":"- case_id\t:Mã định danh trường hợp\n- collater_typofvalofguarant_298M:\tLoại định giá tài sản thế chấp (hợp đồng đang hoạt động).\n- collater_typofvalofguarant_407M:\tLoại định giá tài sản thế chấp (hợp đồng đã đóng).\n- collater_valueofguarantee_1124L:\tGiá trị tài sản thế chấp cho hợp đồng đang hoạt động.\n- collater_valueofguarantee_876L:\tGiá trị tài sản thế chấp cho hợp đồng đã đóng.\n- collaterals_typeofguarante_359M:\tLoại tài sản thế chấp được sử dụng làm bảo đảm cho hợp đồng đã đóng.\n- collaterals_typeofguarante_669M:\tLoại tài sản thế chấp cho hợp đồng đang hoạt động.\n- num_group1\t\n- num_group2\t\n- pmts_dpd_1073P:\tSố ngày quá hạn của khoản thanh toán cho hợp đồng đang hoạt động (num_group1 - hợp đồng hiện tại, num_group2 - thanh toán).\n- pmts_dpd_303P:\tSố ngày quá hạn của khoản thanh toán cho hợp đồng đã chấm dứt theo cục tín dụng (num_group1 - hợp đồng đã chấm dứt, num_group2 - thanh toán).\n- pmts_month_158T:\tTháng thanh toán cho hợp đồng đã đóng (num_group1 - hợp đồng hiện tại, num_group2 - thanh toán).\n- pmts_month_706T:\tTháng thanh toán cho hợp đồng đang hoạt động (num_group1 - hợp đồng đã chấm dứt, num_group2 - thanh toán).\n- pmts_overdue_1140A:\tKhoản thanh toán quá hạn cho hợp đồng đang hoạt động (num_group1 - hợp đồng hiện tại, num_group2 - thanh toán).\n- pmts_overdue_1152A:\tKhoản thanh toán quá hạn cho hợp đồng đã đóng (num_group1 - hợp đồng đã chấm dứt, num_group2 - thanh toán).\n- pmts_year_1139T:\tNăm thanh toán cho hợp đồng đang hoạt động (num_group1 - hợp đồng hiện tại, num_group2 - thanh toán).\n- pmts_year_507T:\tNăm thanh toán cho hợp đồng tín dụng đã đóng (num_group1 - hợp đồng đã chấm dứt, num_group2 - thanh toán).\n- subjectroles_name_541M:\tTên vai trò chủ thể trong hợp đồng tín dụng đã đóng (num_group1 - hợp đồng đã chấm dứt, num_group2 - vai trò chủ thể).\n- subjectroles_name_838M:\tTên vai trò chủ thể trong hợp đồng tín dụng đang hoạt động (num_group1 - hợp đồng hiện tại, num_group2 - vai trò chủ thể).","metadata":{}},{"cell_type":"code","source":"# columns_to_check = [\n#     \"collater_typofvalofguarant_298M\",\n#     \"collater_typofvalofguarant_407M\",\n#     \"collaterals_typeofguarante_359M\",\n#     \"collaterals_typeofguarante_669M\",\n#     \"subjectroles_name_541M\",\n#     \"subjectroles_name_838M\"\n# ]\n# from pyspark.sql.functions import col\n\n# for column in columns_to_check:\n#     count = train_credit_bureau_a_2.select(col(column)).distinct().count()\n#     print(f\"Column '{column}' has {count} unique values.\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:14.917095Z","iopub.execute_input":"2025-06-13T07:48:14.917456Z","iopub.status.idle":"2025-06-13T07:48:14.942773Z","shell.execute_reply.started":"2025-06-13T07:48:14.917428Z","shell.execute_reply":"2025-06-13T07:48:14.941718Z"}},"outputs":[],"execution_count":32},{"cell_type":"code","source":"# from pyspark.sql.functions import lit\n\n# # 1. Danh sách cột\n# categorical_cols = [\n#     \"collater_typofvalofguarant_298M\",\n#     \"collater_typofvalofguarant_407M\",\n#     \"collaterals_typeofguarante_359M\",\n#     \"collaterals_typeofguarante_669M\",\n#     \"subjectroles_name_541M\",\n#     \"subjectroles_name_838M\"\n# ]\n\n# numerical_cols = [\n#     \"collater_valueofguarantee_1124L\",\n#     \"collater_valueofguarantee_876L\",\n#     \"pmts_dpd_1073P\",\n#     \"pmts_dpd_303P\",\n#     \"pmts_overdue_1140A\",\n#     \"pmts_overdue_1152A\"\n# ]\n\n# # 2. Fill NA\n# train_credit_bureau_a_2 = (\n#     train_credit_bureau_a_2\n#     .fillna({col: \"Unknown\" for col in categorical_cols})\n#     .fillna({col: 0 for col in numerical_cols})\n# )\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:14.94392Z","iopub.execute_input":"2025-06-13T07:48:14.944293Z","iopub.status.idle":"2025-06-13T07:48:14.973026Z","shell.execute_reply.started":"2025-06-13T07:48:14.944262Z","shell.execute_reply":"2025-06-13T07:48:14.971694Z"}},"outputs":[],"execution_count":33},{"cell_type":"code","source":"# from pyspark.sql import functions as F\n# from pyspark.sql.window import Window\n\n# # Cột phân loại (categorical)\n# categorical_cols = [\n#     \"collater_typofvalofguarant_298M\",\n#     \"collater_typofvalofguarant_407M\",\n#     \"collaterals_typeofguarante_359M\",\n#     \"collaterals_typeofguarante_669M\",\n#     \"subjectroles_name_541M\",\n#     \"subjectroles_name_838M\"\n# ]\n\n# # Cột số liệu (numerical)\n# numerical_cols = [\n#     \"collater_valueofguarantee_1124L\",\n#     \"collater_valueofguarantee_876L\",\n#     \"pmts_dpd_1073P\",\n#     \"pmts_dpd_303P\",\n#     \"pmts_overdue_1140A\",\n#     \"pmts_overdue_1152A\"\n# ]\n\n# # Grouping keys\n# group_cols = [\"case_id\", \"num_group1\"]\n\n# # ----- 1. Handle categorical columns: mode + nunique -----\n# cat_final_df = None  # Khởi tạo rỗng\n\n# for col_name in categorical_cols:\n#     # Window để chọn mode theo count giảm dần\n#     w = Window.partitionBy(*group_cols).orderBy(F.desc(\"count\"))\n\n#     # Tính mode\n#     count_df = (\n#         train_credit_bureau_a_2\n#         .groupBy(*group_cols, col_name)\n#         .count()\n#         .withColumn(\"rank\", F.row_number().over(w))\n#         .filter(\"rank = 1\")\n#         .withColumnRenamed(col_name, f\"{col_name}_mode\")\n#         .withColumnRenamed(\"count\", f\"{col_name}_count\")\n#         .drop(\"rank\")\n#     )\n\n#     # Tính số lượng giá trị duy nhất\n#     nunique_df = (\n#         train_credit_bureau_a_2\n#         .groupBy(*group_cols)\n#         .agg(F.countDistinct(col_name).alias(f\"{col_name}_nunique\"))\n#     )\n\n#     # Join vào cat_final_df\n#     if cat_final_df is None:\n#         cat_final_df = count_df.join(nunique_df, on=group_cols, how=\"outer\")\n#     else:\n#         cat_final_df = cat_final_df.join(count_df, on=group_cols, how=\"outer\")\n#         cat_final_df = cat_final_df.join(nunique_df, on=group_cols, how=\"outer\")\n\n# # ----- 2. Handle numerical columns: mean, sum, max -----\n# agg_exprs = []\n# for col_name in numerical_cols:\n#     agg_exprs.extend([\n#         F.mean(col_name).alias(f\"{col_name}_mean\"),\n#         F.sum(col_name).alias(f\"{col_name}_sum\"),\n#         F.max(col_name).alias(f\"{col_name}_max\")\n#     ])\n\n# num_agg_df = train_credit_bureau_a_2.groupBy(*group_cols).agg(*agg_exprs)\n\n# # ----- 3. Merge categorical and numerical summaries -----\n# final_df = cat_final_df.join(num_agg_df, on=group_cols, how=\"outer\")\n\n# # ----- 4. Ghi kết quả ra file CSV -----\n# final_df.coalesce(1).write.option(\"header\", \"true\").mode(\"overwrite\").csv(\"/kaggle/working/credit_bureau_a_2_fts.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:14.974297Z","iopub.execute_input":"2025-06-13T07:48:14.974687Z","iopub.status.idle":"2025-06-13T07:48:15.00466Z","shell.execute_reply.started":"2025-06-13T07:48:14.974651Z","shell.execute_reply":"2025-06-13T07:48:15.003191Z"}},"outputs":[],"execution_count":34},{"cell_type":"markdown","source":"#### Note: \nĐể tiện việc tính toán, đã thực hiện tính toán các feature từ depth2 - credit card bureau a 2 để join với depth 1","metadata":{}},{"cell_type":"markdown","source":"#### Credit Bureau b","metadata":{}},{"cell_type":"code","source":"train_credit_bureau_b_2,train_credit_bureau_b_2_dfs = dataloader('train_credit_bureau_b_2')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:15.005795Z","iopub.execute_input":"2025-06-13T07:48:15.00614Z","iopub.status.idle":"2025-06-13T07:48:15.650125Z","shell.execute_reply.started":"2025-06-13T07:48:15.006065Z","shell.execute_reply":"2025-06-13T07:48:15.649118Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_b_2.parquet → 1286755 rows\nTổng số dòng (đọc chung):      1286755\nTổng số dòng (đọc riêng lẻ):   1286755\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":35},{"cell_type":"code","source":"train_credit_bureau_b_2.filter(col('pmts_pmtsoverdue_635A')>0).limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:15.651578Z","iopub.execute_input":"2025-06-13T07:48:15.651942Z","iopub.status.idle":"2025-06-13T07:48:16.040653Z","shell.execute_reply.started":"2025-06-13T07:48:15.651911Z","shell.execute_reply":"2025-06-13T07:48:16.039738Z"}},"outputs":[{"execution_count":36,"output_type":"execute_result","data":{"text/plain":"   case_id  num_group1  num_group2 pmts_date_1107D  pmts_dpdvalue_108P  \\\n0     1445           0           2      2016-03-15            9517.000   \n1     1445           0          23      2017-12-15          200418.000   \n2     1445           0          24      2018-01-15           10262.000   \n3     1445           0          26      2018-03-15           10531.000   \n4     1445           4           1      2016-02-15           21968.000   \n\n   pmts_pmtsoverdue_635A  \n0                  0.400  \n1                  0.400  \n2                  1.400  \n3                  0.200  \n4                  1.600  ","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>num_group1</th>\n      <th>num_group2</th>\n      <th>pmts_date_1107D</th>\n      <th>pmts_dpdvalue_108P</th>\n      <th>pmts_pmtsoverdue_635A</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>1445</td>\n      <td>0</td>\n      <td>2</td>\n      <td>2016-03-15</td>\n      <td>9517.000</td>\n      <td>0.400</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1445</td>\n      <td>0</td>\n      <td>23</td>\n      <td>2017-12-15</td>\n      <td>200418.000</td>\n      <td>0.400</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>1445</td>\n      <td>0</td>\n      <td>24</td>\n      <td>2018-01-15</td>\n      <td>10262.000</td>\n      <td>1.400</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>1445</td>\n      <td>0</td>\n      <td>26</td>\n      <td>2018-03-15</td>\n      <td>10531.000</td>\n      <td>0.200</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1445</td>\n      <td>4</td>\n      <td>1</td>\n      <td>2016-02-15</td>\n      <td>21968.000</td>\n      <td>1.600</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":36},{"cell_type":"code","source":"train_credit_bureau_b_1,train_credit_bureau_b_1_dfs = dataloader('train_credit_bureau_b_1')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:16.041934Z","iopub.execute_input":"2025-06-13T07:48:16.042297Z","iopub.status.idle":"2025-06-13T07:48:16.862111Z","shell.execute_reply.started":"2025-06-13T07:48:16.042268Z","shell.execute_reply":"2025-06-13T07:48:16.855485Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_b_1.parquet → 85791 rows\nTổng số dòng (đọc chung):      85791\nTổng số dòng (đọc riêng lẻ):   85791\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":37},{"cell_type":"code","source":"train_credit_bureau_b_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:16.863312Z","iopub.execute_input":"2025-06-13T07:48:16.863699Z","iopub.status.idle":"2025-06-13T07:48:16.935759Z","shell.execute_reply.started":"2025-06-13T07:48:16.863663Z","shell.execute_reply":"2025-06-13T07:48:16.934706Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- amount_1115A: double (nullable = true)\n |-- classificationofcontr_1114M: string (nullable = true)\n |-- contractdate_551D: string (nullable = true)\n |-- contractmaturitydate_151D: string (nullable = true)\n |-- contractst_516M: string (nullable = true)\n |-- contracttype_653M: string (nullable = true)\n |-- credlmt_1052A: double (nullable = true)\n |-- credlmt_228A: double (nullable = true)\n |-- credlmt_3940954A: double (nullable = true)\n |-- credor_3940957M: string (nullable = true)\n |-- credquantity_1099L: double (nullable = true)\n |-- credquantity_984L: double (nullable = true)\n |-- debtpastduevalue_732A: double (nullable = true)\n |-- debtvalue_227A: double (nullable = true)\n |-- dpd_550P: double (nullable = true)\n |-- dpd_733P: double (nullable = true)\n |-- dpdmax_851P: double (nullable = true)\n |-- dpdmaxdatemonth_804T: double (nullable = true)\n |-- dpdmaxdateyear_742T: double (nullable = true)\n |-- installmentamount_644A: double (nullable = true)\n |-- installmentamount_833A: double (nullable = true)\n |-- instlamount_892A: double (nullable = true)\n |-- interesteffectiverate_369L: double (nullable = true)\n |-- interestrateyearly_538L: double (nullable = true)\n |-- lastupdate_260D: string (nullable = true)\n |-- maxdebtpduevalodued_3940955A: double (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- numberofinstls_810L: double (nullable = true)\n |-- overdueamountmax_950A: double (nullable = true)\n |-- overdueamountmaxdatemonth_494T: double (nullable = true)\n |-- overdueamountmaxdateyear_432T: double (nullable = true)\n |-- periodicityofpmts_997L: string (nullable = true)\n |-- periodicityofpmts_997M: string (nullable = true)\n |-- pmtdaysoverdue_1135P: double (nullable = true)\n |-- pmtmethod_731M: string (nullable = true)\n |-- pmtnumpending_403L: double (nullable = true)\n |-- purposeofcred_722M: string (nullable = true)\n |-- residualamount_1093A: double (nullable = true)\n |-- residualamount_127A: double (nullable = true)\n |-- residualamount_3940956A: double (nullable = true)\n |-- subjectrole_326M: string (nullable = true)\n |-- subjectrole_43M: string (nullable = true)\n |-- totalamount_503A: double (nullable = true)\n |-- totalamount_881A: double (nullable = true)\n\n","output_type":"stream"}],"execution_count":38},{"cell_type":"markdown","source":"#### Conclusion:\nTới đây có thể kết luận rằng, case_id là 1 hợp đồng đã được xét duyệt là đồng ý hay chưa. Depth 1 là chiều khi mà ta đứng ở case_id, nhìn về quá khứ, case_id này có hành vi application để duyệt như thế nào (lưu ở bảng train_applprev) và NẾU ĐƯỢC DUYỆT thì họ có 1 lịch sử hợp đồng được duyệt (lưu trong credit_bureau_a và credit_bureau_b)","metadata":{}},{"cell_type":"markdown","source":"### Debitcard_1","metadata":{}},{"cell_type":"code","source":"train_debitcard_1,train_debitcard_1_dfs = dataloader('train_debitcard_1')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:16.936495Z","iopub.execute_input":"2025-06-13T07:48:16.936815Z","iopub.status.idle":"2025-06-13T07:48:17.705976Z","shell.execute_reply.started":"2025-06-13T07:48:16.936786Z","shell.execute_reply":"2025-06-13T07:48:17.704878Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_debitcard_1.parquet → 157302 rows\nTổng số dòng (đọc chung):      157302\nTổng số dòng (đọc riêng lẻ):   157302\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":39},{"cell_type":"code","source":"train_debitcard_1.select('case_id').distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:17.709007Z","iopub.execute_input":"2025-06-13T07:48:17.709348Z","iopub.status.idle":"2025-06-13T07:48:18.219073Z","shell.execute_reply.started":"2025-06-13T07:48:17.709323Z","shell.execute_reply":"2025-06-13T07:48:18.218043Z"}},"outputs":[{"execution_count":40,"output_type":"execute_result","data":{"text/plain":"111772"},"metadata":{}}],"execution_count":40},{"cell_type":"code","source":"train_debitcard_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:18.220055Z","iopub.execute_input":"2025-06-13T07:48:18.220395Z","iopub.status.idle":"2025-06-13T07:48:18.367897Z","shell.execute_reply.started":"2025-06-13T07:48:18.22037Z","shell.execute_reply":"2025-06-13T07:48:18.366782Z"}},"outputs":[{"execution_count":41,"output_type":"execute_result","data":{"text/plain":"   case_id  last180dayaveragebalance_704A  last180dayturnover_1134A  \\\n0      225                            NaN                       NaN   \n1      331                            NaN                       NaN   \n2      358                            NaN                       NaN   \n3      390                            NaN                       NaN   \n4      390                            NaN                       NaN   \n\n   last30dayturnover_651A  num_group1 openingdate_857D  \n0                     NaN           0       2016-08-16  \n1                     NaN           0       2015-03-19  \n2                     NaN           0       2014-09-02  \n3                     NaN           0       2014-07-23  \n4                     NaN           1       2015-10-01  ","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>last180dayaveragebalance_704A</th>\n      <th>last180dayturnover_1134A</th>\n      <th>last30dayturnover_651A</th>\n      <th>num_group1</th>\n      <th>openingdate_857D</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>225</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2016-08-16</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>331</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2015-03-19</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>358</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2014-09-02</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>390</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>2014-07-23</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>390</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>2015-10-01</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":41},{"cell_type":"markdown","source":"#### Conclusion:\nĐây là bảng thông tin sử dụng debit card của từng customer ứng với từng case","metadata":{}},{"cell_type":"markdown","source":"### Deposit ","metadata":{}},{"cell_type":"code","source":"train_deposit_1,train_deposit_1_dfs = dataloader('train_deposit_1')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:18.369028Z","iopub.execute_input":"2025-06-13T07:48:18.369346Z","iopub.status.idle":"2025-06-13T07:48:18.845733Z","shell.execute_reply.started":"2025-06-13T07:48:18.36932Z","shell.execute_reply":"2025-06-13T07:48:18.844853Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_deposit_1.parquet → 145086 rows\nTổng số dòng (đọc chung):      145086\nTổng số dòng (đọc riêng lẻ):   145086\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":42},{"cell_type":"code","source":"train_deposit_1.select('case_id').distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:18.846488Z","iopub.execute_input":"2025-06-13T07:48:18.846808Z","iopub.status.idle":"2025-06-13T07:48:19.388545Z","shell.execute_reply.started":"2025-06-13T07:48:18.846783Z","shell.execute_reply":"2025-06-13T07:48:19.387658Z"}},"outputs":[{"execution_count":43,"output_type":"execute_result","data":{"text/plain":"105111"},"metadata":{}}],"execution_count":43},{"cell_type":"code","source":"train_deposit_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:19.389738Z","iopub.execute_input":"2025-06-13T07:48:19.392922Z","iopub.status.idle":"2025-06-13T07:48:19.613828Z","shell.execute_reply.started":"2025-06-13T07:48:19.392875Z","shell.execute_reply":"2025-06-13T07:48:19.613117Z"}},"outputs":[{"execution_count":44,"output_type":"execute_result","data":{"text/plain":"   case_id  amount_416A contractenddate_991D  num_group1 openingdate_313D\n0      225        0.000                 None           0       2016-08-16\n1      331      260.374           2018-03-18           0       2015-03-19\n2      358        0.000                 None           0       2014-09-02\n3      390      203.602           2017-09-30           1       2015-10-01\n4      390      223.680                 None           2       2016-06-08","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>amount_416A</th>\n      <th>contractenddate_991D</th>\n      <th>num_group1</th>\n      <th>openingdate_313D</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>225</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0</td>\n      <td>2016-08-16</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>331</td>\n      <td>260.374</td>\n      <td>2018-03-18</td>\n      <td>0</td>\n      <td>2015-03-19</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>358</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>0</td>\n      <td>2014-09-02</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>390</td>\n      <td>203.602</td>\n      <td>2017-09-30</td>\n      <td>1</td>\n      <td>2015-10-01</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>390</td>\n      <td>223.680</td>\n      <td>None</td>\n      <td>2</td>\n      <td>2016-06-08</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":44},{"cell_type":"markdown","source":"#### Conclusion:\nCó tổng cộng 105111 case có 145086 hợp đồng deposit\n\nHợp đồng deposit là gì?\nĐây là hợp đồng tiết kiệm.\n- Khách hàng cam kết gửi một khoản tiền (gốc) vào ngân hàng trong một khoảng thời gian định trước (kỳ hạn), với lãi suất đã thỏa thuận.\n- Ngân hàng cam kết giữ khoản tiền đó an toàn, trả lãi theo kỳ hạn (hàng tháng, hàng quý, hay khi đáo hạn), và hoàn trả cả gốc lẫn lãi vào cuối kỳ.\n- Có 2 loại, là theo kỳ và không kỳ hạn, thường theo kỳ thì lãi sẽ cao hơn.\nCác thông tin được tìm hiểu như sau:\n- amount_416A là khoản tiền gửi\n- contractenddate_991D là ngày end, với đơn đáo hạn thì sẽ có, đơn vô thời hạn thì sẽ không có\n- openingdate_313D: ngày mở tài khoản","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Other 1","metadata":{}},{"cell_type":"code","source":"train_other_1,train_other_1_dfs = dataloader('train_other_1')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:19.614589Z","iopub.execute_input":"2025-06-13T07:48:19.614903Z","iopub.status.idle":"2025-06-13T07:48:20.072305Z","shell.execute_reply.started":"2025-06-13T07:48:19.614882Z","shell.execute_reply":"2025-06-13T07:48:20.071032Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_other_1.parquet → 51109 rows\nTổng số dòng (đọc chung):      51109\nTổng số dòng (đọc riêng lẻ):   51109\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":45},{"cell_type":"code","source":"train_other_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:20.073829Z","iopub.execute_input":"2025-06-13T07:48:20.074157Z","iopub.status.idle":"2025-06-13T07:48:20.244224Z","shell.execute_reply.started":"2025-06-13T07:48:20.074125Z","shell.execute_reply":"2025-06-13T07:48:20.242015Z"}},"outputs":[{"execution_count":46,"output_type":"execute_result","data":{"text/plain":"   case_id  amtdebitincoming_4809443A  amtdebitoutgoing_4809440A  \\\n0    43801                  12466.601                  12291.200   \n1    43991                   3333.400                   3273.400   \n2    44001                  10000.000                  10000.000   \n3    44053                      0.000                      0.000   \n4    44130                     63.800                     60.800   \n\n   amtdepositbalance_4809441A  amtdepositincoming_4809444A  \\\n0                     914.200                        0.000   \n1                       0.000                        0.000   \n2                       0.000                        0.000   \n3                    2586.400                        0.000   \n4                       0.000                        0.000   \n\n   amtdepositoutgoing_4809442A  num_group1  \n0                      304.800           0  \n1                        0.000           0  \n2                        0.000           0  \n3                       88.800           0  \n4                        0.000           0  ","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>amtdebitincoming_4809443A</th>\n      <th>amtdebitoutgoing_4809440A</th>\n      <th>amtdepositbalance_4809441A</th>\n      <th>amtdepositincoming_4809444A</th>\n      <th>amtdepositoutgoing_4809442A</th>\n      <th>num_group1</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>43801</td>\n      <td>12466.601</td>\n      <td>12291.200</td>\n      <td>914.200</td>\n      <td>0.000</td>\n      <td>304.800</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>43991</td>\n      <td>3333.400</td>\n      <td>3273.400</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>44001</td>\n      <td>10000.000</td>\n      <td>10000.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>44053</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>2586.400</td>\n      <td>0.000</td>\n      <td>88.800</td>\n      <td>0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>44130</td>\n      <td>63.800</td>\n      <td>60.800</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":46},{"cell_type":"code","source":"train_other_1.select('case_id').distinct().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:20.24521Z","iopub.execute_input":"2025-06-13T07:48:20.245559Z","iopub.status.idle":"2025-06-13T07:48:20.566022Z","shell.execute_reply.started":"2025-06-13T07:48:20.245527Z","shell.execute_reply":"2025-06-13T07:48:20.564556Z"}},"outputs":[{"execution_count":47,"output_type":"execute_result","data":{"text/plain":"51109"},"metadata":{}}],"execution_count":47},{"cell_type":"code","source":"train_other_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:20.567992Z","iopub.execute_input":"2025-06-13T07:48:20.568527Z","iopub.status.idle":"2025-06-13T07:48:20.601911Z","shell.execute_reply.started":"2025-06-13T07:48:20.568491Z","shell.execute_reply":"2025-06-13T07:48:20.600067Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- amtdebitincoming_4809443A: double (nullable = true)\n |-- amtdebitoutgoing_4809440A: double (nullable = true)\n |-- amtdepositbalance_4809441A: double (nullable = true)\n |-- amtdepositincoming_4809444A: double (nullable = true)\n |-- amtdepositoutgoing_4809442A: double (nullable = true)\n |-- num_group1: long (nullable = true)\n\n","output_type":"stream"}],"execution_count":48},{"cell_type":"markdown","source":"### Conclusion:\nĐây là theo case, các chỉ số tổng hợp theo chiều case, gồm:\n- Tổng tiền gửi vào thẻ debit\n- Tổng tiền rút từ thẻ debit\n- Tổng tiền được gửi tiết kiệm\n- Tổng tiền được rút từ tài khoản tiết kiệm\n- Số dư hiện tại của tài khoản tiết kiệm","metadata":{}},{"cell_type":"markdown","source":"### Person","metadata":{}},{"cell_type":"code","source":"train_person_1,train_person_1_dfs = dataloader('train_person_1')\ntrain_person_2,train_person_2_dfs = dataloader('train_person_2')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:20.604111Z","iopub.execute_input":"2025-06-13T07:48:20.604686Z","iopub.status.idle":"2025-06-13T07:48:21.588988Z","shell.execute_reply.started":"2025-06-13T07:48:20.604627Z","shell.execute_reply":"2025-06-13T07:48:21.587882Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_1.parquet → 2973991 rows\nTổng số dòng (đọc chung):      2973991\nTổng số dòng (đọc riêng lẻ):   2973991\n✅ Số dòng khớp nhau\nFile 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_2.parquet → 1643410 rows\nTổng số dòng (đọc chung):      1643410\nTổng số dòng (đọc riêng lẻ):   1643410\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":49},{"cell_type":"code","source":"train_person_2.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:21.590126Z","iopub.execute_input":"2025-06-13T07:48:21.590498Z","iopub.status.idle":"2025-06-13T07:48:21.784694Z","shell.execute_reply.started":"2025-06-13T07:48:21.590468Z","shell.execute_reply":"2025-06-13T07:48:21.783577Z"}},"outputs":[{"execution_count":50,"output_type":"execute_result","data":{"text/plain":"   case_id addres_district_368M addres_role_871L addres_zip_823M  \\\n0        5             a55475b1             None        a55475b1   \n1        6           P55_110_32          CONTACT       P10_68_40   \n2        6           P55_110_32        PERMANENT       P10_68_40   \n3        6          P204_92_178          CONTACT     P65_136_169   \n4        6          P191_109_75          CONTACT       P10_68_40   \n\n  conts_role_79M empls_economicalst_849M empls_employedfrom_796D  \\\n0       a55475b1                a55475b1                    None   \n1     P38_92_157             P164_110_33                    None   \n2       a55475b1                a55475b1                    None   \n3     P38_92_157             P164_110_33                    None   \n4     P7_147_157                a55475b1                    None   \n\n  empls_employer_name_740M  num_group1  num_group2 relatedpersons_role_762T  \n0                 a55475b1           0           0                     None  \n1                 a55475b1           0           0                     None  \n2                 a55475b1           0           1                     None  \n3                 a55475b1           1           0           OTHER_RELATIVE  \n4                 a55475b1           1           1           OTHER_RELATIVE  ","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>addres_district_368M</th>\n      <th>addres_role_871L</th>\n      <th>addres_zip_823M</th>\n      <th>conts_role_79M</th>\n      <th>empls_economicalst_849M</th>\n      <th>empls_employedfrom_796D</th>\n      <th>empls_employer_name_740M</th>\n      <th>num_group1</th>\n      <th>num_group2</th>\n      <th>relatedpersons_role_762T</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>5</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>6</td>\n      <td>P55_110_32</td>\n      <td>CONTACT</td>\n      <td>P10_68_40</td>\n      <td>P38_92_157</td>\n      <td>P164_110_33</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0</td>\n      <td>0</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>6</td>\n      <td>P55_110_32</td>\n      <td>PERMANENT</td>\n      <td>P10_68_40</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>0</td>\n      <td>1</td>\n      <td>None</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>6</td>\n      <td>P204_92_178</td>\n      <td>CONTACT</td>\n      <td>P65_136_169</td>\n      <td>P38_92_157</td>\n      <td>P164_110_33</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>0</td>\n      <td>OTHER_RELATIVE</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>6</td>\n      <td>P191_109_75</td>\n      <td>CONTACT</td>\n      <td>P10_68_40</td>\n      <td>P7_147_157</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>1</td>\n      <td>1</td>\n      <td>OTHER_RELATIVE</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":50},{"cell_type":"code","source":"train_person_2.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:21.785756Z","iopub.execute_input":"2025-06-13T07:48:21.786088Z","iopub.status.idle":"2025-06-13T07:48:21.815457Z","shell.execute_reply.started":"2025-06-13T07:48:21.786061Z","shell.execute_reply":"2025-06-13T07:48:21.814028Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- addres_district_368M: string (nullable = true)\n |-- addres_role_871L: string (nullable = true)\n |-- addres_zip_823M: string (nullable = true)\n |-- conts_role_79M: string (nullable = true)\n |-- empls_economicalst_849M: string (nullable = true)\n |-- empls_employedfrom_796D: string (nullable = true)\n |-- empls_employer_name_740M: string (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- num_group2: long (nullable = true)\n |-- relatedpersons_role_762T: string (nullable = true)\n\n","output_type":"stream"}],"execution_count":51},{"cell_type":"code","source":"train_person_1.limit(5).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:21.816887Z","iopub.execute_input":"2025-06-13T07:48:21.817244Z","iopub.status.idle":"2025-06-13T07:48:22.29448Z","shell.execute_reply.started":"2025-06-13T07:48:21.817215Z","shell.execute_reply":"2025-06-13T07:48:22.293222Z"}},"outputs":[{"execution_count":52,"output_type":"execute_result","data":{"text/plain":"   case_id  birth_259D birthdate_87D  childnum_185L contaddr_district_15M  \\\n0        0  1986-07-01          None            NaN             P88_18_84   \n1        0        None          None            NaN              a55475b1   \n2        0        None          None            NaN              a55475b1   \n3        0        None          None            NaN              a55475b1   \n4        1  1957-08-01          None            NaN            P103_93_94   \n\n  contaddr_matchlist_1032L contaddr_smempladdr_334L contaddr_zipcode_807M  \\\n0                    False                    False          P167_100_165   \n1                     None                     None              a55475b1   \n2                     None                     None              a55475b1   \n3                     None                     None              a55475b1   \n4                    False                    False           P176_37_166   \n\n  education_927M empl_employedfrom_271D empl_employedtotal_800L  \\\n0     P97_36_170             2017-09-15               MORE_FIVE   \n1       a55475b1                   None                    None   \n2       a55475b1                   None                    None   \n3       a55475b1                   None                    None   \n4     P97_36_170             2008-10-29               MORE_FIVE   \n\n  empl_industry_691L empladdr_district_926M empladdr_zipcode_114M  \\\n0              OTHER            P142_57_166          P167_100_165   \n1               None               a55475b1              a55475b1   \n2               None               a55475b1              a55475b1   \n3               None               a55475b1              a55475b1   \n4              OTHER             P49_46_174           P160_59_140   \n\n  familystate_447L gender_992L housetype_905L housingtype_772L  \\\n0          MARRIED        None           None             None   \n1             None        None           None             None   \n2             None        None           None             None   \n3             None        None           None             None   \n4         DIVORCED        None           None             None   \n\n  incometype_1044T isreference_387L language1_981M  mainoccupationinc_384A  \\\n0    SALARIED_GOVT             None     P10_39_147               10800.000   \n1             None             None       a55475b1                     NaN   \n2             None             None       a55475b1                     NaN   \n3             None             None       a55475b1                     NaN   \n4    SALARIED_GOVT             None     P10_39_147               10000.000   \n\n  maritalst_703L  num_group1  personindex_1023L  persontype_1072L  \\\n0           None           0              0.000             1.000   \n1           None           1              1.000             1.000   \n2           None           2              2.000             4.000   \n3           None           3                NaN             5.000   \n4           None           0              0.000             1.000   \n\n   persontype_792L registaddr_district_1083M registaddr_zipcode_184M  \\\n0            1.000                 P88_18_84            P167_100_165   \n1            4.000                  a55475b1                a55475b1   \n2            5.000                  a55475b1                a55475b1   \n3              NaN                  a55475b1                a55475b1   \n4            1.000                P103_93_94             P176_37_166   \n\n  relationshiptoclient_415T relationshiptoclient_642T remitter_829L  \\\n0                      None                      None          None   \n1                    SPOUSE                      None         False   \n2                 COLLEAGUE                    SPOUSE         False   \n3                      None                 COLLEAGUE          None   \n4                      None                      None          None   \n\n  role_1084L role_993L safeguarantyflag_411L sex_738L        type_25L  \n0         CL      None                  True        F  PRIMARY_MOBILE  \n1         EM      None                  None     None           PHONE  \n2         PE      None                  None     None           PHONE  \n3         PE      None                  None     None           PHONE  \n4         CL      None                  True        M  PRIMARY_MOBILE  ","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>birth_259D</th>\n      <th>birthdate_87D</th>\n      <th>childnum_185L</th>\n      <th>contaddr_district_15M</th>\n      <th>contaddr_matchlist_1032L</th>\n      <th>contaddr_smempladdr_334L</th>\n      <th>contaddr_zipcode_807M</th>\n      <th>education_927M</th>\n      <th>empl_employedfrom_271D</th>\n      <th>empl_employedtotal_800L</th>\n      <th>empl_industry_691L</th>\n      <th>empladdr_district_926M</th>\n      <th>empladdr_zipcode_114M</th>\n      <th>familystate_447L</th>\n      <th>gender_992L</th>\n      <th>housetype_905L</th>\n      <th>housingtype_772L</th>\n      <th>incometype_1044T</th>\n      <th>isreference_387L</th>\n      <th>language1_981M</th>\n      <th>mainoccupationinc_384A</th>\n      <th>maritalst_703L</th>\n      <th>num_group1</th>\n      <th>personindex_1023L</th>\n      <th>persontype_1072L</th>\n      <th>persontype_792L</th>\n      <th>registaddr_district_1083M</th>\n      <th>registaddr_zipcode_184M</th>\n      <th>relationshiptoclient_415T</th>\n      <th>relationshiptoclient_642T</th>\n      <th>remitter_829L</th>\n      <th>role_1084L</th>\n      <th>role_993L</th>\n      <th>safeguarantyflag_411L</th>\n      <th>sex_738L</th>\n      <th>type_25L</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0</td>\n      <td>1986-07-01</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P88_18_84</td>\n      <td>False</td>\n      <td>False</td>\n      <td>P167_100_165</td>\n      <td>P97_36_170</td>\n      <td>2017-09-15</td>\n      <td>MORE_FIVE</td>\n      <td>OTHER</td>\n      <td>P142_57_166</td>\n      <td>P167_100_165</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>SALARIED_GOVT</td>\n      <td>None</td>\n      <td>P10_39_147</td>\n      <td>10800.000</td>\n      <td>None</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>1.000</td>\n      <td>P88_18_84</td>\n      <td>P167_100_165</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>CL</td>\n      <td>None</td>\n      <td>True</td>\n      <td>F</td>\n      <td>PRIMARY_MOBILE</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>1</td>\n      <td>1.000</td>\n      <td>1.000</td>\n      <td>4.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>SPOUSE</td>\n      <td>None</td>\n      <td>False</td>\n      <td>EM</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>PHONE</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>2</td>\n      <td>2.000</td>\n      <td>4.000</td>\n      <td>5.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>COLLEAGUE</td>\n      <td>SPOUSE</td>\n      <td>False</td>\n      <td>PE</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>PHONE</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>3</td>\n      <td>NaN</td>\n      <td>5.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>COLLEAGUE</td>\n      <td>None</td>\n      <td>PE</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>PHONE</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>1</td>\n      <td>1957-08-01</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P103_93_94</td>\n      <td>False</td>\n      <td>False</td>\n      <td>P176_37_166</td>\n      <td>P97_36_170</td>\n      <td>2008-10-29</td>\n      <td>MORE_FIVE</td>\n      <td>OTHER</td>\n      <td>P49_46_174</td>\n      <td>P160_59_140</td>\n      <td>DIVORCED</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>SALARIED_GOVT</td>\n      <td>None</td>\n      <td>P10_39_147</td>\n      <td>10000.000</td>\n      <td>None</td>\n      <td>0</td>\n      <td>0.000</td>\n      <td>1.000</td>\n      <td>1.000</td>\n      <td>P103_93_94</td>\n      <td>P176_37_166</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>CL</td>\n      <td>None</td>\n      <td>True</td>\n      <td>M</td>\n      <td>PRIMARY_MOBILE</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":52},{"cell_type":"code","source":"train_person_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:22.296135Z","iopub.execute_input":"2025-06-13T07:48:22.296575Z","iopub.status.idle":"2025-06-13T07:48:22.325869Z","shell.execute_reply.started":"2025-06-13T07:48:22.296543Z","shell.execute_reply":"2025-06-13T07:48:22.32469Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- birth_259D: string (nullable = true)\n |-- birthdate_87D: string (nullable = true)\n |-- childnum_185L: double (nullable = true)\n |-- contaddr_district_15M: string (nullable = true)\n |-- contaddr_matchlist_1032L: boolean (nullable = true)\n |-- contaddr_smempladdr_334L: boolean (nullable = true)\n |-- contaddr_zipcode_807M: string (nullable = true)\n |-- education_927M: string (nullable = true)\n |-- empl_employedfrom_271D: string (nullable = true)\n |-- empl_employedtotal_800L: string (nullable = true)\n |-- empl_industry_691L: string (nullable = true)\n |-- empladdr_district_926M: string (nullable = true)\n |-- empladdr_zipcode_114M: string (nullable = true)\n |-- familystate_447L: string (nullable = true)\n |-- gender_992L: string (nullable = true)\n |-- housetype_905L: string (nullable = true)\n |-- housingtype_772L: string (nullable = true)\n |-- incometype_1044T: string (nullable = true)\n |-- isreference_387L: boolean (nullable = true)\n |-- language1_981M: string (nullable = true)\n |-- mainoccupationinc_384A: double (nullable = true)\n |-- maritalst_703L: string (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- personindex_1023L: double (nullable = true)\n |-- persontype_1072L: double (nullable = true)\n |-- persontype_792L: double (nullable = true)\n |-- registaddr_district_1083M: string (nullable = true)\n |-- registaddr_zipcode_184M: string (nullable = true)\n |-- relationshiptoclient_415T: string (nullable = true)\n |-- relationshiptoclient_642T: string (nullable = true)\n |-- remitter_829L: boolean (nullable = true)\n |-- role_1084L: string (nullable = true)\n |-- role_993L: string (nullable = true)\n |-- safeguarantyflag_411L: boolean (nullable = true)\n |-- sex_738L: string (nullable = true)\n |-- type_25L: string (nullable = true)\n\n","output_type":"stream"}],"execution_count":53},{"cell_type":"markdown","source":"### Conclusion:\nPerson 1 tập hợp những người liên quan đến đơn application hiện tại.\nPerson 2 là những thông tin liên quan đến 1 người trong tập hợp các người tại application hiện tại","metadata":{}},{"cell_type":"markdown","source":"### Tax_registry_a_1\n","metadata":{}},{"cell_type":"code","source":"train_tax_registry_a_1,train_tax_registry_a_1_dfs = dataloader('train_tax_registry_a_1')\ntrain_tax_registry_b_1,train_tax_registry_b_1_dfs = dataloader('train_tax_registry_b_1')\ntrain_tax_registry_c_1,train_tax_registry_c_1_dfs = dataloader('train_tax_registry_c_1')\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:22.326814Z","iopub.execute_input":"2025-06-13T07:48:22.327164Z","iopub.status.idle":"2025-06-13T07:48:23.802714Z","shell.execute_reply.started":"2025-06-13T07:48:22.327134Z","shell.execute_reply":"2025-06-13T07:48:23.801388Z"}},"outputs":[{"name":"stdout","text":"File 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_a_1.parquet → 3275770 rows\nTổng số dòng (đọc chung):      3275770\nTổng số dòng (đọc riêng lẻ):   3275770\n✅ Số dòng khớp nhau\nFile 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_b_1.parquet → 1107933 rows\nTổng số dòng (đọc chung):      1107933\nTổng số dòng (đọc riêng lẻ):   1107933\n✅ Số dòng khớp nhau\nFile 0: /kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_c_1.parquet → 3343800 rows\nTổng số dòng (đọc chung):      3343800\nTổng số dòng (đọc riêng lẻ):   3343800\n✅ Số dòng khớp nhau\n","output_type":"stream"}],"execution_count":54},{"cell_type":"code","source":"train_tax_registry_a_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:23.80394Z","iopub.execute_input":"2025-06-13T07:48:23.804419Z","iopub.status.idle":"2025-06-13T07:48:23.835885Z","shell.execute_reply.started":"2025-06-13T07:48:23.804245Z","shell.execute_reply":"2025-06-13T07:48:23.834232Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- amount_4527230A: double (nullable = true)\n |-- name_4527232M: string (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- recorddate_4527225D: string (nullable = true)\n\n","output_type":"stream"}],"execution_count":55},{"cell_type":"code","source":"train_tax_registry_b_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:23.837561Z","iopub.execute_input":"2025-06-13T07:48:23.838619Z","iopub.status.idle":"2025-06-13T07:48:23.869145Z","shell.execute_reply.started":"2025-06-13T07:48:23.838587Z","shell.execute_reply":"2025-06-13T07:48:23.867821Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- amount_4917619A: double (nullable = true)\n |-- deductiondate_4917603D: string (nullable = true)\n |-- name_4917606M: string (nullable = true)\n |-- num_group1: long (nullable = true)\n\n","output_type":"stream"}],"execution_count":56},{"cell_type":"code","source":"train_tax_registry_c_1.printSchema()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:48:23.870526Z","iopub.execute_input":"2025-06-13T07:48:23.870899Z","iopub.status.idle":"2025-06-13T07:48:23.898206Z","shell.execute_reply.started":"2025-06-13T07:48:23.87087Z","shell.execute_reply":"2025-06-13T07:48:23.897214Z"}},"outputs":[{"name":"stdout","text":"root\n |-- case_id: long (nullable = true)\n |-- employername_160M: string (nullable = true)\n |-- num_group1: long (nullable = true)\n |-- pmtamount_36A: double (nullable = true)\n |-- processingdate_168D: string (nullable = true)\n\n","output_type":"stream"}],"execution_count":57},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Feature Engineering ","metadata":{},"attachments":{"30d9c8ca-132a-4b1c-a899-f5012267d294.jpeg":{"image/jpeg":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAUFBQUFBQUGBgUICAcICAsKCQkKCxEMDQwNDBEaEBMQEBMQGhcbFhUWGxcpIBwcICkvJyUnLzkzMzlHREddXX0BBQUFBQUFBQYGBQgIBwgICwoJCQoLEQwNDA0MERoQExAQExAaFxsWFRYbFykgHBwgKS8nJScvOTMzOUdER11dff/CABEIA/MIsQMBIgACEQEDEQH/xAAxAAEBAQEBAQEBAAAAAAAAAAAABAMFAgEGBwEBAQEBAQAAAAAAAAAAAAAAAAECAwT/2gAMAwEAAhADEAAAAv1VE1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTNSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATUzUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1M1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABNTNSAAAAAAAAAAAAAAQX8iM/R+fznw/SevzP6YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpmpAAAAAAAAAAAAAAMdPQlpz1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJqZqQAAAAAAAAAAAAAACb34zzvdOm6E4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4oTihOKE4rZrj8b+4ks1gAAAAAAAAAAAAAACbPTPPT4M9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANxrnuNcwAAAAAAAAAAAAAAJs9M89Pgz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Gue41zAAAAAAAAAAAAAAAmz0zz0+DPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADca57jXMAAAAAAAAAAAAAACbPTPPT4M9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANxrnuNcwAAAAAAAAAAAAAAJs9M89Pgz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Gue41zAAAAAAAAAAAAAAAmz0zz0+DPQw82UphSmFKYUphSmFKYUphSmFKehQgAAAAAAYVumJSmFKYUphSmFKYUphSmFKb6UCUAAAAAeT0l+2UphSmFKYUphSmFKYUphSmFLPSUAAAAAAAAmWUphSmFKYUphSmFKYUphSmFLHZQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADca57jXMAAAAAAAAAAAAAACbPTPPT5hvnNdD0b4gAAAAAAAOT1ufNehjsAAAAABh0+f0t8QuQAAAAAAAOTR59Y7BNAAAAM9Ndc6RrmAAAAAAABB86HGz0rGegAAAAADDdcXDfIAAAAAAADLn9XlZ3uM9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANxrnuNcwAAAAAAAAAAAAAAJs9M89Pmemc10jn749By/p03jAqccdhyrClFidNytToPHPOmRFvP6HPl9DHcAAAAADPpc3pb4nPzueo5nQPaWE7Dj+zqpsy1zPJ1XPtPaC8IrTn+vPrHUJsAAABrlrrnSNcxGWOUOqzjOg52B2HOwOw5/QCOwAcbs8bO6xnqAAAAAAGsXDXIDn7eMT10YfZ58Yi3H3MX/csi30ADldXlTW4x2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Gue41zAAAAAAAAAAAAAAAmz0zz0+Z6ZzXSw3b4x+84Do/Ypzq+fHOOokzL/uOJX8h1KvMdJvpPcOf0OfL6GO4AAAAAGfS5vS3xwysiudPPO1LXK6B7cukrQVG3yTMu+y5lmmHso2Dn+vPrHUJsAAABrlrrnSZ656Z8v0VfY8Tp5z5FKbomG/K2Oj4i+nT05O5ex2HG7PGzusZ6gAAAAABrE3jptcpZuj6M+V38jn+el6OXl1vhy97Nibmd+Ygm7Pkh0t0J5ejzprcY7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbjXPca5gAAAAAAAAAAAAAATZ6Z56fM9M5rpDfHD5QIdqBP5qE/vUAYthN8qGWoOf0OfL6GO4AAAAAGfS5vS3xYbrmfG4TqBL6oGWoMdhj4pEuuoA5/rz6x1CbAAAAa5a650jXPxHeI9KBJrsJqQY7DHzQJvewAcbs8bO6xnqAAAAAAGsXDXIACDz0cTi7dn4cTTr+iakAAHK6vKmtxjsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABuNc9xrmAAAAAAAAAAAAAABNnpnnp8y1ym+m5+uuFaQVpBWkFaTyWpBWkFaQVpBXzveM3sM9QAAAAAMunzPeuXQSLitIK0grSCtF6K0grSCtIK0ng8e8ds9gmgAAAGmeGsdVH9vKtIK0grSCtJ5LUgrSCtIK0nws5P3edQzsAAAAAB8+4XPVRetca0grSCtIK0nktSCtIK0grSCvk6fZ09jPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADca57jXMAAAAAAAAAAAAAACbPTPPT4M9AAAAElcllYlAAAAAAAAAAAAAAAAkrkrsCUAAAAAAAAAAAAABJXJZWJQAAAAAAAAAAAAAAAElclViAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANxrnuNcwAAAAAAAAAAAAAAJs9M89Pgz0AAAASVyWViUAAAAAAAAAAAAAAACSuSuwJQAAAAAAAAAAAAAElcllYlAAAAAAAAAAAAAAAASVyVWIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3Gue41zAAAAAAAAAAAAAAAmz01zqVUzuVUJVQlVCVUJZOrGelQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVDlV+bCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCWTqxnpUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlk6sZ6VCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVCVUJVQlVDw1az6GsAAAAAAAAAAAAAAATa5a878PPLfjXhSan6h+cH6Px+b9H6VwO/COyMsEoAAAAAAAAAADL3xLO6/L61+jfnMz9J7/NbHfGbHZHZYEoAAAAAAAAADOfm2d5+b+1+jfmR+j9/mOodOOyOLBKAAAAAAAAAAAAy98Szuvy+tfo35zM/Se/zWx347I4sEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsdM+h1yAAAAAAAAAAAAAABNrlrzvwctp6B49hlqACOyOywSgAAAAAAAAAAAT6+wy1AAEdkdlgSgAAAAAAAAAPHsT0B4++gAjsjssEoAAAAAAAAAAAAE+vsMtQAjsjssEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHsdM+h1yAAAAAAAAAAAAAABNrlrzvwctgAAAI7I7LBKAAAAAAAAAAAAAAABHZHZYEoAAAAAAAAAAAAACOyOywSgAAAAAAAAAAAAAAAI7I7LBKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB7HTPodcgAAAAAAAAAAAAAATa5a878HLYAAACOyOywSgAAAAAAAAAAAAAAAR2R2WBKAAAAAAAAAAAAAAjsjssEoAAAAAAAAAAAAAAACOyOywSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAex0z6HXIAAAAAAAAAAAAAAE2uWvO/DPlvRN73nZiNmI2YjX8D+5z1NtMWbsxGzEbMRsn9S7DNAAAAAAM8tSlis2YjZiNvmQ/Dfu8dNTZizdmI2YjZj5KGO2NAAAAACWyph91NmI2YjZiOTH+h8alTFm7MRsxGzEbJK80JQAAAAABhZuw+6mzEbMRsxGf4/wDaZ6lTFm7MRsxGzEbJKs36JSPbedmI2YjZiNmI2YjZiNmI2YjZh8loGaYNTdis2YjZiNmI2YjZiNmI2YjZjkVvn3GhHZYxamzEbMRsxGzEbMRsxGzEbMfhunozRgbsPupsxGzEbMRsxGzEbMRsxGzEbJKs36JSPbedmI2YjZiNmI2YjZiNmI2YjZh8loGaAB7HTPodcgAAAAAAAAAAAAAATa5a878lqnxq0d8AAAAAAAAIbo8txw6AAAAAAS3xW9sBuAAAAAAAAQ04b8dBjQAAADLXPpmkdcjnHRcAd9PzjsuHMfpXDzP0Dj9gIbgDzLZzudsHLYAAAAADDfHeax2yAAAAAAAA5/QgxapK5OWugPRgAAAAAAABJXLGo8/TCySvvzDQAAAAAAADn1y1cNydDn9DeQ6QAAAAAAACTbLXlphvjFY7ZAAAAAAAAc/oQYtUlcnLXQHowAAAAAAAAkrljUefoAB7HTPodcgAAAAAAAAAAAAAATa5a878nonxq05HfHXfmtjvp4DrvzHo/R+uHeWuDkfo35nQ/RJeUd/59kK47I8txw6AAAAAAT2xW98HIh1P0rgdcocjnn6fz+cpO4i5x3n5zwfpn53sFTgd8+fZKyPfDfjoMaAAAAZ6Z9M0mHXPvTk84/SeOCO9lxNzsffzvaMely4j9HPxR+ifnLDrp6BzujzudsHLYAAAAADHbHeazHtnZmOJ4/ReT8/+g+xnKm/QVHH5/wCoyJvv32VMRsYm0F8GLVJXJy10HzL0Y2efJwJ/1eJyet4wON9/Q6n5zfr6H5zXvYlMWVxomoPsuuUajz9Ma5K/RzChMUvHg2MDdn9Pb5gUPn0AAgqlq4bk6HP6G8jHpNmQ1Jyh8+hl7PTLwUAGRqCXXLXlpjtjFY7ZJ/Zq8+TR49h8H1lmUvHsMdgy1EF8GLVJXJy10B6MGP01Z6BPsejM0ePJqn3PoDHYS1SxqPP0AA9jpn0OuQAAAAAAAAAAAAAAJtcted+T0T41aO+AI9oB05uVsX/JsDq68fE7vrieyq/l9Qw3BHZHluOHQAAAAACe2K3vgNRHZyi/TmSHVQalOvK9HY+cLQ7cMup1MNwBHvhvx0GNAAAAM9M+mdnOy656njm4nb14XXPnvh/DvOXidvPk5nfzngOt55HUNvPJ3OtzujzudsHLYAAAAADHbHeduX2XbPHw745P3qj89r3PJ+ep6X0kl6VR+d07w4/vqiTTcIL4MWqSuTlrbndt6McHbsCCPtj83Z2BxfHV+HPpo2OPN+jHDdwc7DsDDxVLGo8/TGuSv0cwpyuqOH57wm4/6EfnN+4ON97Ax+6gACCqWrhuToc/oby5nTdJxdOsOdN2hw+nSOHF+pHF9dgcrXoDlU2ACXXLXlpjtjFY7Z4fzujkbdEcOrpCDk/pR+e17g49do4nU3GG4IL4MWqSuTlroD0Y50vbHI26I42fdE/M7Y/LX9ocTbqiD1aI7AS1SxqPP0AA9jpn0OuQAAAAAAAAAAAAAAJtcted+T0T41aO+AAAAAAAAEdkeW44dAAAAAAJ7Yre+A1AAAAAAAAI98N+OgxoAAABnpn0zSOuQAIUG5T59Zm8/wA+HUAAA53R53O2DlsAAAAABjtjvNY7ZAATUjkfesOT1gAAAQXwYtUlcnLXQHowAABy8uyON0aAAAAlqljUefpjXJX6OYUAAAAAAABBVLVw3J0Of0N5DpAAAAAAAAJdcteWmO2MVjtkAAAAAAABBfBi1SVyctdAejAAAAAAAACWqWNR5+gAHsdM+h1yAAAAAAAAAAAAAABNrlrzvyWpz1qgdc3oBegF6AXoMDrIBegF6AXoBfz1eaHPQAAAAAEt+Uu83oG5egF6AXoBe5O5egF6AXoBeg+Cs5aCUAAABNTlqVIHTN6AXoBegF7m/DpoBeg8nRfm+qXoBr68bc9BmgAAAAAJK/lmzn/eub0AvQC9AL0E513K2L0AvQC9ALolOKx2Y01j8dcXoFXoBegF6DI6jnei9AL0AvQC+BvL7HLUnQxl6Z6CBqXoBegF6DI6jmaF6AXoBegF/wAh+ik5ax2YaliBuXoBegF6CY7Dj0l6AXoBegF6AKvHvnpJX8jZz/vXN6AXoBe58h23ErOggF6AXoBegF0SnFY7Maax+OuL0Cr0AvcvA7bibHVQC9AL0AvQC+BvL7HLQAHsdM+h1yAAAAAAAAAAAAAABNrlrzvwctgAAAI7I7LBKAAAAAAAAAAAAAAABHZHZYEoAAAAAAAAAAAAAEdkdlgSorVn5b9THYBKAAAAAAAAAAAAABPjcs+fYvZUJQAAAAAAAIrYrbAlAAAAAAAHg84+bbAlAAAAAAAPMllsfywjp0ASgAAAAD4fUayzDLcwWCSsgFAAAAPktlaMWeJvZ4WCNYMdiUAAAAAAAAD2OmfQ65AAAAAAAAAAAAAAAm1y1534OWwAAAEdkdlglAAAAAAAAAAAAAAAAjsjssCUAAAAAAAAAAAAACOyOywJQJKvsdlglAAAAAAAAAAAAAAAZ6CGnWaylDcBKAAAAABPppFZaJQAAAAAB8PkS+wJQAAAAADDGyifWgkrIBQAAAD5JZYjGuW+pH9rASgAADA3RrLEY9eavRGsElZAKAAAAAAAAAAAAB7HTPodcgAAAAAAAAAAAAAATa5a878HLYAAACOyOywSgAAAAAAAAAAAAAAAR2R2WBKAAAAAAAAAAAAABHZHZYEoCK3KzVPRKAAAAAAAAAAAAAAAAAitWTU5TFzPSUAAAABFblZqw3lAAAAAAc71fYEoAAAABEs9+KvZjsSgAAD4fUayzDLcwWCSsgFAHk9I1liMb4a7kawR0aAJQAAAAAAAAAAAAAAAAAPY6Z9DrkAAAAAAAAAAAAAACbXLXnfg5bAAAAR2R2WCUAAAAAAAAAAAAAAACOyWiz0JQAAAAAAAAAAAAAI7JKrPolAAhu8T2ViUAAAAAAAAAAAASlTg+7O24Pyu+4U5+lQXwEsvi35Z9Q7FAlAAAAititsCUAAABB6qs++iUAAAZGviX3Z4WgJQAD5JZYjGuW+pH9rASgE3iyxGK5VRIsEfqoBKAAAAAAAAAAAAAAAAAAAAAAB7HTPodcgAAAAAAAAAAAAAATa5a878HLYAAACOzCzdlrKAAAAAAAAAAAAAAAAjsistEoAAAAAAAAAAAAAHyWuOywSiJLXz6qWoZaw2WT7eecddxeuexKAAAAAAAAA8+hPN0VmWVQj31GehKAAx2ENfuSytHZAKAB4wqistEoAACP7tY1JQABIVz5UWT60AJR8PqNZZhluYLBJWQZz1YjFmGW5gsEawePZKAAAAAAAAAAAAAAAAAAAAAAAAAAAB7HTPodcgAAAAAAAAAAAAAATa5a878HLYAAAAEVsVtgSgAAAAAAAAAAAAAAI7CfPsVoCgAAAAAAAAAAAAI7JLK3n1L853SWcTqeuZXYQ3QhuHz7BaZSdIc/oc6Wu2M0AAAAAAAAAAAAAAAADzHcsw3wwLnn1KAjs+J9R2AKAmfbPu5KAeJbLI/thFX6B8kLEY1y31I/tchWjFnmX0eVgjWCeglAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9jpn0OuQAAAAAAAAAAAAAAJtctcX4MUAAAADPGqItAAAAAAAAAAAAAAAABFaiLQAAAAAAAAAAAAAARWxWgDz6GPJ7hJK+ZKvdj+1mO0+Rb8+gAAAAAAAAAAAAAAAAAAACP7X5T0hpXUEVstJ9Aw9YnqkCfI3w31SemTytuGXo8vvk9VxfU0zp9kawR1/SgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAexqeh0gAAAAAAAAAAAAAAE3n15zn4JkAAAAB59CSubRdQgAAAAAAAAAAAAAACegY7R1L6CAAAAAAAAAAAAE069GK2coY7IAAz0EcvWkWj1xKDfSjwaI/ZSEAAAAAAAAAAAAAAAAAAAYbiKz7Gtkfvjn6HPjWG9UMhd8kFvnPUzwuoI/tYk12AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsLrYa0AAAAAAAAAAAAAABN59ec5+CZAAAAAAR2F8+oLT0EAAAAAAAAAAAAAAAQ3F+fYbD0EAAAAAAAAAAAcHvZrB0+XkW0/ZC149oAAAlqLw7bIjoeIaDwsGWuGRYj9FQQAATr989P1bynVVynVHKdUcp1RynVHKdUcp1RynVHKdUcp1RynVHKdUcp1RynVH578X/VS/wAl6n9G8n5er9AOT96pOU6o5TqjlOqOU6o5TqjlOqOU6o5TqjlOqOU6o5TqjlOqOV96gjT0ZgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsLrYa0AAAAAAAAAAAAAABN59ec5+CZAAAAAAARWlz0k0NwgAAAAAAAAAAAAAACOwuO0+ZYEAAAAAAAAAAAcrql4nU88o6W/vApSVgIAAB59AAA8+hIrLIrEtH2YqyxV1xrYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEHvx7zgJBmaMtLr6+D6+D6+D6+D6+D6+D6+D6+D6z+SahAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAJvPrznPwTIAAAAAAADHYRWoltTUgIAAAAAAAAAAAAAA8+hFrRkuqPQoCAAAAAAAAAAPPoAeZLSz0ZzliSsBAAAAAAAAGWuVvRGtgAAAAAAAAAAAAEUh2HD6pu5P06rj3FQAAAAAAAAAAAAAIPc0+c9ETLDfJeiN7AAAAAAAAc7owSexnAAAAAAAAAAAAAAAAAAAAGwuthrQAAAAAAAAAAAAAAE3n15zn4JkAAAAAAAAADOa0s1Oc5YjrPoQAAAAAAAAAAAAABnoI1hfPqbwWI9zUIAAAAAAAAAAB8ksLGsHn1L8K0grSeygIAAAAyz0t6I1sAAAAAAAAAAAAD5juMG4l9UCfb0AAAAAAAAAAAAAAPxcn6vznPmz5HJblhvXRGtiQ4n39D6ON0Xw4uX6bQ/P/oJfBxuxdGTdD5mVAQXwSexnAAAAAAAAAAAAAAAAAAAAGwuthrQAAAAAAAAAAAAAAE3n15zn4JkAAAAAAAAAeD24ti3MtUSVlj9VfD6jFiPc1CAAAAAAAAAAAAAAMdhIrLJ9q+D7L8K0grSCtIK2OqfQAAAAADyemGa1pBXnhOUJBWkFfmb2eMOpScP72x/Pv1XVzt6Q1oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCaifObBM/Ja8reiNbcbsjkzd/E5mfVyILdhzr/AD7OdtZqcZ3QAgvgk9jOAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAJvPrznPwTIAAAAAAAAAGHM7ReRN+gyIdPuRfpFaAjDcSKyyK/h89S/CtIK0grS7nsIAAAAAAAAAAAAAABjlXkuL78AAAAM8L9zk+uoINKxIrEm+gBAAAAGWo8afF19fB9fB9fB9fB9fB9fB9fB9fB9fB9fB9fB9fB9fB9fB9fPh6ZaH18H18H18H18H18H18H18H18H18H18H18H18H18H18H3x6GOnpJLVHYMtcq6I1sBzOmOLn3hy8+wOT8645lFYAAQXwSexnAAAAAAAAAAAAAAAAAAAAGwuthrQAAAAAAAAAAAAAAE3n15zn4JkAAAAAAAAAAAAAAAAAAAAD5hQWRWJFYkViRWJFYkViRWJFYkViRWJFYkViRWJFYkViRWJNdh8+iAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAACOzzOtU9Ascv7rXTcwdNzB03MHTcwdNzB03MHTcwdNzB0+X8pkCZAAAAAAAAAAAAAAAAAAAA2F1sNaAAAAAAAAAAAAAAAm8+vOc/BMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAABHZGtgQw8rSmFKYUphSmFKYUphSmFKYUp6AEAAAAAAAAAAAAAAAAAAAA2F1sNaAAAAAAAAAAAAAAAm8+vOc/BMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAAB59CX1nvbf6NbAAAAAAAAcvqQSexnAAAAAAAAAAAAAAAAAAAAGwuthrQAAAAAAAAAAAAAAE+euOc/RMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAAACPf3Fb2xrYDm9KM8pKy6DXA9J9jo82jIvAAgvgk9jOAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAMMd5859CZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfPvw8aZ6AAAAAAAAAAAAAAAAACK3K3ojW3B72Jz/AD1MiHx0dDnV+tzi9L1qQ427nKn7P02Agvgk9jOAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAMZ6Zc59iZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfPvk86ZagAAAAAAAAAAAAAAAADLXK3ojWwHI6/k40/d+HK89zycHTu+Tk1Wej6ABBfBJ7GcAAAAAAAAAAAAAAAAAAAAbC62GtAAAAAAAAAAAAAAAZyVx5zoJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8+/DxpnoAAAAAAAAAAAAAAAAAMdsl6KDTWq0grSCtIK0grSCtIK0grSCvn+s02GcgAAAAAAAAAAAAAAAAAAAbC62GtAAAAAAAAAAAAAAAeIrYc51EyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ffh40z0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAPPP6POznYTIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD59+HjTPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2F1sNaAAAAAAAAAAAAAAA+c3p8zOdxMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYXWw1oAAAAAAAAAAAAAABy+py85oEyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+ffJ50y1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANhdbDWgAAAAAAAAAAAAAAHK6vKznWPocqSzTjeTt6/mv0oCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPn34eNM9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYXWw1oAAAAAAAAAAAAAAByc+VM/oxnIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD59+HjTPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMvq1C3Ya0AAAAAAAAAAAAAAA5nTSQrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEK4QrhCuEM3X5hD0+b+gIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCFcIVwhXCH7aIloiWiJaIloiWiJaIloiWiJaIloiWiJaIloiWiFcIVwhXCFcOPxP2YAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACamakAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeIfJ03C9nY9cQdtydTogAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8ewn+UiL16pMvugAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmpmpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8QAAv/aAAwDAQACAAMAAAAhc888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888884c88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888cUc888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888SDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD/ANPPPPPPPPPPPPPPPAgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/wDzzzzzzzzzzzzzzzwIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMP8A8888888888888888CDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD/APPPPPPPPPPPPPPPPAgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/wDzzzzzzzzzzzzzzzwIMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMP8A8888888888888888CDFMMMMMMMMADDDDDDDAMMMMMMMMJDDDDDDCNMMMMMMMIKDDDDDDDDFMMMMMMMMADDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD/APPPPPPPPPPPPPPPPAg/PPPPPPPPOAwwwwww1fPPPPPPPPIgwwwwwfPPPPPPPPPgwwwwwwx/PPPPPPPPHgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww8/PPPPPPPPPPPPPPPAgvMOMOMMMPPwwwwwww1ONMNMMMNPKwwwww1vONNMMPPPKwwwwwww1PPKEOLCHPPQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPAgrOLCBECOHPwwwwwww1HNDACJFBPKwwwww1uJHBDIGEPKwwwwwwwxHDLJEECMGPQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPAgvLPPHHPPHPwwwwwww1PHPLLPPLPKwwwww1vDPPHHLLHKwwwwwww1PPPLEPNPPPQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPAhO888988884gwwwwww38888+8888wwwwwwwe888988894Awwwwww1888898888+gwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPAgwwwwwQwwwwwwwwwwwwwwwwwQwwwwwwwwwwwwwwwQwwwwwwwwwwwwwwwwwAwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPAgwwwwwQwwwwwwwwwwwwwwwwwQwwwwwwwwwwwwwwwQwwwwwwwwwwwwwwwwwAwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww/PPPPPPPPPPPPPPPBQQQQQQwQQQQQQQQQQQQQQQQQwQQQQQQQQQQQQQQQwQQQQQQQQQQQQQQQQQwQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQPPPPPPPPPPPPPPPPAeuPJPffvvvvvvvvvvvtdOHPvfvvvvvvvvvvj8MEPfvvvvvvvvvvvvtdOHPfvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfnjnvvfvvvvvvvvvvvrrjvvvfvvvvvvvvvvrrjvvfvvvvvvvvvvvvrrjvvfvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvvfvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvvfvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfs8888U8889PvvvvvvuM8884c888/vvvvvve888zc888//AL777777nPPPNHPPPPv7nPPPPPPPPr7LPPPPPPPPXb/PPPPPPPPfXnPPPPPPPPPv7nPPPPPPPPr774LzzzzzzzzzzzzzzzwHrzzzzzzzzzn7777777bzzzzzzzzzX777767zzzTTTTzz37777776vzzzzzzzzzz/AM88888888s+X8888888888/888888888cr8888888888/8APPPPPPPPLPvvgvPPPPPPPPPPPPPPPAauPMPOPNPKK/vvvvvvlNONPNOPNFFfvvvvvvEHGBAPMNPfvvvvvvq/OPJFGNNPPv8AzjgxAhizjb5XzzzzDDjzzz/jjjTDjTjzyvzjDTjTTzT7/wA40848048++++C8888888888888888Bq88QMcUIU8r+++++++U8okMosA88V++++++MM08cg0Uw9+++++++r8ss4UMc8M+/sMsMUgMs8++V8s88ccs888/sM88ccsc88r8sc88M8c8+/8ADPHHHHPPPvvvgvPPPPPPPPPPPPPPPAavPPPPPPPPK/vvvvvvlPPPPPPPPPFfvvvvvvPPIJBPPPPfvvvvvvq/PPPHHPPPPv8Azzzzxzzzzr5Xzzzzzzzzzz/zzzzzzzzzSvzzzzzzzzz7/wA888888886+++C8888888888888888Bt88++6++++o+++++++f++++2+++8X++++++0+++6+628++++++++78++++++++fu3+++6++++0+28++62+++t9Z+++6++++4878+++6++++fu3++26++++0+++C8888888888888888B+++++9+++++++++++++++++9+++++++++++++++t+t3+++++++++++++++95+++++++++9+++++++++l++++++++51d++++++6xlNv+++++xxlNNe+++++++++C8888888888888888B+++++9+++++++++++++++++9+++++++++++++++9++R+++++++++++++++++t5+++++++t++++++++9+++++++xlf8AvvvvscTXXvvvusdZTb/vvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvvfvvvvvvvvvvvvvvvvvfvvvvvvvvvvvvvvvfvvdvvvvvvvvvvvvvvvvvjfdvvvvvufvvvvvvufvvvvuuTfvvvusZTb/vuscZTTfvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvufvvvvvvvvvvvvvvvvmfvvvvvvvvvvvvvvtfvvufvvvvvvvvvvvvuu8PNfvefvvvvvfvvvvpfvvvusfXvvscTXXvscZTXfvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvqfvvvvvvvvvvvvvvvvrfvvvvvvvvvvvvvvmfu9vvf8fvvvvvvvvvvvTbfvvvvd/vvvfvvvsfvvupXfusZTb+ccTTfvvvvvvvvvvvvvvvvvvvvvvvvvvvvgvPPPPPPPPPPPPPPPAfvvvvvvfvvvvvvvvvvvvvvvu//AL7777777777776350jW3G0Tb7777777777777777713b69/77n77H13HE1VHGU17777777777777777777777777777777774LzzzzzzzzzzzzzzzwDzzzzzzrzzzzzzzzzzzzzzzzwLzzzzzzzzzzzzzzz7zy9q57zzzzzzzzzzzzzzzzzzzzyvDzLzjzAdyI68c+zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzwLzzzzzzzzzzzzzzzwP3333321r33333333333333333D3333333333333pzX3206LrL333333333333333333322ra44NLa5z3333333333333333333333333333333333333333333/zzzzzzzzzzzzzzzwP3333332xj3333333333333332zD333333333332oPr3333wrL7bzX33w800000000000003/APctNNNNNNNNNNNNN2999999999999999999999999999999999/8888888888888888D99999999sw9999999999999999s2999999999999uju09999d999OOel88888888888888888888888888888888d990888888887999999999999999999999/8888888888888888D999999999tm89999999999999999aw9999999999999cyw999999999p8888888888888844w088888888888888017888888808+999999999999999999999/8888888888888888D99999999999868999999999999999t+W499999999999986ay019999h88888888888888MMcs88888888888888jOh880ksUgk8/8Afffffffffffffffffffff/PPPPPPPPPPPPPPPA/ffffffffffdtTKnvPffffffffffffffbTjksstvffffffecMtow28novPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPNNafLDHMIOHPP/AH33333333333333333333/zzzzzzzzzzzzzzzwP333333333317qtz3057rLLT3333333333333323YIIIIIJ445z333331z77777777777777rb77777777777777xx6nzzywzyzzzv333333333333333333333/zzzzzzzzzzzzzzzwP3333333333333333333332w4444444444444444z3333333333333333333333333333332lX3333333333333332q7DDDDDDDDCL333333333333333333333/zzzzzzzzzzzzzzzwP33333333333333333333333333333333333333333333333333333333333333333333332lX33333333333333337XLLLLLLLLLT333333333333333333333/zzzzzzzzzzzzzzzwv33333333333333333333333333333333333333333333333333333333333333333333332lX33333333333333331nzzzzzzzzyj333333333333333333333/zzzzzzzzzzzzzzzxf33333333333333333333333333333333333333333333333333333333333333333333332lX33333333333333332nzzjyijjzz/wB99999999999999999999/8888888888888888n99999999999999999999999999999999999999999999999999999999999999999999999pV99999999999999999584EIEcYo8/8Afffffffffffffffffffff/PPPPPPPPPPPPPPPJ/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbXfffffffffffffffffafPPIPJGPPP/AH33333333333333333333/zzzzzzzzzzzzzzzw/33333333333333333333333333333333333333333333333333333333333333333333332lX333333333333333327f/wD/AP8A/wD/AP6ffffffffffffffffffffff/PPPPPPPPPPPPPPPC/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaXffffffffffffffffffffffffffffffffffffffffffffffffff/PPPPPPPPPPPPPPPE/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaXffffffffffffffffffffffffffffffffffffffffffffffffff/PPPPPPPPPPPPPPPM/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaXffffffffffffffffffffffffffffffffffffffffffffffffff/PPPPPPPPPPPPPPPO/ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbXffffffffffffffffffffffffffffffffffffffffffffffffff/PPPPPPPPPPPPPPPO6r3vfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffadffffffffffffffffffffffffffffffffffffffffffffffffff/PPPPPPPPPPPPPPPKfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaXffffffffffffffffffffffffffffffffffffffffffffffffcP/PPPPPPPPPPPPPPPLz3/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wCvf/8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AO88888888888888/wD/AP8A+/8A88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888kwQ888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888MMs88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888c88888888888888888888888888888888888888888888888888/8QAMxAAAQQBAgMGBQQDAQEBAAAAAwABAgQUERIFEzQQFSAwQFAhMTM1cCIjYIAkMkVEBiX/2gAIAQEAAQcCm794Vm/otP7jV/ovP7jV/ovP7jV/ovP7jV/ovP7jV/ovP7jV/ovP7jV/ovP7jV9bJ9sXePE4uGB+wpxhkGIDwOxH/Ok/uNX1pvpFQZwHwETsEs7MQVhiPZoQYQiPw9iA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IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAIgMMMMMMMMgIIIIIIIQMMMMMMMMYIIIIIIcoMMMMMMMMsIIIIIIIIIMMMMMMMMkIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIDzzzzzzzzzzzzzzzwAFzzzzzzzzw8IIIIIIIXzzzzzzzywkIIIIJfzzzzzzzzzEIIIIIIIdzzzzzzzzzsIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIzzzzzzzzzzzzzzzzwBXjDzzjzTzSgIIIIIIL7DTzzTjzDwMIIIIIHzzTzDTDTykIIIIIIJXzwzSgQBzz0IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwBXwCRDSBxDSgIIIIIIL6hAjDgSjDwMIIIIIHyDgDQDRzykIIIIIIJXDjAizCCgRUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwBXzxwwyxwzygIIIIIIL7yywxwyxzwMIIIIIHxywxzxyxykIIIIIIJXzzyQSjTzz0IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwAP/777777774IIIIIIJT77777777+kIIIIJTb77777775gIIIIIIJD/77777776QIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwAIIIIIEIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwAIIIIIEIIIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIEIIIIIIIIIIIIIIIIIAIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIILzzzzzzzzzzzzzzzzwM88888w88888888888888888w888888888888888w88888888888888888w888888888888888888888888888888888888888888888888888888888888888/3zzzzzzzzzzzzzzzwEY8VcMEAAAAAAAAAAAA4sukAEAAAAAAAAAAAwUO0EAAAAAAAAAAAAA4sukMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzzzzzzzzzzzzzzzzwEDJIIAEAAAAAAAAAAABCKIAAEAAAAAAAAAAALKIAEAAAAAAAAAAAABCKIAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzzzzzzzzzzzzzzzzwEAAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzzzzzzzzzzzzzzzzwEAAAAAEAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzzzzzzzzzzzzzzzzwEYQ446s44448AAAAAAAk4454c444woAAAAAc4447c444ogAAAAAAAUY444s4444IA844444444AIk44444444sIQ44444444oEUY44444444IA844444444AAADzzzzzzzzzzzzzzzzwEDzzzzzzzzzsAAAAAABbzzzzzzzzyEAAAABLzjTzzjDzwsAAAAAAAbzzTTzzzzy9RzzTzjTzzysB7zzzzzzzzwm7zzzzzzzzwMbzzzzzzzzy9RzzzzzzzzysAADzzzzzzzzzzzzzzzzwEKijzSDTyDykAAAAAABRRTjhDzjTwMAAAAALiAAhSDAxSsAAAAAABbzgwiBBRDT1bjTjQwiyDyEDzzjTjzTDzyv7jTDTjTTDwNbjzDTjjjTz1bzTDTjTTTykAADzzzzzzzzzzzzzzzzwELzzSwCCjTykAAAAAABTzjwhBRDzwMAAAAAJgiySjzQTisAAAAAABYxwywzzwyz1ZwzxywgzxwkDzzwwzxzzzyv6xyyyxwzzwNayxwzzxwxz1bzyxxxzxxykAADzzzzzzzzzzzzzzzzwELzzzzzzzzykAAAAAABTzzzzzzzzwMAAAAALzyiCwBzzysAAAAAABbzzyxwzzzz1Lzzywwzzzy0Dzzzzzzzzzyvbzzzzzzzzwtbzzzzzzzzz1Lzzzzzzzzy0AAADzzzzzzzzzzzzzzzwENX/3333330cAAAAAAAL33333332sgAAAABT/AN9999927yAAAAAAAC399951999YC299959999gAQ/8AffdfffbIU/fffffffewQt/fctvfffWAtvfctvfffYAAAAPPPPPPPPPPPPPPPPAQAAAAAwAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAMwEQgAAAAAAAAAAAAAAIRQAAAAAAAAKwAAAAAAABswAAAAAAADS8QAAAAABC0w0wAAAACTWccYgAAAAAAAAAPPPPPPPPPPPPPPPPAQAAAAAQAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAQACwAAAAAAAAAAAAAAAElyQAAAAAABwAAAAAABEwAAAAAABewwAAAADQ4wYAAAAjy28wwAAAAAAAAAAAAA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wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwww1PPKJJLPPPKAwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPAgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww6wwwwwwwwwwwwwwwww0e88888888/QwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPDgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPNgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPFgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPMgwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPCpagQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww06wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvPPPPPPPPPPPPPPPPQwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwx6wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwgvPPPPPPPPPPPPPPPP8Aywwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww444444477777777777777767b777777777777777777777777777764444444444444477645/8A88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888U88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888Y48w8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888MM0M888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888U8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888/8QAOxEAAQIDBQUFBwQBBQEBAAAAAQACA1KRERITFFEEMDFTcSAhMkBBEDNCUGFygSJgcLE0I0OCocGQYv/aAAgBAgEBPwD/AOrERxbZYViPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj5liPmWI+ZYj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OhV10pV10pV10pV10pV10pV10pV10pV10pVhHyeL6fttoteN08WtPyeL6fttniG6f4T8ni+n7bh+Ibp/hPyeL6ftuH4xun+E/J4vp+22mxwKtGqtGqtGqtGqtGqtGqtGqtGqtGqe4WEfJ4vp/BkXgP4Mi8B/BkXgP4Mi8AgroRFn8ExB3fwYQDxCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCutlCsGisH/y9/8QAOhEAAQIDBQUHAwMDBAMAAAAAAQACAxRRERITUlMwMTKRoQQgIUBBYXEQM1BgcIEiNLFCQ3KCI5DB/9oACAEDAQE/AP8A2sdjhsiGJfbbZYpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0DTCloGmFLQNMKWgaYUtA0wpaBphS0D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0keLtupUN4qABVNYQQ313Xpr3FtdyHUu4rv5FPR4+r/Iv6PH1f5F/R4+r/IuMgiYBo/iX//EAC4QAQABAgQEBAcBAQEBAAAAAAERACExQVFhcYGh8DBAkbEQIFBgcMHR8YDhsP/aAAgBAQABPyG8STxw/wDhqlGjRo0aNGiKeCLyq+sA/ICM5UIknwlFsIND+lCi8cCHl/wlR7XpWLWi7GDdohbMTJDvuS5UFKYrDNJZM0phcgDDAXUWo/BwuceVGB/wjRQCJI4lYdj3nBCjiFhQHCkY5DbwlfSKjZHGOUgdKWc1o8jeUz/4VotZtts7/wAMKM1JT81xERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERETMTMTETETERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERMRMXhMRMRMRNtn0KiI6j87BRGwrqb2WoN5YjUsH0Cb1H52Hm/wBJZLh9Bk9R/wALiOo/4WO31V1H/Cx22quo/wCFs1XUf8LrqP8AhZ6n2V1H/Cz2eiuo/wCFxHUf8Lzeo/4Xm9R8cMFn3jXyXfv379+/fv379+/fv37907040Al5HDBZ9418l379+/fv379+/fv379+/dO9ONAJeNfxMiA4rRe/+ucU8j379+/fv379+/fv379+6FwNRPVrvhVT5KVFjDYfT5J379+/fv379+/fv379+9ccjjE8VAn4aEdR8OQdkSeTlvQvVjimpm7+SxxhBJQOBsyrUnNefj8g7Ik8nLeherHFNTN38ljjCCSgcDZlWpOa8/FiVExwCi30NDyZ7Cghj7hTuyArUfIEusRDGdNs6F1NAEB5KNzvebg/rOlAAdGE8SbOJ+GZnUfDrbyl2jLx7rbyl2jLxbrL1Pk0ERq9++PkMRteUbC/DL2eo+xqF6he7ro8p2fT5XGVq1O1HoI1q+WYB6lxUMWaOCm62gteFdU7NhQpsBnLSkS+PZILzWDDQWDYVYkI8y1Rj2/ix673iokqYpISE6OcCfFyj1M0ghxMyfh6WY6j5KEGmSTKO6mHLwjTQZdGnBi9gZ461fLAnZuypwc1I5CFwm96wrgxA4nNMAtViMEQk1qG5Yw8CI0auuZasIS+tKjI+DCkJk4VZ8Y/8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Zr1DArtJ1UZreSKSJVaMtjTHKlqs+pgWYHWTA9+THX4LW8qizcxA508oveCs0iyne91033SVfVfnL1yr9GlxnqbMfY5X5cjgIPzQql32XdJVnCWGYu8DeymgYFFINrGIyw49tq0QuLhSE6Za6Gw7NhsfxA7w/nP3jtX7V6385Dx5NSxscl9YAR+4rzrFwYL8gEU3SA/X4QyqyWVVlBv8eu8LpNIo28GWkBp01iC1sTxXPgFq/wAQO9/5z4OSCa7gPHpBwBVd75+Tkgmu4Dx6QcAVXe+blaQo3YKfPo5t1c7hRHwG2CvQK6BzuFfJ6RxBLLQMD738Mf4m8fnPgJAV6KW71IXpQ9yb3EonydWrVq1atWpZCbdlAB0iPk6tWrVq1atSrjUd8AEOzTNmkaPR0RK+fCQFeilu9SF6UPcm9xKJ8nVq1atWrVqWQm3ZQAdIj5OrVq1atWrUq41HfABDs0zZpGj0dESvmwXVDCxDCgwrEgxXXicfJDq1atWrVq1GxKYdYh8jq1atWrVqa+2T+aCOJiuT1cNzVVdfQidUaqiNbNkEGVDxNqK++T5OrVq1atWrUJ96gqCBi0H5OrVq1atWpWXe6Y/rf9sQJV87tjd6r1f4Y/E5/Of8Fly78O/wNo/Of8F1y78OO/nP+C65d+HUfzn/AAXXLvw5d+c/4LLl34d/s7I2No+85actOWnLTlpy05actOWnLTlpW6VJ5actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLSt0qTy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05aOuDlz5actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTloqwdKfLTlpy05actOWnLfBuWnLTlvg3LfBuWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlpy05actOWnLTlp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"}}},{"cell_type":"code","source":"import polars as pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-24T06:33:52.796237Z","iopub.execute_input":"2025-06-24T06:33:52.796586Z","iopub.status.idle":"2025-06-24T06:33:53.346316Z","shell.execute_reply.started":"2025-06-24T06:33:52.796563Z","shell.execute_reply":"2025-06-24T06:33:53.345538Z"}},"outputs":[],"execution_count":11},{"cell_type":"markdown","source":"## 1. Application Previous\n\nĐây là những đơn apply trước của khách hàng cho chính công ty mình, được ghi nhận lại dữ liệu\n- C1 - Có những case trong quá khứ có apply nhưng không hề được duyệt\n- C2 - Có những case trong quá khứ có apply và được duyệt\n- C3 - Có những case trong quá khứ không hề apply đơn nào\n\nCác feature sẽ tạo:\n","metadata":{}},{"cell_type":"code","source":"df_train_applprev_1 = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_*.parquet\")\n# df_train_applprev_2 = pl.read_csv(\"/kaggle/input/home-data/train_applprev_2_feature.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-24T06:34:11.110623Z","iopub.execute_input":"2025-06-24T06:34:11.11093Z","iopub.status.idle":"2025-06-24T06:34:11.162669Z","shell.execute_reply.started":"2025-06-24T06:34:11.110907Z","shell.execute_reply":"2025-06-24T06:34:11.161278Z"}},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mSchemaError\u001b[0m                               Traceback (most recent call last)","\u001b[0;32m/tmp/ipykernel_31/2436323461.py\u001b[0m in \u001b[0;36m<cell line: 0>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf_test_applprev_1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpl\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_parquet\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/test/test_applprev_1_*.parquet\"\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      2\u001b[0m \u001b[0;31m# df_test_applprev_2 = pl.read_csv(\"/kaggle/input/home-data/test_applprev_2_feature.csv\")\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/_utils/deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     90\u001b[0m                 \u001b[0mold_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mversion\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     91\u001b[0m             )\n\u001b[0;32m---> 92\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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     93\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     94\u001b[0m         \u001b[0mwrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__signature__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msignature\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunction\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# type: ignore[attr-defined]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/_utils/deprecation.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     90\u001b[0m                 \u001b[0mold_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnew_name\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__qualname__\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mversion\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     91\u001b[0m             )\n\u001b[0;32m---> 92\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mfunction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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     93\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     94\u001b[0m         \u001b[0mwrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__signature__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0minspect\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msignature\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunction\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# type: ignore[attr-defined]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/io/parquet/functions.py\u001b[0m in \u001b[0;36mread_parquet\u001b[0;34m(source, columns, n_rows, row_index_name, row_index_offset, parallel, use_statistics, hive_partitioning, glob, schema, hive_schema, try_parse_hive_dates, rechunk, low_memory, storage_options, retries, use_pyarrow, pyarrow_options, memory_map, include_file_paths, allow_missing_columns)\u001b[0m\n\u001b[1;32m    239\u001b[0m             \u001b[0mlf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mselect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    240\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 241\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mlf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\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    242\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    243\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;32m/usr/local/lib/python3.11/dist-packages/polars/lazyframe/frame.py\u001b[0m in \u001b[0;36mcollect\u001b[0;34m(self, type_coercion, predicate_pushdown, projection_pushdown, simplify_expression, slice_pushdown, comm_subplan_elim, comm_subexpr_elim, cluster_with_columns, collapse_joins, no_optimization, streaming, engine, background, _eager, **_kwargs)\u001b[0m\n\u001b[1;32m   2048\u001b[0m         \u001b[0;31m# Only for testing purposes\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2049\u001b[0m         \u001b[0mcallback\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_kwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"post_opt_callback\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcallback\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2050\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mwrap_df\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mldf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcollect\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcallback\u001b[0m\u001b[0;34m)\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   2051\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2052\u001b[0m     \u001b[0;34m@\u001b[0m\u001b[0moverload\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mSchemaError\u001b[0m: data type mismatch for column credacc_status_367L: expected: null, found: str"],"ename":"SchemaError","evalue":"data type mismatch for column credacc_status_367L: expected: null, found: str","output_type":"error"}],"execution_count":13},{"cell_type":"code","source":"import polars as pl\n\ndf_train_applprev_1 = df_train_applprev_1.with_columns(\n    pl.when(pl.col('approvaldate_319D').is_not_null())\n      .then(pl.lit('Approval'))\n      .otherwise(pl.lit('Not Approval'))\n      .alias('is_approval')\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T15:32:38.202391Z","iopub.execute_input":"2025-06-13T15:32:38.202714Z","iopub.status.idle":"2025-06-13T15:32:38.353201Z","shell.execute_reply.started":"2025-06-13T15:32:38.202692Z","shell.execute_reply":"2025-06-13T15:32:38.35218Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"result = df_train_applprev_1.group_by(\"case_id\").agg([\n    pl.col(\"is_approval\").count().alias(\"count_is_approval\")\n]).sort(\"count_is_approval\", descending=False)  # ascending\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:36:41.714347Z","iopub.execute_input":"2025-06-13T09:36:41.715086Z","iopub.status.idle":"2025-06-13T09:36:52.540235Z","shell.execute_reply.started":"2025-06-13T09:36:41.715037Z","shell.execute_reply":"2025-06-13T09:36:52.539166Z"}},"outputs":[],"execution_count":25},{"cell_type":"code","source":"df_train_applprev_1 = df_train_applprev_1.join(\n    result, on='case_id', how='left'\n)\ndf_train_applprev_1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:36:52.542195Z","iopub.execute_input":"2025-06-13T09:36:52.542679Z","iopub.status.idle":"2025-06-13T09:36:53.000684Z","shell.execute_reply.started":"2025-06-13T09:36:52.542621Z","shell.execute_reply":"2025-06-13T09:36:52.999396Z"}},"outputs":[{"execution_count":26,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 43)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ status_21 ┆ tenor_203 ┆ is_approv ┆ count_is_ │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ 9L        ┆ L         ┆ al        ┆ approval  │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ f64       ┆ str       ┆   ┆ str       ┆ f64       ┆ str       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 0.0        ┆ 640.2     ┆ null      ┆ … ┆ D         ┆ 24.0      ┆ Not       ┆ 2         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 2       ┆ 0.0        ┆ 1682.4    ┆ null      ┆ … ┆ D         ┆ 12.0      ┆ Not       ┆ 2         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 3       ┆ 0.0        ┆ 6140.0    ┆ null      ┆ … ┆ D         ┆ 12.0      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 4       ┆ 0.0        ┆ 2556.6    ┆ null      ┆ … ┆ T         ┆ 24.0      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 5       ┆ 0.0        ┆ null      ┆ null      ┆ … ┆ T         ┆ null      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703453 ┆ 0.0        ┆ 2827.2    ┆ 2019-12-1 ┆ … ┆ A         ┆ 30.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 8         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 3197.6    ┆ 2014-08-1 ┆ … ┆ K         ┆ 48.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 5981.4    ┆ 2018-11-1 ┆ … ┆ K         ┆ 30.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 4         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 2986.8    ┆ 2020-06-2 ┆ … ┆ A         ┆ 6.0       ┆ Approval  ┆ 2         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 6726.6    ┆ 2019-08-0 ┆ … ┆ K         ┆ 12.0      ┆ Approval  ┆ 2         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 43)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>rejectreasonclient_4145042M</th><th>revolvingaccount_394A</th><th>status_219L</th><th>tenor_203L</th><th>is_approval</th><th>count_is_approval</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>u32</td></tr></thead><tbody><tr><td>2</td><td>0.0</td><td>640.2</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>10000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>2</td></tr><tr><td>2</td><td>0.0</td><td>1682.4</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>16000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>1</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>2</td></tr><tr><td>3</td><td>0.0</td><td>6140.0</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;2019-01-07&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>59999.8</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P131_33_167&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2018-05-15&quot;</td><td>&quot;MARRIED&quot;</td><td>&quot;2019-02-07&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>11000.0</td><td>null</td><td>0</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>4</td><td>0.0</td><td>2556.6</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>&quot;2019-01-08&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P194_82_174&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2019-02-08&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>16000.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;T&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>5</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>&quot;2019-01-16&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P54_133_26&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>62000.0</td><td>null</td><td>0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;T&quot;</td><td>null</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>0.0</td><td>2827.2</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>34550.855</td><td>&quot;2019-12-23&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-09&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-01-18&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>50000.0</td><td>0.0</td><td>1</td><td>46806.6</td><td>30.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;A&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703453</td><td>0.0</td><td>3197.6</td><td>&quot;2014-08-15&quot;</td><td>33059.0</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>179.424</td><td>0.0</td><td>398.02402</td><td>198.024</td><td>&quot;AC&quot;</td><td>14.0</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2018-08-07&quot;</td><td>&quot;2018-08-07&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;MARRIED&quot;</td><td>&quot;2014-09-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>28000.0</td><td>33.0</td><td>5</td><td>0.0</td><td>48.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>48.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703453</td><td>0.0</td><td>5981.4</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>123800.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2018-11-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2019-12-17&quot;</td><td>&quot;2019-12-17&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2018-12-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>76000.0</td><td>0.0</td><td>2</td><td>0.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703454</td><td>0.0</td><td>2986.8</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>15998.0</td><td>&quot;COL&quot;</td><td>5631.406</td><td>&quot;2020-06-23&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-07-21&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>24000.0</td><td>0.0</td><td>0</td><td>5919.2</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;A&quot;</td><td>6.0</td><td>&quot;Approval&quot;</td><td>2</td></tr><tr><td>2703454</td><td>0.0</td><td>6726.6</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2019-08-20&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>&quot;2020-08-02&quot;</td><td>&quot;2020-08-02&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;WIDOWED&quot;</td><td>&quot;2019-09-01&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>60000.0</td><td>0.0</td><td>1</td><td>0.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>12.0</td><td>&quot;Approval&quot;</td><td>2</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":26},{"cell_type":"code","source":"# import polars as pl\n# import seaborn as sns\n# import matplotlib.pyplot as plt\n\n# # Giả sử df_train_applprev_1 là DataFrame của bạn\n\n# # Bước 1: Lấy DataFrame boolean null mask\n# null_mask = df_train_applprev_1.select([\n#     pl.col(col).is_null().alias(col) for col in df_train_applprev_1.columns\n# ])\n\n# # Bước 2: Chuyển sang pandas\n# null_mask_pd = null_mask.to_pandas()\n\n# # Bước 3: Vẽ heatmap\n# plt.figure(figsize=(12, 6))\n# sns.heatmap(null_mask_pd, cmap=[\"black\", \"green\"], cbar=False)\n# plt.title(\"Heatmap of Null Values (Green = NULL)\")\n# plt.xlabel(\"Columns\")\n# plt.ylabel(\"Rows\")\n# plt.tight_layout()\n# plt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:35:52.82537Z","iopub.status.idle":"2025-06-13T09:35:52.826053Z","shell.execute_reply.started":"2025-06-13T09:35:52.825862Z","shell.execute_reply":"2025-06-13T09:35:52.82589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"pd.Series(df_train_applprev_1.columns)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:35:52.827691Z","iopub.status.idle":"2025-06-13T09:35:52.828039Z","shell.execute_reply.started":"2025-06-13T09:35:52.827868Z","shell.execute_reply":"2025-06-13T09:35:52.82788Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train_applprev_1.select(\n    pl.col(\"is_approval\").value_counts()\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:36:53.001767Z","iopub.execute_input":"2025-06-13T09:36:53.002135Z","iopub.status.idle":"2025-06-13T09:36:53.495015Z","shell.execute_reply.started":"2025-06-13T09:36:53.002102Z","shell.execute_reply":"2025-06-13T09:36:53.493742Z"}},"outputs":[{"execution_count":27,"output_type":"execute_result","data":{"text/plain":"shape: (2, 1)\n┌──────────────────────────┐\n│ is_approval              │\n│ ---                      │\n│ struct[2]                │\n╞══════════════════════════╡\n│ {\"Approval\",3515685}     │\n│ {\"Not Approval\",3010294} │\n└──────────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (2, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>is_approval</th></tr><tr><td>struct[2]</td></tr></thead><tbody><tr><td>{&quot;Approval&quot;,3515685}</td></tr><tr><td>{&quot;Not Approval&quot;,3010294}</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":27},{"cell_type":"code","source":"df_train_applprev_1.select(\n    [pl.col(c).is_null().sum().alias(c) for c in df_train_applprev_1.columns]\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:36:53.496493Z","iopub.execute_input":"2025-06-13T09:36:53.497911Z","iopub.status.idle":"2025-06-13T09:36:53.535434Z","shell.execute_reply.started":"2025-06-13T09:36:53.497862Z","shell.execute_reply":"2025-06-13T09:36:53.53404Z"}},"outputs":[{"execution_count":28,"output_type":"execute_result","data":{"text/plain":"shape: (1, 43)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ status_21 ┆ tenor_203 ┆ is_approv ┆ count_is_ │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ 9L        ┆ L         ┆ al        ┆ approval  │\n│ u32     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ u32        ┆ u32       ┆ u32       ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 2500       ┆ 250736    ┆ 3010294   ┆ … ┆ 66        ┆ 551820    ┆ 0         ┆ 0         │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 43)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>rejectreasonclient_4145042M</th><th>revolvingaccount_394A</th><th>status_219L</th><th>tenor_203L</th><th>is_approval</th><th>count_is_approval</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>2500</td><td>250736</td><td>3010294</td><td>4991531</td><td>0</td><td>3559424</td><td>66</td><td>6205945</td><td>194132</td><td>6205945</td><td>6205945</td><td>6205945</td><td>6205945</td><td>202198</td><td>202198</td><td>2246512</td><td>3141753</td><td>0</td><td>202198</td><td>4750384</td><td>4043621</td><td>0</td><td>3886478</td><td>2393892</td><td>652482</td><td>202198</td><td>66</td><td>6062966</td><td>101983</td><td>3095704</td><td>0</td><td>2258268</td><td>551820</td><td>0</td><td>0</td><td>0</td><td>0</td><td>6229229</td><td>66</td><td>551820</td><td>0</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":28},{"cell_type":"code","source":"df_train_applprev_1.filter(\n    (pl.col(\"is_approval\") == \"Not Approval\") & \n    (pl.col(\"annuity_853A\").is_null())\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:36:53.536918Z","iopub.execute_input":"2025-06-13T09:36:53.53723Z","iopub.status.idle":"2025-06-13T09:36:56.957126Z","shell.execute_reply.started":"2025-06-13T09:36:53.537205Z","shell.execute_reply":"2025-06-13T09:36:56.955602Z"}},"outputs":[{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"shape: (159_864, 1)\n┌─────────┐\n│ case_id │\n│ ---     │\n│ i64     │\n╞═════════╡\n│ 213677  │\n│ 1711309 │\n│ 251956  │\n│ 1294230 │\n│ 723740  │\n│ …       │\n│ 206897  │\n│ 1316124 │\n│ 248832  │\n│ 1360676 │\n│ 149903  │\n└─────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (159_864, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th></tr><tr><td>i64</td></tr></thead><tbody><tr><td>213677</td></tr><tr><td>1711309</td></tr><tr><td>251956</td></tr><tr><td>1294230</td></tr><tr><td>723740</td></tr><tr><td>&hellip;</td></tr><tr><td>206897</td></tr><tr><td>1316124</td></tr><tr><td>248832</td></tr><tr><td>1360676</td></tr><tr><td>149903</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":29},{"cell_type":"code","source":"full_train_applprev['case_id','isbidproduct_390L']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T10:48:16.083703Z","iopub.execute_input":"2025-06-13T10:48:16.0869Z","iopub.status.idle":"2025-06-13T10:48:16.198907Z","shell.execute_reply.started":"2025-06-13T10:48:16.086806Z","shell.execute_reply":"2025-06-13T10:48:16.197684Z"}},"outputs":[{"execution_count":32,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 2)\n┌─────────┬───────────────────┐\n│ case_id ┆ isbidproduct_390L │\n│ ---     ┆ ---               │\n│ i64     ┆ bool              │\n╞═════════╪═══════════════════╡\n│ 2       ┆ false             │\n│ 2       ┆ false             │\n│ 3       ┆ false             │\n│ 4       ┆ false             │\n│ 5       ┆ false             │\n│ …       ┆ …                 │\n│ 2703453 ┆ false             │\n│ 2703453 ┆ false             │\n│ 2703453 ┆ false             │\n│ 2703454 ┆ false             │\n│ 2703454 ┆ false             │\n└─────────┴───────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 2)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>isbidproduct_390L</th></tr><tr><td>i64</td><td>bool</td></tr></thead><tbody><tr><td>2</td><td>false</td></tr><tr><td>2</td><td>false</td></tr><tr><td>3</td><td>false</td></tr><tr><td>4</td><td>false</td></tr><tr><td>5</td><td>false</td></tr><tr><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>false</td></tr><tr><td>2703453</td><td>false</td></tr><tr><td>2703453</td><td>false</td></tr><tr><td>2703454</td><td>false</td></tr><tr><td>2703454</td><td>false</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":32},{"cell_type":"code","source":"train_base = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet\")\n\nfull_train_applprev = df_train_applprev_1.join(\n    df_train_applprev_2, on=['case_id','num_group1'], how='left'\n)\nfull_train_applprev","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T15:34:38.146344Z","iopub.execute_input":"2025-06-13T15:34:38.146713Z","iopub.status.idle":"2025-06-13T15:34:45.971905Z","shell.execute_reply.started":"2025-06-13T15:34:38.146677Z","shell.execute_reply":"2025-06-13T15:34:45.970776Z"}},"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 76)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ credacc_c ┆ credacc_c ┆ credacc_c ┆ num_group │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ ards_stat ┆ ards_stat ┆ ards_stat ┆ 2_count   │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ us_52L_Un ┆ us_52L_CA ┆ us_52L_UN ┆ ---       │\n│         ┆ f64        ┆ f64       ┆ str       ┆   ┆ kno…      ┆ NCE…      ┆ CON…      ┆ i64       │\n│         ┆            ┆           ┆           ┆   ┆ ---       ┆ ---       ┆ ---       ┆           │\n│         ┆            ┆           ┆           ┆   ┆ i64       ┆ i64       ┆ i64       ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 0.0        ┆ 640.2     ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2         │\n│ 2       ┆ 0.0        ┆ 1682.4    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2         │\n│ 3       ┆ 0.0        ┆ 6140.0    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 3         │\n│ 4       ┆ 0.0        ┆ 2556.6    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2         │\n│ 5       ┆ 0.0        ┆ null      ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 1         │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703453 ┆ 0.0        ┆ 2827.2    ┆ 2019-12-1 ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 3         │\n│         ┆            ┆           ┆ 8         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 3197.6    ┆ 2014-08-1 ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2         │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 5981.4    ┆ 2018-11-1 ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 4         │\n│         ┆            ┆           ┆ 4         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 2986.8    ┆ 2020-06-2 ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 6726.6    ┆ 2019-08-0 ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 4         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 76)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>&hellip;</th><th>status_219L</th><th>tenor_203L</th><th>is_approval</th><th>cacccardblochreas_147M_nunique</th><th>cacccardblochreas_147M_mode</th><th>cacccardblochreas_147M_P23_105_103_count</th><th>cacccardblochreas_147M_P19_60_110_count</th><th>cacccardblochreas_147M_P41_107_150_count</th><th>cacccardblochreas_147M_P127_74_114_count</th><th>cacccardblochreas_147M_P133_119_56_count</th><th>cacccardblochreas_147M_P33_145_161_count</th><th>cacccardblochreas_147M_a55475b1_count</th><th>cacccardblochreas_147M_Unknown_count</th><th>cacccardblochreas_147M_P17_56_144_count</th><th>cacccardblochreas_147M_P201_63_60_count</th><th>conts_type_509L_nunique</th><th>conts_type_509L_mode</th><th>conts_type_509L_PRIMARY_MOBILE_count</th><th>conts_type_509L_EMPLOYMENT_PHONE_count</th><th>conts_type_509L_ALTERNATIVE_PHONE_count</th><th>conts_type_509L_WHATSAPP_count</th><th>conts_type_509L_SKYPE_count</th><th>conts_type_509L_PRIMARY_EMAIL_count</th><th>conts_type_509L_PHONE_count</th><th>conts_type_509L_HOME_PHONE_count</th><th>conts_type_509L_SECONDARY_MOBILE_count</th><th>conts_type_509L_Unknown_count</th><th>credacc_cards_status_52L_nunique</th><th>credacc_cards_status_52L_mode</th><th>credacc_cards_status_52L_INACTIVE_count</th><th>credacc_cards_status_52L_RENEWED_count</th><th>credacc_cards_status_52L_ACTIVE_count</th><th>credacc_cards_status_52L_BLOCKED_count</th><th>credacc_cards_status_52L_Unknown_count</th><th>credacc_cards_status_52L_CANCELLED_count</th><th>credacc_cards_status_52L_UNCONFIRMED_count</th><th>num_group2_count</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>&hellip;</td><td>str</td><td>f64</td><td>str</td><td>i64</td><td>str</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>str</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>str</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>2</td><td>0.0</td><td>640.2</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>10000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;D&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr><tr><td>2</td><td>0.0</td><td>1682.4</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>16000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>1</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;EMPLOYMENT_PHONE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr><tr><td>3</td><td>0.0</td><td>6140.0</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;2019-01-07&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>59999.8</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P131_33_167&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2018-05-15&quot;</td><td>&quot;MARRIED&quot;</td><td>&quot;2019-02-07&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>11000.0</td><td>null</td><td>0</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&hellip;</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td></tr><tr><td>4</td><td>0.0</td><td>2556.6</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>&quot;2019-01-08&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P194_82_174&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2019-02-08&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>16000.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;T&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr><tr><td>5</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>&quot;2019-01-16&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P54_133_26&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>62000.0</td><td>null</td><td>0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;T&quot;</td><td>null</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>0.0</td><td>2827.2</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>34550.855</td><td>&quot;2019-12-23&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-09&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-01-18&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>50000.0</td><td>0.0</td><td>1</td><td>46806.6</td><td>30.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;A&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td></tr><tr><td>2703453</td><td>0.0</td><td>3197.6</td><td>&quot;2014-08-15&quot;</td><td>33059.0</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>179.424</td><td>0.0</td><td>398.02402</td><td>198.024</td><td>&quot;AC&quot;</td><td>14.0</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2018-08-07&quot;</td><td>&quot;2018-08-07&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;MARRIED&quot;</td><td>&quot;2014-09-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>28000.0</td><td>33.0</td><td>5</td><td>0.0</td><td>48.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;K&quot;</td><td>48.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;ACTIVE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr><tr><td>2703453</td><td>0.0</td><td>5981.4</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>123800.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2018-11-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2019-12-17&quot;</td><td>&quot;2019-12-17&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2018-12-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>76000.0</td><td>0.0</td><td>2</td><td>0.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;K&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>4</td></tr><tr><td>2703454</td><td>0.0</td><td>2986.8</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>15998.0</td><td>&quot;COL&quot;</td><td>5631.406</td><td>&quot;2020-06-23&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-07-21&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>24000.0</td><td>0.0</td><td>0</td><td>5919.2</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;A&quot;</td><td>6.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td></tr><tr><td>2703454</td><td>0.0</td><td>6726.6</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2019-08-20&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>&quot;2020-08-02&quot;</td><td>&quot;2020-08-02&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;WIDOWED&quot;</td><td>&quot;2019-09-01&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>60000.0</td><td>0.0</td><td>1</td><td>0.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>&quot;K&quot;</td><td>12.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Unknown&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>4</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":4},{"cell_type":"code","source":"full_train_applprev.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T11:02:56.286951Z","iopub.execute_input":"2025-06-13T11:02:56.287362Z","iopub.status.idle":"2025-06-13T11:02:56.31812Z","shell.execute_reply.started":"2025-06-13T11:02:56.287333Z","shell.execute_reply":"2025-06-13T11:02:56.317076Z"}},"outputs":[{"execution_count":38,"output_type":"execute_result","data":{"text/plain":"['case_id',\n 'actualdpd_943P',\n 'annuity_853A',\n 'approvaldate_319D',\n 'byoccupationinc_3656910L',\n 'cancelreason_3545846M',\n 'childnum_21L',\n 'creationdate_885D',\n 'credacc_actualbalance_314A',\n 'credacc_credlmt_575A',\n 'credacc_maxhisbal_375A',\n 'credacc_minhisbal_90A',\n 'credacc_status_367L',\n 'credacc_transactions_402L',\n 'credamount_590A',\n 'credtype_587L',\n 'currdebt_94A',\n 'dateactivated_425D',\n 'district_544M',\n 'downpmt_134A',\n 'dtlastpmt_581D',\n 'dtlastpmtallstes_3545839D',\n 'education_1138M',\n 'employedfrom_700D',\n 'familystate_726L',\n 'firstnonzeroinstldate_307D',\n 'inittransactioncode_279L',\n 'isbidproduct_390L',\n 'isdebitcard_527L',\n 'mainoccupationinc_437A',\n 'maxdpdtolerance_577P',\n 'num_group1',\n 'outstandingdebt_522A',\n 'pmtnum_8L',\n 'postype_4733339M',\n 'profession_152M',\n 'rejectreason_755M',\n 'rejectreasonclient_4145042M',\n 'revolvingaccount_394A',\n 'status_219L',\n 'tenor_203L',\n 'is_approval',\n 'count_is_approval',\n 'cacccardblochreas_147M_nunique',\n 'cacccardblochreas_147M_mode',\n 'cacccardblochreas_147M_P23_105_103_count',\n 'cacccardblochreas_147M_P19_60_110_count',\n 'cacccardblochreas_147M_P41_107_150_count',\n 'cacccardblochreas_147M_P127_74_114_count',\n 'cacccardblochreas_147M_P133_119_56_count',\n 'cacccardblochreas_147M_P33_145_161_count',\n 'cacccardblochreas_147M_a55475b1_count',\n 'cacccardblochreas_147M_Unknown_count',\n 'cacccardblochreas_147M_P17_56_144_count',\n 'cacccardblochreas_147M_P201_63_60_count',\n 'conts_type_509L_nunique',\n 'conts_type_509L_mode',\n 'conts_type_509L_PRIMARY_MOBILE_count',\n 'conts_type_509L_EMPLOYMENT_PHONE_count',\n 'conts_type_509L_ALTERNATIVE_PHONE_count',\n 'conts_type_509L_WHATSAPP_count',\n 'conts_type_509L_SKYPE_count',\n 'conts_type_509L_PRIMARY_EMAIL_count',\n 'conts_type_509L_PHONE_count',\n 'conts_type_509L_HOME_PHONE_count',\n 'conts_type_509L_SECONDARY_MOBILE_count',\n 'conts_type_509L_Unknown_count',\n 'credacc_cards_status_52L_nunique',\n 'credacc_cards_status_52L_mode',\n 'credacc_cards_status_52L_INACTIVE_count',\n 'credacc_cards_status_52L_RENEWED_count',\n 'credacc_cards_status_52L_ACTIVE_count',\n 'credacc_cards_status_52L_BLOCKED_count',\n 'credacc_cards_status_52L_Unknown_count',\n 'credacc_cards_status_52L_CANCELLED_count',\n 'credacc_cards_status_52L_UNCONFIRMED_count',\n 'num_group2_count',\n 'date_decision',\n 'MONTH',\n 'WEEK_NUM',\n 'target',\n 'rate_downpmt_and_credamount']"},"metadata":{}}],"execution_count":38},{"cell_type":"code","source":"import polars as pl\nfrom polars import col\n\n# Tạo thêm cột mới - FIX: Tránh chia cho 0\nfull_train_applprev = full_train_applprev.with_columns(\n    pl.when(col(\"credamount_590A\") != 0)\n      .then(col(\"downpmt_134A\") * 100 / col(\"credamount_590A\"))\n      .otherwise(None)\n      .alias(\"rate_downpmt_and_credamount\")\n)\n\n# Định nghĩa cột chỉ định trạng thái phê duyệt\napproved = col(\"approvaldate_319D\").is_not_null()\n\n# Chọn chỉ các cột cần thiết để tiết kiệm bộ nhớ\nselected_columns = [\n    \"case_id\", \"approvaldate_319D\", \"creationdate_885D\", \"actualdpd_943P\",\n    \"annuity_853A\", \"byoccupationinc_3656910L\", \"cancelreason_3545846M\",\n    \"childnum_21L\", \"credacc_credlmt_575A\", \"credamount_590A\",'credtype_587L', \"currdebt_94A\",\n    \"dateactivated_425D\", \"downpmt_134A\", \"dtlastpmt_581D\",'district_544M',\n    \"dtlastpmtallstes_3545839D\", \"education_1138M\", \"employedfrom_700D\",\n    \"familystate_726L\", \"firstnonzeroinstldate_307D\", \"inittransactioncode_279L\",\n    \"isbidproduct_390L\", \"mainoccupationinc_437A\", \"maxdpdtolerance_577P\",\n    \"outstandingdebt_522A\", \"pmtnum_8L\", \"postype_4733339M\", \"profession_152M\",\n    \"rejectreason_755M\", \"rejectreasonclient_4145042M\", \"revolvingaccount_394A\",\n    \"status_219L\", \"tenor_203L\", \"cacccardblochreas_147M_mode\",\n    \"credacc_cards_status_52L_mode\", 'rate_downpmt_and_credamount'\n]\n\n# Chuyển đổi các cột date sang datetime trước khi thực hiện các phép tính\ndf = full_train_applprev.select(selected_columns).with_columns([\n    # Chuyển đổi các cột date thành datetime\n    col(\"approvaldate_319D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"creationdate_885D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dateactivated_425D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dtlastpmt_581D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dtlastpmtallstes_3545839D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"employedfrom_700D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"firstnonzeroinstldate_307D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n]).sort(by=[\"case_id\", \"creationdate_885D\"])\n\n# Tính toán tất cả các feature trong một lần group_by duy nhất\nfeatures = df.group_by(\"case_id\").agg([\n    # Đếm đơn duyệt và đơn apply\n    pl.count().alias(\"num_applications\"),\n    approved.sum().alias(\"num_approved\"),\n    \n    # Tỉ lệ đơn được duyệt - FIX: Tránh chia cho 0\n    pl.when(pl.count() > 0)\n      .then(approved.sum() / pl.count())\n      .otherwise(None)\n      .alias(\"rate_approval_application\"),\n    \n    # actualdpd_943P - chỉ đơn được duyệt\n    col(\"actualdpd_943P\").filter(approved).max().alias(\"actualdpd_943P_approved_max\"),\n    col(\"actualdpd_943P\").filter(approved).mean().alias(\"actualdpd_943P_approved_avg\"),\n    col(\"actualdpd_943P\").filter(approved).min().alias(\"actualdpd_943P_approved_min\"),\n    col(\"actualdpd_943P\").filter(approved).std().alias(\"actualdpd_943P_approved_std\"),\n    col(\"actualdpd_943P\").filter(approved).last().alias(\"actualdpd_943P_approved_last\"),\n   \n    # annuity_853A - cho cả 2 loại đơn\n    col(\"annuity_853A\").filter(approved).max().alias(\"annuity_853A_approved_max\"),\n    col(\"annuity_853A\").filter(approved).mean().alias(\"annuity_853A_approved_avg\"),\n    col(\"annuity_853A\").filter(approved).min().alias(\"annuity_853A_approved_min\"),\n    col(\"annuity_853A\").filter(approved).std().alias(\"annuity_853A_approved_std\"),\n    col(\"annuity_853A\").filter(approved).last().alias(\"annuity_853A_approved_last\"),\n    col(\"annuity_853A\").filter(~approved).max().alias(\"annuity_853A_rejected_max\"),\n    col(\"annuity_853A\").filter(~approved).mean().alias(\"annuity_853A_rejected_avg\"),\n    col(\"annuity_853A\").filter(~approved).min().alias(\"annuity_853A_rejected_min\"),\n    col(\"annuity_853A\").filter(~approved).std().alias(\"annuity_853A_rejected_std\"),\n    col(\"annuity_853A\").filter(~approved).last().alias(\"annuity_853A_rejected_last\"),\n    col(\"annuity_853A\").last().alias(\"annuity_853A_last\"),\n    \n    # approvaldate_319D - chỉ đơn được duyệt\n    col(\"approvaldate_319D\").filter(approved).last().alias(\"approvaldate_319D_last\"),\n    (col(\"approvaldate_319D\").filter(approved).max() - col(\"approvaldate_319D\").filter(approved).min()).dt.total_days().alias(\"approvaldate_319D_duration\"),\n    \n    # FIX: Sửa logic chia cho approved.sum() - 1\n    pl.when(approved.sum() > 1)\n      .then((col(\"approvaldate_319D\").filter(approved).max() - col(\"approvaldate_319D\").filter(approved).min()).dt.total_days() / (approved.sum() - 1))\n      .otherwise(0)\n      .alias(\"approvaldate_319D_interval\"),\n\n    # byoccupationinc_3656910L - toàn bộ đơn\n    col(\"byoccupationinc_3656910L\").max().alias(\"byoccupationinc_3656910L_max\"),\n    col(\"byoccupationinc_3656910L\").mean().alias(\"byoccupationinc_3656910L_avg\"),\n    col(\"byoccupationinc_3656910L\").min().alias(\"byoccupationinc_3656910L_min\"),\n    col(\"byoccupationinc_3656910L\").std().alias(\"byoccupationinc_3656910L_std\"),\n    col(\"byoccupationinc_3656910L\").last().alias(\"byoccupationinc_3656910L_last\"),\n    \n    # cancelreason_3545846M\n    col(\"cancelreason_3545846M\").filter(approved).mode().first().alias(\"cancelreason_3545846M_approved_mode\"),\n    col(\"cancelreason_3545846M\").filter(~approved).mode().first().alias(\"cancelreason_3545846M_rejected_mode\"),\n    col(\"cancelreason_3545846M\").mode().first().alias(\"cancelreason_3545846M_overall_mode\"),\n    col(\"cancelreason_3545846M\").last().alias(\"cancelreason_3545846M_last\"),\n    \n    # childnum_21L\n    col(\"childnum_21L\").filter(approved).mean().alias(\"childnum_21L_approved_avg\"),\n    col(\"childnum_21L\").filter(~approved).mean().alias(\"childnum_21L_rejected_avg\"),\n    col(\"childnum_21L\").last().alias(\"childnum_21L_last\"),\n    \n    # creationdate_885D\n    col(\"creationdate_885D\").last().alias(\"creationdate_885D_last\"),\n    (col(\"creationdate_885D\").max() - col(\"creationdate_885D\").min()).dt.total_days().alias(\"creationdate_885D_duration_all\"),\n    \n    # FIX: Sửa logic chia\n    pl.when(approved.sum() > 1)\n      .then((col(\"creationdate_885D\").filter(approved).max() - col(\"creationdate_885D\").filter(approved).min()).dt.total_days() / (approved.sum() - 1))\n      .otherwise(0)\n      .alias(\"creationdate_885D_interval_approved\"),\n      \n    pl.when((~approved).sum() > 1)\n      .then((col(\"creationdate_885D\").filter(~approved).max() - col(\"creationdate_885D\").filter(~approved).min()).dt.total_days() / ((~approved).sum() - 1))\n      .otherwise(0)\n      .alias(\"creationdate_885D_interval_rejected\"),\n    \n    # credacc_credlmt_575A\n    col(\"credacc_credlmt_575A\").filter(approved).max().alias(\"credacc_credlmt_575A_approved_max\"),\n    col(\"credacc_credlmt_575A\").filter(approved).mean().alias(\"credacc_credlmt_575A_approved_avg\"),\n    col(\"credacc_credlmt_575A\").filter(approved).min().alias(\"credacc_credlmt_575A_approved_min\"),\n    col(\"credacc_credlmt_575A\").filter(approved).std().alias(\"credacc_credlmt_575A_approved_std\"),\n    col(\"credacc_credlmt_575A\").filter(approved).last().alias(\"credacc_credlmt_575A_approved_last\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).max().alias(\"credacc_credlmt_575A_rejected_max\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).mean().alias(\"credacc_credlmt_575A_rejected_avg\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).min().alias(\"credacc_credlmt_575A_rejected_min\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).std().alias(\"credacc_credlmt_575A_rejected_std\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).last().alias(\"credacc_credlmt_575A_rejected_last\"),\n    col(\"credacc_credlmt_575A\").last().alias(\"credacc_credlmt_575A_last\"),\n    \n    # credamount_590A\n    col(\"credamount_590A\").filter(approved).max().alias(\"credamount_590A_approved_max\"),\n    col(\"credamount_590A\").filter(approved).mean().alias(\"credamount_590A_approved_avg\"),\n    col(\"credamount_590A\").filter(approved).min().alias(\"credamount_590A_approved_min\"),\n    col(\"credamount_590A\").filter(approved).std().alias(\"credamount_590A_approved_std\"),\n    col(\"credamount_590A\").filter(approved).last().alias(\"credamount_590A_approved_last\"),\n    col(\"credamount_590A\").filter(~approved).max().alias(\"credamount_590A_rejected_max\"),\n    col(\"credamount_590A\").filter(~approved).mean().alias(\"credamount_590A_rejected_avg\"),\n    col(\"credamount_590A\").filter(~approved).min().alias(\"credamount_590A_rejected_min\"),\n    col(\"credamount_590A\").filter(~approved).std().alias(\"credamount_590A_rejected_std\"),\n    col(\"credamount_590A\").filter(~approved).last().alias(\"credamount_590A_rejected_last\"),\n    col(\"credamount_590A\").last().alias(\"credamount_590A_last\"),\n\n    # credtype_587L\n    col(\"credtype_587L\").mode().first().alias(\"credtype_587L_mode\"),\n    col(\"credtype_587L\").last().alias(\"credtype_587L_last\"),\n    \n    # currdebt_94A\n    col(\"currdebt_94A\").filter(approved).max().alias(\"currdebt_94A_approved_max\"),\n    col(\"currdebt_94A\").filter(approved).mean().alias(\"currdebt_94A_approved_avg\"),\n    col(\"currdebt_94A\").filter(approved).min().alias(\"currdebt_94A_approved_min\"),\n    col(\"currdebt_94A\").filter(approved).std().alias(\"currdebt_94A_approved_std\"),\n    col(\"currdebt_94A\").filter(approved).last().alias(\"currdebt_94A_approved_last\"),\n    col(\"currdebt_94A\").filter(~approved).max().alias(\"currdebt_94A_rejected_max\"),\n    col(\"currdebt_94A\").filter(~approved).mean().alias(\"currdebt_94A_rejected_avg\"),\n    col(\"currdebt_94A\").filter(~approved).min().alias(\"currdebt_94A_rejected_min\"),\n    col(\"currdebt_94A\").filter(~approved).std().alias(\"currdebt_94A_rejected_std\"),\n    col(\"currdebt_94A\").filter(~approved).last().alias(\"currdebt_94A_rejected_last\"),\n    col(\"currdebt_94A\").last().alias(\"currdebt_94A_last\"),\n    \n    # district_544M\n    col(\"district_544M\").mode().first().alias(\"district_544M_mode\"),\n    col(\"district_544M\").last().alias(\"district_544M_last\"),\n    \n    # downpmt_134A\n    col(\"downpmt_134A\").filter(approved).max().alias(\"downpmt_134A_approved_max\"),\n    col(\"downpmt_134A\").filter(approved).mean().alias(\"downpmt_134A_approved_avg\"),\n    col(\"downpmt_134A\").filter(approved).min().alias(\"downpmt_134A_approved_min\"),\n    col(\"downpmt_134A\").filter(approved).std().alias(\"downpmt_134A_approved_std\"),\n    col(\"downpmt_134A\").filter(approved).last().alias(\"downpmt_134A_approved_last\"),\n    col(\"downpmt_134A\").filter(~approved).max().alias(\"downpmt_134A_rejected_max\"),\n    col(\"downpmt_134A\").filter(~approved).mean().alias(\"downpmt_134A_rejected_avg\"),\n    col(\"downpmt_134A\").filter(~approved).min().alias(\"downpmt_134A_rejected_min\"),\n    col(\"downpmt_134A\").filter(~approved).std().alias(\"downpmt_134A_rejected_std\"),\n    col(\"downpmt_134A\").filter(~approved).last().alias(\"downpmt_134A_rejected_last\"),\n    col(\"downpmt_134A\").last().alias(\"downpmt_134A_last\"),\n    \n    # rate_downpmt_and_credamount\n    col(\"rate_downpmt_and_credamount\").filter(approved).max().alias(\"rate_downpmt_and_credamount_approved_max\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).mean().alias(\"rate_downpmt_and_credamount_approved_avg\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).min().alias(\"rate_downpmt_and_credamount_approved_min\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).std().alias(\"rate_downpmt_and_credamount_approved_std\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).last().alias(\"rate_downpmt_and_credamount_approved_last\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).max().alias(\"rate_downpmt_and_credamount_rejected_max\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).mean().alias(\"rate_downpmt_and_credamount_rejected_avg\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).min().alias(\"rate_downpmt_and_credamount_rejected_min\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).std().alias(\"rate_downpmt_and_credamount_rejected_std\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).last().alias(\"rate_downpmt_and_credamount_rejected_last\"),\n    col(\"rate_downpmt_and_credamount\").last().alias(\"rate_downpmt_and_credamount_last\"),\n    \n    # education_1138M\n    col(\"education_1138M\").mode().first().alias(\"education_1138M_mode\"),\n    col(\"education_1138M\").last().alias(\"education_1138M_last\"),\n    \n    # employedfrom_700D - FIX: Thêm null check\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .last().alias(\"employedfrom_creationdate_last\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).mean().alias(\"employedfrom_creationdate_approved_avg\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).max().alias(\"employedfrom_creationdate_approved_max\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).min().alias(\"employedfrom_creationdate_approved_min\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).std().alias(\"employedfrom_creationdate_approved_std\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).last().alias(\"employedfrom_creationdate_approved_last\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).mean().alias(\"employedfrom_creationdate_rejected_avg\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).max().alias(\"employedfrom_creationdate_rejected_max\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).min().alias(\"employedfrom_creationdate_rejected_min\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).std().alias(\"employedfrom_creationdate_rejected_std\"),\n    \n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).last().alias(\"employedfrom_creationdate_rejected_last\"),\n    \n    # familystate_726L\n    col(\"familystate_726L\").mode().first().alias(\"familystate_726L_mode\"),\n    col(\"familystate_726L\").last().alias(\"familystate_726L_last\"),\n    \n    # firstnonzeroinstldate_307D - FIX: Thêm null check\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .last().alias(\"diff_firstnonzeroinstldate_creationdate_approved_last\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).mean().alias(\"diff_firstnonzeroinstldate_creationdate_approved_avg\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).max().alias(\"diff_firstnonzeroinstldate_creationdate_approved_max\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).min().alias(\"diff_firstnonzeroinstldate_creationdate_approved_min\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).std().alias(\"diff_firstnonzeroinstldate_creationdate_approved_std\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).mean().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_avg\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).max().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_max\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).min().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_min\"),\n    \n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).std().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_std\"),\n    \n    # inittransactioncode_279L\n    col(\"inittransactioncode_279L\").mode().first().alias(\"inittransactioncode_279L_mode\"),\n    col(\"inittransactioncode_279L\").last().alias(\"inittransactioncode_279L_last\"),\n    \n    # isbidproduct_390L\n    col(\"isbidproduct_390L\").filter(approved).sum().alias(\"isbidproduct_390L_approved_count\"),\n    col(\"isbidproduct_390L\").filter(approved).last().alias(\"isbidproduct_390L_approved_last\"),\n    col(\"isbidproduct_390L\").filter(~approved).sum().alias(\"isbidproduct_390L_rejected_count\"),\n    col(\"isbidproduct_390L\").filter(~approved).last().alias(\"isbidproduct_390L_rejected_last\"),\n    \n    # mainoccupationinc_437A\n    col(\"mainoccupationinc_437A\").filter(approved).max().alias(\"mainoccupationinc_437A_approved_max\"),\n    col(\"mainoccupationinc_437A\").filter(approved).mean().alias(\"mainoccupationinc_437A_approved_avg\"),\n    col(\"mainoccupationinc_437A\").filter(approved).min().alias(\"mainoccupationinc_437A_approved_min\"),\n    col(\"mainoccupationinc_437A\").filter(approved).std().alias(\"mainoccupationinc_437A_approved_std\"),\n    col(\"mainoccupationinc_437A\").filter(approved).last().alias(\"mainoccupationinc_437A_approved_last\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).max().alias(\"mainoccupationinc_437A_rejected_max\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).mean().alias(\"mainoccupationinc_437A_rejected_avg\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).min().alias(\"mainoccupationinc_437A_rejected_min\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).std().alias(\"mainoccupationinc_437A_rejected_std\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).last().alias(\"mainoccupationinc_437A_rejected_last\"),\n    col(\"mainoccupationinc_437A\").last().alias(\"mainoccupationinc_437A_last\"),\n    \n    # maxdpdtolerance_577P - chỉ đơn được duyệt\n    col(\"maxdpdtolerance_577P\").filter(approved).max().alias(\"maxdpdtolerance_577P_approved_max\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).mean().alias(\"maxdpdtolerance_577P_approved_avg\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).min().alias(\"maxdpdtolerance_577P_approved_min\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).std().alias(\"maxdpdtolerance_577P_approved_std\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).sum().alias(\"maxdpdtolerance_577P_approved_sum\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).last().alias(\"maxdpdtolerance_577P_approved_last\"),\n    \n    # outstandingdebt_522A\n    col(\"outstandingdebt_522A\").filter(approved).max().alias(\"outstandingdebt_522A_approved_max\"),\n    col(\"outstandingdebt_522A\").filter(approved).mean().alias(\"outstandingdebt_522A_approved_avg\"),\n    col(\"outstandingdebt_522A\").filter(approved).min().alias(\"outstandingdebt_522A_approved_min\"),\n    col(\"outstandingdebt_522A\").filter(approved).std().alias(\"outstandingdebt_522A_approved_std\"),\n    col(\"outstandingdebt_522A\").filter(approved).last().alias(\"outstandingdebt_522A_approved_last\"),\n    col(\"outstandingdebt_522A\").filter(~approved).max().alias(\"outstandingdebt_522A_rejected_max\"),\n    col(\"outstandingdebt_522A\").filter(~approved).mean().alias(\"outstandingdebt_522A_rejected_avg\"),\n    col(\"outstandingdebt_522A\").filter(~approved).min().alias(\"outstandingdebt_522A_rejected_min\"),\n    col(\"outstandingdebt_522A\").filter(~approved).std().alias(\"outstandingdebt_522A_rejected_std\"),\n    col(\"outstandingdebt_522A\").filter(~approved).last().alias(\"outstandingdebt_522A_rejected_last\"),\n    col(\"outstandingdebt_522A\").last().alias(\"outstandingdebt_522A_last\"),\n    \n    # pmtnum_8L\n    col(\"pmtnum_8L\").filter(approved).max().alias(\"pmtnum_8L_approved_max\"),\n    col(\"pmtnum_8L\").filter(approved).mean().alias(\"pmtnum_8L_approved_avg\"),\n    col(\"pmtnum_8L\").filter(approved).min().alias(\"pmtnum_8L_approved_min\"),\n    col(\"pmtnum_8L\").filter(approved).std().alias(\"pmtnum_8L_approved_std\"),\n    col(\"pmtnum_8L\").filter(approved).last().alias(\"pmtnum_8L_approved_last\"),\n    col(\"pmtnum_8L\").filter(~approved).max().alias(\"pmtnum_8L_rejected_max\"),\n    col(\"pmtnum_8L\").filter(~approved).mean().alias(\"pmtnum_8L_rejected_avg\"),\n    col(\"pmtnum_8L\").filter(~approved).min().alias(\"pmtnum_8L_rejected_min\"),\n    col(\"pmtnum_8L\").filter(~approved).std().alias(\"pmtnum_8L_rejected_std\"),\n    col(\"pmtnum_8L\").filter(~approved).last().alias(\"pmtnum_8L_rejected_last\"),\n    col(\"pmtnum_8L\").last().alias(\"pmtnum_8L_last\"),\n    \n    # postype_4733339M\n    col(\"postype_4733339M\").mode().first().alias(\"postype_4733339M_mode\"),\n    col(\"postype_4733339M\").last().alias(\"postype_4733339M_last\"),\n    \n    # profession_152M\n    col(\"profession_152M\").mode().first().alias(\"profession_152M_mode\"),\n    col(\"profession_152M\").last().alias(\"profession_152M_last\"),\n    \n    # rejectreason_755M\n    col(\"rejectreason_755M\").filter(approved).mode().first().alias(\"rejectreason_755M_approved_mode\"),\n    col(\"rejectreason_755M\").filter(~approved).mode().first().alias(\"rejectreason_755M_rejected_mode\"),\n    col(\"rejectreason_755M\").mode().first().alias(\"rejectreason_755M_overall_mode\"),\n    col(\"rejectreason_755M\").last().alias(\"rejectreason_755M_last\"),\n    \n    # rejectreasonclient_4145042M\n    col(\"rejectreasonclient_4145042M\").filter(approved).mode().first().alias(\"rejectreasonclient_4145042M_approved_mode\"),\n    col(\"rejectreasonclient_4145042M\").filter(~approved).mode().first().alias(\"rejectreasonclient_4145042M_rejected_mode\"),\n    col(\"rejectreasonclient_4145042M\").mode().first().alias(\"rejectreasonclient_4145042M_overall_mode\"),\n    col(\"rejectreasonclient_4145042M\").last().alias(\"rejectreasonclient_4145042M_last\"),\n\n    # status_219L\n    col(\"status_219L\").mode().first().alias(\"status_219L_mode\"),\n    col(\"status_219L\").last().alias(\"status_219L_last\"),\n    \n    # tenor_203L\n    col(\"tenor_203L\").filter(approved).max().alias(\"tenor_203L_approved_max\"),\n    col(\"tenor_203L\").filter(approved).mean().alias(\"tenor_203L_approved_avg\"),\n    col(\"tenor_203L\").filter(approved).min().alias(\"tenor_203L_approved_min\"),\n    col(\"tenor_203L\").filter(approved).std().alias(\"tenor_203L_approved_std\"),\n    col(\"tenor_203L\").filter(approved).last().alias(\"tenor_203L_approved_last\"),\n    col(\"tenor_203L\").filter(~approved).max().alias(\"tenor_203L_rejected_max\"),\n    col(\"tenor_203L\").filter(~approved).mean().alias(\"tenor_203L_rejected_avg\"),\n    col(\"tenor_203L\").filter(~approved).min().alias(\"tenor_203L_rejected_min\"),\n    col(\"tenor_203L\").filter(~approved).std().alias(\"tenor_203L_rejected_std\"),\n    col(\"tenor_203L\").filter(~approved).last().alias(\"tenor_203L_rejected_last\"),\n    col(\"tenor_203L\").last().alias(\"tenor_203L_last\"),\n    \n    # cacccardblochreas_147M\n    col(\"cacccardblochreas_147M_mode\").mode().first().alias(\"cacccardblochreas_147M_mode\"),\n    \n    # credacc_cards_status_52L\n    col(\"credacc_cards_status_52L_mode\").mode().first().alias(\"credacc_cards_status_52L_mode\")\n])\n\n# Hiển thị kết quả\nfeatures","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:41:12.949603Z","iopub.execute_input":"2025-06-13T16:41:12.949984Z","iopub.status.idle":"2025-06-13T16:42:26.794042Z","shell.execute_reply.started":"2025-06-13T16:41:12.949959Z","shell.execute_reply":"2025-06-13T16:42:26.792895Z"}},"outputs":[{"name":"stderr","text":"/tmp/ipykernel_31/3161412596.py:45: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n  pl.count().alias(\"num_applications\"),\n/tmp/ipykernel_31/3161412596.py:49: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n  pl.when(pl.count() > 0)\n/tmp/ipykernel_31/3161412596.py:50: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n  .then(approved.sum() / pl.count())\n","output_type":"stream"},{"execution_count":21,"output_type":"execute_result","data":{"text/plain":"shape: (1_221_522, 194)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ num_applic ┆ num_appro ┆ rate_appr ┆ … ┆ tenor_203 ┆ tenor_203 ┆ cacccardb ┆ credacc_c │\n│ ---     ┆ ations     ┆ ved       ┆ oval_appl ┆   ┆ L_rejecte ┆ L_last    ┆ lochreas_ ┆ ards_stat │\n│ i64     ┆ ---        ┆ ---       ┆ ication   ┆   ┆ d_last    ┆ ---       ┆ 147M_mode ┆ us_52L_mo │\n│         ┆ u32        ┆ u32       ┆ ---       ┆   ┆ ---       ┆ f64       ┆ ---       ┆ de        │\n│         ┆            ┆           ┆ f64       ┆   ┆ f64       ┆           ┆ str       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ str       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 2          ┆ 0         ┆ 0.0       ┆ … ┆ 12.0      ┆ 12.0      ┆ Unknown   ┆ Unknown   │\n│ 3       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ 12.0      ┆ 12.0      ┆ Unknown   ┆ Unknown   │\n│ 4       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ 24.0      ┆ 24.0      ┆ Unknown   ┆ Unknown   │\n│ 5       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ null      ┆ null      ┆ Unknown   ┆ Unknown   │\n│ 6       ┆ 3          ┆ 0         ┆ 0.0       ┆ … ┆ 11.0      ┆ 11.0      ┆ Unknown   ┆ Unknown   │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703450 ┆ 13         ┆ 11        ┆ 0.846154  ┆ … ┆ 6.0       ┆ 12.0      ┆ a55475b1  ┆ Unknown   │\n│ 2703451 ┆ 6          ┆ 6         ┆ 1.0       ┆ … ┆ null      ┆ 24.0      ┆ a55475b1  ┆ Unknown   │\n│ 2703452 ┆ 3          ┆ 2         ┆ 0.666667  ┆ … ┆ 14.0      ┆ 14.0      ┆ a55475b1  ┆ Unknown   │\n│ 2703453 ┆ 9          ┆ 8         ┆ 0.888889  ┆ … ┆ 6.0       ┆ 30.0      ┆ a55475b1  ┆ Unknown   │\n│ 2703454 ┆ 2          ┆ 2         ┆ 1.0       ┆ … ┆ null      ┆ 6.0       ┆ a55475b1  ┆ Unknown   │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_221_522, 194)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>num_applications</th><th>num_approved</th><th>rate_approval_application</th><th>actualdpd_943P_approved_max</th><th>actualdpd_943P_approved_avg</th><th>actualdpd_943P_approved_min</th><th>actualdpd_943P_approved_std</th><th>actualdpd_943P_approved_last</th><th>annuity_853A_approved_max</th><th>annuity_853A_approved_avg</th><th>annuity_853A_approved_min</th><th>annuity_853A_approved_std</th><th>annuity_853A_approved_last</th><th>annuity_853A_rejected_max</th><th>annuity_853A_rejected_avg</th><th>annuity_853A_rejected_min</th><th>annuity_853A_rejected_std</th><th>annuity_853A_rejected_last</th><th>annuity_853A_last</th><th>approvaldate_319D_last</th><th>approvaldate_319D_duration</th><th>approvaldate_319D_interval</th><th>byoccupationinc_3656910L_max</th><th>byoccupationinc_3656910L_avg</th><th>byoccupationinc_3656910L_min</th><th>byoccupationinc_3656910L_std</th><th>byoccupationinc_3656910L_last</th><th>cancelreason_3545846M_approved_mode</th><th>cancelreason_3545846M_rejected_mode</th><th>cancelreason_3545846M_overall_mode</th><th>cancelreason_3545846M_last</th><th>childnum_21L_approved_avg</th><th>childnum_21L_rejected_avg</th><th>childnum_21L_last</th><th>creationdate_885D_last</th><th>creationdate_885D_duration_all</th><th>&hellip;</th><th>pmtnum_8L_approved_avg</th><th>pmtnum_8L_approved_min</th><th>pmtnum_8L_approved_std</th><th>pmtnum_8L_approved_last</th><th>pmtnum_8L_rejected_max</th><th>pmtnum_8L_rejected_avg</th><th>pmtnum_8L_rejected_min</th><th>pmtnum_8L_rejected_std</th><th>pmtnum_8L_rejected_last</th><th>pmtnum_8L_last</th><th>postype_4733339M_mode</th><th>postype_4733339M_last</th><th>profession_152M_mode</th><th>profession_152M_last</th><th>rejectreason_755M_approved_mode</th><th>rejectreason_755M_rejected_mode</th><th>rejectreason_755M_overall_mode</th><th>rejectreason_755M_last</th><th>rejectreasonclient_4145042M_approved_mode</th><th>rejectreasonclient_4145042M_rejected_mode</th><th>rejectreasonclient_4145042M_overall_mode</th><th>rejectreasonclient_4145042M_last</th><th>status_219L_mode</th><th>status_219L_last</th><th>tenor_203L_approved_max</th><th>tenor_203L_approved_avg</th><th>tenor_203L_approved_min</th><th>tenor_203L_approved_std</th><th>tenor_203L_approved_last</th><th>tenor_203L_rejected_max</th><th>tenor_203L_rejected_avg</th><th>tenor_203L_rejected_min</th><th>tenor_203L_rejected_std</th><th>tenor_203L_rejected_last</th><th>tenor_203L_last</th><th>cacccardblochreas_147M_mode</th><th>credacc_cards_status_52L_mode</th></tr><tr><td>i64</td><td>u32</td><td>u32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs]</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>datetime[μs]</td><td>i64</td><td>&hellip;</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>2</td><td>2</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1682.4</td><td>1161.3</td><td>640.2</td><td>736.946687</td><td>1682.4</td><td>1682.4</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>2013-04-03 00:00:00</td><td>0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>18.0</td><td>12.0</td><td>8.485281</td><td>12.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>18.0</td><td>12.0</td><td>8.485281</td><td>12.0</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>3</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6140.0</td><td>6140.0</td><td>6140.0</td><td>null</td><td>6140.0</td><td>6140.0</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>null</td><td>null</td><td>2019-01-07 00:00:00</td><td>0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>4</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2556.6</td><td>2556.6</td><td>2556.6</td><td>null</td><td>2556.6</td><td>2556.6</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>&quot;P24_27_36&quot;</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>null</td><td>null</td><td>2019-01-08 00:00:00</td><td>0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>24.0</td><td>24.0</td><td>null</td><td>24.0</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>24.0</td><td>24.0</td><td>null</td><td>24.0</td><td>24.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>5</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>&quot;P85_114_140&quot;</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>null</td><td>null</td><td>2019-01-16 00:00:00</td><td>0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>6</td><td>3</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>4189.6</td><td>2357.933333</td><td>1110.4</td><td>1620.579209</td><td>1773.8</td><td>1773.8</td><td>null</td><td>null</td><td>0.0</td><td>1.0</td><td>1.0</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>0.0</td><td>null</td><td>2018-09-12 00:00:00</td><td>1394</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>15.333333</td><td>11.0</td><td>7.505553</td><td>11.0</td><td>11.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>15.333333</td><td>11.0</td><td>7.505553</td><td>11.0</td><td>11.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>13</td><td>11</td><td>0.846154</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>4965.2</td><td>2528.000018</td><td>0.0</td><td>1407.086436</td><td>2102.2</td><td>30875.0</td><td>30875.0</td><td>30875.0</td><td>null</td><td>30875.0</td><td>2102.2</td><td>2019-10-09 00:00:00</td><td>4502</td><td>450.2</td><td>1.0</td><td>0.5</td><td>0.0</td><td>0.707107</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.333333</td><td>null</td><td>null</td><td>2019-10-09 00:00:00</td><td>4502</td><td>&hellip;</td><td>12.5</td><td>3.0</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P99_56_166&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;K&quot;</td><td>24.0</td><td>12.5</td><td>3.0</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>2703451</td><td>6</td><td>6</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>12809.2</td><td>6472.866667</td><td>0.0</td><td>4082.865905</td><td>6191.6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6191.6</td><td>2019-09-30 00:00:00</td><td>1536</td><td>307.2</td><td>10340.0</td><td>10340.0</td><td>10340.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>2019-09-30 00:00:00</td><td>1536</td><td>&hellip;</td><td>18.0</td><td>12.0</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>24.0</td><td>18.0</td><td>12.0</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>2703452</td><td>3</td><td>2</td><td>0.666667</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>3243.4001</td><td>2372.20005</td><td>1501.0</td><td>1232.062926</td><td>1501.0</td><td>9048.0</td><td>9048.0</td><td>9048.0</td><td>null</td><td>9048.0</td><td>9048.0</td><td>2019-08-19 00:00:00</td><td>337</td><td>337.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>null</td><td>null</td><td>null</td><td>2020-08-21 00:00:00</td><td>705</td><td>&hellip;</td><td>4.5</td><td>3.0</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P67_102_161&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;T&quot;</td><td>6.0</td><td>4.5</td><td>3.0</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>2703453</td><td>9</td><td>8</td><td>0.888889</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>5981.4</td><td>1962.125002</td><td>0.0</td><td>1972.919296</td><td>2827.2</td><td>416.2</td><td>416.2</td><td>416.2</td><td>null</td><td>416.2</td><td>2827.2</td><td>2019-12-18 00:00:00</td><td>2363</td><td>337.571429</td><td>33059.0</td><td>33059.0</td><td>33059.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>0.0</td><td>null</td><td>2019-12-18 00:00:00</td><td>2363</td><td>&hellip;</td><td>22.714286</td><td>9.0</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>48.0</td><td>22.714286</td><td>9.0</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td></tr><tr><td>2703454</td><td>2</td><td>2</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>6726.6</td><td>4856.7</td><td>2986.8</td><td>2644.43794</td><td>2986.8</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2986.8</td><td>2020-06-21 00:00:00</td><td>325</td><td>325.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>2020-06-21 00:00:00</td><td>325</td><td>&hellip;</td><td>9.0</td><td>6.0</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;A&quot;</td><td>&quot;A&quot;</td><td>12.0</td><td>9.0</td><td>6.0</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":21},{"cell_type":"code","source":"features = features.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n)\nfeatures = features.with_columns(\n    col(\"date_decision\").str.to_datetime(format=\"%Y-%m-%d\", strict=False)\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:42:26.797412Z","iopub.execute_input":"2025-06-13T16:42:26.797721Z","iopub.status.idle":"2025-06-13T16:42:28.329834Z","shell.execute_reply.started":"2025-06-13T16:42:26.797696Z","shell.execute_reply":"2025-06-13T16:42:28.328813Z"}},"outputs":[],"execution_count":22},{"cell_type":"code","source":"features = features.with_columns([\n    (col(\"date_decision\") - col(\"approvaldate_319D_last\"))\n        .dt.total_days()\n        .abs()\n        .alias(\"diff_date_decision_vs_approval_last\"),\n\n    (col(\"date_decision\") - col(\"creationdate_885D_last\"))\n        .dt.total_days()\n        .abs()\n        .alias(\"diff_date_decision_vs_creation_last\"),\n])\n\n# Drop các cột không còn cần thiết\nfeatures = features.drop([\n    \"approvaldate_319D_last\",\n    \"creationdate_885D_last\",\n    \"date_decision\"\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:44:25.943517Z","iopub.execute_input":"2025-06-13T16:44:25.943953Z","iopub.status.idle":"2025-06-13T16:44:25.988675Z","shell.execute_reply.started":"2025-06-13T16:44:25.943926Z","shell.execute_reply":"2025-06-13T16:44:25.987784Z"}},"outputs":[],"execution_count":24},{"cell_type":"code","source":"features.schema\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:44:31.18669Z","iopub.execute_input":"2025-06-13T16:44:31.187025Z","iopub.status.idle":"2025-06-13T16:44:31.200188Z","shell.execute_reply.started":"2025-06-13T16:44:31.187001Z","shell.execute_reply":"2025-06-13T16:44:31.198956Z"}},"outputs":[{"execution_count":25,"output_type":"execute_result","data":{"text/plain":"Schema([('case_id', Int64),\n        ('num_applications', UInt32),\n        ('num_approved', UInt32),\n        ('rate_approval_application', Float64),\n        ('actualdpd_943P_approved_max', Float64),\n        ('actualdpd_943P_approved_avg', Float64),\n        ('actualdpd_943P_approved_min', Float64),\n        ('actualdpd_943P_approved_std', Float64),\n        ('actualdpd_943P_approved_last', Float64),\n        ('annuity_853A_approved_max', Float64),\n        ('annuity_853A_approved_avg', Float64),\n        ('annuity_853A_approved_min', Float64),\n        ('annuity_853A_approved_std', Float64),\n        ('annuity_853A_approved_last', Float64),\n        ('annuity_853A_rejected_max', Float64),\n        ('annuity_853A_rejected_avg', Float64),\n        ('annuity_853A_rejected_min', Float64),\n        ('annuity_853A_rejected_std', Float64),\n        ('annuity_853A_rejected_last', Float64),\n        ('annuity_853A_last', Float64),\n        ('approvaldate_319D_duration', Int64),\n        ('approvaldate_319D_interval', Float64),\n        ('byoccupationinc_3656910L_max', Float64),\n        ('byoccupationinc_3656910L_avg', Float64),\n        ('byoccupationinc_3656910L_min', Float64),\n        ('byoccupationinc_3656910L_std', Float64),\n        ('byoccupationinc_3656910L_last', Float64),\n        ('cancelreason_3545846M_approved_mode', String),\n        ('cancelreason_3545846M_rejected_mode', String),\n        ('cancelreason_3545846M_overall_mode', String),\n        ('cancelreason_3545846M_last', String),\n        ('childnum_21L_approved_avg', Float64),\n        ('childnum_21L_rejected_avg', Float64),\n        ('childnum_21L_last', Float64),\n        ('creationdate_885D_duration_all', Int64),\n        ('creationdate_885D_interval_approved', Float64),\n        ('creationdate_885D_interval_rejected', Float64),\n        ('credacc_credlmt_575A_approved_max', Float64),\n        ('credacc_credlmt_575A_approved_avg', Float64),\n        ('credacc_credlmt_575A_approved_min', Float64),\n        ('credacc_credlmt_575A_approved_std', Float64),\n        ('credacc_credlmt_575A_approved_last', Float64),\n        ('credacc_credlmt_575A_rejected_max', Float64),\n        ('credacc_credlmt_575A_rejected_avg', Float64),\n        ('credacc_credlmt_575A_rejected_min', Float64),\n        ('credacc_credlmt_575A_rejected_std', Float64),\n        ('credacc_credlmt_575A_rejected_last', Float64),\n        ('credacc_credlmt_575A_last', Float64),\n        ('credamount_590A_approved_max', Float64),\n        ('credamount_590A_approved_avg', Float64),\n        ('credamount_590A_approved_min', Float64),\n        ('credamount_590A_approved_std', Float64),\n        ('credamount_590A_approved_last', Float64),\n        ('credamount_590A_rejected_max', Float64),\n        ('credamount_590A_rejected_avg', Float64),\n        ('credamount_590A_rejected_min', Float64),\n        ('credamount_590A_rejected_std', Float64),\n        ('credamount_590A_rejected_last', Float64),\n        ('credamount_590A_last', Float64),\n        ('credtype_587L_mode', String),\n        ('credtype_587L_last', String),\n        ('currdebt_94A_approved_max', Float64),\n        ('currdebt_94A_approved_avg', Float64),\n        ('currdebt_94A_approved_min', Float64),\n        ('currdebt_94A_approved_std', Float64),\n        ('currdebt_94A_approved_last', Float64),\n        ('currdebt_94A_rejected_max', Float64),\n        ('currdebt_94A_rejected_avg', Float64),\n        ('currdebt_94A_rejected_min', Float64),\n        ('currdebt_94A_rejected_std', Float64),\n        ('currdebt_94A_rejected_last', Float64),\n        ('currdebt_94A_last', Float64),\n        ('district_544M_mode', String),\n        ('district_544M_last', String),\n        ('downpmt_134A_approved_max', Float64),\n        ('downpmt_134A_approved_avg', Float64),\n        ('downpmt_134A_approved_min', Float64),\n        ('downpmt_134A_approved_std', Float64),\n        ('downpmt_134A_approved_last', Float64),\n        ('downpmt_134A_rejected_max', Float64),\n        ('downpmt_134A_rejected_avg', Float64),\n        ('downpmt_134A_rejected_min', Float64),\n        ('downpmt_134A_rejected_std', Float64),\n        ('downpmt_134A_rejected_last', Float64),\n        ('downpmt_134A_last', Float64),\n        ('rate_downpmt_and_credamount_approved_max', Float64),\n        ('rate_downpmt_and_credamount_approved_avg', Float64),\n        ('rate_downpmt_and_credamount_approved_min', Float64),\n        ('rate_downpmt_and_credamount_approved_std', Float64),\n        ('rate_downpmt_and_credamount_approved_last', Float64),\n        ('rate_downpmt_and_credamount_rejected_max', Float64),\n        ('rate_downpmt_and_credamount_rejected_avg', Float64),\n        ('rate_downpmt_and_credamount_rejected_min', Float64),\n        ('rate_downpmt_and_credamount_rejected_std', Float64),\n        ('rate_downpmt_and_credamount_rejected_last', Float64),\n        ('rate_downpmt_and_credamount_last', Float64),\n        ('education_1138M_mode', String),\n        ('education_1138M_last', String),\n        ('employedfrom_creationdate_last', Int64),\n        ('employedfrom_creationdate_approved_avg', Float64),\n        ('employedfrom_creationdate_approved_max', Int64),\n        ('employedfrom_creationdate_approved_min', Int64),\n        ('employedfrom_creationdate_approved_std', Float64),\n        ('employedfrom_creationdate_approved_last', Int64),\n        ('employedfrom_creationdate_rejected_avg', Float64),\n        ('employedfrom_creationdate_rejected_max', Int64),\n        ('employedfrom_creationdate_rejected_min', Int64),\n        ('employedfrom_creationdate_rejected_std', Float64),\n        ('employedfrom_creationdate_rejected_last', Int64),\n        ('familystate_726L_mode', String),\n        ('familystate_726L_last', String),\n        ('diff_firstnonzeroinstldate_creationdate_approved_last', Int64),\n        ('diff_firstnonzeroinstldate_creationdate_approved_avg', Float64),\n        ('diff_firstnonzeroinstldate_creationdate_approved_max', Int64),\n        ('diff_firstnonzeroinstldate_creationdate_approved_min', Int64),\n        ('diff_firstnonzeroinstldate_creationdate_approved_std', Float64),\n        ('diff_firstnonzeroinstldate_creationdate_rejected_avg', Float64),\n        ('diff_firstnonzeroinstldate_creationdate_rejected_max', Int64),\n        ('diff_firstnonzeroinstldate_creationdate_rejected_min', Int64),\n        ('diff_firstnonzeroinstldate_creationdate_rejected_std', Float64),\n        ('inittransactioncode_279L_mode', String),\n        ('inittransactioncode_279L_last', String),\n        ('isbidproduct_390L_approved_count', UInt32),\n        ('isbidproduct_390L_approved_last', Boolean),\n        ('isbidproduct_390L_rejected_count', UInt32),\n        ('isbidproduct_390L_rejected_last', Boolean),\n        ('mainoccupationinc_437A_approved_max', Float64),\n        ('mainoccupationinc_437A_approved_avg', Float64),\n        ('mainoccupationinc_437A_approved_min', Float64),\n        ('mainoccupationinc_437A_approved_std', Float64),\n        ('mainoccupationinc_437A_approved_last', Float64),\n        ('mainoccupationinc_437A_rejected_max', Float64),\n        ('mainoccupationinc_437A_rejected_avg', Float64),\n        ('mainoccupationinc_437A_rejected_min', Float64),\n        ('mainoccupationinc_437A_rejected_std', Float64),\n        ('mainoccupationinc_437A_rejected_last', Float64),\n        ('mainoccupationinc_437A_last', Float64),\n        ('maxdpdtolerance_577P_approved_max', Float64),\n        ('maxdpdtolerance_577P_approved_avg', Float64),\n        ('maxdpdtolerance_577P_approved_min', Float64),\n        ('maxdpdtolerance_577P_approved_std', Float64),\n        ('maxdpdtolerance_577P_approved_sum', Float64),\n        ('maxdpdtolerance_577P_approved_last', Float64),\n        ('outstandingdebt_522A_approved_max', Float64),\n        ('outstandingdebt_522A_approved_avg', Float64),\n        ('outstandingdebt_522A_approved_min', Float64),\n        ('outstandingdebt_522A_approved_std', Float64),\n        ('outstandingdebt_522A_approved_last', Float64),\n        ('outstandingdebt_522A_rejected_max', Float64),\n        ('outstandingdebt_522A_rejected_avg', Float64),\n        ('outstandingdebt_522A_rejected_min', Float64),\n        ('outstandingdebt_522A_rejected_std', Float64),\n        ('outstandingdebt_522A_rejected_last', Float64),\n        ('outstandingdebt_522A_last', Float64),\n        ('pmtnum_8L_approved_max', Float64),\n        ('pmtnum_8L_approved_avg', Float64),\n        ('pmtnum_8L_approved_min', Float64),\n        ('pmtnum_8L_approved_std', Float64),\n        ('pmtnum_8L_approved_last', Float64),\n        ('pmtnum_8L_rejected_max', Float64),\n        ('pmtnum_8L_rejected_avg', Float64),\n        ('pmtnum_8L_rejected_min', Float64),\n        ('pmtnum_8L_rejected_std', Float64),\n        ('pmtnum_8L_rejected_last', Float64),\n        ('pmtnum_8L_last', Float64),\n        ('postype_4733339M_mode', String),\n        ('postype_4733339M_last', String),\n        ('profession_152M_mode', String),\n        ('profession_152M_last', String),\n        ('rejectreason_755M_approved_mode', String),\n        ('rejectreason_755M_rejected_mode', String),\n        ('rejectreason_755M_overall_mode', String),\n        ('rejectreason_755M_last', String),\n        ('rejectreasonclient_4145042M_approved_mode', String),\n        ('rejectreasonclient_4145042M_rejected_mode', String),\n        ('rejectreasonclient_4145042M_overall_mode', String),\n        ('rejectreasonclient_4145042M_last', String),\n        ('status_219L_mode', String),\n        ('status_219L_last', String),\n        ('tenor_203L_approved_max', Float64),\n        ('tenor_203L_approved_avg', Float64),\n        ('tenor_203L_approved_min', Float64),\n        ('tenor_203L_approved_std', Float64),\n        ('tenor_203L_approved_last', Float64),\n        ('tenor_203L_rejected_max', Float64),\n        ('tenor_203L_rejected_avg', Float64),\n        ('tenor_203L_rejected_min', Float64),\n        ('tenor_203L_rejected_std', Float64),\n        ('tenor_203L_rejected_last', Float64),\n        ('tenor_203L_last', Float64),\n        ('cacccardblochreas_147M_mode', String),\n        ('credacc_cards_status_52L_mode', String),\n        ('diff_date_decision_vs_approval_last', Int64),\n        ('diff_date_decision_vs_creation_last', Int64)])"},"metadata":{}}],"execution_count":25},{"cell_type":"code","source":"features.write_csv(\"features.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T17:42:00.462772Z","iopub.execute_input":"2025-06-13T17:42:00.463118Z","iopub.status.idle":"2025-06-13T17:42:11.373437Z","shell.execute_reply.started":"2025-06-13T17:42:00.463098Z","shell.execute_reply":"2025-06-13T17:42:11.371986Z"}},"outputs":[],"execution_count":37},{"cell_type":"code","source":"features","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T17:41:45.809453Z","iopub.execute_input":"2025-06-13T17:41:45.809992Z","iopub.status.idle":"2025-06-13T17:41:45.84505Z","shell.execute_reply.started":"2025-06-13T17:41:45.809957Z","shell.execute_reply":"2025-06-13T17:41:45.843871Z"}},"outputs":[{"execution_count":36,"output_type":"execute_result","data":{"text/plain":"shape: (1_221_522, 194)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ num_applic ┆ num_appro ┆ rate_appr ┆ … ┆ cacccardb ┆ credacc_c ┆ diff_date ┆ diff_date │\n│ ---     ┆ ations     ┆ ved       ┆ oval_appl ┆   ┆ lochreas_ ┆ ards_stat ┆ _decision ┆ _decision │\n│ i64     ┆ ---        ┆ ---       ┆ ication   ┆   ┆ 147M_mode ┆ us_52L_mo ┆ _vs_appro ┆ _vs_creat │\n│         ┆ u32        ┆ u32       ┆ ---       ┆   ┆ ---       ┆ de        ┆ val…      ┆ ion…      │\n│         ┆            ┆           ┆ f64       ┆   ┆ str       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆           ┆ str       ┆ i64       ┆ i64       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 2          ┆ 0         ┆ 0.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ null      ┆ 2102      │\n│ 3       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ null      ┆ 4         │\n│ 4       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ null      ┆ 4         │\n│ 5       ┆ 1          ┆ 0         ┆ 0.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ null      ┆ 14        │\n│ 6       ┆ 3          ┆ 0         ┆ 0.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ null      ┆ 113       │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703450 ┆ 13         ┆ 11        ┆ 0.846154  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 362       ┆ 362       │\n│ 2703451 ┆ 6          ┆ 6         ┆ 1.0       ┆ … ┆ a55475b1  ┆ Unknown   ┆ 371       ┆ 371       │\n│ 2703452 ┆ 3          ┆ 2         ┆ 0.666667  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 413       ┆ 45        │\n│ 2703453 ┆ 9          ┆ 8         ┆ 0.888889  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 292       ┆ 292       │\n│ 2703454 ┆ 2          ┆ 2         ┆ 1.0       ┆ … ┆ a55475b1  ┆ Unknown   ┆ 106       ┆ 106       │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_221_522, 194)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>num_applications</th><th>num_approved</th><th>rate_approval_application</th><th>actualdpd_943P_approved_max</th><th>actualdpd_943P_approved_avg</th><th>actualdpd_943P_approved_min</th><th>actualdpd_943P_approved_std</th><th>actualdpd_943P_approved_last</th><th>annuity_853A_approved_max</th><th>annuity_853A_approved_avg</th><th>annuity_853A_approved_min</th><th>annuity_853A_approved_std</th><th>annuity_853A_approved_last</th><th>annuity_853A_rejected_max</th><th>annuity_853A_rejected_avg</th><th>annuity_853A_rejected_min</th><th>annuity_853A_rejected_std</th><th>annuity_853A_rejected_last</th><th>annuity_853A_last</th><th>approvaldate_319D_duration</th><th>approvaldate_319D_interval</th><th>byoccupationinc_3656910L_max</th><th>byoccupationinc_3656910L_avg</th><th>byoccupationinc_3656910L_min</th><th>byoccupationinc_3656910L_std</th><th>byoccupationinc_3656910L_last</th><th>cancelreason_3545846M_approved_mode</th><th>cancelreason_3545846M_rejected_mode</th><th>cancelreason_3545846M_overall_mode</th><th>cancelreason_3545846M_last</th><th>childnum_21L_approved_avg</th><th>childnum_21L_rejected_avg</th><th>childnum_21L_last</th><th>creationdate_885D_duration_all</th><th>creationdate_885D_interval_approved</th><th>creationdate_885D_interval_rejected</th><th>&hellip;</th><th>pmtnum_8L_approved_std</th><th>pmtnum_8L_approved_last</th><th>pmtnum_8L_rejected_max</th><th>pmtnum_8L_rejected_avg</th><th>pmtnum_8L_rejected_min</th><th>pmtnum_8L_rejected_std</th><th>pmtnum_8L_rejected_last</th><th>pmtnum_8L_last</th><th>postype_4733339M_mode</th><th>postype_4733339M_last</th><th>profession_152M_mode</th><th>profession_152M_last</th><th>rejectreason_755M_approved_mode</th><th>rejectreason_755M_rejected_mode</th><th>rejectreason_755M_overall_mode</th><th>rejectreason_755M_last</th><th>rejectreasonclient_4145042M_approved_mode</th><th>rejectreasonclient_4145042M_rejected_mode</th><th>rejectreasonclient_4145042M_overall_mode</th><th>rejectreasonclient_4145042M_last</th><th>status_219L_mode</th><th>status_219L_last</th><th>tenor_203L_approved_max</th><th>tenor_203L_approved_avg</th><th>tenor_203L_approved_min</th><th>tenor_203L_approved_std</th><th>tenor_203L_approved_last</th><th>tenor_203L_rejected_max</th><th>tenor_203L_rejected_avg</th><th>tenor_203L_rejected_min</th><th>tenor_203L_rejected_std</th><th>tenor_203L_rejected_last</th><th>tenor_203L_last</th><th>cacccardblochreas_147M_mode</th><th>credacc_cards_status_52L_mode</th><th>diff_date_decision_vs_approval_last</th><th>diff_date_decision_vs_creation_last</th></tr><tr><td>i64</td><td>u32</td><td>u32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>&hellip;</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>2</td><td>2</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1682.4</td><td>1161.3</td><td>640.2</td><td>736.946687</td><td>1682.4</td><td>1682.4</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>24.0</td><td>18.0</td><td>12.0</td><td>8.485281</td><td>12.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>18.0</td><td>12.0</td><td>8.485281</td><td>12.0</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>null</td><td>2102</td></tr><tr><td>3</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6140.0</td><td>6140.0</td><td>6140.0</td><td>null</td><td>6140.0</td><td>6140.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>null</td><td>4</td></tr><tr><td>4</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2556.6</td><td>2556.6</td><td>2556.6</td><td>null</td><td>2556.6</td><td>2556.6</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>&quot;P24_27_36&quot;</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>24.0</td><td>24.0</td><td>24.0</td><td>null</td><td>24.0</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>24.0</td><td>24.0</td><td>null</td><td>24.0</td><td>24.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>null</td><td>4</td></tr><tr><td>5</td><td>1</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>&quot;P85_114_140&quot;</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>null</td><td>14</td></tr><tr><td>6</td><td>3</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>4189.6</td><td>2357.933333</td><td>1110.4</td><td>1620.579209</td><td>1773.8</td><td>1773.8</td><td>null</td><td>0.0</td><td>1.0</td><td>1.0</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>0.0</td><td>null</td><td>1394</td><td>0.0</td><td>697.0</td><td>&hellip;</td><td>null</td><td>null</td><td>24.0</td><td>15.333333</td><td>11.0</td><td>7.505553</td><td>11.0</td><td>11.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>15.333333</td><td>11.0</td><td>7.505553</td><td>11.0</td><td>11.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>null</td><td>113</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>13</td><td>11</td><td>0.846154</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>4965.2</td><td>2528.000018</td><td>0.0</td><td>1407.086436</td><td>2102.2</td><td>30875.0</td><td>30875.0</td><td>30875.0</td><td>null</td><td>30875.0</td><td>2102.2</td><td>4502</td><td>450.2</td><td>1.0</td><td>0.5</td><td>0.0</td><td>0.707107</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.333333</td><td>null</td><td>null</td><td>4502</td><td>450.2</td><td>667.0</td><td>&hellip;</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P99_56_166&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;K&quot;</td><td>24.0</td><td>12.5</td><td>3.0</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>362</td><td>362</td></tr><tr><td>2703451</td><td>6</td><td>6</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>12809.2</td><td>6472.866667</td><td>0.0</td><td>4082.865905</td><td>6191.6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6191.6</td><td>1536</td><td>307.2</td><td>10340.0</td><td>10340.0</td><td>10340.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>1536</td><td>307.2</td><td>0.0</td><td>&hellip;</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>24.0</td><td>18.0</td><td>12.0</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>371</td><td>371</td></tr><tr><td>2703452</td><td>3</td><td>2</td><td>0.666667</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>3243.4001</td><td>2372.20005</td><td>1501.0</td><td>1232.062926</td><td>1501.0</td><td>9048.0</td><td>9048.0</td><td>9048.0</td><td>null</td><td>9048.0</td><td>9048.0</td><td>337</td><td>337.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>null</td><td>null</td><td>null</td><td>705</td><td>337.0</td><td>0.0</td><td>&hellip;</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P67_102_161&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;T&quot;</td><td>6.0</td><td>4.5</td><td>3.0</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>413</td><td>45</td></tr><tr><td>2703453</td><td>9</td><td>8</td><td>0.888889</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>5981.4</td><td>1962.125002</td><td>0.0</td><td>1972.919296</td><td>2827.2</td><td>416.2</td><td>416.2</td><td>416.2</td><td>null</td><td>416.2</td><td>2827.2</td><td>2363</td><td>337.571429</td><td>33059.0</td><td>33059.0</td><td>33059.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>0.0</td><td>null</td><td>2363</td><td>337.571429</td><td>0.0</td><td>&hellip;</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>48.0</td><td>22.714286</td><td>9.0</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>292</td><td>292</td></tr><tr><td>2703454</td><td>2</td><td>2</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>6726.6</td><td>4856.7</td><td>2986.8</td><td>2644.43794</td><td>2986.8</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2986.8</td><td>325</td><td>325.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>325</td><td>325.0</td><td>0.0</td><td>&hellip;</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;A&quot;</td><td>&quot;A&quot;</td><td>12.0</td><td>9.0</td><td>6.0</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>106</td><td>106</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":36},{"cell_type":"code","source":"features.filter(pl.col('num_approved')>0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:53:01.552525Z","iopub.execute_input":"2025-06-13T16:53:01.553931Z","iopub.status.idle":"2025-06-13T16:53:03.166795Z","shell.execute_reply.started":"2025-06-13T16:53:01.553872Z","shell.execute_reply":"2025-06-13T16:53:03.165844Z"}},"outputs":[{"execution_count":32,"output_type":"execute_result","data":{"text/plain":"shape: (1_083_660, 194)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ num_applic ┆ num_appro ┆ rate_appr ┆ … ┆ cacccardb ┆ credacc_c ┆ diff_date ┆ diff_date │\n│ ---     ┆ ations     ┆ ved       ┆ oval_appl ┆   ┆ lochreas_ ┆ ards_stat ┆ _decision ┆ _decision │\n│ i64     ┆ ---        ┆ ---       ┆ ication   ┆   ┆ 147M_mode ┆ us_52L_mo ┆ _vs_appro ┆ _vs_creat │\n│         ┆ u32        ┆ u32       ┆ ---       ┆   ┆ ---       ┆ de        ┆ val…      ┆ ion…      │\n│         ┆            ┆           ┆ f64       ┆   ┆ str       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆           ┆ str       ┆ i64       ┆ i64       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 10      ┆ 1          ┆ 1         ┆ 1.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ 8         ┆ 8         │\n│ 14      ┆ 3          ┆ 1         ┆ 0.333333  ┆ … ┆ Unknown   ┆ Unknown   ┆ 84        ┆ 22        │\n│ 18      ┆ 1          ┆ 1         ┆ 1.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ 3         ┆ 3         │\n│ 20      ┆ 2          ┆ 1         ┆ 0.5       ┆ … ┆ Unknown   ┆ Unknown   ┆ 62        ┆ 62        │\n│ 38      ┆ 1          ┆ 1         ┆ 1.0       ┆ … ┆ Unknown   ┆ Unknown   ┆ 23        ┆ 23        │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703450 ┆ 13         ┆ 11        ┆ 0.846154  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 362       ┆ 362       │\n│ 2703451 ┆ 6          ┆ 6         ┆ 1.0       ┆ … ┆ a55475b1  ┆ Unknown   ┆ 371       ┆ 371       │\n│ 2703452 ┆ 3          ┆ 2         ┆ 0.666667  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 413       ┆ 45        │\n│ 2703453 ┆ 9          ┆ 8         ┆ 0.888889  ┆ … ┆ a55475b1  ┆ Unknown   ┆ 292       ┆ 292       │\n│ 2703454 ┆ 2          ┆ 2         ┆ 1.0       ┆ … ┆ a55475b1  ┆ Unknown   ┆ 106       ┆ 106       │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_083_660, 194)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>num_applications</th><th>num_approved</th><th>rate_approval_application</th><th>actualdpd_943P_approved_max</th><th>actualdpd_943P_approved_avg</th><th>actualdpd_943P_approved_min</th><th>actualdpd_943P_approved_std</th><th>actualdpd_943P_approved_last</th><th>annuity_853A_approved_max</th><th>annuity_853A_approved_avg</th><th>annuity_853A_approved_min</th><th>annuity_853A_approved_std</th><th>annuity_853A_approved_last</th><th>annuity_853A_rejected_max</th><th>annuity_853A_rejected_avg</th><th>annuity_853A_rejected_min</th><th>annuity_853A_rejected_std</th><th>annuity_853A_rejected_last</th><th>annuity_853A_last</th><th>approvaldate_319D_duration</th><th>approvaldate_319D_interval</th><th>byoccupationinc_3656910L_max</th><th>byoccupationinc_3656910L_avg</th><th>byoccupationinc_3656910L_min</th><th>byoccupationinc_3656910L_std</th><th>byoccupationinc_3656910L_last</th><th>cancelreason_3545846M_approved_mode</th><th>cancelreason_3545846M_rejected_mode</th><th>cancelreason_3545846M_overall_mode</th><th>cancelreason_3545846M_last</th><th>childnum_21L_approved_avg</th><th>childnum_21L_rejected_avg</th><th>childnum_21L_last</th><th>creationdate_885D_duration_all</th><th>creationdate_885D_interval_approved</th><th>creationdate_885D_interval_rejected</th><th>&hellip;</th><th>pmtnum_8L_approved_std</th><th>pmtnum_8L_approved_last</th><th>pmtnum_8L_rejected_max</th><th>pmtnum_8L_rejected_avg</th><th>pmtnum_8L_rejected_min</th><th>pmtnum_8L_rejected_std</th><th>pmtnum_8L_rejected_last</th><th>pmtnum_8L_last</th><th>postype_4733339M_mode</th><th>postype_4733339M_last</th><th>profession_152M_mode</th><th>profession_152M_last</th><th>rejectreason_755M_approved_mode</th><th>rejectreason_755M_rejected_mode</th><th>rejectreason_755M_overall_mode</th><th>rejectreason_755M_last</th><th>rejectreasonclient_4145042M_approved_mode</th><th>rejectreasonclient_4145042M_rejected_mode</th><th>rejectreasonclient_4145042M_overall_mode</th><th>rejectreasonclient_4145042M_last</th><th>status_219L_mode</th><th>status_219L_last</th><th>tenor_203L_approved_max</th><th>tenor_203L_approved_avg</th><th>tenor_203L_approved_min</th><th>tenor_203L_approved_std</th><th>tenor_203L_approved_last</th><th>tenor_203L_rejected_max</th><th>tenor_203L_rejected_avg</th><th>tenor_203L_rejected_min</th><th>tenor_203L_rejected_std</th><th>tenor_203L_rejected_last</th><th>tenor_203L_last</th><th>cacccardblochreas_147M_mode</th><th>credacc_cards_status_52L_mode</th><th>diff_date_decision_vs_approval_last</th><th>diff_date_decision_vs_creation_last</th></tr><tr><td>i64</td><td>u32</td><td>u32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>&hellip;</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>10</td><td>1</td><td>1</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>10916.601</td><td>10916.601</td><td>10916.601</td><td>null</td><td>10916.601</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>10916.601</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P73_130_169&quot;</td><td>null</td><td>&quot;P73_130_169&quot;</td><td>&quot;P73_130_169&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>12.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>8</td><td>8</td></tr><tr><td>14</td><td>3</td><td>1</td><td>0.333333</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>4178.0</td><td>4178.0</td><td>4178.0</td><td>null</td><td>4178.0</td><td>2508.6</td><td>2363.3</td><td>2218.0</td><td>205.485231</td><td>2218.0</td><td>2218.0</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P30_86_84&quot;</td><td>&quot;P30_86_84&quot;</td><td>&quot;P30_86_84&quot;</td><td>null</td><td>null</td><td>null</td><td>691</td><td>0.0</td><td>691.0</td><td>&hellip;</td><td>null</td><td>3.0</td><td>12.0</td><td>7.5</td><td>3.0</td><td>6.363961</td><td>3.0</td><td>3.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P30_86_84&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P30_86_84&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;D&quot;</td><td>3.0</td><td>3.0</td><td>3.0</td><td>null</td><td>3.0</td><td>12.0</td><td>7.5</td><td>3.0</td><td>6.363961</td><td>3.0</td><td>3.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>84</td><td>22</td></tr><tr><td>18</td><td>1</td><td>1</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P73_130_169&quot;</td><td>null</td><td>&quot;P73_130_169&quot;</td><td>&quot;P73_130_169&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;T&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>3</td><td>3</td></tr><tr><td>20</td><td>2</td><td>1</td><td>0.5</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>3979.4001</td><td>3979.4001</td><td>3979.4001</td><td>null</td><td>3979.4001</td><td>4704.8003</td><td>4704.8003</td><td>4704.8003</td><td>null</td><td>4704.8003</td><td>3979.4001</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>null</td><td>290</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>12.0</td><td>30.0</td><td>30.0</td><td>30.0</td><td>null</td><td>30.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;A&quot;</td><td>12.0</td><td>12.0</td><td>12.0</td><td>null</td><td>12.0</td><td>30.0</td><td>30.0</td><td>30.0</td><td>null</td><td>30.0</td><td>12.0</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>62</td><td>62</td></tr><tr><td>38</td><td>1</td><td>1</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;K&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;Unknown&quot;</td><td>&quot;Unknown&quot;</td><td>23</td><td>23</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>13</td><td>11</td><td>0.846154</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>4965.2</td><td>2528.000018</td><td>0.0</td><td>1407.086436</td><td>2102.2</td><td>30875.0</td><td>30875.0</td><td>30875.0</td><td>null</td><td>30875.0</td><td>2102.2</td><td>4502</td><td>450.2</td><td>1.0</td><td>0.5</td><td>0.0</td><td>0.707107</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.333333</td><td>null</td><td>null</td><td>4502</td><td>450.2</td><td>667.0</td><td>&hellip;</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P99_56_166&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;K&quot;</td><td>24.0</td><td>12.5</td><td>3.0</td><td>7.735201</td><td>12.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>362</td><td>362</td></tr><tr><td>2703451</td><td>6</td><td>6</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>12809.2</td><td>6472.866667</td><td>0.0</td><td>4082.865905</td><td>6191.6</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6191.6</td><td>1536</td><td>307.2</td><td>10340.0</td><td>10340.0</td><td>10340.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>1536</td><td>307.2</td><td>0.0</td><td>&hellip;</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>24.0</td><td>18.0</td><td>12.0</td><td>6.0</td><td>24.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>371</td><td>371</td></tr><tr><td>2703452</td><td>3</td><td>2</td><td>0.666667</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>3243.4001</td><td>2372.20005</td><td>1501.0</td><td>1232.062926</td><td>1501.0</td><td>9048.0</td><td>9048.0</td><td>9048.0</td><td>null</td><td>9048.0</td><td>9048.0</td><td>337</td><td>337.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P180_60_137&quot;</td><td>null</td><td>null</td><td>null</td><td>705</td><td>337.0</td><td>0.0</td><td>&hellip;</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P67_102_161&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;T&quot;</td><td>6.0</td><td>4.5</td><td>3.0</td><td>2.12132</td><td>3.0</td><td>14.0</td><td>14.0</td><td>14.0</td><td>null</td><td>14.0</td><td>14.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>413</td><td>45</td></tr><tr><td>2703453</td><td>9</td><td>8</td><td>0.888889</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>5981.4</td><td>1962.125002</td><td>0.0</td><td>1972.919296</td><td>2827.2</td><td>416.2</td><td>416.2</td><td>416.2</td><td>null</td><td>416.2</td><td>2827.2</td><td>2363</td><td>337.571429</td><td>33059.0</td><td>33059.0</td><td>33059.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>0.0</td><td>null</td><td>2363</td><td>337.571429</td><td>0.0</td><td>&hellip;</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;A&quot;</td><td>48.0</td><td>22.714286</td><td>9.0</td><td>14.05601</td><td>30.0</td><td>6.0</td><td>6.0</td><td>6.0</td><td>null</td><td>6.0</td><td>30.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>292</td><td>292</td></tr><tr><td>2703454</td><td>2</td><td>2</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>6726.6</td><td>4856.7</td><td>2986.8</td><td>2644.43794</td><td>2986.8</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2986.8</td><td>325</td><td>325.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>325</td><td>325.0</td><td>0.0</td><td>&hellip;</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;A&quot;</td><td>&quot;A&quot;</td><td>12.0</td><td>9.0</td><td>6.0</td><td>4.242641</td><td>6.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;a55475b1&quot;</td><td>&quot;Unknown&quot;</td><td>106</td><td>106</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":32},{"cell_type":"code","source":"features.select([\n    col(column).is_null().sum().alias(f\"{column}_null_count\")\n    for column in features.columns])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:59:58.253375Z","iopub.execute_input":"2025-06-13T16:59:58.25377Z","iopub.status.idle":"2025-06-13T16:59:58.267796Z","shell.execute_reply.started":"2025-06-13T16:59:58.253732Z","shell.execute_reply":"2025-06-13T16:59:58.266773Z"}},"outputs":[{"execution_count":34,"output_type":"execute_result","data":{"text/plain":"shape: (1, 194)\n┌───────────┬───────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬──────────┐\n│ case_id_n ┆ num_appli ┆ num_appro ┆ rate_appr ┆ … ┆ cacccardb ┆ credacc_c ┆ diff_date ┆ diff_dat │\n│ ull_count ┆ cations_n ┆ ved_null_ ┆ oval_appl ┆   ┆ lochreas_ ┆ ards_stat ┆ _decision ┆ e_decisi │\n│ ---       ┆ ull_count ┆ count     ┆ ication_n ┆   ┆ 147M_mode ┆ us_52L_mo ┆ _vs_appro ┆ on_vs_cr │\n│ u32       ┆ ---       ┆ ---       ┆ ull…      ┆   ┆ _nu…      ┆ de_…      ┆ val…      ┆ eation…  │\n│           ┆ u32       ┆ u32       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---      │\n│           ┆           ┆           ┆ u32       ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32      │\n╞═══════════╪═══════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪══════════╡\n│ 0         ┆ 0         ┆ 0         ┆ 0         ┆ … ┆ 0         ┆ 0         ┆ 137862    ┆ 0        │\n└───────────┴───────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴──────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 194)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id_null_count</th><th>num_applications_null_count</th><th>num_approved_null_count</th><th>rate_approval_application_null_count</th><th>actualdpd_943P_approved_max_null_count</th><th>actualdpd_943P_approved_avg_null_count</th><th>actualdpd_943P_approved_min_null_count</th><th>actualdpd_943P_approved_std_null_count</th><th>actualdpd_943P_approved_last_null_count</th><th>annuity_853A_approved_max_null_count</th><th>annuity_853A_approved_avg_null_count</th><th>annuity_853A_approved_min_null_count</th><th>annuity_853A_approved_std_null_count</th><th>annuity_853A_approved_last_null_count</th><th>annuity_853A_rejected_max_null_count</th><th>annuity_853A_rejected_avg_null_count</th><th>annuity_853A_rejected_min_null_count</th><th>annuity_853A_rejected_std_null_count</th><th>annuity_853A_rejected_last_null_count</th><th>annuity_853A_last_null_count</th><th>approvaldate_319D_duration_null_count</th><th>approvaldate_319D_interval_null_count</th><th>byoccupationinc_3656910L_max_null_count</th><th>byoccupationinc_3656910L_avg_null_count</th><th>byoccupationinc_3656910L_min_null_count</th><th>byoccupationinc_3656910L_std_null_count</th><th>byoccupationinc_3656910L_last_null_count</th><th>cancelreason_3545846M_approved_mode_null_count</th><th>cancelreason_3545846M_rejected_mode_null_count</th><th>cancelreason_3545846M_overall_mode_null_count</th><th>cancelreason_3545846M_last_null_count</th><th>childnum_21L_approved_avg_null_count</th><th>childnum_21L_rejected_avg_null_count</th><th>childnum_21L_last_null_count</th><th>creationdate_885D_duration_all_null_count</th><th>creationdate_885D_interval_approved_null_count</th><th>creationdate_885D_interval_rejected_null_count</th><th>&hellip;</th><th>pmtnum_8L_approved_std_null_count</th><th>pmtnum_8L_approved_last_null_count</th><th>pmtnum_8L_rejected_max_null_count</th><th>pmtnum_8L_rejected_avg_null_count</th><th>pmtnum_8L_rejected_min_null_count</th><th>pmtnum_8L_rejected_std_null_count</th><th>pmtnum_8L_rejected_last_null_count</th><th>pmtnum_8L_last_null_count</th><th>postype_4733339M_mode_null_count</th><th>postype_4733339M_last_null_count</th><th>profession_152M_mode_null_count</th><th>profession_152M_last_null_count</th><th>rejectreason_755M_approved_mode_null_count</th><th>rejectreason_755M_rejected_mode_null_count</th><th>rejectreason_755M_overall_mode_null_count</th><th>rejectreason_755M_last_null_count</th><th>rejectreasonclient_4145042M_approved_mode_null_count</th><th>rejectreasonclient_4145042M_rejected_mode_null_count</th><th>rejectreasonclient_4145042M_overall_mode_null_count</th><th>rejectreasonclient_4145042M_last_null_count</th><th>status_219L_mode_null_count</th><th>status_219L_last_null_count</th><th>tenor_203L_approved_max_null_count</th><th>tenor_203L_approved_avg_null_count</th><th>tenor_203L_approved_min_null_count</th><th>tenor_203L_approved_std_null_count</th><th>tenor_203L_approved_last_null_count</th><th>tenor_203L_rejected_max_null_count</th><th>tenor_203L_rejected_avg_null_count</th><th>tenor_203L_rejected_min_null_count</th><th>tenor_203L_rejected_std_null_count</th><th>tenor_203L_rejected_last_null_count</th><th>tenor_203L_last_null_count</th><th>cacccardblochreas_147M_mode_null_count</th><th>credacc_cards_status_52L_mode_null_count</th><th>diff_date_decision_vs_approval_last_null_count</th><th>diff_date_decision_vs_creation_last_null_count</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>&hellip;</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>137885</td><td>137885</td><td>137885</td><td>441760</td><td>140165</td><td>138831</td><td>138831</td><td>138831</td><td>442851</td><td>140548</td><td>410899</td><td>410899</td><td>410899</td><td>695367</td><td>450802</td><td>34803</td><td>137862</td><td>0</td><td>656469</td><td>656469</td><td>656469</td><td>883003</td><td>1148410</td><td>137862</td><td>384093</td><td>0</td><td>0</td><td>357420</td><td>742445</td><td>1015372</td><td>0</td><td>0</td><td>0</td><td>&hellip;</td><td>469191</td><td>214389</td><td>430294</td><td>430294</td><td>430294</td><td>712674</td><td>498240</td><td>115454</td><td>0</td><td>0</td><td>0</td><td>0</td><td>137862</td><td>384093</td><td>0</td><td>0</td><td>137862</td><td>384093</td><td>0</td><td>0</td><td>12</td><td>0</td><td>153313</td><td>153313</td><td>153313</td><td>469191</td><td>214389</td><td>430294</td><td>430294</td><td>430294</td><td>712674</td><td>498240</td><td>115454</td><td>0</td><td>0</td><td>137862</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":34},{"cell_type":"code","source":"\nfull_train_applprev['case_id'].unique()","metadata":{"trusted":true,"execution":{"execution_failed":"2025-06-13T14:17:33.186Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_base","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T16:32:03.802495Z","iopub.execute_input":"2025-06-13T16:32:03.802855Z","iopub.status.idle":"2025-06-13T16:32:03.812396Z","shell.execute_reply.started":"2025-06-13T16:32:03.802828Z","shell.execute_reply":"2025-06-13T16:32:03.811226Z"}},"outputs":[{"execution_count":10,"output_type":"execute_result","data":{"text/plain":"shape: (1_526_659, 5)\n┌─────────┬───────────────┬────────┬──────────┬────────┐\n│ case_id ┆ date_decision ┆ MONTH  ┆ WEEK_NUM ┆ target │\n│ ---     ┆ ---           ┆ ---    ┆ ---      ┆ ---    │\n│ i64     ┆ str           ┆ i64    ┆ i64      ┆ i64    │\n╞═════════╪═══════════════╪════════╪══════════╪════════╡\n│ 0       ┆ 2019-01-03    ┆ 201901 ┆ 0        ┆ 0      │\n│ 1       ┆ 2019-01-03    ┆ 201901 ┆ 0        ┆ 0      │\n│ 2       ┆ 2019-01-04    ┆ 201901 ┆ 0        ┆ 0      │\n│ 3       ┆ 2019-01-03    ┆ 201901 ┆ 0        ┆ 0      │\n│ 4       ┆ 2019-01-04    ┆ 201901 ┆ 0        ┆ 1      │\n│ …       ┆ …             ┆ …      ┆ …        ┆ …      │\n│ 2703450 ┆ 2020-10-05    ┆ 202010 ┆ 91       ┆ 0      │\n│ 2703451 ┆ 2020-10-05    ┆ 202010 ┆ 91       ┆ 0      │\n│ 2703452 ┆ 2020-10-05    ┆ 202010 ┆ 91       ┆ 0      │\n│ 2703453 ┆ 2020-10-05    ┆ 202010 ┆ 91       ┆ 0      │\n│ 2703454 ┆ 2020-10-05    ┆ 202010 ┆ 91       ┆ 0      │\n└─────────┴───────────────┴────────┴──────────┴────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_526_659, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>date_decision</th><th>MONTH</th><th>WEEK_NUM</th><th>target</th></tr><tr><td>i64</td><td>str</td><td>i64</td><td>i64</td><td>i64</td></tr></thead><tbody><tr><td>0</td><td>&quot;2019-01-03&quot;</td><td>201901</td><td>0</td><td>0</td></tr><tr><td>1</td><td>&quot;2019-01-03&quot;</td><td>201901</td><td>0</td><td>0</td></tr><tr><td>2</td><td>&quot;2019-01-04&quot;</td><td>201901</td><td>0</td><td>0</td></tr><tr><td>3</td><td>&quot;2019-01-03&quot;</td><td>201901</td><td>0</td><td>0</td></tr><tr><td>4</td><td>&quot;2019-01-04&quot;</td><td>201901</td><td>0</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>&quot;2020-10-05&quot;</td><td>202010</td><td>91</td><td>0</td></tr><tr><td>2703451</td><td>&quot;2020-10-05&quot;</td><td>202010</td><td>91</td><td>0</td></tr><tr><td>2703452</td><td>&quot;2020-10-05&quot;</td><td>202010</td><td>91</td><td>0</td></tr><tr><td>2703453</td><td>&quot;2020-10-05&quot;</td><td>202010</td><td>91</td><td>0</td></tr><tr><td>2703454</td><td>&quot;2020-10-05&quot;</td><td>202010</td><td>91</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":10},{"cell_type":"markdown","source":"# Credit Bureau","metadata":{}},{"cell_type":"code","source":"import polars as pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T07:15:20.424476Z","iopub.execute_input":"2025-06-14T07:15:20.424792Z","iopub.status.idle":"2025-06-14T07:15:20.966218Z","shell.execute_reply.started":"2025-06-14T07:15:20.424766Z","shell.execute_reply":"2025-06-14T07:15:20.965271Z"}},"outputs":[],"execution_count":1},{"cell_type":"code","source":"df_train_credit_bureau_a_1 = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_*.parquet\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T07:15:20.967754Z","iopub.execute_input":"2025-06-14T07:15:20.968093Z","execution_failed":"2025-06-14T07:15:23.216Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_base = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet\")\n","metadata":{"trusted":true,"execution":{"execution_failed":"2025-06-14T07:15:23.217Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train_credit_bureau_a_1  = df_train_credit_bureau_a_1.join(\n    train_base[['case_id','date_decision']],on = 'case_id', how = 'left'\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T04:22:21.015168Z","iopub.execute_input":"2025-06-14T04:22:21.015444Z","iopub.status.idle":"2025-06-14T04:22:22.104393Z","shell.execute_reply.started":"2025-06-14T04:22:21.015422Z","shell.execute_reply":"2025-06-14T04:22:22.103469Z"},"_kg_hide-input":true},"outputs":[],"execution_count":5},{"cell_type":"code","source":"import polars as pl\n\n# Chuyển đổi các cột sang định dạng Date\ndf_train_credit_bureau_a_1 = df_train_credit_bureau_a_1.with_columns([\n    pl.col(\"dateofcredend_289D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredstart_181D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredend_353D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredstart_739D\").str.strptime(pl.Date),\n    pl.col(\"date_decision\").str.strptime(pl.Date),\n    pl.col(\"dateofrealrepmt_138D\").str.strptime(pl.Date),\n    pl.col(\"lastupdate_1112D\").str.strptime(pl.Date),\n    pl.col(\"lastupdate_388D\").str.strptime(pl.Date),\n])\n\n# Tính toán các cột chênh lệch ngày (absolute difference in days)\ndf_train_credit_bureau_a_1 = df_train_credit_bureau_a_1.with_columns([\n    (pl.col(\"dateofcredend_289D\") - pl.col(\"dateofcredstart_181D\")).dt.total_days().abs().alias(\"diff_dateofcre_and_dateof_end_active\"),\n    (pl.col(\"dateofcredend_353D\") - pl.col(\"dateofcredstart_739D\")).dt.total_days().abs().alias(\"diff_dateofcre_and_dateof_end_close\"),\n    \n    (pl.col(\"date_decision\") - pl.col(\"dateofcredend_289D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredend_289D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredend_353D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredend_353D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredstart_181D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredstart_181D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredstart_739D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredstart_739D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofrealrepmt_138D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofrealrepmt_138D\"),\n\n    (pl.col(\"date_decision\") - pl.col(\"lastupdate_1112D\")).dt.total_days().abs().alias(\"diff_date_decision_lastupdate_1112D\"),\n    (pl.col(\"date_decision\") - pl.col(\"lastupdate_388D\")).dt.total_days().abs().alias(\"diff_date_decision_lastupdate_388D\"),\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T04:22:22.105799Z","iopub.execute_input":"2025-06-14T04:22:22.106033Z","iopub.status.idle":"2025-06-14T04:22:46.063424Z","shell.execute_reply.started":"2025-06-14T04:22:22.106015Z","shell.execute_reply":"2025-06-14T04:22:46.062496Z"}},"outputs":[],"execution_count":6},{"cell_type":"code","source":"import polars as pl\nfrom datetime import datetime\nimport numpy as np\n\ndef create_base_aggregations(df):\n    \"\"\"\n    Tạo các aggregations cơ bản theo case_id dựa trên mapping đã định nghĩa\n    \"\"\"\n    \n    # Định nghĩa aggregations theo mapping\n    agg_expressions = []\n    \n    # ===== MEAN AGGREGATIONS =====\n    mean_cols = [\n        \"annualeffectiverate_199L\", \"annualeffectiverate_63L\", \"credlmt_230A\", \"credlmt_935A\",\n        \"debtoutstand_525A\", \"debtoverdue_47A\", \"dpdmax_139P\", \"dpdmax_757P\", \n        \"instlamount_768A\", \"instlamount_852A\", \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\",\n        \"nominalrate_281L\", \"nominalrate_498L\", \"numberofcontrsvalue_258L\", \"numberofcontrsvalue_358L\",\n        \"numberofinstls_229L\", \"numberofinstls_320L\", \"numberofoutstandinstls_520L\", \n        \"numberofoutstandinstls_59L\", \"numberofoverdueinstlmax_1039L\", \"numberofoverdueinstlmax_1151L\",\n        \"numberofoverdueinstls_725L\", \"numberofoverdueinstls_834L\", \"outstandingamount_354A\",\n        \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\", \"overdueamountmax2_14A\",\n        \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\",\n        \"prolongationcount_599L\", \"residualamount_488A\", \"residualamount_856A\",\n        \"totalamount_6A\", \"totalamount_996A\", \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\",\n        \"totaloutstanddebtvalue_39A\", \"totaloutstanddebtvalue_668A\",\"diff_dateofcre_and_dateof_end_active\", \"diff_dateofcre_and_dateof_end_close\",\n        \"diff_date_decision_dateofcredend_289D\", \"diff_date_decision_dateofcredend_353D\", \"diff_date_decision_dateofcredstart_181D\", \"diff_date_decision_dateofcredstart_739D\", \n        \"diff_date_decision_dateofrealrepmt_138D\", \"diff_date_decision_lastupdate_1112D\", \"diff_date_decision_lastupdate_388D\"\n    ]\n    \n    for col in mean_cols:\n        agg_expressions.append(pl.col(col).mean().alias(f\"{col}_mean\"))\n    \n    # ===== MAX AGGREGATIONS =====\n    max_cols = [\n        \"dpdmax_139P\", \"dpdmax_757P\", \"instlamount_768A\", \"instlamount_852A\",\n        \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\", \"nominalrate_281L\", \"nominalrate_498L\",\n        \"numberofcontrsvalue_258L\", \"numberofcontrsvalue_358L\", \"numberofinstls_229L\", \"numberofinstls_320L\",\n        \"numberofoutstandinstls_520L\", \"numberofoutstandinstls_59L\", \"numberofoverdueinstlmax_1039L\",\n        \"numberofoverdueinstlmax_1151L\", \"numberofoverdueinstls_725L\", \"numberofoverdueinstls_834L\",\n        \"outstandingamount_354A\", \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\",\n        \"overdueamountmax2_14A\", \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\", \"prolongationcount_599L\",\n        \"residualamount_488A\", \"residualamount_856A\", \"totalamount_6A\", \"totalamount_996A\",\n        \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\", \"totaloutstanddebtvalue_39A\",\n        \"totaloutstanddebtvalue_668A\", \"diff_dateofcre_and_dateof_end_active\", \"diff_dateofcre_and_dateof_end_close\",\n        \"diff_date_decision_dateofcredend_289D\", \"diff_date_decision_dateofcredend_353D\", \"diff_date_decision_dateofcredstart_181D\", \"diff_date_decision_dateofcredstart_739D\", \n        \"diff_date_decision_dateofrealrepmt_138D\", \"diff_date_decision_lastupdate_1112D\", \"diff_date_decision_lastupdate_388D\"\n    ]\n    \n    for col in max_cols:\n        agg_expressions.append(pl.col(col).max().alias(f\"{col}_max\"))\n    \n    # ===== SUM AGGREGATIONS =====\n    sum_cols = [\n        \"contractsum_5085717L\", \"debtoutstand_525A\", \"debtoverdue_47A\", \"instlamount_768A\",\n        \"instlamount_852A\", \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\",\n        \"outstandingamount_354A\", \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\",\n        \"overdueamountmax2_14A\", \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\", \"prolongationcount_599L\",\n        \"residualamount_488A\", \"residualamount_856A\", \"totalamount_6A\", \"totalamount_996A\",\n        \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\", \"totaloutstanddebtvalue_39A\",\n        \"totaloutstanddebtvalue_668A\"\n    ]\n    \n    for col in sum_cols:\n        agg_expressions.append(pl.col(col).sum().alias(f\"{col}_sum\"))\n    \n    # ===== MODE AGGREGATIONS (dùng first cho categorical) =====\n    mode_cols = [\n        \"classificationofcontr_13M\", \"classificationofcontr_400M\", \"contractst_545M\", \"contractst_964M\",\n        \"description_351M\", \"dpdmaxdatemonth_442T\", \"dpdmaxdatemonth_89T\", \"dpdmaxdateyear_596T\",\n        \"dpdmaxdateyear_896T\", \"financialinstitution_382M\", \"financialinstitution_591M\",\n        \"overdueamountmaxdatemonth_284T\", \"overdueamountmaxdatemonth_365T\", \"overdueamountmaxdateyear_2T\",\n        \"overdueamountmaxdateyear_994T\", \"purposeofcred_426M\", \"purposeofcred_874M\",\n        \"subjectrole_182M\", \"subjectrole_93M\"\n    ]\n    \n    for col in mode_cols:\n        agg_expressions.append(pl.col(col).first().alias(f\"{col}_mode\"))\n    \n    # ===== COUNT AGGREGATION =====\n    agg_expressions.append(pl.col(\"case_id\").count().alias(\"case_id_count\"))\n    \n    # Thực hiện aggregation\n    result_df = df.group_by(\"case_id\").agg(agg_expressions)\n    \n    return result_df\n\ndef create_advanced_features(df_agg):\n    \"\"\"\n    Tạo các features nâng cao từ data đã được aggregate\n    \"\"\"\n    \n    result_df = df_agg.clone()\n    \n    # ===== A. TỶ LỆ RỦI RO QUAN TRỌNG =====\n    \n    # 1. Overdue Ratio cho Active Contracts\n    result_df = result_df.with_columns([\n        # Overdue ratio = Overdue amount / Total outstanding (Active)\n        (pl.col(\"overdueamount_659A_mean\") / pl.col(\"outstandingamount_362A_mean\")).alias(\"overdue_ratio_active_mean\"),\n        (pl.col(\"overdueamount_659A_max\") / pl.col(\"outstandingamount_362A_max\")).alias(\"overdue_ratio_active_max\"),\n        (pl.col(\"overdueamount_659A_sum\") / pl.col(\"outstandingamount_362A_sum\")).alias(\"overdue_ratio_active_sum\"),\n        \n        # Overdue ratio cho Closed Contracts\n        (pl.col(\"overdueamount_31A_mean\") / pl.col(\"outstandingamount_354A_mean\")).alias(\"overdue_ratio_closed_mean\"),\n        (pl.col(\"overdueamount_31A_max\") / pl.col(\"outstandingamount_354A_max\")).alias(\"overdue_ratio_closed_max\"),\n        (pl.col(\"overdueamount_31A_sum\") / pl.col(\"outstandingamount_354A_sum\")).alias(\"overdue_ratio_closed_sum\"),\n        \n        # Max overdue ratios\n        (pl.col(\"overdueamountmax_155A_mean\") / pl.col(\"outstandingamount_362A_mean\")).alias(\"overdue_ratio_max_active_mean\"),\n        (pl.col(\"overdueamountmax_35A_mean\") / pl.col(\"outstandingamount_354A_mean\")).alias(\"overdue_ratio_max_closed_mean\"),\n    ])\n    \n    # 2. DPD Ratio\n    result_df = result_df.with_columns([\n        # DPD ratio = Max DPD / Contract duration (using max for contract duration)\n        (pl.col(\"dpdmax_139P_mean\") / pl.col(\"diff_dateofcre_and_dateof_end_active_max\")).alias(\"dpd_ratio_active_mean\"),\n        (pl.col(\"dpdmax_139P_max\") / pl.col(\"diff_dateofcre_and_dateof_end_active_max\")).alias(\"dpd_ratio_active_max\"),\n        (pl.col(\"dpdmax_757P_mean\") / pl.col(\"diff_dateofcre_and_dateof_end_close_max\")).alias(\"dpd_ratio_closed_mean\"),\n        (pl.col(\"dpdmax_757P_max\") / pl.col(\"diff_dateofcre_and_dateof_end_close_max\")).alias(\"dpd_ratio_closed_max\"),\n    ])\n    \n    # 3. Utilization Ratio\n    result_df = result_df.with_columns([\n        # Utilization ratio = Outstanding / Credit limit\n        (pl.col(\"outstandingamount_362A_mean\") / pl.col(\"credlmt_935A_mean\")).alias(\"utilization_ratio_active_mean\"),\n        (pl.col(\"outstandingamount_362A_max\") / pl.col(\"credlmt_935A_mean\")).alias(\"utilization_ratio_active_max\"),\n        (pl.col(\"outstandingamount_354A_mean\") / pl.col(\"credlmt_230A_mean\")).alias(\"utilization_ratio_closed_mean\"),\n        (pl.col(\"outstandingamount_354A_max\") / pl.col(\"credlmt_230A_mean\")).alias(\"utilization_ratio_closed_max\"),\n        \n        # Debt to credit limit ratio\n        (pl.col(\"debtoutstand_525A_mean\") / pl.col(\"credlmt_935A_mean\")).alias(\"debt_to_limit_ratio_mean\"),\n        (pl.col(\"debtoutstand_525A_sum\") / pl.col(\"credlmt_935A_mean\")).alias(\"debt_to_limit_ratio_sum\"),\n    ])\n    \n    # ===== B. CHỈ SỐ TỔNG HỢP =====\n    \n    # 1. Overall Risk Score (combination of DPD, overdue, prolongation)\n    # Chuẩn hóa các thành phần trước khi kết hợp\n    result_df = result_df.with_columns([\n        # Normalized DPD (0-1 scale, cap at 365 days)\n        (pl.col(\"dpdmax_139P_mean\").clip(0, 365) / 365).alias(\"dpd_normalized_active_mean\"),\n        (pl.col(\"dpdmax_139P_max\").clip(0, 365) / 365).alias(\"dpd_normalized_active_max\"),\n        (pl.col(\"dpdmax_757P_mean\").clip(0, 365) / 365).alias(\"dpd_normalized_closed_mean\"),\n        (pl.col(\"dpdmax_757P_max\").clip(0, 365) / 365).alias(\"dpd_normalized_closed_max\"),\n        \n        # Normalized overdue ratio (0-1 scale, cap at 1)\n        pl.col(\"overdue_ratio_active_mean\").clip(0, 1).alias(\"overdue_normalized_active_mean\"),\n        pl.col(\"overdue_ratio_active_max\").clip(0, 1).alias(\"overdue_normalized_active_max\"),\n        pl.col(\"overdue_ratio_closed_mean\").clip(0, 1).alias(\"overdue_normalized_closed_mean\"),\n        pl.col(\"overdue_ratio_closed_max\").clip(0, 1).alias(\"overdue_normalized_closed_max\"),\n        \n        # Normalized prolongation count (0-1 scale, cap at 10)\n        (pl.col(\"prolongationcount_599L_mean\").clip(0, 10) / 10).alias(\"prolongation_normalized_active_mean\"),\n        (pl.col(\"prolongationcount_599L_max\").clip(0, 10) / 10).alias(\"prolongation_normalized_active_max\"),\n        (pl.col(\"prolongationcount_1120L_mean\").clip(0, 10) / 10).alias(\"prolongation_normalized_closed_mean\"),\n        (pl.col(\"prolongationcount_1120L_max\").clip(0, 10) / 10).alias(\"prolongation_normalized_closed_max\"),\n    ])\n    \n    # Overall risk score (weighted combination) - 0-100 scale\n    result_df = result_df.with_columns([\n        # Risk score for active contracts - MEAN\n        ((pl.col(\"dpd_normalized_active_mean\") * 0.4 + \n          pl.col(\"overdue_normalized_active_mean\") * 0.4 + \n          pl.col(\"prolongation_normalized_active_mean\") * 0.2) * 100).alias(\"overall_risk_score_active_mean\"),\n          \n        # Risk score for active contracts - MAX  \n        ((pl.col(\"dpd_normalized_active_max\") * 0.4 + \n          pl.col(\"overdue_normalized_active_max\") * 0.4 + \n          pl.col(\"prolongation_normalized_active_max\") * 0.2) * 100).alias(\"overall_risk_score_active_max\"),\n          \n        # Risk score for closed contracts - MEAN\n        ((pl.col(\"dpd_normalized_closed_mean\") * 0.4 + \n          pl.col(\"overdue_normalized_closed_mean\") * 0.4 + \n          pl.col(\"prolongation_normalized_closed_mean\") * 0.2) * 100).alias(\"overall_risk_score_closed_mean\"),\n          \n        # Risk score for closed contracts - MAX\n        ((pl.col(\"dpd_normalized_closed_max\") * 0.4 + \n          pl.col(\"overdue_normalized_closed_max\") * 0.4 + \n          pl.col(\"prolongation_normalized_closed_max\") * 0.2) * 100).alias(\"overall_risk_score_closed_max\"),\n    ])\n    \n    # 2. Payment Behavior Score\n    result_df = result_df.with_columns([\n        # Payment regularity (dựa trên số lần overdue vs total instalments)\n        (1 - (pl.col(\"numberofoverdueinstls_725L_mean\") / pl.col(\"numberofinstls_320L_mean\"))).alias(\"payment_regularity_active_mean\"),\n        (1 - (pl.col(\"numberofoverdueinstls_725L_max\") / pl.col(\"numberofinstls_320L_max\"))).alias(\"payment_regularity_active_max\"),\n        (1 - (pl.col(\"numberofoverdueinstls_834L_mean\") / pl.col(\"numberofinstls_229L_mean\"))).alias(\"payment_regularity_closed_mean\"),\n        (1 - (pl.col(\"numberofoverdueinstls_834L_max\") / pl.col(\"numberofinstls_229L_max\"))).alias(\"payment_regularity_closed_max\"),\n        \n        # Payment amount consistency (monthly vs actual instalment)\n        (pl.col(\"monthlyinstlamount_332A_mean\") / pl.col(\"instlamount_768A_mean\")).alias(\"payment_consistency_active_mean\"),\n        (pl.col(\"monthlyinstlamount_332A_max\") / pl.col(\"instlamount_768A_max\")).alias(\"payment_consistency_active_max\"),\n        (pl.col(\"monthlyinstlamount_674A_mean\") / pl.col(\"instlamount_852A_mean\")).alias(\"payment_consistency_closed_mean\"),\n        (pl.col(\"monthlyinstlamount_674A_max\") / pl.col(\"instlamount_852A_max\")).alias(\"payment_consistency_closed_max\"),\n    ])\n    \n    # Payment behavior score (0-100)\n    result_df = result_df.with_columns([\n        # Active - MEAN\n        ((pl.col(\"payment_regularity_active_mean\") * 0.6 + \n          pl.col(\"payment_consistency_active_mean\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_active_mean\"),\n          \n        # Active - MAX\n        ((pl.col(\"payment_regularity_active_max\") * 0.6 + \n          pl.col(\"payment_consistency_active_max\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_active_max\"),\n          \n        # Closed - MEAN\n        ((pl.col(\"payment_regularity_closed_mean\") * 0.6 + \n          pl.col(\"payment_consistency_closed_mean\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_closed_mean\"),\n          \n        # Closed - MAX\n        ((pl.col(\"payment_regularity_closed_max\") * 0.6 + \n          pl.col(\"payment_consistency_closed_max\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_closed_max\"),\n    ])\n    \n    # 3. Contract Stability Score\n    result_df = result_df.with_columns([\n        # Contract completion rate (for closed contracts)\n        (pl.col(\"numberofinstls_229L_mean\") / (pl.col(\"numberofinstls_229L_mean\") + pl.col(\"numberofoutstandinstls_520L_mean\"))).alias(\"completion_rate_closed_mean\"),\n        (pl.col(\"numberofinstls_229L_max\") / (pl.col(\"numberofinstls_229L_max\") + pl.col(\"numberofoutstandinstls_520L_max\"))).alias(\"completion_rate_closed_max\"),\n        \n        # Contract progress rate (for active contracts)\n        ((pl.col(\"numberofinstls_320L_mean\") - pl.col(\"numberofoutstandinstls_59L_mean\")) / pl.col(\"numberofinstls_320L_mean\")).alias(\"progress_rate_active_mean\"),\n        ((pl.col(\"numberofinstls_320L_max\") - pl.col(\"numberofoutstandinstls_59L_max\")) / pl.col(\"numberofinstls_320L_max\")).alias(\"progress_rate_active_max\"),\n        \n        # Stability indicator (lower prolongation = higher stability)\n        (1 / (1 + pl.col(\"prolongationcount_599L_mean\"))).alias(\"stability_indicator_active_mean\"),\n        (1 / (1 + pl.col(\"prolongationcount_599L_max\"))).alias(\"stability_indicator_active_max\"),\n        (1 / (1 + pl.col(\"prolongationcount_1120L_mean\"))).alias(\"stability_indicator_closed_mean\"),\n        (1 / (1 + pl.col(\"prolongationcount_1120L_max\"))).alias(\"stability_indicator_closed_max\"),\n    ])\n    \n    # Contract stability score (0-100)\n    result_df = result_df.with_columns([\n        # Active - MEAN\n        ((pl.col(\"progress_rate_active_mean\") * 0.5 + \n          pl.col(\"stability_indicator_active_mean\") * 0.5) * 100).alias(\"contract_stability_score_active_mean\"),\n          \n        # Active - MAX\n        ((pl.col(\"progress_rate_active_max\") * 0.5 + \n          pl.col(\"stability_indicator_active_max\") * 0.5) * 100).alias(\"contract_stability_score_active_max\"),\n          \n        # Closed - MEAN\n        ((pl.col(\"completion_rate_closed_mean\") * 0.5 + \n          pl.col(\"stability_indicator_closed_mean\") * 0.5) * 100).alias(\"contract_stability_score_closed_mean\"),\n          \n        # Closed - MAX\n        ((pl.col(\"completion_rate_closed_max\") * 0.5 + \n          pl.col(\"stability_indicator_closed_max\") * 0.5) * 100).alias(\"contract_stability_score_closed_max\"),\n    ])\n    \n    # ===== C. TIME-BASED FEATURES =====\n    \n    # 1. Recency features (đã có từ các cột date diff)\n    result_df = result_df.with_columns([\n        # Recent update vs historical\n        (pl.col(\"diff_date_decision_lastupdate_1112D_max\") > pl.col(\"diff_date_decision_lastupdate_1112D_mean\")).alias(\"recent_update_active\"),\n        (pl.col(\"diff_date_decision_lastupdate_388D_max\") > pl.col(\"diff_date_decision_lastupdate_388D_mean\")).alias(\"recent_update_closed\"),\n    ])\n    \n    # 2. Trend indicators\n    result_df = result_df.with_columns([\n        # Recent vs historical overdue (comparing current vs max)\n        (pl.col(\"overdueamount_659A_mean\") / pl.col(\"overdueamountmax_155A_mean\")).alias(\"recent_overdue_trend_active\"),\n        (pl.col(\"overdueamount_31A_mean\") / pl.col(\"overdueamountmax_35A_mean\")).alias(\"recent_overdue_trend_closed\"),\n        \n        # Outstanding trend (current vs residual)\n        (pl.col(\"outstandingamount_362A_mean\") / pl.col(\"residualamount_856A_mean\")).alias(\"outstanding_trend_active_mean\"),\n        (pl.col(\"outstandingamount_362A_max\") / pl.col(\"residualamount_856A_max\")).alias(\"outstanding_trend_active_max\"),\n        (pl.col(\"outstandingamount_354A_mean\") / pl.col(\"residualamount_488A_mean\")).alias(\"outstanding_trend_closed_mean\"),\n        (pl.col(\"outstandingamount_354A_max\") / pl.col(\"residualamount_488A_max\")).alias(\"outstanding_trend_closed_max\"),\n    ])\n    \n    # ===== D. ADDITIONAL COMPOSITE FEATURES =====\n    \n    # 1. Credit exposure features\n    result_df = result_df.with_columns([\n        # Total exposure (sum of all outstanding amounts)\n        (pl.col(\"outstandingamount_362A_sum\") + pl.col(\"outstandingamount_354A_sum\")).alias(\"total_exposure_sum\"),\n        (pl.col(\"outstandingamount_362A_mean\") + pl.col(\"outstandingamount_354A_mean\")).alias(\"total_exposure_mean\"),\n        \n        # Risk-weighted exposure\n        (pl.col(\"outstandingamount_362A_mean\") * pl.col(\"overall_risk_score_active_mean\") / 100).alias(\"risk_weighted_exposure_active_mean\"),\n        (pl.col(\"outstandingamount_354A_mean\") * pl.col(\"overall_risk_score_closed_mean\") / 100).alias(\"risk_weighted_exposure_closed_mean\"),\n    ])\n    \n    # 2. Portfolio quality indicators\n    result_df = result_df.with_columns([\n        # Active vs closed contract ratio\n        (pl.col(\"numberofcontrsvalue_258L_mean\") / pl.col(\"numberofcontrsvalue_358L_mean\")).alias(\"active_closed_ratio_mean\"),\n        (pl.col(\"numberofcontrsvalue_258L_max\") / pl.col(\"numberofcontrsvalue_358L_max\")).alias(\"active_closed_ratio_sum\"),\n        \n        # Average contract size\n        (pl.col(\"totalamount_996A_mean\") / pl.col(\"numberofcontrsvalue_258L_mean\")).alias(\"avg_contract_size_active_mean\"),\n        (pl.col(\"totalamount_6A_mean\") / pl.col(\"numberofcontrsvalue_358L_mean\")).alias(\"avg_contract_size_closed_mean\"),\n    ])\n    \n    # 3. Early warning indicators\n    result_df = result_df.with_columns([\n        # Deterioration signal (recent overdue > historical average)\n        (pl.col(\"recent_overdue_trend_active\") > 1).alias(\"deterioration_signal_active\"),\n        (pl.col(\"recent_overdue_trend_closed\") > 1).alias(\"deterioration_signal_closed\"),\n        \n        # High risk flag (multiple risk factors)\n        ((pl.col(\"overall_risk_score_active_mean\") > 70) & \n         (pl.col(\"utilization_ratio_active_mean\") > 0.8) & \n         (pl.col(\"overdue_ratio_active_mean\") > 0.1)).alias(\"high_risk_flag_active\"),\n         \n        # Payment stress indicator\n        ((pl.col(\"payment_behavior_score_active_mean\") < 50) & \n         (pl.col(\"contract_stability_score_active_mean\") < 60)).alias(\"payment_stress_flag_active\"),\n    ])\n    \n    return result_df\n\ndef process_credit_bureau_data(df):\n    \"\"\"\n    Hàm chính để xử lý dữ liệu credit bureau và tạo features hoàn chỉnh\n    \n    Args:\n        df: DataFrame chứa raw data credit bureau\n        \n    Returns:\n        DataFrame với các features đã được aggregate và enhanced\n    \"\"\"\n    \n    # Bước 1: Tạo base aggregations theo case_id\n    print(\"Đang thực hiện base aggregations...\")\n    df_agg = create_base_aggregations(df)\n    \n    # Bước 2: Tạo advanced features\n    print(\"Đang tạo advanced features...\")\n    df_enhanced = create_advanced_features(df_agg)\n    \n    return df_enhanced\n\n# Hàm để chạy từ file CSV\ndef run_feature_engineering(file_path):\n    \"\"\"\n    Chạy toàn bộ feature engineering từ file CSV\n    \n    Args:\n        file_path: Đường dẫn đến file CSV\n        \n    Returns:\n        DataFrame với features hoàn chỉnh\n    \"\"\"\n    \n    print(f\"Đang đọc dữ liệu từ {file_path}...\")\n    df = pl.read_csv(file_path)\n    \n    print(f\"Dữ liệu gốc: {df.shape[0]} rows, {df.shape[1]} columns\")\n    \n    # Xử lý feature engineering\n    df_result = process_credit_bureau_data(df)\n    \n    print(f\"Dữ liệu sau khi xử lý: {df_result.shape[0]} rows, {df_result.shape[1]} columns\")\n    print(\"Feature engineering hoàn tất!\")\n    \n    return df_result\n\n# Ví dụ sử dụng:\nif __name__ == \"__main__\":\n    # Cách 1: Từ file CSV\n    # df_result = run_feature_engineering(\"path/to/your/credit_bureau_data.csv\")\n    \n    # Cách 2: Từ DataFrame có sẵn\n    # df_result = process_credit_bureau_data(your_dataframe)\n    \n    # Lưu kết quả\n    # df_result.write_csv(\"credit_features_complete.csv\")\n    \n    print(\"=== FEATURE SUMMARY ===\")\n    print(\"✅ BASE AGGREGATIONS (theo mapping):\")\n    print(\"   - Mean: 42 features\")\n    print(\"   - Max: 56 features\") \n    print(\"   - Sum: 26 features\")\n    print(\"   - Mode: 19 features\")\n    print(\"   - Count: 1 feature\")\n    \n    print(\"\\n✅ ADVANCED FEATURES (đề xuất cải thiện):\")\n    print(\"   - Tỷ lệ rủi ro: 15+ features\")\n    print(\"   - Chỉ số tổng hợp: 20+ features\")\n    print(\"   - Time-based: 10+ features\")\n    print(\"   - Composite: 15+ features\")\n    \n    print(\"\\n🎯 TỔNG CỘNG: ~200+ features\")\n    print(\"💾 Null values: ĐƯỢC BẢO TOÀN HOÀN TOÀN\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T04:35:24.95313Z","iopub.execute_input":"2025-06-14T04:35:24.953674Z","iopub.status.idle":"2025-06-14T04:35:25.315544Z","shell.execute_reply.started":"2025-06-14T04:35:24.953641Z","shell.execute_reply":"2025-06-14T04:35:25.31459Z"}},"outputs":[{"name":"stdout","text":"=== FEATURE SUMMARY ===\n✅ BASE AGGREGATIONS (theo mapping):\n   - Mean: 42 features\n   - Max: 56 features\n   - Sum: 26 features\n   - Mode: 19 features\n   - Count: 1 feature\n\n✅ ADVANCED FEATURES (đề xuất cải thiện):\n   - Tỷ lệ rủi ro: 15+ features\n   - Chỉ số tổng hợp: 20+ features\n   - Time-based: 10+ features\n   - Composite: 15+ features\n\n🎯 TỔNG CỘNG: ~200+ features\n💾 Null values: ĐƯỢC BẢO TOÀN HOÀN TOÀN\n","output_type":"stream"}],"execution_count":13},{"cell_type":"code","source":"df_result = process_credit_bureau_data(df_train_credit_bureau_a_1)\ndf_result","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T04:35:26.820433Z","iopub.execute_input":"2025-06-14T04:35:26.820705Z","iopub.status.idle":"2025-06-14T04:35:47.235907Z","shell.execute_reply.started":"2025-06-14T04:35:26.820687Z","shell.execute_reply":"2025-06-14T04:35:47.235011Z"}},"outputs":[{"name":"stdout","text":"Đang thực hiện base aggregations...\nĐang tạo advanced features...\n","output_type":"stream"},{"execution_count":14,"output_type":"execute_result","data":{"text/plain":"shape: (1_386_273, 226)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ annualeffe ┆ annualeff ┆ credlmt_2 ┆ … ┆ deteriora ┆ deteriora ┆ high_risk ┆ payment_s │\n│ ---     ┆ ctiverate_ ┆ ectiverat ┆ 30A_mean  ┆   ┆ tion_sign ┆ tion_sign ┆ _flag_act ┆ tress_fla │\n│ i64     ┆ 199L_mean  ┆ e_63L_mea ┆ ---       ┆   ┆ al_active ┆ al_closed ┆ ive       ┆ g_active  │\n│         ┆ ---        ┆ n         ┆ f64       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ ---       ┆           ┆   ┆ bool      ┆ bool      ┆ bool      ┆ bool      │\n│         ┆            ┆ f64       ┆           ┆   ┆           ┆           ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 36627   ┆ null       ┆ 26.8      ┆ null      ┆ … ┆ true      ┆ null      ┆ false     ┆ null      │\n│ 975958  ┆ 0.12       ┆ 10.8      ┆ null      ┆ … ┆ true      ┆ true      ┆ false     ┆ false     │\n│ 1691159 ┆ null       ┆ 19.3      ┆ 65750.0   ┆ … ┆ true      ┆ false     ┆ false     ┆ false     │\n│ 1315455 ┆ null       ┆ null      ┆ null      ┆ … ┆ false     ┆ null      ┆ false     ┆ null      │\n│ 2624151 ┆ 67.3       ┆ null      ┆ 0.0       ┆ … ┆ false     ┆ false     ┆ false     ┆ false     │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 1438636 ┆ 8.5        ┆ null      ┆ 11333.333 ┆ … ┆ true      ┆ false     ┆ false     ┆ null      │\n│         ┆            ┆           ┆ 333       ┆   ┆           ┆           ┆           ┆           │\n│ 1575044 ┆ 9.766      ┆ null      ┆ null      ┆ … ┆ false     ┆ false     ┆ false     ┆ false     │\n│ 985797  ┆ 5.44       ┆ 11.86     ┆ null      ┆ … ┆ true      ┆ true      ┆ false     ┆ false     │\n│ 912824  ┆ null       ┆ null      ┆ null      ┆ … ┆ true      ┆ null      ┆ null      ┆ null      │\n│ 936145  ┆ null       ┆ null      ┆ null      ┆ … ┆ true      ┆ null      ┆ null      ┆ null      │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_386_273, 226)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>annualeffectiverate_199L_mean</th><th>annualeffectiverate_63L_mean</th><th>credlmt_230A_mean</th><th>credlmt_935A_mean</th><th>debtoutstand_525A_mean</th><th>debtoverdue_47A_mean</th><th>dpdmax_139P_mean</th><th>dpdmax_757P_mean</th><th>instlamount_768A_mean</th><th>instlamount_852A_mean</th><th>monthlyinstlamount_332A_mean</th><th>monthlyinstlamount_674A_mean</th><th>nominalrate_281L_mean</th><th>nominalrate_498L_mean</th><th>numberofcontrsvalue_258L_mean</th><th>numberofcontrsvalue_358L_mean</th><th>numberofinstls_229L_mean</th><th>numberofinstls_320L_mean</th><th>numberofoutstandinstls_520L_mean</th><th>numberofoutstandinstls_59L_mean</th><th>numberofoverdueinstlmax_1039L_mean</th><th>numberofoverdueinstlmax_1151L_mean</th><th>numberofoverdueinstls_725L_mean</th><th>numberofoverdueinstls_834L_mean</th><th>outstandingamount_354A_mean</th><th>outstandingamount_362A_mean</th><th>overdueamount_31A_mean</th><th>overdueamount_659A_mean</th><th>overdueamountmax2_14A_mean</th><th>overdueamountmax2_398A_mean</th><th>overdueamountmax_155A_mean</th><th>overdueamountmax_35A_mean</th><th>periodicityofpmts_1102L_mean</th><th>periodicityofpmts_837L_mean</th><th>prolongationcount_1120L_mean</th><th>prolongationcount_599L_mean</th><th>&hellip;</th><th>payment_consistency_closed_max</th><th>payment_behavior_score_active_mean</th><th>payment_behavior_score_active_max</th><th>payment_behavior_score_closed_mean</th><th>payment_behavior_score_closed_max</th><th>completion_rate_closed_mean</th><th>completion_rate_closed_max</th><th>progress_rate_active_mean</th><th>progress_rate_active_max</th><th>stability_indicator_active_mean</th><th>stability_indicator_active_max</th><th>stability_indicator_closed_mean</th><th>stability_indicator_closed_max</th><th>contract_stability_score_active_mean</th><th>contract_stability_score_active_max</th><th>contract_stability_score_closed_mean</th><th>contract_stability_score_closed_max</th><th>recent_update_active</th><th>recent_update_closed</th><th>recent_overdue_trend_active</th><th>recent_overdue_trend_closed</th><th>outstanding_trend_active_mean</th><th>outstanding_trend_active_max</th><th>outstanding_trend_closed_mean</th><th>outstanding_trend_closed_max</th><th>total_exposure_sum</th><th>total_exposure_mean</th><th>risk_weighted_exposure_active_mean</th><th>risk_weighted_exposure_closed_mean</th><th>active_closed_ratio_mean</th><th>active_closed_ratio_sum</th><th>avg_contract_size_active_mean</th><th>avg_contract_size_closed_mean</th><th>deterioration_signal_active</th><th>deterioration_signal_closed</th><th>high_risk_flag_active</th><th>payment_stress_flag_active</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>&hellip;</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>bool</td><td>bool</td><td>bool</td><td>bool</td></tr></thead><tbody><tr><td>36627</td><td>null</td><td>26.8</td><td>null</td><td>null</td><td>71133.35</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>2129.372</td><td>null</td><td>24.0</td><td>null</td><td>1.0</td><td>null</td><td>null</td><td>60.0</td><td>null</td><td>56.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>71133.35</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.066667</td><td>0.066667</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>NaN</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>71133.35</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>74000.0</td><td>null</td><td>true</td><td>null</td><td>false</td><td>null</td></tr><tr><td>975958</td><td>0.12</td><td>10.8</td><td>null</td><td>26087.0</td><td>74870.87</td><td>0.0</td><td>0.0</td><td>0.0</td><td>2174.2</td><td>null</td><td>3193.4</td><td>1819.9</td><td>0.12</td><td>0.12</td><td>2.0</td><td>2.0</td><td>3.0</td><td>24.0</td><td>0.0</td><td>15.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>53132.26</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>30.0</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>118.750805</td><td>137.50161</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td><td>0.375</td><td>0.375</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>true</td><td>NaN</td><td>NaN</td><td>2.444144</td><td>2.444144</td><td>null</td><td>null</td><td>53132.26</td><td>53132.26</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td><td>45489.0</td><td>40573.1</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>1691159</td><td>null</td><td>19.3</td><td>65750.0</td><td>122500.0</td><td>1313334.2</td><td>0.0</td><td>0.0</td><td>0.133333</td><td>1405.64805</td><td>0.0</td><td>12106.035367</td><td>6573.403147</td><td>15.0</td><td>43.3</td><td>3.0</td><td>15.0</td><td>26.272727</td><td>49.0</td><td>0.0</td><td>43.0</td><td>0.0</td><td>0.133333</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.110677e6</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1894.63442</td><td>0.0</td><td>1500.3494</td><td>30.0</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>inf</td><td>140.0</td><td>140.0</td><td>140.0</td><td>140.0</td><td>1.0</td><td>1.0</td><td>0.122449</td><td>0.122449</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>true</td><td>NaN</td><td>0.0</td><td>10.961141</td><td>5.48057</td><td>NaN</td><td>NaN</td><td>1.110677e6</td><td>1.110677e6</td><td>null</td><td>null</td><td>0.2</td><td>0.2</td><td>400000.0</td><td>28235.907881</td><td>true</td><td>false</td><td>false</td><td>false</td></tr><tr><td>1315455</td><td>null</td><td>null</td><td>null</td><td>null</td><td>8251.2</td><td>0.0</td><td>10.0</td><td>null</td><td>null</td><td>null</td><td>4262.2</td><td>null</td><td>42.0</td><td>null</td><td>1.0</td><td>2.0</td><td>null</td><td>14.0</td><td>null</td><td>2.0</td><td>11.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>8251.2</td><td>null</td><td>0.0</td><td>4.2000003</td><td>null</td><td>4.2000003</td><td>null</td><td>null</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.857143</td><td>0.857143</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>8251.2</td><td>null</td><td>null</td><td>null</td><td>0.5</td><td>0.5</td><td>46621.6</td><td>null</td><td>false</td><td>null</td><td>false</td><td>null</td></tr><tr><td>2624151</td><td>67.3</td><td>null</td><td>0.0</td><td>126388.0</td><td>98820.97</td><td>0.0</td><td>1.333333</td><td>2.222222</td><td>13622.601</td><td>null</td><td>6424.733667</td><td>3197.5213</td><td>45.0</td><td>52.93</td><td>3.0</td><td>18.0</td><td>6.117647</td><td>3.5</td><td>0.0</td><td>1.0</td><td>4.666667</td><td>2.5</td><td>0.0</td><td>0.0</td><td>0.0</td><td>2812.543</td><td>0.0</td><td>0.0</td><td>3823.394</td><td>902.607672</td><td>818.066667</td><td>902.607672</td><td>30.0</td><td>30.0</td><td>1.0</td><td>null</td><td>&hellip;</td><td>null</td><td>78.864925</td><td>100.0</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td><td>0.714286</td><td>0.833333</td><td>null</td><td>null</td><td>0.5</td><td>0.333333</td><td>null</td><td>null</td><td>75.0</td><td>66.666667</td><td>true</td><td>true</td><td>0.0</td><td>0.0</td><td>0.030179</td><td>0.034025</td><td>NaN</td><td>NaN</td><td>5625.086</td><td>2812.543</td><td>null</td><td>NaN</td><td>0.166667</td><td>0.166667</td><td>2684.133333</td><td>1007.341183</td><td>false</td><td>false</td><td>false</td><td>false</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>1438636</td><td>8.5</td><td>null</td><td>11333.333333</td><td>null</td><td>8315.454</td><td>0.0</td><td>0.0</td><td>43.5</td><td>null</td><td>0.05</td><td>1508.0</td><td>5666.495342</td><td>41.75</td><td>20.424</td><td>1.0</td><td>7.0</td><td>13.363636</td><td>12.0</td><td>0.0</td><td>6.0</td><td>0.0</td><td>48.285714</td><td>0.0</td><td>0.0</td><td>0.0</td><td>8315.454</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1521.1565</td><td>0.0</td><td>1521.1565</td><td>30.0</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>1062037.4</td><td>null</td><td>null</td><td>140.0</td><td>140.0</td><td>1.0</td><td>1.0</td><td>0.5</td><td>0.5</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>true</td><td>NaN</td><td>0.0</td><td>null</td><td>null</td><td>NaN</td><td>NaN</td><td>8315.454</td><td>8315.454</td><td>null</td><td>null</td><td>0.142857</td><td>0.083333</td><td>14598.0</td><td>36238.004156</td><td>true</td><td>false</td><td>false</td><td>null</td></tr><tr><td>1575044</td><td>9.766</td><td>null</td><td>null</td><td>0.0</td><td>199780.73</td><td>0.0</td><td>0.5</td><td>0.5</td><td>0.0</td><td>null</td><td>3901.5</td><td>2820.4</td><td>14.433333</td><td>13.68</td><td>4.0</td><td>8.0</td><td>9.0</td><td>17.333333</td><td>0.0</td><td>13.333333</td><td>0.5</td><td>0.625</td><td>0.0</td><td>0.0</td><td>0.0</td><td>66593.578333</td><td>0.0</td><td>0.0</td><td>131.7915</td><td>999.025</td><td>131.7915</td><td>999.025</td><td>30.0</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>140.0</td><td>140.0</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td><td>0.230769</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>true</td><td>0.0</td><td>0.0</td><td>inf</td><td>inf</td><td>null</td><td>null</td><td>199780.735</td><td>66593.578333</td><td>null</td><td>null</td><td>0.5</td><td>0.5</td><td>21202.166667</td><td>4550.96875</td><td>false</td><td>false</td><td>false</td><td>false</td></tr><tr><td>985797</td><td>5.44</td><td>11.86</td><td>null</td><td>42374.0</td><td>577216.7</td><td>0.0</td><td>0.0</td><td>0.0</td><td>4027.4001</td><td>null</td><td>5086.2067</td><td>0.0</td><td>2.46</td><td>5.0</td><td>1.5</td><td>1.0</td><td>27.0</td><td>54.0</td><td>0.0</td><td>52.5</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>267421.34</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>30.0</td><td>30.0</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>110.516031</td><td>127.748124</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td><td>0.027778</td><td>0.027778</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>true</td><td>NaN</td><td>NaN</td><td>6.310977</td><td>9.822957</td><td>null</td><td>null</td><td>534842.68</td><td>267421.34</td><td>null</td><td>null</td><td>1.5</td><td>2.0</td><td>183111.266667</td><td>743000.0</td><td>true</td><td>true</td><td>false</td><td>false</td></tr><tr><td>912824</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>NaN</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>null</td><td>null</td><td>null</td></tr><tr><td>936145</td><td>null</td><td>null</td><td>null</td><td>14999.0</td><td>19998.0</td><td>0.0</td><td>0.0</td><td>null</td><td>770.4</td><td>null</td><td>770.4</td><td>null</td><td>39.0</td><td>null</td><td>2.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&hellip;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>null</td><td>NaN</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>true</td><td>null</td><td>null</td><td>null</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":14},{"cell_type":"markdown","source":"df_result","metadata":{}},{"cell_type":"code","source":"df_result.write_csv(\"credit_features_complete.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T04:54:48.858542Z","iopub.execute_input":"2025-06-14T04:54:48.858921Z","iopub.status.idle":"2025-06-14T04:55:01.010519Z","shell.execute_reply.started":"2025-06-14T04:54:48.858899Z","shell.execute_reply":"2025-06-14T04:55:01.00946Z"}},"outputs":[],"execution_count":15},{"cell_type":"code","source":"# Lấy các case_id distinct từ hai DataFrames\ncase_ids_b = train_credit_bureau_b_1.select(\"case_id\").distinct()\ncase_ids_a = train_credit_bureau_a_1.select(\"case_id\").distinct()\n\n# Dùng anti join để tìm các case_id có trong B nhưng không có trong A\nnot_in_a = case_ids_b.join(case_ids_a, on=\"case_id\", how=\"left_anti\")\n\n# Đếm số lượng case_id không có trong A\nmissing_count = not_in_a.count()\n\n# In kết quả\nif missing_count == 0:\n    print(\"✅ Tất cả 36,500 case_id trong B đều có trong A.\")\nelse:\n    print(f\"⚠️ Có {missing_count} case_id trong B KHÔNG có trong A.\")\n    not_in_a.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:49:09.154602Z","iopub.execute_input":"2025-06-13T07:49:09.154984Z","iopub.status.idle":"2025-06-13T07:49:16.067992Z","shell.execute_reply.started":"2025-06-13T07:49:09.154957Z","shell.execute_reply":"2025-06-13T07:49:16.066582Z"}},"outputs":[{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"},{"name":"stdout","text":"⚠️ Có 2616 case_id trong B KHÔNG có trong A.\n","output_type":"stream"},{"name":"stderr","text":"[Stage 255:=============================================================>               (4 + 1) / 5]\r","output_type":"stream"},{"name":"stdout","text":"+-------+\n|case_id|\n+-------+\n|   1445|\n|   1934|\n|   3559|\n|   4898|\n|   8564|\n|  11187|\n|  11195|\n|  11196|\n|  11217|\n|  11222|\n|  11250|\n|  11257|\n|  11270|\n|  22704|\n|  22736|\n|  22758|\n|  31945|\n|  31991|\n|  32181|\n|  32268|\n+-------+\nonly showing top 20 rows\n\n","output_type":"stream"},{"name":"stderr","text":"                                                                                                    \r","output_type":"stream"}],"execution_count":72},{"cell_type":"code","source":"15_940_537","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:49:16.06987Z","iopub.execute_input":"2025-06-13T07:49:16.070248Z","iopub.status.idle":"2025-06-13T07:49:16.113691Z","shell.execute_reply.started":"2025-06-13T07:49:16.070215Z","shell.execute_reply":"2025-06-13T07:49:16.111701Z"}},"outputs":[{"execution_count":73,"output_type":"execute_result","data":{"text/plain":"15940537"},"metadata":{}}],"execution_count":73},{"cell_type":"code","source":"df_train_credit_bureau_a_1.select(\n    [pl.col(c).is_null().sum().alias(c) for c in df_train_credit_bureau_a_1.columns]\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:49:16.115978Z","iopub.execute_input":"2025-06-13T07:49:16.117005Z","iopub.status.idle":"2025-06-13T07:49:16.178939Z","shell.execute_reply.started":"2025-06-13T07:49:16.11696Z","shell.execute_reply":"2025-06-13T07:49:16.177902Z"}},"outputs":[{"execution_count":74,"output_type":"execute_result","data":{"text/plain":"shape: (1, 79)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ annualeffe ┆ annualeff ┆ classific ┆ … ┆ totaldebt ┆ totaldebt ┆ totalouts ┆ totalouts │\n│ ---     ┆ ctiverate_ ┆ ectiverat ┆ ationofco ┆   ┆ overdueva ┆ overdueva ┆ tanddebtv ┆ tanddebtv │\n│ u32     ┆ 199L       ┆ e_63L     ┆ ntr_13M   ┆   ┆ lue_178A  ┆ lue_718A  ┆ alue_39A  ┆ alue_668A │\n│         ┆ ---        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ u32        ┆ u32       ┆ u32       ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 15213904   ┆ 15629294  ┆ 0         ┆ … ┆ 14635534  ┆ 14664995  ┆ 14635534  ┆ 14664995  │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 79)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>annualeffectiverate_199L</th><th>annualeffectiverate_63L</th><th>classificationofcontr_13M</th><th>classificationofcontr_400M</th><th>contractst_545M</th><th>contractst_964M</th><th>contractsum_5085717L</th><th>credlmt_230A</th><th>credlmt_935A</th><th>dateofcredend_289D</th><th>dateofcredend_353D</th><th>dateofcredstart_181D</th><th>dateofcredstart_739D</th><th>dateofrealrepmt_138D</th><th>debtoutstand_525A</th><th>debtoverdue_47A</th><th>description_351M</th><th>dpdmax_139P</th><th>dpdmax_757P</th><th>dpdmaxdatemonth_442T</th><th>dpdmaxdatemonth_89T</th><th>dpdmaxdateyear_596T</th><th>dpdmaxdateyear_896T</th><th>financialinstitution_382M</th><th>financialinstitution_591M</th><th>instlamount_768A</th><th>instlamount_852A</th><th>interestrate_508L</th><th>lastupdate_1112D</th><th>lastupdate_388D</th><th>monthlyinstlamount_332A</th><th>monthlyinstlamount_674A</th><th>nominalrate_281L</th><th>nominalrate_498L</th><th>num_group1</th><th>numberofcontrsvalue_258L</th><th>&hellip;</th><th>numberofoverdueinstlmax_1039L</th><th>numberofoverdueinstlmax_1151L</th><th>numberofoverdueinstlmaxdat_148D</th><th>numberofoverdueinstlmaxdat_641D</th><th>numberofoverdueinstls_725L</th><th>numberofoverdueinstls_834L</th><th>outstandingamount_354A</th><th>outstandingamount_362A</th><th>overdueamount_31A</th><th>overdueamount_659A</th><th>overdueamountmax2_14A</th><th>overdueamountmax2_398A</th><th>overdueamountmax2date_1002D</th><th>overdueamountmax2date_1142D</th><th>overdueamountmax_155A</th><th>overdueamountmax_35A</th><th>overdueamountmaxdatemonth_284T</th><th>overdueamountmaxdatemonth_365T</th><th>overdueamountmaxdateyear_2T</th><th>overdueamountmaxdateyear_994T</th><th>periodicityofpmts_1102L</th><th>periodicityofpmts_837L</th><th>prolongationcount_1120L</th><th>prolongationcount_599L</th><th>purposeofcred_426M</th><th>purposeofcred_874M</th><th>refreshdate_3813885D</th><th>residualamount_488A</th><th>residualamount_856A</th><th>subjectrole_182M</th><th>subjectrole_93M</th><th>totalamount_6A</th><th>totalamount_996A</th><th>totaldebtoverduevalue_178A</th><th>totaldebtoverduevalue_718A</th><th>totaloutstanddebtvalue_39A</th><th>totaloutstanddebtvalue_668A</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>&hellip;</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>15213904</td><td>15629294</td><td>0</td><td>0</td><td>0</td><td>0</td><td>15621206</td><td>15044115</td><td>14685552</td><td>13281261</td><td>9188054</td><td>9188040</td><td>13281261</td><td>9225946</td><td>14554700</td><td>14554700</td><td>0</td><td>13296501</td><td>9413642</td><td>9413642</td><td>13296501</td><td>13296501</td><td>9413642</td><td>0</td><td>0</td><td>14701343</td><td>15346371</td><td>15874717</td><td>13281261</td><td>9188241</td><td>13297895</td><td>9648370</td><td>14960980</td><td>13630910</td><td>0</td><td>14635534</td><td>&hellip;</td><td>13281261</td><td>9188040</td><td>13916081</td><td>15260655</td><td>13296747</td><td>9196947</td><td>10081292</td><td>14536309</td><td>9195358</td><td>13296737</td><td>13281261</td><td>9188040</td><td>13935837</td><td>15254776</td><td>13281262</td><td>9405492</td><td>9405492</td><td>13281262</td><td>13281262</td><td>9405492</td><td>10684354</td><td>14573042</td><td>15459068</td><td>15901589</td><td>0</td><td>0</td><td>4855840</td><td>15052745</td><td>14701246</td><td>0</td><td>0</td><td>10079656</td><td>14536246</td><td>14635534</td><td>14664995</td><td>14635534</td><td>14664995</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":74},{"cell_type":"code","source":"!pip install attrs packaging editables pandas scikit-learn sortedcontainers gmpy2 matplotlib\n!pip install gosdt\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T07:49:16.179967Z","iopub.execute_input":"2025-06-13T07:49:16.1802Z","iopub.status.idle":"2025-06-13T07:49:27.511685Z","shell.execute_reply.started":"2025-06-13T07:49:16.180182Z","shell.execute_reply":"2025-06-13T07:49:27.510363Z"}},"outputs":[{"name":"stdout","text":"Requirement already satisfied: attrs in /usr/local/lib/python3.11/dist-packages (25.3.0)\nRequirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (24.2)\nCollecting editables\n  Downloading editables-0.5-py3-none-any.whl.metadata (3.1 kB)\nRequirement already satisfied: pandas in /usr/local/lib/python3.11/dist-packages (2.2.3)\nRequirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (1.2.2)\nRequirement already satisfied: sortedcontainers in /usr/local/lib/python3.11/dist-packages (2.4.0)\nCollecting gmpy2\n  Downloading gmpy2-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (2.8 kB)\nRequirement already satisfied: matplotlib in /usr/local/lib/python3.11/dist-packages (3.7.5)\nRequirement already satisfied: numpy>=1.23.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (1.26.4)\nRequirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas) (2.9.0.post0)\nRequirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.2)\nRequirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas) (2025.2)\nRequirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.15.2)\nRequirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (1.4.2)\nRequirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn) (3.6.0)\nRequirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.3.1)\nRequirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (0.12.1)\nRequirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (4.56.0)\nRequirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (1.4.8)\nRequirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (11.1.0)\nRequirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.11/dist-packages (from matplotlib) (3.2.1)\nRequirement already satisfied: mkl_fft in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (1.3.8)\nRequirement already satisfied: mkl_random in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (1.2.4)\nRequirement already satisfied: mkl_umath in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (0.1.1)\nRequirement already satisfied: mkl in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (2025.1.0)\nRequirement already satisfied: tbb4py in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (2022.1.0)\nRequirement already satisfied: mkl-service in /usr/local/lib/python3.11/dist-packages (from numpy>=1.23.2->pandas) (2.4.1)\nRequirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\nRequirement already satisfied: intel-openmp<2026,>=2024 in /usr/local/lib/python3.11/dist-packages (from mkl->numpy>=1.23.2->pandas) (2024.2.0)\nRequirement already satisfied: tbb==2022.* in /usr/local/lib/python3.11/dist-packages (from mkl->numpy>=1.23.2->pandas) (2022.1.0)\nRequirement already satisfied: tcmlib==1.* in /usr/local/lib/python3.11/dist-packages (from tbb==2022.*->mkl->numpy>=1.23.2->pandas) (1.2.0)\nRequirement already satisfied: intel-cmplr-lib-rt in /usr/local/lib/python3.11/dist-packages (from mkl_umath->numpy>=1.23.2->pandas) (2024.2.0)\nRequirement already satisfied: intel-cmplr-lib-ur==2024.2.0 in /usr/local/lib/python3.11/dist-packages (from intel-openmp<2026,>=2024->mkl->numpy>=1.23.2->pandas) (2024.2.0)\nDownloading editables-0.5-py3-none-any.whl (5.1 kB)\nDownloading gmpy2-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m26.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m\n\u001b[?25hInstalling collected packages: gmpy2, editables\nSuccessfully installed editables-0.5 gmpy2-2.2.1\nCollecting gosdt\n  Downloading gosdt-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (20 kB)\nRequirement already satisfied: numpy>=1.24.3 in /usr/local/lib/python3.11/dist-packages (from gosdt) (1.26.4)\nRequirement already satisfied: scikit-learn>=1.2.2 in /usr/local/lib/python3.11/dist-packages (from gosdt) (1.2.2)\nRequirement already satisfied: pandas>=2.0.1 in /usr/local/lib/python3.11/dist-packages (from gosdt) (2.2.3)\nRequirement already satisfied: mkl_fft in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (1.3.8)\nRequirement already satisfied: mkl_random in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (1.2.4)\nRequirement already satisfied: mkl_umath in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (0.1.1)\nRequirement already satisfied: mkl in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (2025.1.0)\nRequirement already satisfied: tbb4py in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (2022.1.0)\nRequirement already satisfied: mkl-service in /usr/local/lib/python3.11/dist-packages (from numpy>=1.24.3->gosdt) (2.4.1)\nRequirement already satisfied: python-dateutil>=2.8.2 in /usr/local/lib/python3.11/dist-packages (from pandas>=2.0.1->gosdt) (2.9.0.post0)\nRequirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.11/dist-packages (from pandas>=2.0.1->gosdt) (2025.2)\nRequirement already satisfied: tzdata>=2022.7 in /usr/local/lib/python3.11/dist-packages (from pandas>=2.0.1->gosdt) (2025.2)\nRequirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=1.2.2->gosdt) (1.15.2)\nRequirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=1.2.2->gosdt) (1.4.2)\nRequirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn>=1.2.2->gosdt) (3.6.0)\nRequirement already satisfied: six>=1.5 in /usr/local/lib/python3.11/dist-packages (from python-dateutil>=2.8.2->pandas>=2.0.1->gosdt) (1.17.0)\nRequirement already satisfied: intel-openmp<2026,>=2024 in /usr/local/lib/python3.11/dist-packages (from mkl->numpy>=1.24.3->gosdt) (2024.2.0)\nRequirement already satisfied: tbb==2022.* in /usr/local/lib/python3.11/dist-packages (from mkl->numpy>=1.24.3->gosdt) (2022.1.0)\nRequirement already satisfied: tcmlib==1.* in /usr/local/lib/python3.11/dist-packages (from tbb==2022.*->mkl->numpy>=1.24.3->gosdt) (1.2.0)\nRequirement already satisfied: intel-cmplr-lib-rt in /usr/local/lib/python3.11/dist-packages (from mkl_umath->numpy>=1.24.3->gosdt) (2024.2.0)\nRequirement already satisfied: intel-cmplr-lib-ur==2024.2.0 in /usr/local/lib/python3.11/dist-packages (from intel-openmp<2026,>=2024->mkl->numpy>=1.24.3->gosdt) (2024.2.0)\nDownloading gosdt-1.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.3 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m53.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n\u001b[?25hInstalling collected packages: gosdt\nSuccessfully installed gosdt-1.0.4\n","output_type":"stream"}],"execution_count":75},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Tax Registry","metadata":{}},{"cell_type":"code","source":"import polars as pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:50:27.58885Z","iopub.execute_input":"2025-06-14T08:50:27.589247Z","iopub.status.idle":"2025-06-14T08:50:27.594083Z","shell.execute_reply.started":"2025-06-14T08:50:27.589223Z","shell.execute_reply":"2025-06-14T08:50:27.593117Z"}},"outputs":[],"execution_count":2},{"cell_type":"code","source":"tax_a = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_a_1.parquet')\ntax_b = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_b_1.parquet')\ntax_c = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_c_1.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:54:47.856181Z","iopub.execute_input":"2025-06-14T08:54:47.856616Z","iopub.status.idle":"2025-06-14T08:54:48.750812Z","shell.execute_reply.started":"2025-06-14T08:54:47.856587Z","shell.execute_reply":"2025-06-14T08:54:48.750051Z"}},"outputs":[],"execution_count":3},{"cell_type":"code","source":"tax_a","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:54:52.562867Z","iopub.execute_input":"2025-06-14T08:54:52.563183Z","iopub.status.idle":"2025-06-14T08:54:52.582514Z","shell.execute_reply.started":"2025-06-14T08:54:52.563161Z","shell.execute_reply":"2025-06-14T08:54:52.581653Z"}},"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"shape: (3_275_770, 5)\n┌─────────┬─────────────────┬───────────────┬────────────┬─────────────────────┐\n│ case_id ┆ amount_4527230A ┆ name_4527232M ┆ num_group1 ┆ recorddate_4527225D │\n│ ---     ┆ ---             ┆ ---           ┆ ---        ┆ ---                 │\n│ i64     ┆ f64             ┆ str           ┆ i64        ┆ str                 │\n╞═════════╪═════════════════╪═══════════════╪════════════╪═════════════════════╡\n│ 28631   ┆ 711.0           ┆ f980a1ea      ┆ 3          ┆ 2019-09-13          │\n│ 28631   ┆ 1946.0          ┆ f980a1ea      ┆ 2          ┆ 2019-09-13          │\n│ 28631   ┆ 2600.0          ┆ f980a1ea      ┆ 1          ┆ 2019-09-13          │\n│ 28631   ┆ 3616.4001       ┆ f980a1ea      ┆ 0          ┆ 2019-09-13          │\n│ 28632   ┆ 400.0           ┆ 5f9b74f5      ┆ 6          ┆ 2019-09-13          │\n│ …       ┆ …               ┆ …             ┆ …          ┆ …                   │\n│ 2701515 ┆ 2992.0          ┆ 48e44a99      ┆ 0          ┆ 2020-10-09          │\n│ 2701515 ┆ 4691.8003       ┆ 5e180ef0      ┆ 1          ┆ 2020-10-09          │\n│ 2702290 ┆ 850.0           ┆ 94721311      ┆ 0          ┆ 2020-10-13          │\n│ 2702290 ┆ 850.0           ┆ 94721311      ┆ 1          ┆ 2020-10-13          │\n│ 2702290 ┆ 850.0           ┆ 94721311      ┆ 2          ┆ 2020-10-13          │\n└─────────┴─────────────────┴───────────────┴────────────┴─────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (3_275_770, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amount_4527230A</th><th>name_4527232M</th><th>num_group1</th><th>recorddate_4527225D</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>i64</td><td>str</td></tr></thead><tbody><tr><td>28631</td><td>711.0</td><td>&quot;f980a1ea&quot;</td><td>3</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28631</td><td>1946.0</td><td>&quot;f980a1ea&quot;</td><td>2</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28631</td><td>2600.0</td><td>&quot;f980a1ea&quot;</td><td>1</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28631</td><td>3616.4001</td><td>&quot;f980a1ea&quot;</td><td>0</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>400.0</td><td>&quot;5f9b74f5&quot;</td><td>6</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2701515</td><td>2992.0</td><td>&quot;48e44a99&quot;</td><td>0</td><td>&quot;2020-10-09&quot;</td></tr><tr><td>2701515</td><td>4691.8003</td><td>&quot;5e180ef0&quot;</td><td>1</td><td>&quot;2020-10-09&quot;</td></tr><tr><td>2702290</td><td>850.0</td><td>&quot;94721311&quot;</td><td>0</td><td>&quot;2020-10-13&quot;</td></tr><tr><td>2702290</td><td>850.0</td><td>&quot;94721311&quot;</td><td>1</td><td>&quot;2020-10-13&quot;</td></tr><tr><td>2702290</td><td>850.0</td><td>&quot;94721311&quot;</td><td>2</td><td>&quot;2020-10-13&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":4},{"cell_type":"code","source":"tax_a.filter(pl.col('case_id')==28632)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:58:50.908916Z","iopub.execute_input":"2025-06-14T09:58:50.909247Z","iopub.status.idle":"2025-06-14T09:58:50.917519Z","shell.execute_reply.started":"2025-06-14T09:58:50.909223Z","shell.execute_reply":"2025-06-14T09:58:50.916771Z"}},"outputs":[{"execution_count":55,"output_type":"execute_result","data":{"text/plain":"shape: (10, 5)\n┌─────────┬─────────────────┬───────────────┬────────────┬─────────────────────┐\n│ case_id ┆ amount_4527230A ┆ name_4527232M ┆ num_group1 ┆ recorddate_4527225D │\n│ ---     ┆ ---             ┆ ---           ┆ ---        ┆ ---                 │\n│ i64     ┆ f64             ┆ str           ┆ i64        ┆ str                 │\n╞═════════╪═════════════════╪═══════════════╪════════════╪═════════════════════╡\n│ 28632   ┆ 400.0           ┆ 5f9b74f5      ┆ 6          ┆ 2019-09-13          │\n│ 28632   ┆ 700.0           ┆ 5f9b74f5      ┆ 4          ┆ 2019-09-13          │\n│ 28632   ┆ 700.0           ┆ 5f9b74f5      ┆ 7          ┆ 2019-09-13          │\n│ 28632   ┆ 760.0           ┆ 5f9b74f5      ┆ 9          ┆ 2019-09-13          │\n│ 28632   ┆ 1100.0          ┆ 5f9b74f5      ┆ 0          ┆ 2019-09-13          │\n│ 28632   ┆ 1873.4          ┆ 5f9b74f5      ┆ 1          ┆ 2019-09-13          │\n│ 28632   ┆ 1973.2001       ┆ 5f9b74f5      ┆ 8          ┆ 2019-09-13          │\n│ 28632   ┆ 1990.6          ┆ 5f9b74f5      ┆ 2          ┆ 2019-09-13          │\n│ 28632   ┆ 1990.6          ┆ 5f9b74f5      ┆ 3          ┆ 2019-09-13          │\n│ 28632   ┆ 2564.0          ┆ 5f9b74f5      ┆ 5          ┆ 2019-09-13          │\n└─────────┴─────────────────┴───────────────┴────────────┴─────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (10, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amount_4527230A</th><th>name_4527232M</th><th>num_group1</th><th>recorddate_4527225D</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>i64</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>400.0</td><td>&quot;5f9b74f5&quot;</td><td>6</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>4</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>7</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>760.0</td><td>&quot;5f9b74f5&quot;</td><td>9</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>1100.0</td><td>&quot;5f9b74f5&quot;</td><td>0</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>1873.4</td><td>&quot;5f9b74f5&quot;</td><td>1</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>1973.2001</td><td>&quot;5f9b74f5&quot;</td><td>8</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>2</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>3</td><td>&quot;2019-09-13&quot;</td></tr><tr><td>28632</td><td>2564.0</td><td>&quot;5f9b74f5&quot;</td><td>5</td><td>&quot;2019-09-13&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":55},{"cell_type":"code","source":"tax_b\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:56:52.562338Z","iopub.execute_input":"2025-06-14T08:56:52.563277Z","iopub.status.idle":"2025-06-14T08:56:52.569897Z","shell.execute_reply.started":"2025-06-14T08:56:52.563245Z","shell.execute_reply":"2025-06-14T08:56:52.569139Z"}},"outputs":[{"execution_count":5,"output_type":"execute_result","data":{"text/plain":"shape: (1_107_933, 5)\n┌─────────┬─────────────────┬────────────────────────┬───────────────┬────────────┐\n│ case_id ┆ amount_4917619A ┆ deductiondate_4917603D ┆ name_4917606M ┆ num_group1 │\n│ ---     ┆ ---             ┆ ---                    ┆ ---           ┆ ---        │\n│ i64     ┆ f64             ┆ str                    ┆ str           ┆ i64        │\n╞═════════╪═════════════════╪════════════════════════╪═══════════════╪════════════╡\n│ 49435   ┆ 6885.0          ┆ 2019-10-16             ┆ 6b730375      ┆ 0          │\n│ 49435   ┆ 6885.0          ┆ 2019-10-16             ┆ 6b730375      ┆ 1          │\n│ 49435   ┆ 6885.0          ┆ 2019-10-16             ┆ 6b730375      ┆ 2          │\n│ 49435   ┆ 6885.0          ┆ 2019-10-16             ┆ 6b730375      ┆ 3          │\n│ 49435   ┆ 6885.0          ┆ 2019-10-16             ┆ 6b730375      ┆ 4          │\n│ …       ┆ …               ┆ …                      ┆ …             ┆ …          │\n│ 2703452 ┆ 7290.0          ┆ 2020-06-11             ┆ ad68e80f      ┆ 2          │\n│ 2703452 ┆ 10003.601       ┆ 2020-10-01             ┆ 6b791858      ┆ 5          │\n│ 2703452 ┆ 10638.0         ┆ 2020-08-05             ┆ ad68e80f      ┆ 4          │\n│ 2703452 ┆ 15228.0         ┆ 2020-06-11             ┆ ad68e80f      ┆ 1          │\n│ 2703452 ┆ 15552.0         ┆ 2020-07-07             ┆ 3ba7682e      ┆ 3          │\n└─────────┴─────────────────┴────────────────────────┴───────────────┴────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_107_933, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amount_4917619A</th><th>deductiondate_4917603D</th><th>name_4917606M</th><th>num_group1</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>str</td><td>i64</td></tr></thead><tbody><tr><td>49435</td><td>6885.0</td><td>&quot;2019-10-16&quot;</td><td>&quot;6b730375&quot;</td><td>0</td></tr><tr><td>49435</td><td>6885.0</td><td>&quot;2019-10-16&quot;</td><td>&quot;6b730375&quot;</td><td>1</td></tr><tr><td>49435</td><td>6885.0</td><td>&quot;2019-10-16&quot;</td><td>&quot;6b730375&quot;</td><td>2</td></tr><tr><td>49435</td><td>6885.0</td><td>&quot;2019-10-16&quot;</td><td>&quot;6b730375&quot;</td><td>3</td></tr><tr><td>49435</td><td>6885.0</td><td>&quot;2019-10-16&quot;</td><td>&quot;6b730375&quot;</td><td>4</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703452</td><td>7290.0</td><td>&quot;2020-06-11&quot;</td><td>&quot;ad68e80f&quot;</td><td>2</td></tr><tr><td>2703452</td><td>10003.601</td><td>&quot;2020-10-01&quot;</td><td>&quot;6b791858&quot;</td><td>5</td></tr><tr><td>2703452</td><td>10638.0</td><td>&quot;2020-08-05&quot;</td><td>&quot;ad68e80f&quot;</td><td>4</td></tr><tr><td>2703452</td><td>15228.0</td><td>&quot;2020-06-11&quot;</td><td>&quot;ad68e80f&quot;</td><td>1</td></tr><tr><td>2703452</td><td>15552.0</td><td>&quot;2020-07-07&quot;</td><td>&quot;3ba7682e&quot;</td><td>3</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":5},{"cell_type":"code","source":"3343800 + 1107933 +3275770","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:50:32.534795Z","iopub.execute_input":"2025-06-14T09:50:32.535118Z","iopub.status.idle":"2025-06-14T09:50:32.540885Z","shell.execute_reply.started":"2025-06-14T09:50:32.535095Z","shell.execute_reply":"2025-06-14T09:50:32.540146Z"}},"outputs":[{"execution_count":36,"output_type":"execute_result","data":{"text/plain":"7727503"},"metadata":{}}],"execution_count":36},{"cell_type":"code","source":"tax_c","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T08:57:03.411334Z","iopub.execute_input":"2025-06-14T08:57:03.411661Z","iopub.status.idle":"2025-06-14T08:57:03.418719Z","shell.execute_reply.started":"2025-06-14T08:57:03.411637Z","shell.execute_reply":"2025-06-14T08:57:03.417936Z"}},"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"shape: (3_343_800, 5)\n┌─────────┬───────────────────┬────────────┬───────────────┬─────────────────────┐\n│ case_id ┆ employername_160M ┆ num_group1 ┆ pmtamount_36A ┆ processingdate_168D │\n│ ---     ┆ ---               ┆ ---        ┆ ---           ┆ ---                 │\n│ i64     ┆ str               ┆ i64        ┆ f64           ┆ str                 │\n╞═════════╪═══════════════════╪════════════╪═══════════════╪═════════════════════╡\n│ 357     ┆ c91b12ff          ┆ 0          ┆ 1200.0        ┆ 2019-01-04          │\n│ 357     ┆ c91b12ff          ┆ 1          ┆ 1200.0        ┆ 2018-11-28          │\n│ 357     ┆ c91b12ff          ┆ 2          ┆ 972.8         ┆ 2018-11-01          │\n│ 357     ┆ c91b12ff          ┆ 3          ┆ 628.60004     ┆ 2018-10-08          │\n│ 357     ┆ c91b12ff          ┆ 4          ┆ 1200.0        ┆ 2018-09-10          │\n│ …       ┆ …                 ┆ …          ┆ …             ┆ …                   │\n│ 2629815 ┆ 378c3e37          ┆ 6          ┆ 1961.2001     ┆ 2019-10-22          │\n│ 2629815 ┆ 378c3e37          ┆ 7          ┆ 301.80002     ┆ 2019-10-22          │\n│ 2629815 ┆ 378c3e37          ┆ 8          ┆ 301.80002     ┆ 2019-10-22          │\n│ 2629815 ┆ 378c3e37          ┆ 9          ┆ 1961.2001     ┆ 2019-10-22          │\n│ 2629815 ┆ 378c3e37          ┆ 10         ┆ 1961.2001     ┆ 2019-10-22          │\n└─────────┴───────────────────┴────────────┴───────────────┴─────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (3_343_800, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>employername_160M</th><th>num_group1</th><th>pmtamount_36A</th><th>processingdate_168D</th></tr><tr><td>i64</td><td>str</td><td>i64</td><td>f64</td><td>str</td></tr></thead><tbody><tr><td>357</td><td>&quot;c91b12ff&quot;</td><td>0</td><td>1200.0</td><td>&quot;2019-01-04&quot;</td></tr><tr><td>357</td><td>&quot;c91b12ff&quot;</td><td>1</td><td>1200.0</td><td>&quot;2018-11-28&quot;</td></tr><tr><td>357</td><td>&quot;c91b12ff&quot;</td><td>2</td><td>972.8</td><td>&quot;2018-11-01&quot;</td></tr><tr><td>357</td><td>&quot;c91b12ff&quot;</td><td>3</td><td>628.60004</td><td>&quot;2018-10-08&quot;</td></tr><tr><td>357</td><td>&quot;c91b12ff&quot;</td><td>4</td><td>1200.0</td><td>&quot;2018-09-10&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>&quot;378c3e37&quot;</td><td>6</td><td>1961.2001</td><td>&quot;2019-10-22&quot;</td></tr><tr><td>2629815</td><td>&quot;378c3e37&quot;</td><td>7</td><td>301.80002</td><td>&quot;2019-10-22&quot;</td></tr><tr><td>2629815</td><td>&quot;378c3e37&quot;</td><td>8</td><td>301.80002</td><td>&quot;2019-10-22&quot;</td></tr><tr><td>2629815</td><td>&quot;378c3e37&quot;</td><td>9</td><td>1961.2001</td><td>&quot;2019-10-22&quot;</td></tr><tr><td>2629815</td><td>&quot;378c3e37&quot;</td><td>10</td><td>1961.2001</td><td>&quot;2019-10-22&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":6},{"cell_type":"code","source":"df_a_renamed = tax_a.select([\n    pl.col(\"case_id\"),\n    pl.col(\"amount_4527230A\").alias(\"tax_amount\"),\n    pl.col(\"name_4527232M\").alias(\"employer_name\"),\n    pl.col(\"recorddate_4527225D\").alias(\"tax_date\"),\n        pl.lit(\"a\").alias(\"label\")\n\n])\n\ndf_b_renamed = tax_b.select([\n    pl.col(\"case_id\"),\n    pl.col(\"amount_4917619A\").alias(\"tax_amount\"),\n    pl.col(\"name_4917606M\").alias(\"employer_name\"),\n    pl.col(\"deductiondate_4917603D\").alias(\"tax_date\"),\n        pl.lit(\"b\").alias(\"label\")\n\n])\n\ndf_c_renamed = tax_c.select([\n    pl.col(\"case_id\"),\n    pl.col(\"pmtamount_36A\").alias(\"tax_amount\"),\n    pl.col(\"employername_160M\").alias(\"employer_name\"),\n    pl.col(\"processingdate_168D\").alias(\"tax_date\"),\n        pl.lit(\"c\").alias(\"label\")\n\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:53:42.787312Z","iopub.execute_input":"2025-06-14T09:53:42.788111Z","iopub.status.idle":"2025-06-14T09:53:42.865611Z","shell.execute_reply.started":"2025-06-14T09:53:42.788079Z","shell.execute_reply":"2025-06-14T09:53:42.864845Z"}},"outputs":[],"execution_count":41},{"cell_type":"code","source":"tax_df = pl.concat([df_a_renamed, df_b_renamed, df_c_renamed])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:56:30.378551Z","iopub.execute_input":"2025-06-14T09:56:30.379236Z","iopub.status.idle":"2025-06-14T09:56:30.383707Z","shell.execute_reply.started":"2025-06-14T09:56:30.379207Z","shell.execute_reply":"2025-06-14T09:56:30.382887Z"}},"outputs":[],"execution_count":49},{"cell_type":"code","source":"dup_rows = tax_df.filter(tax_df.is_duplicated())\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:56:32.268861Z","iopub.execute_input":"2025-06-14T09:56:32.269148Z","iopub.status.idle":"2025-06-14T09:56:33.853134Z","shell.execute_reply.started":"2025-06-14T09:56:32.269128Z","shell.execute_reply":"2025-06-14T09:56:33.852125Z"}},"outputs":[],"execution_count":50},{"cell_type":"code","source":"tax_df.filter(pl.col('case_id')==28632)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:58:22.038397Z","iopub.execute_input":"2025-06-14T09:58:22.038742Z","iopub.status.idle":"2025-06-14T09:58:22.049109Z","shell.execute_reply.started":"2025-06-14T09:58:22.038717Z","shell.execute_reply":"2025-06-14T09:58:22.048354Z"}},"outputs":[{"execution_count":54,"output_type":"execute_result","data":{"text/plain":"shape: (20, 5)\n┌─────────┬────────────┬───────────────┬────────────┬───────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   │\n│ i64     ┆ f64        ┆ str           ┆ str        ┆ str   │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╡\n│ 28632   ┆ 400.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 760.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 1100.0     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-06-13 ┆ c     │\n│ 28632   ┆ 1990.566   ┆ 5f9b74f5      ┆ 2019-06-13 ┆ c     │\n│ 28632   ┆ 1990.566   ┆ 5f9b74f5      ┆ 2019-05-13 ┆ c     │\n│ 28632   ┆ 1873.474   ┆ 5f9b74f5      ┆ 2019-04-12 ┆ c     │\n│ 28632   ┆ 1100.0     ┆ 5f9b74f5      ┆ 2019-04-12 ┆ c     │\n└─────────┴────────────┴───────────────┴────────────┴───────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (20, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>400.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>760.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>1100.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-06-13&quot;</td><td>&quot;c&quot;</td></tr><tr><td>28632</td><td>1990.566</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-06-13&quot;</td><td>&quot;c&quot;</td></tr><tr><td>28632</td><td>1990.566</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-05-13&quot;</td><td>&quot;c&quot;</td></tr><tr><td>28632</td><td>1873.474</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-04-12&quot;</td><td>&quot;c&quot;</td></tr><tr><td>28632</td><td>1100.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-04-12&quot;</td><td>&quot;c&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":54},{"cell_type":"code","source":"dup_rows","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:56:42.524433Z","iopub.execute_input":"2025-06-14T09:56:42.525275Z","iopub.status.idle":"2025-06-14T09:56:42.531657Z","shell.execute_reply.started":"2025-06-14T09:56:42.525246Z","shell.execute_reply":"2025-06-14T09:56:42.530762Z"}},"outputs":[{"execution_count":52,"output_type":"execute_result","data":{"text/plain":"shape: (1_939_446, 5)\n┌─────────┬────────────┬───────────────┬────────────┬───────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   │\n│ i64     ┆ f64        ┆ str           ┆ str        ┆ str   │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╡\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28641   ┆ 426.4      ┆ a943cc7a      ┆ 2019-09-13 ┆ a     │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n└─────────┴────────────┴───────────────┴────────────┴───────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_939_446, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28641</td><td>426.4</td><td>&quot;a943cc7a&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":52},{"cell_type":"code","source":"tax_df","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:56:33.854551Z","iopub.execute_input":"2025-06-14T09:56:33.854897Z","iopub.status.idle":"2025-06-14T09:56:33.8611Z","shell.execute_reply.started":"2025-06-14T09:56:33.854864Z","shell.execute_reply":"2025-06-14T09:56:33.860438Z"}},"outputs":[{"execution_count":51,"output_type":"execute_result","data":{"text/plain":"shape: (7_727_503, 5)\n┌─────────┬────────────┬───────────────┬────────────┬───────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   │\n│ i64     ┆ f64        ┆ str           ┆ str        ┆ str   │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╡\n│ 28631   ┆ 711.0      ┆ f980a1ea      ┆ 2019-09-13 ┆ a     │\n│ 28631   ┆ 1946.0     ┆ f980a1ea      ┆ 2019-09-13 ┆ a     │\n│ 28631   ┆ 2600.0     ┆ f980a1ea      ┆ 2019-09-13 ┆ a     │\n│ 28631   ┆ 3616.4001  ┆ f980a1ea      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 400.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n└─────────┴────────────┴───────────────┴────────────┴───────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (7_727_503, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28631</td><td>711.0</td><td>&quot;f980a1ea&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28631</td><td>1946.0</td><td>&quot;f980a1ea&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28631</td><td>2600.0</td><td>&quot;f980a1ea&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28631</td><td>3616.4001</td><td>&quot;f980a1ea&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>400.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":51},{"cell_type":"code","source":"dup_rows = tax_df.filter(tax_df.is_duplicated())\ndup_rows","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:56:09.618923Z","iopub.execute_input":"2025-06-14T09:56:09.619314Z","iopub.status.idle":"2025-06-14T09:56:11.044671Z","shell.execute_reply.started":"2025-06-14T09:56:09.619289Z","shell.execute_reply":"2025-06-14T09:56:11.043749Z"}},"outputs":[{"execution_count":48,"output_type":"execute_result","data":{"text/plain":"shape: (1_939_446, 5)\n┌─────────┬────────────┬───────────────┬────────────┬───────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   │\n│ i64     ┆ f64        ┆ str           ┆ str        ┆ str   │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╡\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     │\n│ 28641   ┆ 426.4      ┆ a943cc7a      ┆ 2019-09-13 ┆ a     │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     │\n└─────────┴────────────┴───────────────┴────────────┴───────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_939_446, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>28641</td><td>426.4</td><td>&quot;a943cc7a&quot;</td><td>&quot;2019-09-13&quot;</td><td>&quot;a&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>&quot;2019-10-22&quot;</td><td>&quot;c&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":48},{"cell_type":"code","source":"tax_df = pl.concat([df_a_renamed, df_b_renamed, df_c_renamed], rechunk=True)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:45:58.507276Z","iopub.execute_input":"2025-06-14T09:45:58.507552Z","iopub.status.idle":"2025-06-14T09:45:59.013011Z","shell.execute_reply.started":"2025-06-14T09:45:58.507534Z","shell.execute_reply":"2025-06-14T09:45:59.012126Z"}},"outputs":[],"execution_count":24},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"tax_df = tax_df.with_columns([\n    pl.col(\"tax_date\").str.strptime(pl.Date)\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:03.104828Z","iopub.execute_input":"2025-06-14T09:46:03.105114Z","iopub.status.idle":"2025-06-14T09:46:04.597003Z","shell.execute_reply.started":"2025-06-14T09:46:03.105093Z","shell.execute_reply":"2025-06-14T09:46:04.596056Z"}},"outputs":[],"execution_count":25},{"cell_type":"code","source":"train_base = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:05.419231Z","iopub.execute_input":"2025-06-14T09:46:05.419646Z","iopub.status.idle":"2025-06-14T09:46:05.483478Z","shell.execute_reply.started":"2025-06-14T09:46:05.419616Z","shell.execute_reply":"2025-06-14T09:46:05.48261Z"}},"outputs":[],"execution_count":26},{"cell_type":"code","source":"tax_df = tax_df.join(\n    train_base[['case_id','date_decision']], on ='case_id', how = 'left'\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:46:05.760081Z","iopub.execute_input":"2025-06-14T09:46:05.760394Z","iopub.status.idle":"2025-06-14T09:46:06.198531Z","shell.execute_reply.started":"2025-06-14T09:46:05.760372Z","shell.execute_reply":"2025-06-14T09:46:06.197634Z"}},"outputs":[],"execution_count":27},{"cell_type":"code","source":"duplicates_b = tax_df.filter(tax_df.is_duplicated())\nduplicates_b\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:49:44.127307Z","iopub.execute_input":"2025-06-14T09:49:44.127688Z","iopub.status.idle":"2025-06-14T09:49:45.632395Z","shell.execute_reply.started":"2025-06-14T09:49:44.127658Z","shell.execute_reply":"2025-06-14T09:49:45.631702Z"}},"outputs":[{"execution_count":35,"output_type":"execute_result","data":{"text/plain":"shape: (1_939_446, 6)\n┌─────────┬────────────┬───────────────┬────────────┬───────┬───────────────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label ┆ date_decision │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   ┆ ---           │\n│ i64     ┆ f64        ┆ str           ┆ date       ┆ str   ┆ str           │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╪═══════════════╡\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 1990.6     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28641   ┆ 426.4      ┆ a943cc7a      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     ┆ …             │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n└─────────┴────────────┴───────────────┴────────────┴───────┴───────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_939_446, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th><th>date_decision</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>date</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>1990.6</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28641</td><td>426.4</td><td>&quot;a943cc7a&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":35},{"cell_type":"code","source":"duplicates = tax_df[['case_id','tax_amount','employer_name','tax_date']].filter(tax_df.is_duplicated())\ntax_df.filter(pl.col(\"case_id\").is_in(duplicates[\"case_id\"].unique()))\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:48:07.573188Z","iopub.execute_input":"2025-06-14T09:48:07.573548Z","iopub.status.idle":"2025-06-14T09:48:09.247203Z","shell.execute_reply.started":"2025-06-14T09:48:07.573523Z","shell.execute_reply":"2025-06-14T09:48:09.246274Z"}},"outputs":[{"execution_count":29,"output_type":"execute_result","data":{"text/plain":"shape: (3_332_605, 6)\n┌─────────┬────────────┬───────────────┬────────────┬───────┬───────────────┐\n│ case_id ┆ tax_amount ┆ employer_name ┆ tax_date   ┆ label ┆ date_decision │\n│ ---     ┆ ---        ┆ ---           ┆ ---        ┆ ---   ┆ ---           │\n│ i64     ┆ f64        ┆ str           ┆ date       ┆ str   ┆ str           │\n╞═════════╪════════════╪═══════════════╪════════════╪═══════╪═══════════════╡\n│ 28632   ┆ 400.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 700.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 760.0      ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ 28632   ┆ 1100.0     ┆ 5f9b74f5      ┆ 2019-09-13 ┆ a     ┆ 2019-08-30    │\n│ …       ┆ …          ┆ …             ┆ …          ┆ …     ┆ …             │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 301.80002  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n│ 2629815 ┆ 1961.2001  ┆ 378c3e37      ┆ 2019-10-22 ┆ c     ┆ 2019-10-08    │\n└─────────┴────────────┴───────────────┴────────────┴───────┴───────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (3_332_605, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_amount</th><th>employer_name</th><th>tax_date</th><th>label</th><th>date_decision</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>date</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>28632</td><td>400.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>700.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>760.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>28632</td><td>1100.0</td><td>&quot;5f9b74f5&quot;</td><td>2019-09-13</td><td>&quot;a&quot;</td><td>&quot;2019-08-30&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>301.80002</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr><tr><td>2629815</td><td>1961.2001</td><td>&quot;378c3e37&quot;</td><td>2019-10-22</td><td>&quot;c&quot;</td><td>&quot;2019-10-08&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":29},{"cell_type":"code","source":"tax_df = tax_df.with_columns([\n    pl.col(\"date_decision\").str.strptime(pl.Date)\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:35:35.641851Z","iopub.execute_input":"2025-06-14T09:35:35.642646Z","iopub.status.idle":"2025-06-14T09:35:37.089197Z","shell.execute_reply.started":"2025-06-14T09:35:35.642611Z","shell.execute_reply":"2025-06-14T09:35:37.088411Z"}},"outputs":[],"execution_count":14},{"cell_type":"code","source":"tax_df = tax_df.with_columns([\n    ((pl.col(\"date_decision\") - pl.col(\"tax_date\")).dt.total_days().abs().alias(\"diff_tax_date_date_decision\")\n    )])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:37:32.51141Z","iopub.execute_input":"2025-06-14T09:37:32.511777Z","iopub.status.idle":"2025-06-14T09:37:32.961864Z","shell.execute_reply.started":"2025-06-14T09:37:32.511746Z","shell.execute_reply":"2025-06-14T09:37:32.96095Z"}},"outputs":[],"execution_count":16},{"cell_type":"code","source":"# Tính các feature theo case_id - Phiên bản tối ưu cho Polars\ntax_features = tax_df.group_by(\"case_id\").agg([\n    # Đếm số bản ghi\n    pl.len().alias(\"tax_record_count\"),  # pl.len() thay cho pl.count()\n    \n    # Thống kê tax_amount\n    pl.col(\"tax_amount\").sum().alias(\"tax_amount_sum\"),\n    pl.col(\"tax_amount\").mean().alias(\"tax_amount_avg\"),\n    pl.col(\"tax_amount\").min().alias(\"tax_amount_min\"),\n    pl.col(\"tax_amount\").max().alias(\"tax_amount_max\"),\n    pl.col(\"tax_amount\").std().alias(\"tax_amount_std\"),\n    \n    # Thống kê employer\n    pl.col(\"employer_name\").n_unique().alias(\"employer_nunique\"),\n    \n    # Thống kê thời gian\n    pl.col(\"tax_date\").min().alias(\"tax_date_first\"),\n    pl.col(\"tax_date\").max().alias(\"tax_date_last\"),\n    \n    # Thống kê diff_tax_date_date_decision\n    pl.col(\"diff_tax_date_date_decision\").max().alias(\"diff_tax_date_date_decision_max\"),\n    pl.col(\"diff_tax_date_date_decision\").min().alias(\"diff_tax_date_date_decision_min\"),\n    pl.col(\"diff_tax_date_date_decision\").std().alias(\"diff_tax_date_date_decision_std\"),\n    pl.col(\"diff_tax_date_date_decision\").mean().alias(\"diff_tax_date_date_decision_mean\"),\n    pl.col(\"diff_tax_date_date_decision\").last().alias(\"diff_tax_date_date_decision_last\"),\n    \n    # Khoảng thời gian giữa first và last\n    (pl.col(\"tax_date\").max() - pl.col(\"tax_date\").min()).dt.total_days().alias(\"tax_date_duration_days\")\n])\n\n# Tính interval trung bình giữa các lần khấu trừ - Phiên bản tối ưu\ntax_intervals = (\n    tax_df\n    .sort([\"case_id\", \"tax_date\"])\n    .group_by(\"case_id\", maintain_order=True)\n    .agg([\n        # Tính interval bằng cách sử dụng shift\n        pl.when(pl.len() > 1)\n        .then(\n            (pl.col(\"tax_date\") - pl.col(\"tax_date\").shift(1))\n            .dt.total_days()\n            .drop_nulls()\n            .mean()\n        )\n        .otherwise(None)\n        .alias(\"tax_interval_avg_days\")\n    ])\n)\n\n# Join interval vào features chính\ntax_features = tax_features.join(tax_intervals, on=\"case_id\", how=\"left\")\n\n# Thêm một số feature bổ sung có thể hữu ích\ntax_features_extended = tax_features.with_columns([\n    # Tỷ lệ số ngày trung bình giữa các lần khấu trừ so với tổng thời gian\n    pl.when(pl.col(\"tax_date_duration_days\") > 0)\n    .then(pl.col(\"tax_interval_avg_days\") / pl.col(\"tax_date_duration_days\"))\n    .otherwise(None)\n    .alias(\"tax_interval_ratio\"),\n    \n    # Tần suất khấu trừ (số lần / tổng số ngày)\n    pl.when(pl.col(\"tax_date_duration_days\") > 0)\n    .then(pl.col(\"tax_record_count\") / pl.col(\"tax_date_duration_days\"))\n    .otherwise(None)\n    .alias(\"tax_frequency_per_day\")\n])\n\n# Hiển thị kết quả\nprint(\"Tax Features Shape:\", tax_features_extended.shape)\nprint(\"\\nSample Data:\")\nprint(tax_features_extended.head())\n\n\n\ntax_features_extended","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T09:41:52.754642Z","iopub.execute_input":"2025-06-14T09:41:52.755372Z","iopub.status.idle":"2025-06-14T09:42:04.449825Z","shell.execute_reply.started":"2025-06-14T09:41:52.755343Z","shell.execute_reply":"2025-06-14T09:42:04.449066Z"}},"outputs":[{"name":"stdout","text":"Tax Features Shape: (1003765, 19)\n\nSample Data:\nshape: (5, 19)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ tax_record ┆ tax_amoun ┆ tax_amoun ┆ … ┆ tax_date_ ┆ tax_inter ┆ tax_inter ┆ tax_frequ │\n│ ---     ┆ _count     ┆ t_sum     ┆ t_avg     ┆   ┆ duration_ ┆ val_avg_d ┆ val_ratio ┆ ency_per_ │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ days      ┆ ays       ┆ ---       ┆ day       │\n│         ┆ u32        ┆ f64       ┆ f64       ┆   ┆ ---       ┆ ---       ┆ f64       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆ i64       ┆ f64       ┆           ┆ f64       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 185232  ┆ 6          ┆ 17694.2   ┆ 2949.0333 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆           ┆ 33        ┆   ┆           ┆           ┆           ┆           │\n│ 213219  ┆ 5          ┆ 13433.800 ┆ 2686.7600 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆ 1         ┆ 2         ┆   ┆           ┆           ┆           ┆           │\n│ 1897169 ┆ 6          ┆ 189957.6  ┆ 31659.6   ┆ … ┆ 146       ┆ 29.2      ┆ 0.2       ┆ 0.041096  │\n│ 1785330 ┆ 6          ┆ 11448.000 ┆ 1908.0000 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆ 2         ┆ 33        ┆   ┆           ┆           ┆           ┆           │\n│ 1504045 ┆ 6          ┆ 28432.112 ┆ 4738.6853 ┆ … ┆ 157       ┆ 31.4      ┆ 0.2       ┆ 0.038217  │\n│         ┆            ┆ 2         ┆ 67        ┆   ┆           ┆           ┆           ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘\n","output_type":"stream"},{"execution_count":21,"output_type":"execute_result","data":{"text/plain":"shape: (1_003_765, 19)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ tax_record ┆ tax_amoun ┆ tax_amoun ┆ … ┆ tax_date_ ┆ tax_inter ┆ tax_inter ┆ tax_frequ │\n│ ---     ┆ _count     ┆ t_sum     ┆ t_avg     ┆   ┆ duration_ ┆ val_avg_d ┆ val_ratio ┆ ency_per_ │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ days      ┆ ays       ┆ ---       ┆ day       │\n│         ┆ u32        ┆ f64       ┆ f64       ┆   ┆ ---       ┆ ---       ┆ f64       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆ i64       ┆ f64       ┆           ┆ f64       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 185232  ┆ 6          ┆ 17694.2   ┆ 2949.0333 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆           ┆ 33        ┆   ┆           ┆           ┆           ┆           │\n│ 213219  ┆ 5          ┆ 13433.800 ┆ 2686.7600 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆ 1         ┆ 2         ┆   ┆           ┆           ┆           ┆           │\n│ 1897169 ┆ 6          ┆ 189957.6  ┆ 31659.6   ┆ … ┆ 146       ┆ 29.2      ┆ 0.2       ┆ 0.041096  │\n│ 1785330 ┆ 6          ┆ 11448.000 ┆ 1908.0000 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆ 2         ┆ 33        ┆   ┆           ┆           ┆           ┆           │\n│ 1504045 ┆ 6          ┆ 28432.112 ┆ 4738.6853 ┆ … ┆ 157       ┆ 31.4      ┆ 0.2       ┆ 0.038217  │\n│         ┆            ┆ 2         ┆ 67        ┆   ┆           ┆           ┆           ┆           │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 940688  ┆ 3          ┆ 2550.0    ┆ 850.0     ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│ 1665937 ┆ 4          ┆ 3695.6    ┆ 923.9     ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│ 6499    ┆ 10         ┆ 7600.0    ┆ 760.0     ┆ … ┆ 163       ┆ 18.111111 ┆ 0.111111  ┆ 0.06135   │\n│ 794527  ┆ 12         ┆ 39054.800 ┆ 3254.5666 ┆ … ┆ 0         ┆ 0.0       ┆ null      ┆ null      │\n│         ┆            ┆ 2         ┆ 83        ┆   ┆           ┆           ┆           ┆           │\n│ 745369  ┆ 5          ┆ 7080.0    ┆ 1416.0    ┆ … ┆ 119       ┆ 29.75     ┆ 0.25      ┆ 0.042017  │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_003_765, 19)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>tax_record_count</th><th>tax_amount_sum</th><th>tax_amount_avg</th><th>tax_amount_min</th><th>tax_amount_max</th><th>tax_amount_std</th><th>employer_nunique</th><th>tax_date_first</th><th>tax_date_last</th><th>diff_tax_date_date_decision_max</th><th>diff_tax_date_date_decision_min</th><th>diff_tax_date_date_decision_std</th><th>diff_tax_date_date_decision_mean</th><th>diff_tax_date_date_decision_last</th><th>tax_date_duration_days</th><th>tax_interval_avg_days</th><th>tax_interval_ratio</th><th>tax_frequency_per_day</th></tr><tr><td>i64</td><td>u32</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>u32</td><td>date</td><td>date</td><td>i64</td><td>i64</td><td>f64</td><td>f64</td><td>i64</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>185232</td><td>6</td><td>17694.2</td><td>2949.033333</td><td>1823.4</td><td>4231.0</td><td>891.696275</td><td>1</td><td>2019-12-26</td><td>2019-12-26</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>213219</td><td>5</td><td>13433.8001</td><td>2686.76002</td><td>1729.2001</td><td>3130.6</td><td>548.152424</td><td>1</td><td>2020-03-19</td><td>2020-03-19</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>1897169</td><td>6</td><td>189957.6</td><td>31659.6</td><td>22979.8</td><td>36562.0</td><td>4906.963261</td><td>1</td><td>2020-03-10</td><td>2020-08-03</td><td>163</td><td>17</td><td>55.711459</td><td>91.833333</td><td>80</td><td>146</td><td>29.2</td><td>0.2</td><td>0.041096</td></tr><tr><td>1785330</td><td>6</td><td>11448.0002</td><td>1908.000033</td><td>1796.2001</td><td>2232.8</td><td>166.888822</td><td>1</td><td>2020-02-28</td><td>2020-02-28</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>1504045</td><td>6</td><td>28432.1122</td><td>4738.685367</td><td>3945.6802</td><td>5454.3237</td><td>510.705852</td><td>1</td><td>2019-04-01</td><td>2019-09-05</td><td>146</td><td>11</td><td>52.800253</td><td>69.666667</td><td>146</td><td>157</td><td>31.4</td><td>0.2</td><td>0.038217</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>940688</td><td>3</td><td>2550.0</td><td>850.0</td><td>850.0</td><td>850.0</td><td>0.0</td><td>1</td><td>2020-02-02</td><td>2020-02-02</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>1665937</td><td>4</td><td>3695.6</td><td>923.9</td><td>447.4</td><td>1084.6</td><td>317.677635</td><td>1</td><td>2019-12-17</td><td>2019-12-17</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>6499</td><td>10</td><td>7600.0</td><td>760.0</td><td>400.0</td><td>1000.0</td><td>309.838668</td><td>1</td><td>2018-09-24</td><td>2019-03-06</td><td>157</td><td>6</td><td>58.873122</td><td>106.6</td><td>157</td><td>163</td><td>18.111111</td><td>0.111111</td><td>0.06135</td></tr><tr><td>794527</td><td>12</td><td>39054.8002</td><td>3254.566683</td><td>2780.4001</td><td>4280.0</td><td>533.698181</td><td>1</td><td>2019-09-21</td><td>2019-09-21</td><td>14</td><td>14</td><td>0.0</td><td>14.0</td><td>14</td><td>0</td><td>0.0</td><td>null</td><td>null</td></tr><tr><td>745369</td><td>5</td><td>7080.0</td><td>1416.0</td><td>1320.0</td><td>1440.0</td><td>53.665631</td><td>1</td><td>2019-03-05</td><td>2019-07-02</td><td>135</td><td>16</td><td>48.126916</td><td>76.8</td><td>135</td><td>119</td><td>29.75</td><td>0.25</td><td>0.042017</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":21},{"cell_type":"code","source":"tax_features_extended.write_csv(\"tax_features_extended.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T10:02:52.708938Z","iopub.execute_input":"2025-06-14T10:02:52.709223Z","iopub.status.idle":"2025-06-14T10:02:53.436726Z","shell.execute_reply.started":"2025-06-14T10:02:52.709204Z","shell.execute_reply":"2025-06-14T10:02:53.435945Z"}},"outputs":[],"execution_count":58},{"cell_type":"markdown","source":"# Person","metadata":{}},{"cell_type":"code","source":"import polars as pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:01:38.662311Z","iopub.execute_input":"2025-06-14T14:01:38.662631Z","iopub.status.idle":"2025-06-14T14:01:39.267805Z","shell.execute_reply.started":"2025-06-14T14:01:38.662605Z","shell.execute_reply":"2025-06-14T14:01:39.266747Z"}},"outputs":[],"execution_count":4},{"cell_type":"code","source":"train_person_2 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_2.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:01:41.351926Z","iopub.execute_input":"2025-06-14T14:01:41.352307Z","iopub.status.idle":"2025-06-14T14:01:41.674567Z","shell.execute_reply.started":"2025-06-14T14:01:41.352224Z","shell.execute_reply":"2025-06-14T14:01:41.673595Z"}},"outputs":[],"execution_count":5},{"cell_type":"code","source":"train_person_1 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_1.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:01:46.108888Z","iopub.execute_input":"2025-06-14T14:01:46.109301Z","iopub.status.idle":"2025-06-14T14:01:47.371967Z","shell.execute_reply.started":"2025-06-14T14:01:46.109222Z","shell.execute_reply":"2025-06-14T14:01:47.371133Z"}},"outputs":[],"execution_count":6},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_person_2.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_person_2.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:01:49.093539Z","iopub.execute_input":"2025-06-14T14:01:49.093863Z","iopub.status.idle":"2025-06-14T14:01:49.134426Z","shell.execute_reply.started":"2025-06-14T14:01:49.093826Z","shell.execute_reply":"2025-06-14T14:01:49.133548Z"}},"outputs":[{"execution_count":7,"output_type":"execute_result","data":{"text/plain":"shape: (1, 11)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ addres_dis ┆ addres_ro ┆ addres_zi ┆ … ┆ empls_emp ┆ num_group ┆ num_group ┆ relatedpe │\n│ ---     ┆ trict_368M ┆ le_871L   ┆ p_823M    ┆   ┆ loyer_nam ┆ 1         ┆ 2         ┆ rsons_rol │\n│ u32     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ e_740M    ┆ ---       ┆ ---       ┆ e_762T    │\n│         ┆ u32        ┆ u32       ┆ u32       ┆   ┆ ---       ┆ u32       ┆ u32       ┆ ---       │\n│         ┆            ┆           ┆           ┆   ┆ u32       ┆           ┆           ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 0          ┆ 1575736   ┆ 0         ┆ … ┆ 0         ┆ 0         ┆ 0         ┆ 1614684   │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 11)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>addres_district_368M</th><th>addres_role_871L</th><th>addres_zip_823M</th><th>conts_role_79M</th><th>empls_economicalst_849M</th><th>empls_employedfrom_796D</th><th>empls_employer_name_740M</th><th>num_group1</th><th>num_group2</th><th>relatedpersons_role_762T</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>1575736</td><td>0</td><td>0</td><td>0</td><td>1637653</td><td>0</td><td>0</td><td>0</td><td>1614684</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":7},{"cell_type":"code","source":"import polars as pl\n\nperson_2_features = train_person_2.group_by([\"case_id\", \"num_group1\"]).agg([\n    # addres_district_368M\n    pl.col(\"addres_district_368M\").mode().first().alias(\"addres_district_368M_mode\"),\n    pl.col(\"addres_district_368M\").n_unique().alias(\"addres_district_nunique\"),\n\n    # addres_zip_823M\n    pl.col(\"addres_zip_823M\").mode().first().alias(\"addres_zip_823M_mode\"),\n    pl.col(\"addres_zip_823M\").n_unique().alias(\"addres_zip_823M_nunique\"),\n\n    # conts_role_79M\n    pl.col(\"conts_role_79M\").mode().first().alias(\"conts_role_79M_mode\"),\n    pl.col(\"conts_role_79M\").n_unique().alias(\"conts_role_79M_nunique\"),\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:01:50.273491Z","iopub.execute_input":"2025-06-14T14:01:50.27381Z","iopub.status.idle":"2025-06-14T14:02:02.050849Z","shell.execute_reply.started":"2025-06-14T14:01:50.273782Z","shell.execute_reply":"2025-06-14T14:02:02.049786Z"}},"outputs":[],"execution_count":8},{"cell_type":"code","source":"person_2_features","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:02:02.052471Z","iopub.execute_input":"2025-06-14T14:02:02.052757Z","iopub.status.idle":"2025-06-14T14:02:02.060488Z","shell.execute_reply.started":"2025-06-14T14:02:02.052723Z","shell.execute_reply":"2025-06-14T14:02:02.059423Z"}},"outputs":[{"execution_count":9,"output_type":"execute_result","data":{"text/plain":"shape: (1_561_280, 8)\n┌─────────┬────────────┬────────────┬────────────┬────────────┬────────────┬───────────┬───────────┐\n│ case_id ┆ num_group1 ┆ addres_dis ┆ addres_dis ┆ addres_zip ┆ addres_zip ┆ conts_rol ┆ conts_rol │\n│ ---     ┆ ---        ┆ trict_368M ┆ trict_nuni ┆ _823M_mode ┆ _823M_nuni ┆ e_79M_mod ┆ e_79M_nun │\n│ i64     ┆ i64        ┆ _mode      ┆ que        ┆ ---        ┆ que        ┆ e         ┆ ique      │\n│         ┆            ┆ ---        ┆ ---        ┆ str        ┆ ---        ┆ ---       ┆ ---       │\n│         ┆            ┆ str        ┆ u32        ┆            ┆ u32        ┆ str       ┆ u32       │\n╞═════════╪════════════╪════════════╪════════════╪════════════╪════════════╪═══════════╪═══════════╡\n│ 1558652 ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 737401  ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 653845  ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 1846717 ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 120066  ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ …       ┆ …          ┆ …          ┆ …          ┆ …          ┆ …          ┆ …         ┆ …         │\n│ 219512  ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 1833484 ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 744211  ┆ 0          ┆ P147_104_5 ┆ 1          ┆ P49_144_70 ┆ 1          ┆ P38_92_15 ┆ 1         │\n│         ┆            ┆            ┆            ┆            ┆            ┆ 7         ┆           │\n│ 1397125 ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n│ 36150   ┆ 0          ┆ a55475b1   ┆ 1          ┆ a55475b1   ┆ 1          ┆ a55475b1  ┆ 1         │\n└─────────┴────────────┴────────────┴────────────┴────────────┴────────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_561_280, 8)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>num_group1</th><th>addres_district_368M_mode</th><th>addres_district_nunique</th><th>addres_zip_823M_mode</th><th>addres_zip_823M_nunique</th><th>conts_role_79M_mode</th><th>conts_role_79M_nunique</th></tr><tr><td>i64</td><td>i64</td><td>str</td><td>u32</td><td>str</td><td>u32</td><td>str</td><td>u32</td></tr></thead><tbody><tr><td>1558652</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>737401</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>653845</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>1846717</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>120066</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>219512</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>1833484</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>744211</td><td>0</td><td>&quot;P147_104_5&quot;</td><td>1</td><td>&quot;P49_144_70&quot;</td><td>1</td><td>&quot;P38_92_157&quot;</td><td>1</td></tr><tr><td>1397125</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr><tr><td>36150</td><td>0</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":9},{"cell_type":"code","source":"person_full = train_person_1.join(\n    person_2_features, on = ['case_id','num_group1'], how = 'left'\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:02:02.062101Z","iopub.execute_input":"2025-06-14T14:02:02.062382Z","iopub.status.idle":"2025-06-14T14:02:02.771974Z","shell.execute_reply.started":"2025-06-14T14:02:02.062361Z","shell.execute_reply":"2025-06-14T14:02:02.770782Z"}},"outputs":[],"execution_count":10},{"cell_type":"code","source":"person_full = person_full.with_columns([\n    pl.col(\"birth_259D\").str.strptime(pl.Date, strict=False)\n])\nperson_full = person_full.with_columns([\n    (2024 - pl.col(\"birth_259D\").dt.year()).alias(\"age\")\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:02:02.774178Z","iopub.execute_input":"2025-06-14T14:02:02.774542Z","iopub.status.idle":"2025-06-14T14:02:04.733509Z","shell.execute_reply.started":"2025-06-14T14:02:02.774515Z","shell.execute_reply":"2025-06-14T14:02:04.732499Z"}},"outputs":[],"execution_count":11},{"cell_type":"code","source":"person_full.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in person_full.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:02:04.734586Z","iopub.execute_input":"2025-06-14T14:02:04.734855Z","iopub.status.idle":"2025-06-14T14:02:04.744148Z","shell.execute_reply.started":"2025-06-14T14:02:04.734833Z","shell.execute_reply":"2025-06-14T14:02:04.743158Z"}},"outputs":[{"execution_count":12,"output_type":"execute_result","data":{"text/plain":"shape: (1, 44)\n┌─────────┬────────────┬────────────┬────────────┬───┬───────────┬───────────┬───────────┬─────────┐\n│ case_id ┆ birth_259D ┆ birthdate_ ┆ childnum_1 ┆ … ┆ addres_zi ┆ conts_rol ┆ conts_rol ┆ age     │\n│ ---     ┆ ---        ┆ 87D        ┆ 85L        ┆   ┆ p_823M_nu ┆ e_79M_mod ┆ e_79M_nun ┆ ---     │\n│ u32     ┆ u32        ┆ ---        ┆ ---        ┆   ┆ nique     ┆ e         ┆ ique      ┆ u32     │\n│         ┆            ┆ u32        ┆ u32        ┆   ┆ ---       ┆ ---       ┆ ---       ┆         │\n│         ┆            ┆            ┆            ┆   ┆ u32       ┆ u32       ┆ u32       ┆         │\n╞═════════╪════════════╪════════════╪════════════╪═══╪═══════════╪═══════════╪═══════════╪═════════╡\n│ 0       ┆ 1447332    ┆ 2949075    ┆ 2964084    ┆ … ┆ 1412711   ┆ 1412711   ┆ 1412711   ┆ 1447332 │\n└─────────┴────────────┴────────────┴────────────┴───┴───────────┴───────────┴───────────┴─────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 44)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>birth_259D</th><th>birthdate_87D</th><th>childnum_185L</th><th>contaddr_district_15M</th><th>contaddr_matchlist_1032L</th><th>contaddr_smempladdr_334L</th><th>contaddr_zipcode_807M</th><th>education_927M</th><th>empl_employedfrom_271D</th><th>empl_employedtotal_800L</th><th>empl_industry_691L</th><th>empladdr_district_926M</th><th>empladdr_zipcode_114M</th><th>familystate_447L</th><th>gender_992L</th><th>housetype_905L</th><th>housingtype_772L</th><th>incometype_1044T</th><th>isreference_387L</th><th>language1_981M</th><th>mainoccupationinc_384A</th><th>maritalst_703L</th><th>num_group1</th><th>personindex_1023L</th><th>persontype_1072L</th><th>persontype_792L</th><th>registaddr_district_1083M</th><th>registaddr_zipcode_184M</th><th>relationshiptoclient_415T</th><th>relationshiptoclient_642T</th><th>remitter_829L</th><th>role_1084L</th><th>role_993L</th><th>safeguarantyflag_411L</th><th>sex_738L</th><th>type_25L</th><th>addres_district_368M_mode</th><th>addres_district_nunique</th><th>addres_zip_823M_mode</th><th>addres_zip_823M_nunique</th><th>conts_role_79M_mode</th><th>conts_role_79M_nunique</th><th>age</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>1447332</td><td>2949075</td><td>2964084</td><td>0</td><td>1447773</td><td>1447773</td><td>0</td><td>0</td><td>2407290</td><td>2445676</td><td>2451755</td><td>0</td><td>0</td><td>2245378</td><td>2949075</td><td>2873173</td><td>2964176</td><td>1447332</td><td>2949075</td><td>0</td><td>1447332</td><td>2962646</td><td>0</td><td>642283</td><td>6117</td><td>642283</td><td>0</td><td>0</td><td>2168942</td><td>2168049</td><td>2168942</td><td>6117</td><td>2949075</td><td>1447334</td><td>1447332</td><td>6117</td><td>1412711</td><td>1412711</td><td>1412711</td><td>1412711</td><td>1412711</td><td>1412711</td><td>1447332</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":12},{"cell_type":"code","source":"person_full","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:02:04.745419Z","iopub.execute_input":"2025-06-14T14:02:04.745737Z","iopub.status.idle":"2025-06-14T14:02:04.76832Z","shell.execute_reply.started":"2025-06-14T14:02:04.745711Z","shell.execute_reply":"2025-06-14T14:02:04.767479Z"}},"outputs":[{"execution_count":13,"output_type":"execute_result","data":{"text/plain":"shape: (2_973_991, 44)\n┌─────────┬────────────┬────────────┬────────────┬───┬────────────┬────────────┬────────────┬──────┐\n│ case_id ┆ birth_259D ┆ birthdate_ ┆ childnum_1 ┆ … ┆ addres_zip ┆ conts_role ┆ conts_role ┆ age  │\n│ ---     ┆ ---        ┆ 87D        ┆ 85L        ┆   ┆ _823M_nuni ┆ _79M_mode  ┆ _79M_nuniq ┆ ---  │\n│ i64     ┆ date       ┆ ---        ┆ ---        ┆   ┆ que        ┆ ---        ┆ ue         ┆ i32  │\n│         ┆            ┆ str        ┆ f64        ┆   ┆ ---        ┆ str        ┆ ---        ┆      │\n│         ┆            ┆            ┆            ┆   ┆ u32        ┆            ┆ u32        ┆      │\n╞═════════╪════════════╪════════════╪════════════╪═══╪════════════╪════════════╪════════════╪══════╡\n│ 0       ┆ 1986-07-01 ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ 38   │\n│ 0       ┆ null       ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ null │\n│ 0       ┆ null       ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ null │\n│ 0       ┆ null       ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ null │\n│ 1       ┆ 1957-08-01 ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ 67   │\n│ …       ┆ …          ┆ …          ┆ …          ┆ … ┆ …          ┆ …          ┆ …          ┆ …    │\n│ 2703451 ┆ null       ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ null │\n│ 2703452 ┆ 1977-08-01 ┆ null       ┆ null       ┆ … ┆ 1          ┆ a55475b1   ┆ 1          ┆ 47   │\n│ 2703453 ┆ 1950-02-01 ┆ null       ┆ null       ┆ … ┆ 1          ┆ a55475b1   ┆ 1          ┆ 74   │\n│ 2703453 ┆ null       ┆ null       ┆ null       ┆ … ┆ null       ┆ null       ┆ null       ┆ null │\n│ 2703454 ┆ 1948-04-01 ┆ null       ┆ null       ┆ … ┆ 1          ┆ a55475b1   ┆ 1          ┆ 76   │\n└─────────┴────────────┴────────────┴────────────┴───┴────────────┴────────────┴────────────┴──────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (2_973_991, 44)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>birth_259D</th><th>birthdate_87D</th><th>childnum_185L</th><th>contaddr_district_15M</th><th>contaddr_matchlist_1032L</th><th>contaddr_smempladdr_334L</th><th>contaddr_zipcode_807M</th><th>education_927M</th><th>empl_employedfrom_271D</th><th>empl_employedtotal_800L</th><th>empl_industry_691L</th><th>empladdr_district_926M</th><th>empladdr_zipcode_114M</th><th>familystate_447L</th><th>gender_992L</th><th>housetype_905L</th><th>housingtype_772L</th><th>incometype_1044T</th><th>isreference_387L</th><th>language1_981M</th><th>mainoccupationinc_384A</th><th>maritalst_703L</th><th>num_group1</th><th>personindex_1023L</th><th>persontype_1072L</th><th>persontype_792L</th><th>registaddr_district_1083M</th><th>registaddr_zipcode_184M</th><th>relationshiptoclient_415T</th><th>relationshiptoclient_642T</th><th>remitter_829L</th><th>role_1084L</th><th>role_993L</th><th>safeguarantyflag_411L</th><th>sex_738L</th><th>type_25L</th><th>addres_district_368M_mode</th><th>addres_district_nunique</th><th>addres_zip_823M_mode</th><th>addres_zip_823M_nunique</th><th>conts_role_79M_mode</th><th>conts_role_79M_nunique</th><th>age</th></tr><tr><td>i64</td><td>date</td><td>str</td><td>f64</td><td>str</td><td>bool</td><td>bool</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>str</td><td>f64</td><td>str</td><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>str</td><td>str</td><td>bool</td><td>str</td><td>str</td><td>str</td><td>u32</td><td>str</td><td>u32</td><td>str</td><td>u32</td><td>i32</td></tr></thead><tbody><tr><td>0</td><td>1986-07-01</td><td>null</td><td>null</td><td>&quot;P88_18_84&quot;</td><td>false</td><td>false</td><td>&quot;P167_100_165&quot;</td><td>&quot;P97_36_170&quot;</td><td>&quot;2017-09-15&quot;</td><td>&quot;MORE_FIVE&quot;</td><td>&quot;OTHER&quot;</td><td>&quot;P142_57_166&quot;</td><td>&quot;P167_100_165&quot;</td><td>&quot;MARRIED&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;SALARIED_GOVT&quot;</td><td>null</td><td>&quot;P10_39_147&quot;</td><td>10800.0</td><td>null</td><td>0</td><td>0.0</td><td>1.0</td><td>1.0</td><td>&quot;P88_18_84&quot;</td><td>&quot;P167_100_165&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>true</td><td>&quot;F&quot;</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>38</td></tr><tr><td>0</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>1</td><td>1.0</td><td>1.0</td><td>4.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;SPOUSE&quot;</td><td>null</td><td>false</td><td>&quot;EM&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>0</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>2</td><td>2.0</td><td>4.0</td><td>5.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;COLLEAGUE&quot;</td><td>&quot;SPOUSE&quot;</td><td>false</td><td>&quot;PE&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>0</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>3</td><td>null</td><td>5.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;COLLEAGUE&quot;</td><td>null</td><td>&quot;PE&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>1</td><td>1957-08-01</td><td>null</td><td>null</td><td>&quot;P103_93_94&quot;</td><td>false</td><td>false</td><td>&quot;P176_37_166&quot;</td><td>&quot;P97_36_170&quot;</td><td>&quot;2008-10-29&quot;</td><td>&quot;MORE_FIVE&quot;</td><td>&quot;OTHER&quot;</td><td>&quot;P49_46_174&quot;</td><td>&quot;P160_59_140&quot;</td><td>&quot;DIVORCED&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;SALARIED_GOVT&quot;</td><td>null</td><td>&quot;P10_39_147&quot;</td><td>10000.0</td><td>null</td><td>0</td><td>0.0</td><td>1.0</td><td>1.0</td><td>&quot;P103_93_94&quot;</td><td>&quot;P176_37_166&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>true</td><td>&quot;M&quot;</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>67</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703451</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>1</td><td>null</td><td>1.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;HOME_PHONE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>2703452</td><td>1977-08-01</td><td>null</td><td>null</td><td>&quot;P133_44_167&quot;</td><td>false</td><td>false</td><td>&quot;P59_150_74&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;PRIVATE_SECTOR_EMPLOYEE&quot;</td><td>null</td><td>&quot;P209_127_106&quot;</td><td>30000.0</td><td>null</td><td>0</td><td>0.0</td><td>1.0</td><td>1.0</td><td>&quot;P19_11_176&quot;</td><td>&quot;P11_15_81&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>false</td><td>&quot;M&quot;</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>47</td></tr><tr><td>2703453</td><td>1950-02-01</td><td>null</td><td>null</td><td>&quot;P123_6_84&quot;</td><td>false</td><td>false</td><td>&quot;P46_103_143&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;RETIRED_PENSIONER&quot;</td><td>null</td><td>&quot;P209_127_106&quot;</td><td>30000.0</td><td>null</td><td>0</td><td>0.0</td><td>1.0</td><td>1.0</td><td>&quot;P123_6_84&quot;</td><td>&quot;P46_103_143&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>false</td><td>&quot;F&quot;</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>74</td></tr><tr><td>2703453</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>1</td><td>null</td><td>1.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;HOME_PHONE&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>2703454</td><td>1948-04-01</td><td>null</td><td>null</td><td>&quot;P48_127_19&quot;</td><td>false</td><td>false</td><td>&quot;P78_144_175&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;RETIRED_PENSIONER&quot;</td><td>null</td><td>&quot;P10_39_147&quot;</td><td>39400.0</td><td>null</td><td>0</td><td>0.0</td><td>1.0</td><td>1.0</td><td>&quot;P48_127_19&quot;</td><td>&quot;P78_144_175&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;CL&quot;</td><td>null</td><td>true</td><td>&quot;F&quot;</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>76</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":13},{"cell_type":"code","source":"# 2. Basic aggregates\nagg_list = [\n        pl.count().alias(\"person_count\"),\n        pl.col(\"age\").mean().alias(\"age_mean\"),\n        pl.col(\"age\").min().alias(\"age_min\"),\n        pl.col(\"age\").max().alias(\"age_max\"),\n        pl.col(\"contaddr_district_15M\").n_unique().alias(\"contaddr_district_15M_nunique\"),\n        pl.col(\"contaddr_district_15M\").mode().first().alias(\"contaddr_district_15M_mode\"),\n        pl.col(\"education_927M\").mode().first().alias(\"education_927M_mode\"),\n        pl.col(\"incometype_1044T\").n_unique().alias(\"incometype_1044T_nunique\"),\n        pl.col(\"incometype_1044T\").mode().first().alias(\"incometype_1044T_mode\"),\n        pl.col(\"language1_981M\").n_unique().alias(\"language1_981M_nunique\"),\n        pl.col(\"language1_981M\").mode().first().alias(\"language1_981M_mode\"),\n        pl.col(\"mainoccupationinc_384A\").mean().alias(\"mainoccupationinc_384A_mean\"),\n        pl.col(\"mainoccupationinc_384A\").sum().alias(\"mainoccupationinc_384A_sum\"),\n        pl.col(\"mainoccupationinc_384A\").max().alias(\"mainoccupationinc_384A_max\"),\n        pl.col(\"registaddr_district_1083M\").mode().first().alias(\"registaddr_district_1083M_mode\"),        \n        pl.col(\"role_1084L\").mode().first().alias(\"role_1084L_mode\"),\n        pl.col(\"sex_738L\").n_unique().alias(\"sex_738L_nunique\"),\n        pl.col(\"sex_738L\").mode().first().alias(\"sex_738L_mode\"),\n        pl.col(\"type_25L\").n_unique().alias(\"type_25L_nunique\"),\n        pl.col(\"type_25L\").mode().first().alias(\"type_25L_mode\"),\n        pl.col(\"addres_district_368M_mode\").mode().first().alias(\"addres_district_368M_mode\"),\n        pl.col(\"conts_role_79M_mode\").mode().first().alias(\"conts_role_79M_mode\")\n\n    ]\nperson_feature = person_full.group_by(\"case_id\").agg(agg_list)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:11:06.79855Z","iopub.execute_input":"2025-06-14T14:11:06.799566Z","iopub.status.idle":"2025-06-14T14:11:35.100632Z","shell.execute_reply.started":"2025-06-14T14:11:06.799534Z","shell.execute_reply":"2025-06-14T14:11:35.099667Z"}},"outputs":[{"name":"stderr","text":"/tmp/ipykernel_31/2411677195.py:3: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n  pl.count().alias(\"person_count\"),\n","output_type":"stream"}],"execution_count":17},{"cell_type":"code","source":"person_feature","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:11:35.102338Z","iopub.execute_input":"2025-06-14T14:11:35.102659Z","iopub.status.idle":"2025-06-14T14:11:35.115152Z","shell.execute_reply.started":"2025-06-14T14:11:35.102633Z","shell.execute_reply":"2025-06-14T14:11:35.114073Z"}},"outputs":[{"execution_count":18,"output_type":"execute_result","data":{"text/plain":"shape: (1_526_659, 23)\n┌─────────┬────────────┬──────────┬─────────┬───┬────────────┬────────────┬────────────┬───────────┐\n│ case_id ┆ person_cou ┆ age_mean ┆ age_min ┆ … ┆ type_25L_n ┆ type_25L_m ┆ addres_dis ┆ conts_rol │\n│ ---     ┆ nt         ┆ ---      ┆ ---     ┆   ┆ unique     ┆ ode        ┆ trict_368M ┆ e_79M_mod │\n│ i64     ┆ ---        ┆ f64      ┆ i32     ┆   ┆ ---        ┆ ---        ┆ _mode      ┆ e         │\n│         ┆ u32        ┆          ┆         ┆   ┆ u32        ┆ str        ┆ ---        ┆ ---       │\n│         ┆            ┆          ┆         ┆   ┆            ┆            ┆ str        ┆ str       │\n╞═════════╪════════════╪══════════╪═════════╪═══╪════════════╪════════════╪════════════╪═══════════╡\n│ 1288332 ┆ 1          ┆ 48.0     ┆ 48      ┆ … ┆ 1          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n│ 995971  ┆ 3          ┆ 68.0     ┆ 68      ┆ … ┆ 2          ┆ PHONE      ┆ null       ┆ null      │\n│ 12508   ┆ 3          ┆ 71.0     ┆ 71      ┆ … ┆ 2          ┆ PHONE      ┆ null       ┆ null      │\n│ 1715489 ┆ 1          ┆ 75.0     ┆ 75      ┆ … ┆ 1          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n│ 1861227 ┆ 1          ┆ 46.0     ┆ 46      ┆ … ┆ 1          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n│ …       ┆ …          ┆ …        ┆ …       ┆ … ┆ …          ┆ …          ┆ …          ┆ …         │\n│ 769479  ┆ 3          ┆ 58.0     ┆ 58      ┆ … ┆ 2          ┆ PHONE      ┆ null       ┆ null      │\n│ 1599526 ┆ 1          ┆ 62.0     ┆ 62      ┆ … ┆ 1          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n│ 191618  ┆ 3          ┆ 68.0     ┆ 68      ┆ … ┆ 2          ┆ PHONE      ┆ null       ┆ null      │\n│ 735571  ┆ 3          ┆ 27.0     ┆ 27      ┆ … ┆ 2          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n│ 1903316 ┆ 1          ┆ 64.0     ┆ 64      ┆ … ┆ 1          ┆ PRIMARY_MO ┆ a55475b1   ┆ a55475b1  │\n│         ┆            ┆          ┆         ┆   ┆            ┆ BILE       ┆            ┆           │\n└─────────┴────────────┴──────────┴─────────┴───┴────────────┴────────────┴────────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_526_659, 23)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>person_count</th><th>age_mean</th><th>age_min</th><th>age_max</th><th>contaddr_district_15M_nunique</th><th>contaddr_district_15M_mode</th><th>education_927M_mode</th><th>incometype_1044T_nunique</th><th>incometype_1044T_mode</th><th>language1_981M_nunique</th><th>language1_981M_mode</th><th>mainoccupationinc_384A_mean</th><th>mainoccupationinc_384A_sum</th><th>mainoccupationinc_384A_max</th><th>registaddr_district_1083M_mode</th><th>role_1084L_mode</th><th>sex_738L_nunique</th><th>sex_738L_mode</th><th>type_25L_nunique</th><th>type_25L_mode</th><th>addres_district_368M_mode</th><th>conts_role_79M_mode</th></tr><tr><td>i64</td><td>u32</td><td>f64</td><td>i32</td><td>i32</td><td>u32</td><td>str</td><td>str</td><td>u32</td><td>str</td><td>u32</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>u32</td><td>str</td><td>u32</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>1288332</td><td>1</td><td>48.0</td><td>48</td><td>48</td><td>1</td><td>&quot;P147_21_170&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;PRIVATE_SECTOR_EMPLOYEE&quot;</td><td>1</td><td>&quot;P209_127_106&quot;</td><td>60000.0</td><td>60000.0</td><td>60000.0</td><td>&quot;P147_21_170&quot;</td><td>&quot;CL&quot;</td><td>1</td><td>&quot;F&quot;</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr><tr><td>995971</td><td>3</td><td>68.0</td><td>68</td><td>68</td><td>2</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;a55475b1&quot;</td><td>70000.0</td><td>70000.0</td><td>70000.0</td><td>&quot;a55475b1&quot;</td><td>&quot;PE&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td></tr><tr><td>12508</td><td>3</td><td>71.0</td><td>71</td><td>71</td><td>2</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;a55475b1&quot;</td><td>37400.0</td><td>37400.0</td><td>37400.0</td><td>&quot;a55475b1&quot;</td><td>&quot;PE&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td></tr><tr><td>1715489</td><td>1</td><td>75.0</td><td>75</td><td>75</td><td>1</td><td>&quot;P157_94_145&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;RETIRED_PENSIONER&quot;</td><td>1</td><td>&quot;P10_39_147&quot;</td><td>75000.0</td><td>75000.0</td><td>75000.0</td><td>&quot;P157_94_145&quot;</td><td>&quot;CL&quot;</td><td>1</td><td>&quot;F&quot;</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr><tr><td>1861227</td><td>1</td><td>46.0</td><td>46</td><td>46</td><td>1</td><td>&quot;P82_15_54&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;SALARIED_GOVT&quot;</td><td>1</td><td>&quot;P10_39_147&quot;</td><td>124000.0</td><td>124000.0</td><td>124000.0</td><td>&quot;P214_125_25&quot;</td><td>&quot;CL&quot;</td><td>1</td><td>&quot;F&quot;</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>769479</td><td>3</td><td>58.0</td><td>58</td><td>58</td><td>2</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;a55475b1&quot;</td><td>24000.0</td><td>24000.0</td><td>24000.0</td><td>&quot;a55475b1&quot;</td><td>&quot;PE&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td></tr><tr><td>1599526</td><td>1</td><td>62.0</td><td>62</td><td>62</td><td>1</td><td>&quot;P48_137_100&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;EMPLOYED&quot;</td><td>1</td><td>&quot;P209_127_106&quot;</td><td>40000.0</td><td>40000.0</td><td>40000.0</td><td>&quot;P48_137_100&quot;</td><td>&quot;CL&quot;</td><td>1</td><td>&quot;M&quot;</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr><tr><td>191618</td><td>3</td><td>68.0</td><td>68</td><td>68</td><td>2</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;a55475b1&quot;</td><td>54000.0</td><td>54000.0</td><td>54000.0</td><td>&quot;a55475b1&quot;</td><td>&quot;PE&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;PHONE&quot;</td><td>null</td><td>null</td></tr><tr><td>735571</td><td>3</td><td>27.0</td><td>27</td><td>27</td><td>2</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;a55475b1&quot;</td><td>20000.0</td><td>20000.0</td><td>20000.0</td><td>&quot;a55475b1&quot;</td><td>&quot;PE&quot;</td><td>2</td><td>null</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr><tr><td>1903316</td><td>1</td><td>64.0</td><td>64</td><td>64</td><td>1</td><td>&quot;P56_25_83&quot;</td><td>&quot;a55475b1&quot;</td><td>1</td><td>&quot;PRIVATE_SECTOR_EMPLOYEE&quot;</td><td>1</td><td>&quot;P10_39_147&quot;</td><td>38000.0</td><td>38000.0</td><td>38000.0</td><td>&quot;P56_25_83&quot;</td><td>&quot;CL&quot;</td><td>1</td><td>&quot;M&quot;</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":18},{"cell_type":"code","source":"person_feature.write_csv(\"person_feature.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:14:08.905133Z","iopub.execute_input":"2025-06-14T14:14:08.905493Z","iopub.status.idle":"2025-06-14T14:14:09.938689Z","shell.execute_reply.started":"2025-06-14T14:14:08.90547Z","shell.execute_reply":"2025-06-14T14:14:09.937735Z"}},"outputs":[],"execution_count":19},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Debitcard","metadata":{}},{"cell_type":"code","source":"train_debitcard = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_debitcard_1.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:22:11.599752Z","iopub.execute_input":"2025-06-14T14:22:11.60009Z","iopub.status.idle":"2025-06-14T14:22:11.651025Z","shell.execute_reply.started":"2025-06-14T14:22:11.600042Z","shell.execute_reply":"2025-06-14T14:22:11.649944Z"}},"outputs":[],"execution_count":20},{"cell_type":"code","source":"train_debitcard.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_debitcard.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:22:39.849585Z","iopub.execute_input":"2025-06-14T14:22:39.849899Z","iopub.status.idle":"2025-06-14T14:22:39.857516Z","shell.execute_reply.started":"2025-06-14T14:22:39.849862Z","shell.execute_reply":"2025-06-14T14:22:39.856481Z"}},"outputs":[{"execution_count":22,"output_type":"execute_result","data":{"text/plain":"shape: (1, 6)\n┌─────────┬──────────────────┬──────────────────┬──────────────────┬────────────┬──────────────────┐\n│ case_id ┆ last180dayaverag ┆ last180dayturnov ┆ last30dayturnove ┆ num_group1 ┆ openingdate_857D │\n│ ---     ┆ ebalance_704A    ┆ er_1134A         ┆ r_651A           ┆ ---        ┆ ---              │\n│ u32     ┆ ---              ┆ ---              ┆ ---              ┆ u32        ┆ u32              │\n│         ┆ u32              ┆ u32              ┆ u32              ┆            ┆                  │\n╞═════════╪══════════════════╪══════════════════╪══════════════════╪════════════╪══════════════════╡\n│ 0       ┆ 145086           ┆ 146221           ┆ 146221           ┆ 0          ┆ 12711            │\n└─────────┴──────────────────┴──────────────────┴──────────────────┴────────────┴──────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>last180dayaveragebalance_704A</th><th>last180dayturnover_1134A</th><th>last30dayturnover_651A</th><th>num_group1</th><th>openingdate_857D</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>145086</td><td>146221</td><td>146221</td><td>0</td><td>12711</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":22},{"cell_type":"code","source":"train_debitcard","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:23:32.079166Z","iopub.execute_input":"2025-06-14T14:23:32.079529Z","iopub.status.idle":"2025-06-14T14:23:32.086433Z","shell.execute_reply.started":"2025-06-14T14:23:32.079508Z","shell.execute_reply":"2025-06-14T14:23:32.085503Z"}},"outputs":[{"execution_count":24,"output_type":"execute_result","data":{"text/plain":"shape: (157_302, 6)\n┌─────────┬──────────────────┬──────────────────┬──────────────────┬────────────┬──────────────────┐\n│ case_id ┆ last180dayaverag ┆ last180dayturnov ┆ last30dayturnove ┆ num_group1 ┆ openingdate_857D │\n│ ---     ┆ ebalance_704A    ┆ er_1134A         ┆ r_651A           ┆ ---        ┆ ---              │\n│ i64     ┆ ---              ┆ ---              ┆ ---              ┆ i64        ┆ str              │\n│         ┆ f64              ┆ f64              ┆ f64              ┆            ┆                  │\n╞═════════╪══════════════════╪══════════════════╪══════════════════╪════════════╪══════════════════╡\n│ 225     ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2016-08-16       │\n│ 331     ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2015-03-19       │\n│ 358     ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2014-09-02       │\n│ 390     ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2014-07-23       │\n│ 390     ┆ null             ┆ null             ┆ null             ┆ 1          ┆ 2015-10-01       │\n│ …       ┆ …                ┆ …                ┆ …                ┆ …          ┆ …                │\n│ 2703430 ┆ null             ┆ null             ┆ null             ┆ 7          ┆ 2016-02-25       │\n│ 2703430 ┆ null             ┆ null             ┆ null             ┆ 8          ┆ 2016-11-26       │\n│ 2703439 ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2016-11-25       │\n│ 2703453 ┆ null             ┆ null             ┆ null             ┆ 0          ┆ 2014-08-18       │\n│ 2703453 ┆ null             ┆ null             ┆ null             ┆ 1          ┆ 2015-05-29       │\n└─────────┴──────────────────┴──────────────────┴──────────────────┴────────────┴──────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (157_302, 6)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>last180dayaveragebalance_704A</th><th>last180dayturnover_1134A</th><th>last30dayturnover_651A</th><th>num_group1</th><th>openingdate_857D</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td><td>str</td></tr></thead><tbody><tr><td>225</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2016-08-16&quot;</td></tr><tr><td>331</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2015-03-19&quot;</td></tr><tr><td>358</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2014-09-02&quot;</td></tr><tr><td>390</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2014-07-23&quot;</td></tr><tr><td>390</td><td>null</td><td>null</td><td>null</td><td>1</td><td>&quot;2015-10-01&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703430</td><td>null</td><td>null</td><td>null</td><td>7</td><td>&quot;2016-02-25&quot;</td></tr><tr><td>2703430</td><td>null</td><td>null</td><td>null</td><td>8</td><td>&quot;2016-11-26&quot;</td></tr><tr><td>2703439</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2016-11-25&quot;</td></tr><tr><td>2703453</td><td>null</td><td>null</td><td>null</td><td>0</td><td>&quot;2014-08-18&quot;</td></tr><tr><td>2703453</td><td>null</td><td>null</td><td>null</td><td>1</td><td>&quot;2015-05-29&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":24},{"cell_type":"code","source":"train_debitcard.filter(\n    pl.col('openingdate_857D').is_not_null()\n).select('case_id').unique()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:24:45.898819Z","iopub.execute_input":"2025-06-14T14:24:45.899642Z","iopub.status.idle":"2025-06-14T14:24:45.914191Z","shell.execute_reply.started":"2025-06-14T14:24:45.899616Z","shell.execute_reply":"2025-06-14T14:24:45.913476Z"}},"outputs":[{"execution_count":28,"output_type":"execute_result","data":{"text/plain":"shape: (105_087, 1)\n┌─────────┐\n│ case_id │\n│ ---     │\n│ i64     │\n╞═════════╡\n│ 205927  │\n│ 1531695 │\n│ 1539216 │\n│ 154632  │\n│ 1303778 │\n│ …       │\n│ 244956  │\n│ 142323  │\n│ 2582590 │\n│ 2551427 │\n│ 2654218 │\n└─────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (105_087, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th></tr><tr><td>i64</td></tr></thead><tbody><tr><td>205927</td></tr><tr><td>1531695</td></tr><tr><td>1539216</td></tr><tr><td>154632</td></tr><tr><td>1303778</td></tr><tr><td>&hellip;</td></tr><tr><td>244956</td></tr><tr><td>142323</td></tr><tr><td>2582590</td></tr><tr><td>2551427</td></tr><tr><td>2654218</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":28},{"cell_type":"code","source":"train_deposit = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_deposit_1.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:26:39.945618Z","iopub.execute_input":"2025-06-14T14:26:39.946424Z","iopub.status.idle":"2025-06-14T14:26:39.962544Z","shell.execute_reply.started":"2025-06-14T14:26:39.946392Z","shell.execute_reply":"2025-06-14T14:26:39.961427Z"}},"outputs":[],"execution_count":30},{"cell_type":"code","source":"train_deposit.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_deposit.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:26:40.655738Z","iopub.execute_input":"2025-06-14T14:26:40.656415Z","iopub.status.idle":"2025-06-14T14:26:40.662631Z","shell.execute_reply.started":"2025-06-14T14:26:40.656386Z","shell.execute_reply":"2025-06-14T14:26:40.661775Z"}},"outputs":[{"execution_count":31,"output_type":"execute_result","data":{"text/plain":"shape: (1, 5)\n┌─────────┬─────────────┬──────────────────────┬────────────┬──────────────────┐\n│ case_id ┆ amount_416A ┆ contractenddate_991D ┆ num_group1 ┆ openingdate_313D │\n│ ---     ┆ ---         ┆ ---                  ┆ ---        ┆ ---              │\n│ u32     ┆ u32         ┆ u32                  ┆ u32        ┆ u32              │\n╞═════════╪═════════════╪══════════════════════╪════════════╪══════════════════╡\n│ 0       ┆ 0           ┆ 79682                ┆ 0          ┆ 0                │\n└─────────┴─────────────┴──────────────────────┴────────────┴──────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amount_416A</th><th>contractenddate_991D</th><th>num_group1</th><th>openingdate_313D</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>79682</td><td>0</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":31},{"cell_type":"code","source":"train_deposit","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:26:47.461765Z","iopub.execute_input":"2025-06-14T14:26:47.462096Z","iopub.status.idle":"2025-06-14T14:26:47.469305Z","shell.execute_reply.started":"2025-06-14T14:26:47.462069Z","shell.execute_reply":"2025-06-14T14:26:47.4684Z"}},"outputs":[{"execution_count":32,"output_type":"execute_result","data":{"text/plain":"shape: (145_086, 5)\n┌─────────┬─────────────┬──────────────────────┬────────────┬──────────────────┐\n│ case_id ┆ amount_416A ┆ contractenddate_991D ┆ num_group1 ┆ openingdate_313D │\n│ ---     ┆ ---         ┆ ---                  ┆ ---        ┆ ---              │\n│ i64     ┆ f64         ┆ str                  ┆ i64        ┆ str              │\n╞═════════╪═════════════╪══════════════════════╪════════════╪══════════════════╡\n│ 225     ┆ 0.0         ┆ null                 ┆ 0          ┆ 2016-08-16       │\n│ 331     ┆ 260.374     ┆ 2018-03-18           ┆ 0          ┆ 2015-03-19       │\n│ 358     ┆ 0.0         ┆ null                 ┆ 0          ┆ 2014-09-02       │\n│ 390     ┆ 203.602     ┆ 2017-09-30           ┆ 1          ┆ 2015-10-01       │\n│ 390     ┆ 223.68001   ┆ null                 ┆ 2          ┆ 2016-06-08       │\n│ …       ┆ …           ┆ …                    ┆ …          ┆ …                │\n│ 2703430 ┆ 0.0         ┆ null                 ┆ 7          ┆ 2016-02-25       │\n│ 2703430 ┆ 22918.006   ┆ null                 ┆ 8          ┆ 2016-11-26       │\n│ 2703439 ┆ 219.98401   ┆ null                 ┆ 0          ┆ 2016-11-25       │\n│ 2703453 ┆ 0.0         ┆ null                 ┆ 0          ┆ 2014-08-18       │\n│ 2703453 ┆ 44916.645   ┆ 2018-05-28           ┆ 1          ┆ 2015-05-29       │\n└─────────┴─────────────┴──────────────────────┴────────────┴──────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (145_086, 5)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amount_416A</th><th>contractenddate_991D</th><th>num_group1</th><th>openingdate_313D</th></tr><tr><td>i64</td><td>f64</td><td>str</td><td>i64</td><td>str</td></tr></thead><tbody><tr><td>225</td><td>0.0</td><td>null</td><td>0</td><td>&quot;2016-08-16&quot;</td></tr><tr><td>331</td><td>260.374</td><td>&quot;2018-03-18&quot;</td><td>0</td><td>&quot;2015-03-19&quot;</td></tr><tr><td>358</td><td>0.0</td><td>null</td><td>0</td><td>&quot;2014-09-02&quot;</td></tr><tr><td>390</td><td>203.602</td><td>&quot;2017-09-30&quot;</td><td>1</td><td>&quot;2015-10-01&quot;</td></tr><tr><td>390</td><td>223.68001</td><td>null</td><td>2</td><td>&quot;2016-06-08&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703430</td><td>0.0</td><td>null</td><td>7</td><td>&quot;2016-02-25&quot;</td></tr><tr><td>2703430</td><td>22918.006</td><td>null</td><td>8</td><td>&quot;2016-11-26&quot;</td></tr><tr><td>2703439</td><td>219.98401</td><td>null</td><td>0</td><td>&quot;2016-11-25&quot;</td></tr><tr><td>2703453</td><td>0.0</td><td>null</td><td>0</td><td>&quot;2014-08-18&quot;</td></tr><tr><td>2703453</td><td>44916.645</td><td>&quot;2018-05-28&quot;</td><td>1</td><td>&quot;2015-05-29&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":32},{"cell_type":"code","source":"deposit_feature = train_deposit.group_by(\"case_id\").agg([\n    pl.col(\"amount_416A\").sum().alias(\"amount_sum\"),\n    pl.col(\"amount_416A\").mean().alias(\"amount_mean\"),\n    pl.count().alias(\"count\")\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:29:59.905175Z","iopub.execute_input":"2025-06-14T14:29:59.905944Z","iopub.status.idle":"2025-06-14T14:29:59.921737Z","shell.execute_reply.started":"2025-06-14T14:29:59.90592Z","shell.execute_reply":"2025-06-14T14:29:59.920677Z"}},"outputs":[{"name":"stderr","text":"/tmp/ipykernel_31/1178574264.py:4: DeprecationWarning: `pl.count()` is deprecated. Please use `pl.len()` instead.\n  pl.count().alias(\"count\")\n","output_type":"stream"}],"execution_count":34},{"cell_type":"code","source":"deposit_feature.write_csv(\"deposit_feature.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:30:38.902191Z","iopub.execute_input":"2025-06-14T14:30:38.902556Z","iopub.status.idle":"2025-06-14T14:30:38.924031Z","shell.execute_reply.started":"2025-06-14T14:30:38.902532Z","shell.execute_reply":"2025-06-14T14:30:38.922896Z"}},"outputs":[],"execution_count":36},{"cell_type":"code","source":"train_other_1 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_other_1.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:32:55.148984Z","iopub.execute_input":"2025-06-14T14:32:55.149379Z","iopub.status.idle":"2025-06-14T14:32:55.18208Z","shell.execute_reply.started":"2025-06-14T14:32:55.149352Z","shell.execute_reply":"2025-06-14T14:32:55.181157Z"}},"outputs":[],"execution_count":37},{"cell_type":"code","source":"train_other_1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:32:58.460878Z","iopub.execute_input":"2025-06-14T14:32:58.461182Z","iopub.status.idle":"2025-06-14T14:32:58.468771Z","shell.execute_reply.started":"2025-06-14T14:32:58.461159Z","shell.execute_reply":"2025-06-14T14:32:58.46783Z"}},"outputs":[{"execution_count":38,"output_type":"execute_result","data":{"text/plain":"shape: (51_109, 7)\n┌─────────┬───────────────┬──────────────┬──────────────┬──────────────┬──────────────┬────────────┐\n│ case_id ┆ amtdebitincom ┆ amtdebitoutg ┆ amtdepositba ┆ amtdepositin ┆ amtdepositou ┆ num_group1 │\n│ ---     ┆ ing_4809443A  ┆ oing_4809440 ┆ lance_480944 ┆ coming_48094 ┆ tgoing_48094 ┆ ---        │\n│ i64     ┆ ---           ┆ A            ┆ 1A           ┆ 44A          ┆ 42A          ┆ i64        │\n│         ┆ f64           ┆ ---          ┆ ---          ┆ ---          ┆ ---          ┆            │\n│         ┆               ┆ f64          ┆ f64          ┆ f64          ┆ f64          ┆            │\n╞═════════╪═══════════════╪══════════════╪══════════════╪══════════════╪══════════════╪════════════╡\n│ 43801   ┆ 12466.601     ┆ 12291.2      ┆ 914.2        ┆ 0.0          ┆ 304.80002    ┆ 0          │\n│ 43991   ┆ 3333.4001     ┆ 3273.4001    ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ 44001   ┆ 10000.0       ┆ 10000.0      ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ 44053   ┆ 0.0           ┆ 0.0          ┆ 2586.4001    ┆ 0.0          ┆ 88.8         ┆ 0          │\n│ 44130   ┆ 63.8          ┆ 60.8         ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ …       ┆ …             ┆ …            ┆ …            ┆ …            ┆ …            ┆ …          │\n│ 2703443 ┆ 344.6         ┆ 343.4        ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ 2703448 ┆ 0.0           ┆ 0.0          ┆ 2184.2       ┆ 0.0          ┆ 18.0         ┆ 0          │\n│ 2703450 ┆ 0.0           ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ 2703451 ┆ 27500.0       ┆ 27477.6      ┆ 0.0          ┆ 0.0          ┆ 0.0          ┆ 0          │\n│ 2703453 ┆ 13454.0       ┆ 13333.4      ┆ 822.0        ┆ 0.0          ┆ 6.8          ┆ 0          │\n└─────────┴───────────────┴──────────────┴──────────────┴──────────────┴──────────────┴────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (51_109, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amtdebitincoming_4809443A</th><th>amtdebitoutgoing_4809440A</th><th>amtdepositbalance_4809441A</th><th>amtdepositincoming_4809444A</th><th>amtdepositoutgoing_4809442A</th><th>num_group1</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>i64</td></tr></thead><tbody><tr><td>43801</td><td>12466.601</td><td>12291.2</td><td>914.2</td><td>0.0</td><td>304.80002</td><td>0</td></tr><tr><td>43991</td><td>3333.4001</td><td>3273.4001</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>44001</td><td>10000.0</td><td>10000.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>44053</td><td>0.0</td><td>0.0</td><td>2586.4001</td><td>0.0</td><td>88.8</td><td>0</td></tr><tr><td>44130</td><td>63.8</td><td>60.8</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703443</td><td>344.6</td><td>343.4</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>2703448</td><td>0.0</td><td>0.0</td><td>2184.2</td><td>0.0</td><td>18.0</td><td>0</td></tr><tr><td>2703450</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>2703451</td><td>27500.0</td><td>27477.6</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0</td></tr><tr><td>2703453</td><td>13454.0</td><td>13333.4</td><td>822.0</td><td>0.0</td><td>6.8</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":38},{"cell_type":"code","source":"train_other_1.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_other_1.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:53:38.89453Z","iopub.execute_input":"2025-06-14T14:53:38.894795Z","iopub.status.idle":"2025-06-14T14:53:38.901754Z","shell.execute_reply.started":"2025-06-14T14:53:38.894776Z","shell.execute_reply":"2025-06-14T14:53:38.901047Z"}},"outputs":[{"execution_count":40,"output_type":"execute_result","data":{"text/plain":"shape: (1, 7)\n┌─────────┬───────────────┬──────────────┬──────────────┬──────────────┬──────────────┬────────────┐\n│ case_id ┆ amtdebitincom ┆ amtdebitoutg ┆ amtdepositba ┆ amtdepositin ┆ amtdepositou ┆ num_group1 │\n│ ---     ┆ ing_4809443A  ┆ oing_4809440 ┆ lance_480944 ┆ coming_48094 ┆ tgoing_48094 ┆ ---        │\n│ u32     ┆ ---           ┆ A            ┆ 1A           ┆ 44A          ┆ 42A          ┆ u32        │\n│         ┆ u32           ┆ ---          ┆ ---          ┆ ---          ┆ ---          ┆            │\n│         ┆               ┆ u32          ┆ u32          ┆ u32          ┆ u32          ┆            │\n╞═════════╪═══════════════╪══════════════╪══════════════╪══════════════╪══════════════╪════════════╡\n│ 0       ┆ 0             ┆ 0            ┆ 0            ┆ 0            ┆ 0            ┆ 0          │\n└─────────┴───────────────┴──────────────┴──────────────┴──────────────┴──────────────┴────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>amtdebitincoming_4809443A</th><th>amtdebitoutgoing_4809440A</th><th>amtdepositbalance_4809441A</th><th>amtdepositincoming_4809444A</th><th>amtdepositoutgoing_4809442A</th><th>num_group1</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":40},{"cell_type":"code","source":"train_other_1.write_csv(\"other_feature.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-14T14:57:07.098108Z","iopub.execute_input":"2025-06-14T14:57:07.098684Z","iopub.status.idle":"2025-06-14T14:57:07.115442Z","shell.execute_reply.started":"2025-06-14T14:57:07.098656Z","shell.execute_reply":"2025-06-14T14:57:07.114538Z"}},"outputs":[],"execution_count":41},{"cell_type":"code","source":"import polars as pl","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:07:07.786361Z","iopub.execute_input":"2025-06-15T06:07:07.786735Z","iopub.status.idle":"2025-06-15T06:07:08.488772Z","shell.execute_reply.started":"2025-06-15T06:07:07.786711Z","shell.execute_reply":"2025-06-15T06:07:08.487976Z"}},"outputs":[],"execution_count":15},{"cell_type":"code","source":"train_static_cb_0 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_cb_0.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:07:08.814375Z","iopub.execute_input":"2025-06-15T06:07:08.814818Z","iopub.status.idle":"2025-06-15T06:07:09.66857Z","shell.execute_reply.started":"2025-06-15T06:07:08.814788Z","shell.execute_reply":"2025-06-15T06:07:09.667618Z"}},"outputs":[],"execution_count":16},{"cell_type":"code","source":"train_static_cb_0.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:07:10.17986Z","iopub.execute_input":"2025-06-15T06:07:10.180561Z","iopub.status.idle":"2025-06-15T06:07:10.209754Z","shell.execute_reply.started":"2025-06-15T06:07:10.180529Z","shell.execute_reply":"2025-06-15T06:07:10.208834Z"}},"outputs":[{"execution_count":17,"output_type":"execute_result","data":{"text/plain":"['case_id',\n 'assignmentdate_238D',\n 'assignmentdate_4527235D',\n 'assignmentdate_4955616D',\n 'birthdate_574D',\n 'contractssum_5085716L',\n 'dateofbirth_337D',\n 'dateofbirth_342D',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'education_1103M',\n 'education_88M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'maritalst_385M',\n 'maritalst_893M',\n 'numberofqueries_373L',\n 'pmtaverage_3A',\n 'pmtaverage_4527227A',\n 'pmtaverage_4955615A',\n 'pmtcount_4527229L',\n 'pmtcount_4955617L',\n 'pmtcount_693L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'responsedate_1012D',\n 'responsedate_4527233D',\n 'responsedate_4917613D',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L']"},"metadata":{}}],"execution_count":17},{"cell_type":"code","source":"train_static_cb_0.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_static_cb_0.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:08:03.720374Z","iopub.execute_input":"2025-06-15T06:08:03.720692Z","iopub.status.idle":"2025-06-15T06:08:03.781174Z","shell.execute_reply.started":"2025-06-15T06:08:03.720671Z","shell.execute_reply":"2025-06-15T06:08:03.780324Z"}},"outputs":[{"execution_count":18,"output_type":"execute_result","data":{"text/plain":"shape: (1, 53)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ assignment ┆ assignmen ┆ assignmen ┆ … ┆ riskasses ┆ riskasses ┆ secondqua ┆ thirdquar │\n│ ---     ┆ date_238D  ┆ tdate_452 ┆ tdate_495 ┆   ┆ ment_302T ┆ ment_940T ┆ rter_766L ┆ ter_1082L │\n│ u32     ┆ ---        ┆ 7235D     ┆ 5616D     ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ u32        ┆ ---       ┆ ---       ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32       │\n│         ┆            ┆ u32       ┆ u32       ┆   ┆           ┆           ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 1363480    ┆ 1385498   ┆ 1428843   ┆ … ┆ 1446917   ┆ 1446916   ┆ 114785    ┆ 114785    │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 53)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>assignmentdate_238D</th><th>assignmentdate_4527235D</th><th>assignmentdate_4955616D</th><th>birthdate_574D</th><th>contractssum_5085716L</th><th>dateofbirth_337D</th><th>dateofbirth_342D</th><th>days120_123L</th><th>days180_256L</th><th>days30_165L</th><th>days360_512L</th><th>days90_310L</th><th>description_5085714M</th><th>education_1103M</th><th>education_88M</th><th>firstquarter_103L</th><th>for3years_128L</th><th>for3years_504L</th><th>for3years_584L</th><th>formonth_118L</th><th>formonth_206L</th><th>formonth_535L</th><th>forquarter_1017L</th><th>forquarter_462L</th><th>forquarter_634L</th><th>fortoday_1092L</th><th>forweek_1077L</th><th>forweek_528L</th><th>forweek_601L</th><th>foryear_618L</th><th>foryear_818L</th><th>foryear_850L</th><th>fourthquarter_440L</th><th>maritalst_385M</th><th>maritalst_893M</th><th>numberofqueries_373L</th><th>pmtaverage_3A</th><th>pmtaverage_4527227A</th><th>pmtaverage_4955615A</th><th>pmtcount_4527229L</th><th>pmtcount_4955617L</th><th>pmtcount_693L</th><th>pmtscount_423L</th><th>pmtssum_45A</th><th>requesttype_4525192L</th><th>responsedate_1012D</th><th>responsedate_4527233D</th><th>responsedate_4917613D</th><th>riskassesment_302T</th><th>riskassesment_940T</th><th>secondquarter_766L</th><th>thirdquarter_1082L</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>1363480</td><td>1385498</td><td>1428843</td><td>892605</td><td>1343147</td><td>114785</td><td>1463976</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>0</td><td>0</td><td>0</td><td>114785</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>114785</td><td>0</td><td>0</td><td>114785</td><td>1356887</td><td>1385498</td><td>1428631</td><td>1385498</td><td>1428631</td><td>1354070</td><td>927838</td><td>927838</td><td>827212</td><td>780476</td><td>840149</td><td>1275564</td><td>1446917</td><td>1446916</td><td>114785</td><td>114785</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":18},{"cell_type":"code","source":"train_static_cb_0","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:08:04.712085Z","iopub.execute_input":"2025-06-15T06:08:04.712421Z","iopub.status.idle":"2025-06-15T06:08:04.745999Z","shell.execute_reply.started":"2025-06-15T06:08:04.712397Z","shell.execute_reply":"2025-06-15T06:08:04.745003Z"}},"outputs":[{"execution_count":19,"output_type":"execute_result","data":{"text/plain":"shape: (1_500_476, 53)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ assignment ┆ assignmen ┆ assignmen ┆ … ┆ riskasses ┆ riskasses ┆ secondqua ┆ thirdquar │\n│ ---     ┆ date_238D  ┆ tdate_452 ┆ tdate_495 ┆   ┆ ment_302T ┆ ment_940T ┆ rter_766L ┆ ter_1082L │\n│ i64     ┆ ---        ┆ 7235D     ┆ 5616D     ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ str        ┆ ---       ┆ ---       ┆   ┆ str       ┆ f64       ┆ f64       ┆ f64       │\n│         ┆            ┆ str       ┆ str       ┆   ┆           ┆           ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 357     ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ null      ┆ null      │\n│ 381     ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ null      ┆ null      │\n│ 388     ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ 3.0       ┆ 5.0       │\n│ 405     ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ 2.0       ┆ 0.0       │\n│ 409     ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ 0.0       ┆ 4.0       │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703450 ┆ null       ┆ null      ┆ 2018-01-1 ┆ … ┆ null      ┆ null      ┆ 1.0       ┆ 1.0       │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n│ 2703451 ┆ null       ┆ null      ┆ 2005-06-1 ┆ … ┆ null      ┆ null      ┆ 1.0       ┆ 2.0       │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆           │\n│ 2703452 ┆ null       ┆ null      ┆ null      ┆ … ┆ null      ┆ null      ┆ 0.0       ┆ 4.0       │\n│ 2703453 ┆ null       ┆ null      ┆ 2008-02-1 ┆ … ┆ null      ┆ null      ┆ 2.0       ┆ 1.0       │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ null       ┆ null      ┆ 2000-08-2 ┆ … ┆ null      ┆ null      ┆ 2.0       ┆ 1.0       │\n│         ┆            ┆           ┆ 2         ┆   ┆           ┆           ┆           ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_500_476, 53)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>assignmentdate_238D</th><th>assignmentdate_4527235D</th><th>assignmentdate_4955616D</th><th>birthdate_574D</th><th>contractssum_5085716L</th><th>dateofbirth_337D</th><th>dateofbirth_342D</th><th>days120_123L</th><th>days180_256L</th><th>days30_165L</th><th>days360_512L</th><th>days90_310L</th><th>description_5085714M</th><th>education_1103M</th><th>education_88M</th><th>firstquarter_103L</th><th>for3years_128L</th><th>for3years_504L</th><th>for3years_584L</th><th>formonth_118L</th><th>formonth_206L</th><th>formonth_535L</th><th>forquarter_1017L</th><th>forquarter_462L</th><th>forquarter_634L</th><th>fortoday_1092L</th><th>forweek_1077L</th><th>forweek_528L</th><th>forweek_601L</th><th>foryear_618L</th><th>foryear_818L</th><th>foryear_850L</th><th>fourthquarter_440L</th><th>maritalst_385M</th><th>maritalst_893M</th><th>numberofqueries_373L</th><th>pmtaverage_3A</th><th>pmtaverage_4527227A</th><th>pmtaverage_4955615A</th><th>pmtcount_4527229L</th><th>pmtcount_4955617L</th><th>pmtcount_693L</th><th>pmtscount_423L</th><th>pmtssum_45A</th><th>requesttype_4525192L</th><th>responsedate_1012D</th><th>responsedate_4527233D</th><th>responsedate_4917613D</th><th>riskassesment_302T</th><th>riskassesment_940T</th><th>secondquarter_766L</th><th>thirdquarter_1082L</th></tr><tr><td>i64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td></tr></thead><tbody><tr><td>357</td><td>null</td><td>null</td><td>null</td><td>&quot;1988-04-01&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>6301.4</td><td>null</td><td>&quot;2019-01-25&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>381</td><td>null</td><td>null</td><td>null</td><td>&quot;1973-11-01&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>4019.6</td><td>null</td><td>&quot;2019-01-25&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td></tr><tr><td>388</td><td>null</td><td>null</td><td>null</td><td>&quot;1989-04-01&quot;</td><td>null</td><td>&quot;1989-04-01&quot;</td><td>null</td><td>6.0</td><td>8.0</td><td>2.0</td><td>10.0</td><td>4.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>2.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>10.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>14548.0</td><td>null</td><td>&quot;2019-01-28&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>3.0</td><td>5.0</td></tr><tr><td>405</td><td>null</td><td>null</td><td>null</td><td>&quot;1974-03-01&quot;</td><td>null</td><td>&quot;1974-03-01&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>4.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>6.0</td><td>10498.24</td><td>null</td><td>&quot;2019-01-21&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2.0</td><td>0.0</td></tr><tr><td>409</td><td>null</td><td>null</td><td>null</td><td>&quot;1993-06-01&quot;</td><td>null</td><td>&quot;1993-06-01&quot;</td><td>null</td><td>2.0</td><td>3.0</td><td>0.0</td><td>3.0</td><td>1.0</td><td>&quot;a55475b1&quot;</td><td>&quot;717ddd49&quot;</td><td>&quot;a55475b1&quot;</td><td>4.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.0</td><td>&quot;a7fcb6e5&quot;</td><td>&quot;a55475b1&quot;</td><td>3.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>7.0</td><td>6344.8804</td><td>null</td><td>&quot;2019-01-21&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>4.0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>null</td><td>null</td><td>&quot;2018-01-11&quot;</td><td>null</td><td>52863.59</td><td>&quot;1960-01-01&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;2fc785b2&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>12155.0</td><td>null</td><td>12.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>null</td><td>null</td><td>1.0</td><td>1.0</td></tr><tr><td>2703451</td><td>null</td><td>null</td><td>&quot;2005-06-15&quot;</td><td>null</td><td>324608.52</td><td>&quot;1950-11-01&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;2fc785b2&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>22904.6</td><td>null</td><td>12.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>null</td><td>null</td><td>1.0</td><td>2.0</td></tr><tr><td>2703452</td><td>null</td><td>null</td><td>null</td><td>null</td><td>102738.76</td><td>&quot;1977-08-01&quot;</td><td>null</td><td>2.0</td><td>2.0</td><td>0.0</td><td>3.0</td><td>2.0</td><td>&quot;2fc785b2&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>3.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>null</td><td>null</td><td>0.0</td><td>4.0</td></tr><tr><td>2703453</td><td>null</td><td>null</td><td>&quot;2008-02-15&quot;</td><td>null</td><td>212683.29</td><td>&quot;1950-02-01&quot;</td><td>null</td><td>2.0</td><td>2.0</td><td>1.0</td><td>4.0</td><td>1.0</td><td>&quot;2fc785b2&quot;</td><td>&quot;6b2ae0fa&quot;</td><td>&quot;a55475b1&quot;</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>3.0</td><td>&quot;3439d993&quot;</td><td>&quot;a55475b1&quot;</td><td>4.0</td><td>null</td><td>null</td><td>15792.4</td><td>null</td><td>14.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;2020-10-17&quot;</td><td>null</td><td>null</td><td>2.0</td><td>1.0</td></tr><tr><td>2703454</td><td>null</td><td>null</td><td>&quot;2000-08-22&quot;</td><td>null</td><td>42757.89</td><td>&quot;1948-04-01&quot;</td><td>null</td><td>1.0</td><td>1.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>&quot;2fc785b2&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>&quot;b6cabe76&quot;</td><td>&quot;a55475b1&quot;</td><td>1.0</td><td>null</td><td>null</td><td>21530.4</td><td>null</td><td>12.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>null</td><td>null</td><td>2.0</td><td>1.0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":19},{"cell_type":"code","source":"train_static_cb = train_static_cb_0.with_columns([\n    pl.coalesce([\n        pl.col(\"assignmentdate_238D\"),\n        pl.col(\"assignmentdate_4527235D\"),\n        pl.col(\"assignmentdate_4955616D\")\n    ]).alias(\"assignment_date_str\"),\n    pl.coalesce([\n        pl.col(\"birthdate_574D\"),\n        pl.col(\"dateofbirth_337D\"),\n        pl.col(\"dateofbirth_342D\")\n    ]).alias(\"birthdate_str\"),\n    pl.coalesce([\n        pl.col(\"education_1103M\"),\n        pl.col(\"education_88M\")\n    ]).alias(\"education\"),\n    pl.coalesce([\n        pl.col(\"maritalst_385M\"),\n        pl.col(\"maritalst_893M\")\n    ]).alias(\"marital_status\"),\n    pl.coalesce([\n        pl.col(\"pmtaverage_3A\"),\n        pl.col(\"pmtaverage_4527227A\"),\n        pl.col(\"pmtaverage_4955615A\")\n    ]).alias(\"pmtaverage\"),\n    pl.coalesce([\n        pl.col(\"pmtcount_4527229L\"),\n        pl.col(\"pmtcount_4955617L\"),\n        pl.col(\"pmtcount_693L\"),\n        pl.col(\"pmtscount_423L\")\n    ]).alias(\"pmtcount\"),\n    pl.coalesce([\n        pl.col(\"responsedate_1012D\"),\n        pl.col(\"responsedate_4527233D\"),\n        pl.col(\"responsedate_4917613D\")\n    ]).alias(\"response_date_str\")\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:08:06.692323Z","iopub.execute_input":"2025-06-15T06:08:06.692665Z","iopub.status.idle":"2025-06-15T06:08:07.057093Z","shell.execute_reply.started":"2025-06-15T06:08:06.692637Z","shell.execute_reply":"2025-06-15T06:08:07.055746Z"}},"outputs":[],"execution_count":20},{"cell_type":"code","source":"train_static_c = train_static_cb[[\n'case_id',\n    'assignment_date_str',\n    'birthdate_str',\n    'education',\n    'marital_status',\n    'pmtaverage',\n    'pmtcount',\n    'response_date_str',\n 'contractssum_5085716L',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'numberofqueries_373L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L'\n]]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:34:29.107907Z","iopub.execute_input":"2025-06-15T06:34:29.10826Z","iopub.status.idle":"2025-06-15T06:34:29.138681Z","shell.execute_reply.started":"2025-06-15T06:34:29.108218Z","shell.execute_reply":"2025-06-15T06:34:29.137553Z"}},"outputs":[],"execution_count":34},{"cell_type":"code","source":"train_static_c.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_static_c.columns \n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:34:30.331944Z","iopub.execute_input":"2025-06-15T06:34:30.332226Z","iopub.status.idle":"2025-06-15T06:34:30.362214Z","shell.execute_reply.started":"2025-06-15T06:34:30.332207Z","shell.execute_reply":"2025-06-15T06:34:30.361383Z"}},"outputs":[{"execution_count":35,"output_type":"execute_result","data":{"text/plain":"shape: (1, 41)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ assignment ┆ birthdate ┆ education ┆ … ┆ riskasses ┆ riskasses ┆ secondqua ┆ thirdquar │\n│ ---     ┆ _date_str  ┆ _str      ┆ ---       ┆   ┆ ment_302T ┆ ment_940T ┆ rter_766L ┆ ter_1082L │\n│ u32     ┆ ---        ┆ ---       ┆ u32       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ u32        ┆ u32       ┆           ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 1198929    ┆ 40581     ┆ 0         ┆ … ┆ 1446917   ┆ 1446916   ┆ 114785    ┆ 114785    │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 41)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>assignment_date_str</th><th>birthdate_str</th><th>education</th><th>marital_status</th><th>pmtaverage</th><th>pmtcount</th><th>response_date_str</th><th>contractssum_5085716L</th><th>days120_123L</th><th>days180_256L</th><th>days30_165L</th><th>days360_512L</th><th>days90_310L</th><th>description_5085714M</th><th>firstquarter_103L</th><th>for3years_128L</th><th>for3years_504L</th><th>for3years_584L</th><th>formonth_118L</th><th>formonth_206L</th><th>formonth_535L</th><th>forquarter_1017L</th><th>forquarter_462L</th><th>forquarter_634L</th><th>fortoday_1092L</th><th>forweek_1077L</th><th>forweek_528L</th><th>forweek_601L</th><th>foryear_618L</th><th>foryear_818L</th><th>foryear_850L</th><th>fourthquarter_440L</th><th>numberofqueries_373L</th><th>pmtscount_423L</th><th>pmtssum_45A</th><th>requesttype_4525192L</th><th>riskassesment_302T</th><th>riskassesment_940T</th><th>secondquarter_766L</th><th>thirdquarter_1082L</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>1198929</td><td>40581</td><td>0</td><td>0</td><td>1192126</td><td>619488</td><td>22463</td><td>1343147</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>0</td><td>114785</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>114785</td><td>114785</td><td>927838</td><td>927838</td><td>827212</td><td>1446917</td><td>1446916</td><td>114785</td><td>114785</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":35},{"cell_type":"code","source":"train_base = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet')\ntrain_static_c = train_static_c.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n)\n# ===== 2. Xử lý ngày tháng =====\ntrain_static_c = train_static_c.with_columns([\n        pl.col(\"assignment_date_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"assignment_date\"),\n        pl.col(\"birthdate_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"birthdate\"),\n        pl.col(\"response_date_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"response_date\"),\n        pl.col(\"date_decision\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"date_decision\")\n\n])\ntrain_static_c = train_static_c.with_columns([\n    (pl.col(\"date_decision\") - pl.col(\"response_date\"))\n    .dt.total_days()\n    .abs()\n    .alias(\"response_date_date_decision\")\n])\n\n    \n    # ===== 3. Tính toán tuổi =====\ntrain_static_c = train_static_c.with_columns([\n        (pl.col(\"assignment_date\").dt.year() - pl.col(\"birthdate\").dt.year()).alias(\"age_estimate\"),\n        (pl.col(\"response_date\") - pl.col(\"assignment_date\")).dt.total_days().alias(\"processing_days\")\n])\n# ===== 4. Feature chỉ số tín dụng =====\n    # Tỷ lệ hoạt động tín dụng\ntrain_static_c = train_static_c.with_columns([\n    (pl.col(\"days30_165L\") / pl.when(pl.col(\"days360_512L\") == 0).then(1e-5).otherwise(pl.col(\"days360_512L\"))).alias(\"credit_activity_ratio\"),\n    (pl.col(\"days180_256L\") / pl.when(pl.col(\"days360_512L\") == 0).then(1e-5).otherwise(pl.col(\"days360_512L\"))).alias(\"midterm_credit_ratio\")\n])\n\n    \n    # Mật độ từ chối\ntrain_static_c = train_static_c.with_columns([\n        ((pl.col(\"for3years_128L\") + pl.col(\"foryear_618L\")) / 4).alias(\"rejection_density\"),\n        ((pl.col(\"formonth_118L\") + pl.col(\"forweek_601L\")) / 4).alias(\"shortterm_rejection_density\")\n    ])\n\n    # ===== 5. Feature thu nhập và thuế =====\n    # Tỷ lệ thuế/thu nhập\ntrain_static_c = train_static_c.with_columns([\n        (pl.col(\"pmtssum_45A\") / pl.col(\"contractssum_5085716L\").replace(0, 1e-5)).alias(\"tax_burden\"),\n        (pl.col(\"pmtcount\") / 12).alias(\"tax_compliance\")\n    ])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:05:46.370496Z","iopub.execute_input":"2025-06-15T07:05:46.370898Z","iopub.status.idle":"2025-06-15T07:05:47.047669Z","shell.execute_reply.started":"2025-06-15T07:05:46.370874Z","shell.execute_reply":"2025-06-15T07:05:47.046671Z"}},"outputs":[],"execution_count":45},{"cell_type":"code","source":"train_static_c.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:05:53.880199Z","iopub.execute_input":"2025-06-15T07:05:53.880559Z","iopub.status.idle":"2025-06-15T07:05:53.914717Z","shell.execute_reply.started":"2025-06-15T07:05:53.880525Z","shell.execute_reply":"2025-06-15T07:05:53.913663Z"}},"outputs":[{"execution_count":46,"output_type":"execute_result","data":{"text/plain":"['case_id',\n 'assignment_date_str',\n 'birthdate_str',\n 'education',\n 'marital_status',\n 'pmtaverage',\n 'pmtcount',\n 'response_date_str',\n 'contractssum_5085716L',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'numberofqueries_373L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L',\n 'assignment_date',\n 'birthdate',\n 'response_date',\n 'age_estimate',\n 'processing_days',\n 'credit_activity_ratio',\n 'midterm_credit_ratio',\n 'rejection_density',\n 'shortterm_rejection_density',\n 'tax_burden',\n 'tax_compliance',\n 'date_decision',\n 'date_decision_right',\n 'response_date_date_decision']"},"metadata":{}}],"execution_count":46},{"cell_type":"code","source":"train_static_c.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in train_static_cb_0.columns\n])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T06:51:52.25615Z","iopub.execute_input":"2025-06-15T06:51:52.257467Z","iopub.status.idle":"2025-06-15T06:51:52.287238Z","shell.execute_reply.started":"2025-06-15T06:51:52.257427Z","shell.execute_reply":"2025-06-15T06:51:52.286217Z"}},"outputs":[{"execution_count":42,"output_type":"execute_result","data":{"text/plain":"shape: (1, 53)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ assignment ┆ assignmen ┆ assignmen ┆ … ┆ riskasses ┆ riskasses ┆ secondqua ┆ thirdquar │\n│ ---     ┆ date_238D  ┆ tdate_452 ┆ tdate_495 ┆   ┆ ment_302T ┆ ment_940T ┆ rter_766L ┆ ter_1082L │\n│ u32     ┆ ---        ┆ 7235D     ┆ 5616D     ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ u32        ┆ ---       ┆ ---       ┆   ┆ u32       ┆ u32       ┆ u32       ┆ u32       │\n│         ┆            ┆ u32       ┆ u32       ┆   ┆           ┆           ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 1363480    ┆ 1385498   ┆ 1428843   ┆ … ┆ 1446917   ┆ 1446916   ┆ 114785    ┆ 114785    │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 53)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>assignmentdate_238D</th><th>assignmentdate_4527235D</th><th>assignmentdate_4955616D</th><th>birthdate_574D</th><th>contractssum_5085716L</th><th>dateofbirth_337D</th><th>dateofbirth_342D</th><th>days120_123L</th><th>days180_256L</th><th>days30_165L</th><th>days360_512L</th><th>days90_310L</th><th>description_5085714M</th><th>education_1103M</th><th>education_88M</th><th>firstquarter_103L</th><th>for3years_128L</th><th>for3years_504L</th><th>for3years_584L</th><th>formonth_118L</th><th>formonth_206L</th><th>formonth_535L</th><th>forquarter_1017L</th><th>forquarter_462L</th><th>forquarter_634L</th><th>fortoday_1092L</th><th>forweek_1077L</th><th>forweek_528L</th><th>forweek_601L</th><th>foryear_618L</th><th>foryear_818L</th><th>foryear_850L</th><th>fourthquarter_440L</th><th>maritalst_385M</th><th>maritalst_893M</th><th>numberofqueries_373L</th><th>pmtaverage_3A</th><th>pmtaverage_4527227A</th><th>pmtaverage_4955615A</th><th>pmtcount_4527229L</th><th>pmtcount_4955617L</th><th>pmtcount_693L</th><th>pmtscount_423L</th><th>pmtssum_45A</th><th>requesttype_4525192L</th><th>responsedate_1012D</th><th>responsedate_4527233D</th><th>responsedate_4917613D</th><th>riskassesment_302T</th><th>riskassesment_940T</th><th>secondquarter_766L</th><th>thirdquarter_1082L</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>1363480</td><td>1385498</td><td>1428843</td><td>892605</td><td>1343147</td><td>114785</td><td>1463976</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>0</td><td>0</td><td>0</td><td>114785</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>114785</td><td>0</td><td>0</td><td>114785</td><td>1356887</td><td>1385498</td><td>1428631</td><td>1385498</td><td>1428631</td><td>1354070</td><td>927838</td><td>927838</td><td>827212</td><td>780476</td><td>840149</td><td>1275564</td><td>1446917</td><td>1446916</td><td>114785</td><td>114785</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":42},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"static_cb_features = train_static_c[[\n 'case_id',\n 'education',\n 'marital_status',\n 'pmtaverage',\n 'pmtcount',\n 'contractssum_5085716L',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'numberofqueries_373L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L',\n 'age_estimate',\n 'processing_days',\n 'credit_activity_ratio',\n 'midterm_credit_ratio',\n 'rejection_density',\n 'shortterm_rejection_density',\n 'tax_burden',\n 'tax_compliance',\n 'response_date_date_decision'\n]]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:09:33.590212Z","iopub.execute_input":"2025-06-15T07:09:33.590747Z","iopub.status.idle":"2025-06-15T07:09:33.621565Z","shell.execute_reply.started":"2025-06-15T07:09:33.590709Z","shell.execute_reply":"2025-06-15T07:09:33.620264Z"}},"outputs":[],"execution_count":49},{"cell_type":"code","source":"static_cb_features.select([\n    pl.col(col).is_null().sum().alias(col)\n    for col in static_cb_features.columns \n\n])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:09:46.10295Z","iopub.execute_input":"2025-06-15T07:09:46.103297Z","iopub.status.idle":"2025-06-15T07:09:46.131603Z","shell.execute_reply.started":"2025-06-15T07:09:46.103233Z","shell.execute_reply":"2025-06-15T07:09:46.130595Z"}},"outputs":[{"execution_count":50,"output_type":"execute_result","data":{"text/plain":"shape: (1, 47)\n┌─────────┬───────────┬────────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ education ┆ marital_st ┆ pmtaverag ┆ … ┆ shortterm ┆ tax_burde ┆ tax_compl ┆ response_ │\n│ ---     ┆ ---       ┆ atus       ┆ e         ┆   ┆ _rejectio ┆ n         ┆ iance     ┆ date_date │\n│ u32     ┆ u32       ┆ ---        ┆ ---       ┆   ┆ n_density ┆ ---       ┆ ---       ┆ _decision │\n│         ┆           ┆ u32        ┆ u32       ┆   ┆ ---       ┆ u32       ┆ u32       ┆ ---       │\n│         ┆           ┆            ┆           ┆   ┆ u32       ┆           ┆           ┆ u32       │\n╞═════════╪═══════════╪════════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ 0         ┆ 0          ┆ 1192126   ┆ … ┆ 1463962   ┆ 1500476   ┆ 619488    ┆ 22463     │\n└─────────┴───────────┴────────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 47)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>education</th><th>marital_status</th><th>pmtaverage</th><th>pmtcount</th><th>contractssum_5085716L</th><th>days120_123L</th><th>days180_256L</th><th>days30_165L</th><th>days360_512L</th><th>days90_310L</th><th>description_5085714M</th><th>firstquarter_103L</th><th>for3years_128L</th><th>for3years_504L</th><th>for3years_584L</th><th>formonth_118L</th><th>formonth_206L</th><th>formonth_535L</th><th>forquarter_1017L</th><th>forquarter_462L</th><th>forquarter_634L</th><th>fortoday_1092L</th><th>forweek_1077L</th><th>forweek_528L</th><th>forweek_601L</th><th>foryear_618L</th><th>foryear_818L</th><th>foryear_850L</th><th>fourthquarter_440L</th><th>numberofqueries_373L</th><th>pmtscount_423L</th><th>pmtssum_45A</th><th>requesttype_4525192L</th><th>riskassesment_302T</th><th>riskassesment_940T</th><th>secondquarter_766L</th><th>thirdquarter_1082L</th><th>age_estimate</th><th>processing_days</th><th>credit_activity_ratio</th><th>midterm_credit_ratio</th><th>rejection_density</th><th>shortterm_rejection_density</th><th>tax_burden</th><th>tax_compliance</th><th>response_date_date_decision</th></tr><tr><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td><td>u32</td></tr></thead><tbody><tr><td>0</td><td>0</td><td>0</td><td>1192126</td><td>619488</td><td>1343147</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>114785</td><td>0</td><td>114785</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>1463962</td><td>114785</td><td>114785</td><td>927838</td><td>927838</td><td>827212</td><td>1446917</td><td>1446916</td><td>114785</td><td>114785</td><td>1208967</td><td>1198934</td><td>114785</td><td>114785</td><td>1463962</td><td>1463962</td><td>1500476</td><td>619488</td><td>22463</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":50},{"cell_type":"code","source":"static_cb_features.write_csv(\"static_cb_features.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:15:07.566433Z","iopub.execute_input":"2025-06-15T07:15:07.567154Z","iopub.status.idle":"2025-06-15T07:15:09.08179Z","shell.execute_reply.started":"2025-06-15T07:15:07.56712Z","shell.execute_reply":"2025-06-15T07:15:09.080647Z"}},"outputs":[],"execution_count":51},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Static_0","metadata":{}},{"cell_type":"code","source":"train_static_0 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_*.parquet')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:38:13.306977Z","iopub.execute_input":"2025-06-15T07:38:13.307302Z","iopub.status.idle":"2025-06-15T07:38:15.038984Z","shell.execute_reply.started":"2025-06-15T07:38:13.30724Z","shell.execute_reply":"2025-06-15T07:38:15.037944Z"}},"outputs":[],"execution_count":61},{"cell_type":"code","source":"train_base = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet')\ntrain_static_0 = train_static_0.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n) ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:38:15.040241Z","iopub.execute_input":"2025-06-15T07:38:15.040544Z","iopub.status.idle":"2025-06-15T07:38:15.472371Z","shell.execute_reply.started":"2025-06-15T07:38:15.040518Z","shell.execute_reply":"2025-06-15T07:38:15.471123Z"}},"outputs":[],"execution_count":62},{"cell_type":"code","source":"filter_columns = train_static_0[[\n 'case_id',\n 'actualdpdtolerance_344P',\n 'amtinstpaidbefduel24m_4187115A',\n 'annuity_780A',\n 'annuitynextmonth_57A',\n 'applicationcnt_361L',\n 'applications30d_658L',\n 'applicationscnt_1086L',\n 'applicationscnt_464L',\n 'applicationscnt_629L',\n 'applicationscnt_867L',\n 'avgdbddpdlast24m_3658932P',\n 'avgdbddpdlast3m_4187120P',\n 'avgdbdtollast24m_4525197P',\n 'avgdpdtolclosure24_3658938P',\n 'avginstallast24m_3658937A',\n 'avglnamtstart24m_4525187A',\n 'avgmaxdpdlast9m_3716943P',\n 'avgoutstandbalancel6m_4187114A',\n 'avgpmtlast12m_4525200A',\n 'bankacctype_710L',\n 'cardtype_51L',\n 'clientscnt12m_3712952L',\n 'clientscnt3m_3712950L',\n 'clientscnt6m_3712949L',\n 'clientscnt_100L',\n 'clientscnt_1022L',\n 'clientscnt_1071L',\n 'clientscnt_1130L',\n 'clientscnt_136L',\n 'clientscnt_157L',\n 'clientscnt_257L',\n 'clientscnt_304L',\n 'clientscnt_360L',\n 'clientscnt_493L',\n 'clientscnt_533L',\n 'clientscnt_887L',\n 'clientscnt_946L',\n 'cntincpaycont9m_3716944L',\n 'cntpmts24_3658933L',\n 'commnoinclast6m_3546845L',\n 'credamount_770A',\n 'credtype_322L',\n 'currdebt_22A',\n 'currdebtcredtyperange_828A',\n 'daysoverduetolerancedd_3976961L',\n 'deferredmnthsnum_166L',\n 'disbursedcredamount_1113A',\n 'disbursementtype_67L',\n 'downpmt_116A',\n 'eir_270L',\n 'homephncnt_628L',\n 'inittransactionamount_650A',\n 'inittransactioncode_186L',\n 'interestrate_311L',\n 'interestrategrace_34L',\n 'lastapprcommoditycat_1041M',\n 'lastapprcommoditytypec_5251766M',\n 'lastapprcredamount_781A',\n 'lastcancelreason_561M',\n 'lastdependentsnum_448L',\n 'lastotherinc_902A',\n 'lastotherlnsexpense_631A',\n 'lastrejectcommoditycat_161M',\n 'lastrejectcommodtypec_5251769M',\n 'lastrejectcredamount_222A',\n 'lastrejectreason_759M',\n 'lastrejectreasonclient_4145040M',\n 'lastst_736L',\n 'maininc_215A',\n 'maxannuity_159A',\n 'maxannuity_4075009A',\n 'maxdbddpdlast1m_3658939P',\n 'maxdbddpdtollast12m_3658940P',\n 'maxdbddpdtollast6m_4187119P',\n 'maxdebt4_972A',\n 'maxdpdfrom6mto36m_3546853P',\n 'maxdpdinstldate_3546855D',\n 'maxdpdinstlnum_3546846P',\n 'maxdpdlast12m_727P',\n 'maxdpdlast24m_143P',\n 'maxdpdlast3m_392P',\n 'maxdpdlast6m_474P',\n 'maxdpdlast9m_1059P',\n 'maxdpdtolerance_374P',\n 'maxinstallast24m_3658928A',\n 'maxlnamtstart6m_4525199A',\n 'maxoutstandbalancel12m_4187113A',\n 'maxpmtlast3m_4525190A',\n 'mindbddpdlast24m_3658935P',\n 'mindbdtollast24m_4525191P',\n 'mobilephncnt_593L',\n 'monthsannuity_845L',\n 'numactivecreds_622L',\n 'numactivecredschannel_414L',\n 'numactiverelcontr_750L',\n 'numcontrs3months_479L',\n 'numincomingpmts_3546848L',\n 'numinstlallpaidearly3d_817L',\n 'numinstls_657L',\n 'numinstlsallpaid_934L',\n 'numinstlswithdpd10_728L',\n 'numinstlswithdpd5_4187116L',\n 'numinstlswithoutdpd_562L',\n 'numinstmatpaidtearly2d_4499204L',\n 'numinstpaid_4499208L',\n 'numinstpaidearly3d_3546850L',\n 'numinstpaidearly3dest_4493216L',\n 'numinstpaidearly5d_1087L',\n 'numinstpaidearly5dest_4493211L',\n 'numinstpaidearly5dobd_4499205L',\n 'numinstpaidearly_338L',\n 'numinstpaidearlyest_4493214L',\n 'numinstpaidlastcontr_4325080L',\n 'numinstpaidlate1d_3546852L',\n 'numinstregularpaid_973L',\n 'numinstregularpaidest_4493210L',\n 'numinsttopaygr_769L',\n 'numinsttopaygrest_4493213L',\n 'numinstunpaidmax_3546851L',\n 'numinstunpaidmaxest_4493212L',\n 'numnotactivated_1143L',\n 'numpmtchanneldd_318L',\n 'numrejects9m_859L',\n 'opencred_647L',\n 'paytype1st_925L',\n 'paytype_783L',\n 'payvacationpostpone_4187118D',\n 'pctinstlsallpaidearl3d_427L',\n 'pctinstlsallpaidlat10d_839L',\n 'pctinstlsallpaidlate1d_3546856L',\n 'pctinstlsallpaidlate4d_3546849L',\n 'pctinstlsallpaidlate6d_3546844L',\n 'pmtnum_254L',\n 'posfpd10lastmonth_333P',\n 'posfpd30lastmonth_3976960P',\n 'posfstqpd30lastmonth_3976962P',\n 'previouscontdistrict_112M',\n 'price_1097A',\n 'sellerplacecnt_915L',\n 'sellerplacescnt_216L',\n 'sumoutstandtotal_3546847A',\n 'sumoutstandtotalest_4493215A',\n 'totaldebt_9A',\n 'totalsettled_863A',\n 'totinstallast1m_4525188A',\n 'twobodfilling_608L',\n 'typesuite_864L'\n]]\nimport polars as pl\n\n# Cột ngày cần parse\ndate_cols = [\n    \"date_decision\",\n    \"datelastunpaid_3546854D\",\n    \"dtlastpmtallstes_4499206D\",\n    \"lastapprdate_640D\",\n    \"lastdelinqdate_224D\",\n    \"lastrejectdate_50D\",\n    \"firstdatedue_489D\"\n]\n\n# Cột boolean cần chuyển sang 0/1\nbool_cols = [\n    \"equalitydataagreement_891L\",\n    \"equalityempfrom_62L\",\n    \"isbidproduct_1095L\",\n    \"isbidproductrequest_292L\",\n    \"isdebitcard_729L\",\n    \"mastercontrelectronic_519L\",\n    \"mastercontrexist_109L\"\n]\n\n# Parse các cột ngày sang định dạng date\nparsed_dates = [\n    pl.col(col).str.strptime(pl.Date, \"%Y-%m-%d\", strict=False).alias(col)\n    for col in date_cols\n]\n\n# Các feature ngày so với date_decision\ndate_diff_exprs = [\n    (pl.col(\"date_decision\") - pl.col(col)).dt.total_days().alias(f\"diff_{col}_to_decision\")\n    for col in [\n        \"datelastunpaid_3546854D\",\n        \"dtlastpmtallstes_4499206D\",\n        \"lastapprdate_640D\",\n        \"lastdelinqdate_224D\",\n        \"lastrejectdate_50D\"\n    ]\n]\n\n# Feature giữa 2 ngày cụ thể\nfirst_due_diff_expr = (\n    (pl.col(\"firstdatedue_489D\") - pl.col(\"dtlastpmtallstes_4499206D\"))\n    .dt.total_days()\n    .alias(\"diff_firstdatedue_to_lastpmt\")\n)\n\n# Chuyển boolean về 0/1\nbool_exprs = [\n    pl.col(col).cast(pl.Int8).alias(col) for col in bool_cols\n]\n\n# Final: thêm case_id vào kết quả\ntrain_static_features = train_static_0.with_columns(parsed_dates).select(\n    [pl.col(\"case_id\")] + date_diff_exprs + [first_due_diff_expr] + bool_exprs\n)\n\nstatic_feature = filter_columns.join(train_static_features, on = 'case_id', how ='left')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:39:53.501761Z","iopub.execute_input":"2025-06-15T07:39:53.502111Z","iopub.status.idle":"2025-06-15T07:39:56.364556Z","shell.execute_reply.started":"2025-06-15T07:39:53.502087Z","shell.execute_reply":"2025-06-15T07:39:56.363495Z"}},"outputs":[],"execution_count":67},{"cell_type":"code","source":"static_feature","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:40:02.494799Z","iopub.execute_input":"2025-06-15T07:40:02.495113Z","iopub.status.idle":"2025-06-15T07:40:02.531412Z","shell.execute_reply.started":"2025-06-15T07:40:02.495088Z","shell.execute_reply":"2025-06-15T07:40:02.530417Z"}},"outputs":[{"execution_count":68,"output_type":"execute_result","data":{"text/plain":"shape: (1_526_659, 161)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpdt ┆ amtinstpa ┆ annuity_7 ┆ … ┆ isbidprod ┆ isdebitca ┆ mastercon ┆ mastercon │\n│ ---     ┆ olerance_3 ┆ idbefduel ┆ 80A       ┆   ┆ uctreques ┆ rd_729L   ┆ trelectro ┆ trexist_1 │\n│ i64     ┆ 44P        ┆ 24m_41871 ┆ ---       ┆   ┆ t_292L    ┆ ---       ┆ nic_519L  ┆ 09L       │\n│         ┆ ---        ┆ 15A       ┆ f64       ┆   ┆ ---       ┆ i8        ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ ---       ┆           ┆   ┆ i8        ┆           ┆ i8        ┆ i8        │\n│         ┆            ┆ f64       ┆           ┆   ┆           ┆           ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 0       ┆ null       ┆ null      ┆ 1917.6    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 1       ┆ null       ┆ null      ┆ 3134.0    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 2       ┆ null       ┆ null      ┆ 4937.0    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 3       ┆ null       ┆ null      ┆ 4643.6    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 4       ┆ null       ┆ null      ┆ 3390.2    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703450 ┆ 0.0        ┆ 176561.36 ┆ 3675.4001 ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 2703451 ┆ 0.0        ┆ 301276.47 ┆ 7088.6    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 2703452 ┆ 0.0        ┆ 14232.4   ┆ 7788.8003 ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 2703453 ┆ 0.0        ┆ 197371.58 ┆ 1195.4    ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n│ 2703454 ┆ 0.0        ┆ 82949.6   ┆ 4533.8003 ┆ … ┆ null      ┆ null      ┆ 0         ┆ 0         │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1_526_659, 161)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpdtolerance_344P</th><th>amtinstpaidbefduel24m_4187115A</th><th>annuity_780A</th><th>annuitynextmonth_57A</th><th>applicationcnt_361L</th><th>applications30d_658L</th><th>applicationscnt_1086L</th><th>applicationscnt_464L</th><th>applicationscnt_629L</th><th>applicationscnt_867L</th><th>avgdbddpdlast24m_3658932P</th><th>avgdbddpdlast3m_4187120P</th><th>avgdbdtollast24m_4525197P</th><th>avgdpdtolclosure24_3658938P</th><th>avginstallast24m_3658937A</th><th>avglnamtstart24m_4525187A</th><th>avgmaxdpdlast9m_3716943P</th><th>avgoutstandbalancel6m_4187114A</th><th>avgpmtlast12m_4525200A</th><th>bankacctype_710L</th><th>cardtype_51L</th><th>clientscnt12m_3712952L</th><th>clientscnt3m_3712950L</th><th>clientscnt6m_3712949L</th><th>clientscnt_100L</th><th>clientscnt_1022L</th><th>clientscnt_1071L</th><th>clientscnt_1130L</th><th>clientscnt_136L</th><th>clientscnt_157L</th><th>clientscnt_257L</th><th>clientscnt_304L</th><th>clientscnt_360L</th><th>clientscnt_493L</th><th>clientscnt_533L</th><th>clientscnt_887L</th><th>&hellip;</th><th>opencred_647L</th><th>paytype1st_925L</th><th>paytype_783L</th><th>payvacationpostpone_4187118D</th><th>pctinstlsallpaidearl3d_427L</th><th>pctinstlsallpaidlat10d_839L</th><th>pctinstlsallpaidlate1d_3546856L</th><th>pctinstlsallpaidlate4d_3546849L</th><th>pctinstlsallpaidlate6d_3546844L</th><th>pmtnum_254L</th><th>posfpd10lastmonth_333P</th><th>posfpd30lastmonth_3976960P</th><th>posfstqpd30lastmonth_3976962P</th><th>previouscontdistrict_112M</th><th>price_1097A</th><th>sellerplacecnt_915L</th><th>sellerplacescnt_216L</th><th>sumoutstandtotal_3546847A</th><th>sumoutstandtotalest_4493215A</th><th>totaldebt_9A</th><th>totalsettled_863A</th><th>totinstallast1m_4525188A</th><th>twobodfilling_608L</th><th>typesuite_864L</th><th>diff_datelastunpaid_3546854D_to_decision</th><th>diff_dtlastpmtallstes_4499206D_to_decision</th><th>diff_lastapprdate_640D_to_decision</th><th>diff_lastdelinqdate_224D_to_decision</th><th>diff_lastrejectdate_50D_to_decision</th><th>diff_firstdatedue_to_lastpmt</th><th>equalitydataagreement_891L</th><th>equalityempfrom_62L</th><th>isbidproduct_1095L</th><th>isbidproductrequest_292L</th><th>isdebitcard_729L</th><th>mastercontrelectronic_519L</th><th>mastercontrexist_109L</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>&hellip;</td><td>bool</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i64</td><td>i8</td><td>i8</td><td>i8</td><td>i8</td><td>i8</td><td>i8</td><td>i8</td></tr></thead><tbody><tr><td>0</td><td>null</td><td>null</td><td>1917.6</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;BO&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>1</td><td>null</td><td>null</td><td>3134.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>3.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>null</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>18.0</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;BO&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>2</td><td>null</td><td>null</td><td>4937.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>36.0</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;BO&quot;</td><td>&quot;AL&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>2102</td><td>null</td><td>null</td><td>null</td><td>0</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>3</td><td>null</td><td>null</td><td>4643.6</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>2.0</td><td>0.0</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>12.0</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>1.0</td><td>1.0</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;BO&quot;</td><td>&quot;AL&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>-4</td><td>null</td><td>1</td><td>1</td><td>0</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>4</td><td>null</td><td>null</td><td>3390.2</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>24.0</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>null</td><td>0.0</td><td>0.0</td><td>null</td><td>&quot;BO&quot;</td><td>&quot;AL&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>0</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703450</td><td>0.0</td><td>176561.36</td><td>3675.4001</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>10.0</td><td>-23.0</td><td>-43.0</td><td>-23.0</td><td>0.0</td><td>7356.8003</td><td>null</td><td>0.0</td><td>16392.496</td><td>6750.2</td><td>&quot;CA&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>0.9115</td><td>0.02655</td><td>0.0354</td><td>0.0354</td><td>0.0354</td><td>12.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;P123_39_170&quot;</td><td>0.0</td><td>0.0</td><td>8.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>428159.66</td><td>14346.319</td><td>&quot;FO&quot;</td><td>null</td><td>1481</td><td>null</td><td>362</td><td>1481</td><td>1040</td><td>null</td><td>null</td><td>null</td><td>1</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>2703451</td><td>0.0</td><td>301276.47</td><td>7088.6</td><td>6191.6</td><td>0.0</td><td>0.0</td><td>5.0</td><td>0.0</td><td>0.0</td><td>5.0</td><td>-18.0</td><td>-12.0</td><td>-18.0</td><td>0.0</td><td>12553.2</td><td>null</td><td>0.0</td><td>105129.31</td><td>15780.4</td><td>&quot;CA&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>0.94595</td><td>0.0</td><td>0.01351</td><td>0.0</td><td>0.0</td><td>24.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;P162_18_172&quot;</td><td>null</td><td>0.0</td><td>3.0</td><td>68098.4</td><td>68098.4</td><td>68098.4</td><td>701247.3</td><td>40499.805</td><td>&quot;FO&quot;</td><td>null</td><td>128</td><td>null</td><td>371</td><td>128</td><td>null</td><td>null</td><td>null</td><td>null</td><td>1</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>2703452</td><td>0.0</td><td>14232.4</td><td>7788.8003</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>3.0</td><td>-12.0</td><td>null</td><td>-16.0</td><td>1.0</td><td>2662.4001</td><td>null</td><td>null</td><td>null</td><td>1500.6</td><td>&quot;CA&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>0.66667</td><td>0.0</td><td>0.33333</td><td>0.11111</td><td>0.0</td><td>11.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;P133_44_167&quot;</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>24002.0</td><td>null</td><td>&quot;BO&quot;</td><td>null</td><td>569</td><td>350</td><td>413</td><td>569</td><td>null</td><td>-370</td><td>null</td><td>null</td><td>1</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>2703453</td><td>0.0</td><td>197371.58</td><td>1195.4</td><td>2827.2</td><td>0.0</td><td>0.0</td><td>36.0</td><td>0.0</td><td>0.0</td><td>9.0</td><td>-33.0</td><td>-64.0</td><td>-34.0</td><td>0.0</td><td>8212.601</td><td>null</td><td>0.0</td><td>47943.062</td><td>9921.2</td><td>&quot;CA&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>1.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>6.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>0.69643</td><td>0.04348</td><td>0.20536</td><td>0.10811</td><td>0.0991</td><td>6.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>0.0</td><td>4.0</td><td>46806.6</td><td>46806.6</td><td>46806.6</td><td>440145.3</td><td>5654.4</td><td>&quot;BO&quot;</td><td>null</td><td>994</td><td>null</td><td>292</td><td>994</td><td>2655</td><td>null</td><td>null</td><td>null</td><td>1</td><td>null</td><td>null</td><td>0</td><td>0</td></tr><tr><td>2703454</td><td>0.0</td><td>82949.6</td><td>4533.8003</td><td>2986.8</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>-6.0</td><td>-5.0</td><td>-6.0</td><td>0.0</td><td>6405.4</td><td>15998.0</td><td>0.0</td><td>15651.796</td><td>6352.0</td><td>&quot;CA&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>null</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&hellip;</td><td>false</td><td>&quot;OTHER&quot;</td><td>&quot;OTHER&quot;</td><td>null</td><td>0.93333</td><td>0.0</td><td>0.06667</td><td>0.0</td><td>0.0</td><td>12.0</td><td>0.0</td><td>0.0</td><td>0.0</td><td>&quot;P48_127_19&quot;</td><td>null</td><td>0.0</td><td>0.0</td><td>8919.2</td><td>8919.2</td><td>5919.2</td><td>92999.57</td><td>2986.8</td><td>&quot;FO&quot;</td><td>null</td><td>400</td><td>20</td><td>106</td><td>400</td><td>null</td><td>-380</td><td>null</td><td>null</td><td>1</td><td>null</td><td>null</td><td>0</td><td>0</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":68},{"cell_type":"code","source":"static_feature.write_csv(\"static_0_feature.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-15T07:47:35.453489Z","iopub.execute_input":"2025-06-15T07:47:35.453877Z","iopub.status.idle":"2025-06-15T07:47:41.777913Z","shell.execute_reply.started":"2025-06-15T07:47:35.453853Z","shell.execute_reply":"2025-06-15T07:47:41.777078Z"}},"outputs":[],"execution_count":69},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from gosdt import GOSDTClassifier\nhelp(GOSDTClassifier)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-13T09:07:58.691573Z","iopub.execute_input":"2025-06-13T09:07:58.692705Z","iopub.status.idle":"2025-06-13T09:07:58.72943Z","shell.execute_reply.started":"2025-06-13T09:07:58.692669Z","shell.execute_reply":"2025-06-13T09:07:58.728201Z"}},"outputs":[{"name":"stdout","text":"Help on class GOSDTClassifier in module gosdt._classifier:\n\nclass GOSDTClassifier(sklearn.base.ClassifierMixin, sklearn.base.BaseEstimator)\n |  GOSDTClassifier(regularization: float = 0.05, allow_small_reg: bool = False, depth_budget: Optional[int] = None, time_limit: Optional[int] = None, balance: bool = False, cancellation: bool = True, look_ahead: bool = True, similar_support: bool = True, rule_list: bool = False, non_binary: bool = False, diagnostics: bool = False, uncertainty_tolerance: float = 0, upperbound_guess: Optional[float] = None, model_limit: int = 1, worker_limit: int = 1, verbose: bool = False, debug: bool = False)\n |  \n |  Method resolution order:\n |      GOSDTClassifier\n |      sklearn.base.ClassifierMixin\n |      sklearn.base.BaseEstimator\n |      builtins.object\n |  \n |  Methods defined here:\n |  \n |  __init__(self, regularization: float = 0.05, allow_small_reg: bool = False, depth_budget: Optional[int] = None, time_limit: Optional[int] = None, balance: bool = False, cancellation: bool = True, look_ahead: bool = True, similar_support: bool = True, rule_list: bool = False, non_binary: bool = False, diagnostics: bool = False, uncertainty_tolerance: float = 0, upperbound_guess: Optional[float] = None, model_limit: int = 1, worker_limit: int = 1, verbose: bool = False, debug: bool = False)\n |      Initialize self.  See help(type(self)) for accurate signature.\n |  \n |  fit(self, X, y, y_ref=None, input_features=None, cost_matrix=None, feature_map=None)\n |      Fit the GOSDTClassifier to X, y.\n |      \n |      Parameters\n |      ----------\n |      X : array-like of shape (n_samples, n_features)\n |          The training input samples. Boolean values are expected.\n |      \n |      y : array-like of shape (n_samples,)\n |          The target values. The target values can be binary or multiclass.\n |      \n |      input_features : array-like of shape (n_features,) | None, default=None\n |          The feature names for the input data. If None, the feature names will be set to [\"x0\", \"x1\", ...].\n |          \n |      y_ref : array-like of shape (n_samples,) | None, default=None\n |          Theese represent the predictions made by some blackbox model, that will be used to guide optimization.\n |          The reference labels can be binary or multiclass, but must have the same classes and shape as y.\n |      \n |      cost_matrix : array-like of shape (n_classes, n_classes) | None, default=None\n |          The cost matrix for the optimization. If None, a cost matrix will be created based on \n |          the number of classes and whether a balanced cost matrix is requested.\n |      \n |      feature_map : list of sets of ints | None, default=None\n |          The feature map is a list that maps original feature indices to the sets of binarized features that\n |          represent them. If None, the feature map will be set to the trivial feature map. This is not currently\n |          being used, but could in the future be used to produce N-ary trees.\n |      \n |      Raises\n |      ------\n |      Value Error\n |          If the number of feature names does not match the number of features, or if the length of the y_ref vector\n |          does not match the length of the y vector, or if the classes in y_ref do not match the classes in y.\n |          Additionally if X is not boolean, or if the number of features in the feature_map does not match the number\n |          of features in X.\n |      \n |      TimeoutError\n |          If the optimization does not finish within the time limit. In this case the partial result is preserved, but\n |          is not provably optimal.\n |      \n |      Returns\n |      -------\n |      self : object\n |          Fitted estimator.\n |  \n |  get_result(self)\n |  \n |  predict(self, X, model_number=0)\n |      Predict the class for each sample in X.s\n |      \n |      Parameters\n |      ----------\n |      X : array-like of shape (n_samples, n_features)\n |          The input samples. Boolean values are expected.\n |          \n |      model_number : int, default=0\n |          The model number to use for prediction. If multiple models were extracted, \n |          this parameter can be used to select a specific model.\n |      \n |      Raises\n |      ------\n |      ValueError\n |          If the model_number is greater than the number of models extracted or the set model_limit parameter.\n |      \n |      Returns\n |      -------\n |      y : array-like of shape (n_samples,)\n |          The predicted classes.s\n |  \n |  predict_proba(self, X, model_number=0)\n |  \n |  ----------------------------------------------------------------------\n |  Methods inherited from sklearn.base.ClassifierMixin:\n |  \n |  score(self, X, y, sample_weight=None)\n |      Return the mean accuracy on the given test data and labels.\n |      \n |      In multi-label classification, this is the subset accuracy\n |      which is a harsh metric since you require for each sample that\n |      each label set be correctly predicted.\n |      \n |      Parameters\n |      ----------\n |      X : array-like of shape (n_samples, n_features)\n |          Test samples.\n |      \n |      y : array-like of shape (n_samples,) or (n_samples, n_outputs)\n |          True labels for `X`.\n |      \n |      sample_weight : array-like of shape (n_samples,), default=None\n |          Sample weights.\n |      \n |      Returns\n |      -------\n |      score : float\n |          Mean accuracy of ``self.predict(X)`` w.r.t. `y`.\n |  \n |  ----------------------------------------------------------------------\n |  Data descriptors inherited from sklearn.base.ClassifierMixin:\n |  \n |  __dict__\n |      dictionary for instance variables\n |  \n |  __weakref__\n |      list of weak references to the object\n |  \n |  ----------------------------------------------------------------------\n |  Methods inherited from sklearn.base.BaseEstimator:\n |  \n |  __getstate__(self)\n |      Helper for pickle.\n |  \n |  __repr__(self, N_CHAR_MAX=700)\n |      Return repr(self).\n |  \n |  __setstate__(self, state)\n |  \n |  get_params(self, deep=True)\n |      Get parameters for this estimator.\n |      \n |      Parameters\n |      ----------\n |      deep : bool, default=True\n |          If True, will return the parameters for this estimator and\n |          contained subobjects that are estimators.\n |      \n |      Returns\n |      -------\n |      params : dict\n |          Parameter names mapped to their values.\n |  \n |  set_params(self, **params)\n |      Set the parameters of this estimator.\n |      \n |      The method works on simple estimators as well as on nested objects\n |      (such as :class:`~sklearn.pipeline.Pipeline`). The latter have\n |      parameters of the form ``<component>__<parameter>`` so that it's\n |      possible to update each component of a nested object.\n |      \n |      Parameters\n |      ----------\n |      **params : dict\n |          Estimator parameters.\n |      \n |      Returns\n |      -------\n |      self : estimator instance\n |          Estimator instance.\n\n","output_type":"stream"}],"execution_count":79},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train_credit_bureau_a_1.filter(pl.col('residualamount_488A').is_not_null()).select('case_id').unique().count()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T16:31:01.803323Z","iopub.execute_input":"2025-06-12T16:31:01.804329Z","iopub.status.idle":"2025-06-12T16:31:02.201371Z","shell.execute_reply.started":"2025-06-12T16:31:01.804289Z","shell.execute_reply":"2025-06-12T16:31:02.200761Z"}},"outputs":[{"execution_count":118,"output_type":"execute_result","data":{"text/plain":"shape: (1, 1)\n┌─────────┐\n│ case_id │\n│ ---     │\n│ u32     │\n╞═════════╡\n│ 487062  │\n└─────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (1, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th></tr><tr><td>u32</td></tr></thead><tbody><tr><td>487062</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":118},{"cell_type":"code","source":"df_train_credit_bureau_a_1[['case_id','numberofcontrsvalue_258L']]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T16:21:38.650658Z","iopub.execute_input":"2025-06-12T16:21:38.650988Z","iopub.status.idle":"2025-06-12T16:21:38.677133Z","shell.execute_reply.started":"2025-06-12T16:21:38.650965Z","shell.execute_reply":"2025-06-12T16:21:38.676292Z"}},"outputs":[{"execution_count":113,"output_type":"execute_result","data":{"text/plain":"shape: (15_940_537, 2)\n┌─────────┬──────────────────────────┐\n│ case_id ┆ numberofcontrsvalue_258L │\n│ ---     ┆ ---                      │\n│ i64     ┆ f64                      │\n╞═════════╪══════════════════════════╡\n│ 388     ┆ null                     │\n│ 388     ┆ 2.0                      │\n│ 388     ┆ null                     │\n│ 388     ┆ null                     │\n│ 388     ┆ null                     │\n│ …       ┆ …                        │\n│ 2703454 ┆ null                     │\n│ 2703454 ┆ null                     │\n│ 2703454 ┆ null                     │\n│ 2703454 ┆ null                     │\n│ 2703454 ┆ null                     │\n└─────────┴──────────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (15_940_537, 2)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>numberofcontrsvalue_258L</th></tr><tr><td>i64</td><td>f64</td></tr></thead><tbody><tr><td>388</td><td>null</td></tr><tr><td>388</td><td>2.0</td></tr><tr><td>388</td><td>null</td></tr><tr><td>388</td><td>null</td></tr><tr><td>388</td><td>null</td></tr><tr><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703454</td><td>null</td></tr><tr><td>2703454</td><td>null</td></tr><tr><td>2703454</td><td>null</td></tr><tr><td>2703454</td><td>null</td></tr><tr><td>2703454</td><td>null</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":113},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train_applprev_1.select(\n    [pl.col(c).is_null().sum().alias(c) for c in df_train_applprev_1.columns]\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T14:06:04.668365Z","iopub.status.idle":"2025-06-12T14:06:04.668732Z","shell.execute_reply.started":"2025-06-12T14:06:04.668521Z","shell.execute_reply":"2025-06-12T14:06:04.668533Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"full_train_applprev['cancelreason_3545846M'].unique()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T14:06:04.669754Z","iopub.status.idle":"2025-06-12T14:06:04.67007Z","shell.execute_reply.started":"2025-06-12T14:06:04.669925Z","shell.execute_reply":"2025-06-12T14:06:04.669937Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"full_train_applprev[['case_id','approvaldate_319D','pmtnum_8L','dateactivated_425D','rejectreason_755M','status_219L','is_approval']]\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T14:06:04.671395Z","iopub.status.idle":"2025-06-12T14:06:04.671716Z","shell.execute_reply.started":"2025-06-12T14:06:04.671538Z","shell.execute_reply":"2025-06-12T14:06:04.671551Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"full_train_applprev.filter(\n    (pl.col('maxdpdtolerance_577P')>0) & (pl.col('is_approval') =='Not Approval')\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-12T14:06:04.673199Z","iopub.status.idle":"2025-06-12T14:06:04.673503Z","shell.execute_reply.started":"2025-06-12T14:06:04.673334Z","shell.execute_reply":"2025-06-12T14:06:04.673349Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"df_train_applprev_1.filter(\n    (pl.col(\"case_id\") == 1825696))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-11T07:52:18.02658Z","iopub.execute_input":"2025-06-11T07:52:18.028421Z","iopub.status.idle":"2025-06-11T07:52:24.378532Z","shell.execute_reply.started":"2025-06-11T07:52:18.028383Z","shell.execute_reply":"2025-06-11T07:52:24.377577Z"}},"outputs":[{"execution_count":70,"output_type":"execute_result","data":{"text/plain":"shape: (3, 43)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ status_21 ┆ tenor_203 ┆ is_approv ┆ count_is_ │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ 9L        ┆ L         ┆ al        ┆ approval  │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ f64       ┆ str       ┆   ┆ str       ┆ f64       ┆ str       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 1825696 ┆ 0.0        ┆ 2099.0    ┆ 2019-12-1 ┆ … ┆ A         ┆ 12.0      ┆ Approval  ┆ 3         │\n│         ┆            ┆           ┆ 6         ┆   ┆           ┆           ┆           ┆           │\n│ 1825696 ┆ 0.0        ┆ 2707.4001 ┆ 2007-04-0 ┆ … ┆ K         ┆ 6.0       ┆ Approval  ┆ 3         │\n│         ┆            ┆           ┆ 7         ┆   ┆           ┆           ┆           ┆           │\n│ 1825696 ┆ 0.0        ┆ null      ┆ null      ┆ … ┆ T         ┆ null      ┆ Not       ┆ 3         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (3, 43)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>rejectreasonclient_4145042M</th><th>revolvingaccount_394A</th><th>status_219L</th><th>tenor_203L</th><th>is_approval</th><th>count_is_approval</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>u32</td></tr></thead><tbody><tr><td>1825696</td><td>0.0</td><td>2099.0</td><td>&quot;2019-12-16&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-12-16&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>25188.0</td><td>&quot;COL&quot;</td><td>16788.0</td><td>&quot;2020-01-02&quot;</td><td>&quot;P147_21_170&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-02-17&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-01-16&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>22000.0</td><td>0.0</td><td>0</td><td>16788.0</td><td>12.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;A&quot;</td><td>12.0</td><td>&quot;Approval&quot;</td><td>3</td></tr><tr><td>1825696</td><td>0.0</td><td>2707.4001</td><td>&quot;2007-04-07&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2007-04-07&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>14175.2</td><td>&quot;COL&quot;</td><td>0.0</td><td>&quot;2007-04-16&quot;</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2002-03-15&quot;</td><td>&quot;MARRIED&quot;</td><td>&quot;2007-05-08&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>6000.0</td><td>0.0</td><td>2</td><td>0.0</td><td>6.0</td><td>&quot;P217_110_186&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>6.0</td><td>&quot;Approval&quot;</td><td>3</td></tr><tr><td>1825696</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2008-08-01&quot;</td><td>0.0</td><td>12000.0</td><td>0.0</td><td>0.0</td><td>&quot;CA&quot;</td><td>0.0</td><td>12000.0</td><td>&quot;REL&quot;</td><td>0.0</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;MARRIED&quot;</td><td>null</td><td>&quot;NDF&quot;</td><td>false</td><td>false</td><td>6000.0</td><td>0.0</td><td>1</td><td>0.0</td><td>null</td><td>&quot;P60_146_156&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>5.612807e8</td><td>&quot;T&quot;</td><td>null</td><td>&quot;Not Approval&quot;</td><td>3</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":70},{"cell_type":"code","source":"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-10T05:51:37.263567Z","iopub.execute_input":"2025-06-10T05:51:37.264667Z","iopub.status.idle":"2025-06-10T05:51:37.380493Z","shell.execute_reply.started":"2025-06-10T05:51:37.26463Z","shell.execute_reply":"2025-06-10T05:51:37.379442Z"}},"outputs":[{"execution_count":69,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 7)\n┌─────────┬──────────────┬──────────────┬──────────────┬──────────────┬─────────────┬──────────────┐\n│ case_id ┆ approvaldate ┆ maxdpdtolera ┆ dateactivate ┆ rejectreason ┆ status_219L ┆ is_approval  │\n│ ---     ┆ _319D        ┆ nce_577P     ┆ d_425D       ┆ _755M        ┆ ---         ┆ ---          │\n│ i64     ┆ ---          ┆ ---          ┆ ---          ┆ ---          ┆ str         ┆ str          │\n│         ┆ str          ┆ f64          ┆ str          ┆ str          ┆             ┆              │\n╞═════════╪══════════════╪══════════════╪══════════════╪══════════════╪═════════════╪══════════════╡\n│ 2       ┆ null         ┆ null         ┆ null         ┆ a55475b1     ┆ D           ┆ Not Approval │\n│ 2       ┆ null         ┆ null         ┆ null         ┆ a55475b1     ┆ D           ┆ Not Approval │\n│ 3       ┆ null         ┆ null         ┆ null         ┆ P94_109_143  ┆ D           ┆ Not Approval │\n│ 4       ┆ null         ┆ null         ┆ null         ┆ a55475b1     ┆ T           ┆ Not Approval │\n│ 5       ┆ null         ┆ null         ┆ null         ┆ a55475b1     ┆ T           ┆ Not Approval │\n│ …       ┆ …            ┆ …            ┆ …            ┆ …            ┆ …           ┆ …            │\n│ 2703453 ┆ 2019-12-18   ┆ 0.0          ┆ 2019-12-23   ┆ a55475b1     ┆ A           ┆ Approval     │\n│ 2703453 ┆ 2014-08-15   ┆ 33.0         ┆ 2014-08-15   ┆ a55475b1     ┆ K           ┆ Approval     │\n│ 2703453 ┆ 2018-11-14   ┆ 0.0          ┆ 2018-11-15   ┆ a55475b1     ┆ K           ┆ Approval     │\n│ 2703454 ┆ 2020-06-21   ┆ 0.0          ┆ 2020-06-23   ┆ a55475b1     ┆ A           ┆ Approval     │\n│ 2703454 ┆ 2019-08-01   ┆ 0.0          ┆ 2019-08-20   ┆ a55475b1     ┆ K           ┆ Approval     │\n└─────────┴──────────────┴──────────────┴──────────────┴──────────────┴─────────────┴──────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 7)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>approvaldate_319D</th><th>maxdpdtolerance_577P</th><th>dateactivated_425D</th><th>rejectreason_755M</th><th>status_219L</th><th>is_approval</th></tr><tr><td>i64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td></tr></thead><tbody><tr><td>2</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;Not Approval&quot;</td></tr><tr><td>2</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;D&quot;</td><td>&quot;Not Approval&quot;</td></tr><tr><td>3</td><td>null</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>&quot;D&quot;</td><td>&quot;Not Approval&quot;</td></tr><tr><td>4</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;Not Approval&quot;</td></tr><tr><td>5</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;T&quot;</td><td>&quot;Not Approval&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>&quot;2019-12-18&quot;</td><td>0.0</td><td>&quot;2019-12-23&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;A&quot;</td><td>&quot;Approval&quot;</td></tr><tr><td>2703453</td><td>&quot;2014-08-15&quot;</td><td>33.0</td><td>&quot;2014-08-15&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;Approval&quot;</td></tr><tr><td>2703453</td><td>&quot;2018-11-14&quot;</td><td>0.0</td><td>&quot;2018-11-15&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;Approval&quot;</td></tr><tr><td>2703454</td><td>&quot;2020-06-21&quot;</td><td>0.0</td><td>&quot;2020-06-23&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;A&quot;</td><td>&quot;Approval&quot;</td></tr><tr><td>2703454</td><td>&quot;2019-08-01&quot;</td><td>0.0</td><td>&quot;2019-08-20&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;K&quot;</td><td>&quot;Approval&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":69},{"cell_type":"code","source":"train_applprev_2.columns","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-11T08:06:30.167771Z","iopub.execute_input":"2025-06-11T08:06:30.168153Z","iopub.status.idle":"2025-06-11T08:06:30.199042Z","shell.execute_reply.started":"2025-06-11T08:06:30.168129Z","shell.execute_reply":"2025-06-11T08:06:30.198224Z"}},"outputs":[{"execution_count":73,"output_type":"execute_result","data":{"text/plain":"['case_id',\n 'cacccardblochreas_147M',\n 'conts_type_509L',\n 'credacc_cards_status_52L',\n 'num_group1',\n 'num_group2']"},"metadata":{}}],"execution_count":73},{"cell_type":"code","source":"df_train_applprev_1.filter(\n    pl.col(\"is_approval\") == \"Approval\"\n).select(\"cancelreason_3545846M\").unique()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-08T16:00:29.761102Z","iopub.execute_input":"2025-06-08T16:00:29.761462Z","iopub.status.idle":"2025-06-08T16:00:30.647604Z","shell.execute_reply.started":"2025-06-08T16:00:29.761437Z","shell.execute_reply":"2025-06-08T16:00:30.646661Z"}},"outputs":[{"execution_count":81,"output_type":"execute_result","data":{"text/plain":"shape: (39, 1)\n┌───────────────────────┐\n│ cancelreason_3545846M │\n│ ---                   │\n│ str                   │\n╞═══════════════════════╡\n│ P64_121_167           │\n│ P16_126_23            │\n│ a55475b1              │\n│ P19_105_83            │\n│ P185_66_167           │\n│ …                     │\n│ P163_9_145            │\n│ P118_30_169           │\n│ P46_50_166            │\n│ P24_27_36             │\n│ P120_0_10             │\n└───────────────────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (39, 1)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>cancelreason_3545846M</th></tr><tr><td>str</td></tr></thead><tbody><tr><td>&quot;P64_121_167&quot;</td></tr><tr><td>&quot;P16_126_23&quot;</td></tr><tr><td>&quot;a55475b1&quot;</td></tr><tr><td>&quot;P19_105_83&quot;</td></tr><tr><td>&quot;P185_66_167&quot;</td></tr><tr><td>&hellip;</td></tr><tr><td>&quot;P163_9_145&quot;</td></tr><tr><td>&quot;P118_30_169&quot;</td></tr><tr><td>&quot;P46_50_166&quot;</td></tr><tr><td>&quot;P24_27_36&quot;</td></tr><tr><td>&quot;P120_0_10&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":81},{"cell_type":"code","source":"df_train_applprev_1","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-08T14:53:28.934171Z","iopub.execute_input":"2025-06-08T14:53:28.935883Z","iopub.status.idle":"2025-06-08T14:53:28.976918Z","shell.execute_reply.started":"2025-06-08T14:53:28.935843Z","shell.execute_reply":"2025-06-08T14:53:28.975905Z"}},"outputs":[{"execution_count":65,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 43)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ status_21 ┆ tenor_203 ┆ is_approv ┆ count_is_ │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ 9L        ┆ L         ┆ al        ┆ approval  │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ ---       ┆ ---       ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ f64       ┆ str       ┆   ┆ str       ┆ f64       ┆ str       ┆ u32       │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 0.0        ┆ 640.2     ┆ null      ┆ … ┆ D         ┆ 24.0      ┆ Not       ┆ 2         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 2       ┆ 0.0        ┆ 1682.4    ┆ null      ┆ … ┆ D         ┆ 12.0      ┆ Not       ┆ 2         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 3       ┆ 0.0        ┆ 6140.0    ┆ null      ┆ … ┆ D         ┆ 12.0      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 4       ┆ 0.0        ┆ 2556.6    ┆ null      ┆ … ┆ T         ┆ 24.0      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ 5       ┆ 0.0        ┆ null      ┆ null      ┆ … ┆ T         ┆ null      ┆ Not       ┆ 1         │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆ Approval  ┆           │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703453 ┆ 0.0        ┆ 2827.2    ┆ 2019-12-1 ┆ … ┆ A         ┆ 30.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 8         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 3197.6    ┆ 2014-08-1 ┆ … ┆ K         ┆ 48.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆           │\n│ 2703453 ┆ 0.0        ┆ 5981.4    ┆ 2018-11-1 ┆ … ┆ K         ┆ 30.0      ┆ Approval  ┆ 9         │\n│         ┆            ┆           ┆ 4         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 2986.8    ┆ 2020-06-2 ┆ … ┆ A         ┆ 6.0       ┆ Approval  ┆ 2         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n│ 2703454 ┆ 0.0        ┆ 6726.6    ┆ 2019-08-0 ┆ … ┆ K         ┆ 12.0      ┆ Approval  ┆ 2         │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆           │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 43)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>rejectreasonclient_4145042M</th><th>revolvingaccount_394A</th><th>status_219L</th><th>tenor_203L</th><th>is_approval</th><th>count_is_approval</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>u32</td></tr></thead><tbody><tr><td>2</td><td>0.0</td><td>640.2</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>10000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>2</td></tr><tr><td>2</td><td>0.0</td><td>1682.4</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>16000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>1</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>2</td></tr><tr><td>3</td><td>0.0</td><td>6140.0</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;2019-01-07&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>59999.8</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P131_33_167&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2018-05-15&quot;</td><td>&quot;MARRIED&quot;</td><td>&quot;2019-02-07&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>11000.0</td><td>null</td><td>0</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;D&quot;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>4</td><td>0.0</td><td>2556.6</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>&quot;2019-01-08&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P194_82_174&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2019-02-08&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>16000.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;T&quot;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>5</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>&quot;2019-01-16&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P54_133_26&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>62000.0</td><td>null</td><td>0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;T&quot;</td><td>null</td><td>&quot;Not Approval&quot;</td><td>1</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>0.0</td><td>2827.2</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>34550.855</td><td>&quot;2019-12-23&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-09&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-01-18&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>50000.0</td><td>0.0</td><td>1</td><td>46806.6</td><td>30.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;A&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703453</td><td>0.0</td><td>3197.6</td><td>&quot;2014-08-15&quot;</td><td>33059.0</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>179.424</td><td>0.0</td><td>398.02402</td><td>198.024</td><td>&quot;AC&quot;</td><td>14.0</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2018-08-07&quot;</td><td>&quot;2018-08-07&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;MARRIED&quot;</td><td>&quot;2014-09-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>28000.0</td><td>33.0</td><td>5</td><td>0.0</td><td>48.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>48.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703453</td><td>0.0</td><td>5981.4</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>123800.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2018-11-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2019-12-17&quot;</td><td>&quot;2019-12-17&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2018-12-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>76000.0</td><td>0.0</td><td>2</td><td>0.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>9</td></tr><tr><td>2703454</td><td>0.0</td><td>2986.8</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>15998.0</td><td>&quot;COL&quot;</td><td>5631.406</td><td>&quot;2020-06-23&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-07-21&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>24000.0</td><td>0.0</td><td>0</td><td>5919.2</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;A&quot;</td><td>6.0</td><td>&quot;Approval&quot;</td><td>2</td></tr><tr><td>2703454</td><td>0.0</td><td>6726.6</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2019-08-20&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>&quot;2020-08-02&quot;</td><td>&quot;2020-08-02&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;WIDOWED&quot;</td><td>&quot;2019-09-01&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>60000.0</td><td>0.0</td><td>1</td><td>0.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;K&quot;</td><td>12.0</td><td>&quot;Approval&quot;</td><td>2</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":65},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_1.filter(\n    (col('approvaldate_319D').isNull()) & (col('credacc_credlmt_575A') > 0)\n).limit(20).toPandas()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-08T07:43:49.884299Z","iopub.execute_input":"2025-06-08T07:43:49.885073Z","iopub.status.idle":"2025-06-08T07:43:50.175524Z","shell.execute_reply.started":"2025-06-08T07:43:49.885041Z","shell.execute_reply":"2025-06-08T07:43:50.174623Z"}},"outputs":[{"execution_count":100,"output_type":"execute_result","data":{"text/plain":"    case_id  actualdpd_943P  annuity_853A approvaldate_319D  \\\n0        45           0.000         0.000              None   \n1        93           0.000         0.000              None   \n2       102           0.000         0.000              None   \n3       119           0.000         0.000              None   \n4       126           0.000         0.000              None   \n5       126           0.000         0.000              None   \n6       126           0.000         0.000              None   \n7       126           0.000         0.000              None   \n8       128           0.000         0.000              None   \n9       135           0.000           NaN              None   \n10      144           0.000         0.000              None   \n11      238           0.000         0.000              None   \n12      276           0.000         0.000              None   \n13      294           0.000         0.000              None   \n14      320           0.000         0.000              None   \n15      321           0.000         0.000              None   \n16      339           0.000         0.000              None   \n17      387           0.000         0.000              None   \n18      402           0.000         0.000              None   \n19      505           0.000         0.000              None   \n\n    byoccupationinc_3656910L cancelreason_3545846M  childnum_21L  \\\n0                        NaN           P94_109_143           NaN   \n1                        NaN             P24_27_36           NaN   \n2                        NaN           P94_109_143         2.000   \n3                        NaN           P85_114_140           NaN   \n4                        NaN           P94_109_143           NaN   \n5                        NaN           P94_109_143           NaN   \n6                        NaN           P94_109_143           NaN   \n7                        NaN           P94_109_143           NaN   \n8                        NaN           P94_109_143           NaN   \n9                      1.000              a55475b1         0.000   \n10                       NaN           P94_109_143           NaN   \n11                       NaN           P94_109_143           NaN   \n12                       NaN           P94_109_143           NaN   \n13                       NaN           P94_109_143           NaN   \n14                       NaN           P94_109_143           NaN   \n15                       NaN           P94_109_143           NaN   \n16                       NaN           P94_109_143           NaN   \n17                       NaN            P46_50_166           NaN   \n18                       NaN           P94_109_143           NaN   \n19                       NaN           P94_109_143           NaN   \n\n   creationdate_885D  credacc_actualbalance_314A  credacc_credlmt_575A  \\\n0         2018-08-15                         NaN            100000.000   \n1         2018-11-21                         NaN            100000.000   \n2         2017-10-25                         NaN             10000.000   \n3         2019-01-04                         NaN             39900.000   \n4         2018-12-01                         NaN              5898.000   \n5         2018-11-21                         NaN             10000.000   \n6         2018-10-26                         NaN             14000.000   \n7         2018-10-25                         NaN             20000.000   \n8         2018-12-01                         NaN             17180.000   \n9         2015-02-10                         NaN             35584.000   \n10        2018-09-26                         NaN              4000.000   \n11        2018-12-14                         NaN            100000.000   \n12        2017-05-04                         NaN             21320.000   \n13        2018-08-27                         NaN             63380.000   \n14        2018-09-21                         NaN             61998.000   \n15        2018-10-13                         NaN            100000.000   \n16        2019-01-18                         NaN             14000.000   \n17        2019-01-21                         NaN             10000.000   \n18        2018-12-14                         NaN             10000.000   \n19        2018-09-27                         NaN             29196.000   \n\n    credacc_maxhisbal_375A  credacc_minhisbal_90A credacc_status_367L  \\\n0                      NaN                    NaN                None   \n1                      NaN                    NaN                None   \n2                      NaN                    NaN                None   \n3                      NaN                    NaN                None   \n4                      NaN                    NaN                None   \n5                      NaN                    NaN                None   \n6                      NaN                    NaN                None   \n7                      NaN                    NaN                None   \n8                      NaN                    NaN                None   \n9                      NaN                    NaN                None   \n10                     NaN                    NaN                None   \n11                     NaN                    NaN                None   \n12                     NaN                    NaN                None   \n13                     NaN                    NaN                None   \n14                     NaN                    NaN                None   \n15                     NaN                    NaN                None   \n16                     NaN                    NaN                None   \n17                     NaN                    NaN                None   \n18                     NaN                    NaN                None   \n19                     NaN                    NaN                None   \n\n    credacc_transactions_402L  credamount_590A credtype_587L  currdebt_94A  \\\n0                         NaN       100000.000           REL           NaN   \n1                         NaN       100000.000           REL           NaN   \n2                         NaN        10000.000           REL           NaN   \n3                         NaN        39900.000           REL           NaN   \n4                         NaN         5898.000           REL           NaN   \n5                         NaN        10000.000           REL           NaN   \n6                         NaN        14000.000           REL           NaN   \n7                         NaN        20000.000           REL           NaN   \n8                         NaN        17180.000           REL           NaN   \n9                         NaN        35584.000           REL         0.000   \n10                        NaN         4000.000           REL           NaN   \n11                        NaN       100000.000           REL           NaN   \n12                        NaN        21320.000           REL           NaN   \n13                        NaN        63380.000           REL           NaN   \n14                        NaN        61998.000           REL           NaN   \n15                        NaN       100000.000           REL           NaN   \n16                        NaN        14000.000           REL           NaN   \n17                        NaN        10000.000           REL           NaN   \n18                        NaN        10000.000           REL           NaN   \n19                        NaN        29196.000           REL           NaN   \n\n   dateactivated_425D district_544M  downpmt_134A dtlastpmt_581D  \\\n0                None   P200_90_176         0.000           None   \n1                None     P16_86_94         0.000           None   \n2                None   P173_115_85         0.000           None   \n3                None     P65_90_92         0.000           None   \n4                None    P147_6_101         0.000           None   \n5                None    P147_6_101         0.000           None   \n6                None    P147_6_101         0.000           None   \n7                None    P147_6_101         0.000           None   \n8                None   P204_99_158         0.000           None   \n9                None  P159_143_123         0.000           None   \n10               None  P114_147_118         0.000           None   \n11               None    P19_11_176         0.000           None   \n12               None   P123_39_170         0.000           None   \n13               None  P181_116_184         0.000           None   \n14               None    P19_11_176         0.000           None   \n15               None     P42_7_135         0.000           None   \n16               None   P103_91_133         0.000           None   \n17               None  P111_135_181         0.000           None   \n18               None   P197_47_166         0.000           None   \n19               None   P208_54_113         0.000           None   \n\n   dtlastpmtallstes_3545839D education_1138M employedfrom_700D  \\\n0                       None        a55475b1              None   \n1                       None        a55475b1              None   \n2                       None      P97_36_170        2011-09-15   \n3                       None        a55475b1              None   \n4                       None        a55475b1              None   \n5                       None        a55475b1              None   \n6                       None        a55475b1              None   \n7                       None        a55475b1              None   \n8                       None        a55475b1              None   \n9                       None      P97_36_170        2004-06-15   \n10                      None      P97_36_170        2017-01-15   \n11                      None        a55475b1              None   \n12                      None        a55475b1              None   \n13                      None        a55475b1              None   \n14                      None        a55475b1              None   \n15                      None      P97_36_170        2018-04-15   \n16                      None     P33_146_175        1997-09-15   \n17                      None      P97_36_170        2017-09-15   \n18                      None        a55475b1              None   \n19                      None        a55475b1              None   \n\n   familystate_726L firstnonzeroinstldate_307D inittransactioncode_279L  \\\n0              None                       None                      NDF   \n1              None                       None                      NDF   \n2           MARRIED                       None                      NDF   \n3              None                       None                      POS   \n4              None                       None                      POS   \n5              None                       None                      NDF   \n6              None                       None                      NDF   \n7              None                       None                      NDF   \n8              None                       None                      POS   \n9           MARRIED                       None                      POS   \n10          MARRIED                       None                      NDF   \n11             None                       None                      NDF   \n12             None                       None                      NDF   \n13             None                       None                      POS   \n14             None                       None                      POS   \n15         DIVORCED                       None                      NDF   \n16          MARRIED                       None                      NDF   \n17           SINGLE                       None                      NDF   \n18             None                       None                      NDF   \n19             None                       None                      POS   \n\n    isbidproduct_390L  isdebitcard_527L  mainoccupationinc_437A  \\\n0               False             False               34000.000   \n1               False             False               48000.000   \n2               False             False               30000.000   \n3               False             False               36000.000   \n4               False             False               50000.000   \n5               False             False               60000.000   \n6               False             False               60000.000   \n7               False             False               60000.000   \n8               False             False               60000.000   \n9               False             False               28800.000   \n10              False             False              120000.000   \n11              False             False               48000.000   \n12              False             False               33000.000   \n13              False             False               56000.000   \n14              False             False               60000.000   \n15              False             False               80000.000   \n16              False             False               70000.000   \n17              False             False               78000.000   \n18              False             False               36000.000   \n19              False             False               50000.000   \n\n    maxdpdtolerance_577P  num_group1  outstandingdebt_522A  pmtnum_8L  \\\n0                    NaN           0                   NaN        NaN   \n1                    NaN           0                   NaN        NaN   \n2                    NaN           2                   NaN        NaN   \n3                    NaN           0                   NaN        NaN   \n4                    NaN           0                   NaN     18.000   \n5                    NaN           1                   NaN        NaN   \n6                    NaN           2                   NaN        NaN   \n7                    NaN           3                   NaN        NaN   \n8                    NaN           0                   NaN     18.000   \n9                  0.000           4                 0.000        NaN   \n10                   NaN           1                   NaN        NaN   \n11                   NaN           0                   NaN        NaN   \n12                   NaN           1                   NaN        NaN   \n13                   NaN           2                   NaN     18.000   \n14                   NaN           0                   NaN     24.000   \n15                   NaN           1                   NaN        NaN   \n16                   NaN           0                   NaN        NaN   \n17                   NaN           0                   NaN        NaN   \n18                   NaN           0                   NaN        NaN   \n19                   NaN           2                   NaN     24.000   \n\n   postype_4733339M profession_152M rejectreason_755M  \\\n0          a55475b1        a55475b1       P94_109_143   \n1          a55475b1        a55475b1          a55475b1   \n2          a55475b1        a55475b1       P94_109_143   \n3          a55475b1        a55475b1          a55475b1   \n4          a55475b1        a55475b1       P94_109_143   \n5          a55475b1        a55475b1       P94_109_143   \n6          a55475b1        a55475b1       P94_109_143   \n7          a55475b1        a55475b1       P94_109_143   \n8          a55475b1        a55475b1       P94_109_143   \n9          a55475b1        a55475b1          a55475b1   \n10         a55475b1        a55475b1       P94_109_143   \n11         a55475b1        a55475b1       P94_109_143   \n12         a55475b1        a55475b1       P94_109_143   \n13         a55475b1        a55475b1       P94_109_143   \n14         a55475b1        a55475b1       P94_109_143   \n15         a55475b1        a55475b1       P94_109_143   \n16         a55475b1        a55475b1       P94_109_143   \n17         a55475b1        a55475b1          a55475b1   \n18         a55475b1        a55475b1       P94_109_143   \n19         a55475b1        a55475b1       P94_109_143   \n\n   rejectreasonclient_4145042M  revolvingaccount_394A status_219L  tenor_203L  \n0                     a55475b1                    NaN           D         NaN  \n1                     a55475b1                    NaN           T         NaN  \n2                     a55475b1                    NaN           D         NaN  \n3                     a55475b1                    NaN           T         NaN  \n4                     a55475b1                    NaN           D      18.000  \n5                     a55475b1                    NaN           D         NaN  \n6                     a55475b1                    NaN           D         NaN  \n7                     a55475b1                    NaN           D         NaN  \n8                     a55475b1                    NaN           D      18.000  \n9                     a55475b1                    NaN           D         NaN  \n10                    a55475b1                    NaN           D         NaN  \n11                    a55475b1                    NaN           D         NaN  \n12                    a55475b1                    NaN           D         NaN  \n13                    a55475b1                    NaN           D      18.000  \n14                    a55475b1                    NaN           D      24.000  \n15                    a55475b1                    NaN           D         NaN  \n16                    a55475b1                    NaN           D         NaN  \n17                    a55475b1                    NaN           T         NaN  \n18                    a55475b1                    NaN           D         NaN  \n19                    a55475b1                    NaN           D      24.000  ","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>actualdpd_943P</th>\n      <th>annuity_853A</th>\n      <th>approvaldate_319D</th>\n      <th>byoccupationinc_3656910L</th>\n      <th>cancelreason_3545846M</th>\n      <th>childnum_21L</th>\n      <th>creationdate_885D</th>\n      <th>credacc_actualbalance_314A</th>\n      <th>credacc_credlmt_575A</th>\n      <th>credacc_maxhisbal_375A</th>\n      <th>credacc_minhisbal_90A</th>\n      <th>credacc_status_367L</th>\n      <th>credacc_transactions_402L</th>\n      <th>credamount_590A</th>\n      <th>credtype_587L</th>\n      <th>currdebt_94A</th>\n      <th>dateactivated_425D</th>\n      <th>district_544M</th>\n      <th>downpmt_134A</th>\n      <th>dtlastpmt_581D</th>\n      <th>dtlastpmtallstes_3545839D</th>\n      <th>education_1138M</th>\n      <th>employedfrom_700D</th>\n      <th>familystate_726L</th>\n      <th>firstnonzeroinstldate_307D</th>\n      <th>inittransactioncode_279L</th>\n      <th>isbidproduct_390L</th>\n      <th>isdebitcard_527L</th>\n      <th>mainoccupationinc_437A</th>\n      <th>maxdpdtolerance_577P</th>\n      <th>num_group1</th>\n      <th>outstandingdebt_522A</th>\n      <th>pmtnum_8L</th>\n      <th>postype_4733339M</th>\n      <th>profession_152M</th>\n      <th>rejectreason_755M</th>\n      <th>rejectreasonclient_4145042M</th>\n      <th>revolvingaccount_394A</th>\n      <th>status_219L</th>\n      <th>tenor_203L</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>45</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-08-15</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P200_90_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>34000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>93</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P24_27_36</td>\n      <td>NaN</td>\n      <td>2018-11-21</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P16_86_94</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>48000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>102</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>2.000</td>\n      <td>2017-10-25</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P173_115_85</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2011-09-15</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>30000.000</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>119</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P85_114_140</td>\n      <td>NaN</td>\n      <td>2019-01-04</td>\n      <td>NaN</td>\n      <td>39900.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>39900.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P65_90_92</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>36000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>126</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-12-01</td>\n      <td>NaN</td>\n      <td>5898.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>5898.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P147_6_101</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>50000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>18.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>18.000</td>\n    </tr>\n    <tr>\n      <th>5</th>\n      <td>126</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-11-21</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P147_6_101</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>126</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-10-26</td>\n      <td>NaN</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>14000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P147_6_101</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>7</th>\n      <td>126</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-10-25</td>\n      <td>NaN</td>\n      <td>20000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>20000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P147_6_101</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>3</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>128</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-12-01</td>\n      <td>NaN</td>\n      <td>17180.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>17180.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P204_99_158</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>18.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>18.000</td>\n    </tr>\n    <tr>\n      <th>9</th>\n      <td>135</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>1.000</td>\n      <td>a55475b1</td>\n      <td>0.000</td>\n      <td>2015-02-10</td>\n      <td>NaN</td>\n      <td>35584.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>35584.000</td>\n      <td>REL</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>P159_143_123</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2004-06-15</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>28800.000</td>\n      <td>0.000</td>\n      <td>4</td>\n      <td>0.000</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>10</th>\n      <td>144</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-09-26</td>\n      <td>NaN</td>\n      <td>4000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>4000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P114_147_118</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2017-01-15</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>120000.000</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>238</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-12-14</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P19_11_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>48000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>12</th>\n      <td>276</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2017-05-04</td>\n      <td>NaN</td>\n      <td>21320.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>21320.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P123_39_170</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>33000.000</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>294</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-08-27</td>\n      <td>NaN</td>\n      <td>63380.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>63380.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P181_116_184</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>56000.000</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>18.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>18.000</td>\n    </tr>\n    <tr>\n      <th>14</th>\n      <td>320</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-09-21</td>\n      <td>NaN</td>\n      <td>61998.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>61998.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P19_11_176</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>60000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n    </tr>\n    <tr>\n      <th>15</th>\n      <td>321</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-10-13</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>100000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P42_7_135</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2018-04-15</td>\n      <td>DIVORCED</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>80000.000</td>\n      <td>NaN</td>\n      <td>1</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>339</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2019-01-18</td>\n      <td>NaN</td>\n      <td>14000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>14000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P103_91_133</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P33_146_175</td>\n      <td>1997-09-15</td>\n      <td>MARRIED</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>70000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>17</th>\n      <td>387</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P46_50_166</td>\n      <td>NaN</td>\n      <td>2019-01-21</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P111_135_181</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>P97_36_170</td>\n      <td>2017-09-15</td>\n      <td>SINGLE</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>78000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>T</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>402</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-12-14</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>10000.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P197_47_166</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>NDF</td>\n      <td>False</td>\n      <td>False</td>\n      <td>36000.000</td>\n      <td>NaN</td>\n      <td>0</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>NaN</td>\n    </tr>\n    <tr>\n      <th>19</th>\n      <td>505</td>\n      <td>0.000</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>P94_109_143</td>\n      <td>NaN</td>\n      <td>2018-09-27</td>\n      <td>NaN</td>\n      <td>29196.000</td>\n      <td>NaN</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>NaN</td>\n      <td>29196.000</td>\n      <td>REL</td>\n      <td>NaN</td>\n      <td>None</td>\n      <td>P208_54_113</td>\n      <td>0.000</td>\n      <td>None</td>\n      <td>None</td>\n      <td>a55475b1</td>\n      <td>None</td>\n      <td>None</td>\n      <td>None</td>\n      <td>POS</td>\n      <td>False</td>\n      <td>False</td>\n      <td>50000.000</td>\n      <td>NaN</td>\n      <td>2</td>\n      <td>NaN</td>\n      <td>24.000</td>\n      <td>a55475b1</td>\n      <td>a55475b1</td>\n      <td>P94_109_143</td>\n      <td>a55475b1</td>\n      <td>NaN</td>\n      <td>D</td>\n      <td>24.000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"},"metadata":{}}],"execution_count":100},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Các feature sẽ tạo\n\n- num_past_applications:\n1. Lịch sử trả nợ và rủi ro tín dụng:\nactualdpd_943P\n   - max_actualdpd_943P: filter với \n   - min_actualdpd_943P:\n   - avg_actualdpd_943P\n   - std_actualdpd_943P:\n   - sum_actualdpd_943P\n   **- num_app_above_30_actualdpd_943P:**\n\nannuity_853A\n- max_annuity_853A\n- min_annuity_853A\n- avg_annuity_853A\n- std_annuity_853A\n- sum_annuity_853A\n  \napprovaldate_319D\n- first_approvaldate_319D\n- last_approvaldate_319D\n- duration_approvaldate_319D\n\napprovaldate_319D\n- first_approvaldate_319D\n- last_approvaldate_319D\n- duration_approvaldate_319D\n\nbyoccupationinc_3656910L\n- max_byoccupationinc_3656910L\n- min_byoccupationinc_3656910L\n- avg_byoccupationinc_3656910L\n- std_byoccupationinc_3656910L\n- last_byoccupationinc_3656910L\n\ncancelreason_3545846M\n- mode_cancelreason_3545846M\n- last_cancelreason_3545846M\n- nunique_cancelreason_3545846M\n\n- rate_num_cancel (count số lần hủy/ tổng số lần)\n\nchildnum_21L\n- last_childnum_21L\n\ncreationdate_885D        \n- first_creationdate_885D\n- last_creationdate_885D\n- duration_creationdate_885D\n\ncredacc_actualbalance_314A\n- max_credacc_actualbalance_314A\n- min_credacc_actualbalance_314A\n- avg_credacc_actualbalance_314A\n- std_credacc_actualbalance_314A\n\ncredacc_credlmt_575A\n- max_credacc_credlmt_575A\n- min_credacc_credlmt_575A\n- avg_credacc_credlmt_575A\n- std_credacc_credlmt_575A\n- avg_credit_utilization (thực hiện tính 1 cột là credit_utilization = credacc_actualbalance_314A/credacc_credlmt_575A trước khi avg)\n\n\n\n","metadata":{}},{"cell_type":"code","source":"print('---------------------------------------------------------------------------------------------------------------------------')\nprint('✅APPLICATION PREVIOUS PROCESS')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-24T09:09:06.784498Z","iopub.execute_input":"2025-06-24T09:09:06.78923Z","iopub.status.idle":"2025-06-24T09:09:06.896915Z","shell.execute_reply.started":"2025-06-24T09:09:06.789113Z","shell.execute_reply":"2025-06-24T09:09:06.895442Z"}},"outputs":[{"name":"stdout","text":"---------------------------------------------------------------------------------------------------------------------------\n✅APPLICATION PREVIOUS PROCESS\n","output_type":"stream"}],"execution_count":24},{"cell_type":"code","source":"from datetime import datetime\nimport numpy as np\nimport polars as pl\n\nprint(\"We working with a hierarchical classification dataset, which has three levels of depth: depth 0, depth 1, and depth 2.\")\nprint(\"Depth 0: Features at the same level of dimension as the training data — they can be directly joined for model training.\")\nprint(\"Depth 1: Features that need to be aggregated to depth 0 before training.\")\nprint(\"Depth 2: Features that must be aggregated to depth 1 first, and then to depth 0.\")\n\n#0. Base\nprint('✅Loading Train Base....')\ntrain_base = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet\")\nprint(f'We have {train_base.shape[0]} case_id in train base')\n\n#------------------------------------------------APPLICATION PREVIOUS FEATURE--------------------------------------------------------\nprint('------------------------✅APPLICATION PREVIOUS PROCESS-------------------------------------------------')\n#---1.1. Application Previous depth 2\ntrain_applprev_2 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_2*.parquet')\nprint(f'✅Loading Depth 2 Application Features.....with the shape is {train_applprev_2.shape}')\ntrain_applprev_2 = train_applprev_2.fill_null('Missing Value')\ncat_cols = [\"cacccardblochreas_147M\", \"conts_type_509L\", \"credacc_cards_status_52L\"]\nagg_exprs = []\nfor colname in cat_cols:\n    prefix = colname\n    # nunique và mode\n    agg_exprs.append(pl.col(colname).n_unique().alias(f\"{prefix}_nunique\"))\n    agg_exprs.append(pl.col(colname).mode().first().alias(f\"{prefix}_mode\"))\n    # count từng giá trị unique\n    agg_exprs.extend([\n        pl.col(colname).map_elements(lambda x: 1, return_dtype=pl.Int32).alias(f\"{colname}_{val}_count\")\n        for val in train_applprev_2.select(colname).unique().drop_nulls().to_series().to_list()\n    ])\nagg_exprs.append(pl.col(\"num_group2\").count().alias(\"num_group2_count\"))\n# Group by case_id và num_group1\ntrain_applprev_2_feature = train_applprev_2.group_by([\"case_id\", \"num_group1\"]).agg(agg_exprs)\nprint(f'✅Success Loading and Calculating Depth 2 Application Features.....with the shape is {train_applprev_2_feature.shape}')\n# train_applprev_2_feature.write_csv('train_applprev_2_feature.csv')\ndel agg_exprs,train_applprev_2,cat_cols\n#---1.2. Application Previous depth 1\ndf_train_applprev_1 = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_*.parquet\")\nprint(f'✅Loading Depth 1 Application Features.....with the shape is {df_train_applprev_1.shape}')\ndf_train_applprev_1 = df_train_applprev_1.with_columns(\n    pl.when(pl.col('approvaldate_319D').is_not_null())\n      .then(pl.lit('Approval'))\n      .otherwise(pl.lit('Not Approval'))\n      .alias('is_approval')\n)\nfull_train_applprev = df_train_applprev_1.join(\n    train_applprev_2_feature, on=['case_id','num_group1'], how='left'\n).join(\n    train_base[['case_id','date_decision']], on ='case_id', how = 'left'\n)\n\n# Tạo thêm cột mới - FIX: Tránh chia cho 0\nfull_train_applprev = full_train_applprev.with_columns(\n    pl.when(col(\"credamount_590A\") != 0)\n      .then(col(\"downpmt_134A\") * 100 / col(\"credamount_590A\"))\n      .otherwise(None)\n      .alias(\"rate_downpmt_and_credamount\")\n)\n# Định nghĩa cột chỉ định trạng thái phê duyệt\napproved = col(\"approvaldate_319D\").is_not_null()\n# Chọn chỉ các cột cần thiết để tiết kiệm bộ nhớ\nselected_columns = [\n    \"case_id\", \"approvaldate_319D\", \"creationdate_885D\", \"actualdpd_943P\",\n    \"annuity_853A\", \"byoccupationinc_3656910L\", \"cancelreason_3545846M\",\n    \"childnum_21L\", \"credacc_credlmt_575A\", \"credamount_590A\",'credtype_587L', \"currdebt_94A\",\n    \"dateactivated_425D\", \"downpmt_134A\", \"dtlastpmt_581D\",'district_544M',\n    \"dtlastpmtallstes_3545839D\", \"education_1138M\", \"employedfrom_700D\",\n    \"familystate_726L\", \"firstnonzeroinstldate_307D\", \"inittransactioncode_279L\",\n    \"isbidproduct_390L\", \"mainoccupationinc_437A\", \"maxdpdtolerance_577P\",\n    \"outstandingdebt_522A\", \"pmtnum_8L\", \"postype_4733339M\", \"profession_152M\",\n    \"rejectreason_755M\", \"rejectreasonclient_4145042M\", \"revolvingaccount_394A\",\n    \"status_219L\", \"tenor_203L\", \"cacccardblochreas_147M_mode\",\n    \"credacc_cards_status_52L_mode\", 'rate_downpmt_and_credamount'\n]\n# Chuyển đổi các cột date sang datetime trước khi thực hiện các phép tính\ndf = full_train_applprev.select(selected_columns).with_columns([\n    # Chuyển đổi các cột date thành datetime\n    col(\"approvaldate_319D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"creationdate_885D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dateactivated_425D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dtlastpmt_581D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"dtlastpmtallstes_3545839D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"employedfrom_700D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n    col(\"firstnonzeroinstldate_307D\").str.to_datetime(format=\"%Y-%m-%d\", strict=False),\n]).sort(by=[\"case_id\", \"creationdate_885D\"])\n# Tính toán tất cả các feature trong một lần group_by duy nhất\nfeatures = df.group_by(\"case_id\").agg([\n    # Đếm đơn duyệt và đơn apply\n    pl.count().alias(\"num_applications\"),\n    approved.sum().alias(\"num_approved\"), \n    # Tỉ lệ đơn được duyệt - FIX: Tránh chia cho 0\n    pl.when(pl.count() > 0)\n      .then(approved.sum() / pl.count())\n      .otherwise(None)\n      .alias(\"rate_approval_application\"),    \n    # actualdpd_943P - chỉ đơn được duyệt\n    col(\"actualdpd_943P\").filter(approved).max().alias(\"actualdpd_943P_approved_max\"),\n    col(\"actualdpd_943P\").filter(approved).mean().alias(\"actualdpd_943P_approved_avg\"),\n    col(\"actualdpd_943P\").filter(approved).min().alias(\"actualdpd_943P_approved_min\"),\n    col(\"actualdpd_943P\").filter(approved).std().alias(\"actualdpd_943P_approved_std\"),\n    col(\"actualdpd_943P\").filter(approved).last().alias(\"actualdpd_943P_approved_last\"),\n    # annuity_853A - cho cả 2 loại đơn\n    col(\"annuity_853A\").filter(approved).max().alias(\"annuity_853A_approved_max\"),\n    col(\"annuity_853A\").filter(approved).mean().alias(\"annuity_853A_approved_avg\"),\n    col(\"annuity_853A\").filter(approved).min().alias(\"annuity_853A_approved_min\"),\n    col(\"annuity_853A\").filter(approved).std().alias(\"annuity_853A_approved_std\"),\n    col(\"annuity_853A\").filter(approved).last().alias(\"annuity_853A_approved_last\"),\n    col(\"annuity_853A\").filter(~approved).max().alias(\"annuity_853A_rejected_max\"),\n    col(\"annuity_853A\").filter(~approved).mean().alias(\"annuity_853A_rejected_avg\"),\n    col(\"annuity_853A\").filter(~approved).min().alias(\"annuity_853A_rejected_min\"),\n    col(\"annuity_853A\").filter(~approved).std().alias(\"annuity_853A_rejected_std\"),\n    col(\"annuity_853A\").filter(~approved).last().alias(\"annuity_853A_rejected_last\"),\n    col(\"annuity_853A\").last().alias(\"annuity_853A_last\"),\n    # approvaldate_319D - chỉ đơn được duyệt\n    col(\"approvaldate_319D\").filter(approved).last().alias(\"approvaldate_319D_last\"),\n    (col(\"approvaldate_319D\").filter(approved).max() - col(\"approvaldate_319D\").filter(approved).min()).dt.total_days().alias(\"approvaldate_319D_duration\"),\n    # FIX: Sửa logic chia cho approved.sum() - 1\n    pl.when(approved.sum() > 1)\n      .then((col(\"approvaldate_319D\").filter(approved).max() - col(\"approvaldate_319D\").filter(approved).min()).dt.total_days() / (approved.sum() - 1))\n      .otherwise(0)\n      .alias(\"approvaldate_319D_interval\"),\n    # byoccupationinc_3656910L - toàn bộ đơn\n    col(\"byoccupationinc_3656910L\").max().alias(\"byoccupationinc_3656910L_max\"),\n    col(\"byoccupationinc_3656910L\").mean().alias(\"byoccupationinc_3656910L_avg\"),\n    col(\"byoccupationinc_3656910L\").min().alias(\"byoccupationinc_3656910L_min\"),\n    col(\"byoccupationinc_3656910L\").std().alias(\"byoccupationinc_3656910L_std\"),\n    col(\"byoccupationinc_3656910L\").last().alias(\"byoccupationinc_3656910L_last\"),\n    # cancelreason_3545846M\n    col(\"cancelreason_3545846M\").filter(approved).mode().first().alias(\"cancelreason_3545846M_approved_mode\"),\n    col(\"cancelreason_3545846M\").filter(~approved).mode().first().alias(\"cancelreason_3545846M_rejected_mode\"),\n    col(\"cancelreason_3545846M\").mode().first().alias(\"cancelreason_3545846M_overall_mode\"),\n    col(\"cancelreason_3545846M\").last().alias(\"cancelreason_3545846M_last\"),\n    # childnum_21L\n    col(\"childnum_21L\").filter(approved).mean().alias(\"childnum_21L_approved_avg\"),\n    col(\"childnum_21L\").filter(~approved).mean().alias(\"childnum_21L_rejected_avg\"),\n    col(\"childnum_21L\").last().alias(\"childnum_21L_last\"),\n    # creationdate_885D\n    col(\"creationdate_885D\").last().alias(\"creationdate_885D_last\"),\n    (col(\"creationdate_885D\").max() - col(\"creationdate_885D\").min()).dt.total_days().alias(\"creationdate_885D_duration_all\"),\n    # FIX: Sửa logic chia\n    pl.when(approved.sum() > 1)\n      .then((col(\"creationdate_885D\").filter(approved).max() - col(\"creationdate_885D\").filter(approved).min()).dt.total_days() / (approved.sum() - 1))\n      .otherwise(0)\n      .alias(\"creationdate_885D_interval_approved\"),\n    pl.when((~approved).sum() > 1)\n      .then((col(\"creationdate_885D\").filter(~approved).max() - col(\"creationdate_885D\").filter(~approved).min()).dt.total_days() / ((~approved).sum() - 1))\n      .otherwise(0)\n      .alias(\"creationdate_885D_interval_rejected\"),    \n    # credacc_credlmt_575A\n    col(\"credacc_credlmt_575A\").filter(approved).max().alias(\"credacc_credlmt_575A_approved_max\"),\n    col(\"credacc_credlmt_575A\").filter(approved).mean().alias(\"credacc_credlmt_575A_approved_avg\"),\n    col(\"credacc_credlmt_575A\").filter(approved).min().alias(\"credacc_credlmt_575A_approved_min\"),\n    col(\"credacc_credlmt_575A\").filter(approved).std().alias(\"credacc_credlmt_575A_approved_std\"),\n    col(\"credacc_credlmt_575A\").filter(approved).last().alias(\"credacc_credlmt_575A_approved_last\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).max().alias(\"credacc_credlmt_575A_rejected_max\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).mean().alias(\"credacc_credlmt_575A_rejected_avg\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).min().alias(\"credacc_credlmt_575A_rejected_min\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).std().alias(\"credacc_credlmt_575A_rejected_std\"),\n    col(\"credacc_credlmt_575A\").filter(~approved).last().alias(\"credacc_credlmt_575A_rejected_last\"),\n    col(\"credacc_credlmt_575A\").last().alias(\"credacc_credlmt_575A_last\"), \n    # credamount_590A\n    col(\"credamount_590A\").filter(approved).max().alias(\"credamount_590A_approved_max\"),\n    col(\"credamount_590A\").filter(approved).mean().alias(\"credamount_590A_approved_avg\"),\n    col(\"credamount_590A\").filter(approved).min().alias(\"credamount_590A_approved_min\"),\n    col(\"credamount_590A\").filter(approved).std().alias(\"credamount_590A_approved_std\"),\n    col(\"credamount_590A\").filter(approved).last().alias(\"credamount_590A_approved_last\"),\n    col(\"credamount_590A\").filter(~approved).max().alias(\"credamount_590A_rejected_max\"),\n    col(\"credamount_590A\").filter(~approved).mean().alias(\"credamount_590A_rejected_avg\"),\n    col(\"credamount_590A\").filter(~approved).min().alias(\"credamount_590A_rejected_min\"),\n    col(\"credamount_590A\").filter(~approved).std().alias(\"credamount_590A_rejected_std\"),\n    col(\"credamount_590A\").filter(~approved).last().alias(\"credamount_590A_rejected_last\"),\n    col(\"credamount_590A\").last().alias(\"credamount_590A_last\"),\n    # credtype_587L\n    col(\"credtype_587L\").mode().first().alias(\"credtype_587L_mode\"),\n    col(\"credtype_587L\").last().alias(\"credtype_587L_last\"),\n    # currdebt_94A\n    col(\"currdebt_94A\").filter(approved).max().alias(\"currdebt_94A_approved_max\"),\n    col(\"currdebt_94A\").filter(approved).mean().alias(\"currdebt_94A_approved_avg\"),\n    col(\"currdebt_94A\").filter(approved).min().alias(\"currdebt_94A_approved_min\"),\n    col(\"currdebt_94A\").filter(approved).std().alias(\"currdebt_94A_approved_std\"),\n    col(\"currdebt_94A\").filter(approved).last().alias(\"currdebt_94A_approved_last\"),\n    col(\"currdebt_94A\").filter(~approved).max().alias(\"currdebt_94A_rejected_max\"),\n    col(\"currdebt_94A\").filter(~approved).mean().alias(\"currdebt_94A_rejected_avg\"),\n    col(\"currdebt_94A\").filter(~approved).min().alias(\"currdebt_94A_rejected_min\"),\n    col(\"currdebt_94A\").filter(~approved).std().alias(\"currdebt_94A_rejected_std\"),\n    col(\"currdebt_94A\").filter(~approved).last().alias(\"currdebt_94A_rejected_last\"),\n    col(\"currdebt_94A\").last().alias(\"currdebt_94A_last\"),\n    # district_544M\n    col(\"district_544M\").mode().first().alias(\"district_544M_mode\"),\n    col(\"district_544M\").last().alias(\"district_544M_last\"),\n    # downpmt_134A\n    col(\"downpmt_134A\").filter(approved).max().alias(\"downpmt_134A_approved_max\"),\n    col(\"downpmt_134A\").filter(approved).mean().alias(\"downpmt_134A_approved_avg\"),\n    col(\"downpmt_134A\").filter(approved).min().alias(\"downpmt_134A_approved_min\"),\n    col(\"downpmt_134A\").filter(approved).std().alias(\"downpmt_134A_approved_std\"),\n    col(\"downpmt_134A\").filter(approved).last().alias(\"downpmt_134A_approved_last\"),\n    col(\"downpmt_134A\").filter(~approved).max().alias(\"downpmt_134A_rejected_max\"),\n    col(\"downpmt_134A\").filter(~approved).mean().alias(\"downpmt_134A_rejected_avg\"),\n    col(\"downpmt_134A\").filter(~approved).min().alias(\"downpmt_134A_rejected_min\"),\n    col(\"downpmt_134A\").filter(~approved).std().alias(\"downpmt_134A_rejected_std\"),\n    col(\"downpmt_134A\").filter(~approved).last().alias(\"downpmt_134A_rejected_last\"),\n    col(\"downpmt_134A\").last().alias(\"downpmt_134A_last\"),\n    # rate_downpmt_and_credamount\n    col(\"rate_downpmt_and_credamount\").filter(approved).max().alias(\"rate_downpmt_and_credamount_approved_max\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).mean().alias(\"rate_downpmt_and_credamount_approved_avg\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).min().alias(\"rate_downpmt_and_credamount_approved_min\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).std().alias(\"rate_downpmt_and_credamount_approved_std\"),\n    col(\"rate_downpmt_and_credamount\").filter(approved).last().alias(\"rate_downpmt_and_credamount_approved_last\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).max().alias(\"rate_downpmt_and_credamount_rejected_max\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).mean().alias(\"rate_downpmt_and_credamount_rejected_avg\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).min().alias(\"rate_downpmt_and_credamount_rejected_min\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).std().alias(\"rate_downpmt_and_credamount_rejected_std\"),\n    col(\"rate_downpmt_and_credamount\").filter(~approved).last().alias(\"rate_downpmt_and_credamount_rejected_last\"),\n    col(\"rate_downpmt_and_credamount\").last().alias(\"rate_downpmt_and_credamount_last\"),\n    # education_1138M\n    col(\"education_1138M\").mode().first().alias(\"education_1138M_mode\"),\n    col(\"education_1138M\").last().alias(\"education_1138M_last\"),\n    # employedfrom_700D - FIX: Thêm null check\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .last().alias(\"employedfrom_creationdate_last\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).mean().alias(\"employedfrom_creationdate_approved_avg\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).max().alias(\"employedfrom_creationdate_approved_max\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).min().alias(\"employedfrom_creationdate_approved_min\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).std().alias(\"employedfrom_creationdate_approved_std\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).last().alias(\"employedfrom_creationdate_approved_last\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).mean().alias(\"employedfrom_creationdate_rejected_avg\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).max().alias(\"employedfrom_creationdate_rejected_max\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).min().alias(\"employedfrom_creationdate_rejected_min\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).std().alias(\"employedfrom_creationdate_rejected_std\"),\n    pl.when(col(\"employedfrom_700D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"employedfrom_700D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).last().alias(\"employedfrom_creationdate_rejected_last\"),\n    # familystate_726L\n    col(\"familystate_726L\").mode().first().alias(\"familystate_726L_mode\"),\n    col(\"familystate_726L\").last().alias(\"familystate_726L_last\"),\n    # firstnonzeroinstldate_307D - FIX: Thêm null check\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .last().alias(\"diff_firstnonzeroinstldate_creationdate_approved_last\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).mean().alias(\"diff_firstnonzeroinstldate_creationdate_approved_avg\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).max().alias(\"diff_firstnonzeroinstldate_creationdate_approved_max\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).min().alias(\"diff_firstnonzeroinstldate_creationdate_approved_min\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(approved).std().alias(\"diff_firstnonzeroinstldate_creationdate_approved_std\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).mean().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_avg\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).max().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_max\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).min().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_min\"),\n    pl.when(col(\"firstnonzeroinstldate_307D\").is_not_null() & col(\"creationdate_885D\").is_not_null())\n      .then((col(\"creationdate_885D\") - col(\"firstnonzeroinstldate_307D\")).dt.total_days().abs())\n      .otherwise(None)\n      .filter(~approved).std().alias(\"diff_firstnonzeroinstldate_creationdate_rejected_std\"),\n    # inittransactioncode_279L\n    col(\"inittransactioncode_279L\").mode().first().alias(\"inittransactioncode_279L_mode\"),\n    col(\"inittransactioncode_279L\").last().alias(\"inittransactioncode_279L_last\"),\n    # isbidproduct_390L\n    col(\"isbidproduct_390L\").filter(approved).sum().alias(\"isbidproduct_390L_approved_count\"),\n    col(\"isbidproduct_390L\").filter(approved).last().alias(\"isbidproduct_390L_approved_last\"),\n    col(\"isbidproduct_390L\").filter(~approved).sum().alias(\"isbidproduct_390L_rejected_count\"),\n    col(\"isbidproduct_390L\").filter(~approved).last().alias(\"isbidproduct_390L_rejected_last\"),\n    # mainoccupationinc_437A\n    col(\"mainoccupationinc_437A\").filter(approved).max().alias(\"mainoccupationinc_437A_approved_max\"),\n    col(\"mainoccupationinc_437A\").filter(approved).mean().alias(\"mainoccupationinc_437A_approved_avg\"),\n    col(\"mainoccupationinc_437A\").filter(approved).min().alias(\"mainoccupationinc_437A_approved_min\"),\n    col(\"mainoccupationinc_437A\").filter(approved).std().alias(\"mainoccupationinc_437A_approved_std\"),\n    col(\"mainoccupationinc_437A\").filter(approved).last().alias(\"mainoccupationinc_437A_approved_last\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).max().alias(\"mainoccupationinc_437A_rejected_max\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).mean().alias(\"mainoccupationinc_437A_rejected_avg\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).min().alias(\"mainoccupationinc_437A_rejected_min\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).std().alias(\"mainoccupationinc_437A_rejected_std\"),\n    col(\"mainoccupationinc_437A\").filter(~approved).last().alias(\"mainoccupationinc_437A_rejected_last\"),\n    col(\"mainoccupationinc_437A\").last().alias(\"mainoccupationinc_437A_last\"),\n    # maxdpdtolerance_577P - chỉ đơn được duyệt\n    col(\"maxdpdtolerance_577P\").filter(approved).max().alias(\"maxdpdtolerance_577P_approved_max\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).mean().alias(\"maxdpdtolerance_577P_approved_avg\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).min().alias(\"maxdpdtolerance_577P_approved_min\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).std().alias(\"maxdpdtolerance_577P_approved_std\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).sum().alias(\"maxdpdtolerance_577P_approved_sum\"),\n    col(\"maxdpdtolerance_577P\").filter(approved).last().alias(\"maxdpdtolerance_577P_approved_last\"),\n    # outstandingdebt_522A\n    col(\"outstandingdebt_522A\").filter(approved).max().alias(\"outstandingdebt_522A_approved_max\"),\n    col(\"outstandingdebt_522A\").filter(approved).mean().alias(\"outstandingdebt_522A_approved_avg\"),\n    col(\"outstandingdebt_522A\").filter(approved).min().alias(\"outstandingdebt_522A_approved_min\"),\n    col(\"outstandingdebt_522A\").filter(approved).std().alias(\"outstandingdebt_522A_approved_std\"),\n    col(\"outstandingdebt_522A\").filter(approved).last().alias(\"outstandingdebt_522A_approved_last\"),\n    col(\"outstandingdebt_522A\").filter(~approved).max().alias(\"outstandingdebt_522A_rejected_max\"),\n    col(\"outstandingdebt_522A\").filter(~approved).mean().alias(\"outstandingdebt_522A_rejected_avg\"),\n    col(\"outstandingdebt_522A\").filter(~approved).min().alias(\"outstandingdebt_522A_rejected_min\"),\n    col(\"outstandingdebt_522A\").filter(~approved).std().alias(\"outstandingdebt_522A_rejected_std\"),\n    col(\"outstandingdebt_522A\").filter(~approved).last().alias(\"outstandingdebt_522A_rejected_last\"),\n    col(\"outstandingdebt_522A\").last().alias(\"outstandingdebt_522A_last\"),\n    # pmtnum_8L\n    col(\"pmtnum_8L\").filter(approved).max().alias(\"pmtnum_8L_approved_max\"),\n    col(\"pmtnum_8L\").filter(approved).mean().alias(\"pmtnum_8L_approved_avg\"),\n    col(\"pmtnum_8L\").filter(approved).min().alias(\"pmtnum_8L_approved_min\"),\n    col(\"pmtnum_8L\").filter(approved).std().alias(\"pmtnum_8L_approved_std\"),\n    col(\"pmtnum_8L\").filter(approved).last().alias(\"pmtnum_8L_approved_last\"),\n    col(\"pmtnum_8L\").filter(~approved).max().alias(\"pmtnum_8L_rejected_max\"),\n    col(\"pmtnum_8L\").filter(~approved).mean().alias(\"pmtnum_8L_rejected_avg\"),\n    col(\"pmtnum_8L\").filter(~approved).min().alias(\"pmtnum_8L_rejected_min\"),\n    col(\"pmtnum_8L\").filter(~approved).std().alias(\"pmtnum_8L_rejected_std\"),\n    col(\"pmtnum_8L\").filter(~approved).last().alias(\"pmtnum_8L_rejected_last\"),\n    col(\"pmtnum_8L\").last().alias(\"pmtnum_8L_last\"),\n    # postype_4733339M\n    col(\"postype_4733339M\").mode().first().alias(\"postype_4733339M_mode\"),\n    col(\"postype_4733339M\").last().alias(\"postype_4733339M_last\"),\n    # profession_152M\n    col(\"profession_152M\").mode().first().alias(\"profession_152M_mode\"),\n    col(\"profession_152M\").last().alias(\"profession_152M_last\"),\n    # rejectreason_755M\n    col(\"rejectreason_755M\").filter(approved).mode().first().alias(\"rejectreason_755M_approved_mode\"),\n    col(\"rejectreason_755M\").filter(~approved).mode().first().alias(\"rejectreason_755M_rejected_mode\"),\n    col(\"rejectreason_755M\").mode().first().alias(\"rejectreason_755M_overall_mode\"),\n    col(\"rejectreason_755M\").last().alias(\"rejectreason_755M_last\"),\n    # rejectreasonclient_4145042M\n    col(\"rejectreasonclient_4145042M\").filter(approved).mode().first().alias(\"rejectreasonclient_4145042M_approved_mode\"),\n    col(\"rejectreasonclient_4145042M\").filter(~approved).mode().first().alias(\"rejectreasonclient_4145042M_rejected_mode\"),\n    col(\"rejectreasonclient_4145042M\").mode().first().alias(\"rejectreasonclient_4145042M_overall_mode\"),\n    col(\"rejectreasonclient_4145042M\").last().alias(\"rejectreasonclient_4145042M_last\"),\n    # status_219L\n    col(\"status_219L\").mode().first().alias(\"status_219L_mode\"),\n    col(\"status_219L\").last().alias(\"status_219L_last\"),\n    # tenor_203L\n    col(\"tenor_203L\").filter(approved).max().alias(\"tenor_203L_approved_max\"),\n    col(\"tenor_203L\").filter(approved).mean().alias(\"tenor_203L_approved_avg\"),\n    col(\"tenor_203L\").filter(approved).min().alias(\"tenor_203L_approved_min\"),\n    col(\"tenor_203L\").filter(approved).std().alias(\"tenor_203L_approved_std\"),\n    col(\"tenor_203L\").filter(approved).last().alias(\"tenor_203L_approved_last\"),\n    col(\"tenor_203L\").filter(~approved).max().alias(\"tenor_203L_rejected_max\"),\n    col(\"tenor_203L\").filter(~approved).mean().alias(\"tenor_203L_rejected_avg\"),\n    col(\"tenor_203L\").filter(~approved).min().alias(\"tenor_203L_rejected_min\"),\n    col(\"tenor_203L\").filter(~approved).std().alias(\"tenor_203L_rejected_std\"),\n    col(\"tenor_203L\").filter(~approved).last().alias(\"tenor_203L_rejected_last\"),\n    col(\"tenor_203L\").last().alias(\"tenor_203L_last\"),\n    # cacccardblochreas_147M\n    col(\"cacccardblochreas_147M_mode\").mode().first().alias(\"cacccardblochreas_147M_mode\"),\n    # credacc_cards_status_52L\n    col(\"credacc_cards_status_52L_mode\").mode().first().alias(\"credacc_cards_status_52L_mode\")\n])\napplication_previous_features = features.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n)\napplication_previous_features = application_previous_features.with_columns(\n    col(\"date_decision\").str.to_datetime(format=\"%Y-%m-%d\", strict=False)\n)\napplication_previous_features = application_previous_features.with_columns([\n    (col(\"date_decision\") - col(\"approvaldate_319D_last\"))\n        .dt.total_days()\n        .abs()\n        .alias(\"diff_date_decision_vs_approval_last\"),\n\n    (col(\"date_decision\") - col(\"creationdate_885D_last\"))\n        .dt.total_days()\n        .abs()\n        .alias(\"diff_date_decision_vs_creation_last\"),\n])\n\n# Drop các cột không còn cần thiết\napplication_previous_features = application_previous_features.drop([\n    \"approvaldate_319D_last\",\n    \"creationdate_885D_last\",\n    \"date_decision\"\n])\nprint(f'☑️ Application Previous Features.....with the shape is {application_previous_features.shape}')\ndel full_train_applprev,train_applprev_2_feature, features, df_train_applprev_1\n# application_previous_features.write_csv('application_previous_features.csv')\n\n#------------------------------------------------CREDIT CARD BUREAU--------------------------------------------------------\nprint('------------------------✅CREDIT CARD BUREAU-------------------------------------------------')\ndf_train_credit_bureau_a_1 = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_credit_bureau_a_1_*.parquet\")\nprint(f'✅Loading Depth 1 Credit Card Bureau.....with the shape is {df_train_credit_bureau_a_1.shape}')\ndf_train_credit_bureau_a_1  = df_train_credit_bureau_a_1.join(\n    train_base[['case_id','date_decision']],on = 'case_id', how = 'left'\n)\n# Chuyển đổi các cột sang định dạng Date\ndf_train_credit_bureau_a_1 = df_train_credit_bureau_a_1.with_columns([\n    pl.col(\"dateofcredend_289D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredstart_181D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredend_353D\").str.strptime(pl.Date),\n    pl.col(\"dateofcredstart_739D\").str.strptime(pl.Date),\n    pl.col(\"date_decision\").str.strptime(pl.Date),\n    pl.col(\"dateofrealrepmt_138D\").str.strptime(pl.Date),\n    pl.col(\"lastupdate_1112D\").str.strptime(pl.Date),\n    pl.col(\"lastupdate_388D\").str.strptime(pl.Date),\n])\n\n# Tính toán các cột chênh lệch ngày (absolute difference in days)\ndf_train_credit_bureau_a_1 = df_train_credit_bureau_a_1.with_columns([\n    (pl.col(\"dateofcredend_289D\") - pl.col(\"dateofcredstart_181D\")).dt.total_days().abs().alias(\"diff_dateofcre_and_dateof_end_active\"),\n    (pl.col(\"dateofcredend_353D\") - pl.col(\"dateofcredstart_739D\")).dt.total_days().abs().alias(\"diff_dateofcre_and_dateof_end_close\"),\n    \n    (pl.col(\"date_decision\") - pl.col(\"dateofcredend_289D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredend_289D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredend_353D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredend_353D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredstart_181D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredstart_181D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofcredstart_739D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofcredstart_739D\"),\n    (pl.col(\"date_decision\") - pl.col(\"dateofrealrepmt_138D\")).dt.total_days().abs().alias(\"diff_date_decision_dateofrealrepmt_138D\"),\n\n    (pl.col(\"date_decision\") - pl.col(\"lastupdate_1112D\")).dt.total_days().abs().alias(\"diff_date_decision_lastupdate_1112D\"),\n    (pl.col(\"date_decision\") - pl.col(\"lastupdate_388D\")).dt.total_days().abs().alias(\"diff_date_decision_lastupdate_388D\"),\n])\ndef create_base_aggregations(df):\n    \"\"\"\n    Tạo các aggregations cơ bản theo case_id dựa trên mapping đã định nghĩa\n    \"\"\"\n    \n    # Định nghĩa aggregations theo mapping\n    agg_expressions = []\n    \n    # ===== MEAN AGGREGATIONS =====\n    mean_cols = [\n        \"annualeffectiverate_199L\", \"annualeffectiverate_63L\", \"credlmt_230A\", \"credlmt_935A\",\n        \"debtoutstand_525A\", \"debtoverdue_47A\", \"dpdmax_139P\", \"dpdmax_757P\", \n        \"instlamount_768A\", \"instlamount_852A\", \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\",\n        \"nominalrate_281L\", \"nominalrate_498L\", \"numberofcontrsvalue_258L\", \"numberofcontrsvalue_358L\",\n        \"numberofinstls_229L\", \"numberofinstls_320L\", \"numberofoutstandinstls_520L\", \n        \"numberofoutstandinstls_59L\", \"numberofoverdueinstlmax_1039L\", \"numberofoverdueinstlmax_1151L\",\n        \"numberofoverdueinstls_725L\", \"numberofoverdueinstls_834L\", \"outstandingamount_354A\",\n        \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\", \"overdueamountmax2_14A\",\n        \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\",\n        \"prolongationcount_599L\", \"residualamount_488A\", \"residualamount_856A\",\n        \"totalamount_6A\", \"totalamount_996A\", \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\",\n        \"totaloutstanddebtvalue_39A\", \"totaloutstanddebtvalue_668A\",\"diff_dateofcre_and_dateof_end_active\", \"diff_dateofcre_and_dateof_end_close\",\n        \"diff_date_decision_dateofcredend_289D\", \"diff_date_decision_dateofcredend_353D\", \"diff_date_decision_dateofcredstart_181D\", \"diff_date_decision_dateofcredstart_739D\", \n        \"diff_date_decision_dateofrealrepmt_138D\", \"diff_date_decision_lastupdate_1112D\", \"diff_date_decision_lastupdate_388D\"\n    ]\n    \n    for col in mean_cols:\n        agg_expressions.append(pl.col(col).mean().alias(f\"{col}_mean\"))\n    \n    # ===== MAX AGGREGATIONS =====\n    max_cols = [\n        \"dpdmax_139P\", \"dpdmax_757P\", \"instlamount_768A\", \"instlamount_852A\",\n        \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\", \"nominalrate_281L\", \"nominalrate_498L\",\n        \"numberofcontrsvalue_258L\", \"numberofcontrsvalue_358L\", \"numberofinstls_229L\", \"numberofinstls_320L\",\n        \"numberofoutstandinstls_520L\", \"numberofoutstandinstls_59L\", \"numberofoverdueinstlmax_1039L\",\n        \"numberofoverdueinstlmax_1151L\", \"numberofoverdueinstls_725L\", \"numberofoverdueinstls_834L\",\n        \"outstandingamount_354A\", \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\",\n        \"overdueamountmax2_14A\", \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\", \"prolongationcount_599L\",\n        \"residualamount_488A\", \"residualamount_856A\", \"totalamount_6A\", \"totalamount_996A\",\n        \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\", \"totaloutstanddebtvalue_39A\",\n        \"totaloutstanddebtvalue_668A\", \"diff_dateofcre_and_dateof_end_active\", \"diff_dateofcre_and_dateof_end_close\",\n        \"diff_date_decision_dateofcredend_289D\", \"diff_date_decision_dateofcredend_353D\", \"diff_date_decision_dateofcredstart_181D\", \"diff_date_decision_dateofcredstart_739D\", \n        \"diff_date_decision_dateofrealrepmt_138D\", \"diff_date_decision_lastupdate_1112D\", \"diff_date_decision_lastupdate_388D\"\n    ]\n    \n    for col in max_cols:\n        agg_expressions.append(pl.col(col).max().alias(f\"{col}_max\"))\n    \n    # ===== SUM AGGREGATIONS =====\n    sum_cols = [\n        \"contractsum_5085717L\", \"debtoutstand_525A\", \"debtoverdue_47A\", \"instlamount_768A\",\n        \"instlamount_852A\", \"monthlyinstlamount_332A\", \"monthlyinstlamount_674A\",\n        \"outstandingamount_354A\", \"outstandingamount_362A\", \"overdueamount_31A\", \"overdueamount_659A\",\n        \"overdueamountmax2_14A\", \"overdueamountmax2_398A\", \"overdueamountmax_155A\", \"overdueamountmax_35A\",\n        \"periodicityofpmts_1102L\", \"periodicityofpmts_837L\", \"prolongationcount_1120L\", \"prolongationcount_599L\",\n        \"residualamount_488A\", \"residualamount_856A\", \"totalamount_6A\", \"totalamount_996A\",\n        \"totaldebtoverduevalue_178A\", \"totaldebtoverduevalue_718A\", \"totaloutstanddebtvalue_39A\",\n        \"totaloutstanddebtvalue_668A\"\n    ]\n    \n    for col in sum_cols:\n        agg_expressions.append(pl.col(col).sum().alias(f\"{col}_sum\"))\n    \n    # ===== MODE AGGREGATIONS (dùng first cho categorical) =====\n    mode_cols = [\n        \"classificationofcontr_13M\", \"classificationofcontr_400M\", \"contractst_545M\", \"contractst_964M\",\n        \"description_351M\", \"dpdmaxdatemonth_442T\", \"dpdmaxdatemonth_89T\", \"dpdmaxdateyear_596T\",\n        \"dpdmaxdateyear_896T\", \"financialinstitution_382M\", \"financialinstitution_591M\",\n        \"overdueamountmaxdatemonth_284T\", \"overdueamountmaxdatemonth_365T\", \"overdueamountmaxdateyear_2T\",\n        \"overdueamountmaxdateyear_994T\", \"purposeofcred_426M\", \"purposeofcred_874M\",\n        \"subjectrole_182M\", \"subjectrole_93M\"\n    ]\n    \n    for col in mode_cols:\n        agg_expressions.append(pl.col(col).first().alias(f\"{col}_mode\"))\n    \n    # ===== COUNT AGGREGATION =====\n    agg_expressions.append(pl.col(\"case_id\").count().alias(\"case_id_count\"))\n    \n    # Thực hiện aggregation\n    result_df = df.group_by(\"case_id\").agg(agg_expressions)\n    \n    return result_df\n\ndef create_advanced_features(df_agg):\n    \"\"\"\n    Tạo các features nâng cao từ data đã được aggregate\n    \"\"\"\n    \n    result_df = df_agg.clone()\n    \n    # ===== A. TỶ LỆ RỦI RO QUAN TRỌNG =====\n    \n    # 1. Overdue Ratio cho Active Contracts\n    result_df = result_df.with_columns([\n        # Overdue ratio = Overdue amount / Total outstanding (Active)\n        (pl.col(\"overdueamount_659A_mean\") / pl.col(\"outstandingamount_362A_mean\")).alias(\"overdue_ratio_active_mean\"),\n        (pl.col(\"overdueamount_659A_max\") / pl.col(\"outstandingamount_362A_max\")).alias(\"overdue_ratio_active_max\"),\n        (pl.col(\"overdueamount_659A_sum\") / pl.col(\"outstandingamount_362A_sum\")).alias(\"overdue_ratio_active_sum\"),\n        \n        # Overdue ratio cho Closed Contracts\n        (pl.col(\"overdueamount_31A_mean\") / pl.col(\"outstandingamount_354A_mean\")).alias(\"overdue_ratio_closed_mean\"),\n        (pl.col(\"overdueamount_31A_max\") / pl.col(\"outstandingamount_354A_max\")).alias(\"overdue_ratio_closed_max\"),\n        (pl.col(\"overdueamount_31A_sum\") / pl.col(\"outstandingamount_354A_sum\")).alias(\"overdue_ratio_closed_sum\"),\n        \n        # Max overdue ratios\n        (pl.col(\"overdueamountmax_155A_mean\") / pl.col(\"outstandingamount_362A_mean\")).alias(\"overdue_ratio_max_active_mean\"),\n        (pl.col(\"overdueamountmax_35A_mean\") / pl.col(\"outstandingamount_354A_mean\")).alias(\"overdue_ratio_max_closed_mean\"),\n    ])\n    \n    # 2. DPD Ratio\n    result_df = result_df.with_columns([\n        # DPD ratio = Max DPD / Contract duration (using max for contract duration)\n        (pl.col(\"dpdmax_139P_mean\") / pl.col(\"diff_dateofcre_and_dateof_end_active_max\")).alias(\"dpd_ratio_active_mean\"),\n        (pl.col(\"dpdmax_139P_max\") / pl.col(\"diff_dateofcre_and_dateof_end_active_max\")).alias(\"dpd_ratio_active_max\"),\n        (pl.col(\"dpdmax_757P_mean\") / pl.col(\"diff_dateofcre_and_dateof_end_close_max\")).alias(\"dpd_ratio_closed_mean\"),\n        (pl.col(\"dpdmax_757P_max\") / pl.col(\"diff_dateofcre_and_dateof_end_close_max\")).alias(\"dpd_ratio_closed_max\"),\n    ])\n    \n    # 3. Utilization Ratio\n    result_df = result_df.with_columns([\n        # Utilization ratio = Outstanding / Credit limit\n        (pl.col(\"outstandingamount_362A_mean\") / pl.col(\"credlmt_935A_mean\")).alias(\"utilization_ratio_active_mean\"),\n        (pl.col(\"outstandingamount_362A_max\") / pl.col(\"credlmt_935A_mean\")).alias(\"utilization_ratio_active_max\"),\n        (pl.col(\"outstandingamount_354A_mean\") / pl.col(\"credlmt_230A_mean\")).alias(\"utilization_ratio_closed_mean\"),\n        (pl.col(\"outstandingamount_354A_max\") / pl.col(\"credlmt_230A_mean\")).alias(\"utilization_ratio_closed_max\"),\n        \n        # Debt to credit limit ratio\n        (pl.col(\"debtoutstand_525A_mean\") / pl.col(\"credlmt_935A_mean\")).alias(\"debt_to_limit_ratio_mean\"),\n        (pl.col(\"debtoutstand_525A_sum\") / pl.col(\"credlmt_935A_mean\")).alias(\"debt_to_limit_ratio_sum\"),\n    ])\n    \n    # ===== B. CHỈ SỐ TỔNG HỢP =====\n    \n    # 1. Overall Risk Score (combination of DPD, overdue, prolongation)\n    # Chuẩn hóa các thành phần trước khi kết hợp\n    result_df = result_df.with_columns([\n        # Normalized DPD (0-1 scale, cap at 365 days)\n        (pl.col(\"dpdmax_139P_mean\").clip(0, 365) / 365).alias(\"dpd_normalized_active_mean\"),\n        (pl.col(\"dpdmax_139P_max\").clip(0, 365) / 365).alias(\"dpd_normalized_active_max\"),\n        (pl.col(\"dpdmax_757P_mean\").clip(0, 365) / 365).alias(\"dpd_normalized_closed_mean\"),\n        (pl.col(\"dpdmax_757P_max\").clip(0, 365) / 365).alias(\"dpd_normalized_closed_max\"),\n        \n        # Normalized overdue ratio (0-1 scale, cap at 1)\n        pl.col(\"overdue_ratio_active_mean\").clip(0, 1).alias(\"overdue_normalized_active_mean\"),\n        pl.col(\"overdue_ratio_active_max\").clip(0, 1).alias(\"overdue_normalized_active_max\"),\n        pl.col(\"overdue_ratio_closed_mean\").clip(0, 1).alias(\"overdue_normalized_closed_mean\"),\n        pl.col(\"overdue_ratio_closed_max\").clip(0, 1).alias(\"overdue_normalized_closed_max\"),\n        \n        # Normalized prolongation count (0-1 scale, cap at 10)\n        (pl.col(\"prolongationcount_599L_mean\").clip(0, 10) / 10).alias(\"prolongation_normalized_active_mean\"),\n        (pl.col(\"prolongationcount_599L_max\").clip(0, 10) / 10).alias(\"prolongation_normalized_active_max\"),\n        (pl.col(\"prolongationcount_1120L_mean\").clip(0, 10) / 10).alias(\"prolongation_normalized_closed_mean\"),\n        (pl.col(\"prolongationcount_1120L_max\").clip(0, 10) / 10).alias(\"prolongation_normalized_closed_max\"),\n    ])\n    \n    # Overall risk score (weighted combination) - 0-100 scale\n    result_df = result_df.with_columns([\n        # Risk score for active contracts - MEAN\n        ((pl.col(\"dpd_normalized_active_mean\") * 0.4 + \n          pl.col(\"overdue_normalized_active_mean\") * 0.4 + \n          pl.col(\"prolongation_normalized_active_mean\") * 0.2) * 100).alias(\"overall_risk_score_active_mean\"),\n          \n        # Risk score for active contracts - MAX  \n        ((pl.col(\"dpd_normalized_active_max\") * 0.4 + \n          pl.col(\"overdue_normalized_active_max\") * 0.4 + \n          pl.col(\"prolongation_normalized_active_max\") * 0.2) * 100).alias(\"overall_risk_score_active_max\"),\n          \n        # Risk score for closed contracts - MEAN\n        ((pl.col(\"dpd_normalized_closed_mean\") * 0.4 + \n          pl.col(\"overdue_normalized_closed_mean\") * 0.4 + \n          pl.col(\"prolongation_normalized_closed_mean\") * 0.2) * 100).alias(\"overall_risk_score_closed_mean\"),\n          \n        # Risk score for closed contracts - MAX\n        ((pl.col(\"dpd_normalized_closed_max\") * 0.4 + \n          pl.col(\"overdue_normalized_closed_max\") * 0.4 + \n          pl.col(\"prolongation_normalized_closed_max\") * 0.2) * 100).alias(\"overall_risk_score_closed_max\"),\n    ])\n    \n    # 2. Payment Behavior Score\n    result_df = result_df.with_columns([\n        # Payment regularity (dựa trên số lần overdue vs total instalments)\n        (1 - (pl.col(\"numberofoverdueinstls_725L_mean\") / pl.col(\"numberofinstls_320L_mean\"))).alias(\"payment_regularity_active_mean\"),\n        (1 - (pl.col(\"numberofoverdueinstls_725L_max\") / pl.col(\"numberofinstls_320L_max\"))).alias(\"payment_regularity_active_max\"),\n        (1 - (pl.col(\"numberofoverdueinstls_834L_mean\") / pl.col(\"numberofinstls_229L_mean\"))).alias(\"payment_regularity_closed_mean\"),\n        (1 - (pl.col(\"numberofoverdueinstls_834L_max\") / pl.col(\"numberofinstls_229L_max\"))).alias(\"payment_regularity_closed_max\"),\n        \n        # Payment amount consistency (monthly vs actual instalment)\n        (pl.col(\"monthlyinstlamount_332A_mean\") / pl.col(\"instlamount_768A_mean\")).alias(\"payment_consistency_active_mean\"),\n        (pl.col(\"monthlyinstlamount_332A_max\") / pl.col(\"instlamount_768A_max\")).alias(\"payment_consistency_active_max\"),\n        (pl.col(\"monthlyinstlamount_674A_mean\") / pl.col(\"instlamount_852A_mean\")).alias(\"payment_consistency_closed_mean\"),\n        (pl.col(\"monthlyinstlamount_674A_max\") / pl.col(\"instlamount_852A_max\")).alias(\"payment_consistency_closed_max\"),\n    ])\n    \n    # Payment behavior score (0-100)\n    result_df = result_df.with_columns([\n        # Active - MEAN\n        ((pl.col(\"payment_regularity_active_mean\") * 0.6 + \n          pl.col(\"payment_consistency_active_mean\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_active_mean\"),\n          \n        # Active - MAX\n        ((pl.col(\"payment_regularity_active_max\") * 0.6 + \n          pl.col(\"payment_consistency_active_max\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_active_max\"),\n          \n        # Closed - MEAN\n        ((pl.col(\"payment_regularity_closed_mean\") * 0.6 + \n          pl.col(\"payment_consistency_closed_mean\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_closed_mean\"),\n          \n        # Closed - MAX\n        ((pl.col(\"payment_regularity_closed_max\") * 0.6 + \n          pl.col(\"payment_consistency_closed_max\").clip(0, 2) * 0.4) * 100).alias(\"payment_behavior_score_closed_max\"),\n    ])\n    \n    # 3. Contract Stability Score\n    result_df = result_df.with_columns([\n        # Contract completion rate (for closed contracts)\n        (pl.col(\"numberofinstls_229L_mean\") / (pl.col(\"numberofinstls_229L_mean\") + pl.col(\"numberofoutstandinstls_520L_mean\"))).alias(\"completion_rate_closed_mean\"),\n        (pl.col(\"numberofinstls_229L_max\") / (pl.col(\"numberofinstls_229L_max\") + pl.col(\"numberofoutstandinstls_520L_max\"))).alias(\"completion_rate_closed_max\"),\n        \n        # Contract progress rate (for active contracts)\n        ((pl.col(\"numberofinstls_320L_mean\") - pl.col(\"numberofoutstandinstls_59L_mean\")) / pl.col(\"numberofinstls_320L_mean\")).alias(\"progress_rate_active_mean\"),\n        ((pl.col(\"numberofinstls_320L_max\") - pl.col(\"numberofoutstandinstls_59L_max\")) / pl.col(\"numberofinstls_320L_max\")).alias(\"progress_rate_active_max\"),\n        \n        # Stability indicator (lower prolongation = higher stability)\n        (1 / (1 + pl.col(\"prolongationcount_599L_mean\"))).alias(\"stability_indicator_active_mean\"),\n        (1 / (1 + pl.col(\"prolongationcount_599L_max\"))).alias(\"stability_indicator_active_max\"),\n        (1 / (1 + pl.col(\"prolongationcount_1120L_mean\"))).alias(\"stability_indicator_closed_mean\"),\n        (1 / (1 + pl.col(\"prolongationcount_1120L_max\"))).alias(\"stability_indicator_closed_max\"),\n    ])\n    \n    # Contract stability score (0-100)\n    result_df = result_df.with_columns([\n        # Active - MEAN\n        ((pl.col(\"progress_rate_active_mean\") * 0.5 + \n          pl.col(\"stability_indicator_active_mean\") * 0.5) * 100).alias(\"contract_stability_score_active_mean\"),\n          \n        # Active - MAX\n        ((pl.col(\"progress_rate_active_max\") * 0.5 + \n          pl.col(\"stability_indicator_active_max\") * 0.5) * 100).alias(\"contract_stability_score_active_max\"),\n          \n        # Closed - MEAN\n        ((pl.col(\"completion_rate_closed_mean\") * 0.5 + \n          pl.col(\"stability_indicator_closed_mean\") * 0.5) * 100).alias(\"contract_stability_score_closed_mean\"),\n          \n        # Closed - MAX\n        ((pl.col(\"completion_rate_closed_max\") * 0.5 + \n          pl.col(\"stability_indicator_closed_max\") * 0.5) * 100).alias(\"contract_stability_score_closed_max\"),\n    ])\n    \n    # ===== C. TIME-BASED FEATURES =====\n    \n    # 1. Recency features (đã có từ các cột date diff)\n    result_df = result_df.with_columns([\n        # Recent update vs historical\n        (pl.col(\"diff_date_decision_lastupdate_1112D_max\") > pl.col(\"diff_date_decision_lastupdate_1112D_mean\")).alias(\"recent_update_active\"),\n        (pl.col(\"diff_date_decision_lastupdate_388D_max\") > pl.col(\"diff_date_decision_lastupdate_388D_mean\")).alias(\"recent_update_closed\"),\n    ])\n    \n    # 2. Trend indicators\n    result_df = result_df.with_columns([\n        # Recent vs historical overdue (comparing current vs max)\n        (pl.col(\"overdueamount_659A_mean\") / pl.col(\"overdueamountmax_155A_mean\")).alias(\"recent_overdue_trend_active\"),\n        (pl.col(\"overdueamount_31A_mean\") / pl.col(\"overdueamountmax_35A_mean\")).alias(\"recent_overdue_trend_closed\"),\n        \n        # Outstanding trend (current vs residual)\n        (pl.col(\"outstandingamount_362A_mean\") / pl.col(\"residualamount_856A_mean\")).alias(\"outstanding_trend_active_mean\"),\n        (pl.col(\"outstandingamount_362A_max\") / pl.col(\"residualamount_856A_max\")).alias(\"outstanding_trend_active_max\"),\n        (pl.col(\"outstandingamount_354A_mean\") / pl.col(\"residualamount_488A_mean\")).alias(\"outstanding_trend_closed_mean\"),\n        (pl.col(\"outstandingamount_354A_max\") / pl.col(\"residualamount_488A_max\")).alias(\"outstanding_trend_closed_max\"),\n    ])\n    \n    # ===== D. ADDITIONAL COMPOSITE FEATURES =====\n    \n    # 1. Credit exposure features\n    result_df = result_df.with_columns([\n        # Total exposure (sum of all outstanding amounts)\n        (pl.col(\"outstandingamount_362A_sum\") + pl.col(\"outstandingamount_354A_sum\")).alias(\"total_exposure_sum\"),\n        (pl.col(\"outstandingamount_362A_mean\") + pl.col(\"outstandingamount_354A_mean\")).alias(\"total_exposure_mean\"),\n        \n        # Risk-weighted exposure\n        (pl.col(\"outstandingamount_362A_mean\") * pl.col(\"overall_risk_score_active_mean\") / 100).alias(\"risk_weighted_exposure_active_mean\"),\n        (pl.col(\"outstandingamount_354A_mean\") * pl.col(\"overall_risk_score_closed_mean\") / 100).alias(\"risk_weighted_exposure_closed_mean\"),\n    ])\n    \n    # 2. Portfolio quality indicators\n    result_df = result_df.with_columns([\n        # Active vs closed contract ratio\n        (pl.col(\"numberofcontrsvalue_258L_mean\") / pl.col(\"numberofcontrsvalue_358L_mean\")).alias(\"active_closed_ratio_mean\"),\n        (pl.col(\"numberofcontrsvalue_258L_max\") / pl.col(\"numberofcontrsvalue_358L_max\")).alias(\"active_closed_ratio_sum\"),\n        \n        # Average contract size\n        (pl.col(\"totalamount_996A_mean\") / pl.col(\"numberofcontrsvalue_258L_mean\")).alias(\"avg_contract_size_active_mean\"),\n        (pl.col(\"totalamount_6A_mean\") / pl.col(\"numberofcontrsvalue_358L_mean\")).alias(\"avg_contract_size_closed_mean\"),\n    ])\n    \n    # 3. Early warning indicators\n    result_df = result_df.with_columns([\n        # Deterioration signal (recent overdue > historical average)\n        (pl.col(\"recent_overdue_trend_active\") > 1).alias(\"deterioration_signal_active\"),\n        (pl.col(\"recent_overdue_trend_closed\") > 1).alias(\"deterioration_signal_closed\"),\n        \n        # High risk flag (multiple risk factors)\n        ((pl.col(\"overall_risk_score_active_mean\") > 70) & \n         (pl.col(\"utilization_ratio_active_mean\") > 0.8) & \n         (pl.col(\"overdue_ratio_active_mean\") > 0.1)).alias(\"high_risk_flag_active\"),\n         \n        # Payment stress indicator\n        ((pl.col(\"payment_behavior_score_active_mean\") < 50) & \n         (pl.col(\"contract_stability_score_active_mean\") < 60)).alias(\"payment_stress_flag_active\"),\n    ])\n    \n    return result_df\n\ndef process_credit_bureau_data(df):\n    \"\"\"\n    Hàm chính để xử lý dữ liệu credit bureau và tạo features hoàn chỉnh\n    \n    Args:\n        df: DataFrame chứa raw data credit bureau\n        \n    Returns:\n        DataFrame với các features đã được aggregate và enhanced\n    \"\"\"\n    \n    # Bước 1: Tạo base aggregations theo case_id\n    print(\"Đang thực hiện base aggregations...\")\n    df_agg = create_base_aggregations(df)\n    \n    # Bước 2: Tạo advanced features\n    print(\"Đang tạo advanced features...\")\n    df_enhanced = create_advanced_features(df_agg)\n    \n    return df_enhanced\n\ncredit_card_bureau_features = process_credit_bureau_data(df_train_credit_bureau_a_1)\nprint(f'☑️Credit Card Bureau Features..... with the shape is {credit_card_bureau_features.shape}')\n# credit_card_bureau_features.write_csv('credit_card_bureau_features.csv')\n\ndel df_result,df_train_credit_bureau_a_1\n\n\n#------------------------------------------------TAX REGISTRY FEATURES--------------------------------------------------------\nprint('------------------------✅TAX REGISTRY PROCESS-------------------------------------------------')\ntax_a = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_a_1.parquet')\ntax_b = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_b_1.parquet')\ntax_c = pd.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_tax_registry_c_1.parquet')\ndf_a_renamed = tax_a.select([\n    pl.col(\"case_id\"),\n    pl.col(\"amount_4527230A\").alias(\"tax_amount\"),\n    pl.col(\"name_4527232M\").alias(\"employer_name\"),\n    pl.col(\"recorddate_4527225D\").alias(\"tax_date\"),\n        pl.lit(\"a\").alias(\"label\")\n\n])\n\ndf_b_renamed = tax_b.select([\n    pl.col(\"case_id\"),\n    pl.col(\"amount_4917619A\").alias(\"tax_amount\"),\n    pl.col(\"name_4917606M\").alias(\"employer_name\"),\n    pl.col(\"deductiondate_4917603D\").alias(\"tax_date\"),\n        pl.lit(\"b\").alias(\"label\")\n\n])\n\ndf_c_renamed = tax_c.select([\n    pl.col(\"case_id\"),\n    pl.col(\"pmtamount_36A\").alias(\"tax_amount\"),\n    pl.col(\"employername_160M\").alias(\"employer_name\"),\n    pl.col(\"processingdate_168D\").alias(\"tax_date\"),\n        pl.lit(\"c\").alias(\"label\")\n\n])\ntax_df = pl.concat([df_a_renamed, df_b_renamed, df_c_renamed])\ntax_df = tax_df.with_columns([\n    pl.col(\"tax_date\").str.strptime(pl.Date)\n])\nprint(f'✅Loading Depth 1 Tax Registry.....with the shape is {tax_df.shape}')\ntax_df = tax_df.join(\n    train_base[['case_id','date_decision']], on ='case_id', how = 'left'\n)\ntax_df = tax_df.with_columns([\n    pl.col(\"date_decision\").str.strptime(pl.Date)\n])\ntax_df = tax_df.with_columns([\n    ((pl.col(\"date_decision\") - pl.col(\"tax_date\")).dt.total_days().abs().alias(\"diff_tax_date_date_decision\")\n    )])\n# Tính các feature theo case_id - Phiên bản tối ưu cho Polars\ntax_features = tax_df.group_by(\"case_id\").agg([\n    # Đếm số bản ghi\n    pl.len().alias(\"tax_record_count\"),  # pl.len() thay cho pl.count()\n    \n    # Thống kê tax_amount\n    pl.col(\"tax_amount\").sum().alias(\"tax_amount_sum\"),\n    pl.col(\"tax_amount\").mean().alias(\"tax_amount_avg\"),\n    pl.col(\"tax_amount\").min().alias(\"tax_amount_min\"),\n    pl.col(\"tax_amount\").max().alias(\"tax_amount_max\"),\n    pl.col(\"tax_amount\").std().alias(\"tax_amount_std\"),\n    \n    # Thống kê employer\n    pl.col(\"employer_name\").n_unique().alias(\"employer_nunique\"),\n    \n    # Thống kê thời gian\n    pl.col(\"tax_date\").min().alias(\"tax_date_first\"),\n    pl.col(\"tax_date\").max().alias(\"tax_date_last\"),\n    \n    # Thống kê diff_tax_date_date_decision\n    pl.col(\"diff_tax_date_date_decision\").max().alias(\"diff_tax_date_date_decision_max\"),\n    pl.col(\"diff_tax_date_date_decision\").min().alias(\"diff_tax_date_date_decision_min\"),\n    pl.col(\"diff_tax_date_date_decision\").std().alias(\"diff_tax_date_date_decision_std\"),\n    pl.col(\"diff_tax_date_date_decision\").mean().alias(\"diff_tax_date_date_decision_mean\"),\n    pl.col(\"diff_tax_date_date_decision\").last().alias(\"diff_tax_date_date_decision_last\"),\n    \n    # Khoảng thời gian giữa first và last\n    (pl.col(\"tax_date\").max() - pl.col(\"tax_date\").min()).dt.total_days().alias(\"tax_date_duration_days\")\n])\n\n# Tính interval trung bình giữa các lần khấu trừ - Phiên bản tối ưu\ntax_intervals = (\n    tax_df\n    .sort([\"case_id\", \"tax_date\"])\n    .group_by(\"case_id\", maintain_order=True)\n    .agg([\n        # Tính interval bằng cách sử dụng shift\n        pl.when(pl.len() > 1)\n        .then(\n            (pl.col(\"tax_date\") - pl.col(\"tax_date\").shift(1))\n            .dt.total_days()\n            .drop_nulls()\n            .mean()\n        )\n        .otherwise(None)\n        .alias(\"tax_interval_avg_days\")\n    ])\n)\n\n# Join interval vào features chính\ntax_features = tax_features.join(tax_intervals, on=\"case_id\", how=\"left\")\n\n# Thêm một số feature bổ sung có thể hữu ích\ntax_registry_features = tax_features.with_columns([\n    # Tỷ lệ số ngày trung bình giữa các lần khấu trừ so với tổng thời gian\n    pl.when(pl.col(\"tax_date_duration_days\") > 0)\n    .then(pl.col(\"tax_interval_avg_days\") / pl.col(\"tax_date_duration_days\"))\n    .otherwise(None)\n    .alias(\"tax_interval_ratio\"),\n    \n    # Tần suất khấu trừ (số lần / tổng số ngày)\n    pl.when(pl.col(\"tax_date_duration_days\") > 0)\n    .then(pl.col(\"tax_record_count\") / pl.col(\"tax_date_duration_days\"))\n    .otherwise(None)\n    .alias(\"tax_frequency_per_day\")\n])\n# tax_registry_features.write_csv('tax_registry_features.csv')\nprint(f'☑️Tax Registry Features.....with the shape is {tax_registry_features.shape}')\ndel tax_a, tax_b, tax_c, df_a_renamed,df_b_renamed,df_c_renamed, tax_features, tax_df\n\n#------------------------------------------------PERSON FEATURE--------------------------------------------------------\nprint('------------------------✅PERSON PROCESS-------------------------------------------------')\ntrain_person_2 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_2.parquet')\ntrain_person_1 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_person_1.parquet')\nprint(f'✅Loading Person Features.....with the shape is {train_person_1.shape}')\n\n#--- Depth2: Person 2\nperson_2_features = train_person_2.group_by([\"case_id\", \"num_group1\"]).agg([\n    # addres_district_368M\n    pl.col(\"addres_district_368M\").mode().first().alias(\"addres_district_368M_mode\"),\n    pl.col(\"addres_district_368M\").n_unique().alias(\"addres_district_nunique\"),\n\n    # addres_zip_823M\n    pl.col(\"addres_zip_823M\").mode().first().alias(\"addres_zip_823M_mode\"),\n    pl.col(\"addres_zip_823M\").n_unique().alias(\"addres_zip_823M_nunique\"),\n\n    # conts_role_79M\n    pl.col(\"conts_role_79M\").mode().first().alias(\"conts_role_79M_mode\"),\n    pl.col(\"conts_role_79M\").n_unique().alias(\"conts_role_79M_nunique\"),\n])\n#---Depth1: Person 1\nperson_full = train_person_1.join(\n    person_2_features, on = ['case_id','num_group1'], how = 'left'\n)\nperson_full = person_full.with_columns([\n    pl.col(\"birth_259D\").str.strptime(pl.Date, strict=False)\n])\nperson_full = person_full.with_columns([\n    (2024 - pl.col(\"birth_259D\").dt.year()).alias(\"age\")\n])\n# 2. Basic aggregates\nagg_list = [\n        pl.count().alias(\"person_count\"),\n        pl.col(\"age\").mean().alias(\"age_mean\"),\n        pl.col(\"age\").min().alias(\"age_min\"),\n        pl.col(\"age\").max().alias(\"age_max\"),\n        pl.col(\"contaddr_district_15M\").n_unique().alias(\"contaddr_district_15M_nunique\"),\n        pl.col(\"contaddr_district_15M\").mode().first().alias(\"contaddr_district_15M_mode\"),\n        pl.col(\"education_927M\").mode().first().alias(\"education_927M_mode\"),\n        pl.col(\"incometype_1044T\").n_unique().alias(\"incometype_1044T_nunique\"),\n        pl.col(\"incometype_1044T\").mode().first().alias(\"incometype_1044T_mode\"),\n        pl.col(\"language1_981M\").n_unique().alias(\"language1_981M_nunique\"),\n        pl.col(\"language1_981M\").mode().first().alias(\"language1_981M_mode\"),\n        pl.col(\"mainoccupationinc_384A\").mean().alias(\"mainoccupationinc_384A_mean\"),\n        pl.col(\"mainoccupationinc_384A\").sum().alias(\"mainoccupationinc_384A_sum\"),\n        pl.col(\"mainoccupationinc_384A\").max().alias(\"mainoccupationinc_384A_max\"),\n        pl.col(\"registaddr_district_1083M\").mode().first().alias(\"registaddr_district_1083M_mode\"),        \n        pl.col(\"role_1084L\").mode().first().alias(\"role_1084L_mode\"),\n        pl.col(\"sex_738L\").n_unique().alias(\"sex_738L_nunique\"),\n        pl.col(\"sex_738L\").mode().first().alias(\"sex_738L_mode\"),\n        pl.col(\"type_25L\").n_unique().alias(\"type_25L_nunique\"),\n        pl.col(\"type_25L\").mode().first().alias(\"type_25L_mode\"),\n        pl.col(\"addres_district_368M_mode\").mode().first().alias(\"addres_district_368M_mode\"),\n        pl.col(\"conts_role_79M_mode\").mode().first().alias(\"conts_role_79M_mode\")\n\n    ]\nperson_feature = person_full.group_by(\"case_id\").agg(agg_list)\n# person_feature.write_csv('person_feature.csv')\nprint(f'☑️Person Features.....with the shape is {person_feature.shape}')\ndel train_person_2,train_person_1,person_2_features, person_full\n\n\n#------------------------------------------------DEPOSIT FEATURE--------------------------------------------------------\nprint('------------------------✅DEPOSIT PROCESS-------------------------------------------------')\ntrain_deposit = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_deposit_1.parquet')\nprint(f'✅Loading Deposit Features.....with the shape is {train_deposit.shape}')\ndeposit_feature = train_deposit.group_by(\"case_id\").agg([\n    pl.col(\"amount_416A\").sum().alias(\"amount_sum\"),\n    pl.col(\"amount_416A\").mean().alias(\"amount_mean\"),\n    pl.count().alias(\"count\")\n])\n# deposit_feature.write_csv(\"deposit_feature.csv\")\nprint('☑️Deposit Features.....with the shape is {deposit_feature.shape}')\ndel train_deposit\n\n#------------------------------------------------OTHER FEATURE--------------------------------------------------------\nprint('------------------------✅OTHER PROCESS-------------------------------------------------')\n# print(f'✅Loading Other Features.....with the shape is {train_applprev_2.shape}')\ntrain_other_1 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_other_1.parquet')\ntrain_other_1 = train_other_1.drop(\"num_group1\")\nprint(f'☑️Deposit Features.....with the shape is {train_other_1.shape}')\n\n\n#------------------------------------------------STATIC CB FEATURE--------------------------------------------------------\nprint('------------------------✅STATIC CB PROCESS-------------------------------------------------')\ntrain_static_cb_0 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_cb_0.parquet')\nprint(f'✅Loading Statis CB Features.....with the shape is {train_static_cb_0.shape}')\ntrain_static_cb = train_static_cb_0.with_columns([\n    pl.coalesce([\n        pl.col(\"assignmentdate_238D\"),\n        pl.col(\"assignmentdate_4527235D\"),\n        pl.col(\"assignmentdate_4955616D\")\n    ]).alias(\"assignment_date_str\"),\n    pl.coalesce([\n        pl.col(\"birthdate_574D\"),\n        pl.col(\"dateofbirth_337D\"),\n        pl.col(\"dateofbirth_342D\")\n    ]).alias(\"birthdate_str\"),\n    pl.coalesce([\n        pl.col(\"education_1103M\"),\n        pl.col(\"education_88M\")\n    ]).alias(\"education\"),\n    pl.coalesce([\n        pl.col(\"maritalst_385M\"),\n        pl.col(\"maritalst_893M\")\n    ]).alias(\"marital_status\"),\n    pl.coalesce([\n        pl.col(\"pmtaverage_3A\"),\n        pl.col(\"pmtaverage_4527227A\"),\n        pl.col(\"pmtaverage_4955615A\")\n    ]).alias(\"pmtaverage\"),\n    pl.coalesce([\n        pl.col(\"pmtcount_4527229L\"),\n        pl.col(\"pmtcount_4955617L\"),\n        pl.col(\"pmtcount_693L\"),\n        pl.col(\"pmtscount_423L\")\n    ]).alias(\"pmtcount\"),\n    pl.coalesce([\n        pl.col(\"responsedate_1012D\"),\n        pl.col(\"responsedate_4527233D\"),\n        pl.col(\"responsedate_4917613D\")\n    ]).alias(\"response_date_str\")\n])\ntrain_static_c = train_static_cb[[\n'case_id',\n    'assignment_date_str',\n    'birthdate_str',\n    'education',\n    'marital_status',\n    'pmtaverage',\n    'pmtcount',\n    'response_date_str',\n 'contractssum_5085716L',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'numberofqueries_373L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L'\n]]\ntrain_static_c = train_static_c.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n)\n# ===== 2. Xử lý ngày tháng =====\ntrain_static_c = train_static_c.with_columns([\n        pl.col(\"assignment_date_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"assignment_date\"),\n        pl.col(\"birthdate_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"birthdate\"),\n        pl.col(\"response_date_str\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"response_date\"),\n        pl.col(\"date_decision\").str.strptime(pl.Date, \"%Y-%m-%d\").alias(\"date_decision\")\n\n])\ntrain_static_c = train_static_c.with_columns([\n    (pl.col(\"date_decision\") - pl.col(\"response_date\"))\n    .dt.total_days()\n    .abs()\n    .alias(\"response_date_date_decision\")\n])\n\n    \n    # ===== 3. Tính toán tuổi =====\ntrain_static_c = train_static_c.with_columns([\n        (pl.col(\"assignment_date\").dt.year() - pl.col(\"birthdate\").dt.year()).alias(\"age_estimate\"),\n        (pl.col(\"response_date\") - pl.col(\"assignment_date\")).dt.total_days().alias(\"processing_days\")\n])\n# ===== 4. Feature chỉ số tín dụng =====\n    # Tỷ lệ hoạt động tín dụng\ntrain_static_c = train_static_c.with_columns([\n    (pl.col(\"days30_165L\") / pl.when(pl.col(\"days360_512L\") == 0).then(1e-5).otherwise(pl.col(\"days360_512L\"))).alias(\"credit_activity_ratio\"),\n    (pl.col(\"days180_256L\") / pl.when(pl.col(\"days360_512L\") == 0).then(1e-5).otherwise(pl.col(\"days360_512L\"))).alias(\"midterm_credit_ratio\")\n])\n\n    \n    # Mật độ từ chối\ntrain_static_c = train_static_c.with_columns([\n        ((pl.col(\"for3years_128L\") + pl.col(\"foryear_618L\")) / 4).alias(\"rejection_density\"),\n        ((pl.col(\"formonth_118L\") + pl.col(\"forweek_601L\")) / 4).alias(\"shortterm_rejection_density\")\n    ])\n\n    # ===== 5. Feature thu nhập và thuế =====\n    # Tỷ lệ thuế/thu nhập\ntrain_static_c = train_static_c.with_columns([\n        (pl.col(\"pmtssum_45A\") / pl.col(\"contractssum_5085716L\").replace(0, 1e-5)).alias(\"tax_burden\"),\n        (pl.col(\"pmtcount\") / 12).alias(\"tax_compliance\")\n    ])\n\nstatic_cb_features = train_static_c[[\n 'case_id',\n 'education',\n 'marital_status',\n 'pmtaverage',\n 'pmtcount',\n 'contractssum_5085716L',\n 'days120_123L',\n 'days180_256L',\n 'days30_165L',\n 'days360_512L',\n 'days90_310L',\n 'description_5085714M',\n 'firstquarter_103L',\n 'for3years_128L',\n 'for3years_504L',\n 'for3years_584L',\n 'formonth_118L',\n 'formonth_206L',\n 'formonth_535L',\n 'forquarter_1017L',\n 'forquarter_462L',\n 'forquarter_634L',\n 'fortoday_1092L',\n 'forweek_1077L',\n 'forweek_528L',\n 'forweek_601L',\n 'foryear_618L',\n 'foryear_818L',\n 'foryear_850L',\n 'fourthquarter_440L',\n 'numberofqueries_373L',\n 'pmtscount_423L',\n 'pmtssum_45A',\n 'requesttype_4525192L',\n 'riskassesment_302T',\n 'riskassesment_940T',\n 'secondquarter_766L',\n 'thirdquarter_1082L',\n 'age_estimate',\n 'processing_days',\n 'credit_activity_ratio',\n 'midterm_credit_ratio',\n 'rejection_density',\n 'shortterm_rejection_density',\n 'tax_burden',\n 'tax_compliance',\n 'response_date_date_decision'\n]]\n# static_cb_features.write_csv(\"static_cb_features.csv\")\nprint('☑️Static CB Features.....with the shape is {static_cb_features.shape}')\n del train_static_c,train_static_cb,train_static_cb_0\n\n\n#------------------------------------------------STATIC FEATURE--------------------------------------------------------\nprint('------------------------✅STATIC PROCESS-------------------------------------------------')\ntrain_static_0 = pl.read_parquet('/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_static_0_*.parquet')\nprint(f'✅Loading Static Features.....with the shape is {train_static_0.shape}')\ntrain_static_0 = train_static_0.join(\n    train_base[['case_id','date_decision']], on = 'case_id', how ='left'\n) \nfilter_columns = train_static_0[[\n 'case_id',\n 'actualdpdtolerance_344P',\n 'amtinstpaidbefduel24m_4187115A',\n 'annuity_780A',\n 'annuitynextmonth_57A',\n 'applicationcnt_361L',\n 'applications30d_658L',\n 'applicationscnt_1086L',\n 'applicationscnt_464L',\n 'applicationscnt_629L',\n 'applicationscnt_867L',\n 'avgdbddpdlast24m_3658932P',\n 'avgdbddpdlast3m_4187120P',\n 'avgdbdtollast24m_4525197P',\n 'avgdpdtolclosure24_3658938P',\n 'avginstallast24m_3658937A',\n 'avglnamtstart24m_4525187A',\n 'avgmaxdpdlast9m_3716943P',\n 'avgoutstandbalancel6m_4187114A',\n 'avgpmtlast12m_4525200A',\n 'bankacctype_710L',\n 'cardtype_51L',\n 'clientscnt12m_3712952L',\n 'clientscnt3m_3712950L',\n 'clientscnt6m_3712949L',\n 'clientscnt_100L',\n 'clientscnt_1022L',\n 'clientscnt_1071L',\n 'clientscnt_1130L',\n 'clientscnt_136L',\n 'clientscnt_157L',\n 'clientscnt_257L',\n 'clientscnt_304L',\n 'clientscnt_360L',\n 'clientscnt_493L',\n 'clientscnt_533L',\n 'clientscnt_887L',\n 'clientscnt_946L',\n 'cntincpaycont9m_3716944L',\n 'cntpmts24_3658933L',\n 'commnoinclast6m_3546845L',\n 'credamount_770A',\n 'credtype_322L',\n 'currdebt_22A',\n 'currdebtcredtyperange_828A',\n 'daysoverduetolerancedd_3976961L',\n 'deferredmnthsnum_166L',\n 'disbursedcredamount_1113A',\n 'disbursementtype_67L',\n 'downpmt_116A',\n 'eir_270L',\n 'homephncnt_628L',\n 'inittransactionamount_650A',\n 'inittransactioncode_186L',\n 'interestrate_311L',\n 'interestrategrace_34L',\n 'lastapprcommoditycat_1041M',\n 'lastapprcommoditytypec_5251766M',\n 'lastapprcredamount_781A',\n 'lastcancelreason_561M',\n 'lastdependentsnum_448L',\n 'lastotherinc_902A',\n 'lastotherlnsexpense_631A',\n 'lastrejectcommoditycat_161M',\n 'lastrejectcommodtypec_5251769M',\n 'lastrejectcredamount_222A',\n 'lastrejectreason_759M',\n 'lastrejectreasonclient_4145040M',\n 'lastst_736L',\n 'maininc_215A',\n 'maxannuity_159A',\n 'maxannuity_4075009A',\n 'maxdbddpdlast1m_3658939P',\n 'maxdbddpdtollast12m_3658940P',\n 'maxdbddpdtollast6m_4187119P',\n 'maxdebt4_972A',\n 'maxdpdfrom6mto36m_3546853P',\n 'maxdpdinstldate_3546855D',\n 'maxdpdinstlnum_3546846P',\n 'maxdpdlast12m_727P',\n 'maxdpdlast24m_143P',\n 'maxdpdlast3m_392P',\n 'maxdpdlast6m_474P',\n 'maxdpdlast9m_1059P',\n 'maxdpdtolerance_374P',\n 'maxinstallast24m_3658928A',\n 'maxlnamtstart6m_4525199A',\n 'maxoutstandbalancel12m_4187113A',\n 'maxpmtlast3m_4525190A',\n 'mindbddpdlast24m_3658935P',\n 'mindbdtollast24m_4525191P',\n 'mobilephncnt_593L',\n 'monthsannuity_845L',\n 'numactivecreds_622L',\n 'numactivecredschannel_414L',\n 'numactiverelcontr_750L',\n 'numcontrs3months_479L',\n 'numincomingpmts_3546848L',\n 'numinstlallpaidearly3d_817L',\n 'numinstls_657L',\n 'numinstlsallpaid_934L',\n 'numinstlswithdpd10_728L',\n 'numinstlswithdpd5_4187116L',\n 'numinstlswithoutdpd_562L',\n 'numinstmatpaidtearly2d_4499204L',\n 'numinstpaid_4499208L',\n 'numinstpaidearly3d_3546850L',\n 'numinstpaidearly3dest_4493216L',\n 'numinstpaidearly5d_1087L',\n 'numinstpaidearly5dest_4493211L',\n 'numinstpaidearly5dobd_4499205L',\n 'numinstpaidearly_338L',\n 'numinstpaidearlyest_4493214L',\n 'numinstpaidlastcontr_4325080L',\n 'numinstpaidlate1d_3546852L',\n 'numinstregularpaid_973L',\n 'numinstregularpaidest_4493210L',\n 'numinsttopaygr_769L',\n 'numinsttopaygrest_4493213L',\n 'numinstunpaidmax_3546851L',\n 'numinstunpaidmaxest_4493212L',\n 'numnotactivated_1143L',\n 'numpmtchanneldd_318L',\n 'numrejects9m_859L',\n 'opencred_647L',\n 'paytype1st_925L',\n 'paytype_783L',\n 'payvacationpostpone_4187118D',\n 'pctinstlsallpaidearl3d_427L',\n 'pctinstlsallpaidlat10d_839L',\n 'pctinstlsallpaidlate1d_3546856L',\n 'pctinstlsallpaidlate4d_3546849L',\n 'pctinstlsallpaidlate6d_3546844L',\n 'pmtnum_254L',\n 'posfpd10lastmonth_333P',\n 'posfpd30lastmonth_3976960P',\n 'posfstqpd30lastmonth_3976962P',\n 'previouscontdistrict_112M',\n 'price_1097A',\n 'sellerplacecnt_915L',\n 'sellerplacescnt_216L',\n 'sumoutstandtotal_3546847A',\n 'sumoutstandtotalest_4493215A',\n 'totaldebt_9A',\n 'totalsettled_863A',\n 'totinstallast1m_4525188A',\n 'twobodfilling_608L',\n 'typesuite_864L'\n]]\n\n# Cột ngày cần parse\ndate_cols = [\n    \"date_decision\",\n    \"datelastunpaid_3546854D\",\n    \"dtlastpmtallstes_4499206D\",\n    \"lastapprdate_640D\",\n    \"lastdelinqdate_224D\",\n    \"lastrejectdate_50D\",\n    \"firstdatedue_489D\"\n]\n\n# Cột boolean cần chuyển sang 0/1\nbool_cols = [\n    \"equalitydataagreement_891L\",\n    \"equalityempfrom_62L\",\n    \"isbidproduct_1095L\",\n    \"isbidproductrequest_292L\",\n    \"isdebitcard_729L\",\n    \"mastercontrelectronic_519L\",\n    \"mastercontrexist_109L\"\n]\n\n# Parse các cột ngày sang định dạng date\nparsed_dates = [\n    pl.col(col).str.strptime(pl.Date, \"%Y-%m-%d\", strict=False).alias(col)\n    for col in date_cols\n]\n\n# Các feature ngày so với date_decision\ndate_diff_exprs = [\n    (pl.col(\"date_decision\") - pl.col(col)).dt.total_days().alias(f\"diff_{col}_to_decision\")\n    for col in [\n        \"datelastunpaid_3546854D\",\n        \"dtlastpmtallstes_4499206D\",\n        \"lastapprdate_640D\",\n        \"lastdelinqdate_224D\",\n        \"lastrejectdate_50D\"\n    ]\n]\n\n# Feature giữa 2 ngày cụ thể\nfirst_due_diff_expr = (\n    (pl.col(\"firstdatedue_489D\") - pl.col(\"dtlastpmtallstes_4499206D\"))\n    .dt.total_days()\n    .alias(\"diff_firstdatedue_to_lastpmt\")\n)\n\n# Chuyển boolean về 0/1\nbool_exprs = [\n    pl.col(col).cast(pl.Int8).alias(col) for col in bool_cols\n]\n\n# Final: thêm case_id vào kết quả\ntrain_static_features = train_static_0.with_columns(parsed_dates).select(\n    [pl.col(\"case_id\")] + date_diff_exprs + [first_due_diff_expr] + bool_exprs\n)\n\nstatic_feature = filter_columns.join(train_static_features, on = 'case_id', how ='left')\n# static_cb_features.write_csv(\"static_cb_features.csv\")\nprint('☑️Static Features.....with the shape is {static_feature.shape}')\ndel train_static_0,first_due_diff_expr","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-24T06:56:14.31307Z","iopub.execute_input":"2025-06-24T06:56:14.313447Z","iopub.status.idle":"2025-06-24T06:59:49.837663Z","shell.execute_reply.started":"2025-06-24T06:56:14.313416Z","shell.execute_reply":"2025-06-24T06:59:49.835827Z"}},"outputs":[],"execution_count":20},{"cell_type":"code","source":"train_base = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_base.parquet\")\n\ndf_train_applprev_1 = pl.read_parquet(\"/kaggle/input/home-credit-credit-risk-model-stability/parquet_files/train/train_applprev_1_*.parquet\")\ndf_train_applprev_1 = df_train_applprev_1.with_columns(\n    pl.when(pl.col('approvaldate_319D').is_not_null())\n      .then(pl.lit('Approval'))\n      .otherwise(pl.lit('Not Approval'))\n      .alias('is_approval')\n)\nfull_train_applprev = df_train_applprev_1.join(\n    train_applprev_2_feature, on=['case_id','num_group1'], how='left'\n).join(\n    train_base[['case_id','date_decision']], on ='case_id', how = 'left'\n)\nfull_train_applprev","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-06-24T07:09:19.791097Z","iopub.execute_input":"2025-06-24T07:09:19.791541Z","iopub.status.idle":"2025-06-24T07:09:32.58412Z","shell.execute_reply.started":"2025-06-24T07:09:19.791501Z","shell.execute_reply":"2025-06-24T07:09:32.583007Z"}},"outputs":[{"execution_count":23,"output_type":"execute_result","data":{"text/plain":"shape: (6_525_979, 77)\n┌─────────┬────────────┬───────────┬───────────┬───┬───────────┬───────────┬───────────┬───────────┐\n│ case_id ┆ actualdpd_ ┆ annuity_8 ┆ approvald ┆ … ┆ credacc_c ┆ credacc_c ┆ num_group ┆ date_deci │\n│ ---     ┆ 943P       ┆ 53A       ┆ ate_319D  ┆   ┆ ards_stat ┆ ards_stat ┆ 2_count   ┆ sion      │\n│ i64     ┆ ---        ┆ ---       ┆ ---       ┆   ┆ us_52L_CA ┆ us_52L_AC ┆ ---       ┆ ---       │\n│         ┆ f64        ┆ f64       ┆ str       ┆   ┆ NCE…      ┆ TIV…      ┆ u32       ┆ str       │\n│         ┆            ┆           ┆           ┆   ┆ ---       ┆ ---       ┆           ┆           │\n│         ┆            ┆           ┆           ┆   ┆ i32       ┆ i32       ┆           ┆           │\n╞═════════╪════════════╪═══════════╪═══════════╪═══╪═══════════╪═══════════╪═══════════╪═══════════╡\n│ 2       ┆ 0.0        ┆ 640.2     ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 2         ┆ 2019-01-0 │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ 4         │\n│ 2       ┆ 0.0        ┆ 1682.4    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 2         ┆ 2019-01-0 │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ 4         │\n│ 3       ┆ 0.0        ┆ 6140.0    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 3         ┆ 2019-01-0 │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ 3         │\n│ 4       ┆ 0.0        ┆ 2556.6    ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 2         ┆ 2019-01-0 │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ 4         │\n│ 5       ┆ 0.0        ┆ null      ┆ null      ┆ … ┆ 1         ┆ 1         ┆ 1         ┆ 2019-01-0 │\n│         ┆            ┆           ┆           ┆   ┆           ┆           ┆           ┆ 2         │\n│ …       ┆ …          ┆ …         ┆ …         ┆ … ┆ …         ┆ …         ┆ …         ┆ …         │\n│ 2703453 ┆ 0.0        ┆ 2827.2    ┆ 2019-12-1 ┆ … ┆ 1         ┆ 1         ┆ 3         ┆ 2020-10-0 │\n│         ┆            ┆           ┆ 8         ┆   ┆           ┆           ┆           ┆ 5         │\n│ 2703453 ┆ 0.0        ┆ 3197.6    ┆ 2014-08-1 ┆ … ┆ 1         ┆ 1         ┆ 2         ┆ 2020-10-0 │\n│         ┆            ┆           ┆ 5         ┆   ┆           ┆           ┆           ┆ 5         │\n│ 2703453 ┆ 0.0        ┆ 5981.4    ┆ 2018-11-1 ┆ … ┆ 1         ┆ 1         ┆ 4         ┆ 2020-10-0 │\n│         ┆            ┆           ┆ 4         ┆   ┆           ┆           ┆           ┆ 5         │\n│ 2703454 ┆ 0.0        ┆ 2986.8    ┆ 2020-06-2 ┆ … ┆ 1         ┆ 1         ┆ 2         ┆ 2020-10-0 │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆ 5         │\n│ 2703454 ┆ 0.0        ┆ 6726.6    ┆ 2019-08-0 ┆ … ┆ 1         ┆ 1         ┆ 4         ┆ 2020-10-0 │\n│         ┆            ┆           ┆ 1         ┆   ┆           ┆           ┆           ┆ 5         │\n└─────────┴────────────┴───────────┴───────────┴───┴───────────┴───────────┴───────────┴───────────┘","text/html":"<div><style>\n.dataframe > thead > tr,\n.dataframe > tbody > tr {\n  text-align: right;\n  white-space: pre-wrap;\n}\n</style>\n<small>shape: (6_525_979, 77)</small><table border=\"1\" class=\"dataframe\"><thead><tr><th>case_id</th><th>actualdpd_943P</th><th>annuity_853A</th><th>approvaldate_319D</th><th>byoccupationinc_3656910L</th><th>cancelreason_3545846M</th><th>childnum_21L</th><th>creationdate_885D</th><th>credacc_actualbalance_314A</th><th>credacc_credlmt_575A</th><th>credacc_maxhisbal_375A</th><th>credacc_minhisbal_90A</th><th>credacc_status_367L</th><th>credacc_transactions_402L</th><th>credamount_590A</th><th>credtype_587L</th><th>currdebt_94A</th><th>dateactivated_425D</th><th>district_544M</th><th>downpmt_134A</th><th>dtlastpmt_581D</th><th>dtlastpmtallstes_3545839D</th><th>education_1138M</th><th>employedfrom_700D</th><th>familystate_726L</th><th>firstnonzeroinstldate_307D</th><th>inittransactioncode_279L</th><th>isbidproduct_390L</th><th>isdebitcard_527L</th><th>mainoccupationinc_437A</th><th>maxdpdtolerance_577P</th><th>num_group1</th><th>outstandingdebt_522A</th><th>pmtnum_8L</th><th>postype_4733339M</th><th>profession_152M</th><th>rejectreason_755M</th><th>&hellip;</th><th>tenor_203L</th><th>is_approval</th><th>cacccardblochreas_147M_nunique</th><th>cacccardblochreas_147M_mode</th><th>cacccardblochreas_147M_P33_145_161_count</th><th>cacccardblochreas_147M_a55475b1_count</th><th>cacccardblochreas_147M_P127_74_114_count</th><th>cacccardblochreas_147M_P19_60_110_count</th><th>cacccardblochreas_147M_Missing Value_count</th><th>cacccardblochreas_147M_P23_105_103_count</th><th>cacccardblochreas_147M_P41_107_150_count</th><th>cacccardblochreas_147M_P133_119_56_count</th><th>cacccardblochreas_147M_P201_63_60_count</th><th>cacccardblochreas_147M_P17_56_144_count</th><th>conts_type_509L_nunique</th><th>conts_type_509L_mode</th><th>conts_type_509L_SKYPE_count</th><th>conts_type_509L_Missing Value_count</th><th>conts_type_509L_EMPLOYMENT_PHONE_count</th><th>conts_type_509L_ALTERNATIVE_PHONE_count</th><th>conts_type_509L_PHONE_count</th><th>conts_type_509L_SECONDARY_MOBILE_count</th><th>conts_type_509L_HOME_PHONE_count</th><th>conts_type_509L_WHATSAPP_count</th><th>conts_type_509L_PRIMARY_EMAIL_count</th><th>conts_type_509L_PRIMARY_MOBILE_count</th><th>credacc_cards_status_52L_nunique</th><th>credacc_cards_status_52L_mode</th><th>credacc_cards_status_52L_UNCONFIRMED_count</th><th>credacc_cards_status_52L_INACTIVE_count</th><th>credacc_cards_status_52L_Missing Value_count</th><th>credacc_cards_status_52L_BLOCKED_count</th><th>credacc_cards_status_52L_RENEWED_count</th><th>credacc_cards_status_52L_CANCELLED_count</th><th>credacc_cards_status_52L_ACTIVE_count</th><th>num_group2_count</th><th>date_decision</th></tr><tr><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>f64</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>str</td><td>bool</td><td>bool</td><td>f64</td><td>f64</td><td>i64</td><td>f64</td><td>f64</td><td>str</td><td>str</td><td>str</td><td>&hellip;</td><td>f64</td><td>str</td><td>u32</td><td>str</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>u32</td><td>str</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>u32</td><td>str</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>i32</td><td>u32</td><td>str</td></tr></thead><tbody><tr><td>2</td><td>0.0</td><td>640.2</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>10000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;2019-01-04&quot;</td></tr><tr><td>2</td><td>0.0</td><td>1682.4</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2013-04-03&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>16000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P136_108_173&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2010-02-15&quot;</td><td>&quot;SINGLE&quot;</td><td>&quot;2013-05-04&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>8200.0</td><td>null</td><td>1</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;EMPLOYMENT_PHONE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;2019-01-04&quot;</td></tr><tr><td>3</td><td>0.0</td><td>6140.0</td><td>null</td><td>null</td><td>&quot;P94_109_143&quot;</td><td>null</td><td>&quot;2019-01-07&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>59999.8</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P131_33_167&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;P97_36_170&quot;</td><td>&quot;2018-05-15&quot;</td><td>&quot;MARRIED&quot;</td><td>&quot;2019-02-07&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>11000.0</td><td>null</td><td>0</td><td>null</td><td>12.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;P94_109_143&quot;</td><td>&hellip;</td><td>12.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;PRIMARY_EMAIL&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;2019-01-03&quot;</td></tr><tr><td>4</td><td>0.0</td><td>2556.6</td><td>null</td><td>null</td><td>&quot;P24_27_36&quot;</td><td>null</td><td>&quot;2019-01-08&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>null</td><td>null</td><td>&quot;P194_82_174&quot;</td><td>0.0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2019-02-08&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>16000.0</td><td>null</td><td>0</td><td>null</td><td>24.0</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>24.0</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;HOME_PHONE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;2019-01-04&quot;</td></tr><tr><td>5</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>&quot;P85_114_140&quot;</td><td>null</td><td>&quot;2019-01-16&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>null</td><td>&quot;P54_133_26&quot;</td><td>null</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>null</td><td>null</td><td>false</td><td>null</td><td>62000.0</td><td>null</td><td>0</td><td>null</td><td>null</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>null</td><td>&quot;Not Approval&quot;</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;PRIMARY_MOBILE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;2019-01-02&quot;</td></tr><tr><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td><td>&hellip;</td></tr><tr><td>2703453</td><td>0.0</td><td>2827.2</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-12-18&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>40000.0</td><td>&quot;CAL&quot;</td><td>34550.855</td><td>&quot;2019-12-23&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-09&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-01-18&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>50000.0</td><td>0.0</td><td>1</td><td>46806.6</td><td>30.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;2020-10-05&quot;</td></tr><tr><td>2703453</td><td>0.0</td><td>3197.6</td><td>&quot;2014-08-15&quot;</td><td>33059.0</td><td>&quot;a55475b1&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>179.424</td><td>0.0</td><td>398.02402</td><td>198.024</td><td>&quot;AC&quot;</td><td>14.0</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2014-08-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2018-08-07&quot;</td><td>&quot;2018-08-07&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;MARRIED&quot;</td><td>&quot;2014-09-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>28000.0</td><td>33.0</td><td>5</td><td>0.0</td><td>48.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>48.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;HOME_PHONE&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;2020-10-05&quot;</td></tr><tr><td>2703453</td><td>0.0</td><td>5981.4</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2018-11-14&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>123800.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2018-11-15&quot;</td><td>&quot;P123_6_84&quot;</td><td>0.0</td><td>&quot;2019-12-17&quot;</td><td>&quot;2019-12-17&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2018-12-15&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>76000.0</td><td>0.0</td><td>2</td><td>0.0</td><td>30.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>30.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>4</td><td>&quot;2020-10-05&quot;</td></tr><tr><td>2703454</td><td>0.0</td><td>2986.8</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2020-06-21&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>15998.0</td><td>&quot;COL&quot;</td><td>5631.406</td><td>&quot;2020-06-23&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>null</td><td>&quot;2020-10-19&quot;</td><td>&quot;a55475b1&quot;</td><td>null</td><td>null</td><td>&quot;2020-07-21&quot;</td><td>&quot;POS&quot;</td><td>false</td><td>null</td><td>24000.0</td><td>0.0</td><td>0</td><td>5919.2</td><td>6.0</td><td>&quot;P177_117_192&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>6.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>2</td><td>&quot;2020-10-05&quot;</td></tr><tr><td>2703454</td><td>0.0</td><td>6726.6</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>&quot;a55475b1&quot;</td><td>null</td><td>&quot;2019-08-01&quot;</td><td>null</td><td>0.0</td><td>null</td><td>null</td><td>null</td><td>null</td><td>60000.0</td><td>&quot;CAL&quot;</td><td>0.0</td><td>&quot;2019-08-20&quot;</td><td>&quot;P48_127_19&quot;</td><td>0.0</td><td>&quot;2020-08-02&quot;</td><td>&quot;2020-08-02&quot;</td><td>&quot;P97_36_170&quot;</td><td>null</td><td>&quot;WIDOWED&quot;</td><td>&quot;2019-09-01&quot;</td><td>&quot;CASH&quot;</td><td>false</td><td>null</td><td>60000.0</td><td>0.0</td><td>1</td><td>0.0</td><td>12.0</td><td>&quot;P46_145_78&quot;</td><td>&quot;a55475b1&quot;</td><td>&quot;a55475b1&quot;</td><td>&hellip;</td><td>12.0</td><td>&quot;Approval&quot;</td><td>1</td><td>&quot;a55475b1&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>3</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>&quot;Missing Value&quot;</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>1</td><td>4</td><td>&quot;2020-10-05&quot;</td></tr></tbody></table></div>"},"metadata":{}}],"execution_count":23},{"cell_type":"code","source":"train_applprev_2, train_applprev_2_dfs = dataloader('train_applprev_2')\n\nprint('Schema của file Applprev')\ntrain_applprev_2.printSchema()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_2.count()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"distinct_df = train_applprev_2.dropDuplicates([\"case_id\", \"num_group1\"])\ndistinct_df.count()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Để đưa về depth 1, ta cần hiểu ý nghĩa của từng cột.\nApplprev là những application previous tính từ thời điểm Chốt Snapshot ở thời điểm case_id ở base data.\n","metadata":{}},{"cell_type":"markdown","source":"- cacccardblochreas_147M: lý do chặn thẻ tin dụng\n- conts_type_509L: Loại liên hệ của người đăng ký\n- credacc_cards_status_52L: Trạng thái của thẻ tín dụng\n","metadata":{}},{"cell_type":"code","source":"train_applprev_2_not_null = train_applprev_2.fillna('Unknown')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import polars as pl\n\ntrain_applprev_2_not_null.write.mode(\"overwrite\").parquet(\"train_applprev_2_fill_null.parquet\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_2_fill_null_process = pl.read_parquet(\"train_applprev_2_fill_null.parquet/*.parquet\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_2_fill_null_process.select([\"case_id\", \"num_group1\"]).unique().height\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import polars as pl\n\n# Đặt lại tên cho gọn hơn\ndf = train_applprev_2_fill_null_process\n\n# Các cột cần xử lý\ncat_cols = [\"cacccardblochreas_147M\", \"conts_type_509L\", \"credacc_cards_status_52L\"]\n\n# Hàm tạo agg cho mỗi cột categoric\nagg_exprs = []\n\nfor colname in cat_cols:\n    prefix = colname\n\n    # nunique và mode\n    agg_exprs.append(pl.col(colname).n_unique().alias(f\"{prefix}_nunique\"))\n    agg_exprs.append(pl.col(colname).mode().first().alias(f\"{prefix}_mode\"))\n\n    # count từng giá trị unique\n    agg_exprs.extend([\n        pl.col(colname).map_elements(lambda x: 1, return_dtype=pl.Int32).alias(f\"{colname}_{val}_count\")\n        for val in df.select(colname).unique().drop_nulls().to_series().to_list()\n    ])\n\n# count cho num_group2\nagg_exprs.append(pl.col(\"num_group2\").count().alias(\"num_group2_count\"))\n\n# Group by case_id và num_group1\nagg_df = df.group_by([\"case_id\", \"num_group1\"]).agg(agg_exprs)\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev2_feature = agg_df.clone()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev2_feature.write_csv('train_applprev_2_feature.csv')","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Applprev1","metadata":{}},{"cell_type":"code","source":"train_applprev_1, train_applprev_1_dfs = dataloader('train_applprev_1')\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_1.filter(col('case_id')==7766).toPandas()\n# train_applprev_1.filter(col('actualdpd_943P')>0).sort(col('case_id'), ascending = True).limit(20).toPandas()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pyspark.sql.functions import when,col\ntrain_applprev_1 = train_applprev_1.withColumn(\n    \"is_approve\",\n    when(col(\"approvaldate_319D\").isNotNull(), 1).otherwise(0)\n)\n\ntrain_applprev_1.limit(100).toPandas()\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pyspark.sql.functions import sum as spark_sum\n\n# Aggregate\nagg_df = train_applprev_1.groupBy(\"case_id\").agg(\n    spark_sum(\"is_approve\").alias(\"is_approve_sum\")\n)\n\n# Join với train_base\njoined_df = train_base.join(agg_df, on=\"case_id\", how=\"left\")\n\n# Fillna cột is_approve_sum = 0\njoined_df = joined_df.fillna({\"is_approve_sum\": -1})\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from pyspark.sql.functions import col\n\njoined_df.filter(\n    (col('is_approve_sum') ==0) & (col('target') == 1)\n).count()\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- Sample size: 1478665/47994\n- Có ít nhất 1 lần được duyệt và bị từ chối: 1048539 ứng với có ít nhất 1 lần được duyệt và được chấp nhận: 35121\n- Không có lịch sử apply và bị từ chối: 298420 ứng với không có lịch sử apply và được duyệt: 6717\n- Lịch sử toàn là bị từ chối và giờ cũng từ chối 131706 ứng với lịch sử toàn bị từ chối và giờ lại được duyệt: 6156","metadata":{}},{"cell_type":"code","source":"joined_df.filter(\n    (col('is_approve_sum')==-1) & (col('target') == 1)\n).count()","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_base.groupBy(\"target\").count().orderBy(\"count\", ascending=False).show()\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"agg_df.filter","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_applprev_1.columns","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"#### Các feature sẽ tạo:\n- num_past_applications:\n1. Lịch sử trả nợ và rủi ro tín dụng:\nactualdpd_943P\n   - max_actualdpd_943P: filter với \n   - min_actualdpd_943P:\n   - avg_actualdpd_943P\n   - std_actualdpd_943P:\n   - sum_actualdpd_943P\n   **- num_app_above_30_actualdpd_943P:**\n\nannuity_853A\n- max_annuity_853A\n- min_annuity_853A\n- avg_annuity_853A\n- std_annuity_853A\n- sum_annuity_853A\n  \napprovaldate_319D\n- first_approvaldate_319D\n- last_approvaldate_319D\n- duration_approvaldate_319D\n\napprovaldate_319D\n- first_approvaldate_319D\n- last_approvaldate_319D\n- duration_approvaldate_319D\n\nbyoccupationinc_3656910L\n- max_byoccupationinc_3656910L\n- min_byoccupationinc_3656910L\n- avg_byoccupationinc_3656910L\n- std_byoccupationinc_3656910L\n- last_byoccupationinc_3656910L\n\ncancelreason_3545846M\n- mode_cancelreason_3545846M\n- last_cancelreason_3545846M\n- nunique_cancelreason_3545846M\n\n- rate_num_cancel (count số lần hủy/ tổng số lần)\n\nchildnum_21L\n- last_childnum_21L\n\ncreationdate_885D        \n- first_creationdate_885D\n- last_creationdate_885D\n- duration_creationdate_885D\n\ncredacc_actualbalance_314A\n- max_credacc_actualbalance_314A\n- min_credacc_actualbalance_314A\n- avg_credacc_actualbalance_314A\n- std_credacc_actualbalance_314A\n\ncredacc_credlmt_575A\n- max_credacc_credlmt_575A\n- min_credacc_credlmt_575A\n- avg_credacc_credlmt_575A\n- std_credacc_credlmt_575A\n- avg_credit_utilization (thực hiện tính 1 cột là credit_utilization = credacc_actualbalance_314A/credacc_credlmt_575A trước khi avg)\n\n\n\n","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}