{"metadata":{"kernelspec":{"display_name":"anaconda-panel-2023.05-py310","language":"python","name":"conda-env-anaconda-panel-2023.05-py310-py"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.11.5"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":35332,"databundleVersionId":3723648,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"id":"77ccc02a-789d-42b7-b4b0-42bf0cab41a9","cell_type":"code","source":"!pip install lightgbm shap catboost --quiet\n\nimport pandas as pd\nimport numpy as np\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\nfrom sklearn.metrics import roc_auc_score\nimport lightgbm as lgb\nimport shap\nimport matplotlib.pyplot as plt\nimport warnings\nwarnings.filterwarnings('ignore')","metadata":{},"outputs":[],"execution_count":null},{"id":"cd0bae28-a92c-48a7-9b5e-86cf82dd6bf5","cell_type":"code","source":"train = pd.read_csv('/kaggle/input/amex-default-prediction/train_data.csv')\ntest = pd.read_csv('/kaggle/input/amex-default-prediction/test_data.csv')\ntrain_labels = pd.read_csv('/kaggle/input/amex-default-prediction/train_labels.csv')\nsample_submission = pd.read_csv('/kaggle/input/amex-default-prediction/sample_submission.csv')","metadata":{},"outputs":[],"execution_count":null},{"id":"c0d2fe27-2d7b-4bcb-be95-cebd0d69f375","cell_type":"code","source":"train = train.merge(train_labels, on='customer_ID', how='left')","metadata":{},"outputs":[],"execution_count":null},{"id":"78627bfc-95a0-402f-84f9-78d74fd49f21","cell_type":"code","source":"train.drop(['customer_ID', 'S_2'], axis=1, inplace=True)\ntest_ids = test['customer_ID']\ntest.drop(['customer_ID', 'S_2'], axis=1, inplace=True)","metadata":{},"outputs":[],"execution_count":null},{"id":"4078e349-1e56-4ae8-ae7a-024711fd40d7","cell_type":"code","source":"cat_cols = train.select_dtypes(include='object').columns\nencoders = {}\n\nfor col in cat_cols:\n    enc = LabelEncoder()\n    combined = pd.concat([train[col], test[col]], axis=0).astype(str)\n    enc.fit(combined)\n    train[col] = enc.transform(train[col].astype(str))\n    test[col] = enc.transform(test[col].astype(str))\n    encoders[col] = enc","metadata":{},"outputs":[],"execution_count":null},{"id":"e65a50bb-02a5-4df5-9a7c-6a6b835ad560","cell_type":"code","source":"train.fillna(-999, inplace=True)\ntest.fillna(-999, inplace=True)","metadata":{},"outputs":[],"execution_count":null},{"id":"0d067c40-1eb6-4698-a0c1-8396a189478d","cell_type":"code","source":"X = train.drop('target', axis=1)\ny = train['target']\nX_train, X_val, y_train, y_val = train_test_split(X, y, stratify=y, test_size=0.2, random_state=42)","metadata":{},"outputs":[],"execution_count":null},{"id":"377fd3c6-c72b-47df-83a6-c85806baa96d","cell_type":"code","source":"from lightgbm import early_stopping, log_evaluation\n\nmodel = lgb.LGBMClassifier(n_estimators=1000, learning_rate=0.05)\n\nmodel.fit(\n    X_train, y_train,\n    eval_set=[(X_val, y_val)],\n    callbacks=[early_stopping(stopping_rounds=50), log_evaluation(period=100)]\n)\n","metadata":{},"outputs":[],"execution_count":null},{"id":"65b92499-107f-4645-b3a5-b5fc5ac7c02b","cell_type":"code","source":"val_preds = model.predict_proba(X_val)[:, 1]\nauc = roc_auc_score(y_val, val_preds)\nprint(f'Validation AUC: {auc:.4f}')","metadata":{},"outputs":[],"execution_count":null},{"id":"1bef9f67-dedc-4a14-814e-fe796d150927","cell_type":"code","source":"test_preds = model.predict_proba(test)[:, 1]\nsubmission = pd.DataFrame({'customer_ID': test_ids, 'prediction': test_preds})\nsubmission.to_csv('submission.csv', index=False)","metadata":{},"outputs":[],"execution_count":null},{"id":"86b48198-34a5-416c-b715-0a66d31a7bc1","cell_type":"code","source":"explainer = shap.TreeExplainer(model)\nshap_values = explainer.shap_values(X_val[:1000])  # Subsample for speed\n\nshap.summary_plot(shap_values, X_val[:1000], plot_type=\"bar\")","metadata":{},"outputs":[],"execution_count":null},{"id":"99bb38f1-50f1-41cc-aa30-704816799d9e","cell_type":"code","source":"lgb.plot_importance(model, max_num_features=10)\nplt.title(\"Top 10 Features\")\nplt.show()","metadata":{},"outputs":[],"execution_count":null},{"id":"d07696d4-1e07-4190-9194-994629227355","cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null}]}