\n", "This notebook supports [this blog article](https://mkffl.github.io/2022/03/02/Decisions-Part-3.html)" ], "metadata": { "id": "KPhuGzHOTnPv" } }, { "cell_type": "markdown", "metadata": { "id": "k0iuDR861Vsi" }, "source": [ "## Objective\n", "- Visual validation of ML model score calibration\n", " - Calibration of log-likelihood ratios using logistic regression\n", " - Validation using known score distributions to calculate the true ratios\n", " - Visual inspection of calibration fit on a separate dataset of scores\n", "\n", "## Logistic regression calibration\n", "- Estimate \n", "$$\\text{llr}(x ; \\omega) = \\log \\frac{ p(x \\vert \\omega_1)}{p(x \\vert \\omega_0)}$$\n", "- Using logistic regression, which by default estimates target class log-odds i.e.\n", "$$\\text{log-odds}(\\omega; x) = \\log \\frac{ p(\\omega_1 \\vert x)}{p(\\omega_0 \\vert x)}$$\n", "\n", "- Conversion from log-odds to llr uses the relation log-odds = llr + effective-prior (ep) hence llr = log-odds - ep\n", "\n", "## Score distributions\n", "- I test two assumptions for the score class-conditional density\n", " - Gaussian: logistic regression calibration works well as expected\n", " - Skew-normal: lack of fit\n", "\n", "Main source is *Tutorial on logistic-regression calibration and fusion: Converting a score to a likelihood ratio* by GS Morrison\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "do-mtxdB1Vss" }, "outputs": [], "source": [ "# Stats\n", "import numpy as np\n", "import seaborn as sns\n", "from scipy.special import logit, expit\n", "from scipy.stats import norm as f_norm, skewnorm\n", "\n", "# Off the shelf stats models\n", "from sklearn.linear_model import LogisticRegression as lr\n", "\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from IPython.display import Image\n", "from IPython.core.display import HTML" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "Zm67U0vf1Vs9" }, "outputs": [], "source": [ "# Utils\n", "def reshape_to_1d(array):\n", " \"\"\" Reshape [] to [[]], a requirement from sklearn. \"\"\"\n", " return np.reshape(array,(-1, 1))\n", "\n", "def get_logistic_estimates(clf):\n", " \"\"\" Find the logistic reg parameter estimates \"\"\"\n", " return clf.intercept_[0], clf.coef_[0][0]\n", "\n", "def get_effective_prior(tarN, nontarN):\n", " return logit(tarN/(tarN+nontarN))\n", "\n", "def logistic_logodds(x, β_0, β_1):\n", " return β_0 + β_1*x\n", "\n", "def log_likelihood_ratio_density(tar_density, nontar_density):\n", " def func(x):\n", " return np.log(tar_density(x)/nontar_density(x))\n", " \n", " return func\n", "\n", "# Data\n", "def generate_data(nontar_rv, tar_rv, nontarN, tarN):\n", " \"\"\" Simulate the scores from two classes\n", " \n", " Args:\n", " nontar_rv (scipy.continuous_dist): rv for w0 class\n", " tar_rv (scipy.continuous_dist): rv for w1 class\n", " \"\"\"\n", " w0_sample = nontar_rv.rvs(nontarN)\n", "\n", " w1_sample = tar_rv.rvs(tarN)\n", "\n", " X = np.concatenate([w0_sample, w1_sample])\n", "\n", " y = [0 for d in w0_sample] + [1 for d in w1_sample]\n", " \n", " return X, y\n", "\n", "# Validation\n", "def logistic_calibration_validation(x, y, test_x, nontarN, tarN, nontar_rv, tar_rv):\n", " \"\"\" Validate llr from logistic regression using the formula for two gaussians.\n", "\n", " Args:\n", " x (np.array): raw scores\n", " y (np.array): labels w0 or w1\n", " test_x (np.array): validation dataset to visually inspect the calibrated scores\n", " nontar_rv (scipy.continuous_dist): rv for w0\n", " tar_rv (scipy.continuous_dist): rv for w1\n", " \"\"\" \n", " # True llr\n", " llr_density = log_likelihood_ratio_density(tar_rv.pdf, nontar_rv.pdf)\n", " \n", " llr_true = [llr_density(x) for x in test_x]\n", " \n", " # Estimated llr\n", " x_1d = reshape_to_1d(x)\n", " \n", " clf = lr(random_state=0).fit(x_1d, y)\n", " \n", " β_0, β_1 = get_logistic_estimates(clf)\n", " \n", " lo_preds = [logistic_logodds(x, β_0, β_1) for x in test_x]\n", " \n", " effective_prior = get_effective_prior(tarN, nontarN)\n", " \n", " llr_preds = [(lo - effective_prior) for lo in lo_preds]\n", " \n", " return llr_true, llr_preds\n", "\n", "\n", "def plot_true_and_predicted_llr(test_x, llr_true, llr_preds, title):\n", " (\n", " sns.lineplot(\n", " 'x', \n", " 'value', \n", " hue='variable', \n", " data=(\n", " pd.DataFrame({\n", " \"x\": test_x, \n", " \"llr_true\": llr_true, \n", " \"llr_preds\": llr_preds})\n", " .melt(\"x\")\n", " )\n", " )\n", " .set_title(title)\n", " )\n", "\n", "# main\n", "def run(nontar_rv, tar_rv, nontarN, tarN, title):\n", " X, y = generate_data(nontar_rv, tar_rv, nontarN, tarN)\n", " \n", " sns.distplot(X[:nontarN])\n", " sns.distplot(X[nontarN:])\n", " plt.title(\"Class-conditional score distributions\")\n", " plt.show()\n", "\n", " # Validation sample scores\n", " test_x = np.linspace(-1, 1, 15) #np.linspace(-3, 3, 40)\n", "\n", " llr_true, llr_preds = logistic_calibration_validation(X, y, test_x, nontarN, tarN, nontar_rv, tar_rv)\n", " \n", " plot_true_and_predicted_llr(test_x, llr_true, llr_preds, title)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "6fB-NYZj1VtF", "outputId": "fb3c2a39-24ad-494f-8802-aee06ef3b26b" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "