diff --git a/notebooks/python/Lab_6_Logistic_Regression_and_Scorecards.ipynb b/notebooks/python/Lab_6_Logistic_Regression_and_Scorecards.ipynb index 4e52250..1e860a8 100644 --- a/notebooks/python/Lab_6_Logistic_Regression_and_Scorecards.ipynb +++ b/notebooks/python/Lab_6_Logistic_Regression_and_Scorecards.ipynb @@ -38,11 +38,7 @@ { "cell_type": "code", "metadata": { - "id": "FGwyxAAuBYZ3", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "f8f12b8a-1320-447a-aeb6-2e5f4fa7acc8" + "id": "FGwyxAAuBYZ3" }, "source": [ "# Import the csv files from last week.\n", @@ -50,50 +46,19 @@ "!gdown 'https://drive.google.com/uc?id=1IvY78EGu-eizec_9agJUsQWDLT-wmSHF'\n", "!gdown 'https://drive.google.com/uc?id=1aDraDSR2OQbIMjIY07s-rD5cel2x_iS-'" ], - "execution_count": 1, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Downloading...\n", - "From: https://drive.google.com/uc?id=1LWRFLpJtTopAlRqTuUd9XZvGB6CoHa2z\n", - "To: /content/test_woe.csv\n", - "100% 63.1k/63.1k [00:00<00:00, 53.1MB/s]\n", - "Downloading...\n", - "From: https://drive.google.com/uc?id=1IvY78EGu-eizec_9agJUsQWDLT-wmSHF\n", - "To: /content/train_woe.csv\n", - "100% 147k/147k [00:00<00:00, 93.5MB/s]\n", - "Downloading...\n", - "From: https://drive.google.com/uc?id=1aDraDSR2OQbIMjIY07s-rD5cel2x_iS-\n", - "To: /content/BankloanCleanNewVars.pkl\n", - "100% 147k/147k [00:00<00:00, 56.2MB/s]\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "DGdEWvmjBaWo", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "552e62e6-2547-4a15-93e9-1f9af6a25301" + "id": "DGdEWvmjBaWo" }, "source": [ "!ls" ], - "execution_count": 2, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "BankloanCleanNewVars.pkl sample_data test_woe.csv train_woe.csv\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -107,51 +72,13 @@ { "cell_type": "code", "metadata": { - "id": "6leC6-rRPrs7", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "047d329e-a6d3-47f4-d770-2c8be967b685" + "id": "6leC6-rRPrs7" }, "source": [ "!pip install git+https://github.com/CBravoR/scorecardpy" ], - "execution_count": 3, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n", - "Collecting git+https://github.com/CBravoR/scorecardpy\n", - " Cloning https://github.com/CBravoR/scorecardpy to /tmp/pip-req-build-38f2k5je\n", - " Running command git clone --filter=blob:none --quiet https://github.com/CBravoR/scorecardpy /tmp/pip-req-build-38f2k5je\n", - " Resolved https://github.com/CBravoR/scorecardpy to commit 7bf50d21299e6a8bd56492a97b1e7f3bd761bc93\n", - " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", - "Requirement already satisfied: numpy in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (1.22.4)\n", - "Requirement already satisfied: pandas>=0.25.0 in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (1.4.4)\n", - "Requirement already satisfied: matplotlib in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (3.7.1)\n", - "Requirement already satisfied: scikit-learn>=0.19.1 in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (1.2.2)\n", - "Requirement already satisfied: statsmodels in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (0.13.5)\n", - "Requirement already satisfied: patsy in /usr/local/lib/python3.9/dist-packages (from scorecardpy==0.1.9.3) (0.5.3)\n", - "Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.9/dist-packages (from pandas>=0.25.0->scorecardpy==0.1.9.3) (2.8.2)\n", - "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.9/dist-packages (from pandas>=0.25.0->scorecardpy==0.1.9.3) (2022.7.1)\n", - "Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.9/dist-packages (from scikit-learn>=0.19.1->scorecardpy==0.1.9.3) (1.10.1)\n", - "Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.9/dist-packages (from scikit-learn>=0.19.1->scorecardpy==0.1.9.3) (1.1.1)\n", - "Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.9/dist-packages (from scikit-learn>=0.19.1->scorecardpy==0.1.9.3) (3.1.0)\n", - "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (23.0)\n", - "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (0.11.0)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (1.0.7)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (1.4.4)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (4.39.2)\n", - "Requirement already satisfied: pillow>=6.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (8.4.0)\n", - "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (3.0.9)\n", - "Requirement already satisfied: importlib-resources>=3.2.0 in /usr/local/lib/python3.9/dist-packages (from matplotlib->scorecardpy==0.1.9.3) (5.12.0)\n", - "Requirement already satisfied: six in /usr/local/lib/python3.9/dist-packages (from patsy->scorecardpy==0.1.9.3) (1.16.0)\n", - "Requirement already satisfied: zipp>=3.1.0 in /usr/local/lib/python3.9/dist-packages (from importlib-resources>=3.2.0->matplotlib->scorecardpy==0.1.9.3) (3.15.0)\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", @@ -164,23 +91,18 @@ "import numpy as np\n", "import scorecardpy as sc\n", "from string import ascii_letters\n", - "import numpy as np\n", - "import pandas as pd\n", + "\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ], - "execution_count": 4, + "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "pp0no9a1Ps4S", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "df83ce44-21d8-4b82-fd08-e3d3322c677c" + "id": "pp0no9a1Ps4S" }, "source": [ "# Import the files as Pandas datasets\n", @@ -212,18 +134,10 @@ "# Apply breaks.\n", "bins_adj = sc.woebin(bankloan_train_noWoE, y=\"Default\",\n", " breaks_list=breaks_adj)\n", - " " + "" ], - "execution_count": 5, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[INFO] creating woe binning ...\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -239,11 +153,11 @@ "\n", "- We apply the ```fit``` function to the object we just created. This takes as input the training set and the targets (if the model is supervised), and will update our model with trained parameters.\n", "\n", - "- We then used our trained model to apply it to a test set, and calculate outputs. \n", + "- We then used our trained model to apply it to a test set, and calculate outputs.\n", "\n", "Logistic regression is included in the [```linear_model subpackage```](https://scikit-learn.org/stable/modules/classes.html#module-sklearn.linear_model) and it comes pre-packaged with all regularization algorithms: the LASSO penalization, the Ridge penalization and the ElasticNet method (refer to the lectures for the explanation of these, or read this [excellent tutorial](https://codingstartups.com/practical-machine-learning-ridge-regression-vs-lasso/)).\n", "\n", - "In a nutshell, LASSO and Ridge are going to penalize including variables by adding either a linear (LASSO) or quadratic (Ridge) term to the minimization algorithm, or a combination of the two if using Elastic Net. \n", + "In a nutshell, LASSO and Ridge are going to penalize including variables by adding either a linear (LASSO) or quadratic (Ridge) term to the minimization algorithm, or a combination of the two if using Elastic Net.\n", "\n", "These methods have hypermparameters that need to be optimized. For this we will use a cross-validation procedure (again, refer to the lectures). Luckily for us, scikit-learn already comes with an object that will allow cross-validated optimization of the penalization parameter. The function to call is[```LogisticRegressionCV```](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV)\n", "\n", @@ -270,12 +184,12 @@ " max_iter=100, # Maximum iterations\n", " verbose=2, # Show process. 1 is yes.\n", " solver = 'saga', # How to optimize.\n", - " n_jobs = 2, # Processes to use. Set to number of physical cores. \n", + " n_jobs = 2, # Processes to use. Set to number of physical cores.\n", " refit = True, # If to retrain with the best parameter and all data after finishing.\n", " l1_ratios = np.arange(0, 1.01, 0.1), # The LASSO / Ridge ratios.\n", " )" ], - "execution_count": 6, + "execution_count": null, "outputs": [] }, { @@ -298,7 +212,7 @@ "Error = Error_{prediction} + \\frac{1}{C} \\times Error_{penalty}\n", "$$\n", "\n", - "So the $C$ constant will balance both objectives. By giving a Cs larger than 1, it will try as many parameters as given. \n", + "So the $C$ constant will balance both objectives. By giving a Cs larger than 1, it will try as many parameters as given.\n", "\n", "**Class weighting**\n", "\n", @@ -371,1452 +285,23 @@ "bankloan_train_WoE.columns" ], "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "2tZTn7OMprvp", - "outputId": "18f20a15-b676-4d2d-cdb0-a2876ead6aa8" + "id": "2tZTn7OMprvp" }, - "execution_count": 7, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "Index(['Default', 'Employ_woe', 'MonthlyLoad_woe', 'Creddebt_woe',\n", - " 'OthDebtRatio_woe', 'Age_woe', 'Income_woe', 'Leverage_woe'],\n", - " dtype='object')" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "aGzK11UOdUDE", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 1000 - }, - "outputId": "885435c8-8693-40f1-b445-038500e26f61" + "id": "aGzK11UOdUDE" }, "source": [ "bankloan_logreg.fit(X = bankloan_train_WoE.iloc[:, 1:].drop( columns=\"Income_woe\"), # All rows and from the second var to end\n", " y = bankloan_train_WoE['Default'] # The target\n", " )" ], - "execution_count": 8, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "[Parallel(n_jobs=2)]: Using backend ThreadingBackend with 2 concurrent workers.\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 19 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...convergence after 21 epochs took 0 seconds\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 17 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 27 epochs took 0 seconds\n", - "convergence after 28 epochs took 0 seconds\n", - "convergence after 28 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 secondsconvergence after 20 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "\n", - "convergence after 10 epochs took 0 secondsconvergence after 9 epochs took 0 seconds\n", - "\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 secondsconvergence after 22 epochs took 0 seconds\n", - "\n", - "convergence after 24 epochs took 0 secondsconvergence after 26 epochs took 0 seconds\n", - "\n", - "convergence after 28 epochs took 0 secondsconvergence after 28 epochs took 0 seconds\n", - "\n", - "convergence after 25 epochs took 0 secondsconvergence after 25 epochs took 0 seconds\n", - "\n", - "convergence after 20 epochs took 0 secondsconvergence after 20 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "\n", - "convergence after 14 epochs took 0 secondsconvergence after 9 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 28 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 19 epochs took 0 secondsconvergence after 28 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 secondsrescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 secondsconvergence after 21 epochs took 0 seconds\n", - "\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 secondsrescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 secondsconvergence after 28 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "\n", - "convergence after 19 epochs took 0 secondsconvergence after 24 epochs took 0 seconds\n", - "\n", - "convergence after 14 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 28 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "rescaling...convergence after 19 epochs took 0 seconds\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 secondsconvergence after 21 epochs took 0 seconds\n", - "\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 4 epochs took 0 seconds\n", - "convergence after 28 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 secondsconvergence after 24 epochs took 0 seconds\n", - "\n", - "convergence after 19 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 secondsconvergence after 28 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 19 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 secondsconvergence after 1 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 3 epochs took 0 seconds\n", - "\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 secondsrescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 28 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 18 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 23 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 17 epochs took 0 seconds\n", - "convergence after 19 epochs took 0 seconds\n", - "convergence after 14 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 19 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 21 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 17 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 4 epochs took 0 seconds\n", - "convergence after 19 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 17 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 16 epochs took 0 secondsrescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 3 epochs took 0 secondsconvergence after 12 epochs took 0 seconds\n", - "\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 3 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 7 epochs took 0 seconds\n", - "convergence after 24 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 20 epochs took 0 secondsrescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 16 epochs took 0 secondsrescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 22 epochs took 1 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 12 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 7 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...rescaling...\n", - "\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "\n", - "rescaling...\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...convergence after 22 epochs took 0 seconds\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 20 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 24 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 20 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 10 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 4 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 secondsconvergence after 25 epochs took 0 seconds\n", - "\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 secondsconvergence after 26 epochs took 0 seconds\n", - "\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 18 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 secondsconvergence after 22 epochs took 0 seconds\n", - "\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 13 epochs took 0 seconds\n", - "convergence after 9 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "rescaling...\n", - "rescaling...\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 4 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 secondsconvergence after 22 epochs took 0 seconds\n", - "\n", - "convergence after 26 epochs took 0 secondsconvergence after 22 epochs took 0 seconds\n", - "\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 26 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 22 epochs took 0 seconds\n", - "convergence after 1 epochs took 0 secondsconvergence after 16 epochs took 0 seconds\n", - "\n", - "convergence after 1 epochs took 0 seconds\n", - "convergence after 3 epochs took 0 secondsconvergence after 12 epochs took 0 seconds\n", - "\n", - "convergence after 8 epochs took 0 seconds\n", - "convergence after 23 epochs took 0 seconds\n", - "convergence after 27 epochs took 0 seconds\n", - "convergence after 25 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n", - "convergence after 16 epochs took 0 seconds\n", - "convergence after 12 epochs took 0 seconds\n", - "convergence after 7 epochs took 0 seconds\n", - "convergence after 21 epochs took 0 seconds\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "[Parallel(n_jobs=2)]: Done 33 out of 33 | elapsed: 2.2s finished\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "LogisticRegressionCV(class_weight='balanced', cv=3,\n", - " l1_ratios=array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n", - " n_jobs=2, penalty='elasticnet', random_state=20190301,\n", - " solver='saga', tol=1e-06, verbose=2)" - ], - "text/html": [ - "
LogisticRegressionCV(class_weight='balanced', cv=3,\n",
-              "                     l1_ratios=array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ]),\n",
-              "                     n_jobs=2, penalty='elasticnet', random_state=20190301,\n",
-              "                     solver='saga', tol=1e-06, verbose=2)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" - ] - }, - "metadata": {}, - "execution_count": 8 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -1832,183 +317,24 @@ "\n", "The rest of the output refers to what it did, it is not relevant at this stage.\n", "\n", - "Done! We have a logistic regression! Let's check the parameters, sorted into a nice table. \n" + "Done! We have a logistic regression! Let's check the parameters, sorted into a nice table.\n" ] }, { "cell_type": "code", "metadata": { - "id": "l7Y-z7naeZk9", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 237 - }, - "outputId": "e87575c2-1590-4873-fc09-7bbdd58bc81c" + "id": "l7Y-z7naeZk9" }, "source": [ - "coef_df = pd.concat([pd.DataFrame({'column': bankloan_train_WoE.columns[np.r_[1:6,7]]}), \n", + "coef_df = pd.concat([pd.DataFrame({'column': bankloan_train_WoE.columns[np.r_[1:6,7]]}),\n", " pd.DataFrame(np.transpose(bankloan_logreg.coef_))],\n", " axis = 1\n", " )\n", "\n", "coef_df" ], - "execution_count": 9, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - " column 0\n", - "0 Employ_woe 1.156029\n", - "1 MonthlyLoad_woe 0.207246\n", - "2 Creddebt_woe 1.661389\n", - "3 OthDebtRatio_woe 0.164814\n", - "4 Age_woe 0.530540\n", - "5 Leverage_woe 0.604085" - ], - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
column0
0Employ_woe1.156029
1MonthlyLoad_woe0.207246
2Creddebt_woe1.661389
3OthDebtRatio_woe0.164814
4Age_woe0.530540
5Leverage_woe0.604085
\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - " \n", - "
\n", - "
\n", - " " - ] - }, - "metadata": {}, - "execution_count": 9 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2022,28 +348,13 @@ { "cell_type": "code", "metadata": { - "id": "NpNZLhOOfytV", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "18c15f68-17c2-44a1-f471-3b366984b984" + "id": "NpNZLhOOfytV" }, "source": [ "bankloan_logreg.intercept_" ], - "execution_count": 10, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "array([-0.02724998])" - ] - }, - "metadata": {}, - "execution_count": 10 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2068,27 +379,14 @@ { "cell_type": "code", "metadata": { - "id": "LS6iDSe0M3Fy", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "a5845b9f-7c93-4d3e-fc2a-eaf7118db0ed" + "id": "LS6iDSe0M3Fy" }, "source": [ "print(bankloan_logreg.l1_ratio_)\n", "print(bankloan_logreg.C_)" ], - "execution_count": 11, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[0.1]\n", - "[0.35938137]\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2104,31 +402,15 @@ { "cell_type": "code", "metadata": { - "id": "L8ckdDCGntCt", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "0c9a8e8e-8237-4f81-ea3f-63c66a515e03" + "id": "L8ckdDCGntCt" }, "source": [ "pred_class_test = bankloan_logreg.predict(bankloan_test_WoE.iloc[:, 1:].drop(columns=\"Income_woe\"))\n", "probs_test = bankloan_logreg.predict_proba(bankloan_test_WoE.iloc[:, 1:].drop(columns=\"Income_woe\"))\n", "print(probs_test[0:5], pred_class_test[0:5])" ], - "execution_count": 12, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[[0.88199581 0.11800419]\n", - " [0.43435595 0.56564405]\n", - " [0.98810934 0.01189066]\n", - " [0.35490169 0.64509831]\n", - " [0.68865838 0.31134162]] [0 1 0 1 0]\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2149,18 +431,13 @@ "source": [ "from sklearn.metrics import confusion_matrix" ], - "execution_count": 13, + "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "seZjBboipd6G", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 512 - }, - "outputId": "9b2ea8f7-54b1-4e24-9616-28d093193e76" + "id": "seZjBboipd6G" }, "source": [ "\n", @@ -2174,8 +451,8 @@ "\n", "# Turn to dataframe\n", "df_cm = pd.DataFrame(\n", - " confusion_matrix_cs, index=['Non Defaulter', 'Defaulter'], \n", - " columns=['Non Defaulter', 'Defaulter'], \n", + " confusion_matrix_cs, index=['Non Defaulter', 'Defaulter'],\n", + " columns=['Non Defaulter', 'Defaulter'],\n", ")\n", "\n", "# Parameters of the image\n", @@ -2187,7 +464,7 @@ "heatmap = sns.heatmap(df_cm, annot=True, fmt='.2f')\n", "\n", "# Make it nicer\n", - "heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0, \n", + "heatmap.yaxis.set_ticklabels(heatmap.yaxis.get_ticklabels(), rotation=0,\n", " ha='right', fontsize=fontsize)\n", "heatmap.xaxis.set_ticklabels(heatmap.xaxis.get_ticklabels(), rotation=45,\n", " ha='right', fontsize=fontsize)\n", @@ -2199,21 +476,8 @@ "# Plot!\n", "plt.show()" ], - "execution_count": 14, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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\n" - }, - "metadata": { - "needs_background": "light" - } - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2249,274 +513,47 @@ " points0=750, # Base points\n", " odds0=0.01, # Base odds bads:goods\n", " pdo=50\n", - " ) # PDO \n" + " ) # PDO\n" ], - "execution_count": 15, + "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "5m82EUFKPDTR", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "965e311c-34ec-46d7-84cf-7158b678dd67" + "id": "5m82EUFKPDTR" }, "source": [ "bankloan_sc" ], - "execution_count": 16, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "{'basepoints': variable bin points\n", - " 0 basepoints NaN 420.0, 'Employ': variable bin points\n", - " 40 Employ [-inf,4.0) -52.0\n", - " 41 Employ [4.0,14.0) 31.0\n", - " 42 Employ [14.0,22.0) 102.0\n", - " 43 Employ [22.0,inf) 264.0, 'MonthlyLoad': variable bin points\n", - " 31 MonthlyLoad [-inf,0.1) 22.0\n", - " 32 MonthlyLoad [0.1,0.2) 15.0\n", - " 33 MonthlyLoad [0.2,0.30000000000000004) 5.0\n", - " 34 MonthlyLoad [0.30000000000000004,0.7000000000000001) -6.0\n", - " 35 MonthlyLoad [0.7000000000000001,inf) -27.0, 'Creddebt': variable bin points\n", - " 4 Creddebt [-inf,1.0) 38.0\n", - " 5 Creddebt [1.0,6.0) -24.0\n", - " 6 Creddebt [6.0,inf) -123.0, 'OthDebtRatio': variable bin points\n", - " 25 OthDebtRatio [-inf,0.01) 18.0\n", - " 26 OthDebtRatio [0.01,0.05) 6.0\n", - " 27 OthDebtRatio [0.05,0.07) 2.0\n", - " 28 OthDebtRatio [0.07,0.09) -3.0\n", - " 29 OthDebtRatio [0.09,0.14) -8.0\n", - " 30 OthDebtRatio [0.14,inf) -16.0, 'Age': variable bin points\n", - " 36 Age [-inf,30.0) -23.0\n", - " 37 Age [30.0,45.0) 8.0\n", - " 38 Age [45.0,50.0) 40.0\n", - " 39 Age [50.0,inf) 72.0, 'Leverage': variable bin points\n", - " 7 Leverage [-inf,8.0) 36.0\n", - " 8 Leverage [8.0,16.0) -11.0\n", - " 9 Leverage [16.0,22.0) -42.0\n", - " 10 Leverage [22.0,inf) -99.0}" - ] - }, - "metadata": {}, - "execution_count": 16 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "2z72hOjuPD1p", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "3894da9c-a0dc-43de-b18f-7285be64e6cb" + "id": "2z72hOjuPD1p" }, "source": [ "# Applying the credit score. Applies over the original data!\n", - "train_score = sc.scorecard_ply(bankloan_train_noWoE, bankloan_sc, \n", + "train_score = sc.scorecard_ply(bankloan_train_noWoE, bankloan_sc,\n", " print_step=0)\n", - "test_score = sc.scorecard_ply(bankloan_test_noWoE, bankloan_sc, \n", + "test_score = sc.scorecard_ply(bankloan_test_noWoE, bankloan_sc,\n", " print_step=0)" ], - "execution_count": 17, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/usr/local/lib/python3.9/dist-packages/scorecardpy/scorecard.py:241: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " dat_score.loc[:,'score'] = card_basepoints + dat_score.sum(axis=1)\n", - "/usr/local/lib/python3.9/dist-packages/scorecardpy/scorecard.py:241: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " dat_score.loc[:,'score'] = card_basepoints + dat_score.sum(axis=1)\n" - ] - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "code", "metadata": { - "id": "5XxmR_1SPIBP", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 300 - }, - "outputId": "19a52561-3956-4009-89f9-a4a7f1fb3821" + "id": "5XxmR_1SPIBP" }, "source": [ "train_score.describe()" ], - "execution_count": 18, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - " score\n", - "count 1042.000000\n", - "mean 446.915547\n", - "std 133.572974\n", - "min 80.000000\n", - "25% 358.000000\n", - "50% 440.000000\n", - "75% 513.000000\n", - "max 870.000000" - ], - "text/html": [ - "\n", - "
\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
score
count1042.000000
mean446.915547
std133.572974
min80.000000
25%358.000000
50%440.000000
75%513.000000
max870.000000
\n", - "
\n", - " \n", - " \n", - " \n", - "\n", - " \n", - "
\n", - "
\n", - " " - ] - }, - "metadata": {}, - "execution_count": 18 - } - ] + "execution_count": null, + "outputs": [] }, { "cell_type": "markdown", @@ -2524,7 +561,7 @@ "id": "ftudtXeaPMEI" }, "source": [ - "And that's it! We have a fully functional credit scorecard. In the next lab we will contrast this with two more models: a Random Forest and an XGBoost model." + "And that's it! We have a fully functional credit scorecard. In later labs we will contrast this with two more models: a Random Forest and an XGBoost model." ] } ]