Created
March 21, 2025 14:55
-
-
Save jtrive84/0e62369b97eb59229990351cc30b527b to your computer and use it in GitHub Desktop.
Intro to Frequency GLMs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<br>\n", | |
"\n", | |
"<p align=\"center\"><img src=\"dsjc-logo.jpg\" width=\"640\" height=\"360\" p>\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"<p align=\"center\"><img src=\"paper.PNG\"p>\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"<!-- Title: *Case Study: French Motor Third-Party Liability Claims*\n", | |
"2025-03-20 -->\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"--- \n", | |
"\n", | |
"**Date:** 2025-03-20 \n", | |
"**Presented by:** James D. Triveri \n", | |
"**See also:** https://github.com/actuarial-data-science/Tutorials\n", | |
"\n", | |
"---\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"- **Part I.** Discussion of GLMs, in particular claim frequency models with Poisson response.\n", | |
"- **Part II.** Introduction to decision trees for classification and regression with extensions.\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"**Not covered in this presentation**:\n", | |
"\n", | |
"- Negative binomial, gamma, over-dispersed Poisson or Tweedie GLMs\n", | |
"- Variable selection\n", | |
"- Feature engineering\n", | |
"- Model validation\n", | |
"- Creating relativities from GLM output\n", | |
"\n", | |
"<br>\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"### **Introduction to GLMs**\n", | |
"\n", | |
"Generalized Linear Models (GLMs) are a generalization of ordinary linear regression (OLS) that allows for the target variable to have a distribution other than a normal distribution. \n", | |
"\n", | |
"\n", | |
"* GLMs consist of three components:\n", | |
"\n", | |
"1. **Systematic Component**: A linear predictor that is a linear combination of the explanatory variables. For example, we may assume driver age influences the expected claim frequency for a personal auto policy.\n", | |
"\n", | |
"2. **Random Component**: Accounts for the component of the outcome driven by causes other than the predictors. Includes randomness and variable effects not explicitly included in the model. \n", | |
"\n", | |
"3. **Link Function**: A function that links the mean of the response variable to the linear predictor.\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"\n", | |
"**Some terminology:**\n", | |
"\n", | |
"- **Target/response variable:** The value we are trying to predict. For our frequency model, the target is the number of claims per exposure. \n", | |
"\n", | |
"- **Predictors:** Exposure characteristics included in the model. \n", | |
"\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"From *Generalized Linear Models for Insurance Rating* ([CAS Monograph Number 5](https://www.casact.org/monograph/cas-monograph-no-5)):\n", | |
"\n", | |
"\n", | |
"> **The goal in modeling with GLMs is to explain as much of the variability in the outcome as we can using our predictors. In other words, we aim to shift as much of the variability as possible away from the random component and into the systematic component.**\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"### **Poisson GLM vs. Ordinary Least Squares (OLS)**\n", | |
"\n", | |
"\n", | |
"**Ordinary Least Squares (OLS)**:\n", | |
"- **Distribution**: Assumes the response variable follows a normal distribution.\n", | |
"- **Link Function**: Uses the identity link function, meaning the expected value of the response variable is directly modeled as a linear combination of the explanatory variables.\n", | |
"- **Variance**: Assumes constant variance (homoscedasticity) across all levels of the explanatory variables.\n", | |
"\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"<p align=\"center\"><img src=\"OLS-normal.png\"p>\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"\n", | |
"**GLM with Poisson Response**:\n", | |
"- **Distribution**: Assumes the response follows a Poisson distribution, which is typically used for count data (e.g., number of events).\n", | |
"- **Link Function**: Uses the log link function, which means the logarithm of the expected value of the response variable is modeled as a linear combination of the explanatory variables.\n", | |
"- **Variance**: The variance of the response is equal to its mean, which is a characteristic of the Poisson distribution.\n", | |
"\n", | |
"\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"<p align=\"center\"><img src=\"GLM-lognormal.png\"p>\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"A major difference between OLS and the GLM framework is that a closed-form solution exists for estimating OLS parameters (the Normal Equations):\n", | |
"\n", | |
"$$\n", | |
"\\hat \\beta = (X^TX)^{-1}X^Ty,\n", | |
"$$\n", | |
"\n", | |
"where:\n", | |
"\n", | |
"- $X$ is a n-by-p design matrix (predictors).\n", | |
"- $y$ is a n-by-1 vector representing the response.\n", | |
"- $\\hat \\beta$ is a p-by-1 vector of model parameters. \n", | |
"- $n$ is the number of records in the dataset.\n", | |
"- $p$ is the number of predictors in the model. \n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"#### **Derivation:**\n", | |
"\n", | |
"Begin with the residual sum of squares:\n", | |
"$$\n", | |
"\\hat \\varepsilon^T \\hat \\varepsilon = \\sum_{i=1}^{n} (y - X\\hat{\\beta})^{T}(y - X\\hat{\\beta}).\n", | |
"$$\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"Expanding the right-hand side and combining terms results in:\n", | |
"\n", | |
"$$\n", | |
"\\hat \\varepsilon^T \\hat \\varepsilon = y^{T}y - 2y^{T}X\\hat{\\beta} + \\hat{\\beta}X^{T}X\\hat{\\beta}\n", | |
"$$\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"To find the value of $\\hat \\beta$ that minimizes $\\hat \\varepsilon^T \\hat \\varepsilon$, differentiate $\\hat \\varepsilon^T \\hat \\varepsilon$ with respect to $\\hat \\beta$ and set the result to 0:\n", | |
"\n", | |
"$$\n", | |
"\\frac{\\partial \\hat{\\varepsilon}^{T}\\hat{\\varepsilon}}{\\partial \\hat{\\beta}} = -2X^{T}y + 2X^{T}X\\hat{\\beta} = 0,\n", | |
"$$\n", | |
"\n", | |
"then solve for $\\hat \\beta$:\n", | |
"\n", | |
"$$\n", | |
"\\hat \\beta = (X^TX)^{-1}X^Ty.\n", | |
"$$\n", | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"#### **A few points:**\n", | |
"\n", | |
"- The normal equations are a beautiful theoretical result, but are almost never used in practice. \n", | |
"- Computing $X^{T}X$ squares the condition number, which is a measure of how much solving a linear system will magnify any noise in your data. \n", | |
"- By forming $X^{T}X$, we double the loss of precision in the final result. \n", | |
"- Check out my blog for a walkthrough of how to solve systems of equations using matrix factorization methods [here](https://www.jtrive.com/posts/mat-fact-lin-reg/mat-fact-lin-reg.html).\n", | |
"- For more information on how linear models are actually fit, refer to this excellent blog post: [A Deep Dive Into How R Fits a Linear Model](https://madrury.github.io/jekyll/update/statistics/2016/07/20/lm-in-R.html).\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"- GLMs do not have a closed-form solution because they involve maximizing a likelihood function that is often nonlinear. Unlike OLS, GLMs require iterative numerical methods (Iteratively Reweighted Least Squares). \n", | |
"\n", | |
"- This iterative process is necessary because the relationship between the predictors and the response in GLMs is mediated by a link function and the distribution of the response variable, making the equations more complex.\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"### **Iteratively Reweighted Least Squares for Poisson GLM**\n", | |
"\n", | |
"- Iteratively Reweighted Least Squares (IRLS) is an iterative optimization technique that extends the method of least squares to handle a broader class of models, including those where the response variable follows a distribution from the exponential family (e.g., binomial, Poisson).\n", | |
"\n", | |
"- In practice, we do not know the values of the proposed model's parameters, but we do know the data. We use the likelihood function to observe how the function changes for different parameter values while holding the data fixed. \n", | |
"\n", | |
"- We can make use of this to judge which values of the parameters lead to greater relative chances for the sample to occur. **Larger values of the likelihood correspond parameter values that are relatively better supported by the data**.\n", | |
"\n", | |
"- In short, *the underlying goal of a likelihood is to determine which parameters make the given data most likely*. \n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"The joint density of $n$ independently distributed observations $\\mathbf{y} = (y_{1}, \\cdots, y_{n})^{T}$ is given by:\n", | |
"\n", | |
"$$\n", | |
"f(\\mathbf{y}|\\mathbf{\\beta}) = \\prod_{i=1}^{n} f_{i}(y_{i}|\\mathbf{\\beta})\n", | |
"$$\n", | |
"\n", | |
"When this expression is interpreted as a function of unknown $\\beta$ given known data $y$, we obtain the likelihood function:\n", | |
"\n", | |
"$$\n", | |
"L(\\mathbf{\\beta}|\\mathbf{y}) = \\prod_{i=1}^{n} f_{i}(y_{i}|\\mathbf{\\beta})\n", | |
"$$\n", | |
"\n", | |
"Solving the likelihood equation can be difficult. This can be partially alleviated by logging the likelihood expression, arriving at an expression for the log-likelihood:\n", | |
"\n", | |
"$$\n", | |
"\\mathcal{L}(\\mathbf{\\beta}|\\mathbf{y}) = \\sum_{i=1}^{n} f_{i}(y_{i}|\\mathbf{\\beta})\n", | |
"$$\n", | |
"\n", | |
"<br> \n", | |
"\n", | |
"#### **Poisson Estimating Equations**\n", | |
"\n", | |
"\n", | |
"Recall that the Poisson probability density function with mean $\\mu$ is defined as:\n", | |
"\n", | |
"$$\n", | |
"f(y) = \\frac{\\mu^{y} e^{-\\mu}}{y!}\n", | |
"$$\n", | |
"<br> \n", | |
"\n", | |
"For a dataset with $n$ observations assumed to follow a Poisson distribution, with each observation having mean parameter $\\mu_{i}$, the likelihood is given by\n", | |
"\n", | |
"$$ \n", | |
"L = \\prod_{i=1}^{n} \\frac{\\mu_{i}^{y}e^{-\\mu_{i}}}{y_{i}!},\n", | |
"$$\n", | |
"\n", | |
"and similarly the log-likelihood as:\n", | |
"\n", | |
"$$\n", | |
"\\mathcal{L} = \\sum_{i=1}^{n} y_{i} \\times \\mathrm{Ln}(\\mu_{i}) - \\mu_{i} - \\mathrm{Ln}(y_{i}!)\n", | |
"$$\n", | |
"\n", | |
"Within the GLM framework, deviance represents the difference between the log-likelihood of the saturated model (perfect fitting model) and the log-likelihood of the proposed model. Lower deviance indicates a better fit to the data. For Poisson, deviance is defined as:\n", | |
"\n", | |
"$$\n", | |
"\\text{D} = 2 \\times \\sum_{i=1}^{n} \\big(y_{i} \\times \\mathrm{Ln}(y_{i}/\\mu_{i}) - (y_{i}-\\mu_{i})\\big)\n", | |
"$$\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<br>\n", | |
"\n", | |
"- Linear regression models are found by minimizing the sum of squared residuals. \n", | |
"- Poisson regression models are found by minimizing the *residual deviance*, which is equivalent to maximizing the log-likelihood of the data given the model. \n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"\n", | |
"### **IRLS Algorithm:**\n", | |
"\n", | |
"- $X$ is a n-by-p design matrix \n", | |
"- $y$ is a n-by-1 vector representing the response \n", | |
"- $\\text{offset}$ is a n-by-1 vector representing the exposure \n", | |
"- $\\mu$ is a n-by-1 vector representing the mean of each observation \n", | |
"- $\\eta$ is a n-by-1 vector representing the linear component, $\\eta = \\mathrm{Ln}(\\mu)$ \n", | |
"- $W$ is a n-by-n diagonal matrix with each value equal to $\\mu$ (weight matrix) \n", | |
"- $z$ is a n-by-1 vector representing the working response \n", | |
"- $\\epsilon$ represents the change in deviance below which iteration will terminate \n", | |
"\n", | |
"<br> \n", | |
"\n", | |
"\n", | |
"**Pseudocode:**\n", | |
"\n", | |
"\n", | |
"- $\\text{D}_{0} = 0$ \n", | |
"\n", | |
"- $\\mu = (y + \\mathrm{mean}(y)) / 2$ \n", | |
"- $\\eta = \\mathrm{Ln}(\\mu)$ \n", | |
"- $\\epsilon = .0001$ \n", | |
"- $\\Delta \\text{D} = 1\\mathrm{e}^{15}$\n", | |
"<br> \n", | |
"\n", | |
"\n", | |
"**WHILE** $|\\Delta \\text{D}| \\gt \\epsilon$:\n", | |
"\n", | |
"$\\qquad W$ = diag($\\mu$)\n", | |
"<br> \n", | |
"$\\qquad z$ = $\\eta + \\frac{y - \\mu}{\\mu} - \\text{offset}$\n", | |
"<br> \n", | |
"$\\qquad \\beta = (X^{T}WX)^{-1}X^{T}Wz$ \n", | |
"<br>\n", | |
"$\\qquad \\eta = X\\beta + \\text{offset}$ \n", | |
"<br>\n", | |
"$\\qquad \\mu = \\mathrm{exp}(\\eta)$ \n", | |
"<br>\n", | |
"$ \\qquad \\text{D} = 2 \\times \\sum \\big(y \\times \\mathrm{Ln}(y/\\mu) - (y-\\mu)\\big)$\n", | |
"<br> \n", | |
"$ \\qquad \\Delta \\text{D} = |\\text{D} - \\text{D}_{0}|$\n", | |
"<br> \n", | |
"$ \\qquad \\text{D}_{0} = \\text{D}$\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"When IRLS is used, given an initial estimate of the parameters $\\hat{\\beta}$, we calculate the estimated linear predictor $\\mathrm{Ln}(\\hat{\\mu}_{i}) = \\hat{\\eta}_{i} = x_{i}^{T}\\beta$, which is then used to obtain the fitted values $\\hat{\\mu}_{i} = g^{-1}(\\hat{\\eta}_{i}) = \\mathrm{exp}(\\hat{\\eta}_{i})$. This process continues until the change in deviance across iterations falls below some predefined threshold, in this case $\\epsilon$." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"### **Loading FrenchMotorTPLFreq**\n", | |
"\n", | |
"The dataset referenced in the paper is available in Test_AnalyticHub:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"\n", | |
"Number of rows in df: 678,013\n", | |
"\n" | |
] | |
}, | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>AREA</th>\n", | |
" <th>VEHPOWER</th>\n", | |
" <th>VEHAGE</th>\n", | |
" <th>DRIVAGE</th>\n", | |
" <th>BONUSMALUS</th>\n", | |
" <th>VEHBRAND</th>\n", | |
" <th>VEHGAS</th>\n", | |
" <th>DENSITY</th>\n", | |
" <th>REGION</th>\n", | |
" <th>CLAIMNB</th>\n", | |
" <th>EXPOSURE</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>'D'</td>\n", | |
" <td>4</td>\n", | |
" <td>0</td>\n", | |
" <td>31</td>\n", | |
" <td>100</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>1957</td>\n", | |
" <td>'R11'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.67</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>'D'</td>\n", | |
" <td>10</td>\n", | |
" <td>10</td>\n", | |
" <td>51</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>1457</td>\n", | |
" <td>'R52'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.63</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>'D'</td>\n", | |
" <td>10</td>\n", | |
" <td>10</td>\n", | |
" <td>51</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>1457</td>\n", | |
" <td>'R52'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.13</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>'B'</td>\n", | |
" <td>4</td>\n", | |
" <td>8</td>\n", | |
" <td>43</td>\n", | |
" <td>50</td>\n", | |
" <td>'B2'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>94</td>\n", | |
" <td>'R52'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.72</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>'C'</td>\n", | |
" <td>7</td>\n", | |
" <td>0</td>\n", | |
" <td>69</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>238</td>\n", | |
" <td>'R73'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.72</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>'C'</td>\n", | |
" <td>7</td>\n", | |
" <td>0</td>\n", | |
" <td>69</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>238</td>\n", | |
" <td>'R73'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.04</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>'E'</td>\n", | |
" <td>4</td>\n", | |
" <td>0</td>\n", | |
" <td>46</td>\n", | |
" <td>118</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>6617</td>\n", | |
" <td>'R11'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.75</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>'C'</td>\n", | |
" <td>8</td>\n", | |
" <td>0</td>\n", | |
" <td>54</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>421</td>\n", | |
" <td>'R93'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.67</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>'C'</td>\n", | |
" <td>8</td>\n", | |
" <td>0</td>\n", | |
" <td>54</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>421</td>\n", | |
" <td>'R93'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.09</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>'E'</td>\n", | |
" <td>5</td>\n", | |
" <td>2</td>\n", | |
" <td>30</td>\n", | |
" <td>100</td>\n", | |
" <td>'B2'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>4972</td>\n", | |
" <td>'R42'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.76</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>10</th>\n", | |
" <td>'C'</td>\n", | |
" <td>5</td>\n", | |
" <td>0</td>\n", | |
" <td>68</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>146</td>\n", | |
" <td>'R91'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.70</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>11</th>\n", | |
" <td>'C'</td>\n", | |
" <td>5</td>\n", | |
" <td>0</td>\n", | |
" <td>68</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>146</td>\n", | |
" <td>'R91'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.06</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>12</th>\n", | |
" <td>'A'</td>\n", | |
" <td>12</td>\n", | |
" <td>9</td>\n", | |
" <td>51</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Regular'</td>\n", | |
" <td>17</td>\n", | |
" <td>'R53'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.76</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>13</th>\n", | |
" <td>'B'</td>\n", | |
" <td>10</td>\n", | |
" <td>0</td>\n", | |
" <td>43</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>76</td>\n", | |
" <td>'R91'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.64</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>14</th>\n", | |
" <td>'B'</td>\n", | |
" <td>10</td>\n", | |
" <td>0</td>\n", | |
" <td>43</td>\n", | |
" <td>50</td>\n", | |
" <td>'B12'</td>\n", | |
" <td>'Diesel'</td>\n", | |
" <td>76</td>\n", | |
" <td>'R91'</td>\n", | |
" <td>1.0</td>\n", | |
" <td>0.12</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" AREA VEHPOWER VEHAGE DRIVAGE BONUSMALUS VEHBRAND VEHGAS DENSITY \\\n", | |
"0 'D' 4 0 31 100 'B12' 'Regular' 1957 \n", | |
"1 'D' 10 10 51 50 'B12' 'Diesel' 1457 \n", | |
"2 'D' 10 10 51 50 'B12' 'Diesel' 1457 \n", | |
"3 'B' 4 8 43 50 'B2' 'Regular' 94 \n", | |
"4 'C' 7 0 69 50 'B12' 'Diesel' 238 \n", | |
"5 'C' 7 0 69 50 'B12' 'Diesel' 238 \n", | |
"6 'E' 4 0 46 118 'B12' 'Regular' 6617 \n", | |
"7 'C' 8 0 54 50 'B12' 'Regular' 421 \n", | |
"8 'C' 8 0 54 50 'B12' 'Regular' 421 \n", | |
"9 'E' 5 2 30 100 'B2' 'Regular' 4972 \n", | |
"10 'C' 5 0 68 50 'B12' 'Diesel' 146 \n", | |
"11 'C' 5 0 68 50 'B12' 'Diesel' 146 \n", | |
"12 'A' 12 9 51 50 'B12' 'Regular' 17 \n", | |
"13 'B' 10 0 43 50 'B12' 'Diesel' 76 \n", | |
"14 'B' 10 0 43 50 'B12' 'Diesel' 76 \n", | |
"\n", | |
" REGION CLAIMNB EXPOSURE \n", | |
"0 'R11' 1.0 0.67 \n", | |
"1 'R52' 1.0 0.63 \n", | |
"2 'R52' 1.0 0.13 \n", | |
"3 'R52' 1.0 0.72 \n", | |
"4 'R73' 1.0 0.72 \n", | |
"5 'R73' 1.0 0.04 \n", | |
"6 'R11' 1.0 0.75 \n", | |
"7 'R93' 1.0 0.67 \n", | |
"8 'R93' 1.0 0.09 \n", | |
"9 'R42' 1.0 0.76 \n", | |
"10 'R91' 1.0 0.70 \n", | |
"11 'R91' 1.0 0.06 \n", | |
"12 'R53' 1.0 0.76 \n", | |
"13 'R91' 1.0 0.64 \n", | |
"14 'R91' 1.0 0.12 " | |
] | |
}, | |
"execution_count": 1, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\"\"\"\n", | |
"Load dataset from Case Study: French Motor Third-Party Liability Claims.\n", | |
"\"\"\"\n", | |
"import matplotlib as mpl\n", | |
"import matplotlib.pyplot as plt\n", | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import pyodbc\n", | |
"import sqlalchemy\n", | |
"\n", | |
"np.set_printoptions(suppress=True, precision=5, linewidth=1000)\n", | |
"pd.options.mode.chained_assignment = None\n", | |
"pd.set_option('display.max_columns', None)\n", | |
"pd.set_option('display.width', None)\n", | |
"pd.set_option(\"display.precision\", 5)\n", | |
"\n", | |
"\n", | |
"driver = \"SQL Server\"\n", | |
"server = \"dnsdbent01t\"\n", | |
"database = \"Test_AnalyticHub\"\n", | |
"\n", | |
"# Create sqlalchemy connection to Test_AnalyticHub.\n", | |
"conn_uri = f\"mssql+pyodbc://{server}/{database}?driver={driver}\".replace(\" \", \"+\")\n", | |
"db_conn = sqlalchemy.create_engine(conn_uri)\n", | |
"sql_str = \"SELECT * FROM [Test_AnalyticHub].[dbo].[FrenchMotorTPLFreq]\"\n", | |
"\n", | |
"df = (\n", | |
" pd.read_sql(sql_str, db_conn)\n", | |
" .fillna(value={\"CLAIMNB\": 0, \"EXPOSURE\": 0})\n", | |
" .reset_index(drop=True)\n", | |
")\n", | |
"\n", | |
"column_order = [\n", | |
" 'AREA', 'VEHPOWER', 'VEHAGE', 'DRIVAGE', 'BONUSMALUS', 'VEHBRAND', \n", | |
" 'VEHGAS', 'DENSITY', 'REGION', 'CLAIMNB', 'EXPOSURE'\n", | |
"]\n", | |
"\n", | |
"df = df[column_order]\n", | |
"\n", | |
"print(f\"\\nNumber of rows in df: {df.shape[0]:,}\\n\")\n", | |
"\n", | |
"df.head(15)\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Number of claims : 36,102\n", | |
"Number of exposures : 358,499\n", | |
"Aggregate frequency : 0.10070\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"agg_freq = df.CLAIMNB.sum() / df.EXPOSURE.sum()\n", | |
"\n", | |
"print(f\"Number of claims : {df.CLAIMNB.sum():,.0f}\")\n", | |
"print(f\"Number of exposures : {df.EXPOSURE.sum():,.0f}\") \n", | |
"print(f\"Aggregate frequency : {agg_freq:.5f}\")\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"The French Motor Third-Party Liability Claims dataset consists of the following columns:\n", | |
"\n", | |
"- **AREA:** The area code. \n", | |
"- **VEHPOWER:** The power of the car (ordered categorical). \n", | |
"- **VEHAGE:** The vehicle age, in years. \n", | |
"- **DRIVAGE:** The driver age, in years (in France, people can drive a car at 18). \n", | |
"- **BONUSMALUS:** Bonus/malus, between 50 and 350: <100 means bonus, >100 means malus in France. \n", | |
"- **VEHBRAND:** The car brand (unknown categories). \n", | |
"- **VEHGAS:** The car gas, Diesel or regular. \n", | |
"- **DENSITY:** The density of inhabitants (number of inhabitants per km2) in the city the driver of the car lives in. \n", | |
"- **REGION:** The policy regions in France (based on a standard French classification).\n", | |
"- **CLAIMNB:** Number of claims during the exposure period. \n", | |
"- **EXPOSURE:** The exposure period. \n", | |
"\n", | |
"\n", | |
"<br> \n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Visualizing distribution of categorical features:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAKyCAYAAADIG729AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlkpJREFUeJzs3X1cVHX+///nCGiRjpepXFhaKimgYoq6bSmVYGOwq9katF67bRtt7mpidmFmllFZm2ta3/C6Dbe1iw2kBQq1C3NJjQyv2iwqwFqLNTAyZ2R+f/hjPo5cDsyZGfBxv924Jed93u/X68wMp3md8z7nmOx2u10AAAAAAMDt2ng7AQAAAAAAWiuKbgAAAAAADELRDQAAAACAQSi6AQAAAAAwCEU3AAAAAAAGoegGAAAAAMAgFN0AAAAAABiEohsAAAAAAINQdAMAAAAAYBCKbgA4j6xfv16dOnXydhpArYqKimQymVRQUOC2MU0mk15//XW3jdccixcv1pAhQxy/T58+Xb/+9a+9lg8AwDMougHAINOnT5fJZKrx89lnn3k7tXotXrxYJpNJ48aNq9H2+OOPy2QyacyYMY0ez52FVF2v6dk/564XEBCgyy67THfffbd+/PHHRuW0fv36WsdOS0tr9ja4Q3l5ue677z5dccUVuuCCC9SzZ09df/31evXVV2W32xs1xvbt22UymXT8+HFjk3VBr169dPToUUVERHgsZkOfFSM988wzWr9+faPWNeKABADAM/y9nQAAtGbjxo3TunXrnJZdfPHFNdY7deqU2rZt66m0GhQUFKRt27apuLhYoaGhjuXr1q3TJZdc4rW8nnnmGT322GOO34OCgrRu3bpaDxBUv/ZWq1XvvvuuZs+erR9//FGrV69uVCyz2azDhw87LevYsWON9axWqwICAlzckqY7fvy4fvnLX+qHH37Q0qVLNXz4cPn7+2vHjh1KSUnRtdde2yJnM1T/DfTs2dPjsV35rLjz/a7t8+QJnv7MAsD5jjPdAGCgdu3aqWfPnk4/fn5+GjNmjO68807NnTtX3bp109ixYyVJBw4ckMViUfv27dWjRw9NmTJF3333nWO8MWPG6K677lJKSoq6dOminj17avHixU4xjx8/rttuu009evTQBRdcoIiICGVmZjqtk52drQEDBqh9+/YaN26cjh496tTevXt3xcbGasOGDY5lO3fu1Hfffafx48c7rVtVVaUlS5YoNDRU7dq105AhQ/Svf/3L0d6nTx9JUlRUlNNZ8ob6VZ/Ze/nllzVmzBhdcMEFevXVV51eS0nq1KlTjWVnv/a9evVSUlKSbr31VpemGZtMphrv3YUXXuiYIrx27Vpddtllateunex2u3744Qfddttt6t69u8xms6699lp9/PHHTmM+9thj6tGjhzp06KBZs2bpnnvucZpu3Bj33nuvioqK9O9//1vTpk3TwIED1b9/f/3ud79TQUGB2rdvL0l68cUXNWzYMHXo0EE9e/ZUUlKS/vvf/zpe25iYGElS586dZTKZNH36dEmS3W7X448/rssuu0wXXnihBg8erC1btjjl8MYbb6hfv3668MILFRMTow0bNtQ4a/7KK68oPDxc7dq1U+/evbV8+XKnMXr37q2lS5dq+vTp6tixo373u9/VejZ3//79Gj9+vMxmszp06KCrr75aR44ckSR9+OGHGjt2rLp166aOHTtq9OjR2rt3r0uvp1T/Z8Wd7/fJkyed2s+dXl5VVaXU1FT17dtX7dq10yWXXKJHHnlEknv/jl588UV9+eWXio+PV+fOnXXRRRcpPDxcWVlZLr92AICGUXQDgJds2LBB/v7+ev/99/X888/r6NGjGj16tIYMGaLdu3frX//6l7799lv95je/qdHvoosu0r///W89/vjjWrJkiXJzcyWd+QJ+ww03aOfOnXrxxRd14MABPfbYY/Lz83P0r6ys1JNPPqlNmzbpnXfe0VdffaW77767Rn4zZ850mvq6du1a3XrrrTXOyD/zzDNavny5nnzySe3bt09xcXFKSEjQf/7zH0lSfn6+JOmtt97S0aNH9eqrrzaqX7UFCxborrvu0sGDBxUXF9fEV1u68MILZbVam9z/bJ999plefvllvfLKK44Ccfz48frmm2+UlZWlPXv2aOjQobruuutUVlYmSXr55Zf14IMP6pFHHtHu3bsVFBSkVatWOY1bPeW7qKio1rhVVVXavHmzbr31VgUHB9dob9++vfz9z0xiO3XqlB5++GF9/PHHev311/XFF184CutevXrplVdekSQdPnxYR48e1TPPPCNJuv/++7Vu3TqtXr1a+/fv15///Gf99re/1Y4dOySdKeImTZqkX//61yooKNDvf/973XfffU557NmzR7/5zW90yy236JNPPtHixYv1wAMP1JhK/cQTTygiIkJ79uzRAw88UGN7SkpKdM011+iCCy5QXl6e9uzZo5kzZ8pms0mSKioqNG3aNL377rvatWuX+vXrJ4vFooqKilpfv8Y697Ni1Pt9roULFyo1NVUPPPCADhw4oJdeekk9evSQ5P6/o+TkZP38889655139Mknnyg1NdVxwAYA4GZ2AIAhpk2bZvfz87NfdNFFjp9JkybZ7Xa7ffTo0fYhQ4Y4rf/AAw/YY2NjnZZ9/fXXdkn2w4cPO/r98pe/dFpn+PDh9gULFtjtdrs9Ozvb3qZNG8f651q3bp1dkv2zzz5zLHv22WftPXr0cPz+4IMP2gcPHmw/deqUvXv37vYdO3bYT5w4Ye/QoYP9448/ts+ZM8c+evRox/rBwcH2Rx55pEZOd9xxh91ut9u/+OILuyT7Rx995LROY/v95S9/qXVb7Ha7XZL9tddeq7F82rRp9l/96leO3//973/bu3btav/Nb35Tb07Vql+ns9+76tfowQcftAcEBNj/+9//OtZ/++237Waz2X7y5EmncS6//HL7888/b7fb7fZRo0bZb7/9dqf2ESNG2AcPHuyUZ1hYmL24uLjWvL799lu7JPtTTz1Va3t98vPz7ZLsFRUVdrvdbt+2bZtdkv1///ufY50TJ07YL7jgAvvOnTud+s6aNcuemJhot9vt9gULFtgjIiKc2u+77z6nsZKSkuxjx451Wmf+/Pn2gQMHOn6/9NJL7b/+9a+d1jn3fVm4cKG9T58+9lOnTjVqG202m71Dhw72jIwMx7K6PiPVGvqsGPl+nx27vLzc3q5dO/sLL7xQa57u/juKjIy0L168uNZYAAD34ppuADBQTEyM03WhF110kePfw4YNc1p3z5492rZtW61nm44cOaL+/ftLkgYNGuTUFhQU5Jg2XFBQoNDQUMe6tQkMDNTll19ea/+zBQQE6Le//a3WrVunzz//XP37968Ru7y8XKWlpbrqqqucll911VU1pto2td+5r1NjZWZmqn379rLZbLJarfrVr36lv/71r43u36FDB6epym3a/N/ksEsvvdTp2vw9e/boxIkT6tq1q9MYP/30k2Mq9MGDB3X77bc7tY8aNUrbtm1z/B4dHa1Dhw7VmZP9/79JWvUN4+rz0UcfafHixSooKFBZWZmqqqokSV999ZUGDhxYa58DBw7o5MmTjssdqp06dUpRUVGSzpwZHz58uFN7dHS00+8HDx7Ur371K6dlV111lf7yl7/o9OnTjpkXDb23BQUFuvrqq+u8/vi///2vFi1apLy8PH377bc6ffq0Kisr9dVXX9U77rka+qwY9X6f7eDBg/r555913XXXNTrv5vwd3XXXXfrDH/6gnJwcXX/99brppptq/H0DANyDohsADHTRRRepb9++dbadraqqSvHx8UpNTa2xblBQkOPf5xYgJpPJUVBdeOGFDeZUW397HXe8njlzpkaMGKHCwkLNnDmzzjHPLQLtdnujCsPG9Dv3dWqs6gMeAQEBCg4OdvnGUW3atHHpvQsKCtL27dtrrOvOm5pdfPHF6ty5sw4ePFjvej/++KNiY2MVGxurF198URdffLG++uorxcXF6dSpU3X2q/4cbd26VSEhIU5t7dq1k1T7e3Tu56cx60gNv7cNfZ6nT5+uY8eO6S9/+YsuvfRStWvXTqNGjap3G2vT0GfFE+93Y/5269KUv6PZs2crLi5OW7duVU5OjpYtW6bly5frj3/8Y5PzAADUjmu6AcBHDB06VPv371fv3r3Vt29fp5/GFp6DBg1ScXGxPv30U7fkFB4ervDwcBUWFiopKalGu9lsVnBwsN577z2n5Tt37tSAAQMkyXEN+OnTp13q11zVBzwuvfRSw+/UPHToUH3zzTfy9/ev8d5169ZNkjRgwADt2rXLqd+5vzekTZs2mjx5sv72t7+ptLS0RvuPP/4om82mQ4cO6bvvvtNjjz2mq6++WldccUWN2Qy1vS8DBw5Uu3bt9NVXX9XYjl69ekmSrrjiCn344YdOY+3evdvp94EDB9b63vbv39/p/gINGTRokN599906r8V/9913ddddd8lisThu2nb2jQcby9XPihHvd/WN6d5+++1a2434O+rVq5duv/12vfrqq5o3b55eeOGFBvsAAFxH0Q0APiI5OVllZWVKTExUfn6+Pv/8c+Xk5GjmzJlOX7TrM3r0aF1zzTW66aablJubqy+++EJvvvmm092MXZWXl6ejR4/WeQZv/vz5Sk1N1d///ncdPnxY99xzjwoKCjRnzhxJZ+6EfuGFFzpuDPfDDz80qp8nHD58WAUFBU4/rp4llaTrr79eo0aN0q9//WtlZ2erqKhIO3fu1P333+8oSOfMmaO1a9dq7dq1+vTTT/Xggw9q//79TuPk5+friiuuUElJSZ2xHn30UfXq1UsjRozQxo0bdeDAAf3nP//R2rVrNWTIEJ04cUKXXHKJ2rZtq7/+9a/6/PPP9cYbb+jhhx92GufSSy+VyWRSZmamjh07phMnTqhDhw66++679ec//1kbNmzQkSNH9NFHH+nZZ5913Mn+97//vQ4dOqQFCxbo008/1csvv+y4QVr12dV58+bp7bff1sMPP6xPP/1UGzZs0MqVK2u9YV997rzzTpWXl+uWW27R7t279Z///EebNm1yPMqtb9++2rRpkw4ePKh///vfuvXWW5t1xrix3PV+n+2CCy7QggULlJKSoo0bN+rIkSPatWuX1qxZI8n9f0d/+tOflJ2drS+++EJ79+5VXl6e2w54AQCcUXQDgI8IDg7W+++/r9OnTysuLk4RERGaM2eOOnbs6HQ9cUNeeeUVDR8+XImJiRo4cKBSUlIaXbTX5qKLLqp3yuxdd92lefPmad68eYqMjNS//vUvxyOlJMnf318rVqzQ888/r+DgYMe1vg3184RbbrlFUVFRTj+1nUFuiMlkUlZWlq655hrNnDlT/fv31y233KKioiLH3acnT56sRYsWacGCBbryyiv15Zdf6g9/+IPTOJWVlTp8+HC9d1nv3Lmzdu3apd/+9rdaunSpoqKidPXVVys9PV1PPPGEOnbsqIsvvljr16/XP/7xDw0cOFCPPfaYnnzySadxQkJC9NBDD+mee+5Rjx49dOedd0qSHn74YS1atEjLli3TgAEDFBcXp4yMDMcjq/r06aMtW7bo1Vdf1aBBg7R69WrH3curp6APHTpUL7/8sjZv3qyIiAgtWrRIS5Yscdw9vbG6du2qvLw8nThxQqNHj9aVV16pF154wXE2eu3atfrf//6nqKgoTZkyRXfddZe6d+/uUoymcNf7fa4HHnhA8+bN06JFizRgwABNnjzZMUPB3X9Hp0+fVnJysgYMGKBx48YpLCyswburAwCaxmSv60I+AABgqMWLF+v11193ei51S/TII4/oueee09dff+3tVAAA8DncSA0AALhk1apVGj58uLp27ar3339fTzzxhONMOQAAcEbRDQAAXPKf//xHS5cuVVlZmS655BLNmzdPCxcu9HZaAAD4JKaXAwAAAABgEG6kBgAAAACAQSi6AQAAAAAwCEU3AAAAAAAGoegGAAAAAMAgFN0AAAAAABiEohsAAAAAAINQdAMAAAAAYBCKbgAAAAAADELRDQAAAACAQSi6AQAAAAAwCEU3AAAAAAAGoegGAAAAAMAgFN0AAAAAABiEohsAAAAAAINQdAMAAAAAYBCKbgAAAAAADELRDZ80c+ZMmUwmHTx40LFs+/btMplMat++vTp06KBLL71UCxcuVFVVlWOdxYsXy9/fX+3bt3f6+fDDD53GX7JkiUwmk958802PbROA88sNN9ygO++8s8by8vJyBQYGatu2bY592tk/Tz31lCRp/fr1GjJkSI3+06dP15/+9CfH7yaTSYGBgWrfvr169OihW265Rd9++62j/bPPPtPNN9+sLl266KKLLtKVV16pv//97472LVu2KCgoyCnGfffdJ5PJpKKiIseyjIwMderUSVVVVU7747py9/Pzc+yv+/btq6effropLyOAVsob+8hOnTppzJgxKigocLQ3dn/1448/ymw2a8SIEbXGNJlMyszMdFreqVMnbd++XZLz91iz2awePXrohhtu0D//+c9GvFpo6Si64XNOnDihl19+WV26dNGaNWuc2jp27KgTJ06ooqJC//rXv7R+/XqtX7/eaZ0bb7xRJ06ccPoZPny4o91ut2vdunW1jg8A7jJ79my99NJL+vnnn52Wp6enO4rc6n3a2T9z5851OdbOnTt14sQJffLJJzp69Kj+/Oc/S5K+/PJLjRw5UqGhoTp48KC+//57PfDAA0pOTtazzz4rSRozZoy+/fZbHTp0yDHe9u3bNWDAAMeXxeplo0ePVps2bRqVe2RkpGN/vXHjRt13333Ky8tzedsAtE7e2EceO3ZMV111lW6++Wan9sbsr15++WX5+fnpww8/VGFhYY0YXbt21b333ut0Muhc1dtTXl6uzz77TFOmTNGsWbO0bNkyl7cJLQtFN3zO5s2bddFFFyk1NVUbN26U1Wqtdb0BAwbol7/8pfbs2ePS+G+//bZKSkr0/PPP64033tCxY8fckTYAOElISJC/v79ef/11p+Xr1q1zzOZxt+7du+vmm2/WJ598Ikl68MEHFRUVpaefflo9evTQBRdcoF//+tf6y1/+ooULF6qiokLdunVTRESEtm3bJkmqrKzU/v37NW/ePMcy6UzRHRMT06S8fvGLXyg8PNzl/TWA1ssb+8iAgADdeuut+uyzz3Tq1Kla16lrf7VmzRrNmDFD11xzTa0nbSZPnqzKykq9+OKLjcqlQ4cOSkpK0sqVK7VkyRKVlZW5vkFoMSi64XPWrFmjW2+9VbfccosqKyuVkZFR63qffPKJ3nnnHfXv39/l8W+88UbddNNNCgkJ0aZNm9yRNgA4CQgI0JQpU7R27VrHsgMHDmj37t2aPn26ITG/+eYbvfzyyxo6dKgkKTs7W4mJiTXWmzx5sn788Ud98MEHkqSYmBjHWe33339fw4YN09ixYx3LfvjhBxUUFOjaa691OSe73a533nlHhYWFLu+vAbRe3thHnjx5Uhs3blR0dLTatm1bo72u/dXhw4f1/vvva/r06Zo2bZo2bdpUo2gPCAjQww8/rEWLFtU4e1+fiRMn6tSpU/r3v//d9A2Dz6Pohk85cOCAdu3apWnTpql9+/aaMGGC09HEH374QZ06ddKFF16oQYMGafz48brjjjucxti6das6derk9FO98/vf//6n1157TdOmTZPJZNJvf/tbppgDMMysWbP01ltv6euvv5YkrV27VnFxcQoJCZH0f/u0s3/efvttR/9PPvmkRvtLL71UI87VV1+tzp07Kzo6WpdffrnjesTvvvtOwcHBNdYPCAhQt27dHDN9zi66q6eRX3LJJWrTpo0+//xzvfPOO+rcubMiIyMdYzQ29wsuuECjR4/W3XffrYSEhGa+ogBaE0/uIzt16qQOHTroueee06OPPurU3tD+as2aNRoyZIgGDRqkSZMm6aeffqr1WuxbbrlFXbt21erVqxv9GrRt21bdunXjTHcrR9ENn7JmzRoNHjxYgwcPliRNmzZN2dnZKikpkXTmWpjjx4/rxIkT+n//7//p3XffVWVlpdMY48eP1/Hjx51+2rVrJ0l68cUXZTabZbFYJElTp051FPoA4G4DBw5UdHS0NmzYIJvNphdffFGzZs1ytFfv087+ue666xztkZGRNdqTkpJqxHn33Xf1v//9T1999ZXjnhWS1K1bN5WWltZY32q16rvvvtPFF18sSRo9erS+++477d+/X9u3b9eYMWMcy7dt2+ZYdvZ0z8bmXlFRoQceeEBvv/22bDZb815QAK2KJ/eRx48f18mTJ/Xqq6/qpptuclyGc/Y4te2vbDabNm7cqGnTpkk6My383JNC1Uwmk5YtW6ZHHnlE5eXljXoNTp06pe+++86x30brRNENn2G1WrVp0yZ9+umn6tmzp3r27Klbb71Vp0+frnGzND8/P/3ud7/TwIEDtXjx4kbHWLNmjX744Qf16tVLPXv21NVXXy2TycTZbgCGmTVrltavX6/MzExVVVUpPj7eY7HHjh2r9PT0Gsv//ve/KzAwUCNHjpQkde7cWYMHD9bWrVtVWFio6OhoSWeK7u3bt2v79u1NmlounTmL89BDD+mnn37SqlWrmr4xAFolT+4j/fz8dO2116pv377Kycmp0V7b/iozM1PffvutHn74Ycf30zfeeEO5ubn66quvaowRGxurwYMH68knn2xUTq+++qratm3r2B+jdaLohs944403VF5err1796qgoEAFBQX6+OOP9cADD2jt2rWy2+01+jzwwAN67rnnHGfC67Nnzx59/PHHys3NdYxfUFCg559/Xps3b9aPP/5oxGYBOM/dcsst+uabb/TnP/9ZU6dOVUBAgMdiP/TQQ9q7d6/+/Oc/67///a9Onjyp119/XX/605+0dOlSmc1mx7oxMTF6+umndeWVVzpmB40ePVrZ2dkqKCho8k3UpDNnf+677z49+uijNWYnATi/eXIfWX3N9oEDB5wulznbufurNWvWKCEhQfv373d8d/z000/Vt2/fGieFqj322GP6y1/+opMnT9aZy4kTJ/T3v/9df/zjH/XAAw+oc+fO7thE+CiKbviMNWvWKDExUVdccYXjSGLPnj111113qbS0tNaie9iwYbrmmmv0yCOPOJZlZmbWeKbj66+/rjVr1mjMmDG65pprnMafPn26OnTo4PTcWgBwl/bt2+s3v/mNioqKnKZNSmeuVzx3fzVv3jy3xe7Tp48++OADffXVVwoLC1PXrl21ZMkSrVixQnPmzHFaNyYmRt98841Gjx7tWHbZZZepXbt2uvjiizVgwIBm5T5x4kR16dJFK1eudNv2AWj5PLGP/MUvfuF4PvZtt92mJ554QrGxsXWuX72/evLJJ/Xmm29q7ty5Tt8de/bsqT/+8Y9at25dnd9Pb7jhhho3VKveHrPZrMsvv1zr1q3TCy+8oHvvvdflbULLYrLX9kkBAAAAAADNxpluAAAAAAAMQtENAAAAAIBBKLoBAAAAADAIRTcAAAAAAAah6AYAAAAAwCD+3k7gbFVVVSotLVWHDh1kMpm8nQ6A84TdbldFRYWCg4PV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jramCg8P1/79+yVJw4YN086dO9W2bVtVVVVpyJAh2rdvX7PGj4qK0nvvvac33nhDL7/8snbu3Km4uDhNnjxZcXFx8vd36WEeNUREROiTTz7Rzz//7HiWcLt27XT69GkNGTJEn3zySbPGHzRokD788EO1a9dOx48f10033aS3335bhw8f1tSpU/Xvf/+7WeMD5wNP/b9lxowZkqROnTo1+4AbcVpuHE9+l/FULOI0XasuugHUZLPZml1gwPf89NNPeuSRR3T48GEtW7ZMffv21WWXXabPP//cLeOfXXQPHz5cH374oaMtKipKH330UbPGv/baa7V06VL94he/0K9+9SutXr1awcHB+uGHH3T11Vc3u+g+O39Jqqio0D//+U+9/PLL+vDDD3X06NFmjR8REaGPPvpIlZWVuuSSS/TVV1+pY8eOOnXqlIYMGaIDBw64ZfyAgACVl5crJiZGe/bscbQVFhY2a3xJOnDggDIyMlRSUiKTyaSgoCDFx8crPDy82WPX55///Kd+9atfNXuczz//XEePHtXQoUN14YUXOpbn5uZq7NixzR7/448/lslk0qBBg3TgwAG9+eabuuKKKwy7sdftt9+u5557zpCxP//8cxUUFGjAgAEaMGCAITEAAP/nvLum+4MPPtCf/vQnXXrppd5OpVEKCwsd02B27typJ598Uq+++qqXs2qcV199VX//+99rLN+4caNef/11zyfUBFarVW+88YaeeOIJPfHEE8rIyJDVavV2Wg0aPXq0499TpkxxaouOjvZ0Oi5buXKl49/NLbbOFxdeeKGWLl2qZcuW6e6779aCBQt0+vRpt42/b98+de/eXRdffLE++eQTffPNN5KkU6dOuSXO2rVrde+99yo2NlZt2rTR4MGDZbFYdO211+qJJ55o9vjnHl/u0KGDfvvb3+qNN97Q4cOHmz3+rFmzNGDAAA0ZMkSPPPKIJk+erD/+8Y8aNWqUbrrppmaPP336dI0aNUp33XWXrrrqKt1+++2SpGPHjjX7GfOS9PDDD2v69Olq166drrnmGl199dW64IILNHPmTD388MPNHr8+f/zjH5s9xsqVK3XjjTfq8ccfV3h4uF577TVH24IFC5o9/tKlS/WHP/xBs2bN0sKFCzV37lydPn1aTz/9tJYsWdLs8X/zm984/dx8883629/+5vi9uW688UbHv1999VXdcMMNeuutt3TzzTcrLS2t2eO3Bmf/f6e5Tp06pVWrVumGG27QoEGDNHjwYI0bN07PPvusfv75Z7fFqc8999zjtrGqqqq0fv16PfLII04HXCVp2bJlbotz8uRJPfPMM1qxYoV+/vlnrV+/XvHx8Zo/f74qKircFqc2Rl2is337dv3tb39zeg69JG3YsMHtsf75z3/qjTfekHTmvih//OMf9eyzz7r1u0Btzt6/GOXdd9/VU089pezsbLeOu3PnTpWXl0uSfvzxR91///2Kj49XSkqK2+5ZU+28ONP94YcfavPmzXrttdf07bff6plnnlFCQoK6d+/u7dTqtWDBAuXm5spms+nqq6/W3r17NWbMGOXn52vAgAFu/R+EEa688kpt27ZNZrPZafkPP/yg66+/vsaO29d89dVXiomJ0SWXXKKoqCjZ7XYVFBSopKREeXl5Cg0N9XaKdTr7zOO5Z/jccVbSaGfnfG7+aJw33nhDu3bt0qOPPmponOPHj+vgwYMaNWqUW8Y7cOCA/vOf/8hqtSo0NFTDhw+Xn59fs8f99NNP1b9/fzdkWLfvvvtOktStWzcdP35cb731lnr16qURI0a4ZfzCwkIdPHhQERERbj872b9/fx06dEht2jgfi7fZbBowYID+85//NGv8ug722e12ffLJJzp58mSzxh80aJB27dqlwMBAff3117rlllt04403auHChW7Z50VGRmrfvn06efKkevbsqdLSUl100UX6+eefNXz48GYfHBwxYoQuu+wy3XbbbWrTpo3sdrsSExO1efNmSc4HUpvi7Ndg5MiReuWVVxQSEqLjx49r9OjR+vjjj5s1fmtQPUPFHSZNmqRLLrlEU6dOdXxXKC4u1saNG1VUVOS2kyeVlZW1Lrfb7briiiv09ddfuyXO7NmzderUKUVFRelvf/ubrrrqKj399NNq06aNW/8fPXnyZPXu3VsnTpzQwYMHFRUVpcmTJysjI0Off/65/va3v7klzsUXXyyTySTp/w7I/u9//1Pnzp1lMpn03//+1y1x7r33Xu3atUuRkZHaunWr7rzzTv3pT3+S5P7vNsnJyfr+++/1008/qUOHDrLb7frVr36lrVu3qkOHDm6rGc7dl9vtdhUWFjoe8Zefn++WOGe/PqtXr9b69et10003KTs7WzExMbr//vvdEic8PFz79u2Tn5+fZs2apZ49e2rChAnavn273n33Xf3zn/90SxxJkr0VW7Bggb1fv3722NhY+wsvvGA/duyYvXfv3t5Oq9EGDhxoP336tP3EiRP2jh072n/66Se73W6322w2+8CBA72cXcMiIyOb1OYrkpKS7CtXrqyxfNWqVfZbb73VCxk1XlRUVK3/ru13X1Rf/gDcLzw83F5YWFhj+SeffGIPDw9v9vjdu3e37927115UVOT088UXX9iDgoKaPf4VV1zh9PvJkyftkydPts+cOdMeERHR7PEHDx7s+PcvfvGLOtuaqqqqyv7CCy/Yr7/+evs777xjt9vt9j59+jR73GqDBw+2V1ZW2k+cOGG/8sorndqGDBnitji+7uKLL671p1u3bnZ/f3+3xenfv3+dbf369XNbnDZt2tj79Olj7927t+On+veAgAC3xRk0aJDj3zabzT5nzhz7DTfcYK+oqHDr56d6rKqqqhr7BXf8nVWbN2+e/be//a3966+/diwzoj6IjIy0nz592m632+0//PCDfeLEifbbbrvNbrPZ3P53V/0eWa1We7du3exWq9Vut595v9z5nfumm26yT5482V5YWOjYh4eGhjr26e5y9utz5ZVX2svKyux2u93+008/uWWfXi0sLMzx76FDhzq1ufMzZ7fb7a36ws709HQFBQUpKSlJEyZMkNlsdhzZagnatWunNm3a6KKLLlKfPn10wQUXSDpzt8V27dp5ObuG2Ww2x5HDs5WVlbWIKdq7d++u9ajqH/7wB/3lL3/xfEIuOHbsmFatWiW73e74t3TmiGT12ThfVlf+1e644w4vZQa0TmvXrtWMGTN0+vRpx918i4uL5e/vr7Vr1zZ7/JtvvlknT56s9dIud1wTfdlll+ndd9/V1VdfLenM/z83b96se+65x3GDvubo0qWLTpw4ofbt2+v99993LD927JgCAgKaPb7JZNLs2bN100036b777tOqVavc+v/J48ePKzw8XHa7XSaTSd9884169uypEydO1Lj0ojW78MILlZ+frx49etRo69Wrl9vihISEaPXq1frtb3+rDh06SDpzH4mNGzcqODjYbXEuv/xy5ebm1vp35c7t+fnnnx2fHT8/P/3lL3/Rs88+q9GjR7t1Cm71IxBNJpNuvvnmWtvc4cknn9TBgwf1hz/8QdHR0UpJSTGkPjh16pRj9pDZbNYrr7yilJQUWSyWOmcpNFV1/v7+/hozZozj3j1+fn5u3bYtW7borbfe0h//+EfNmDFDU6ZMUUBAgNsv2z158qQOHjyoqqoq2Ww2Ry1xwQUXuGX2W7VRo0bpscce09y5c/WLX/xC//rXvzRu3Djt2rVL7du3d1scSWrVRfeXX36pDz74QH//+9/18MMPa+DAgTpx4oSOHz+uTp06eTu9Bp1deHz33XctrnCaM2eOLBaLHn/8cQ0ZMkQmk0kfffSR7rnnHs2ZM8fb6TXooosualKbL5g9e7bjMzJ79mwdO3bM0TZr1ixvpdVo9eUPwP2io6OVn5+vo0ePqrS0VHa7XSEhIQoKCnLcsK056pvaWH19enPUddfZxx57zC3XG+bl5dW6/IILLnDrQdjOnTtr1apVKigocEwp37Nnj6688spmjVtUVFTr8jZt2uiFF15o1tgtyW233abi4uJai+7Zs2e7Lc4//vEPLVu2TMOGDVN5eblMJpPMZrNuvPFGt94hecGCBTpx4kStbdVPMXGH+Ph45eXl6brrrnMsS05OVu/evR3Tpd1h3LhxjoNbzzzzjGP5Z599pt69e7stjiQNGDBAGRkZevnll3Xdddfpp59+cuv40pnLLHNychQbG+tY9vjjj+u5555zy70szhYZGel47f7xj384ln/55Zdu/856/fXXa8yYMXrqqad0/fXXG3Kfgp49ezpOsHTu3NlxoPD77793682An3vuOS1dulRhYWHy9/fXs88+q44dOyo2NlabNm1yWxzpPLmmu9q7776rl19+Wa+//rr69++vt99+29sp1euhhx6qcc3J2R588EFPp+Sy6puQHThwQCaTSQMGDNDdd9/tljvVGq1Xr15auHBhjeV2u12pqaluu/bLCJ56HIZRWnr+QGvizmtdGf/8Gx/wdZWVlfr8888VERHh7VTcrvpMcdu2bQ0Zv7S0VAUFBbJYLIaMf66qqiqdPHlSgYGBbh/7hx9+kNVqVbdu3dw+ttTKz3TPmDFDJpNJHTt21NNPP62rr75aV199tVasWKEdO3Z4O70GVR+ZbqmFR/Xrf+WVV+rdd9/1djouO/ts67kHPXz9bPHixYslya1TcDyppecPtDR13SHbbrerrKyM8Rm/1SgsLJTZbNYll1yinTt3aufOnbrssss0ceJEj8RfuXKl7rzzTuL4UJzAwEBHwe3uOJ78vHkq1tlxioqKdODAAZ08edLQOJ7anp07d2r9+vWGxGnVZ7q//PJLSWe+uPvynabrQv7exdlWAOeLLl26aNOmTTWuYbPb7Zo8ebK+/fZbxmf8Fs8XngrjqZkFxPF+nPo+b1dccYWeffZZt8RpKJY7P9vEabpWfaa7pTyLuy7k712cbQVwvhgzZozat29f66OpoqKiGJ/xW4XMzEx98skn+umnnxQSEqJvvvlGF1xwgU6fPq1Bgwa5LU5dj6S12+1uvfEYcXw7jqc+b56MRZyma9VFN9AcLf2gAQA0Vn3PDf7Xv/7F+IzfKnjqqTCeuks6cXw7jiefQuSpWMRpOopuAAAAtHqeeiqMp+6SThzfjuPJpxB5KhZxmq5VX9MNAAAASK3jqTBoOTz5efNULOI0HWe6AQAA0Op58qkw3rrzMnF8J44nP2+eikWcpuNMNwAAAFo9Tz1VpbXdeZk4TePJp/h4KhZxmo6iGwAAAHCT8PDweu+IvH//fuKcB3GAs7XxdgIAAABAa9Ha7rxMHKD5uKYbAAAAcJPWdudl4gDNx/RyAAAAwE1a252XiQM0H2e6AQAAADdpbXdeJg7QfJzpBgAAANyktd15mThA81F0AwAAAABgEO5eDgAAAACAQSi6AQAAAAAwCEU3AAAAAAAGoeiGR9xwww268847aywvLy9XYGCgtm3bJpPJpPbt2zv9PPXUU5Kk9evXa8iQITX6T58+XX/605+clq1fv14jRoxQ+/bt1a1bN0VFRWnZsmX68ccfndb78ssv1aZNG02ePLnGuIcPH1Z8fLy6desms9msK664QqmpqU1/AQCgEcaMGaN27dqpffv26tKli0aPHq3du3c72k0mkwIDA532kxMmTHC0nz59Wk899ZQGDRqkiy66SN27d9fIkSO1cuVK2Ww2SbXvT9966y1dffXVat++vTp27KgbbrhBe/fudVqnd+/eat++vb799lvHsoKCAsejdwAAQO0ouuERs2fP1ksvvaSff/7ZaXl6erqCgoIkSR07dtSJEyecfubOnetSnAULFmjRokW67777dPToUX333Xf629/+pm+++UafffaZ07pr165V586d9frrr+v77793ahs/frwGDx6sr776Sv/73//0yiuv6LLLLmvClgOAa1JTU3XixAl98803GjFihCZOnOjUvnPnTqf95GuvveZoS0pK0tq1a7VixQp99913+uabb7Ry5Url5+frhx9+qDXeG2+8oQkTJmj69On65ptvVFRUpDFjxtQo+CXpggsu0JIlS9y/0QAAtGIU3fCIhIQE+fv76/XXX3davm7dOs2cOdMtZ0qOHDmi5cuXa/PmzUpISFCHDh0kSQMHDtQzzzyjwYMHO9atqqrS+vXrtWjRIoWEhOjFF190tH333Xc6cuSIfv/73yswMFB+fn4KDw/XzTff3OwcAaCx2rZtq2nTpunrr7/WsWPHGlx/+/bt+uc//6mMjAyNGTNGF154odq0aaNhw4Zp48aN6tq1a40+drtdc+bM0T333KNZs2apffv26ty5sxYsWKDJkyfr7rvvdlo/JSVF69at05EjR9y2nQAAtHYU3fCIgIAATZkyRWvXrnUsO3DggHbv3q3p06e7JcZbb72l4OBg/eIXv2hw3dzcXB09elS33nqrpkyZojVr1jjaunbtqiuuuEIzZszQyy+/7HieIwB40k8//aQ1a9aoW7du6ty5c4PrZ2dnKzo6Wn369Gl0jE8//VRFRUVKTEys0ZaYmKj33ntPP/30k2NZ//79NWXKFN1///2NjgEAwPmOohseM2vWLL311lv6+uuvJZ2Z3h0XF6eQkBBJ0g8//KBOnTo5/bz99tuO/p988kmN9pdeesnR/t133yk4ONgp5tixY9WpUycFBgZq5cqVjuVr1qzR+PHj1a1bN02dOlWffPKJPvzwQ0lnrpnctm2bBg8erIceekiXXXaZBg4cqNzcXMNeGwCotnDhQnXq1EkXXXSR0tPT9dprr8nf39/RfvXVVzvtBx966CFJte8Dw8LC1KlTJ1144YXKyMioEeu7776TpBr9qpedPn1aZWVlTssXL16sjIwMffTRR83eVgAAzgcU3fCYgQMHKjo6Whs2bJDNZtOLL76oWbNmOdo7duyo48ePO/1cd911jvbIyMga7UlJSY72bt26qbS01Clmbm6ujh8/rujoaMdNhL7//nv985//1LRp0yRJl19+ua666iqns909e/bU8uXLtX//fh07dkw33HCDJkyYUOPLJwC427Jly3T8+HF9/fXXCg4O1scff+zU/u677zrtBx988EFJte8DDx8+rOPHj6tHjx46ffp0jVjdunWTpBr9qpf5+fmpS5cuTsuDgoJ011136Z577mnWdgIAcL6g6IZHzZo1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paSkaMWKFS1eUuxObGxsu1/r68ylS5dcnm/btk1Lly7Vpk2bdP36dZ9ltm/frt///vetZubMmaPc3FzV1NS0+T68mblxn2tJWVmZMjIy9Nprr6m2tlYLFy5UdHS0Hn300RYnHfMk09TUpL/85S9KSkrShAkTdPfddystLU379u1rsTZvZCZOnKiFCxe2mgEAeIbOLQhkZGQoLS1NVVVVeuONN/SLX/xCL730ktVlIQj06tVLYWFhCg0NVW1trUaOHKkvv/zS6rLQSTff6ufGW/64m7Vbkp599lnt379fffr0UUZGhpYtW+ZsfG6+/VF3yCxatKhdmQULFqiiokKnT59WUlKSjh8/rldeeUW9evXSokWL3GbsdrsGDx6swYMHy263y263q7S01LncyowkJScnO/+8atUq7dixQ9OmTdOnn36qZcuW+SSTlZXVrszhw4dVWFio0aNH6+GHH1ZeXl6bc5j4K/PEE09owoQJ6t27txISEhQfH69//etfmjt3rn7zm994LbNgwQJduXJFr7/+umbNmqVZs2Zp6dKlWrt2rbKzsy3NAAA8ZOW17Wi/L774wrz11ltm3bp1prS01OpyECSeffZZ8+2335q33nrLREZGmkmTJrX6fVcEh5CQEHPnnXeakSNHOh/Nz8PCwtxmbpzRu7Gx0SxbtswkJSUZh8PhMhM4GVfNy69fv26GDBniMnbzbNbNXnzxRfP444+br776yrmsrVmh/ZUxxnXm99jYWPP9998bY37YJi3N4u7vzLVr18z7779v5s+fbwYPHmx+9atfmb///e8BkTHGmOHDh7c41tnMzbPvN8+039DQYCIiIizNAAA8w+zlQaC0tFSjR4/WkiVLtHPnTuXn57d5JgOQpE2bNkmSlixZooceekgOh0MxMTEWV4XOGjVqlAoLC13ucNCspdmNr127JmOMbDabQkND9ac//Ul//vOfde+99+rKlStkWsg0nwm32WyaO3eu27Gb/fGPf9TJkyeVkZGhhIQEZWZmtjkrtL8yklRTU6O9e/fq+vXrunbtmnr16iVJCg0NVWhoqKWZ5vp79uyp2bNna/bs2bp69ap2796t995775bPwJ+ZXr166cMPP1RNTY1CQkJUUFCgGTNmqKioqMXt7kmmd+/eOnLkiCZOnKjCwkLnZe89erT8K5u/MgAAD1nZ8aN9mu9Be/z4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", | |
"text/plain": [ | |
"<Figure size 1000x700 with 6 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"from itertools import zip_longest \n", | |
"\n", | |
"# Color for barplots.\n", | |
"bar_color = \"#264653\"\n", | |
"\n", | |
"# Specify which columns are categorical.\n", | |
"categorical = [\"AREA\", \"VEHPOWER\", \"VEHBRAND\", \"VEHGAS\", \"REGION\"]\n", | |
"\n", | |
"# Indices for each facet.\n", | |
"indices = [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)] \n", | |
"\n", | |
"# Initialize matplotlib figure (2 rows by 3 columns).\n", | |
"fig, ax = plt.subplots(2, 3, figsize=(10, 7), tight_layout=True)\n", | |
"\n", | |
"for (ii, jj), col in zip_longest(indices, categorical):\n", | |
"\n", | |
" if col is None:\n", | |
" ax[ii, jj].set_axis_off()\n", | |
" else:\n", | |
" dfcat = df.groupby(col, as_index=False)[[\"CLAIMNB\", \"EXPOSURE\"]].sum()\n", | |
" dfcat[col] = dfcat[col].astype(str)\n", | |
" dfcat[\"FREQ\"] = dfcat[\"CLAIMNB\"] / dfcat[\"EXPOSURE\"]\n", | |
" dfcat[[col, \"FREQ\"]].plot.bar(color=bar_color, ax=ax[ii, jj])\n", | |
" ax[ii, jj].set_title(col, fontsize=9, weight=\"normal\")\n", | |
" ax[ii, jj].set_xticklabels(dfcat[col].values, rotation=90)\n", | |
" ax[ii, jj].yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter(\"{x:.2f}\"))\n", | |
" ax[ii, jj].tick_params(axis=\"x\", which=\"major\", direction='in', labelsize=7)\n", | |
" ax[ii, jj].tick_params(axis=\"y\", which=\"major\", direction='in', labelsize=7)\n", | |
" ax[ii, jj].xaxis.set_ticks_position(\"none\")\n", | |
" ax[ii, jj].yaxis.set_ticks_position(\"none\")\n", | |
" ax[ii, jj].grid(True)\n", | |
" ax[ii, jj].set_axisbelow(True)\n", | |
" ax[ii, jj].get_legend().remove()\n", | |
"\n", | |
"plt.suptitle(\"FrenchMotorTPLFreq: Categorical Predictors\", fontsize=10)\n", | |
"plt.show()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Visualizing continuous predictors:\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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/PHH2LZtG/7+97+jT58+ePzxx6Xnzx7Tp09HeHg4CgsLUVRUhISEBIfPsvr5+Vk8R7czTpctW4bDhw/j008/RWZmJrKzs1FUVNRkn82N28jISGzcuBGBgYHS62B+jex9jf/0pz/hL3/5C06fPo2uXbviqaeeglarxT/+8Q8UFBTgueees0iWiYjcgiAickOzZs0S3t7eolOnTtLjmWeeEUIIodVqxUMPPWTR/o9//KMYM2aMxbLS0lIBQJw5c0babvjw4RZtHnnkEfHyyy8LIYTIyMgQMplMat9YWlqaACDOnTsnLXvnnXdEaGio9Perr74qHnzwQVFbWyvuuusukZOTI27cuCE6d+4sTp48KRYtWiS0Wq3UvkePHuL111+3iuk//uM/hBBCXLhwQQAQx48ft2hj73YbN260eSxCCAFAfPrpp1bLZ82aJZ588knp76+//loEBweLSZMmNRuTmfl5avjamZ+jV199VSgUCvHzzz9L7Q8dOiQCAwPFL7/8YrGf+++/X7z77rtCCCEiIiLE888/b7F+2LBh4sEHH7SIs3///uLy5cs24/rpp58EAJGSkmJzvdnZs2cFAJGXlyctu3LlilAqlWLv3r0Wx9jce6Hx8yiE9XN3+PBhAUAcPHhQavO3v/1NABA1NTVN7qfh++jGjRtCoVCInTt3Sutra2tFjx49xJtvvinFGxQUZLGPTz/9VDT8GtC5c2exdevWZp+bhu655x6xYcMGIYQQBoNBek42b94shLi9cVpdXS18fHzEBx98IK2/evWqUCqVYtGiRTb7tmfcNj52R17jEydOWMQCQGRnZ7f8BBERuRDvySMitzVy5EiLe8A6deok/b9arbZoW1RUhMOHD0uX2zV0/vx59OvXDwAwePBgi3VhYWH4+eefAQAnTpxAeHi41NYWf39/3H///Ta3b0ihUCA+Ph5paWn45z//iX79+ln1XVVVhR9//BEajcZiuUajsbpU8Xa3a/w82evzzz9HQEAAjEYjDAYDnnzySfzXf/2X3dt37twZf//736W/G97HdM8991jcU1VUVIQbN24gODjYYh81NTU4f/48AOC7777D888/b7E+IiIChw8flv5+9NFH8f333zcZk/j/RVVaOuvy3XffQS6XY9iwYdKy4OBg9O/fH9999520zN73gj0avjfCwsIAAD///LNd93CeP38eBoPB4v2gUCjw6KOPWsTbkpdeegnz5s3D+++/j5iYGEycONHi+Gx5+eWXkZiYiFu3bsHHxwfLli3DggULpPWOjtOamhrU1tYiIiJCWt61a1f079+/yRjsGbeN2fsa+/j4WLw2Xbt2xezZs/H4449j9OjRiImJwaRJk6TXjIjIXTDJIyK31alTJ/Tp06fJdQ3V1dVh/PjxeOONN6zaNvwC1vjyMy8vL9TV1QGovySxJba2F01UZJw7dy6GDRuGU6dONXv5XeOkQwhh1+Vf9mzX+HmylznBVigU6NGjh8OX7clkModeu7CwMGRnZ1u1bcsiKCEhIVCpVC0mPk29no2fX0feCy1puC9zH+b3pUwms9pvw0sKm0peG8bb0j6A+vsIp02bhr/97W/44osv8Oqrr+KDDz7A008/3WTcy5Ytw+zZs+Hv74+wsLAW338tjdPGlxvbw55x25i9r7FSqbQ6prS0NLz44os4cOAA9uzZg8TERGRlZeGxxx5zOA4iovbCe/KIyCMMHToUp0+fRu/evdGnTx+Lh72JzuDBg3H58mWcPXu2TWIaNGgQBg0ahFOnTmHatGlW6wMDA9GjRw/k5uZaLM/Pz8eAAQMAQLqHz2QyObRda5kT7Hvuuafdq18OHToU//rXvyCXy61eu27dugEABgwYgK+++spiu8Z/t0Qmk2Hy5MnYuXMnfvzxR6v1N2/ehNFoxMCBA2E0GvH1119L665evYqzZ8869Pz6+PhYvG63KyQkxKq4T8PpK/r06QMfHx+L94PBYMCxY8ekeENCQlBdXS1Ng9F4H2b9+vXDkiVLkJmZid/+9rdW1W0b69atG/r06YMePXrY9cNES+O0T58+UCgUFq9tZWVls2OypXFr63Vo7Ws8ZMgQ/OEPf0B+fj4eeOAB7Nq1q8VtiIiciUkeEXmEF154ARUVFZg6dSq++eYb/POf/0RmZibmzp1r9xdtrVaLESNGYMKECcjKysKFCxfwxRdfWFStdNSXX36JsrKyJs9ILVu2DG+88Qb27NmDM2fOICEhASdOnMCiRYsA1FfqVCqVUoGK69ev27WdM5w5cwYnTpyweNTW1jq8n5iYGEREROCpp55CRkYGLl68iPz8fCQmJkrVHRctWoQtW7Zgy5YtOHv2LF599VWcPn3aYj/ffPMNfvWrX+H//u//muxrzZo16NmzJ4YNG4bt27ejuLgYJSUl2LJlCx566CHcuHEDffv2xZNPPon58+cjNzcXJ0+eRHx8PO6++248+eSTdh9X79698Y9//ANnzpzBlStXbrtwTXR0NI4dO4bt27ejpKQEr776Kk6dOiWt79SpExYuXIhly5bhwIEDKC4uxvz586HX6/Hss88CAIYNGwZ/f3+sWLEC586dw65duywKA9XU1OB3v/sdsrOz8cMPPyAvLw+FhYVt9qOBWUvjNCAgAM8++yyWLVuGQ4cO4dSpU5g9e3az0xa0NG579+6NGzdu4NChQ7hy5Qr0ev1tv8YXLlzAH/7wBxQUFOCHH35AZmamw8k/EZEzMMkjIo/Qo0cP5OXlwWQy4fHHH8cDDzyARYsWISgoyKF5rT7++GM88sgjmDp1KgYOHIjly5e36myMucx6U1588UX8/ve/x+9//3v8+te/xoEDB/DXv/4Vffv2BQDI5XL8+c9/xrvvvosePXpIX0Bb2s4ZpkyZgiFDhlg8bJ0ha4mXlxf279+PESNGYO7cuejXrx+mTJmCixcvIjQ0FAAwefJkJCUl4eWXX8bDDz+MH374AQsXLrTYj16vx5kzZ5pNplQqFb766ivEx8dj9erVGDJkCKKiorB7926sW7dOmssvLS0NDz/8MOLi4hAREQEhBPbv3+/QWc358+ejf//+UKvVCAkJQV5ensPPDQA8/vjj+OMf/4jly5fjkUceQXV1NWbOnGnRZu3atZgwYQJmzJiBoUOH4ty5c8jIyIBKpQJQfy/Zjh07sH//fvz617/G7t27LaYP8fb2xtWrVzFz5kz069cPkyZNwtixY/Haa6/dVsxNsWecrlu3DiNGjMBvfvMbxMTEYPjw4Xj44Yeb3W9z4zYyMhLPP/88Jk+ejJCQELz55psAbu819vf3x/fff48JEyagX79+eO655/C73/3O4j5EIiJ34CVu9wYCIiIiF1q5ciXS09NtXnZIRER0J+OZPCIiIiIiIg/CJI+IiIiIiMiD8HJNIiIiIiIiD8IzeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkEREREREReRAmeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkEREREREReRAmeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkEREREREReRAmeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkEREREREReRAmeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkEREREREReRAmeURERERERB6ESR4REREREZEHYZJHRERERETkQZjkdRBeXl7w8vKCXC5HUFAQhgwZgpUrV6KmpkZqo9PppHbmR+/evQEAFy9elJYlJSVJ2/Tu3RteXl74/vvvAQDffPMNRowYgc6dO6NTp07o06cPEhMTbba31Z/5MWzYMPTv3x9eXl74n//5H2n7uXPnwsvLC9OmTWvnZ4zudA3fj/7+/hgwYABSU1Mt2vz1r3/F8OHDERAQAKVSiaFDh2LLli3S+uzsbGkfDZebl/3yyy82/zYajdIyswMHDuDhhx9Gp06d0LlzZwwYMABvv/221T579eoFk8kEAKirq5PGXMP9A8CFCxcgk8ng5eWF0aNHWxzX1q1b4eXlhSlTplg9L+Zxe+DAAWnZ8OHD4eXlhezsbABASUkJxo0bB5VKBaVSiXvuuQdz586174knuk2Ofs4pFArcc889Fp9p5jH72GOP4caNGwgICIBcLkdZWZnUpqamBkFBQfD29kZpaSkA4NVXX5X2u3PnTqvY9u/fj1GjRqFLly7w8/NDr169MGnSJPzf//0fAGD27Nk2PwuJOgKtVgsvLy98+OGHFstHjx4NLy8vvP766zbf3+bPDFufK4mJifDy8sLKlSst9jlr1ixp+7y8PKtYduzYgcjISHTu3Bn+/v64//77MWvWLNy8edOiL1vfdcmS3NUBkGO2bNmC8vJypKWl4bXXXsPBgweRnZ0NufzfL2VCQgIefPBBAECnTp2s9rFhwwb853/+J0JCQiyWCyHw1FNPobq6GqtWrUJQUBC+++47lJeX24wlKSkJP//8M+rq6jB9+nQAwO7duwEAd911F/z8/BAVFYXly5dj/Pjx+O6775CWlobQ0FD813/9V5s8H0Qt2b59O65fv44//vGP+I//+A+MGjUK/fr1w44dOzBjxgyoVCokJiZCqVRi/fr1ePbZZ1FWVoZXXnnFYj+vvfYapk+fDl9fX4djqKiowG9/+1t06dIF69atg1wuxz/+8Q/8/PPPVm1LS0vx2Wef4be//S3++te/4ocffrC5z61bt0IIAW9vb3z55ZcoLS1Fz549HY7NlhkzZuDYsWNYuXIlwsPDcf78eZw+fbpN9k3UEns/5+677z689tprSE5OxtChQ/HUU09Z7CcgIAATJkzA9u3bsXv3brz00ksAgM8++wxVVVWIiYlBz549IYTA+++/D29vb5hMJmzdulX6TAOA//7v/8bChQsREBCAF154Af369cPFixexa9culJaW4u6775baPvvss4iJiWnfJ4iojc2ePRtHjhzB+++/j4kTJwIAfvzxR3z55ZcIDAxE165dAQARERF48cUXpe0GDhzoUD83btzAxx9/bDHWNBqNtD4hIQFvvPEG7rrrLixbtgzh4eE4c+YM3n//fVRXV1t8p23puy4BENQhABAARE1NjRBCiJs3b4p7771XABC7du0SQgih1WoFALFnzx5RXl4uysvLRVVVlRBCiAsXLggAQqlUCh8fH7F48WIhhBD33HOPACC+++47UV5eLgCIHj16iO+//95mHA3bmxkMBim+xn7/+98LAOLJJ58Uffr0EQDExx9/3KbPDZEt5vfk5cuXxXfffSd69+4tAIhvvvlGCCFEr169BADxySefSNscO3ZMGic3b94Uhw8fFgBEUFCQACA2btxosW/zeGz8d+MxUVhYKACIhx56SFy6dKnZePv16ydGjhwphBAiOjpa9OvXz2r/dXV14t577xU+Pj7iD3/4gwAgVq9eLe0rLS1NABCTJ0+26sf878QXX3whLdNoNAKAOHz4sBBCiE6dOgk/Pz9x7NgxUVdX5/iTT3QbHPmcM79/X3rpJQFAvPHGG0IIIY3ZYcOGCSGE+PLLL6WxZzZ27FgBQOzYscOizTPPPCMGDRokZDKZNE5rampE586dBQCRlZVlEa/RaBR6vV4IIcSsWbMEALF+/Xrp87eysrKdnimitlVdXS06deokFAqFKC8vF0II8cYbbwgAYt68edJnytNPPy29v8vLy6XPB1vfP81j89VXX5X62bJliwAg/vM//1N07dpVBAYGSmPohx9+EDKZTMjlclFcXGwRX01NjTAYDE32Zf6uS5Z4uWYH5e/vjyeeeAIArE53T548GSEhIQgJCcGMGTMs1gUGBmL+/PlITU2VLlMx69atGx588EH8+OOP+NWvfoVu3bph8uTJOHbs2G3HuXr1avTv3x+fffYZzp07hylTpuC3v/3tbe+PyFHh4eEYMGAALl68iGeffRaPPPIIfv75Z1y6dAkAEB0dLbV9+OGHERQUhJqaGosz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FEf5+vqiU6dO8PLywoQJE3D8+HGpDwDw9vYGUF9218zc9+3G03C72+njdvoNDg4GAEycOBEnTpxo8/6qqqowY8YMpKWl4a677mr342vYn0KhaPfju9PYOy7chSNjytXsfa862+2OYWo/9rwmzrRjxw5MmjRJeh80Ne6cqUuXLhg+fDh8fHwQHR3tFv9WZWRkQKlU4vvvv8fHH3+MTZs2uTwmoGP9O+lsrvge4Irx7aox7Mpx6urx2NbjzmOTvMceewyZmZkA0OQcKI6qrq6W/v/IkSOIi4tDcXExamtrkZeXh8GDBwOoP7VeUlKCqqoqVFRUoFu3bhbxHDx4EBEREXb12adPn1b14ejzUFtbi1u3bknH2KdPnzbtz2QyYfr06UhKSkK/fv3a/fga99fex3cnsndcuAtH3nOu5Mh71ZlaM4apfdj7mjhTcXExtm/fjtjYWJSUlOC9995zeUyPPvooiouLAQDHjx/HmDFjXB4TUP/FDqj/cnvlyhW3iInjumnO/h7gqvHtqjHs6nHqyvHY5uOuLW8gdDe///3vxfDhw8W0adOkGzhbY//+/WLo0KFi+PDhYsaMGcJgMIjdu3eLxx57TOh0OnHp0iUhhBCnT58WGo1GPPbYYyIzM1MIIURVVZX4zW9+IyIjI8Wf/vSnZvsZO3asCAsLE4899phIS0trdR8tPQ8N+1u7dq0YOnSoiIqKEjExMW3e365du0TXrl2FVqsVWq1WfPDBB+16fLb6a8/juxPZOy5c6XbHlCvjdGQsOlNrxjC1D3tfE1cxFxByh5jefvttERUVJbRarTh//rzLYzIajWLq1KlixIgRYtiwYSIvL89lMXWUfyfdgTO/B7jD+Hb2GHbVOHXFeGzPccd58oiIiIiIiDyIx16uSUREREREdCdikkdERERERORBmOQRERERERF5ECZ5REREREREHoRJHhERERERkQdhkkdERERERORBmOQRERERERF5ECZ5REREREREHoRJHhERERERkQdhkkdERERERORBmOQRERERERF5kP8Hy/qw935eokkAAAAASUVORK5CYII=", | |
"text/plain": [ | |
"<Figure size 900x300 with 4 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"\n", | |
"continuous = [\"DENSITY\", \"BONUSMALUS\", \"DRIVAGE\", \"VEHAGE\"]\n", | |
"\n", | |
"fig, ax = plt.subplots(1, 4, figsize=(9, 3), tight_layout=True) \n", | |
"\n", | |
"for ii, col in zip([0, 1, 2, 3], continuous):\n", | |
" ax[ii].set_title(col, fontsize=8, weight=\"bold\")\n", | |
" ax[ii].hist(\n", | |
" df[col], 19, density=False, alpha=1, color=bar_color, \n", | |
" edgecolor=\"#FFFFFF\", linewidth=1.0\n", | |
" )\n", | |
" #ax[ii].yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter(\"{x:,.0f}\"))\n", | |
" ax[ii].tick_params(axis=\"x\", which=\"major\", direction='in', labelsize=6)\n", | |
" ax[ii].tick_params(axis=\"x\", which=\"minor\", direction='in', labelsize=6)\n", | |
" ax[ii].tick_params(axis=\"y\", which=\"major\", direction='in', labelsize=6)\n", | |
" ax[ii].tick_params(axis=\"y\", which=\"minor\", direction='in', labelsize=6)\n", | |
" #ax[ii].get_xaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", | |
" ax[ii].get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))\n", | |
" ax[ii].xaxis.set_ticks_position(\"none\")\n", | |
" ax[ii].yaxis.set_ticks_position(\"none\")\n", | |
" ax[ii].grid(True) \n", | |
" ax[ii].set_axisbelow(True) \n", | |
"\n", | |
"plt.suptitle(\"FrenchMotorTPLFreq: Continuous Predictors\", fontsize=10)\n", | |
"plt.show()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"count 678013.00000\n", | |
"mean 59.76150\n", | |
"std 15.63666\n", | |
"min 50.00000\n", | |
"25% 50.00000\n", | |
"50% 50.00000\n", | |
"75% 64.00000\n", | |
"max 230.00000\n", | |
"Name: BONUSMALUS, dtype: float64" | |
] | |
}, | |
"execution_count": 5, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"df.BONUSMALUS.describe()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br> \n", | |
"\n", | |
"Since the minimum and median are the same, it suggests that at least half of the data points are equal to the minimum value. " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"BONUSMALUS\n", | |
"50 384156\n", | |
"51 15869\n", | |
"52 4770\n", | |
"53 3351\n", | |
"54 17360\n", | |
" ... \n", | |
"198 2\n", | |
"208 1\n", | |
"218 1\n", | |
"228 1\n", | |
"230 1\n", | |
"Name: count, Length: 115, dtype: int64" | |
] | |
}, | |
"execution_count": 6, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"df.BONUSMALUS.value_counts().sort_index()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"<br>\n", | |
"\n", | |
"\n", | |
"#### **Using statsmodels**\n", | |
"\n", | |
"Statsmodels is a Python library for statistical modeling and econometrics. It provides classes and functions for estimating and testing statistical models, including linear regression, generalized linear models and time series. \n", | |
"\n", | |
"For ease of demonstration, we're going to fit a model using only two continuous predictors and two categorical predictors, but the approach can be extended to facilitate any number of features. \n", | |
"\n", | |
"Our design matrix consists of $n = 678,013$ rows and $p = 8$ predictors. Even though AREA was a single column originally, a separate coefficient will be estimated for each of the $k-1$ indicator columns. \n", | |
"\n", | |
"The statsmodels interface is very similar to R's `glm` function:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" Generalized Linear Model Regression Results \n", | |
"==============================================================================\n", | |
"Dep. Variable: CLAIMNB No. Observations: 678013\n", | |
"Model: GLM Df Residuals: 678004\n", | |
"Model Family: Poisson Df Model: 8\n", | |
"Link Function: Log Scale: 1.0000\n", | |
"Method: IRLS Log-Likelihood: -1.4435e+05\n", | |
"Date: Thu, 20 Mar 2025 Deviance: 2.1938e+05\n", | |
"Time: 11:12:12 Pearson chi2: 1.97e+06\n", | |
"No. Iterations: 7 Pseudo R-squ. (CS): 0.007500\n", | |
"Covariance Type: nonrobust \n", | |
"==========================================================================================\n", | |
" coef std err z P>|z| [0.025 0.975]\n", | |
"------------------------------------------------------------------------------------------\n", | |
"Intercept -4.1001 0.034 -119.279 0.000 -4.167 -4.033\n", | |
"C(VEHGAS)[T.'Regular'] -0.0019 0.011 -0.174 0.862 -0.023 0.019\n", | |
"C(AREA)[T.'B'] 0.0709 0.021 3.303 0.001 0.029 0.113\n", | |
"C(AREA)[T.'C'] 0.1198 0.017 6.920 0.000 0.086 0.154\n", | |
"C(AREA)[T.'D'] 0.2142 0.018 11.973 0.000 0.179 0.249\n", | |
"C(AREA)[T.'E'] 0.2889 0.018 15.831 0.000 0.253 0.325\n", | |
"C(AREA)[T.'F'] 0.3744 0.033 11.303 0.000 0.309 0.439\n", | |
"BONUSMALUS 0.0218 0.000 71.171 0.000 0.021 0.022\n", | |
"DRIVAGE 0.0072 0.000 18.468 0.000 0.006 0.008\n", | |
"==========================================================================================\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"import statsmodels.api as sm\n", | |
"import statsmodels.formula.api as smf\n", | |
"\n", | |
"# Fit Poisson regression model.\n", | |
"mdl = smf.glm(\n", | |
" formula=\"CLAIMNB ~ BONUSMALUS + DRIVAGE + C(VEHGAS) + C(AREA)\",\n", | |
" data=df,\n", | |
" family=sm.families.Poisson(),\n", | |
" offset=np.log(df.EXPOSURE)\n", | |
").fit()\n", | |
"\n", | |
"print(mdl.summary())\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"0.11206" | |
] | |
}, | |
"execution_count": 15, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"0.0709 + 1.96 *0.021" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"**Why do we use log(EXPOSURE) as the offset?**\n", | |
"\n", | |
"\n", | |
"Recall that:\n", | |
"\n", | |
"$$\n", | |
"\\mathrm{ln}\\mu = \\beta_{0} + \\beta_{1}x\n", | |
"$$\n", | |
"\n", | |
"If we are interested in modeling the rate of events instead of counts, the linear predictor becomes:\n", | |
"\n", | |
"$$\n", | |
"\\mathrm{ln}\\frac{\\mu}{E} = \\beta_{0} + \\beta_{1}x\n", | |
"$$\n", | |
"\n", | |
"\n", | |
"Solving for $\\mathrm{ln}\\mu$ yields:\n", | |
"\n", | |
"$$\n", | |
"\\mathrm{ln}\\mu = \\mathrm{ln}E + \\beta_{0} + \\beta_{1}x\n", | |
"$$\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"When using the canonical link function (log link for Poisson), the total of the fitted values will match the target in aggregate and by variable level:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Original number of claims : 36,102\n", | |
"Predicted number of claims : 36,102\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"print(f\"Original number of claims : {df.CLAIMNB.sum():,.0f}\")\n", | |
"print(f\"Predicted number of claims : {mdl.fittedvalues.sum():,.0f}\")\n", | |
"# (mdl0.predict(df) * df.EXPOSURE).sum()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"By group:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>AREA</th>\n", | |
" <th>CLAIMNB</th>\n", | |
" <th>fitted</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>'A'</td>\n", | |
" <td>5063.0</td>\n", | |
" <td>5063.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>'B'</td>\n", | |
" <td>3800.0</td>\n", | |
" <td>3800.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>'C'</td>\n", | |
" <td>9875.0</td>\n", | |
" <td>9875.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>'D'</td>\n", | |
" <td>8428.0</td>\n", | |
" <td>8428.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>'E'</td>\n", | |
" <td>7805.0</td>\n", | |
" <td>7805.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>'F'</td>\n", | |
" <td>1131.0</td>\n", | |
" <td>1131.0</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" AREA CLAIMNB fitted\n", | |
"0 'A' 5063.0 5063.0\n", | |
"1 'B' 3800.0 3800.0\n", | |
"2 'C' 9875.0 9875.0\n", | |
"3 'D' 8428.0 8428.0\n", | |
"4 'E' 7805.0 7805.0\n", | |
"5 'F' 1131.0 1131.0" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"\n", | |
"df[\"fitted\"] = mdl.fittedvalues\n", | |
"df.groupby(\"AREA\", as_index=False)[[\"CLAIMNB\", \"fitted\"]].sum().head(6)\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Sometimes it can be easier to to interpret model results by viewing box plots of coefficient estimates along with standard errors:\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAzYAAAIzCAYAAADS9YxGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVLRJREFUeJzt3XlclOX+//H3sMiiQmrugogbqKmAmmVmaYuZWie/VBae3JfMTscSM1OrY5maLV/LjuXasaxjLqVppZXZqY4lZE4JagqCaZlloLLIcv/+8Ov8HEVlcGZubub1fDwq5ppr7vsDF3HPe677vm6bYRiGAAAAAMDC/MwuAAAAAAAuFcEGAAAAgOURbAAAAABYHsEGAAAAgOURbAAAAABYHsEGAAAAgOURbAAAAABYHsEGAAAAgOURbAAAAABYHsEGACqBzZs3y2az6c8//zS7FJwhLy9PAwYMUFhYmGN8ymqLiorSiy++WK5tLlmyRJdddplH6wYAX0SwAQA3GDx4sGw2m2w2mwIDAxUdHa1HHnlEJ06cKNfrr776ah06dEjh4eEerrTiTp48qdmzZys+Pl7Vq1dXeHi4OnTooMcff1wHDx509Bs8eLBuv/32824nKipKNptNb7/99jnPtW3bVjabTUuWLLlgLbm5uZo8ebJiYmIUHBysBg0a6IYbbtCqVatkGEZFv8VzLF26VF988YW++uorx/iU1fbtt99q5MiR5drmXXfdpd27d7utRolgDACSFGB2AQBQVfTu3VuLFy9WUVGRvvjiCw0fPlwnTpzQq6++etHXVqtWTQ0aNPBClRVTWFiom266STt27NCTTz6pbt26KTw8XHv37tWaNWs0d+5czZgxo9zbi4iI0OLFi3X33Xc72v773//ql19+UfXq1S/42j///FPXXHONcnJyNH36dHXu3FkBAQH6/PPPlZycrJ49e7ptRmTv3r2KjY1Vu3btLthWt27dcm8zJCREISEhbqkPAHAGAwBwye677z7jtttuc2obPny40aBBA8MwDKOgoMAYN26cUbduXSMoKMjo1q2b8c033zj6fvbZZ4Yk4+jRo4ZhGEZmZqbRt29f47LLLjNCQ0ONNm3aGB988IFhGIbxxx9/GPfcc49x+eWXG8HBwUaLFi2MRYsWOba1Y8cO4/rrrzeCg4ON2rVrGyNGjDCOHTt2Tq2zZ882GjRoYNSuXdu4//77jZMnT573+5sxY4bh5+dnpKamlvl8aWnpBX8WZ2ratKnx6KOPGkFBQUZWVpajfcSIEca4ceOM8PBwY/Hixed9/ZgxY4zq1asbP//88znPHTt2zCgqKjIM49TPadCgQcZll11mhISEGL179zZ2797t1P/LL780unfvbgQHBxtNmjQxxo0bZxw/ftwwDMPo0aOHIcnxT48ePcpsO/09vfDCC47tHj161BgxYoRRr149IygoyGjbtq2xdu1awzAMY/HixUZ4eLhTHe+//74RHx9vBAUFGc2aNTOeeOIJx/dhGIYhyXj99deN22+/3QgJCTFatGhhvPfee4ZhGEZGRoZTTZKM++67zzAMw1ixYoXRrl07x+9Cr169HN8fAFQ1nIoGAB4SEhKioqIiSVJycrJWrlyppUuXKjU1VS1atNDNN9+sP/74o8zXjh07VoWFhdqyZYvsdrtmzpypGjVqSJKmTJminTt3asOGDUpLS9Orr76qyy+/XNKpa0J69+6tWrVq6dtvv9WKFSu0adMmPfDAA07b/+yzz7R371599tlnWrp0qZYsWXLB07+WL1+uG2+8UXFxcWU+b7PZXPrZ1K9fXzfffLOWLl3qqPudd97R0KFDL/i60tJSvf3227r33nvVqFGjc56vUaOGAgJOnYwwePBgbdu2Te+//76+/vprGYahPn36OMbEbrfr5ptv1h133KEdO3bonXfe0X/+8x/Hz2rVqlUaMWKErrrqKh06dEirVq0qs62sGm+55RZ99dVXWrZsmXbu3Klnn31W/v7+ZX5PH330kZKSkvTggw9q586dmj9/vpYsWaKnn37aqd+TTz6pO++8Uzt27FCfPn1077336o8//lBERIRWrlwpSdq1a5cOHTqkl156SYcOHdLAgQM1dOhQpaWlafPmzbrjjjvceqoeAFQqZicrAKgKzp6l2Lp1q1GnTh3jzjvvNI4fP24EBgYab775puP5kydPGo0aNTJmzZplGMa5MzZXXHGF8cQTT5S5r379+hlDhgwp87nXXnvNqFWrltOn8h988IHh5+dn/PLLL45amzZtahQXFzv6JCYmGnfdddd5v7/g4GDjwQcfdGq7/fbbjerVqxvVq1c3rrrqqvP+LM52enZjzZo1RvPmzY3S0lJj6dKlRlxcnGEYxgVnbH799VdDkvH888+fd/uGYRi7d+82JBlffvmlo+3IkSNGSEiI8e9//9swDMMYNGiQMXLkSKfXffHFF4afn5+Rn59vGIZh/O1vf3PMypxWVtuZMzYfffSR4efnZ+zatavM2s6esenevbvxzDPPOPX517/+ZTRs2NDxWJLx+OOPOx4fP37csNlsxoYNGwzDOPf3xzAMIyUlxZBkZGZmllkHAFQ1zNgAgJusW7dONWrUUHBwsK666ipde+21mjt3rvbu3auioiJ169bN0TcwMFBdunRRWlpamdt68MEHNX36dHXr1k3Tpk3Tjh07HM+NGTNGb7/9tjp27Kjk5GR99dVXjufS0tLUoUMHp+tUunXrptLSUu3atcvR1rZtW6cZhIYNG+rw4cMX/P7OnpWZN2+etm/frqFDhyovL+8iP51z3XrrrTp+/Li2bNmiRYsWXXS2RpJjtuFiM0RpaWkKCAjQlVde6WirU6eOWrdu7fiZp6SkaMmSJapRo4bjn5tvvlmlpaXKyMhw+fs5bfv27WrSpIlatWpVrv4pKSl66qmnnOoYMWKEDh065PRzbd++vePr6tWrq2bNmhccsw4dOqhXr1664oorlJiYqNdff11Hjx6t8PcFAJUdwQYA3OT666/X9u3btWvXLhUUFGjVqlWqV6/eed+MG4Zx3jfow4cP1759+zRo0CDZ7XZ16tRJc+fOlSTdcsst2r9/vx566CEdPHhQvXr10iOPPHLRbZ7ZHhgYeM5zpaWl5/3eWrZsqfT0dKe2hg0bqkWLFqpdu/Z5X3chAQEBGjRokKZNm6atW7fq3nvvvehr6tatq1q1ap03EJ5mnOd0qzN/PqWlpRo1apS2b9/u+Of777/Xnj171Lx5c9e/of/j6sIApaWlevLJJ53qsNvt2rNnj4KDgx39XB0zf39/bdy4URs2bFCbNm00d+5ctW7d+pJCGwBUZgQbAHCT6tWrq0WLFmratKnTm9AWLVqoWrVq+s9//uNoKyoq0rZt2xQbG3ve7UVERGj06NFatWqVHn74Yb3++uuO5+rWravBgwdr2bJlevHFF/Xaa69Jktq0aaPt27c7LTP95Zdfys/Pr9wzCGUZOHCgNm7cqO+++67C2yjL0KFD9fnnn+u2225TrVq1Ltrfz89Pd911l958802nJaZPO3HihIqLi9WmTRsVFxdr69atjud+//137d692/Ezj4+P148//qgWLVqc80+1atUq/D21b99eBw4cKPeSzvHx8dq1a1eZdfj5le8wfbrekpISp3abzaZu3brpySef1Hfffadq1app9erVrn1DAGARLPcMAB5WvXp1jRkzRhMmTFDt2rUVGRmpWbNmKS8vT8OGDSvzNQ899JBuueUWtWrVSkePHtWnn37qeEM+depUJSQkqG3btiosLNS6descz917772aNm2a7rvvPj3xxBP67bffNG7cOA0aNEj169ev8Pfw97//XR988IF69uypJ554Qt27d1etWrW0e/dubdiw4ZwL43NycrR9+3anttPf+5liY2N15MgRhYaGlruWZ555Rps3b9aVV16pp59+Wp06dVJgYKC++OILzZgxQ99++61atmyp2267TSNGjND8+fNVs2ZNPfroo2rcuLFuu+02SdLEiRPVtWtXjR07ViNGjFD16tWVlpamjRs3OmbHKqJHjx669tprNWDAAD3//PNq0aKF0tPTZbPZ1Lt373P6T506VX379lVERIQSExPl5+enHTt2yG63a/r06eXaZ9OmTWWz2bRu3Tr16dNHISEh+vHHH/XJJ5/opptuUr169bR161b99ttvFwzTAGBlzNgAgBc8++yzGjBggAYNGqT4+Hj99NNP+uijj847S1FSUqKxY8cqNjZWvXv3VuvWrTVv3jxJpz6dnzRpktq3b69rr71W/v7+jptdhoaG6qOPPtIff/yhzp0763/+53/Uq1cvvfzyy5dUf3BwsD755BM9+uijWrx4sa655hrFxsbqoYceUrdu3bRmzRqn/ps3b1ZcXJzTP1OnTi1z23Xq1HHp9K1atWrpv//9r5KSkjR9+nTFxcWpe/fuWr58uWbPnu24yenixYuVkJCgvn376qqrrpJhGFq/fr1jNq19+/b6/PPPtWfPHnXv3l1xcXGaMmWKGjZsWLEf0hlWrlypzp07a+DAgWrTpo2Sk5PPmU057eabb9a6deu0ceNGde7cWV27dtXzzz+vpk2blnt/jRs31pNPPqlHH31U9evX1wMPPKCwsDBt2bJFffr0UatWrfT4449rzpw5uuWWWy75+wOAyshmnO9EZAAAAACwCGZsAAAAAFgewQYAAACA5RFsAAAAAFgewQYAAACA5RFsAAAAAFgewQYAAACA5VW6G3SWlpbq4MGDqlmzpmw2m9nlAAAAADCJYRg6duyYGjVq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8IAxc+ZMx+Mff/zRaNasWbn2kZOTY0hy+mfGjBmG3W43AgICHG2NGjUy7Ha7MX78eKe+06ZNM+x2u1GzZk1HW61atQy73W489thjjra9+l/jSPgbRmHjVUam3yvGXv2vsVf/a+yzzTUKG68y/qj1L0fbXv2v8VvYUqOw8Spjv/88p/bCxquMo7XfdGo7XHOxUdh4lZEV+KpTe36jlcafdd5yavu1xiKjsPEqI7vaP53a8xq+a+Revtyp7ZfQhUZh41XGPs11+p4//PBDY/ny5U5tffr0Mex2u3H99dc7ta9evdpYvXq1U9v1119v2O12o0+fPk7ty5cvNz788EOntq5duxp2u90YMGCAU/uiRYuMzz//3KmtY8eOht1uN5KSkpzaX3nlFWPr1q1Oba1btzbsdrsxYsQIp/bnnnvOsNvtTm2RkZGG3W43xo0b59T+j3/8w7Db7UZISIijrV69eobdbjeSk5Od+j722GOG3W43atWq5WirWbOmYbfbjWnTpjn1HT9+vGG3241GjRo52gICAgy73W7MmDHDqe+YMWMMu91uNG/e3Kk9NTXVePHFF53aBg8ebNjtdqNt27ZO7V9++aUxf/58p7a77rrLsNvtRqdOnZzaN23aZLzxxhtObf379zfsdrvRvXt3p/Z169YZK1ascGq78cYbDbvdbtx4441O7StWrDDWrVvn1Na9e3fDbrcb/fv3d2p/4403jE2bNjm1derUybDb7cZdd93l1D5//nzjyy+/dGpr27atYbfbjcGDBzu1v/jii0ZqaqpTW/PmzQ273W6MGTPG438jJBnJycmG3W436tWr52gLCQkx7Ha78Y9//MOp77hx4wy73W5ERkY6tdvtduO5555zahsxYoRht9uN1q1bO7Vv3brVeOWVV5zakpKSDLvdbnTs2NGp/fPPPzcWLVrk1DZgwADDbrcbXbt2dWrnbwR/I85s428EfyP4G8HfiNP/WOlvRE5OzkVzhEuLB6SkpOivf/2rfvzxR0db586dNWfOHF177bWOtnHjxikyMlITJkyQJP3444/q169fua5pOX2B0K+//uq4QMjdaTs2NlafH0hWRJMIySad/RM4vQDEme22//uXp/rKODVq5embnZ2tHk1mKS0tTRKftFSkL5+0uK8vn8a6ry+fxp6/7+mfJWPP34gL9ZX4PblQX/5GuK+v1cbe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", | |
"text/plain": [ | |
"<Figure size 1000x500 with 1 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"\n", | |
"from utils import bxp_stats\n", | |
"\n", | |
"fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(10, 5))\n", | |
"ax.set_title(f\"Poisson GLM Coefficients\", fontsize=10, loc=\"center\", color=\"#000000\")\n", | |
"bxpstats = [dd for dd in bxp_stats(mdl)]\n", | |
"boxprops = dict(linestyle='-', linewidth=1.25, color=\"#000000\")\n", | |
"medianprops = dict(linestyle='-', linewidth=1.25, color=\"#ff00a9\")\n", | |
"ax.bxp(bxpstats, boxprops=boxprops, medianprops=medianprops)\n", | |
"ax.axhline(0, linestyle='--', color=\"#000000\", linewidth=.75)\n", | |
"ax.xaxis.set_ticks_position(\"none\")\n", | |
"ax.yaxis.set_ticks_position(\"none\")\n", | |
"ax.tick_params(axis=\"y\", which=\"major\", labelsize=8)\n", | |
"ax.tick_params(axis=\"x\", which=\"major\", labelsize=8, rotation=90)\n", | |
"ax.yaxis.grid(True, linestyle='-', which='major', color='lightgrey', alpha=1)\n", | |
"plt.show()\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"\n", | |
"#### **Diagnostics**\n", | |
"\n", | |
"- The *null deviance* shows how well the response is predicted by the model with nothing but an intercept.\n", | |
"<br>\n", | |
"\n", | |
"- The *residual deviance* shows how well the response is predicted by the model when the predictors are included.\n", | |
"<br>\n", | |
"\n", | |
"- Deviance can range from $[0, \\infty)$. <ins>A lower deviance means the model better explains the observed data, and represents a higher likelihood</ins>.\n", | |
"\n", | |
"- A Single deviance in isolation tells you nothing about your model; it is only a useful metric when compared with the deviance from another model.\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"null deviance : 224481.15\n", | |
"residual deviance: 219376.66\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"print(f\"null deviance : {mdl.null_deviance:.2f}\")\n", | |
"print(f\"residual deviance: {mdl.deviance:.2f}\")\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"Want to answer: Is the reduction in deviance from the model meaningful, or just something that was observed by chance? Can use the chi-squared test. \n", | |
"\n", | |
"- Degrees of freedom for null model: $n - 1$ \n", | |
"- Degrees of freedom for actual model: $n - 8$ \n", | |
"\n", | |
"<br>\n", | |
"\n", | |
"> If the number of data points in the dataset is large, and [dof_null - dof_model] is small, then the probability of the difference in deviances [null_deviance - resid_deviance] being as large as we observed is approximately chi-squared distributed with [dof_null - dof_model] degrees of freedom. \n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"p-value: 0.000000000000000\n" | |
] | |
} | |
], | |
"source": [ | |
"\n", | |
"from scipy.stats import chi2\n", | |
"\n", | |
"n = df.shape[0]\n", | |
"\n", | |
"dof_null = n - 1\n", | |
"dof_model = n - 8\n", | |
"null_deviance = mdl.null_deviance\n", | |
"resid_deviance = mdl.deviance\n", | |
"\n", | |
"rv = chi2(dof_null - dof_model)\n", | |
"p_value = 1 - rv.cdf(null_deviance - resid_deviance)\n", | |
"\n", | |
"print(f\"p-value: {p_value:.15f}\")\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"The p-value is very small, therefore it is extremely unlikely that we could have seen this reduction in deviance by chance. \n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"#### **GLM Takeaways**\n", | |
"\n", | |
"- GLMs can model various types of response variables, including binary, count, and continuous data.\n", | |
"- Parameters are estimated using maximum likelihood methods with the goal minimize residual deviance.\n", | |
"- Models offer a high degree of interpretability.\n", | |
"- GLMs may not capture non-linear relationships well without transformations or additional terms.\n", | |
"\n", | |
"\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"### **Appendix: Rolling our own IRLS solver**" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Statistical software cannot handle non-numeric values, so categorical predictors must be one-hot encoded. Recall the AREA column:" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"One-hot encoding transforms a single column with $k$ distinct values into $k-1$ indicator columns. This is handled automatically in statsmodels (by wrapping the categorical variable in `C` within the formula expression), as well as the addition of the intercept term." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"\n", | |
"df2 = pd.get_dummies(df, columns=[\"VEHGAS\", \"AREA\"], drop_first=True, dtype=int)\n", | |
"\n", | |
"# Add intercept:\n", | |
"original_cols = df2.columns\n", | |
"df2[\"Intercept\"] = 1\n", | |
"df2 = df2[[\"Intercept\"] + original_cols.tolist()]\n", | |
"\n", | |
"df2.head(15)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"\n", | |
"<br>\n", | |
"\n", | |
"Define deviance function to handle cases where denominator might be 0:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"\n", | |
"def deviance(y, mu):\n", | |
" \"\"\"\n", | |
" Compute Poisson deviance.\n", | |
" \"\"\"\n", | |
" y = y.ravel().tolist()\n", | |
" mu = mu.ravel().tolist()\n", | |
" def _dev(yi, mui):\n", | |
" return(yi * np.log(yi / mui) - (yi - mui))\n", | |
" return 2 * np.array([0 if (i==0 or j==0) else _dev(i, j) for i, j in zip(y, mu)]).sum()\n", | |
" " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"\n", | |
"# Implementation OF IRLS in Python.\n", | |
"from numpy.linalg import inv\n", | |
"\n", | |
"\n", | |
"y = df.CLAIMNB.values # n x 1\n", | |
"X = df2.value # n x (p + 1)\n", | |
"offset = np.log(df.EXPOSURE.values) # n x 1\n", | |
"\n", | |
"D0 = 0\n", | |
"mu = (y + y.mean()) / 2\n", | |
"eta = np.log(mu)\n", | |
"eps = 0.0001\n", | |
"delta_D = np.inf\n", | |
"n = 0\n", | |
"\n", | |
"while abs(delta_D) > eps:\n", | |
"\n", | |
" # Track number of scoring iterations. \n", | |
" n+=1 \n", | |
"\n", | |
" # Create weight matrix. \n", | |
" W = np.diag(mu)\n", | |
"\n", | |
" # Calculate working response. \n", | |
" z = eta + (y - mu) / mu - offset\n", | |
"\n", | |
" # Calculate coefficients based on updated working response. \n", | |
" B = inv(X.T @ W @ X) @ X.T @ W @ z\n", | |
"\n", | |
" # Calculate fitted values.\n", | |
" eta = X @ B + offset\n", | |
"\n", | |
" # Calculate mu.\n", | |
" mu = np.exp(eta)\n", | |
"\n", | |
" # Calculate deviance.\n", | |
" D = deviance(y, mu)\n", | |
"\n", | |
" # Calculate change in deviance.\n", | |
" delta_D = D0 - D\n", | |
"\n", | |
" # Update D0.\n", | |
" D0 = D\n", | |
"\n", | |
" print(f\"Iteration {n}: Deviance = {D:.4f}\")\n" | |
] | |
} | |
], | |
"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.12.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment