{"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":7921029,"sourceType":"competition"},{"sourceId":8357130,"sourceType":"datasetVersion","datasetId":4966144},{"sourceId":8413906,"sourceType":"datasetVersion","datasetId":5008050},{"sourceId":8440404,"sourceType":"datasetVersion","datasetId":5028078},{"sourceId":8444395,"sourceType":"datasetVersion","datasetId":5031576},{"sourceId":8488033,"sourceType":"datasetVersion","datasetId":5063663},{"sourceId":8499250,"sourceType":"datasetVersion","datasetId":5071917},{"sourceId":178158327,"sourceType":"kernelVersion"}],"dockerImageVersionId":30698,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"%%capture\n!python /kaggle/usr/lib/script1/script1.py","metadata":{"_uuid":"e5f8f072-a3b5-4104-9e08-43a17ad6a013","_cell_guid":"8fad5fc6-c963-4313-b01c-34b86d44df49","collapsed":false,"jupyter":{"outputs_hidden":false},"execution":{"iopub.status.busy":"2024-05-26T23:56:17.108406Z","iopub.execute_input":"2024-05-26T23:56:17.108866Z","iopub.status.idle":"2024-05-26T23:58:51.232586Z","shell.execute_reply.started":"2024-05-26T23:56:17.108831Z","shell.execute_reply":"2024-05-26T23:58:51.231100Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%capture\n!python /kaggle/input/script2/model.py","metadata":{"execution":{"iopub.status.busy":"2024-05-26T23:58:51.235550Z","iopub.execute_input":"2024-05-26T23:58:51.236020Z","iopub.status.idle":"2024-05-26T23:59:06.649652Z","shell.execute_reply.started":"2024-05-26T23:58:51.235975Z","shell.execute_reply":"2024-05-26T23:59:06.641021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\nfrom pathlib import Path\nimport subprocess\nimport os\nimport gc\nfrom glob import glob\n\nimport numpy as np\nimport pandas as pd\nimport polars as pl\nfrom datetime import datetime\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\nfrom sklearn.model_selection import TimeSeriesSplit, GroupKFold, StratifiedGroupKFold\nfrom sklearn.base import BaseEstimator, RegressorMixin\nfrom sklearn.metrics import roc_auc_score\nimport lightgbm as lgb\nimport joblib\nfrom imblearn.over_sampling import SMOTE\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom sklearn.impute import KNNImputer","metadata":{"execution":{"iopub.status.busy":"2024-05-26T23:59:06.662757Z","iopub.execute_input":"2024-05-26T23:59:06.664111Z","iopub.status.idle":"2024-05-26T23:59:10.081974Z","shell.execute_reply.started":"2024-05-26T23:59:06.663899Z","shell.execute_reply":"2024-05-26T23:59:10.080489Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train,y,df_test=joblib.load('/kaggle/working/data.pkl')","metadata":{"execution":{"iopub.status.busy":"2024-05-26T23:59:10.084749Z","iopub.execute_input":"2024-05-26T23:59:10.085598Z","iopub.status.idle":"2024-05-26T23:59:16.866312Z","shell.execute_reply.started":"2024-05-26T23:59:10.085537Z","shell.execute_reply":"2024-05-26T23:59:16.865240Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fitted_models_lgb=[]\nmodel = lgb.LGBMClassifier()\nmodel.fit(df_train,y)\nfitted_models_lgb.append(model)  ","metadata":{"execution":{"iopub.status.busy":"2024-05-26T23:59:16.869711Z","iopub.execute_input":"2024-05-26T23:59:16.870130Z","iopub.status.idle":"2024-05-27T00:01:21.619746Z","shell.execute_reply.started":"2024-05-26T23:59:16.870095Z","shell.execute_reply":"2024-05-27T00:01:21.618337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class VotingModel(BaseEstimator, RegressorMixin):\n    def __init__(self, estimators):\n        super().__init__()\n        self.estimators = estimators\n        \n    def fit(self, X, y=None):\n        return self\n    \n    def predict(self, X):\n        y_preds = [estimator.predict(X) for estimator in self.estimators]\n        return np.mean(y_preds, axis=0)\n    \n    def predict_proba(self, X):\n        y_preds = [estimator.predict_proba(X) for estimator in self.estimators]\n        \n        return np.mean(y_preds, axis=0)\n\nmodel = VotingModel(fitted_models_lgb)","metadata":{"execution":{"iopub.status.busy":"2024-05-27T00:01:21.621249Z","iopub.execute_input":"2024-05-27T00:01:21.621620Z","iopub.status.idle":"2024-05-27T00:01:21.630450Z","shell.execute_reply.started":"2024-05-27T00:01:21.621590Z","shell.execute_reply":"2024-05-27T00:01:21.628897Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ROOT            = Path(\"/kaggle/input/home-credit-credit-risk-model-stability\")\nTEST_DIR        = ROOT / \"parquet_files\" / \"test\"\ndef getDate(regex_path):\n    chunks = []\n    for path in glob(str(regex_path)):\n        exps = [\n            pl.col(\"dpdmaxdateyear_596T\").max().alias(\"year\"),\n            pl.col(\"dpdmaxdatemonth_89T\").filter(pl.col(\"dpdmaxdateyear_596T\") == pl.col(\"dpdmaxdateyear_596T\").max()).max().alias(\"month\"),#同一年份最大月份\n        ]\n        df = pl.read_parquet(path).group_by(\"case_id\").agg(exps)\n        chunks.append(df)\n    \n    df = pl.concat(chunks, how=\"vertical_relaxed\")\n    df = df.unique(subset=[\"case_id\"])\n\n    df = df.to_pandas()\n    \n    df = df.drop(index = df.index[df[\"year\"].isna()])\n    # df[\"year\"].fillna(\"2019\", inplace=True)\n    df[\"month\"].fillna(\"12\", inplace=True)\n\n    df[\"year\"] = df[\"year\"].astype(int).astype(str)\n    df[\"month\"] = df[\"month\"].astype(int).astype(str)\n    df[\"datetime\"] = pd.to_datetime(df[\"year\"] + \"-\" + df[\"month\"], format=\"%Y-%m\")\n    df.drop(columns=[\"year\",\"month\"],inplace=True)\n    # df = df.drop(index=df.index[df[\"datetime\"] == pd.to_datetime(\"2019-01-01\")])\n    \n    df.set_index(\"case_id\",drop=True,inplace=True)\n    \n    return df\nregex_path = TEST_DIR / \"test_credit_bureau_a_1_*.parquet\"\ndf_test_date = getDate(regex_path)\ndf_test_date","metadata":{"execution":{"iopub.status.busy":"2024-05-27T00:01:21.632292Z","iopub.execute_input":"2024-05-27T00:01:21.632671Z","iopub.status.idle":"2024-05-27T00:01:21.707009Z","shell.execute_reply.started":"2024-05-27T00:01:21.632639Z","shell.execute_reply":"2024-05-27T00:01:21.705657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"splitDate = df_test_date[\"datetime\"].quantile(0.80)\nprint(splitDate)","metadata":{"execution":{"iopub.status.busy":"2024-05-27T00:01:21.708994Z","iopub.execute_input":"2024-05-27T00:01:21.709484Z","iopub.status.idle":"2024-05-27T00:01:21.720424Z","shell.execute_reply.started":"2024-05-27T00:01:21.709440Z","shell.execute_reply":"2024-05-27T00:01:21.718853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = df_test.drop(columns=[\"WEEK_NUM\",'target'])\ndf_test = df_test.set_index(\"case_id\")\n\ny_pred = pd.Series(model.predict_proba(df_test)[:,1], index=df_test.index)\ndf_subm = pd.read_csv(\"/kaggle/working/sub.csv\")\ndf_subm = df_subm.set_index(\"case_id\")\ndf_subm = df_subm.merge(df_test_date, on='case_id', how='left')\ndf_subm[\"datetime\"] = df_subm[\"datetime\"].fillna(pd.to_datetime('2001-01-01'))\ndf_subm[\"similarity\"]=y_pred\ncondition = (df_subm['similarity'] < 0.992) \n\n!rm -rf data.pkl\ndf_subm","metadata":{"execution":{"iopub.status.busy":"2024-05-27T00:01:21.722743Z","iopub.execute_input":"2024-05-27T00:01:21.723147Z","iopub.status.idle":"2024-05-27T00:01:23.056285Z","shell.execute_reply.started":"2024-05-27T00:01:21.723093Z","shell.execute_reply":"2024-05-27T00:01:23.054732Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_subm.loc[condition, 'score'] = (df_subm.loc[condition, 'score'] - 0.0595).clip(0)\ndf_subm=df_subm.drop(columns=['datetime','similarity'])\ndf_subm.to_csv(\"submission.csv\")\ndf_subm","metadata":{"execution":{"iopub.status.busy":"2024-05-27T00:01:23.058459Z","iopub.execute_input":"2024-05-27T00:01:23.058967Z","iopub.status.idle":"2024-05-27T00:01:23.082415Z","shell.execute_reply.started":"2024-05-27T00:01:23.058917Z","shell.execute_reply":"2024-05-27T00:01:23.081232Z"},"trusted":true},"execution_count":null,"outputs":[]}]}