{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":50160,"databundleVersionId":7602123,"sourceType":"competition"}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import polars as pl\nimport numpy as np\nimport pandas as pd\nimport lightgbm as lgb\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.model_selection import train_test_split\nimport multiprocessing\n\n# Set the data path\ndata_path = \"/kaggle/input/home-credit-credit-risk-model-stability/\"\n\n# Read train data\ntrain_base = pl.read_csv(data_path + \"csv_files/train/train_base.csv\")\n\n# Read and preprocess static data\ntrain_static_0_0 = pl.read_csv(data_path + \"csv_files/train/train_static_0_0.csv\")\ntrain_static_0_1 = pl.read_csv(data_path + \"csv_files/train/train_static_0_1.csv\")\ntrain_static = train_static_0_0.join(train_static_0_1, on=\"case_id\", how=\"outer\")\n\n# Preprocess train data\ndef preprocess(df):\n    for col in df.columns:\n        if df[col].dtype == pl.Object:\n            df[col] = df[col].astype(\"category\")\n    return df\n\ntrain_base = preprocess(train_base)\ntrain_static = preprocess(train_static)\n\n# Merge train tables\ntrain_data = train_base.join(train_static, on=\"case_id\", how=\"left\")\n\n# Get numeric features\nnumeric_features = [col for col, dtype in zip(train_data.columns, train_data.dtypes) if dtype == pl.Float64]\n\n# Select features\nfeatures = numeric_features\n\n# Split train data\nX_train, X_valid = train_test_split(train_data[features], train_size=0.8, random_state=42)\ny_train, y_valid = train_test_split(train_data[\"target\"].to_numpy(), train_size=0.8, random_state=42)\n\n# Define LightGBM parameters with num_threads\nparams = {\n    \"boosting_type\": \"gbdt\",\n    \"objective\": \"binary\",\n    \"metric\": \"auc\",\n    \"max_depth\": 5,\n    \"num_leaves\": 31,\n    \"learning_rate\": 0.05,\n    \"feature_fraction\": 0.9,\n    \"bagging_fraction\": 0.8,\n    \"bagging_freq\": 5,\n    \"verbosity\": -1,\n    \"random_state\": 42,\n    \"early_stopping_rounds\": 100,\n    \"num_threads\": multiprocessing.cpu_count()  # Utilize all available threads\n}\n\n# Train LightGBM model with specified parameters\nlgb_train = lgb.Dataset(X_train, label=y_train)\nlgb_valid = lgb.Dataset(X_valid, label=y_valid, reference=lgb_train)\nmodel = lgb.train(params, lgb_train, valid_sets=[lgb_train, lgb_valid])\n\n# Predictions\ny_train_pred = model.predict(X_train)\ny_valid_pred = model.predict(X_valid)\n\n# Evaluate AUC\nauc_train = roc_auc_score(y_train, y_train_pred)\nauc_valid = roc_auc_score(y_valid, y_valid_pred)\n\nprint(f\"Train AUC: {auc_train}\")\nprint(f\"Valid AUC: {auc_valid}\")\n\n\n# Read test data\n\ntest_0_0 = pl.read_csv(data_path + \"csv_files/test/test_static_0_0.csv\")\ntest_0_1 = pl.read_csv(data_path + \"csv_files/test/test_static_0_1.csv\")\n\ntest_data = pl.concat([test_0_0, test_0_0])\n\n\n# Convert test data to a Pandas DataFrame\nX_test = test_data.to_pandas()\n\n# Convert object columns to numeric data types\nobject_columns = X_test.select_dtypes(include=['object']).columns\nfor col in object_columns:\n    try:\n        X_test[col] = X_test[col].astype('float')\n    except ValueError:\n        # Handle non-convertible columns here\n        X_test[col] = X_test[col].astype('category').cat.codes.astype('float')  # Convert to categorical codes\n\n# Make predictions for test data\ny_test_pred = model.predict(X_test, predict_disable_shape_check=True)\n\n# Save predictions\nsubmission = pd.DataFrame({\"case_id\": X_test[\"case_id\"], \"score\": y_test_pred})\nsubmission = submission.round(1)\nsubmission.reset_index(drop=True, inplace=True)\n\n# Save predictions without index\nsubmission.to_csv(\"/kaggle/working/submission.csv\", columns=[\"case_id\", \"score\"], index=False)\n","metadata":{"execution":{"iopub.status.busy":"2024-02-09T04:46:14.192007Z","iopub.execute_input":"2024-02-09T04:46:14.192739Z","iopub.status.idle":"2024-02-09T04:48:13.227405Z","shell.execute_reply.started":"2024-02-09T04:46:14.192703Z","shell.execute_reply":"2024-02-09T04:48:13.226175Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"execution":{"iopub.status.busy":"2024-02-09T05:21:07.006144Z","iopub.execute_input":"2024-02-09T05:21:07.006577Z","iopub.status.idle":"2024-02-09T05:21:07.088879Z","shell.execute_reply.started":"2024-02-09T05:21:07.006546Z","shell.execute_reply":"2024-02-09T05:21:07.087715Z"},"trusted":true},"execution_count":null,"outputs":[]}]}