{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Exploración de Datos\n# Héctor Ariel Aragón\n\nEn el siguiente notebook se muestra una exploración de los datos para el concurso de \"American Express\" el objetivo es predecir  la probabilidad que un cliente no pague, donde los que no pagan tienen marca de 1 y los que han pagado de 0, en este aspecto estamos hablando de un data set desequilibrado, donde el 75% de los datos son 0 y el resto son 1. Ahora, en lo siguiente se abordan los putnos que se pidieron para esta actividad.\n\nInstrucciones\n\n- Junto con tu equipo, explora los datos del problema que han elegido para resolver.\n- Describe cual es la relación de tu variable objetivo con las demás variables presentes. \n- Determina cuales son las variables que tienen mayor correlación con tu objetivo. \n- Aplica ingeniería de características para diseñar nuevas características en tu conjunto de datos. \n- Modela tus datos de dos o más formas diferentes para comparar los resultados. ","metadata":{}},{"cell_type":"markdown","source":"## Junto con tu equipo, explora los datos del problema que han elegido para resolver:\n\nEn lo siguiente se hace una exploración de la data en cuestión de registros, y se hace un proceso para poder cargar los datos sin afectar la calidad proveniente, pero si comprendiendo la cantidad de datos que se tenian, en total el data set pesa mas de 16 gb, cuenta con más de 5 millones de registros y 190 columnas, esto lleva a una cantidad enorme de datos, por lo que trabajar con tanta información llevo un reto grande, se tuvo que hacer una selección de la forma más equilibrada para poder dividir los datos de los clientes que pagan y de los que no pagan en la misma proporción. Las siguientes lineas de código muestran como se hizo el procedimiento para poder extraer una muestra que nos permita entender los datos y analizar como se ven.  ","metadata":{}},{"cell_type":"code","source":"import sys\nimport random\nimport pandas as pd\nimport numpy as np\n\ndf_trlab_s=pd.read_csv('../input/data-amex/df_label.csv')\n\ndf_trlab1_s=df_trlab_s[df_trlab_s['target']==1]\ndf_trlab0_s=df_trlab_s[df_trlab_s['target']==0]\n\nindx_0=df_trlab0_s.index\nindx_1=list(df_trlab1_s.index)\n\nlst_indx_0=random.sample(list(indx_0),len(df_trlab1_s))\n\nsublst_indx_0 = random.sample(lst_indx_0,3000)\nsublst_indx_1 = random.sample(list(df_trlab1_s.index),3000)\n\nsblst_tot = np.concatenate((sublst_indx_0,sublst_indx_1))\n\nindx_tot = list(df_trlab_s.index)\nlst_disc = [x for x in indx_tot if x not in sblst_tot]\n\ndf_trlab0_rs = df_trlab0_s.loc[sublst_indx_0]\ndf_trlab1_rs = df_trlab1_s.loc[sublst_indx_1]\ndf_label = pd.concat([df_trlab0_rs, df_trlab1_rs], ignore_index=True)\n\nlen(df_label)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:56:38.998794Z","iopub.execute_input":"2022-10-09T02:56:38.999267Z","iopub.status.idle":"2022-10-09T02:56:39.077409Z","shell.execute_reply.started":"2022-10-09T02:56:38.999226Z","shell.execute_reply":"2022-10-09T02:56:39.076097Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"customers_filter=df_label['customer_ID']","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:56:42.331471Z","iopub.execute_input":"2022-10-09T02:56:42.331876Z","iopub.status.idle":"2022-10-09T02:56:42.338168Z","shell.execute_reply.started":"2022-10-09T02:56:42.331839Z","shell.execute_reply":"2022-10-09T02:56:42.336684Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=pd.read_csv('../input/data-amex/df_train.csv',header=0)\n","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:37.806759Z","iopub.execute_input":"2022-10-09T02:57:37.807233Z","iopub.status.idle":"2022-10-09T02:57:40.465428Z","shell.execute_reply.started":"2022-10-09T02:57:37.807179Z","shell.execute_reply":"2022-10-09T02:57:40.464178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:40.467427Z","iopub.execute_input":"2022-10-09T02:57:40.468070Z","iopub.status.idle":"2022-10-09T02:57:40.495755Z","shell.execute_reply.started":"2022-10-09T02:57:40.468024Z","shell.execute_reply":"2022-10-09T02:57:40.494517Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(df_train)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:41.479990Z","iopub.execute_input":"2022-10-09T02:57:41.480498Z","iopub.status.idle":"2022-10-09T02:57:41.488318Z","shell.execute_reply.started":"2022-10-09T02:57:41.480457Z","shell.execute_reply":"2022-10-09T02:57:41.486875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=df_train.drop_duplicates()\nlen(df_train)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:42.134880Z","iopub.execute_input":"2022-10-09T02:57:42.135740Z","iopub.status.idle":"2022-10-09T02:57:43.347624Z","shell.execute_reply.started":"2022-10-09T02:57:42.135698Z","shell.execute_reply":"2022-10-09T02:57:43.346324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=df_train[df_train['customer_ID'].isin(customers_filter)]\ndf_train.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:43.349523Z","iopub.execute_input":"2022-10-09T02:57:43.349873Z","iopub.status.idle":"2022-10-09T02:57:43.457622Z","shell.execute_reply.started":"2022-10-09T02:57:43.349842Z","shell.execute_reply":"2022-10-09T02:57:43.456785Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(df_train)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:43.458668Z","iopub.execute_input":"2022-10-09T02:57:43.459757Z","iopub.status.idle":"2022-10-09T02:57:43.466786Z","shell.execute_reply.started":"2022-10-09T02:57:43.459721Z","shell.execute_reply":"2022-10-09T02:57:43.465741Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.merge(df_train,df_label,how='left',on='customer_ID')\ndf","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:43.468756Z","iopub.execute_input":"2022-10-09T02:57:43.469084Z","iopub.status.idle":"2022-10-09T02:57:43.787762Z","shell.execute_reply.started":"2022-10-09T02:57:43.469054Z","shell.execute_reply":"2022-10-09T02:57:43.786410Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"clnames = df.columns\ncolumnas_validas = []\nfor col in clnames:\n    nas=df[col].isna().sum()\n    if nas/70963>.50:\n        print('La columna '+str(col)+' tiene '+str(nas)+' valores con nan de 70963')\n    else:\n        columnas_validas.append(col)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:43.867428Z","iopub.execute_input":"2022-10-09T02:57:43.867843Z","iopub.status.idle":"2022-10-09T02:57:43.958999Z","shell.execute_reply.started":"2022-10-09T02:57:43.867807Z","shell.execute_reply":"2022-10-09T02:57:43.958142Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_filtr=df[columnas_validas]\ndf_filtr","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:44.415999Z","iopub.execute_input":"2022-10-09T02:57:44.416408Z","iopub.status.idle":"2022-10-09T02:57:44.593751Z","shell.execute_reply.started":"2022-10-09T02:57:44.416373Z","shell.execute_reply":"2022-10-09T02:57:44.592853Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_filtr['D_63'] = df_filtr['D_63'].astype('category').cat.codes\ndf_filtr['D_64'] = df_filtr['D_64'].astype('category').cat.codes","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:45.126303Z","iopub.execute_input":"2022-10-09T02:57:45.126701Z","iopub.status.idle":"2022-10-09T02:57:45.149648Z","shell.execute_reply.started":"2022-10-09T02:57:45.126668Z","shell.execute_reply":"2022-10-09T02:57:45.148293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Describe cual es la relación de tu variable objetivo con las demás variables presentes. \n\nA continuación se muestra mediante un for cuales son las variables que presentan un mayor grado de asociación lineal entre las variables. Después se arma un mapa de correlaciones, no solo para entender las variables que tienen un mayor grado de asociación con la variable dependiente, si no también para entender cuales tienen un mayor de asociación entre estas. ","metadata":{}},{"cell_type":"code","source":"col_est_cor = df_filtr.columns[2:]\ncol_corr = []\nfor col in col_est_cor:\n    cor = df_filtr[col].corr(df_filtr['target'])\n    if ((cor >0.3 ) or (cor < -0.3)):\n        col_corr.append(col)\n        \n","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:46.583196Z","iopub.execute_input":"2022-10-09T02:57:46.583637Z","iopub.status.idle":"2022-10-09T02:57:46.784283Z","shell.execute_reply.started":"2022-10-09T02:57:46.583597Z","shell.execute_reply":"2022-10-09T02:57:46.783382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Determina cuales son las variables que tienen mayor correlación con tu objetivo. ","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nmatrix = df_filtr[col_corr].corr().round(2)\nsns.set(rc = {'figure.figsize':(21,21)})\nsns.heatmap(matrix, annot=True, vmax=1, vmin=-1, center=0, cmap='vlag')\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:48.315717Z","iopub.execute_input":"2022-10-09T02:57:48.316555Z","iopub.status.idle":"2022-10-09T02:57:53.361283Z","shell.execute_reply.started":"2022-10-09T02:57:48.316504Z","shell.execute_reply":"2022-10-09T02:57:53.360291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Como se puede observar las que mayor grado de asociación tienen entre las variables son target con B13, B18, D_61, D_48, B_2 y P_2, esto pensando en las variables que han presentado una correlación en términos absolutos mayores a 0.5, si buscamos un umbral de .3, serán todas las presentes en el mapa de correlación de arriba","metadata":{}},{"cell_type":"markdown","source":"## Aplica ingeniería de características para diseñar nuevas características en tu conjunto de datos.\n\nEn las siguientes líneas de código se pueden observar las transformaciones y lo que se hizo para poder transformar los datos, es importante mencionar que se consideraron un subconjunto de variables que son las que tienen una correlación mayor a 0.3, y que generaron un subconjunto, adicional a eso, anteriormente se habían discriminado ya que no contaban con datos suficientes en cuestión de valores. Una vez considerrada este conjunto de variables mas pequeño se procedio a la ingenieria de variables, es importante mencionar, que en cuestion de creación no se podía hacer mucho, ya que las variables presentan una estandarización, por lo que la información original, no se cuenta como tal, y como vimos en los cursos de ingeniería de variables muchas transformaciones o transformaciones muy sofisticadas llevan a un proceso de machine learning mas complejo en cuestión de aprendizaje de patrones en los datos. Por lo tanto las transformaciones son simples, una transformación es contar los datos entre transacciones de los clientes para entender en promedio que tanto se usaban las tarjetas tanto por parte de los clientes que pagan así como de los clientes que no, tambien se usaron las variables categóricas para entender la frecuencia de aparición entre las diferentes variables categóricas. Y finalmetne el resto de variables continuas se uso el promedio para tener por cliente un valor de cada variable. ","metadata":{}},{"cell_type":"code","source":"col_corr.append('customer_ID')\ncol_corr.append('S_2')","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:55.711573Z","iopub.execute_input":"2022-10-09T02:57:55.712373Z","iopub.status.idle":"2022-10-09T02:57:55.718189Z","shell.execute_reply.started":"2022-10-09T02:57:55.712320Z","shell.execute_reply":"2022-10-09T02:57:55.716899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin =  df_filtr[col_corr]","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:56.166352Z","iopub.execute_input":"2022-10-09T02:57:56.167139Z","iopub.status.idle":"2022-10-09T02:57:56.179831Z","shell.execute_reply.started":"2022-10-09T02:57:56.167098Z","shell.execute_reply":"2022-10-09T02:57:56.178544Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin['S_2'] = pd.to_datetime(df_fin['S_2'])","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:56.654157Z","iopub.execute_input":"2022-10-09T02:57:56.654819Z","iopub.status.idle":"2022-10-09T02:57:56.680104Z","shell.execute_reply.started":"2022-10-09T02:57:56.654771Z","shell.execute_reply":"2022-10-09T02:57:56.678604Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:57.161003Z","iopub.execute_input":"2022-10-09T02:57:57.161696Z","iopub.status.idle":"2022-10-09T02:57:57.211460Z","shell.execute_reply.started":"2022-10-09T02:57:57.161658Z","shell.execute_reply":"2022-10-09T02:57:57.210266Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin['diff'] = df_fin.groupby('customer_ID',as_index=False)['S_2'].diff()\ndf_fin['diff'] = df_fin['diff'].dt.days","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:57:58.355310Z","iopub.execute_input":"2022-10-09T02:57:58.355708Z","iopub.status.idle":"2022-10-09T02:58:01.084830Z","shell.execute_reply.started":"2022-10-09T02:57:58.355674Z","shell.execute_reply":"2022-10-09T02:58:01.083585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_b30=df_fin.groupby('customer_ID',as_index=False)['B_30'].count()\ndf_b38=df_fin.groupby('customer_ID',as_index=False)['B_38'].count()","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:01.087399Z","iopub.execute_input":"2022-10-09T02:58:01.088161Z","iopub.status.idle":"2022-10-09T02:58:01.136315Z","shell.execute_reply.started":"2022-10-09T02:58:01.088108Z","shell.execute_reply":"2022-10-09T02:58:01.135340Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin.columns","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:01.137700Z","iopub.execute_input":"2022-10-09T02:58:01.138138Z","iopub.status.idle":"2022-10-09T02:58:01.146421Z","shell.execute_reply.started":"2022-10-09T02:58:01.138093Z","shell.execute_reply":"2022-10-09T02:58:01.145343Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin_res = df_fin.groupby(['customer_ID','target'],as_index=False).agg({'P_2':'mean', 'B_1':'mean','B_2':'mean', 'R_1':'mean', 'S_3':'mean'\n                                                                         ,'B_3':'mean','D_44':'mean','B_4':'mean','D_45':'mean','D_47':'mean',\n                                                                         'D_48':'mean','B_7':'mean','B_8':'mean','D_51':'mean','B_9':'mean', \n                                                                         'B_11':'mean','S_7':'mean','D_55':'mean','D_58':'mean','D_61':'mean',\n                                                                         'D_62':'mean','B_16':'mean','B_18':'mean','B_19':'mean','B_20':'mean',\n                                                                         'B_22':'mean','B_23':'mean','D_74':'mean','D_75':'mean','B_33':'mean',\n                                                                         'B_37':'mean','diff':'mean'})\n\ndf_fin_res = pd.merge(df_fin_res,df_b30,how='left',on='customer_ID')\ndf_fin_res = pd.merge(df_fin_res,df_b38,how='left',on='customer_ID')\ndf_fin_res","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:01.149140Z","iopub.execute_input":"2022-10-09T02:58:01.149532Z","iopub.status.idle":"2022-10-09T02:58:01.282900Z","shell.execute_reply.started":"2022-10-09T02:58:01.149497Z","shell.execute_reply":"2022-10-09T02:58:01.281698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin_res = df_fin_res.fillna(0)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:01.285377Z","iopub.execute_input":"2022-10-09T02:58:01.286360Z","iopub.status.idle":"2022-10-09T02:58:01.293412Z","shell.execute_reply.started":"2022-10-09T02:58:01.286306Z","shell.execute_reply":"2022-10-09T02:58:01.292389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_fin_res.columns","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:01.386125Z","iopub.execute_input":"2022-10-09T02:58:01.387459Z","iopub.status.idle":"2022-10-09T02:58:01.394480Z","shell.execute_reply.started":"2022-10-09T02:58:01.387390Z","shell.execute_reply":"2022-10-09T02:58:01.393269Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Modela tus datos de dos o más formas diferentes para comparar los resultados:\n\nEn lo siguiente se puede observar que se usaron 3 modelos diferentes, el primero, la regresión logística, el segundo, una máquina de soporte vectorial y el tercer modelo fue un árbol de decisión. Los resultados se pueden ver en las matrices de confusión y como se puede observar los 2 mejores modelos fueron la regresión logística y la máquina de soporte vectorial lineal. ","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport numpy as np\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import classification_report, confusion_matrix\nfrom sklearn.model_selection import train_test_split\n\n\ny = df_fin_res['target']\nX = df_fin_res[['P_2', 'B_1', 'B_2', 'R_1', 'S_3', 'B_3',\n       'D_44', 'B_4', 'D_45', 'D_47', 'D_48', 'B_7', 'B_8', 'D_51', 'B_9',\n       'B_11', 'S_7', 'D_55', 'D_58', 'D_61', 'D_62', 'B_16', 'B_18', 'B_19',\n       'B_20', 'B_22', 'B_23', 'D_74', 'D_75', 'B_33', 'B_37', 'diff', 'B_30',\n       'B_38']]\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=16)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:02.472152Z","iopub.execute_input":"2022-10-09T02:58:02.472996Z","iopub.status.idle":"2022-10-09T02:58:02.488090Z","shell.execute_reply.started":"2022-10-09T02:58:02.472946Z","shell.execute_reply":"2022-10-09T02:58:02.487174Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = LogisticRegression(solver='liblinear', random_state=0)\nmodel.fit(X_train, y_train)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:03.082342Z","iopub.execute_input":"2022-10-09T02:58:03.083077Z","iopub.status.idle":"2022-10-09T02:58:03.169250Z","shell.execute_reply.started":"2022-10-09T02:58:03.083017Z","shell.execute_reply":"2022-10-09T02:58:03.168082Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\nyp= model.predict(X_test)\ncnf_matriz = metrics.confusion_matrix(y_test, yp)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:03.511733Z","iopub.execute_input":"2022-10-09T02:58:03.512127Z","iopub.status.idle":"2022-10-09T02:58:03.527926Z","shell.execute_reply.started":"2022-10-09T02:58:03.512092Z","shell.execute_reply":"2022-10-09T02:58:03.526248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nclass_names=[0,1] # name  of classes\nfig, ax = plt.subplots()\ntick_marks = np.arange(len(class_names))\nplt.xticks(tick_marks, class_names)\nplt.yticks(tick_marks, class_names)\n# create heatmap\nsns.heatmap(pd.DataFrame(cnf_matriz), annot=True, cmap=\"YlGnBu\" ,fmt='g')\nax.xaxis.set_label_position(\"top\")\nplt.tight_layout()\nplt.title('Matriz de Confusion', y=1.1)\nplt.ylabel('Etiqueta real')\nplt.xlabel('Etiqueta predecida')\n","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:03.817187Z","iopub.execute_input":"2022-10-09T02:58:03.817606Z","iopub.status.idle":"2022-10-09T02:58:04.293114Z","shell.execute_reply.started":"2022-10-09T02:58:03.817570Z","shell.execute_reply":"2022-10-09T02:58:04.292172Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.svm import SVC\nclf = SVC(kernel='linear')\nclf.fit(X_train, y_train)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:04.294630Z","iopub.execute_input":"2022-10-09T02:58:04.295599Z","iopub.status.idle":"2022-10-09T02:58:05.002416Z","shell.execute_reply.started":"2022-10-09T02:58:04.295559Z","shell.execute_reply":"2022-10-09T02:58:05.001221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"yp= clf.predict(X_test)\ncnf_matriz = metrics.confusion_matrix(y_test, yp)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:05.004338Z","iopub.execute_input":"2022-10-09T02:58:05.004710Z","iopub.status.idle":"2022-10-09T02:58:05.097108Z","shell.execute_reply.started":"2022-10-09T02:58:05.004675Z","shell.execute_reply":"2022-10-09T02:58:05.095595Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_names=[0,1] # name  of classes\nfig, ax = plt.subplots()\ntick_marks = np.arange(len(class_names))\nplt.xticks(tick_marks, class_names)\nplt.yticks(tick_marks, class_names)\n# create heatmap\nsns.heatmap(pd.DataFrame(cnf_matriz), annot=True, cmap=\"YlGnBu\" ,fmt='g')\nax.xaxis.set_label_position(\"top\")\nplt.tight_layout()\nplt.title('Matriz de Confusion', y=1.1)\nplt.ylabel('Etiqueta real')\nplt.xlabel('Etiqueta predecida')","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:05.098671Z","iopub.execute_input":"2022-10-09T02:58:05.099880Z","iopub.status.idle":"2022-10-09T02:58:05.491555Z","shell.execute_reply.started":"2022-10-09T02:58:05.099831Z","shell.execute_reply":"2022-10-09T02:58:05.490445Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.tree import DecisionTreeClassifier \n\nclf = DecisionTreeClassifier()\nclf = clf.fit(X_train,y_train)\nyp= clf.predict(X_test)\ncnf_matriz = metrics.confusion_matrix(y_test, yp)","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:05.495667Z","iopub.execute_input":"2022-10-09T02:58:05.496368Z","iopub.status.idle":"2022-10-09T02:58:05.683886Z","shell.execute_reply.started":"2022-10-09T02:58:05.496328Z","shell.execute_reply":"2022-10-09T02:58:05.682723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class_names=[0,1] # name  of classes\nfig, ax = plt.subplots()\ntick_marks = np.arange(len(class_names))\nplt.xticks(tick_marks, class_names)\nplt.yticks(tick_marks, class_names)\n# create heatmap\nsns.heatmap(pd.DataFrame(cnf_matriz), annot=True, cmap=\"YlGnBu\" ,fmt='g')\nax.xaxis.set_label_position(\"top\")\nplt.tight_layout()\nplt.title('Matriz de Confusion', y=1.1)\nplt.ylabel('Etiqueta real')\nplt.xlabel('Etiqueta predecida')","metadata":{"execution":{"iopub.status.busy":"2022-10-09T02:58:05.685702Z","iopub.execute_input":"2022-10-09T02:58:05.686087Z","iopub.status.idle":"2022-10-09T02:58:06.145447Z","shell.execute_reply.started":"2022-10-09T02:58:05.686050Z","shell.execute_reply":"2022-10-09T02:58:06.144260Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Conclusión:\n\nEn términos generales se cumplio con lo solicitado, sin embargo faltan abordar temas como la hiperparametrización para cada modelo, y eventualmente se explorarán más modelos para poder optimizar los resultados y mejorarlos, sin embargo el primer resultado no es del todo malo, estamos hablando que de unos 900 resultados mas del 65% de los datos fueron clasificados de manera adecuada, mientras que el resto se puede optimizar más. ","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}