{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Script para generar la solución del Tercer Benchmark de la Competencia\n\n## Si no presentaste aún tu primera solución, tenes la oportunidad de hacerlo en pocos Clicks!\n\n**Hola! **  \n  \nEste Script es un Ejemplo de Procesamiento de los Datos, Modelado y Generación de una Solución.\n\nAgregamos una pequeña explicación de lo que se hace en cada paso para ayudar a los que están comenzando ahora\n"},{"metadata":{},"cell_type":"markdown","source":"### Importamos las librerías que vamos a utilizar"},{"metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","trusted":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom lightgbm import LGBMClassifier\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.model_selection import KFold\nimport re\nimport gc","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Lectura de las Bases\n\nObservamos los datos que tenemos disponibles en https://www.kaggle.com/c/interbank20/data\n\n\n#### En este caso, vamos a descartar la base de censo, dado que empeora lo resultados. Este tipo de comportamiento es inusual pero no inesperado. Merecería un estudio detallado para saber con más precisión por qué esto ocurre, pero a priori, parecería ser que las variables del censo son relevantes (ergo, el modelo las usa) pero, por su antigüedad, son menos relevantes para el período de test (probablemente por no estar ya vigentes). Por lo tanto, estaríamos frente a una perturbación de la distribución del input, lo que perjudica al modelo que depende de las variables alteradas."},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train = pd.read_csv(\"/kaggle/input/interbank20/rcc_train.csv\")\nse_train = pd.read_csv(\"/kaggle/input/interbank20/se_train.csv\", index_col=\"key_value\")\nsunat_train = pd.read_csv(\"/kaggle/input/interbank20/sunat_train.csv\")\ny_train = pd.read_csv(\"/kaggle/input/interbank20/y_train.csv\", index_col=\"key_value\").target\n\nrcc_test= pd.read_csv(\"/kaggle/input/interbank20/rcc_test.csv\")\nse_test= pd.read_csv(\"/kaggle/input/interbank20/se_test.csv\", index_col=\"key_value\")\nsunat_test= pd.read_csv(\"/kaggle/input/interbank20/sunat_test.csv\")\n\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"max_mes_train=201802\nmax_mes_test=201902","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Vamos a trabajar ahora con la base de **RCC**:\n\nEl principal problema que tiene esta base es su estructura temporal, que consiste de múltiples series de tiempo, una por cada producto en cada banco. \n"},{"metadata":{},"cell_type":"markdown","source":"> ULTIMO_MES"},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=pd.DataFrame(rcc_train[(rcc_train.codmes == max_mes_train)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max())\nrcc_test_riesgo=pd.DataFrame(rcc_test[(rcc_test.codmes == max_mes_test)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max())\nrcc_train_riesgo.rename(columns={'condicion':'FE_ULTMES_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_max_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_ULTMES_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={ 'condicion':'FE_ULTMES_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_max_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_ULTMES_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train[(rcc_train.codmes == max_mes_train)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo' ,'COD_CLASIFICACION_DEUDOR']].sum()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test[(rcc_test.codmes == max_mes_test)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_ULTMES_sum_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_sum_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_sum_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_ULTMES_sum_condicion',\n                                'RIESGO_DIRECTO' : 'FE_ULTMES_sum_RIESGO_DIRECTO',\n                                'saldo' : 'FE_ULTMES_sum_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train[(rcc_train.codmes == max_mes_train)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test[(rcc_test.codmes == max_mes_test)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_ULTMES_mean_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_mean_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_mean_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_ULTMES_mean_condicion',\n                                'RIESGO_DIRECTO' : 'FE_ULTMES_mean_RIESGO_DIRECTO',\n                                'saldo' : 'FE_ULTMES_mean_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train[(rcc_train.codmes == max_mes_train)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test[(rcc_test.codmes == max_mes_test)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_ULTMES_min_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_min_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_min_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_ULTMES_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_ULTMES_min_condicion',\n                                'RIESGO_DIRECTO' : 'FE_ULTMES_min_RIESGO_DIRECTO',\n                                'saldo' : 'FE_ULTMES_min_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_ULTMES_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train[(rcc_train.codmes == max_mes_train)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test[(rcc_test.codmes == max_mes_test)].groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_ULTMES_count_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_ULTMES_count_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_ULTMES_count_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_ULTMES_count_condicion',\n                                'RIESGO_DIRECTO' : 'FE_ULTMES_count_RIESGO_DIRECTO',\n                                'saldo' : 'FE_ULTMES_count_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR':'FE_ULTMES_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> LAG1"},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_lag1=pd.DataFrame(rcc_train[(rcc_train.codmes < max_mes_train)].groupby('key_value')[['codmes']].max())\nrcc_test_lag1=pd.DataFrame(rcc_test[(rcc_test.codmes < max_mes_test)].groupby('key_value')[['codmes']].max())\nrcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(pd.merge(left=rcc_train_lag1, right=rcc_train, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max()), how=\"left\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(pd.merge(left=rcc_test_lag1, right=rcc_test, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max()), how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG1_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG1_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG1_max_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG1_max_condicion',\n                                'RIESGO_DIRECTO' : 'FE_LAG1_max_RIESGO_DIRECTO',\n                                'saldo' : 'FE_LAG1_max_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(pd.merge(left=rcc_train_lag1, right=rcc_train, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum()), how=\"left\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(pd.merge(left=rcc_test_lag1, right=rcc_test, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum()), how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG1_sum_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG1_sum_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG1_sum_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG1_sum_condicion',\n                                'RIESGO_DIRECTO' : 'FE_LAG1_sum_RIESGO_DIRECTO',\n                                'saldo' : 'FE_LAG1_sum_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(pd.merge(left=rcc_train_lag1, right=rcc_train, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"left\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(pd.merge(left=rcc_test_lag1, right=rcc_test, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG1_mean_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG1_mean_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG1_mean_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG1_mean_condicion',\n                                'RIESGO_DIRECTO' : 'FE_LAG1_mean_RIESGO_DIRECTO',\n                                'saldo' : 'FE_LAG1_mean_saldo'\n                               ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(pd.merge(left=rcc_train_lag1, right=rcc_train, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"left\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(pd.merge(left=rcc_test_lag1, right=rcc_test, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG1_min_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG1_min_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG1_min_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG1_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG1_min_condicion',\n                                'RIESGO_DIRECTO' : 'FE_LAG1_min_RIESGO_DIRECTO',\n                                'saldo' : 'FE_LAG1_min_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG1_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(pd.merge(left=rcc_train_lag1, right=rcc_train, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"left\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(pd.merge(left=rcc_test_lag1, right=rcc_test, left_on=['key_value','codmes'], right_on=['key_value','codmes']).groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG1_count_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG1_count_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG1_count_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG1_count_condicion',\n                                'RIESGO_DIRECTO' : 'FE_LAG1_count_RIESGO_DIRECTO',\n                                'saldo' : 'FE_LAG1_count_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG1_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> LAG2 (rebuscado)"},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_hist=pd.DataFrame(rcc_train.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max())\nrcc_train_lag1.reset_index(inplace=True) \nrcc_train_lag1=rcc_train_lag1.set_index(['key_value','codmes'])\nrcc_train_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_train_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_train_lag2=df_hist[(df_hist.codmes<max_mes_train) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value','codmes'])\nrcc_train_lag2=rcc_train_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value'])\nrcc_train_lag2=rcc_train_lag2.drop(['codmes'] , axis=1)\nrcc_train_riesgo=rcc_train_riesgo.join(rcc_train_lag2, how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG2_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_max_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG2_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n#TEST\nrcc_hist=pd.DataFrame(rcc_test.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max())\nrcc_test_lag1.reset_index(inplace=True) \nrcc_test_lag1=rcc_test_lag1.set_index(['key_value','codmes'])\nrcc_test_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_test_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_test_lag2=df_hist[(df_hist.codmes<max_mes_test) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value','codmes'])\nrcc_test_lag2=rcc_test_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value'])\nrcc_test_lag2=rcc_test_lag2.drop(['codmes'] , axis=1)\nrcc_test_riesgo=rcc_test_riesgo.join(rcc_test_lag2, how=\"left\")\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG2_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_max_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG2_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n\ndel rcc_hist,df_hist,rcc_train_lag2,rcc_test_lag2\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_hist=pd.DataFrame(rcc_train.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum())\nrcc_train_lag1.reset_index(inplace=True) \nrcc_train_lag1=rcc_train_lag1.set_index(['key_value','codmes'])\nrcc_train_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_train_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_train_lag2=df_hist[(df_hist.codmes<max_mes_train) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value','codmes'])\nrcc_train_lag2=rcc_train_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value'])\nrcc_train_lag2=rcc_train_lag2.drop(['codmes'] , axis=1)\nrcc_train_riesgo=rcc_train_riesgo.join(rcc_train_lag2, how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG2_sum_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_sum_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_sum_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n#TEST\nrcc_hist=pd.DataFrame(rcc_test.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum())\nrcc_test_lag1.reset_index(inplace=True) \nrcc_test_lag1=rcc_test_lag1.set_index(['key_value','codmes'])\nrcc_test_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_test_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_test_lag2=df_hist[(df_hist.codmes<max_mes_test) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value','codmes'])\nrcc_test_lag2=rcc_test_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value'])\nrcc_test_lag2=rcc_test_lag2.drop(['codmes'] , axis=1)\nrcc_test_riesgo=rcc_test_riesgo.join(rcc_test_lag2, how=\"left\")\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG2_sum_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_sum_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_sum_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n\ndel rcc_hist,df_hist,rcc_train_lag2,rcc_test_lag2\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_hist=pd.DataFrame(rcc_train.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean())\nrcc_train_lag1.reset_index(inplace=True) \nrcc_train_lag1=rcc_train_lag1.set_index(['key_value','codmes'])\nrcc_train_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_train_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_train_lag2=df_hist[(df_hist.codmes<max_mes_train) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value','codmes'])\nrcc_train_lag2=rcc_train_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value'])\nrcc_train_lag2=rcc_train_lag2.drop(['codmes'] , axis=1)\nrcc_train_riesgo=rcc_train_riesgo.join(rcc_train_lag2, how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG2_mean_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_mean_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_mean_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG2_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n#TEST\nrcc_hist=pd.DataFrame(rcc_test.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean())\nrcc_test_lag1.reset_index(inplace=True) \nrcc_test_lag1=rcc_test_lag1.set_index(['key_value','codmes'])\nrcc_test_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_test_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_test_lag2=df_hist[(df_hist.codmes<max_mes_test) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value','codmes'])\nrcc_test_lag2=rcc_test_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value'])\nrcc_test_lag2=rcc_test_lag2.drop(['codmes'] , axis=1)\nrcc_test_riesgo=rcc_test_riesgo.join(rcc_test_lag2, how=\"left\")\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG2_mean_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_mean_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_mean_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_LAG2_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n\ndel rcc_hist,df_hist,rcc_train_lag2,rcc_test_lag2\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_hist=pd.DataFrame(rcc_train.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min())\nrcc_train_lag1.reset_index(inplace=True) \nrcc_train_lag1=rcc_train_lag1.set_index(['key_value','codmes'])\nrcc_train_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_train_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_train_lag2=df_hist[(df_hist.codmes<max_mes_train) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value','codmes'])\nrcc_train_lag2=rcc_train_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value'])\nrcc_train_lag2=rcc_train_lag2.drop(['codmes'] , axis=1)\nrcc_train_riesgo=rcc_train_riesgo.join(rcc_train_lag2, how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG2_min_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_min_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_min_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n#TEST\nrcc_hist=pd.DataFrame(rcc_test.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min())\nrcc_test_lag1.reset_index(inplace=True) \nrcc_test_lag1=rcc_test_lag1.set_index(['key_value','codmes'])\nrcc_test_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_test_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_test_lag2=df_hist[(df_hist.codmes<max_mes_test) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value','codmes'])\nrcc_test_lag2=rcc_test_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value'])\nrcc_test_lag2=rcc_test_lag2.drop(['codmes'] , axis=1)\nrcc_test_riesgo=rcc_test_riesgo.join(rcc_test_lag2, how=\"left\")\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG2_min_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_min_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_min_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n\ndel rcc_hist,df_hist,rcc_train_lag2,rcc_test_lag2\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_hist=pd.DataFrame(rcc_train.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count())\nrcc_train_lag1.reset_index(inplace=True) \nrcc_train_lag1=rcc_train_lag1.set_index(['key_value','codmes'])\nrcc_train_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_train_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_train_lag2=df_hist[(df_hist.codmes<max_mes_train) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value','codmes'])\nrcc_train_lag2=rcc_train_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_train_lag2.reset_index(inplace=True) \nrcc_train_lag2=rcc_train_lag2.set_index(['key_value'])\nrcc_train_lag2=rcc_train_lag2.drop(['codmes'] , axis=1)\nrcc_train_riesgo=rcc_train_riesgo.join(rcc_train_lag2, how=\"left\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_LAG2_count_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_count_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_count_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n#TEST\nrcc_hist=pd.DataFrame(rcc_test.groupby(['key_value','codmes'])[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count())\nrcc_test_lag1.reset_index(inplace=True) \nrcc_test_lag1=rcc_test_lag1.set_index(['key_value','codmes'])\nrcc_test_lag1['flag']=1\ndf_hist=rcc_hist.join(rcc_test_lag1,rsuffix='_lag1',how='left')\ndf_hist.reset_index(inplace=True) \ndf_hist=df_hist.set_index(['key_value'])\nrcc_test_lag2=df_hist[(df_hist.codmes<max_mes_test) & pd.isnull(df_hist.flag)].groupby(['key_value'])[['codmes']].max()\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value','codmes'])\nrcc_test_lag2=rcc_test_lag2.join(rcc_hist,rsuffix='_lag2',how='inner')\nrcc_test_lag2.reset_index(inplace=True) \nrcc_test_lag2=rcc_test_lag2.set_index(['key_value'])\nrcc_test_lag2=rcc_test_lag2.drop(['codmes'] , axis=1)\nrcc_test_riesgo=rcc_test_riesgo.join(rcc_test_lag2, how=\"left\")\nrcc_test_riesgo.rename(columns={'condicion':'FE_LAG2_count_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_LAG2_count_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_LAG2_count_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR' : 'FE_LAG2_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\n\ndel rcc_hist,df_hist,rcc_train_lag2,rcc_test_lag2\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> HISTORICO"},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].max()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_max_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={ 'condicion':'FE_max_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_max_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_max_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_max_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].sum()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_sum_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_sum_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_sum_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_sum_condicion',\n                                'RIESGO_DIRECTO' : 'FE_sum_RIESGO_DIRECTO',\n                                'saldo' : 'FE_sum_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_sum_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].min()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_min_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_min_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_min_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_min_condicion',\n                                'RIESGO_DIRECTO' : 'FE_min_RIESGO_DIRECTO',\n                                'saldo' : 'FE_min_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_min_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].mean()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_mean_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_mean_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_mean_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_mean_condicion',\n                                'RIESGO_DIRECTO' : 'FE_mean_RIESGO_DIRECTO',\n                                'saldo' : 'FE_mean_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_mean_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo=rcc_train_riesgo.join(pd.DataFrame(rcc_train.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"inner\")\nrcc_test_riesgo=rcc_test_riesgo.join(pd.DataFrame(rcc_test.groupby('key_value')[['condicion','RIESGO_DIRECTO','saldo','COD_CLASIFICACION_DEUDOR']].count()), how=\"inner\")\nrcc_train_riesgo.rename(columns={'condicion':'FE_count_condicion',\n                                 'RIESGO_DIRECTO' : 'FE_count_RIESGO_DIRECTO',\n                                 'saldo' : 'FE_count_saldo'\n                                 ,'COD_CLASIFICACION_DEUDOR': 'FE_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)\nrcc_test_riesgo.rename(columns={'condicion':'FE_count_condicion',\n                                'RIESGO_DIRECTO' : 'FE_count_RIESGO_DIRECTO',\n                                'saldo' : 'FE_count_saldo'\n                                ,'COD_CLASIFICACION_DEUDOR': 'FE_count_COD_CLASIFICACION_DEUDOR'\n                    },inplace=True)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> VARIACIONES ENTRE MESES"},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_ULTMES_max_condicion']=rcc_train_riesgo.FE_ULTMES_max_condicion - rcc_train_riesgo.FE_LAG1_max_condicion\nrcc_train_riesgo['FE_VAR_ULTMES_sum_condicion']=rcc_train_riesgo.FE_ULTMES_sum_condicion - rcc_train_riesgo.FE_LAG1_sum_condicion\nrcc_train_riesgo['FE_VAR_ULTMES_mean_condicion']=rcc_train_riesgo.FE_ULTMES_mean_condicion - rcc_train_riesgo.FE_LAG1_mean_condicion\nrcc_train_riesgo['FE_VAR_ULTMES_min_condicion']=rcc_train_riesgo.FE_ULTMES_min_condicion - rcc_train_riesgo.FE_LAG1_min_condicion\nrcc_train_riesgo['FE_VAR_ULTMES_count_condicion']=rcc_train_riesgo.FE_ULTMES_count_condicion - rcc_train_riesgo.FE_LAG1_count_condicion\nrcc_test_riesgo['FE_VAR_ULTMES_max_condicion']=rcc_test_riesgo.FE_ULTMES_max_condicion - rcc_test_riesgo.FE_LAG1_max_condicion\nrcc_test_riesgo['FE_VAR_ULTMES_sum_condicion']=rcc_test_riesgo.FE_ULTMES_sum_condicion - rcc_test_riesgo.FE_LAG1_sum_condicion\nrcc_test_riesgo['FE_VAR_ULTMES_mean_condicion']=rcc_test_riesgo.FE_ULTMES_mean_condicion - rcc_test_riesgo.FE_LAG1_mean_condicion\nrcc_test_riesgo['FE_VAR_ULTMES_min_condicion']=rcc_test_riesgo.FE_ULTMES_min_condicion - rcc_test_riesgo.FE_LAG1_min_condicion\nrcc_test_riesgo['FE_VAR_ULTMES_count_condicion']=rcc_test_riesgo.FE_ULTMES_count_condicion - rcc_test_riesgo.FE_LAG1_count_condicion","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAG2_max_condicion']=rcc_train_riesgo.FE_ULTMES_max_condicion - rcc_train_riesgo.FE_LAG2_max_condicion\nrcc_train_riesgo['FE_VAR_LAG2_sum_condicion']=rcc_train_riesgo.FE_ULTMES_sum_condicion - rcc_train_riesgo.FE_LAG2_sum_condicion\nrcc_train_riesgo['FE_VAR_LAG2_mean_condicion']=rcc_train_riesgo.FE_ULTMES_mean_condicion - rcc_train_riesgo.FE_LAG2_mean_condicion\nrcc_train_riesgo['FE_VAR_LAG2_min_condicion']=rcc_train_riesgo.FE_ULTMES_min_condicion - rcc_train_riesgo.FE_LAG2_min_condicion\nrcc_train_riesgo['FE_VAR_LAG2_count_condicion']=rcc_train_riesgo.FE_ULTMES_count_condicion - rcc_train_riesgo.FE_LAG2_count_condicion\nrcc_test_riesgo['FE_VAR_LAG2_max_condicion']=rcc_test_riesgo.FE_ULTMES_max_condicion - rcc_test_riesgo.FE_LAG2_max_condicion\nrcc_test_riesgo['FE_VAR_LAG2_sum_condicion']=rcc_test_riesgo.FE_ULTMES_sum_condicion - rcc_test_riesgo.FE_LAG2_sum_condicion\nrcc_test_riesgo['FE_VAR_LAG2_mean_condicion']=rcc_test_riesgo.FE_ULTMES_mean_condicion - rcc_test_riesgo.FE_LAG2_mean_condicion\nrcc_test_riesgo['FE_VAR_LAG2_min_condicion']=rcc_test_riesgo.FE_ULTMES_min_condicion - rcc_test_riesgo.FE_LAG2_min_condicion\nrcc_test_riesgo['FE_VAR_LAG2_count_condicion']=rcc_test_riesgo.FE_ULTMES_count_condicion - rcc_test_riesgo.FE_LAG2_count_condicion","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAGs_max_condicion']=rcc_train_riesgo.FE_LAG1_max_condicion - rcc_train_riesgo.FE_LAG2_max_condicion\nrcc_train_riesgo['FE_VAR_LAGs_sum_condicion']=rcc_train_riesgo.FE_LAG1_sum_condicion - rcc_train_riesgo.FE_LAG2_sum_condicion\nrcc_train_riesgo['FE_VAR_LAGs_mean_condicion']=rcc_train_riesgo.FE_LAG1_mean_condicion - rcc_train_riesgo.FE_LAG2_mean_condicion\nrcc_train_riesgo['FE_VAR_LAGs_min_condicion']=rcc_train_riesgo.FE_LAG1_min_condicion - rcc_train_riesgo.FE_LAG2_min_condicion\nrcc_train_riesgo['FE_VAR_LAGs_count_condicion']=rcc_train_riesgo.FE_LAG1_count_condicion - rcc_train_riesgo.FE_LAG2_count_condicion\nrcc_test_riesgo['FE_VAR_LAGs_max_condicion']=rcc_test_riesgo.FE_LAG1_max_condicion - rcc_test_riesgo.FE_LAG2_max_condicion\nrcc_test_riesgo['FE_VAR_LAGs_sum_condicion']=rcc_test_riesgo.FE_LAG1_sum_condicion - rcc_test_riesgo.FE_LAG2_sum_condicion\nrcc_test_riesgo['FE_VAR_LAGs_mean_condicion']=rcc_test_riesgo.FE_LAG1_mean_condicion - rcc_test_riesgo.FE_LAG2_mean_condicion\nrcc_test_riesgo['FE_VAR_LAGs_min_condicion']=rcc_test_riesgo.FE_LAG1_min_condicion - rcc_test_riesgo.FE_LAG2_min_condicion\nrcc_test_riesgo['FE_VAR_LAGs_count_condicion']=rcc_test_riesgo.FE_LAG1_count_condicion - rcc_test_riesgo.FE_LAG2_count_condicion","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_ULTMES_max_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_max_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG1_max_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_ULTMES_sum_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_sum_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG1_sum_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_ULTMES_mean_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_mean_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG1_mean_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_ULTMES_min_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG1_min_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_ULTMES_count_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG1_count_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_ULTMES_max_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_max_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG1_max_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_ULTMES_sum_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_sum_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG1_sum_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_ULTMES_mean_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_mean_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG1_mean_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_ULTMES_min_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG1_min_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_ULTMES_count_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_count_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG1_count_RIESGO_DIRECTO","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAG2_max_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_max_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_max_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAG2__sum_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_sum_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_sum_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAG2_mean_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_mean_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_mean_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAG2_min_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_min_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAG2_count_RIESGO_DIRECTO']=rcc_train_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_count_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAG2_max_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_max_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_max_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAG2__sum_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_sum_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_sum_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAG2_mean_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_mean_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_mean_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAG2_min_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_min_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_min_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAG2_count_RIESGO_DIRECTO']=rcc_test_riesgo.FE_ULTMES_count_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_count_RIESGO_DIRECTO","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAGs_max_RIESGO_DIRECTO']=rcc_train_riesgo.FE_LAG1_max_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_max_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAGs__sum_RIESGO_DIRECTO']=rcc_train_riesgo.FE_LAG1_sum_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_sum_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAGs_mean_RIESGO_DIRECTO']=rcc_train_riesgo.FE_LAG1_mean_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_mean_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAGs_min_RIESGO_DIRECTO']=rcc_train_riesgo.FE_LAG1_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_min_RIESGO_DIRECTO\nrcc_train_riesgo['FE_VAR_LAGs_count_RIESGO_DIRECTO']=rcc_train_riesgo.FE_LAG1_min_RIESGO_DIRECTO - rcc_train_riesgo.FE_LAG2_count_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAGs_max_RIESGO_DIRECTO']=rcc_test_riesgo.FE_LAG1_max_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_max_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAGs__sum_RIESGO_DIRECTO']=rcc_test_riesgo.FE_LAG1_sum_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_sum_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAGs_mean_RIESGO_DIRECTO']=rcc_test_riesgo.FE_LAG1_mean_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_mean_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAGs_min_RIESGO_DIRECTO']=rcc_test_riesgo.FE_LAG1_min_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_min_RIESGO_DIRECTO\nrcc_test_riesgo['FE_VAR_LAGs_count_RIESGO_DIRECTO']=rcc_test_riesgo.FE_LAG1_count_RIESGO_DIRECTO - rcc_test_riesgo.FE_LAG2_count_RIESGO_DIRECTO","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_ULTMES_max_saldo']=rcc_train_riesgo.FE_ULTMES_max_saldo - rcc_train_riesgo.FE_LAG1_max_saldo\nrcc_train_riesgo['FE_VAR_ULTMES_sum_saldo']=rcc_train_riesgo.FE_ULTMES_sum_saldo - rcc_train_riesgo.FE_LAG1_sum_saldo\nrcc_train_riesgo['FE_VAR_ULTMES_mean_saldo']=rcc_train_riesgo.FE_ULTMES_mean_saldo - rcc_train_riesgo.FE_LAG1_mean_saldo\nrcc_train_riesgo['FE_VAR_ULTMES_min_saldo']=rcc_train_riesgo.FE_ULTMES_min_saldo - rcc_train_riesgo.FE_LAG1_min_saldo\nrcc_train_riesgo['FE_VAR_ULTMES_count_saldo']=rcc_train_riesgo.FE_ULTMES_count_saldo - rcc_train_riesgo.FE_LAG1_count_saldo\nrcc_test_riesgo['FE_VAR_ULTMES_max_saldo']=rcc_test_riesgo.FE_ULTMES_max_saldo - rcc_test_riesgo.FE_LAG1_max_saldo\nrcc_test_riesgo['FE_VAR_ULTMES_sum_saldo']=rcc_test_riesgo.FE_ULTMES_sum_saldo - rcc_test_riesgo.FE_LAG1_sum_saldo\nrcc_test_riesgo['FE_VAR_ULTMES_mean_saldo']=rcc_test_riesgo.FE_ULTMES_mean_saldo - rcc_test_riesgo.FE_LAG1_mean_saldo\nrcc_test_riesgo['FE_VAR_ULTMES_min_saldo']=rcc_test_riesgo.FE_ULTMES_min_saldo - rcc_test_riesgo.FE_LAG1_min_saldo\nrcc_test_riesgo['FE_VAR_ULTMES_count_saldo']=rcc_test_riesgo.FE_ULTMES_count_saldo - rcc_test_riesgo.FE_LAG1_count_saldo","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAG2_max_saldo']=rcc_train_riesgo.FE_ULTMES_max_saldo - rcc_train_riesgo.FE_LAG2_max_saldo\nrcc_train_riesgo['FE_VAR_LAG2_sum_saldo']=rcc_train_riesgo.FE_ULTMES_sum_saldo - rcc_train_riesgo.FE_LAG2_sum_saldo\nrcc_train_riesgo['FE_VAR_LAG2_mean_saldo']=rcc_train_riesgo.FE_ULTMES_mean_saldo - rcc_train_riesgo.FE_LAG2_mean_saldo\nrcc_train_riesgo['FE_VAR_LAG2_min_saldo']=rcc_train_riesgo.FE_ULTMES_min_saldo - rcc_train_riesgo.FE_LAG2_min_saldo\nrcc_train_riesgo['FE_VAR_LAG2_count_saldo']=rcc_train_riesgo.FE_ULTMES_count_saldo - rcc_train_riesgo.FE_LAG2_count_saldo\nrcc_test_riesgo['FE_VAR_LAG2_max_saldo']=rcc_test_riesgo.FE_ULTMES_max_saldo - rcc_test_riesgo.FE_LAG2_max_saldo\nrcc_test_riesgo['FE_VAR_LAG2_sum_saldo']=rcc_test_riesgo.FE_ULTMES_sum_saldo - rcc_test_riesgo.FE_LAG2_sum_saldo\nrcc_test_riesgo['FE_VAR_LAG2_mean_saldo']=rcc_test_riesgo.FE_ULTMES_mean_saldo - rcc_test_riesgo.FE_LAG2_mean_saldo\nrcc_test_riesgo['FE_VAR_LAG2_min_saldo']=rcc_test_riesgo.FE_ULTMES_min_saldo - rcc_test_riesgo.FE_LAG2_min_saldo\nrcc_test_riesgo['FE_VAR_LAG2_count_saldo']=rcc_test_riesgo.FE_ULTMES_count_saldo - rcc_test_riesgo.FE_LAG2_count_saldo","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAGs_max_saldo']=rcc_train_riesgo.FE_LAG1_max_saldo - rcc_train_riesgo.FE_LAG2_max_saldo\nrcc_train_riesgo['FE_VAR_LAGs_sum_saldo']=rcc_train_riesgo.FE_LAG1_sum_saldo - rcc_train_riesgo.FE_LAG2_sum_saldo\nrcc_train_riesgo['FE_VAR_LAGs_mean_saldo']=rcc_train_riesgo.FE_LAG1_mean_saldo - rcc_train_riesgo.FE_LAG2_mean_saldo\nrcc_train_riesgo['FE_VAR_LAGs_min_saldo']=rcc_train_riesgo.FE_LAG1_min_saldo - rcc_train_riesgo.FE_LAG2_min_saldo\nrcc_train_riesgo['FE_VAR_LAGs_count_saldo']=rcc_train_riesgo.FE_LAG1_count_saldo - rcc_train_riesgo.FE_LAG2_count_saldo\nrcc_test_riesgo['FE_VAR_LAGs_max_saldo']=rcc_test_riesgo.FE_LAG1_max_saldo - rcc_test_riesgo.FE_LAG2_max_saldo\nrcc_test_riesgo['FE_VAR_LAGs_sum_saldo']=rcc_test_riesgo.FE_LAG1_sum_saldo - rcc_test_riesgo.FE_LAG2_sum_saldo\nrcc_test_riesgo['FE_VAR_LAGs_mean_saldo']=rcc_test_riesgo.FE_LAG1_mean_saldo - rcc_test_riesgo.FE_LAG2_mean_saldo\nrcc_test_riesgo['FE_VAR_LAGs_min_saldo']=rcc_test_riesgo.FE_LAG1_min_saldo - rcc_test_riesgo.FE_LAG2_min_saldo\nrcc_test_riesgo['FE_VAR_LAGs_count_saldo']=rcc_test_riesgo.FE_LAG1_count_saldo - rcc_test_riesgo.FE_LAG2_count_saldo","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_ULTMES_max_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_max_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG1_max_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_ULTMES_sum_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG1_sum_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_ULTMES_mean_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG1_mean_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_ULTMES_min_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_min_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG1_min_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_ULTMES_count_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_count_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG1_count_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_ULTMES_max_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_max_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG1_max_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_ULTMES_sum_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG1_sum_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_ULTMES_mean_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG1_mean_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_ULTMES_min_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_min_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG1_min_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_ULTMES_count_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_count_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG1_count_COD_CLASIFICACION_DEUDOR","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAGs_max_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_LAG1_max_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_max_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAGs_sum_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_LAG1_sum_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_sum_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAGs_mean_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_LAG1_mean_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_mean_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAGs_min_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_LAG1_min_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_min_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAGs_count_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_LAG1_count_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_count_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAGs_max_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_LAG1_max_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_max_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAGs_sum_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_LAG1_sum_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_sum_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAGs_mean_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_LAG1_mean_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_mean_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAGs_min_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_LAG1_min_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_min_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAGs_count_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_LAG1_count_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_count_COD_CLASIFICACION_DEUDOR","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"rcc_train_riesgo['FE_VAR_LAG2_max_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_max_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_max_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAG2_sum_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_sum_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAG2_mean_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_mean_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAG2_min_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_min_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_min_COD_CLASIFICACION_DEUDOR\nrcc_train_riesgo['FE_VAR_LAG2_count_COD_CLASIFICACION_DEUDOR']=rcc_train_riesgo.FE_ULTMES_count_COD_CLASIFICACION_DEUDOR - rcc_train_riesgo.FE_LAG2_count_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAG2_max_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_max_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_max_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAG2_sum_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_sum_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_sum_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAG2_mean_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_mean_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_mean_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAG2_min_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_min_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_min_COD_CLASIFICACION_DEUDOR\nrcc_test_riesgo['FE_VAR_LAG2_count_COD_CLASIFICACION_DEUDOR']=rcc_test_riesgo.FE_ULTMES_count_COD_CLASIFICACION_DEUDOR - rcc_test_riesgo.FE_LAG2_count_COD_CLASIFICACION_DEUDOR","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> BENCHMARK (hay algunos ajustes)"},{"metadata":{},"cell_type":"markdown","source":"\nPrimero discretizamos los días de atraso para poder manipularla mejor."},{"metadata":{"trusted":true},"cell_type":"code","source":"bins = [-1, 0, 10, 20, 30, 60, 90, 180, 360, 720, float(\"inf\")]\nrcc_train[\"condicion\"] = pd.cut(rcc_train.condicion, bins)\nrcc_train[\"condicion\"] = rcc_train[\"condicion\"].cat.codes\nrcc_test[\"condicion\"] = pd.cut(rcc_test.condicion, bins)\nrcc_test[\"condicion\"] = rcc_test[\"condicion\"].cat.codes","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### ¿Cómo podemos procesar rcc para extraer información útil?"},{"metadata":{"trusted":true},"cell_type":"code","source":"def makeCt(df, c, aggfunc=sum):\n    try:\n        ct = pd.crosstab(df.key_value, df[c].fillna(\"N/A\"), values=df.saldo, aggfunc=aggfunc)\n    except:\n        ct = pd.crosstab(df.key_value, df[c], values=df.saldo, aggfunc=aggfunc)\n    ct.columns = [f\"{c}_{aggfunc.__name__}_{v}\" for v in ct.columns]\n    return ct","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"> Sacamos PRODUCTO y COD_INST_FIN ya que no se usan en el FEATURE_IMPORTANCE"},{"metadata":{"trusted":true},"cell_type":"code","source":"train = []\ntest = []\naggfuncs = [len,min,max,sum,np.mean,np.std,np.median]\nfor c in rcc_train.drop([\"codmes\", \"key_value\", \"saldo\",\"PRODUCTO\",\"cod_instit_financiera\"], axis=1):\n    print(\"haciendo\", c)\n    train.extend([makeCt(rcc_train, c, aggfunc) for aggfunc in aggfuncs])\n    test.extend([makeCt(rcc_test, c, aggfunc) for aggfunc in aggfuncs])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del rcc_train, rcc_test,rcc_train_lag1,rcc_test_lag1\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train = pd.concat(train, axis=1)\ntest = pd.concat(test, axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train=train.join(rcc_train_riesgo, how=\"inner\")\ntest=test.join(rcc_test_riesgo, how=\"inner\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"del rcc_train_riesgo,rcc_test_riesgo\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Sunat\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"#voy a quedarme solo con las columnas que se usan ya que sino no corre por la memoria\nciiu_train= pd.crosstab(sunat_train.key_value, sunat_train.ciiu)[[285,244,288,173,178,259,171,160,232,175,150,215,233,235,245,157,187,240,182,185,163]]\nciiu_test= pd.crosstab(sunat_test.key_value, sunat_test.ciiu)[[285,244,288,173,178,259,171,160,232,175,150,215,233,235,245,157,187,240,182,185,163]]\n\n#train = train.join(pd.crosstab(sunat_train.key_value, sunat_train.ciiu)).join(se_train)\n#test = test.join(pd.crosstab(sunat_test.key_value, sunat_test.ciiu)).join(se_test)\n\ntrain = train.join(ciiu_train).join(se_train)\ntest = test.join(ciiu_test).join(se_test)\n\n#train = train.join(se_train)\n#test  = test.join(se_test)\n\ndel sunat_train, se_train, sunat_test, se_test,ciiu_train,ciiu_test\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Por la naturaleza de las variables creadas, nos aseguramos que solo se utilicen variables existentes en ambos conjuntos de datos (train y test)"},{"metadata":{"trusted":true},"cell_type":"code","source":"keep_cols = list(set(train.columns).intersection(set(test.columns)))\ntrain = train[keep_cols]\ntest = test[keep_cols]\nlen(set(train.columns) - set(test.columns)) , len(set(test.columns) - set(train.columns))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train.columns = [str(c) for c in train.columns]\ntrain = train.rename(columns = lambda x:re.sub('[^A-Za-z0-9_-]+', '', x))\n\ntest.columns = [str(c) for c in test.columns]\ntest = test.rename(columns = lambda x:re.sub('[^A-Za-z0-9_-]+', '', x))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"folds = [train.index[t] for t, v in KFold(5).split(train)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def optimize_floats(df):\n    floats = df.select_dtypes(include=['float64']).columns.tolist()\n    df[floats] = df[floats].apply(pd.to_numeric, downcast='float')\n    return df\n\ndef optimize_ints(df):\n    ints = df.select_dtypes(include=['int64']).columns.tolist()\n    df[ints] = df[ints].apply(pd.to_numeric, downcast='integer')\n    return df\n\ndef optimize_df(df):\n    df = optimize_floats(df)\n    df = optimize_ints(df)\n    return df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"optimize_df(train)\noptimize_df(test)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Entrenamiento del Modelo\n\nPara entrenar nuestro modelo vamos a usar LightGBM. A diferencia del notebook anterior, esta vez vamos a agregar la optimización de hyper-parámetro. Se usan sólo dos con algunos pocos posibles valores, a modo de ejemplo para que los participantes lo puedan ir mejorando. "},{"metadata":{"trusted":true},"cell_type":"code","source":"import optuna\n\ndef objective(trial):    \n    test_probs = []\n    best_score = 0\n    best_probs = []\n    train_probs = []\n    \n    bagging_fraction = trial.suggest_float(\"bagging_fraction\", 0.01 , 1)\n    feature_fraction = trial.suggest_float(\"feature_fraction\", 0.01 , 1)\n    min_child_weight = trial.suggest_float(\"min_child_weight\", 0.00 , 0.02)\n    min_data_in_leaf = trial.suggest_int(\"min_data_in_leaf\", 1, 1000)\n    min_gain_to_split = trial.suggest_float(\"min_gain_to_split\", 0,1)\n    #learning_rate = trial.suggest_float(\"learning_rate\", 0.02,0.02)\n    \n    max_depth = trial.suggest_int(\"max_depth\", 2, 10)\n    #lambda_l1=trial.suggest_float(\"lambda_l1\", 0,5)\n    #lambda_l2=trial.suggest_float(\"lambda_l2\", 0,100)\n    reg_alpha = trial.suggest_float(\"reg_alpha\", 1 , 10)\n    reg_lambda = trial.suggest_float(\"reg_lambda\", 1 , 10)\n    \n    min_child_samples = trial.suggest_int(\"min_child_samples\", 500, 2000)\n    num_leaves = trial.suggest_int(\"num_leaves\", 4, 1024)\n    max_bin = trial.suggest_int(\"max_bin\", 31, 1000)\n\n    for i, idx in enumerate(folds):\n        Xt = train.loc[idx]\n        yt = y_train.loc[Xt.index]\n\n        Xv = train.drop(Xt.index)\n        yv = y_train.loc[Xv.index]\n                \n        learner = LGBMClassifier( bagging_fraction=bagging_fraction,feature_fraction=feature_fraction,min_child_weight=min_child_weight, \n                                  min_data_in_leaf=min_data_in_leaf,min_gain_to_split=min_gain_to_split,\n                                  max_depth = max_depth,min_child_samples=min_child_samples,num_leaves=num_leaves,\n                                   #reg_alpha=reg_alpha,reg_lambda=reg_lambda,\n                                  #lambda_l1=lambda_l1,lambda_l2=lambda_l2,\n                                  #learning_rate=learning_rate,\n                                  max_bin=max_bin,n_estimators = 1000)\n        \n        learner.fit(Xt, yt,  early_stopping_rounds=100, eval_metric=\"auc\",\n                    eval_set=[(Xt, yt), (Xv, yv)], verbose=False)\n        \n        train_probs.append(pd.Series(learner.predict_proba(Xv)[:, -1], index=Xv.index, name=\"probs\"))\n        \n     \n    train_probs = pd.concat(train_probs)\n    score = roc_auc_score(y_train, train_probs.loc[y_train.index])\n    \n    \n    return score\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"study = optuna.create_study(study_name='optimizacion',direction='maximize')\nstudy.optimize(objective, n_trials=40, gc_after_trial = True)\n\ntrial = study.best_trial\n\nprint('Accuracy: {}'.format(trial.value))\nprint(\"Best hyperparameters: {}\".format(trial.params))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"param_final = trial.params\nparam_final","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"best_score = 0\nbest_probs = []\ntest_probs = []\ntrain_probs = []\n\nfor i, idx in enumerate(folds):\n    Xt = train.loc[idx]\n    yt = y_train.loc[Xt.index]\n\n    Xv = train.drop(Xt.index)\n    yv = y_train.loc[Xv.index]\n\n    learner = LGBMClassifier( n_estimators = 1000, **param_final)\n    learner.fit(Xt, yt,   early_stopping_rounds=100,  eval_metric=\"auc\",\n                    eval_set=[(Xt, yt), (Xv, yv)], verbose=False)\n    test_probs.append(pd.Series(learner.predict_proba(test)[:, -1], index=test.index, name=\"fold_\" + str(i)))\n    train_probs.append(pd.Series(learner.predict_proba(Xv)[:, -1], index=Xv.index, name=\"probs\"))\n\ntest_probs = pd.concat(test_probs, axis=1).mean(axis=1)\ntrain_probs = pd.concat(train_probs)\nscore = roc_auc_score(y_train, train_probs.loc[y_train.index])\n\nif score > best_score:\n    best_score = score\n    best_probs = test_probs","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"score","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Guardado de las predicciones modelo para hacer la presentación\n\nFinalmente creamos el archivo CSV que podemos subir como nuestra Solución a la competencia"},{"metadata":{"trusted":true},"cell_type":"code","source":"best_probs.name = \"target\"\nbest_probs.to_csv(\"Optimizacion_2021_20.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"fe_importance_df = pd.DataFrame()\nfe_importance_df[\"feature\"] = train.columns \nfe_importance_df[\"importance\"] = learner.feature_importances_\nfe_importance_df.sort_values('importance',ascending=0).to_csv(\"feature_importance2021_20.csv\")","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}