{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**Universidad de Los Andes - Facultad de Economía**  <br>\n",
    "**Econometría y el Aprendizaje de las Máquinas** <br>\n",
    "**Junio 26 del 2019**\n",
    "\n",
    "\n",
    "# Clase 2: Regresión logística, lasso, ridge y PDP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introducción\n",
    "\n",
    "Los avances en machine learning en todos los campos han originado debates con respecto a los efectos diferenciados a través de categorías como la raza y el género. La literatura muestra que las mejoras en los modelos estadísticos traen consigo consecuencias distribucionales determinadas por los cambios en la interacción entre las formas funcionales y las distribuciones de las características observadas.\n",
    "\n",
    "Los cambios pueden ser causados por:\n",
    "\n",
    "- Una mayor flexibilidad del método que permite descubrir las relaciones estructurales entre la variable a predecir (marca) y características observables.\n",
    "- Una mejor triangulación  de características excluídas/no observadas como la raza."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "En este contexto, el objetivo de esta sección práctica es usar datos del orden financiero para predecir la probabilidad de que una persona deje de pagar sus deudas (incurra en default) dada sus características observadas. Los datos fueron obtenidos del repositorio de machine learning de la UCI y corresponden a información crediticia de un importante banco en Taiwan.\n",
    "\n",
    "Las variables corresponden a: \n",
    "\n",
    "- ID: Variable de identificación del cliente.\n",
    "- LIMIT_BAL: Valor del crédito en dólares NT.\n",
    "- SEX: Género de la persona (1= hombre, 2= mujer).\n",
    "- EDUCATION: Nivel educativo (1= posgrado, 2= pregrado, 3=secundaria, 4=otros)\n",
    "- MARRIAGE: Estado civil (1= casado, 2=soltero, 3= otro)\n",
    "- AGE= Edad en años.\n",
    "- PAY_0-PAY_6 = Historial de pagos pasados (de abril a septiembre). La escala de los estados son: -1= a tiempo, 1= pago con retraso de un mes, 2=  pago con retraso de dos meses, .....9= pago con retraso de nueve meses o más.\n",
    "- BILL_AMT1- BILL_AMT6=  Valor a pagar (factura) en dólar NT (de abril a septiembre).\n",
    "- PAY_AMT1-PAY_AMT6: Valor efectivamente pagado en dólar NT (de abril a septiembre)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Librerías"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd # Procesamiento de datos\n",
    "import os  # Cambiar directorio de trabajo\n",
    "import numpy as np # Arreglos númericos\n",
    "from matplotlib import pyplot as plt # Gráficos\n",
    "\n",
    "from sklearn.compose import ColumnTransformer  # Utilidades de  Preprocesamiento\n",
    "from sklearn.pipeline import Pipeline          # Utilidades de  Preprocesamiento\n",
    "from sklearn.preprocessing import StandardScaler, OneHotEncoder #Estandarización y dummies\n",
    "from sklearn.linear_model import LogisticRegression  # Regresión logística\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV # Partición de datos, validación cruzada\n",
    "import sklearn.metrics as metrics  # Métricas de desempeño\n",
    "from sklearn.metrics import make_scorer # Utilidades de evaluación\n",
    "from sklearn.inspection import partial_dependence   #PDP\n",
    "from sklearn.inspection import plot_partial_dependence  #PDP"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Establecer directorio de trabajo"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ver directorio\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 278,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Cambiar directorio\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Ver directorio\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cargar datos "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Importar datos\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Revisar datos"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Estructura de los datos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Dimensión de los datos\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Primeras observaciones\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Renombrar variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Renombrar la variable de default\n",
    "\n",
    "# nombre de variables\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Filtrar datos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# Retener sólo mujeres con edad menor o igual a 30 con un valor de crédito menor o igual a 10,000\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ordenar valores"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Organizar datos por edad y marca de default de forma descendente\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Seleccionar variables"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# Seleccionar variables: default, age y education\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seleccionar todas las variables excepto ID\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Estadísticas descriptivas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Estadísticas descriptivas\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Revisar si existen observaciones vacías\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Proporción de la marca"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Proporción de marca\n",
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Gráficos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "#Seleccionar variables categóricas\n",
    "\n",
    "# Seleccionar variables númericas\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Histograma para Edad \n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Procesamiento de datos"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convertir variables categóricas\n",
    "\n",
    "\n",
    "# Mostrar tipo de variables\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Seleccionar características y marca\n",
    "\n",
    "\n",
    "# Particionar los datos  70% entrenamiento, 30% prueba\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# Estandarizar train y test\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convertir variables categóricas en dummies\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Primer modelo: Regresión Logística"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Semilla\n",
    "\n",
    "# Regresión logística\n",
    "\n",
    "# Ajustar Modelo\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de probabilidades\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de marca\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Matriz de confusión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Matriz de confusión: segunda forma\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Accuracy o precisión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Coeficientes\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Segundo modelo: Lasso"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Regresión lasso-logística\n",
    "\n",
    "# Grilla de valores para buscar el lambda\n",
    "\n",
    "# Validación cruzada usando accuracy\n",
    "\n",
    "# Ajustar modelo con el mejor s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de probabilidades\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de marca\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Matriz de confusión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Accuracy o precisión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Mejor s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Coeficientes\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Partial Dependence Plot\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tercer modelo: Ridge"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Regresión ridge-logística\n",
    "\n",
    "# Grilla de valores para buscar el lambda\n",
    "\n",
    "# Validación cruzada usando accuracy\n",
    "\n",
    "# Ajustar modelo con el mejor s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de probabilidades\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Predicción de marca\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "# Matriz de confusión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Accuracy o precisión\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Mejor s\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Coeficientes\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [],
   "source": [
    "# PDP\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
