{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "2234ad31d4d5274ebc28534d5fa92ed9", "grade": false, "grade_id": "cell-06aa629a0207eeaf", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "# Exercise Sheet No. 5\n", "\n", "---\n", "\n", "> Machine Learning for Natural Sciences, Summer 2024, TT.-Prof. Pascal Friederich, pascal.friederich@kit.edu\n", "> \n", "> Deadline: May 27th 2024, 8:00 am\n", ">\n", "> Tutor: jonas.teufel@kit.edu\n", ">\n", "> **Please ask questions in the forum/discussion board and only contact the Tutor when there are issues with the grading**\n", "---\n", "\n", "**Topic**: This exercise sheet will focus on Bayesian statistics and Naive Bayes Classification" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "4e18e25140bf3e34b36ac2538a4e46a4", "grade": false, "grade_id": "cell-72d95f678d4226c2", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "⚠️ **NOTE.** In an attempt to increase your opportunities for pre-submission self-checks of the assignments, hash-based assert statements will be provided to you throughout this notebook. These assert statements are used to give you an indication about the correcteness of specific numeric values:\n", "\n", "```python\n", "some_variable = 0.73\n", "assert hash(f'{some_variable:.2f}') == 4545130770134580, 'your value is likely incorrect!'\n", "```\n", "\n", "Also note that these hash-based checks do *NOT* check the value with the required precision of the hidden tests! Keep this in mind when contemplating to simply brute force search the correct value. So even if a brute-forced value passes the self-check assert statement, it will likely *NOT* pass the hidden tests for the grading.\n", "\n", "Therefore, if the hash-based self-check fails, your computed value is most likely incorrect. However, the self-check passing does not fully guarantee that correctness! The hash-based asserts statements are necessary but not sufficient conditions for the final result." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "5f5134aee51c2645e17e19ab3105c618", "grade": false, "grade_id": "cell-cab0717140f2e351", "locked": false, "schema_version": 3, "solution": false, "task": false }, "slideshow": { "slide_type": "" }, "tags": [] }, "source": [ "Please add here your group members' names and student IDs. \n", "\n", "Names: Nils Lennart Bruns \n", "\n", "IDs: 2460137" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "b5fa8f151535d9c077c80926cbc9b38f", "grade": false, "grade_id": "cell-dc8e622a586ed8d6", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "import io\n", "import csv\n", "import copy\n", "import hashlib\n", "import typing as t\n", "from collections import defaultdict\n", "\n", "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from scipy.integrate import quad\n", "\n", "hashcheck = lambda v: hashlib.sha256(v.encode()).hexdigest()\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "9281bb21691eb5fc8a7e8cb192d74de3", "grade": false, "grade_id": "cell-b4b7e8190a5548e9", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "# 5 Bayes' theorem\n", "\n", "This section will review Bayes' rule and some additional important formulas from lecture 2. Bayes rule defines how the posterior probability\n", "\n", "$$\n", "\\boxed{p(y|x) = \\frac{p(x|y) p(y)}{p(x)} }\n", "$$\n", "\n", "is defined by the likelihood $p(x|y)$, the evidence $p(x)$ and the prior $p(y)$. Here, $p(x|y)$ is a conditional probability, which gives the probability of event $x$ occurring given that the condition $y$ is true.\n", "\n", "**Practical Example.** Lets clarify this with a concrete example: Here we'll assume that $y \\in \\{ \\mathrm{healthy}, \\mathrm{sick} \\}$ is a random discrete variable if a person has actually caught a certain disease. Additionally, $x \\in \\{ \\mathrm{negative}, \\mathrm{positive} \\}$ is the outcome of a test that is supposed to detect that disease. By looking at population statistics we can see that only about 1 in 1000 people will actually ever catch this disease in their lives. Therefore we can say that $P(y=\\mathrm{sick}) = 1 / 1000 = 0.001$ and likewise $P(y=\\mathrm{healthy} = 1 - P(y=\\mathrm{sick}) = 0.999$. Additionally, through clinical tests we may also know the overall probability of a test being positive or negative $p(x)$ and the *sensitivity* of the test $p(x|y)$ which is the probability of the test showing a positive result when a person actually has the disease. All of this information can then be used to determine the conditional probability $p(y=\\mathrm{sick}|x=\\mathrm{positive})$, for example, of having the disease when the test result is positive. Interestingly, $p(y=\\mathrm{healthy}|x=\\mathrm{positive})$ often times turns out to be higher than intuitively expexted - especially for rare diseases. This is because for really rare diseases the term $p(y=\\mathrm{healthy}$ is so high that a possible test would need an incredibly high sensitivity to compensate for this.\n", "\n", "**Marginalization.** Marginalization is the process of \"eliminating a variable\" from a distribution. For continuous variable $y$, the marginalized distribution \n", "\n", "$$\n", "p(x) = \\int\\limits_{-\\infty}^{+\\infty} p(x|y=s) p(y=s) ds\n", "$$\n", "\n", "is defined as the integral over all possible values of $y$. Similarly for a discrete variable $y$, the marginalization\n", "\n", "$$\n", "p(x) = \\sum\\limits_k p(x|y=k) \\; p(y=k)\n", "$$\n", "\n", "is defined as the discrete sum over all possible realizations $k$ of the variable." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "ed0cfec2b7eb13f7ef7864f384786c3f", "grade": false, "grade_id": "task-5-1", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## 5.1 Exam Qualifications\n", "\n", "**The purpose of exams.** Students generally go to university to learn. Each lecture is designed to teach students about some specific aspect of a subject area (physics, chemistry, computer science etc.). In this process, each course has a specific set of learning goals about certain topics that students should be familar with after completing the course. So there exists an abstract set of qualifications that a student should obtain by taking each course. At the end of each course there is an exam which is supposed to test whether a student sufficiently obtained these qualifications. However, the definition of these qualifications may be complex and it is easy to imagine that there can be a rift between these true qualifications and what an exam is able test in a limited amount of time. For example, it is likely easy to recall some fellow student which managed to pass a certain exam even with a *shaky* understanding of the topic. There might also be the opposite case of students failing the exam even though they seemed to have a good grasp of the topic. Ultimately, one can say that the outcome of an exam is not always perfectly aligned with the knowledge that a person has actually acquired. \n", "\n", "**A case study.** While Prof. Friederich is grading the MLNS exam one day, he wonders how effective his own exam is at judging whether or not a student has actually acquired all the necessary qualifications from his lecture. After thinking about it for a while, he decides that this can be framed as a question of probabilities: *What is the probability that a student has acquired all the necessary qualification, given that they passed the exam?*\n", "\n", "Formally, we can define two random variables $x$ and $y$. The discrete random variable $y = \\{ \\mathrm{qualified}, \\mathrm{unqualified} \\}$ captures whether a student has actually acquired the necessary qualification or not. The second discrete random variable $x = \\{ \\mathrm{pass}, \\mathrm{fail} \\}$ captures whether a student has passed the exam or failed it. To answer the initial question we therefore have to calculate the probability \n", "\n", "$$\n", "P(y=\\mathrm{qualified}|x=\\mathrm{pass})\n", "$$\n", "\n", "that a student is sufficiently qualified *under the condition* that they have passed the exam. This can be done by applying Bayes rule:\n", "\n", "$$\n", "P(y=\\mathrm{qualified}|x=\\mathrm{pass}) = \\frac{ P(x=\\mathrm{pass}|y=\\mathrm{qualified}) \\cdot P(y=\\mathrm{qualified})}{P(x=\\mathrm{pass})}\n", "$$\n", "\n", "This requires us to provide an estimate of the following 3 probabilities:\n", "\n", "- $P(x=\\mathrm{pass})$: The overall probability of passing the exam.\n", "- $P(y=\\mathrm{qualified})$: The prior probabilitiy of acquiring the necessary qualifications.\n", "- $P(x=\\mathrm{pass} | y=\\mathrm{qualified})$: The probability of passing the exam under the condition of possessing the necessary qualifications.\n", "\n", "To estimate the probability $P(x=\\mathrm{pass} | y=\\mathrm{qualified})$ of passing the exam when possessing the necessary qualifications, Prof. Friederich makes the assumption that all of his PhD students already possess all the necessary qualifications. All PhD students take the exam, and 9 out of 10 pass it.\n", "\n", "To estimate the probability $P(y=\\mathrm{qualified})$, Prof. Friederich draws from his experience of talking to various students throughout the semester and estimates that about $80\\%$ of the students generally acquire the necessary qualifications." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "60a8e449da82baa9a9a412cb41145640", "grade": false, "grade_id": "cell-c60c72088095b1a1", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.1 (1 points)** Fill in the numeric values for the probabilities using the information provided in the previous description. Set the value of the variable ``p_y`` to the prior probability of possessing the necessary qualifications and the value of the variable ``p_x_y`` as the conditional probability of passing the exam under the condition of possessing the necessary qualification." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "5077b3f8eaec55947937523bfa04c3a7", "grade": false, "grade_id": "ans-5-1", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "# TASK: Provide estimates for the task probabilities from the previous description.\n", "\n", "# HINT: Give the probabilities as float ratios between 0 and 1 and NOT as percentages\n", "\n", "p_y: float = None\n", "p_x_y: float = None\n", " \n", "p_y = 0.8\n", "p_x_y = 0.9" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "63e95482cec31027e2a48313c2b1854c", "grade": true, "grade_id": "test-5-1-probabilities-text", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-1-probabilities-text - possible points: 2\n", "\n", "assert isinstance(p_y, float)\n", "assert 0 <= p_y <= 1.0, 'give probabilities as ratios in the range [0, 1] and not as percentages!'\n", "assert hashcheck(f'{p_y:.1f}') == '1e9d7c27c8bbc8ddf0055c93e064a62fa995d177fee28cc8fa949bc8a4db06f4', 'p_y is likely incorrect!'\n", "\n", "assert isinstance(p_x_y, float)\n", "assert 0 <= p_x_y <= 1.0, 'give probabilities as ratios in the range [0, 1] and not as percentages!'\n", "assert hashcheck(f'{p_x_y:.1f}') == '8139b33952401b3ee0e2ca84651cb9a1d7f66d442bf908f9cf1f53ea746e5801', 'p_x_y is likely incorrect!'\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "c16b1d086b0a283f84f180b1e53a53fb", "grade": false, "grade_id": "task-5-2", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.2 (2 points)** Estimate the overall chance of passing the exam $P(x=\\mathrm{pass})$. This probability can be very accurately approximated by looking at the results of the previous years. Use the given statistics of the previous years to calculate an approximate value of $P(x=\\mathrm{pass})$ and assign the value to the variable ``p_x``" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "cabedfcfe372da8585577f3687563f3a", "grade": false, "grade_id": "ans-5-2", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "text/plain": [ "0.8494077834179357" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# A list that contains the exam statistics of the previous years. Each element is a dictionary that contains \n", "# the following string keys:\n", "# - year: The year in which the exam was written\n", "# - pass: the number of students that passed the exam\n", "# - fail: the number of students that failed the exam\n", "previous_statistics: list[dict[str, int]] = [\n", " {\n", " 'year': 2021,\n", " 'pass': 162,\n", " 'fail': 35,\n", " },\n", " {\n", " 'year': 2022,\n", " 'pass': 174,\n", " 'fail': 23,\n", " },\n", " {\n", " 'year': 2023,\n", " 'pass': 166,\n", " 'fail': 31,\n", " }\n", "]\n", "\n", " \n", "# TASK: Provide estimates for the task probabilities by calculating from the given information.\n", "\n", "# HINT 1: Give the probabilities as float ratios between 0 and 1 and NOT as percentages\n", "\n", "# HINT 2: One can think of *multiple* ways to estimate the overall probability of passing \n", "# from the given past statistics. If the self-check fails, try to think of an \n", "# an alternate approach.\n", " \n", "p_x: float = None\n", " \n", "p_x = np.sum(list(map(lambda year: year['pass'], previous_statistics)))/(np.sum(list(map(lambda year: year['pass'], previous_statistics))) + np.sum(list(map(lambda year: year['fail'], previous_statistics))))\n", "\n", "p_x" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "eabc49adb5886f133e9cc3b5624f5cc1", "grade": true, "grade_id": "test-5-2-exam-statistics", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-2-exam-statistics - possible points: 2\n", "\n", "assert isinstance(p_x, float)\n", "assert p_x < 1.0, 'give probabilities as ratios in the range [0, 1] and not as percentages!'\n", "assert hashcheck(f'{p_x:.2f}') == '1e181f0934d441445f03ff51c972ef44275b830c10a80401e53b27bf5baf327a', \"p_x answer is likely incorrect!\"\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "340e5965fa2963faf3002ae95d8f9761", "grade": false, "grade_id": "task-5-3", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.3 (1 point)** Given the probabilities from the previous task, now apply Bayes Rule and calculate the probability $P(y=\\mathrm{qualified}\\;|\\;x=\\mathrm{pass})$ that a student has acquired the necessary qualifications, given that they have passed the exam. Assign the resulting conditional probability to the variable ``p_y_x``." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "7d89f5eca00a42632b952b7483095712", "grade": false, "grade_id": "ans-5-3", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "# TASK: Compute the conditional probability p(y=qualified|x=pass) using previously known / estimated \n", "# probabilities using bayes rule and assign it to the variable p_y_x\n", "\n", "p_y_x: float = None\n", "\n", "p_y_x = p_x_y*p_y/p_x" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "6871a5d5b79a60a45a3e7c3142853418", "grade": true, "grade_id": "test-5-3-conditional-probability", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "If a student has successfully passed the exam, there is a 84.76% percent chance that they have actually acquired the necessary qualifications from the course!\n" ] } ], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-3-conditional-probability - possible points: 1\n", "\n", "print(f'If a student has successfully passed the exam, there is a {p_y_x*100:.2f}% percent '\n", " f'chance that they have actually acquired the necessary qualifications from the course!')\n", "assert isinstance(p_y_x, float)\n", "assert 0 <= p_y_x <= 1.0, 'give probabilities as ratios in the range [0, 1] and not as percentages!'\n", "assert hashcheck(f'{p_y_x:.2f}') == '1e181f0934d441445f03ff51c972ef44275b830c10a80401e53b27bf5baf327a'\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d706c13b6391cec6bdba00640b07bd3c", "grade": false, "grade_id": "cell-9e6bec48c99422db", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "So in the end we have found out that there is a relatively high - yet not completely certain - chance of having acquired the necessary qualifications when passing the exam. Ultimately, every form of examination is trying to maximize this metric. As everyone might have already experienced, different exams achieve this ideal to different degrees.\n", "\n", "**The data-centric approach.** In the previous section, we have solved the initial question concerning exam \n", "qualifications in a *classic* fashion through a combination of educated guesses and statistics. In the end, such an approach has to be customized for each individual application. In other applications, it might be more difficult to estimate certain probabilities and past statistics might not be accessible. Overall, this kind of approach requires a lot of domain knowledge, which might or might not be available in certaion situations. Contrary to this knowledge-centric approach is the *data-centric* approach - on which machine learning methods are generally based. Instead of manually deriving a solution, it is automatically extracted from large amounts of raw data." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "e7409ac389bafa2884e9bd512ee0e27c", "grade": false, "grade_id": "cell-6e51825289e97a58", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## 5.2 Data Analysis\n", "\n", "**data collection.** We return to our example of exam qualifications - trying to answer the question of how well Prof. Friederich's exam is at determining whether students have obtained the necessary qualifications. However, in the following sections we approach this question from a *data-centric* prespective. To do this, we first need the necessary raw data. \n", "\n", "**student survey.** We assume that Prof. Friederich conducts a large scale (hypothetical) survey of students. Following the most recent exam, he randomly selects a subset of the students and invites them to a personal interview. Based on each 3 hour personal interview about the content of the lecture, Prof. Friederich is certain about the true qualifications of each student. Slowly, over the course of multiple weeks, this survey results in a dataset consisting of each students true qualification state $y_{\\mathrm{true}} \\in \\{ \\mathrm{qualified}, \\mathrm{unqualified} \\}$ in addition to their exam results $x \\in \\{ \\mathrm{pass}, \\mathrm{fail} \\}$. Additionally, each student is asked to provide the following additional information:\n", "\n", "- The number of hours $t \\in [0, \\infty)$ that they have invested into studying.\n", "- The number of points $r \\in [0, 100]$ that a student has achieved in the exercise.\n", "- The boolean state $l \\in \\{ \\mathrm{seldom}, \\mathrm{regular} \\} = \\{0,1\\}$ of how frequently a student has attended the lecture.\n", "- The boolean state $g \\in \\{ \\mathrm{ignored}, \\mathrm{used} \\} = \\{0, 1\\}$ of whether a student has used old exams during study." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "a8a8dafc3d96b34f051ba19e6f692558", "grade": false, "grade_id": "cell-3f0b02ea73a9b2e5", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.4 (1 point)** This dataset is available at https://bwsyncandshare.kit.edu/s/YwPT62wGYtK7HCL in CSV format. Your task to write the code to retrieve this dataset from the remote file storage server and load it as a ``pandas.DataFrame`` object into the local variable ``df`` for further processing." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "66bf579d531c0936a987a8db991dbcf7", "grade": false, "grade_id": "cell-7b3358711db7de06", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "import io\n", "import requests\n", "import pandas as pd\n", "\n", "\n", "def nextcloud_download(url: str) -> str:\n", " \"\"\"\n", " Downloads the *content* of a file from a nextcloud server.\n", " \n", " :param url: the absolute URL of the file on the nextcloud server\n", " \n", " :returns: the string content of the file\n", " \"\"\"\n", " response = requests.get(f'{url}/download')\n", " content = response.content.decode('utf-8')\n", " return content\n", "\n", "\n", "# TASK: Use the ``nextcloud_download`` function to download the dataset and then load\n", "# the dataset into the given ``df`` variable as a pandas dataframe object.\n", "\n", "df: pd.DataFrame = None\n", "\n", "csv_text = nextcloud_download(\"https://bwsyncandshare.kit.edu/s/YwPT62wGYtK7HCL\")\n", "df = pd.read_csv(io.StringIO(csv_text), sep=\",\")" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "c5ba93db1c334bbb01ecbbb084073f5d", "grade": true, "grade_id": "test-5-4-load-dataset", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-4-load-dataset - possible points: 1\n", "\n", "assert isinstance(df, pd.DataFrame)\n", "assert len(df) != 0\n", "assert len(df) == 264\n", "\n", "# NOTE: The hidden tests will test some randomly chosen example elements from the dataset.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "266e0adc174579e591c9440522cceff2", "grade": false, "grade_id": "cell-c34411470370fab6", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.5 (1 point)** In the previous section we wanted to approximate the conditional probability of $P(y=\\mathrm{qualified}\\;|\\;x=\\mathrm{pass})$ of a student possessing the required qualification under the condition of having passed the exam. Empirically estimate this conditional probability directly from the student survey data and assign the value to the variable ``p_y_x_data``." ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "80b7db7c475839cfcb097c4c8b9b010c", "grade": false, "grade_id": "cell-2d3823960613d127", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "text/plain": [ "0.8133333333333334" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TASK: Compute the conditional probability p(y=qualified | x=pass) directly from the dataset and \n", "# store the resulting float value in this variable.\n", "p_y_x_data: float = None\n", "\n", "p_y_x_data = np.sum(df.loc[df.passed==1][\"qualified\"])/np.sum(df[\"passed\"])\n", "p_y_x_data" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "2d66ff89d9c5600e6124e3d6102231ee", "grade": true, "grade_id": "test-5-5-direct-probability", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-5-direct-probability - possible points: 1\n", "\n", "assert isinstance(p_y_x_data, float), 'please give solution as a float'\n", "assert 0.0 <= p_y_x_data <= 1.0, 'please give probability in the range [0, 1]'\n", "assert hashcheck(f'{p_y_x_data:.1f}') == '1e9d7c27c8bbc8ddf0055c93e064a62fa995d177fee28cc8fa949bc8a4db06f4'\n", "\n", "# NOTE: The hidden tests will check for the exact value of this probility with a tolerance of \n", "# 4 decimals.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "39130e6a238044e5a9e247b4d2c6dd35", "grade": false, "grade_id": "cell-cc277c979997eea3", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Based on the student survey dataset, if a student has successfully passed the exam, there is a 81.33% percent chance that they have actually acquired the necessary qualifications from the course!\n" ] } ], "source": [ "##### DO NOT CHANGE #####\n", "print(f'Based on the student survey dataset, if a student has successfully passed the exam, there is a {p_y_x_data*100:.2f}% percent '\n", " f'chance that they have actually acquired the necessary qualifications from the course!')\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "3c2cd76bc777e097eaac0d6f313e0c9e", "grade": false, "grade_id": "cell-77e077a9d4692b83", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.6 (2 points).** Before continuing with the remaining execises, it makes sense to do some data exploration to get a proper overview of the data exploration here." ] }, { "cell_type": "code", "execution_count": 69, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "467baec40566261ecfd93b6f4bf9d7d9", "grade": false, "grade_id": "cell-ce06ed2db668e5db", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "text/plain": [ "{'hours_study': 184.3560606060606,\n", " 'exercise_points': 65.15530303030303,\n", " 'qualified': 0.7916666666666666,\n", " 'passed': 0.8522727272727273,\n", " 'lecture': 0.5303030303030303}" ] }, "execution_count": 69, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TASK: Plot the data distribution for every column in the student survey dataset to gain some basic \n", "# understanding of the data.\n", "# Additionally, fill in the mean values of each of the dataset columns to the ``mean_values`` \n", "# dictionary.\n", "\n", "# HINT: Try to think of a way to do the visualization automatically. Try to generically iterate over the \n", "# columns of the dataset. What are appropriate visualizations for continuous vs. discrete variables?\n", "# What is a simple method to automatically decide whether an unkown column likely contains \n", "# cont. vs. discrete data.\n", "\n", "mean_values: dict[str, float] = {\n", " 'hours_study': 0.0,\n", " 'exercise_points': 0.0,\n", " 'qualified': 0.0,\n", " 'passed': 0.0,\n", " 'lecture': 0.0,\n", "}\n", "\n", "mean_values: dict[str, float] = {\n", " 'hours_study': df.hours_study.mean(),\n", " 'exercise_points': df.exercise_points.mean(),\n", " 'qualified': df.qualified.mean(),\n", " 'passed': df.passed.mean(),\n", " 'lecture': df.lecture.mean(),\n", "}\n", "\n", "mean_values\n" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "cb061389e89e93d8464db39e6b450fd3", "grade": true, "grade_id": "test-5-6-exploration", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-6-exploration - possible points: 2\n", "\n", "assert isinstance(mean_values, dict)\n", "assert len(mean_values) >= 5\n", "\n", "# NOTE: The hidden tests will compare the values in the mean_values dict with the \n", "# true values with a tolerance of 3 decimal points\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "598ba24860e1211f4c5d2692845f7a88", "grade": false, "grade_id": "cell-cf8e9d1dd6ba1a63", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**practice makes perfect.** Since students provided addditional information during the survey, we can now use this information to approximate numerous other conditional probabilities as well. Intuitively, the amount of time spent studying makes sense as an significant indication of learning progress. Therefore in the following section we would like to investigate the conditional probability $P(y=\\mathrm{qualified}|t)$ of being qualified under the condition of having spent $t$ hours studying.\n", "\n" ] }, { "cell_type": "code", "execution_count": 72, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "8c7416825231efb8cb54dd16b5e7eeaf", "grade": false, "grade_id": "cell-a5460b37faa1d026", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [ { "data": { "image/png": "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GC1btizzWmZ/+ctfDElGYmKifdn169eNDh06GKNGjbrpuqjfON0Obm/FihXauXNnmalnz572PiUlJfrss880evRotW/f3r48JCREEydO1L59+1RQUFDtGmbPnl1mmZ+fnw4ePKjs7OwqbaM2a7zVWqqjpKREn376qUaPHq3w8HD78i5duigmJsah75QpU2Sz2fThhx/al23evFnFxcWaPHnyTV8nPz9fWVlZDu8vALi7y5cvS5K8vb1v2u9G+43+VdW0aVP7z0VFRbp48aLuvPNO+fn5VXqad3WVlpZq69atGjVqlO65554y7TdOB6zp2qq7v/zxvnrQoEG6ePHiTfet/fr1kySHOt966y1lZmbq97///S3XjvqDkAS3179/fw0bNqzMZD4s/u233+rq1avq1KlTmfW7dOmi0tJSnTlzpto1lHeB7bJly3T06FGFhYWpf//+Wrx4sf75z39WuI3arPFWa6mOb7/9Vt9//73uuuuuMm0/HlPnzp3Vr18/rV+/3r5s/fr1uvfee3XnnXfe9HXS0tIkiZAEoE6pavi5fPmyLBaL/XSzqvr+++/14osvKiwsTFarVa1atVJAQIDy8vKUn59f7bpv5ttvv1VBQUGlj9uo6dqqu780/weeJPvfCd99912FrxUcHKzWrVvryy+/lPTvmzO99NJLmjx5cr1+zAgqR0hCg1PRQ09LSkoqXMf8v2Q3PProo/rnP/+pN954Q6GhoVq+fLm6deumTz75pMZqrarbqaU6v4+qmDJlipKSknT27FllZGTowIEDlR5Fkv4vJPXq1eu2Xh8AnMnX11ehoaH277CKpKWlqU2bNvLy8pJU9e/guXPn6ne/+50effRRvf/++/rss8+0c+dOtWzZUqWlpTUziGpyl9oqujueUcnzn/r162cPSa+88oq+++47LV26tMbrQ91CSEK9EBAQoGbNmik9Pb1M2zfffCMPDw+FhYVJ+vf/LJX3jIbTp0/f8uuGhIToySef1NatW5WZmamWLVvqd7/73W3XWB03q6WinbBU9d9HQECAmjZtqhMnTpTpW96Yxo8fr0aNGmnjxo1av369GjdurMcee6zScaSlpSkkJOSW/5cVAFxt1KhRyszMrPBi/y+++EKnTp3SI488Yl9W1e/gDz/8UFOnTtUf//hHPfzww/rJT36igQMH1urz7wICAuTj46OjR4/etF9Va7vZvujHr1ub+8sf69evn9LT05WVlaX//M//1BNPPMHzmkBIQv3QqFEjDR8+XNu2bXO4fej58+e1YcMGDRw4UD4+PpKkDh06KD8/3+F/+3Jycsq9ZXVFSkpKypxCEBgYqNDQUNlsttuu8VZUpZYbz3Uqb2da1d9Ho0aNFBMTo61btyorK8u+/Ouvv9ann35aZrutWrVSbGys1q1bp/Xr12vEiBFVCj5ZWVlq06ZNpf0AwN0888wzatasmWbNmqWLFy86tF26dEmzZ8+Wj4+P5syZY19+K9/BPz4i8sYbb9z2Uf+b8fDw0OjRo/Xxxx/r8OHDZdpv1FPV2m62LzKrrf1lRe655x6VlpZq4sSJMgxDv/nNb2ps26i7uAU46o3f/va32rlzpwYOHKgnn3xSnp6eWr16tWw2m5YtW2bvN378eC1YsEBjxozRU089patXr2rlypXq2LFjlS8wvXz5stq0aaOHH35YvXr1UosWLbRr1y4dOnRIf/zjH2+7xltRlVr69u0rSfrNb36j8ePHq3Hjxho1apSaN29+S7+PJUuWaMeOHRo0aJCefPJJFRcX64033lC3bt3KPcVkypQpevjhhyVJL730UpXGExERod27d2vZsmUKDQ1Vly5d7PUDgDu788479d5772nChAnq0aOHpk+froiICJ06dUpvv/22vvvuO23atMnhOteqfgf/9Kc/1Z///Gf5+vqqa9euSk5O1q5du9SyZctaHdPvf/97ffbZZ7r//vs1c+ZMdenSRTk5Ofrggw+0b98++fn5Vbm2m+2Lfqw29pcVuXFTir///e9avHhxtR6RgXrIpffWA27ixu1Ay7vtqGEYxv333+9wC3DDMIwjR44YMTExRosWLYxmzZoZQ4YMMfbv319m3c8++8zo3r274eXlZXTq1MlYt27dTW8B/u233zost9lsxrPPPmv06tXL8Pb2Npo3b2706tXLePPNNysdV1VrrOotwKtay0svvWS0bt3a8PDwKHML1qr+PgzDMJKSkoy+ffsaXl5eRvv27Y1Vq1ZV2Ndmsxl33HGH4evra3z//feV/m4MwzDOnTtn//1IMl5//fUqrQcA7uKrr74yJk6caAQHB9u/c5s0aWIcO3as3P5V+Q7+7rvvjMcff9xo1aqV0aJFCyMmJsb45ptvjLZt2xpTp06196vpW4AbhmGc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", "text/plain": [ "
" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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GC1btizzWmZ/+ctfDElGYmKifdn169eNDh06GKNGjbrpuqjfON0Obm/FihXauXNnmalnz572PiUlJfrss880evRotW/f3r48JCREEydO1L59+1RQUFDtGmbPnl1mmZ+fnw4ePKjs7OwqbaM2a7zVWqqjpKREn376qUaPHq3w8HD78i5duigmJsah75QpU2Sz2fThhx/al23evFnFxcWaPHnyTV8nPz9fWVlZDu8vALi7y5cvS5K8vb1v2u9G+43+VdW0aVP7z0VFRbp48aLuvPNO+fn5VXqad3WVlpZq69atGjVqlO65554y7TdOB6zp2qq7v/zxvnrQoEG6ePHiTfet/fr1kySHOt966y1lZmbq97///S3XjvqDkAS3179/fw0bNqzMZD4s/u233+rq1avq1KlTmfW7dOmi0tJSnTlzpto1lHeB7bJly3T06FGFhYWpf//+Wrx4sf75z39WuI3arPFWa6mOb7/9Vt9//73uuuuuMm0/HlPnzp3Vr18/rV+/3r5s/fr1uvfee3XnnXfe9HXS0tIkiZAEoE6pavi5fPmyLBaL/XSzqvr+++/14osvKiwsTFarVa1atVJAQIDy8vKUn59f7bpv5ttvv1VBQUGlj9uo6dqqu780/weeJPvfCd99912FrxUcHKzWrVvryy+/lPTvmzO99NJLmjx5cr1+zAgqR0hCg1PRQ09LSkoqXMf8v2Q3PProo/rnP/+pN954Q6GhoVq+fLm6deumTz75pMZqrarbqaU6v4+qmDJlipKSknT27FllZGTowIEDlR5Fkv4vJPXq1eu2Xh8AnMnX11ehoaH277CKpKWlqU2bNvLy8pJU9e/guXPn6ne/+50effRRvf/++/rss8+0c+dOtWzZUqWlpTUziGpyl9oqujueUcnzn/r162cPSa+88oq+++47LV26tMbrQ91CSEK9EBAQoGbNmik9Pb1M2zfffCMPDw+FhYVJ+vf/LJX3jIbTp0/f8uuGhIToySef1NatW5WZmamWLVvqd7/73W3XWB03q6WinbBU9d9HQECAmjZtqhMnTpTpW96Yxo8fr0aNGmnjxo1av369GjdurMcee6zScaSlpSkkJOSW/5cVAFxt1KhRyszMrPBi/y+++EKnTp3SI488Yl9W1e/gDz/8UFOnTtUf//hHPfzww/rJT36igQMH1urz7wICAuTj46OjR4/etF9Va7vZvujHr1ub+8sf69evn9LT05WVlaX//M//1BNPPMHzmkBIQv3QqFEjDR8+XNu2bXO4fej58+e1YcMGDRw4UD4+PpKkDh06KD8/3+F/+3Jycsq9ZXVFSkpKypxCEBgYqNDQUNlsttuu8VZUpZYbz3Uqb2da1d9Ho0aNFBMTo61btyorK8u+/Ouvv9ann35aZrutWrVSbGys1q1bp/Xr12vEiBFVCj5ZWVlq06ZNpf0AwN0888wzatasmWbNmqWLFy86tF26dEmzZ8+Wj4+P5syZY19+K9/BPz4i8sYbb9z2Uf+b8fDw0OjRo/Xxxx/r8OHDZdpv1FPV2m62LzKrrf1lRe655x6VlpZq4sSJMgxDv/nNb2ps26i7uAU46o3f/va32rlzpwYOHKgnn3xSnp6eWr16tWw2m5YtW2bvN378eC1YsEBjxozRU089patXr2rlypXq2LFjlS8wvXz5stq0aaOHH35YvXr1UosWLbRr1y4dOnRIf/zjH2+7xltRlVr69u0rSfrNb36j8ePHq3Hjxho1apSaN29+S7+PJUuWaMeOHRo0aJCefPJJFRcX64033lC3bt3KPcVkypQpevjhhyVJL730UpXGExERod27d2vZsmUKDQ1Vly5d7PUDgDu788479d5772nChAnq0aOHpk+froiICJ06dUpvv/22vvvuO23atMnhOteqfgf/9Kc/1Z///Gf5+vqqa9euSk5O1q5du9SyZctaHdPvf/97ffbZZ7r//vs1c+ZMdenSRTk5Ofrggw+0b98++fn5Vbm2m+2Lfqw29pcVuXFTir///e9avHhxtR6RgXrIpffWA27ixu1Ay7vtqGEYxv333+9wC3DDMIwjR44YMTExRosWLYxmzZoZQ4YMMfbv319m3c8++8zo3r274eXlZXTq1MlYt27dTW8B/u233zost9lsxrPPPmv06tXL8Pb2Npo3b2706tXLePPNNysdV1VrrOotwKtay0svvWS0bt3a8PDwKHML1qr+PgzDMJKSkoy+ffsaXl5eRvv27Y1Vq1ZV2Ndmsxl33HGH4evra3z//feV/m4MwzDOnTtn//1IMl5//fUqrQcA7uKrr74yJk6caAQHB9u/c5s0aWIcO3as3P5V+Q7+7rvvjMcff9xo1aqV0aJFCyMmJsb45ptvjLZt2xpTp06196vpW4AbhmGc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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "##### DO NOT CHANGE #####\n", "\n", "qualified = df['qualified']\n", "hours_study = df['hours_study']\n", "\n", "fig, (ax1, ax2) = plt.subplots(\n", " ncols=2,\n", " nrows=1,\n", " figsize=(10, 5)\n", ")\n", "\n", "sns.histplot(hours_study, ax=ax1, binwidth=10)\n", "ax1.set_xlabel('$t$')\n", "ax1.set_title('Hours of study $t$')\n", "\n", "s = df['qualified'].value_counts(sort=False)\n", "sns.barplot(ax=ax2, x=s.index, y=s.values, order=s.index)\n", "ax2.bar_label(ax2.containers[0]);\n", "ax2.set_xlabel('$x$')\n", "ax2.set_title('Qualification $y$')\n", "\n", "fig\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "8a4be283bbd7c692cdae0f65050def82", "grade": false, "grade_id": "cell-a323ae983b8ad3ce", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.7 (2 points)** In this exercise we want to determine $P(y=\\mathrm{qualified}|t)$ for all possible values of $t \\in \\{0, \\dots, 400\\}$. Calculate the conditional probabilities from the student survey dataset and use them to fill the ``p_y_t`` array." ] }, { "cell_type": "code", "execution_count": 117, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "0e10f026f49550a8447883a80aebfd62", "grade": false, "grade_id": "cell-bdeb340bea8a3142", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_22/3285982670.py:18: RuntimeWarning: invalid value encountered in scalar divide\n", " p_y_t[i] = (np.sum(df.loc[df.hours_study == t][\"qualified\"]) / np.sum(df.hours_study == t))\n" ] }, { "data": { "image/png": "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7r33XtNbcz///HOdfPLJSk9P169+9Sv16dNHjz32mMaPH6+3335b48aNC6pPlKRrrrlGzz//vK677jrl5+fr+++/13vvvad169Zp9OjR+q//+i99+eWX+tOf/qTf/va3Gjx4sCRpyJAhQbV9oP1qsO130UUXKS8vT/PmzVN1dbV+//vfKzMzUwsWLJCkbuO/+uqruz12X7pr30DOz4GCOfdm44UvZm3Tk5iD0fn4zK41fwKNMZzXfrSv+/Hjxys3N1dPP/20zj//fK91Tz/9tEaOHKni4uKg9h0wA4hBn3zyiSHJuP/++43vvvvO2LJli/Haa68Zxx13nJGcnGy8/vrrhmEYxu23325IMlpbW7vU8a9//ctITU01pk+fbmzbts0YOXKkMWrUKOOHH37wuc9Vq1YZkgJ61dfX+6zjvPPOM+x2u7Fx40bPsrq6OiM5Odno/Oc2depUY/jw4V3qKC8v9yq7a9euLmVWr15tSDKeeuopr+VPPPGEV3yd3x94nH/+85+73faKK64wcnJyjG3btnmVu/jiiw2Hw+GJK5hj9mf48OFGeXm5ablDDz3UmDZtms91V199tdGvX7+A9gf0Bh1/sx999JHx9ddfGykpKcYNN9zgWX/qqacaxxxzjOd9oH1Ox/urr77as2zfvn3GIYccYthsNmP+/Pme5du3bzf69etnTJ061Wed55xzjtfya6+91pBkfPrpp4ZhBN7PdNR3ySWXBNg6+/umvn37Gl9//bVn2bfffmukpaUZp5xyimeZvz7RF4fDYcyYMaPbMgsXLvQ5TgTa/h2xB9KvBtt+v/jFL7zKnX/++cagQYMCij+QY/fFX/sGen56cu4No/vx4kDBtE2gMQdzrv0dX0/bO9AYDSO8176/68YwAm+PYD5PlJWVGampqcaOHTs8y5qamoyUlJSAPk/0FLfqISatXbtWknTLLbdoyJAhGjZsmM4880y1trbqpZde8tya9/333yslJUUHH3xwlzqGDRumq666So8//rjOPvts7d69W3/729900EEH+dxnYWGhXn/99YBe2dnZXbZ3uVz6+9//rvPOO0+HHnqoZ/nRRx+tCRMm9Lgt+vXr5/n33r179f333+vwww/XgAEDAvrKvicMw9Bf/vIXlZaWyjAMbdu2zfOaMGGCnE6nqqurI3bMvjidTm3atEnHHnusz/UDBw7U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8d99AAAAAGCCxAkAAAAATJA4BSk1NVXl5eVKTU21OpS4RRuGhvYLDe0XGtovNnFeQkP7hY42DA3tF5potV/CTQ4BAAAAAMHiGycAAAAAMEHiBAAAAAAmSJwAAAAAwASJEwAAAACYIHEK0iOPPKIRI0bIbrdr3LhxqqqqsjqkmPDOO++otLRUQ4cOlc1m04svvui13jAM3XnnncrJyVG/fv1UUlKif/7zn15lmpubdemllyo9PV0DBgzQFVdcoR9++CGKR2GdefPmaezYsUpLS1NmZqbOO+88rV+/3qtMW1ubZsyYoUGDBunggw/Wf//3f2vr1q1eZTZt2qSzzz5b/fv3V2Zmpm699Vbt27cvmodiiYqKCh177LGeB98VFxfr1Vdf9ayn7YIzf/582Ww23XTTTZ5ltGFsY2zyjbGp5xiXQsfYFF4xMTYZCNizzz5r9O3b13j88ceNzz//3LjqqquMAQMGGFu3brU6NMu98sorxm233Wa88MILhiRj+fLlXuvnz59vOBwO48UXXzQ+/fRT45xzzjHy8vKM3bt3e8pMnDjRKCwsND744APj3XffNQ4//HDjkksuifKRWGPChAnGE088YdTW1ho1NTXGWWedZRx66KHGDz/84ClzzTXXGLm5ucbKlSuNjz/+2Dj++OONE044wbN+3759RkFBgVFSUmJ88sknxiuvvGIMHjzYKCsrs+KQouqll14yXn75ZePLL7801q9fb/z61782+vTpY9TW1hqGQdsFo6qqyhgxYoRx7LHHGjfeeKNnOW0Yuxib/GNs6jnGpdAxNoVPrIxNJE5BKCoqMmbMmOF573K5jKFDhxrz5s2zMKrY03lwcrvdRnZ2trFw4ULPsh07dhipqanGn/70J8MwDKOurs6QZHz00UeeMq+++qphs9mMLVu2RC32WNHU1GRIMt5++23DMPa3V58+fYw///nPnjLr1q0zJBmrV682DGP/B4SkpCSjsbHRU6aiosJIT0832tvbo3sAMWDgwIHG73//e9ouCK2trcYRRxxhvP7668app57qGZxow9jG2BQYxqbQMC6FB2NT8GJpbOJWvQDt2bNHa9asUUlJiWdZUlKSSkpKtHr1agsji3319fVqbGz0ajuHw6Fx48Z52m716tUaMGCAjjvuOE+ZkpISJSUl6cMPP4x6zFZzOp2SpIyMDEnSmjVrtHfvXq82POqoo3TooYd6teGPf/xjZWVlecpMmDBBLS0t+vzzz6MYvbVcLpeeffZZ7dy5U8XFxbRdEGbMmKGzzz7bq60krr9YxtjUc4xNwWFcCg1jU8/F0tiU0sNjSDjbtm2Ty+XyanhJysrK0hdffGFRVPGhsbFRkny2Xce6xsZGZWZmeq1PSUlRRkaGp0yicLvduummm3TiiSeqoKBA0v726du3rwYMGOBVtnMb+mrjjnW93Weffabi4mK1tbXp4IMP1vLly5Wfn6+amhraLgDPPvusqqur9dFHH3VZx/UXuxibeo6xKXCMSz3H2BSaWBubSJyAGDNjxgzV1tbqvffeszqUuHLkkUeqpqZGTqdTzz//vKZOnaq3337b6rDiwubNm3XjjTfq9ddfl91utzocADGGcannGJt6LhbHJm7VC9DgwYOVnJzcZaaOrVu3Kjs726Ko4kNH+3TXdtnZ2WpqavJav2/fPjU3NydU+1533XX629/+plWrVumQQw7xLM/OztaePXu0Y8cOr/Kd29BXG3es6+369u2rww8/XGPGjNG8efNUWFio//mf/6HtArBmzRo1NTVp9OjRSklJUUpKit5++2099NBDSklJUVZWFm0Yoxibeo6xKTCMS6FhbOq5WBybSJwC1LdvX40ZM0YrV670LHO73Vq5cqWKi4stjCz25eXlKTs726vtWlpa9OGHH3rarri4WDt27NCaNWs8Zd5880253W6NGzcu6jFHm2EYuu6667R8+XK9+eabysvL81o/ZswY9enTx6sN169fr02bNnm14WeffeY1yL/++utKT09Xfn5+dA4khrjdbrW3t9N2ATj99NP12WefqaamxvM67rjjdOmll3r+TRvGJsamnmNs6h7jUmQwNgUuJsemUGa5SDTPPvuskZqaaixdutSoq6szrr76amPAgAFeM3UkqtbWVuOTTz4xPvnkE0OS8cADDxiffPKJsXHjRsMw9k/5OmDAAOOvf/2rsXbtWuPcc8/1OeXrT37yE+PDDz803nvvPeOII45IiClfDcMwpk+fbjgcDuOtt94yGhoaPK9du3Z5ylxzzTXGoYcearz55pvGxx9/bBQXFxvFxcWe9R1Tbp555plGTU2NUVlZaQwZMiQhpi2dPXu28fbbbxv19fXG2rVrjdmzZxs2m8147bXXDMOg7XriwJmLDIM2jGWMTf4xNvUc41LoGJvCz+qxicQpSA8//LBx6KGHGn379jWKioqMDz74wOqQYsKqVasMSV1eU6dONQxj/7Svd9xxh5GVlWWkpqYap59+urF+/XqvOr7//nvjkksuMQ4++GAjPT3duPzyy43W1lYLjib6fLWdJOOJJ57wlNm9e7dx7bXXGgMHDjT69+9vnH/++UZDQ4NXPRs2bDAmTZpk9OvXzxg8eLBxyy23GHv37o3y0UTfL37xC2P48OFG3759jSFDhhinn366Z2AyDNquJzoPTrRhbGNs8o2xqecYl0LH2BR+Vo9NNsMwjOC/pwIAAACAxMFvnAAAAADABIkTAAAAAJggcQIAAAAAEyROAAAAAGCCxAkAAAAATJA4AQAAAIAJEicAAAAAMEHiBAAAAAAmSJwAAAAAwASJExBHxo8fr5tuusnqMAAA8GBsQqIgcQIAAAAAEzbDMAyrgwBgbtq0aXryySe9ltXX12vEiBHWBAQASHiMTUgkJE5AnHA6nZo0aZIKCgp01113SZKGDBmi5ORkiyMDACQqxiYkkhSrAwAQGIfDob59+6p///7Kzs62OhwAABibkFD4jRMAAAAAmCBxAgAAAAATJE5AHOnbt69cLpfVYQAA4MHYhERB4gTEkREjRujDDz/Uhg0btG3bNrndbqtDAgAkOMYmJAoSJyCO/PKXv1RycrLy8/M1ZMgQbdq0yeqQAAAJjrEJiYLpyAEAAADABN84AQAAAIAJEicAAAAAMEHiBAAAAAAmSJwAAAAAwASJEwAAAACYIHECAAAAABMkTgAAAABggsQJAAAAAEyQOAEAAACACRInAAAAADBB4gQAAAAAJv4/7bFFQ3ZdbIAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "execution_count": 117, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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7r33XtNbcz///HOdfPLJSk9P169+9Sv16dNHjz32mMaPH6+3335b48aNC6pPlKRrrrlGzz//vK677jrl5+fr+++/13vvvad169Zp9OjR+q//+i99+eWX+tOf/qTf/va3Gjx4sCRpyJAhQbV9oP1qsO130UUXKS8vT/PmzVN1dbV+//vfKzMzUwsWLJCkbuO/+uqruz12X7pr30DOz4GCOfdm44UvZm3Tk5iD0fn4zK41fwKNMZzXfrSv+/Hjxys3N1dPP/20zj//fK91Tz/9tEaOHKni4uKg9h0wA4hBn3zyiSHJuP/++43vvvvO2LJli/Haa68Zxx13nJGcnGy8/vrrhmEYxu23325IMlpbW7vU8a9//ctITU01pk+fbmzbts0YOXKkMWrUKOOHH37wuc9Vq1YZkgJ61dfX+6zjvPPOM+x2u7Fx40bPsrq6OiM5Odno/Oc2depUY/jw4V3qKC8v9yq7a9euLmVWr15tSDKeeuopr+VPPPGEV3yd3x94nH/+85+73faKK64wcnJyjG3btnmVu/jiiw2Hw+GJK5hj9mf48OFGeXm5ablDDz3UmDZtms91V199tdGvX7+A9gf0Bh1/sx999JHx9ddfGykpKcYNN9zgWX/qqacaxxxzjOd9oH1Ox/urr77as2zfvn3GIYccYthsNmP+/Pme5du3bzf69etnTJ061Wed55xzjtfya6+91pBkfPrpp4ZhBN7PdNR3ySWXBNg6+/umvn37Gl9//bVn2bfffmukpaUZp5xyimeZvz7RF4fDYcyYMaPbMgsXLvQ5TgTa/h2xB9KvBtt+v/jFL7zKnX/++cagQYMCij+QY/fFX/sGen56cu4No/vx4kDBtE2gMQdzrv0dX0/bO9AYDSO8176/68YwAm+PYD5PlJWVGampqcaOHTs8y5qamoyUlJSAPk/0FLfqISatXbtWknTLLbdoyJAhGjZsmM4880y1trbqpZde8tya9/333yslJUUHH3xwlzqGDRumq666So8//rjOPvts7d69W3/729900EEH+dxnYWGhXn/99YBe2dnZXbZ3uVz6+9//rvPOO0+HHnqoZ/nRRx+tCRMm9Lgt+vXr5/n33r179f333+vwww/XgAEDAvrKvicMw9Bf/vIXlZaWyjAMbdu2zfOaMGGCnE6nqqurI3bMvjidTm3atEnHHnusz/UDBw7U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8d99AAAAAGCCxAkAAAAATJA4BSk1NVXl5eVKTU21OpS4RRuGhvYLDe0XGtovNnFeQkP7hY42DA3tF5potV/CTQ4BAAAAAMHiGycAAAAAMEHiBAAAAAAmSJwAAAAAwASJEwAAAACYIHEK0iOPPKIRI0bIbrdr3LhxqqqqsjqkmPDOO++otLRUQ4cOlc1m04svvui13jAM3XnnncrJyVG/fv1UUlKif/7zn15lmpubdemllyo9PV0DBgzQFVdcoR9++CGKR2GdefPmaezYsUpLS1NmZqbOO+88rV+/3qtMW1ubZsyYoUGDBunggw/Wf//3f2vr1q1eZTZt2qSzzz5b/fv3V2Zmpm699Vbt27cvmodiiYqKCh177LGeB98VFxfr1Vdf9ayn7YIzf/582Ww23XTTTZ5ltGFsY2zyjbGp5xiXQsfYFF4xMTYZCNizzz5r9O3b13j88ceNzz//3LjqqquMAQMGGFu3brU6NMu98sorxm233Wa88MILhiRj+fLlXuvnz59vOBwO48UXXzQ+/fRT45xzzjHy8vKM3bt3e8pMnDjRKCwsND744APj3XffNQ4//HDjkksuifKRWGPChAnGE088YdTW1ho1NTXGWWedZRx66KHGDz/84ClzzTXXGLm5ucbKlSuNjz/+2Dj++OONE044wbN+3759RkFBgVFSUmJ88sknxiuvvGIMHjzYKCsrs+KQouqll14yXn75ZePLL7801q9fb/z61782+vTpY9TW1hqGQdsFo6qqyhgxYoRx7LHHGjfeeKNnOW0Yuxib/GNs6jnGpdAxNoVPrIxNJE5BKCoqMmbMmOF573K5jKFDhxrz5s2zMKrY03lwcrvdRnZ2trFw4ULPsh07dhipqanGn/70J8MwDKOurs6QZHz00UeeMq+++qphs9mMLVu2RC32WNHU1GRIMt5++23DMPa3V58+fYw///nPnjLr1q0zJBmrV682DGP/B4SkpCSjsbHRU6aiosJIT0832tvbo3sAMWDgwIHG73//e9ouCK2trcYRRxxhvP7668app57qGZxow9jG2BQYxqbQMC6FB2NT8GJpbOJWvQDt2bNHa9asUUlJiWdZUlKSSkpKtHr1agsji3319fVqbGz0ajuHw6Fx48Z52m716tUaMGCAjjvuOE+ZkpISJSUl6cMPP4x6zFZzOp2SpIyMDEnSmjVrtHfvXq82POqoo3TooYd6teGPf/xjZWVlecpMmDBBLS0t+vzzz6MYvbVcLpeeffZZ7dy5U8XFxbRdEGbMmKGzzz7bq60krr9YxtjUc4xNwWFcCg1jU8/F0tiU0sNjSDjbtm2Ty+XyanhJysrK0hdffGFRVPGhsbFRkny2Xce6xsZGZWZmeq1PSUlRRkaGp0yicLvduummm3TiiSeqoKBA0v726du3rwYMGOBVtnMb+mrjjnW93Weffabi4mK1tbXp4IMP1vLly5Wfn6+amhraLgDPPvusqqur9dFHH3VZx/UXuxibeo6xKXCMSz3H2BSaWBubSJyAGDNjxgzV1tbqvffeszqUuHLkkUeqpqZGTqdTzz//vKZOnaq3337b6rDiwubNm3XjjTfq9ddfl91utzocADGGcannGJt6LhbHJm7VC9DgwYOVnJzcZaaOrVu3Kjs726Ko4kNH+3TXdtnZ2WpqavJav2/fPjU3NydU+1533XX629/+plWrVumQQw7xLM/OztaePXu0Y8cOr/Kd29BXG3es6+369u2rww8/XGPGjNG8efNUWFio//mf/6HtArBmzRo1NTVp9OjRSklJUUpKit5++2099NBDSklJUVZWFm0Yoxibeo6xKTCMS6FhbOq5WBybSJwC1LdvX40ZM0YrV670LHO73Vq5cqWKi4stjCz25eXlKTs726vtWlpa9OGHH3rarri4WDt27NCaNWs8Zd5880253W6NGzcu6jFHm2EYuu6667R8+XK9+eabysvL81o/ZswY9enTx6sN169fr02bNnm14WeffeY1yL/++utKT09Xfn5+dA4khrjdbrW3t9N2ATj99NP12WefqaamxvM67rjjdOmll3r+TRvGJsamnmNs6h7jUmQwNgUuJsemUGa5SDTPPvuskZqaaixdutSoq6szrr76amPAgAFeM3UkqtbWVuOTTz4xPvnkE0OS8cADDxiffPKJsXHjRsMw9k/5OmDAAOOvf/2rsXbtWuPcc8/1OeXrT37yE+PDDz803nvvPeOII45IiClfDcMwpk+fbjgcDuOtt94yGhoaPK9du3Z5ylxzzTXGoYcearz55pvGxx9/bBQXFxvFxcWe9R1Tbp555plGTU2NUVlZaQwZMiQhpi2dPXu28fbbbxv19fXG2rVrjdmzZxs2m8147bXXDMOg7XriwJmLDIM2jGWMTf4xNvUc41LoGJvCz+qxicQpSA8//LBx6KGHGn379jWKioqMDz74wOqQYsKqVasMSV1eU6dONQxj/7Svd9xxh5GVlWWkpqYap59+urF+/XqvOr7//nvjkksuMQ4++GAjPT3duPzyy43W1lYLjib6fLWdJOOJJ57wlNm9e7dx7bXXGgMHDjT69+9vnH/++UZDQ4NXPRs2bDAmTZpk9OvXzxg8eLBxyy23GHv37o3y0UTfL37xC2P48OFG3759jSFDhhinn366Z2AyDNquJzoPTrRhbGNs8o2xqecYl0LH2BR+Vo9NNsMwjOC/pwIAAACAxMFvnAAAAADABIkTAAAAAJggcQIAAAAAEyROAAAAAGCCxAkAAAAATJA4AQAAAIAJEicAAAAAMEHiBAAAAAAmSJwAAAAAwASJExBHxo8fr5tuusnqMAAA8GBsQqIgcQIAAAAAEzbDMAyrgwBgbtq0aXryySe9ltXX12vEiBHWBAQASHiMTUgkJE5AnHA6nZo0aZIKCgp01113SZKGDBmi5ORkiyMDACQqxiYkkhSrAwAQGIfDob59+6p///7Kzs62OhwAABibkFD4jRMAAAAAmCBxAgAAAAATJE5AHOnbt69cLpfVYQAA4MHYhERB4gTEkREjRujDDz/Uhg0btG3bNrndbqtDAgAkOMYmJAoSJyCO/PKXv1RycrLy8/M1ZMgQbdq0yeqQAAAJjrEJiYLpyAEAAADABN84AQAAAIAJEicAAAAAMEHiBAAAAAAmSJwAAAAAwASJEwAAAACYIHECAAAAABMkTgAAAABggsQJAAAAAEyQOAEAAACACRInAAAAADBB4gQAAAAAJv4/7bFFQ3ZdbIAAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "# This is an array that contains all possible integer values for the hours of study \n", "# (all possible *t* values) in ascending order.\n", "# [0 1 2 3 4 ... 400]\n", "ts: np.ndarray = np.arange(0, 400)\n", " \n", "# TASK: Fill this array with the empirically estimated conditional probabilities\n", "# p(x=qualified|t) that a student has achieved the necessary qualifications \n", "# under the condition of having studied *exactly* t hours.\n", "\n", "# HINT: If there are no students having exactly studied a given number of hours \n", "# Leave the value in this array at zero.\n", "\n", "p_y_t: np.ndarray = np.zeros_like(ts, dtype=float)\n", " \n", "num_t: np.ndarray = np.zeros_like(ts, dtype=float)\n", "\n", "for i,t in enumerate(ts):\n", " p_y_t[i] = (np.sum(df.loc[df.hours_study == t][\"qualified\"]) / np.sum(df.hours_study == t))\n", " num_t[i] = np.sum(df.hours_study == t)\n", "\n", "p_y_t[np.isnan(p_y_t)] = 0.0\n", "\n", "# ~ plotting the solution\n", "\n", "fig, (ax1, ax2) = plt.subplots(\n", " ncols=2,\n", " nrows=1,\n", " figsize=(10, 5)\n", ")\n", "\n", "# p(x=qualified) over different t values\n", "ax1.scatter(ts, p_y_t)\n", "ax1.set_ylabel('p')\n", "ax1.set_xlabel('t')\n", "#ax1.legend()\n", "ax1.set_title('$P(x=\\mathrm{qualified}\\;|\\;t)$')\n", "\n", "# number of students having studied exactly t hours\n", "ax2.scatter(ts, num_t)\n", "ax2.set_ylabel('num')\n", "ax2.set_xlabel('t')\n", "#ax2.legend()\n", "ax2.set_title('Number of students for $t$ hours of study')\n", "\n", "fig" ] }, { "cell_type": "code", "execution_count": 118, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "e933d29e3689f9c86e278e77649dc55a", "grade": true, "grade_id": "test-5-7-hours-study", "locked": true, "points": 3, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-7-hours-study - possible points: 3\n", "\n", "assert isinstance(p_y_t, np.ndarray), 'solution must be array'\n", "assert len(p_y_t) == 400, 'solution is missing elements'\n", "assert np.max(p_y_t) > 0.1, 'solution is likely still empty'\n", "assert np.isclose(p_y_t[0], 0.0), 'solution is likely incorrect'\n", "\n", "# NOTE: The hidden tests will check some selected values from the array to match\n", "# the expected values with a tolerance of 2 decimals\n", "\n", "# HINT: Only the \"p_y_t\" array is relevant to the solution.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "1a1daae995821e36cfe4b2f5023f4203", "grade": false, "grade_id": "cell-d644cd5dbaa35a77", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "Unfortunately, the resulting plot doesn't seem to be very informative. The main problem is that there is simply not enough data available to properly justify an empirical approximation of these probabilities. For most exact values of $t$ there exists not even a single sample in the given student survey dataset to estimate from and there seem to be no more than 20 students for any value of $t$.\n", "\n", "So to improve these results we'd need a *much* larger dataset size, such that there exists a reasonable number of students for each possible number of hours $t$. *Alternatively*, we can slightly modify the problem. Instead of asking for the probability for each exact value of $t$ we can consider a certain range of values. So for example one could calculate the probability $P(x=\\mathrm{qualified}\\;|\\;\\tau < t < \\tau + 50)$ of having the necessary qualification when having studied between $\\tau$ and $\\tau + 50$ hours. In this formulation, a factor $\\times 50$ more samples are used for the empirical estimation of each probability." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "9f1b6125b0037ff9b34263a9d3ae46a3", "grade": false, "grade_id": "cell-7a59e5326140d5bc", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.8 (2 points)** In this exercise we want to determine $P(y=\\mathrm{qualified}|\\tau < t < \\tau + 50)$ for all possible values of $\\tau \\in \\{0, \\dots, 400\\}$. Here we use a possible range of values instead of exact values for $t$ to increase the effective sample size to get better probability estimates. Calculate the conditional probabilities from the student survey dataset and use them to fill the ``p_y_tau`` array." ] }, { "cell_type": "code", "execution_count": 120, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "6e882c394b4e23fbbdfc13aa8b0be909", "grade": false, "grade_id": "cell-a9717e93a1e26f13", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_22/4013558153.py:16: RuntimeWarning: invalid value encountered in scalar divide\n", " p_y_tau[i] = (np.sum(df.loc[(df.hours_study > t)*(df.hours_study < (t+50))][\"qualified\"]) / np.sum((df.hours_study > t)*(df.hours_study < (t+50))))\n", "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" ] }, { "data": { "text/plain": [ "Text(0.5, 1.0, '$P(x=\\\\mathrm{qualified}\\\\;|\\\\; \\\\tau < t < \\\\tau + 50)$')" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA08AAAHYCAYAAACVwtPIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACnEUlEQVR4nOz9eXicd3Xw/7/vfXaNdtmybCd24iwmCUlICJQS+KakhdLShaUsCWF7aNlTCqTwsPUqacmvafoAJQVCoPD0ghYo7fdLCpSQUCAp0IQsTrCzeZWtXbPPvX9+f9yaiWRJtmzLlmyf13X5kjW6Z+7PjCT7PnPO5xxNKaUQQgghhBBCCHFI+kovQAghhBBCCCFOBhI8CSGEEEIIIcQSSPAkhBBCCCGEEEsgwZMQQgghhBBCLIEET0IIIYQQQgixBBI8CSGEEEIIIcQSSPAkhBBCCCGEEEsgwZMQQgghhBBCLIEET0IIIYQQQgixBBI8CSGEEEIIIcQSSPAkhBBCCCGEEEsgwZMQQhyjT37yk5xzzjnEcbzSS1lRX/rSl9A0jV27di34ecsvfvELnvOc55DNZtE0jQceeGDRY4/WRz/6UTRNW9KxGzdu5KMf/eiynFesHrfeeivr16/H87yVXooQ4hQiwZMQQizge9/7Hpqmtf8YhsHGjRt5z3veQ61Wax9XqVT467/+a97//vej6/JP6uEEQcDLX/5ypqam+Nu//Vu+8pWvsGHDhpVe1qqmlOLjH/84P/7xj1d6KcfF3XffPed3bfaf//7v/553vOd5vP/972ft2rWk02kuv/xy/vM//3Peca9//evxfZ9/+Id/OBFPQwhxmjBXegFCCLEaPfjggwD87d/+LT09Pbiuy7/+679yyy230Gg02hdkX/ziFwnDkD/6oz9ayeWuSq973et41ateheM47duefPJJdu/ezec//3ne9KY3HfJYkXjsscf4yEc+wjnnnLPSSzmu3vnOd/KsZz1rzm2bN2+ed9zrX/96vvGNb/Dud7+bs846iy996Uu8+MUv5q677uLXfu3X2selUimuvfZabr75Zt7xjncsORMphBCHIsGTEEIs4KGHHiKbzfLOd76znVG67rrr2LRpE//2b//WDp5uv/12fud3fodUKrWSy12VDMPAMIw5t42NjQFQLBYPe+zpYs+ePRQKhXmvSct9990HwMUXX3zcz7UcrrzySjZu3MiXvvSlI7rf8573PP7wD//wkMf8/Oc/52tf+xo33XQT733vewG45ppr2Lp1K+973/u455575hz/ile8gk9+8pPcddddvPCFLzyi9QghxEKkxkQIIRbw4IMPcsEFF8wpxTMMg76+PqrVKgA7d+7koYce4qqrrppz3+HhYVKpFG94wxvm3P6DH/wAy7J4z3vec9zW/ZOf/IRnPetZpFIpNm3axD/8wz8suP/n9a9/PRs3bpx3/4OP3b17N3/yJ3/Cli1bSKfTdHd38/KXv3xJe5MO3sf0+te/nuc///kAvPzlL0fTNK688soFj4XkdXzDG95Af38/juNw/vnn88UvfnFJz3m53XrrrYuWlmmaRjabJYqiJT+e7/t84xvf4Dd/8zc544wzFn09L7vsMl7zmtcAcNZZZ6Fp2hEHPks913I/x6NRrVYJw3DRr3/jG9/AMAze8pa3tG9LpVK88Y1v5N5772Xv3r1zjr/kkkvo6uri3/7t347bmoUQpxfJPAkhxEF832fHjh28+c1vnnP76OgojzzySDsD0HqX++CMwODgIG9605v43Oc+x0c+8hE2bNjA9u3befnLX85v/dZv8Td/8zfzzhkEAeVyeUnr6+rqWnB/1cMPP8yLXvQient7+ehHP0oYhnzkIx+hv79/SY+7kF/84hfcc889vOpVr2LdunXs2rWLz372s1x55ZU8+uijZDKZJT/W//pf/4vBwUE+8YlPtEu0Flvb6Ogoz372s9E0jbe//e309vbyH//xH7zxjW+kUqnw7ne/+7g954U861nP4itf+QoAjz/+OB//+Md573vfy4UXXggkmbSlZM4eeeQRbrvtNr7yla8wMTHBli1b+MQnPsFZZ5214PHvf//7+ehHP4rneXz4wx9un2spjvRcy/Ucj9Z1111HrVbDMAye97zncdNNN3HppZfOOeaXv/wlZ599NoVCYc7tl112GQAPPPAAQ0NDc7528cUX89Of/vS4rVsIcZpRQggh5vjlL3+pAPU3f/M3anx8XA0PD6vvf//76tJLL1WGYaj//M//VEop9aEPfUgBqlqtznuMffv2Kcdx1B//8R+riYkJtWnTJnXRRRepWq224DnvuusuBSzpz86dOxd8jJe97GUqlUqp3bt3t2979NFHlWEY6uB/7q+99lq1YcOGeY/xkY98ZM6xjUZj3jH33nuvAtQ//uM/zrn99ttvn7O+gz+f/Tz/5V/+5ZD3feMb36jWrFmjJiYm5hz3qle9SnV0dLTXdSTPeTEbNmxQH/nIR5Z0rFJKfelLX1KA2rFjx5KOr1Qq6vOf/7y6/PLLFaDy+bx64xvfqH76058u6f7r169Xr3/960/IuVqO9DnO9vznP19de+21Sz7+pz/9qfqDP/gDddttt6l/+7d/UzfeeKPq7u5WqVRK3X///XOOPf/889ULX/jCeY/xyCOPKEDdeuut8772lre8RaXT6SN+HkIIsRDJPAkhxEEeeughAP70T/+UP/3TP23fvmXLFv793/+9XaY3OTmJaZrkcrl5jzE4OMib3/xmPv/5z3P//ffTbDb50Y9+RDabXfCcF1544YIdwxYyMDAw77Yoivje977Hy172MtavX9++/dxzz+Xqq6/mjjvuWNJjHyydTrf/HgQBlUqFzZs3UywWuf/++3nd6153VI97KEopvvnNb/KKV7wCpRQTExPtr1199dV87Wtf4/777+fZz372cXnOh7Nt27Z2ieChjIyM8Od//uf88z//M41Gg1//9V/nS1/6Ei9/+cuXnLErl8vs2bOHCy644Lifa7alPseFMqZBEOB53pzvGyyeMX3Oc57Dc57znPbnv/M7v8Mf/uEfcsEFF3DDDTfw3e9+t/21ZrO5YFOR1p7DZrM572udnZ00m00ajcZRvRZCCDGbBE9CCHGQBx98ENM0ueOOO9A0Ddu2GRoa4owzzjiix3nve9/Lpz/9aR566CF+/OMfMzg4uOixnZ2d8/ZOHYnx8XGazeaCJVlbtmw56kCi2Wxy4403cvvttzM8PIxSqv21pZYZHqnx8XFKpRKf+9zn+NznPrfgMWNjY8ftOR/Otm3bOOeccw5bwrZ9+3Zuv/12TNPkk5/8JO9617uwLOuIztUK5A8XPC3HuWZb6nP86U9/ygte8IJ5t99zzz187Wtfm3Pbzp07F9xnt5DNmzfzu7/7u3zrW98iiqL2OtLp9IJzm1zXbX/9YK2fWem2J4RYDhI8CSHEQR566CE2b97Mb/zGbxzyuO7ubsIwpFqtks/n5339L//yLwEIw5Curq5DPpbv+0xNTS1pfb29vce892SxC8mDGwK84x3v4Pbbb+fd7343V1xxBR0dHWiaxqte9arjNhS49bivfe1rufbaaxc85oILLlixocTbtm1rN7o4lGc961l8+tOf5rbbbuPP/uzP+Ou//mte+9rXct111x02GGppBU+tfUfH81yzLfU5LpQx/dM//VMGBgb4sz/7szm3L5QxPZShoSF836der7f3OK1Zs4bh4eF5xx44cACAtWvXzvva9PQ0mUxmwcBKCCGOlARPQghxkIceeojnPe95hz2uNXdn586d8y5Qb7rpJr7whS/w6U9/mj/7sz/jL//yL/nCF76w6GPdc889C76Dv5CF3sHv7e0lnU7z+OOPzzt+x44d827r7OykVCrNu3337t1zPv/GN77BtddeO6fJheu6C953ufT29pLP54mi6JDZuCiKjug5L4darca+ffuWNHMpm83ytre9jbe97W3cf//9fOELX+D222/nlltu4eKLL+a6667j1a9+9SED64ceeog1a9bQ09Nz3M91NM9xoYxpZ2cna9asOaZMKsBTTz1FKpWaUxZ70UUXcdddd1GpVOY0jfjZz37W/vrBdu7cybnnnntMaxFCiBZpVS6EELOMjIwwNjbGeeedd9hjr7jiCgD+53/+Z87t3/72t/nABz7AX/zFX/C2t72Nt7zlLfzjP/4jO3fuXPSxWu/gL+XPQu/gG4bB1Vdfzbe//W327NnTvv1Xv/oV3/ve9+Ydv2nTJsrlcjuzAcm79//6r/8673Fnl+oBfOpTnzquLasNw+AP/uAP+OY3v8m2bdvmfX18fLx93JE85+UwOjoKJAHekbj44ov5+7//ew4cOMCXv/xlcrkc73jHO1i7di2veMUr2s/pYHv27GHdunUn5FwtR/scj9ZC63nwwQf593//d170ohfN2Sf1h3/4h0RRNKec0/M8br/9di6//PJ5nfYA7r///jl7qoQQ4lhI5kkIIWZ58MEHATj//PMPe+yZZ57J1q1b+cEPftCe6XTffffxmte8hte85jV88IMfBOB973sft9566yGzT8e65wngYx/7GN/97nd53vOex5/8yZ8QhiGf+tSnOP/88+cESQCvetWreP/738/v/d7v8c53vpNGo8FnP/tZzj77bO6///72cb/927/NV77yFTo6OjjvvPO49957+cEPfkB3d/cxrfVw/uqv/oq77rqLyy+/nDe/+c2cd955TE1Ncf/99/ODH/ygXeJ4JM95OfT09GAYRnt/0W//9m/T19e35Pun02muueYa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6Ef6+c9/rs985jNTdQtl7Wz1I0nXXXfduOfpBz/4wbj91M/F8cwzz+i2227Tr371Kz355JPKZrO69tprNTIyUjjmbL/PHMfRDTfcoEwmo1/+8pf6l3/5Fz300EPaunWrF7dUVoqpH0navHnzuOfnrrvuKuyjfi6eSy65RHfeead2796tF154Qb/3e7+nG2+8Ua+88ooknh2vna1+pCl8dgw8sXbtWnPbbbcV/uw4jpk7d67p6OjwsFQz07Zt28zKlSsn3BePx00gEDA//OEPC9teffVVI8l0dXVNUQlnLknmscceK/zZdV3T1NRk7r777sK2eDxuQqGQ+cEPfmCMMeY3v/mNkWT+53/+p3DMj3/8Y2NZlunu7p6yss8E764fY4zZtGmTufHGGyc9h/qZOn19fUaSeeaZZ4wxxf0+e+KJJ4xt26anp6dwzP3332+i0ahJp9NTewNl7t31Y4wxH/3oR83nP//5Sc+hfqbWrFmzzHe+8x2enWlqrH6Mmdpnh5YnD2QyGe3evVutra2FbbZtq7W1VV1dXR6WbOZ67bXXNHfuXC1atEg333yzjhw5IknavXu3stnsuLpaunSp5s+fT1154I033lBPT8+4+qipqdG6desK9dHV1aVYLKY1a9YUjmltbZVt23ruueemvMwz0a5du9TQ0KAlS5boc5/7nI4fP17YR/1MncHBQUlSbW2tpOJ+n3V1demKK65QY2Nj4ZgNGzYokUiM+z+8OH/vrp8x3//+91VXV6fly5dry5YtSiaThX3Uz9RwHEcPP/ywRkZG1NLSwrMzzby7fsZM1bPjP/9bwLkaGBiQ4zjjKlCSGhsbtX//fo9KNXOtW7dODz30kJYsWaJjx47p61//uj7ykY9o37596unpUTAYVCwWG3dOY2Ojenp6vCnwDDb233yiZ2dsX09PjxoaGsbt9/v9qq2tpc6mwHXXXadPfvKTuvTSS/X666/rr//6r3X99derq6tLPp+P+pkiruvqC1/4gj784Q9r+fLlklTU77Oenp4Jn6+xfbgwJqofSfrTP/1TLViwQHPnztXevXv1la98RQcOHNCjjz4qifq52F5++WW1tLQolUqpqqpKjz32mJYtW6Y9e/bw7EwDk9WPNLXPDuEJM971119f+HnFihVat26dFixYoH//939XRUWFhyUDSs+f/MmfFH6+4oortGLF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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# This is an array that contains all possible integer values for the hours of study \n", "# (all possible *t* values) in ascending order.\n", "# [0 1 2 3 4 ... 400]\n", "ts: np.ndarray = np.arange(0, 400)\n", " \n", "# TASK: Fill this array with the empirically estimated conditional probabilities\n", "# p(x=qualified|tau < t < tau + 50) that a student has achieved the necessary qualifications \n", "# under the condition of having studied between tau and tau+50 hours.\n", "\n", "# HINT: If there are no students having exactly studied a given number of hours \n", "# Leave the value in this array at zero.\n", "\n", "p_y_tau: np.ndarray = np.zeros_like(ts, dtype=float)\n", "\n", "for i,t in enumerate(ts):\n", " p_y_tau[i] = (np.sum(df.loc[(df.hours_study > t)*(df.hours_study < (t+50))][\"qualified\"]) / np.sum((df.hours_study > t)*(df.hours_study < (t+50))))\n", "\n", "p_y_tau[np.isnan(p_y_tau)] = 0.0\n", "\n", "\n", "fig, ax = plt.subplots(\n", " ncols=1,\n", " nrows=1,\n", " figsize=(10, 5)\n", ")\n", "\n", "# p(x=qualified) over different tau values\n", "ts_ = [t for i, t in enumerate(ts) if p_y_tau[i] > 0]\n", "ps_ = [p for i, p in enumerate(p_y_tau) if p_y_tau[i] > 0]\n", "ax.scatter(ts_, ps_, alpha=0.3)\n", "ax.plot(ts_, ps_)\n", "ax.set_ylabel('p')\n", "ax.set_xlabel(r'$\\tau$')\n", "ax.legend()\n", "ax.set_title(r'$P(x=\\mathrm{qualified}\\;|\\; \\tau < t < \\tau + 50)$')" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "6993e41348f87f26f443fc1331862d70", "grade": true, "grade_id": "test-5-8-smoothing", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-8-smoothing - possible points: 2\n", "\n", "assert isinstance(p_y_tau, np.ndarray), 'solution must be array'\n", "assert len(p_y_tau) == 400, 'solution is missing elements'\n", "assert np.max(p_y_tau) > 0.1, 'solution is likely still empty'\n", "assert np.isclose(p_y_tau[0], 0.2), 'solution is likely incorrect'\n", "\n", "# NOTE: The hidden tests will test a selection of 5 random elements of the p_y_tau array \n", "# against their true values with a tolerance of 2 decimals.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "f61d2aaeddc065648dabce348397558a", "grade": false, "grade_id": "cell-0e9d655bc6a60b86", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "The resulting plot is much more informative! Due to the increased sample size, there are no more missing values and we can clearly see a trend. For $\\tau = 0$ (study between 0 and 50 hours), the probability starts of relatively low and then rises more or less steadily for an increasing amount studying until it saturates to almost $P(x=\\mathrm{qualified}) \\approx 100\\%$ for $\\tau > 300$." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "4a16be2f9284e5357205ed14610051fd", "grade": false, "grade_id": "cell-9a0a3a7a04d6a269", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**flipping the condition.** In the previous section we have computed the conditional probability $P(x=\\mathrm{qualified} \\;|\\; t)$ of a student having obtained the necessary qualifications after studying for $t$ hours. In the following section we want to look at the reverse case $P(t \\;|\\; x=\\mathrm{qualified})$ which models the likelihood of having worked $t$ hours under the condition of beloning to the group of students that have obtained the necessary qualifcations. This might seem counterintuitive at first, but we'll see that this statistic will be useful to make future predictions." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "1c4fe7f3426d9a5a5d2b71d40c34ad7a", "grade": false, "grade_id": "cell-e92b94e164446ba9", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.9 (2 points)** In this task you'll have to compute the flipped conditional probabilities $P(t \\;|\\; x=\\mathrm{unqualified})$ and $P(t \\;|\\; x=\\mathrm{qualified})$ from the student survey dataset. Save the results for all values $t \\in \\{0, \\dots, 400\\}$ into the two variables ``p_t_y0`` and ``p_t_y1`` respectively." ] }, { "cell_type": "code", "execution_count": 133, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "bf7d957a6f8dcea661cfc05737ffa291", "grade": false, "grade_id": "cell-cfbc0a3b3372ce3a", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n", "No artists with labels found to put in legend. Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 133, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAHYCAYAAABQsElZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACIRklEQVR4nO3de3wU1f0//tcmIQnhEpRLItd4QS6CpNxi+NjSfpqP4VNajVpEagUixXpB0fRHEYpASz+N2kKhwleKFu8UPlilVDGKUVBLEEmCgHJRP0oQyAWQBALktvP7Y8myc2YyZ2dnZnc2eT0fjzzI7JyZObvAnn3v+5z3eBRFUUBERERERESWxUS6A0RERERERK0FAywiIiIiIiKbMMAiIiIiIiKyCQMsIiIiIiIimzDAIiIiIiIisgkDLCIiIiIiIpswwCIiIiIiIrIJAywiIiIiIiKbMMAiIiIiIiKyCQMsIiIiIiIimzDAIiIiIiIisgkDLIp6TzzxBAYOHAiv1xvS8WlpaVi4cKG9naIWPffcc/B4PPj66691t5t9/PHHGDNmDDp06ACPx4Ndu3a12NaKhQsXwuPx+LdXrlyJvn37oq6uzrZrEBEZ4TjmHI45FAkMsMiV3nrrLXg8Hv9PbGws0tLS8PDDD+PMmTP+djU1NXj88ccxe/ZsxMRc/OesKAp+97vf4YMPPohE98mihoYGTJgwASdPnsSf//xnvPjii+jXr19Yrj116lTU19fjr3/9a1iuR0StE8ex6MExh+wWF+kOEOn55JNPAAB//vOf0a1bN5w/fx6vvfYali5dirNnz/rfiFavXo3GxkZMmjRJdfzBgwexYMECDBw4MOx9J3PuvPNO3H777UhISPA/9uWXX+LQoUN4+umn8Ytf/MKwrd0SExMxZcoULFmyBA888IDqm0YiomBxHHMnjjkUDsxgkSvt3r0bHTp0wIMPPoif//zn+MUvfoGNGzeiX79++Oc//+lv9+yzz+LGG29EYmKi6vji4mIAwPDhw8PabzIvNjYWiYmJqkGlsrISANClSxdpWyfcdtttOHToEN577z1Hr0NErRfHMXfimEPhwACLXOmTTz7Btddeq5ouERsbix49euD06dMAgK+++gq7d+9GVlaW6tjRo0fjjjvuAAD0798fHo9H86Zp1o9+9COkpaVpHlcUBcOHD8d3v/tdS+dvydSpU3WvK87hDnzsiy++wNSpU9GlSxckJycjNzcXZ8+eVbX98MMPMWrUKCQmJuLKK6/EX//6V91zmrn+oUOHcN9992HAgAFo3749unbtigkTJkjnrotz3KdOnYqxY8cCACZMmACPx4Pvf//7um0B4MiRI7jrrruQkpKChIQEXHPNNVi9erXutfSet54RI0bg0ksvVX0IIiIyg+PYRXaPOaGONwDHHAoPThEk16mvr8eBAwcwffp01eMVFRX49NNP/d/mbdu2DYD2273Zs2dj4cKFqKurw/z58wFov5Uya9SoUXjzzTfx7bff4pJLLvE/vnbtWpSWluLDDz/UHNPQ0IDq6uqgzn/ppZeqBmErbrvtNlx++eXIz89HSUkJnnnmGfTo0QOPP/44AGDPnj244YYb0L17dyxcuBCNjY1YsGABUlJSLF33448/xrZt23D77bejd+/e+Prrr/HUU0/h+9//Pj777DMkJSUFdZ5f/vKX6NWrF/7whz/gwQcfxKhRo1rsW0VFBa677jp4PB7MmDED3bt3x5tvvolp06ahpqYGDz30kL+t2ec9fPhw/Pvf/zb9OhARcRy7yIkxx67xBuCYQw5RiFymtLRUAaAsXrxYqaqqUo4cOaK8/fbbysiRI5XY2Fhl8+bNiqIoyrx58xQAyunTpzXn6Nu3rzJ16tSgrtevXz9lwYIFhm02btyoAFAKCwv9j9XX1ytXXnml8pOf/ET3mPfee08BENTPV199pXuOKVOmKP369dM8vmDBAkX879v82F133aV6/Oabb1a6du3q387JyVESExOVQ4cO+R/77LPPlNjYWM05zVz/7NmzmnZFRUUKAOWFF17wP/bss8+qnrO4rSgXX7v169erzie2nTZtmnLZZZcpx48fV7W7/fbbleTkZFWfzDxvRVGUu+++W2nfvr3mcSIiGY5jFzkx5gQ73igKxxyKDGawyHV2794NAPjVr36FX/3qV/7HBwwYgI0bN/qnUpw4cQJxcXHo2LGj6vjq6mqUlZXh2muvta1Po0aNAgCUlJTgP//zPwEAq1atwldffYUNGzboHjNs2DBs3rw5qPOnpqba0k8AuOeee1Tb3/3ud/Haa6+hpqYGHTp0wFtvvYWcnBz07dvX32bQoEHIzs7Gpk2bQr5u+/bt/b83NDSgpqYGV111Fbp06YKSkhLceeedIZ9bj6Io+Mc//oHbbrsNiqLg+PHj/n3Z2dlYu3YtSkpK8B//8R9oamoy/bwvueQSnDt3DmfPnjX1bSgREccxn1Dee4MR7vEG4JhD5jDAItf55JNPEBcXh02bNsHj8SA+Ph59+vTB5ZdfHtTxzQObnQNTamoqevXqhdLSUgBAbW0tFi1ahJ///OcYMmSI7jGXXHKJZl59OAS+mTf3AwC+/fZbnD17FufOnUP//v01xw0YMMBSgHXu3Dnk5+fj2WefxZEjR6Aoin9fsFNMzKiqqsKpU6ewatUqrFq1SrdN88Llqqoq08+7uf+s6EREZnEc8wnlvTcY4R5vAI45ZA4DLHKd3bt346qrrsJ//dd/Gbbr2rUrGhsbcfr0aXTq1El1POD75s1Oo0aN8g9MS5Yswbfffovf/e53Lbavr6/HyZMngzp39+7dERsbq3m8pTfapqamFs+ldx4AqgEoWGau/8ADD+DZZ5/FQw89hMzMTCQnJ8Pj8eD2228P+eaZRprP+fOf/xxTpkzRbWPlw8m3336LpKQk1TelRETB4DgWmmDHnHCPNwDHHDKHARa5zu7du4OqZtR8b5CvvvpK9aa2e/duXHbZZejWrZut/Ro1ahQ2btyIsrIy/OlPf8K9995reCPCbdu24Qc/+EFQ5/7qq690KyddcsklOHXqlObxQ4cOBdttle7du6N9+/b4/PPPNfsOHDhg6fqvvPIKpkyZgsWLF/sfO3/+vO7xdujevTs6deqEpqYm6TesZp834Ps7GTRokC19JaK2heOYj1NjTrjHG4BjDpnDAItcpby8HJWVlRg8eLC0bWZmJgBg586dqoGprKwMvXv3tr1vI0eOhNfrxc9+9jMoioLf/OY3hu3tWIN15ZVXorq6Grt37/Y/x2PHjuG1114z1/kLYmNjkZ2djQ0bNqCsrMw/nXDfvn146623LF0/NjZWkyV78sknDbNtVsTGxuLWW2/FmjVrsHfvXs0Ul6qqKnTv3t3f1szzBnzrFJrLJBMRBYvj2EVOjTnhHm+ar8kxh4LFAItc5ZNPPgEAXHPNNdK2V1xxBYYMGYJ33nkHd911l//xyy+/HO+++y6eeOIJ9OzZE4MGDcKIESMs923kyJEAgH//+99YuHCh/420JXaswbr99tsxe/Zs3HzzzXjwwQdx9uxZPPXUU7j66qtRUlIS0jl/+9vfoqCgAN/97ndx3333obGxEU8++SSuueYa/7SUUK7/4x//GC+++CKSk5MxePBgFBUV4Z133kHXrl1Dfv4yjz32GN577z1kZGRg+vTpGDx4ME6ePImSkhK88847qqktZp53cXExTp48iZtuusmxvhNR68RxTM2JMScS4w3AMYdMiEjtQqIWPPHEEwoAZffu3UG1X7JkidKxY0dVadQjR44o2dnZSseOHRUAyl/+8hfDcwRT3rZZWlqa0r17d92Suk55++23lSFDhijx8fHKgAEDlJdeesmwTHtVVZXqcb2StFu3blVGjBihxMfHK1dccYWycuVK3XOauf63336r5ObmKt26dVM6duyoZGdnK/v371f69eunTJkypcX+WCmZqyiKUlFRodx///1Knz59lHbt2impqanKD3/4Q2XVqlWa5xLs8549e7bSt29fxev1as5BRGSE45iW3WNOsOONonDMochggEVR7dSpU8qll16qPPPMMyGfI9iB6csvv1RiY2OVZcuWhXwtN2tpsGtrzp8/r6SmpipLly6NdFeIqA1oq+MYxxwfjjmtk/aW20RRJDk5Gb/+9a/xxz/+0bHKQc3mzJmDtLQ0zX2mqHV59tln0a5dO/49E1FYcBxr2zjmtE4MsCjqzZ49G/v370dMjP3/nE+dOoW///3v+OUvf4n169djxYoViI+Pt/065B733HMPysrKkJCQEOmuEFEbwXGs7eKY0zqxyAWRgcLCQvzsZz9D79698de//hXZ2dmR7hIREVHQOI4RhZ9HUUK4+ygRERERERFpcIogERERERGRTRhgERER6VixYgXS0tKQmJiIjIwM7Nixw7D9+vXrMXDgQCQmJmLo0KHYtGmTar/H49H9+eMf/+jk0yAiojDjFMEWeL1eHD16FJ06dYLH44l0d4iI2gxFUXD69Gn07NnTkUX/wVi3bh0mT56MlStXIiMjA0uXLsX69etx4MAB9OjRQ9N+27Zt+N73vof8/Hz8+Mc/xpo1a/D444+jpKQEQ4YMAQCUl5erjnnzzTcxbdo0fPHFF7jiiiuC6hfHJiKiyDAzNjHAasE333yDPn36RLobRERt1uHDh9G7d++IXDsjIwOjRo3C8uXLAfgCmz59+uCBBx7AI488omk/ceJE1NbW4vXXX/c/dt111yE9PR0rV67UvUZOTg5Onz6NwsLCFvtRV1eHuro6//aRI0cwePDgUJ8WERFZFMzYxCqCLejUqRMA34vYuXPnCPeGiKjtqKmpQZ8+ffzvw+FWX1+P4uJizJkzx/9YTEwMsrKyUFRUpHtMUVER8vLyVI9lZ2djw4YNuu0rKirwxhtv4PnnnzfsS35+Pn77299qHufYREQUXmbGJgZYLWieetG5c2cOYkREERCpKXDHjx9HU1MTUlJSVI+npKRg//79useUl5frthenBTZ7/vnn0alTJ9xyyy2GfZkzZ44qcGse4Dk2ERFFRjBjEwMsIiKiMFu9ejXuuOMOJCYmGrZLSEjgDUiJiKIMAywiIqIA3bp1Q2xsLCoqKlSPV1RUIDU1VfeY1NTUoNt/8MEHOHDgANatW2dfp4mIyDVYpp2IiChAfHw8RowYoSo+4fV6UVhYiMzMTN1jMjMzNcUqNm/erNv+b3/7G0aMGIFhw4bZ23EiInIFZrCIiMhWiqKgsbERTU1NLbZp164dYmNjw9grc/Ly8jBlyhSMHDkSo0ePxtKlS1FbW4vc3FwAwOTJk9GrVy/k5+cDAGbOnImxY8di8eLFGD9+PNauXYudO3di1apVqvPW1NRg/fr1WLx4cdifExFRWyYbm2JjYxEXF2fL+l8GWEREZJv6+nocO3YMZ8+eNWzn8XjQu3dvdOzYMUw9M2fixImoqqrC/PnzUV5ejvT0dBQUFPgLWZSVlanugzJmzBisWbMG8+bNw9y5c9G/f39s2LDBfw+sZmvXroWiKJg0aVJYnw8RUVsW7NiUlJSEyy67DPHx8Zaux/tgtaCmpgbJycmorq5mpSYioiB4vV58/vnniI2NRffu3REfH6/7TaCiKKiqqsLZs2fRv39/TSaL778t42tDRGROMGOToiior69HVVUVmpqa0L9/f83NhM28/zKDRUREtqivr/ffkDcpKcmwbffu3fH111+joaHB1VMFiYgougU7NrVv3x7t2rXDoUOHUF9fL63yaoRFLoiIyFbit356InWPKyIiapuCGZuCaRPUtWw5CxERERERETHAIiIiIiIisgsDLCIiIiIiIpswwCIiIiIiIrIJAywiIrJVMHf/4B1CiIgonMI5NjHAIgqDTw6fwuTVO7C/vCbSXSFyTLt27QBAeiNHwFc2FwBLtBNR8A6+Dbz0U6DmWKR7QlHEzNjU3Kb5mFDxPlhEYXDTin8DAD47WoOd87Ii3BsiZ8TGxqJLly6orKwEACQlJemWY/d6vaiqqkJSUhLi4jgMEVGQ1kzw/fnmLGDiS5HtC0WNYMYmRVFw9uxZVFZWokuXLpa//OPIRhRGx8/URboLRI5KTU0FAP9A1pKYmBj07duX98MiIvPOGL+/EImCHZu6dOnib2sFAywiIrKNx+PBZZddhh49eqChoaHFdvHx8bbd0JGIiMhIMGNTu3btbJu2zgCLiIhsFxsby/VVRETkKuEam/j1IRERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYRERERRQ9FiXQPiAwxwCIiIiIiIrIJAywiIiIiih4eT6R7QGSIARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYREZGOFStWIC0tDYmJicjIyMCOHTsM269fvx4DBw5EYmIihg4dik2bNmna7Nu3DzfeeCOSk5PRoUMHjBo1CmVlZU49BSIiigAGWERERIJ169YhLy8PCxYsQElJCYYNG4bs7GxUVlbqtt+2bRsmTZqEadOmobS0FDk5OcjJycHevXv9bb788ktcf/31GDhwILZs2YLdu3fj0UcfRWJiYrieFhERhYFHURQl0p1wo5qaGiQnJ6O6uhqdO3eOdHcoyqU98ob/968fGx/BnhC5nxvefzMyMjBq1CgsX74cAOD1etGnTx888MADeOSRRzTtJ06ciNraWrz++uv+x6677jqkp6dj5cqVAIDbb78d7dq1w4svvhhyv9zw2hBFzMJk35+9RwO/2BzZvlCbY+b9lxksIiKiAPX19SguLkZWVpb/sZiYGGRlZaGoqEj3mKKiIlV7AMjOzva393q9eOONN3D11VcjOzsbPXr0QEZGBjZs2GDYl7q6OtTU1Kh+iIjI3RhgERERBTh+/DiampqQkpKiejwlJQXl5eW6x5SXlxu2r6ysxJkzZ/DYY49h3LhxePvtt3HzzTfjlltuwdatW1vsS35+PpKTk/0/ffr0sfjsiFoBjyfSPSAy5IoAy+6FxGfOnMGMGTPQu3dvtG/fHoMHD/ZP0SAiIgo3r9cLALjpppvw8MMPIz09HY888gh+/OMfG45Pc+bMQXV1tf/n8OHD4eoyERGFKOIBlhMLifPy8lBQUICXXnoJ+/btw0MPPYQZM2Zg48aN4XpaREQUpbp164bY2FhUVFSoHq+oqEBqaqruMampqYbtu3Xrhri4OAwePFjVZtCgQYZVBBMSEtC5c2fVDxERuVvEA6wlS5Zg+vTpyM3N9WeakpKSsHr1at32y5Ytw7hx4zBr1iwMGjQIixYtwvDhw/0LkQFfEDZlyhR8//vfR1paGu6++24MGzZMmhkjIiKKj4/HiBEjUFhY6H/M6/WisLAQmZmZusdkZmaq2gPA5s2b/e3j4+MxatQoHDhwQNXm4MGD6Nevn83PgIiIIimiAZYTC4kBYMyYMdi4cSOOHDkCRVHw3nvv4eDBg7jhhhta7AsXEhMRUbO8vDw8/fTTeP7557Fv3z7ce++9qK2tRW5uLgBg8uTJmDNnjr/9zJkzUVBQgMWLF2P//v1YuHAhdu7ciRkzZvjbzJo1C+vWrcPTTz+NL774AsuXL8e//vUv3HfffWF/fkRE5Jy4SF7caCHx/v37dY+RLSQGgCeffBJ33303evfujbi4OMTExODpp5/G9773vRb7kp+fj9/+9rcWng0REbUWEydORFVVFebPn4/y8nKkp6ejoKDAP/6UlZUhJubid5RjxozBmjVrMG/ePMydOxf9+/fHhg0bMGTIEH+bm2++GStXrkR+fj4efPBBDBgwAP/4xz9w/fXXh/35ERGRcyIaYDnlySefxPbt27Fx40b069cP77//Pu6//3707NlTk/1qNmfOHOTl5fm3a2pqWK2JiKgNmzFjhioDFWjLli2axyZMmIAJEyYYnvOuu+7CXXfdZUf3iIjIpSIaYDmxkPjcuXOYO3cuXnvtNYwf77uh67XXXotdu3bhT3/6U4sBVkJCAhISEqw+JSIiIiIiasMiugbLiYXEDQ0NaGhoUE3dAIDY2Fh/mVwiIiIiIiInRHyKYF5eHqZMmYKRI0di9OjRWLp0qWYhca9evZCfnw/At5B47NixWLx4McaPH4+1a9di586dWLVqFQCgc+fOGDt2LGbNmoX27dujX79+2Lp1K1544QUsWbIkYs+TiIiIiIhav4gHWE4sJF67di3mzJmDO+64AydPnkS/fv3wP//zP7jnnnvC/vyIiIiIyEaKEukeEBnyKAr/leqpqalBcnIyqqureWNHsiztkTf8v3/92PgI9oTI/fj+2zK+NtSmLUz2/dl7NPCLzZHtC7U5Zt5/I36jYSIiIiKioHk8ke4BkSEGWERERERERDZhgEVERERERGQTBlhEREREFD1YPoBcjgEWERERERGRTRhgEREREVH0YJELcjkGWERERERERDZhgEVERERERGQTBlhEREREREQ2YYBFRERERERkEwZYRERERERENmGARUREREREZBMGWERERERERDZhgEVERERERGQTBlhEREREREQ2YYBFRERERNFDUSLdAyJDDLCIiIiIiIhswgCLiIiIiKKHxxPpHhAZYoBFRERERERkEwZYRERERERENmGARRSCnV+fxOTVO/B/VWd095eWfYvJq3fgYMXpMPeMiIiIiCKJARZRCH66sgjvH6zC3S8W6+6/+f9tw/sHqzB19Y4w94yIiIiIIokBFpEFx06dM9x/tPp8mHpCRERERG7AAIuIiIiIiMgmDLCIiIiIiIhswgCLiIiIiIjIJgywiIiIiIiIbMIAi4iIiIiih6JEugdEhhhgERERERER2YQBFhERERFFD48n0j0gMsQAi4iIiIiIyCYMsIiIiIiIiGzCAIuIiIiIogeLXJDLMcAiIiIiIiKyCQMsIiIiIooeLHJBLscAi4iIiIiIyCYMsIiIiHSsWLECaWlpSExMREZGBnbs2GHYfv369Rg4cCASExMxdOhQbNq0SbV/6tSp8Hg8qp9x48Y5+RSIiCgCGGAREREJ1q1bh7y8PCxYsAAlJSUYNmwYsrOzUVlZqdt+27ZtmDRpEqZNm4bS0lLk5OQgJycHe/fuVbUbN24cjh075v/5+9//Ho6nQ0REYcQAi4iISLBkyRJMnz4dubm5GDx4MFauXImkpCSsXr1at/2yZcswbtw4zJo1C4MGDcKiRYswfPhwLF++XNUuISEBqamp/p9LLrkkHE+HiIjCiAEWERFRgPr6ehQXFyMrK8v/WExMDLKyslBUVKR7TFFRkao9AGRnZ2vab9myBT169MCAAQNw77334sSJE4Z9qaurQ01NjeqHqM1jmXZyOQZYREREAY4fP46mpiakpKSoHk9JSUF5ebnuMeXl5dL248aNwwsvvIDCwkI8/vjj2Lp1K/77v/8bTU1NLfYlPz8fycnJ/p8+ffpYeGZERBQOcZHuABERUVtw++23+38fOnQorr32Wlx55ZXYsmULfvjDH+oeM2fOHOTl5fm3a2pqGGQRsUw7uRwzWERERAG6deuG2NhYVFRUqB6vqKhAamqq7jGpqamm2gPAFVdcgW7duuGLL75osU1CQgI6d+6s+iEiIndjgEVERBQgPj4eI0aMQGFhof8xr9eLwsJCZGZm6h6TmZmpag8AmzdvbrE9AHzzzTc4ceIELrvsMns6TkRErsAAi4iISJCXl4enn34azz//PPbt24d7770XtbW1yM3NBQBMnjwZc+bM8befOXMmCgoKsHjxYuzfvx8LFy7Ezp07MWPGDADAmTNnMGvWLGzfvh1ff/01CgsLcdNNN+Gqq65CdnZ2RJ4jUdRikQtyOa7BIiIiEkycOBFVVVWYP38+ysvLkZ6ejoKCAn8hi7KyMsTEXPyOcsyYMVizZg3mzZuHuXPnon///tiwYQOGDBkCAIiNjcXu3bvx/PPP49SpU+jZsyduuOEGLFq0CAkJCRF5jkRE5AwGWERERDpmzJjhz0CJtmzZonlswoQJmDBhgm779u3b46233rKze0RtF4tckMtxiiAREREREZFNGGARERERERHZhAEWEREREUUPFrkgl2OARURERERapS8Df/8ZUH820j0hiioMsIiIiIhI65/3AQfeAD5aGemeqLHIBbkcAywiIiIiatn5U5HuAVFUYYBFRERERERkEwZYRERERERENmGARUREREREZBMGWEREREQUPVimnVyOARYREREREZFNGGARERERUfRgmXZyOQZYRERERERENmGARUREREREZBMGWEREREQUPVjkglyOARYREREREZFNGGARERERUfRgkQtyOQZYRERERERENmGARUREREREZBNXBFgrVqxAWloaEhMTkZGRgR07dhi2X79+PQYOHIjExEQMHToUmzZt0rTZt28fbrzxRiQnJ6NDhw4YNWoUysrKnHoKRERERBQOLHJBLhfxAGvdunXIy8vDggULUFJSgmHDhiE7OxuVlZW67bdt24ZJkyZh2rRpKC0tRU5ODnJycrB3715/my+//BLXX389Bg4ciC1btmD37t149NFHkZiYGK6nRUREREREbVDEA6wlS5Zg+vTpyM3NxeDBg7Fy5UokJSVh9erVuu2XLVuGcePGYdasWRg0aBAWLVqE4cOHY/ny5f42v/nNb/CjH/0ITzzxBL7zne/gyiuvxI033ogePXqE62kREREREVEbFNEAq76+HsXFxcjKyvI/FhMTg6ysLBQVFekeU1RUpGoPANnZ2f72Xq8Xb7zxBq6++mpkZ2ejR48eyMjIwIYNGwz7UldXh5qaGtUPERERERGRGRENsI4fP46mpiakpKSoHk9JSUF5ebnuMeXl5YbtKysrcebMGTz22GMYN24c3n77bdx888245ZZbsHXr1hb7kp+fj+TkZP9Pnz59LD47IiIiIrIdy7STy0V8iqDdvF4vAOCmm27Cww8/jPT0dDzyyCP48Y9/jJUrV7Z43Jw5c1BdXe3/OXz4cLi6TERERERErURcJC/erVs3xMbGoqKiQvV4RUUFUlNTdY9JTU01bN+tWzfExcVh8ODBqjaDBg3Chx9+2GJfEhISkJCQEMrTICIiIiIiAhDhDFZ8fDxGjBiBwsJC/2NerxeFhYXIzMzUPSYzM1PVHgA2b97sbx8fH49Ro0bhwIEDqjYHDx5Ev379bH4GRERERBRWLNNOLhfRDBYA5OXlYcqUKRg5ciRGjx6NpUuXora2Frm5uQCAyZMno1evXsjPzwcAzJw5E2PHjsXixYsxfvx4rF27Fjt37sSqVav855w1axYmTpyI733ve/jBD36AgoIC/Otf/8KWLVsi8RSJiIiIiKiNiPgarIkTJ+JPf/oT5s+fj/T0dOzatQsFBQX+QhZlZWU4duyYv/2YMWOwZs0arFq1CsOGDcMrr7yCDRs2YMiQIf42N998M1auXIknnngCQ4cOxTPPPIN//OMfuP7668P+/IiIiIjapL2vAmsmAudO+bY/3eDbPnvS2nlZ5IJcLuIZLACYMWMGZsyYobtPL+s0YcIETJgwwfCcd911F+666y47ukdEREREZr3im42ErY8D4/KB9VN82+/+Hvjxksj1i8hhEc9gEREREVErdvaEsH08Mv0gChMGWEREREQUPVjkglyOARYREREREZFNGGARERERUfRgkQtyOQZYRERERERENmGARUREREREZBMGWERERETkboGFLVjkglyOARYREREROYcBEbUxDLCIiIiIyN0YpFEUYYBFRERERM5h1T9qYxhgEREREZHLBWSwGLCRyzHAIiIi0rFixQqkpaUhMTERGRkZ2LFjh2H79evXY+DAgUhMTMTQoUOxadOmFtvec8898Hg8WLp0qc29JiKiSGOARUREJFi3bh3y8vKwYMEClJSUYNiwYcjOzkZlZaVu+23btmHSpEmYNm0aSktLkZOTg5ycHOzdu1fT9rXXXsP27dvRs2dPp58GUevBNVgURRhgUVR469Ny5D67A8fP1EXk+ju+OonJq3fg6+O1uvuLD32Lyat34IvKM2Humb4vq85g8uod2Pn1yUh3hSgqLVmyBNOnT0dubi4GDx6MlStXIikpCatXr9Ztv2zZMowbNw6zZs3CoEGDsGjRIgwfPhzLly9XtTty5AgeeOABvPzyy2jXrl04ngpRK8Ey7RQ9GGBRVPjli8V470AV/rBpX0Suf9tfi/D+wSrc93KJ7v5bn9qG9w9W4RfPfxzmnum7+4WdeP9gFX66sijSXSGKOvX19SguLkZWVpb/sZiYGGRlZaGoSP//VFFRkao9AGRnZ6vae71e3HnnnZg1axauueaaoPpSV1eHmpoa1Q8REbkbAyyKKifO1Ef0+uU15w33Hz1lvD9c3NIPomh0/PhxNDU1ISUlRfV4SkoKysvLdY8pLy+Xtn/88ccRFxeHBx98MOi+5OfnIzk52f/Tp08fE8+EqBVRWOSCogcDLCIiIocVFxdj2bJleO655+Ax8eFwzpw5qK6u9v8cPnzYwV4SEZEdGGAREREF6NatG2JjY1FRUaF6vKKiAqmpqbrHpKamGrb/4IMPUFlZib59+yIuLg5xcXE4dOgQfvWrXyEtLa3FviQkJKBz586qH6K2ieuuKHowwCIiIgoQHx+PESNGoLCw0P+Y1+tFYWEhMjMzdY/JzMxUtQeAzZs3+9vfeeed2L17N3bt2uX/6dmzJ2bNmoW33nrLuSdD1FooLHJB0SMu0h0gIiJym7y8PEyZMgUjR47E6NGjsXTpUtTW1iI3NxcAMHnyZPTq1Qv5+fkAgJkzZ2Ls2LFYvHgxxo8fj7Vr12Lnzp1YtWoVAKBr167o2rWr6hrt2rVDamoqBgwYEN4nRxRuDIiojWGARUREJJg4cSKqqqowf/58lJeXIz09HQUFBf5CFmVlZYiJuTgJZMyYMVizZg3mzZuHuXPnon///tiwYQOGDBkSqadA1MowSKPowQCLiIhIx4wZMzBjxgzdfVu2bNE8NmHCBEyYMCHo83/99dch9owoyrDqH7UxXINFRERERO7GMu0URRhgEREREZGBMAU0+98AXp4AnKkKrv3n7wAv/RSoOepsv4hMYoBFRERERAbCtP5p7c+Az98GNj8aXB9evhX4YjPwep7jXSMygwEWEREREblHrU4Gy6hM+5lyZ/tDZBIDLCIiIiIiIpswwCIiIiIil2ORC4oeDLCIiIiIiIhswgCLiIiIiNxNXHdF5GIMsIiIiIjIObYERwZFLohchgEWEREREak5GsRI1lCZvTYDLnIZBlhEREREpOZo0BLCuRlEURRhgEVEREREzmHVP2pjGGARERERkSAwYxTmAEk3IDMo084AjlyGARYRERERqamm5Llgep7CIhcUPRhgEREREZGAQQxRqBhgEREREZEas0REIWOARUREREQCBlhEoWKARURERETuphgUuSByGQZYRERERKSmRLCKIFGUY4BFRERERAIbqwjasp6LUxYpejDAIiIiIiI1R4tchJARY5l2iiIMsIiIiIhI4GQQwwCJWjcGWERERETkHFuKUrjsxsdEBhhgEREREZEai1wQhSykAOvIkSM4cuSI3X0hcj1FMu9b4bdqRBHDsYnITi7LGHENFkURUwHWv//9b1x++eXo27cv+vbti5SUFMyePRs1NTVO9Y+IiMgQxyYiB7guiHFZwEdkwFSA9ctf/hKDBg3Cxx9/jAMHDuCPf/wj3nnnHQwfPpzfGlJY8N6CweHrRG0JxyZqs7Y/BbxyF+Bt0t//8TPA/04Gmhr09xc/B6y9A2is09kZRBCz+3+BNbcDdaeD7bE5B94EXp4AnK5w5vxEDjEVYH355ZdYunQphg8fjquuugqTJ0/Gzp078Z3vfAcPPfSQQ10kIiJqGccmarMKHgH2/gPY9y/9/W/8Cvjsn8Ce9fr7/zUT2P86UPKCdl8wGaxXpwMH3wQ+XBp0l035++3A52/7nienCFIUMRVgDRo0CJWVlarHPB4Pfve736GgoMDWjhEREQWDYxO1efVnjPfLMkznT1m7/rmT1o6Xqa1y9vxENjMVYE2dOhUPPPAADh8+rHq8uroanTt3trVjREREweDYROQEt1UR5Bosih5xZho3T7Xo378/brnlFqSnp6OpqQkvvfQSnnjiCSf6R0REZIhjE5ED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e+5R+vbtq7z77rvKzp07lczMTCUzM9O/v7kU6Q033KDs2rVLKSgoULp3795myrk+8sgjytatW5WvvvpK2b17t/LII48oHo9HefvttxVF4esXisBqTYrC19CtOC61jOOSNRybrOG4ZD83jEsMsBzy5JNPKn379lXi4+OV0aNHK9u3b490l1zhvffeUwBofqZMmaIoiq8k7qOPPqqkpKQoCQkJyg9/+EPlwIEDqnOcOHFCmTRpktKxY0elc+fOSm5urnL69OkIPJvw0nvdACjPPvusv825c+eU++67T7nkkkuUpKQk5eabb1aOHTumOs/XX3+t/Pd//7fSvn17pVu3bsqvfvUrpaGhIczPJjLuuusupV+/fkp8fLzSvXt35Yc//KF/EFMUvn6hEAcyvobuxXFJH8clazg2WcNxyX5uGJc8iqIooeW+iIiIiIiIKBDXYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWUSv08MMP45Zbbol0N4iIiPw4NlFbwQCLqBXasWMHRo4cGeluEBER+XFsorbCoyiKEulOEJE96uvr0aFDBzQ2Nvofy8jIwPbt2yPYKyIiass4NlFbExfpDhCRfeLi4vDvf/8bGRkZ2LVrF1JSUpCYmBjpbhERURvGsYnaGgZYRK1ITEwMjh49iq5du2LYsGGR7g4RERHHJmpzuAaLqJUpLS3lAEZERK7CsYnaEgZYRK3Mrl27OIgREZGrcGyitoQBFlErs2fPHqSnp0e6G0RERH4cm6gtYYBF1Mp4vV4cOHAAR48eRXV1daS7Q0RExLGJ2hQGWEStzO9//3s899xz6NWrF37/+99HujtEREQcm6hN4X2wiIiIiIiIbMIMFhERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTRhgERERERER2YQBFhERERERkU0YYBEREREREdmEARYREREREZFNGGARERERERHZhAEWERERERGRTf5/Y8YMOpwdVOcAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# This is an array that contains all possible integer values for the hours of study \n", "# (all possible *t* values) in ascending order.\n", "# [0 1 2 3 4 ... 400]\n", "ts: np.ndarray = np.arange(0, 400)\n", "\n", "p_t_y0: np.ndarray = np.zeros_like(ts, dtype=float)\n", "p_t_y1: np.ndarray = np.zeros_like(ts, dtype=float)\n", " \n", "for i,t in enumerate(ts):\n", " p_t_y0[i] = (np.sum(df.loc[df.qualified == 0].hours_study == t) / np.sum(df.qualified == 0))\n", " p_t_y1[i] = (np.sum(df.loc[df.qualified == 1].hours_study == t) / np.sum(df.qualified == 1))\n", "\n", "p_t_y0[np.isnan(p_t_y0)] = 0.0\n", "p_t_y1[np.isnan(p_t_y1)] = 0.0\n", "\n", "\n", "fig_t_y, (ax_y0, ax_y1) = plt.subplots(\n", " ncols=2,\n", " nrows=1,\n", " figsize=(10, 5)\n", ")\n", "\n", "# p(t | y=unqualified)\n", "ax_y0.plot(ts, p_t_y0, color='tab:blue')\n", "ax_y0.set_ylabel(r'$p$')\n", "ax_y0.set_xlabel(r'$t$')\n", "ax_y0.set_title(r'$P(t\\;|\\;y=\\mathrm{unqualified})$')\n", "ax_y0.legend()\n", "\n", "# p(t | y=qualified)\n", "ax_y1.plot(ts, p_t_y1, color='tab:orange')\n", "ax_y1.set_ylabel(r'$p$')\n", "ax_y1.set_xlabel(r'$t$')\n", "ax_y1.set_title(r'$P(t\\;|\\;y=\\mathrm{qualified})$')\n", "ax_y1.legend()" ] }, { "cell_type": "code", "execution_count": 134, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "7ba67bb2aa71e8e486f3500856567a71", "grade": true, "grade_id": "test-5-9-conditional-qualified", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-9-conditional-qualified - possible points: 1\n", "\n", "assert isinstance(p_t_y1, np.ndarray), 'solution must be array'\n", "assert len(p_t_y1) == 400, 'solution is missing elements'\n", "assert np.isclose(np.sum(p_t_y1), 1.0), 'solution is not a proper density distribution!'\n", "\n", "# NOTE: The hidden tests will check the statistical properties of the value arrays (mean, variance)\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "06217a8d56c2d401d1670d03aed5b86f", "grade": true, "grade_id": "test-5-9-conditional-unqualified", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-9-conditional-unqualified - possible points: 1\n", "\n", "assert isinstance(p_t_y0, np.ndarray), 'solution must be array'\n", "assert len(p_t_y0) == 400, 'solution is missing elements'\n", "assert np.isclose(np.sum(p_t_y0), 1.0), 'solution is not a proper density distribution!'\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "1f5b579bcf8f7a36463b57a44a7bcd5f", "grade": false, "grade_id": "cell-50144eb78ec4632c", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "The first thing we notice here is that we encounter somewhat the same problem as in the previous section. For some values of $t$ the probability is zero since there weren't any students who reported that exact study time. However, it is still possible to recognize the overall shape of the distributions - especially in case of the second plot $P(t\\;|\\;y=\\mathrm{qualified})$ since it is based on more overall samples. In this case, we can vaguely recognize the shape as a [gaussian distribution](https://en.wikipedia.org/wiki/Normal_distribution). This intuitively makes sense, since many random variables are normally distributed.\n", "\n", "**Curve fitting.** Based on this insight, another option to obtain a more smooth probability distribution is to simply fit the existing data to a cont. gaussian. Based on the formula for the gaussian distribution\n", "\n", "$$\n", "p(t;\\mu,\\sigma) \\sim \\frac{1}{\\sqrt{2 \\pi \\sigma^2}} \\mathrm{exp}(\\frac{- (t - \\mu)}{2 \\sigma^2})\n", "$$\n", "\n", "this only requires to determine the *mean* $\\mu$ and the *standard deviation* $\\sigma$ from the given data." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "07be2a656b94c087ad00ff3fcb137118", "grade": false, "grade_id": "cell-0a64ce09be3b3fd6", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.10 (2 points)** For this task, you'll have to implement the two functions ``gauss_y0`` and ``gauss_y1`` which should implement gaussian distributions fitting the conditional probabilities $P(t \\;|\\; y=\\mathrm{unqualified})$ and $P(t \\;|\\; y=\\mathrm{qualified})$ respectively." ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "e6512d2239075aee12d5ccf62671b1da", "grade": false, "grade_id": "cell-d82bb1959a8e402c", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1gAAAHYCAYAAABQsElZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAACtw0lEQVR4nOzdeXxU1fk/8M/MZA8kLIEEkE1E9kUWEbSilRrccQHEhc3SasUt/VHFKmD5KpUWihUqYos7QlFBqghiFFAJIAmLiKwCQSALW0L2ZOb+/rjJZO4y98zN3FmSfN6v17zInXvuvWcCzJlnnnOea5MkSQIRERERERH5zR7qDhARERERETUUDLCIiIiIiIgswgCLiIiIiIjIIgywiIiIiIiILMIAi4iIiIiIyCIMsIiIiIiIiCzCAIuIiIiIiMgiDLCIiIiIiIgswgCLiIiIiIjIIgywiIiIiIiILMIAi4iIiIiIyCIMsKjemzt3Lrp37w6Xy1Wn4zt16oRZs2ZZ2yny6q233oLNZsOxY8d0t2t8//33GDZsGOLj42Gz2bBr1y6vbf0xa9Ys2Gw29/bixYvRoUMHlJeXW3YNIiIjHMcCh2MOhQIDLApL69evh81mcz8cDgc6deqEp556CkVFRe52hYWFePnll/H000/Dbq/95yxJEv7yl7/gm2++CUX3yU+VlZUYPXo0zp07h3/84x9499130bFjx6Bce+LEiaioqMDrr78elOsRUcPEcaz+4JhDVosIdQeI9OzevRsA8I9//ANJSUkoKyvDqlWrsGDBApSUlLjfiJYuXYqqqiqMGzdOcfzBgwcxc+ZMdO/ePeh9J3MefPBB3HvvvYiOjnY/d+TIERw/fhxvvPEGfvvb3xq2tVpMTAwmTJiA+fPn47HHHlN800hE5CuOY+GJYw4FAzNYFJb27NmD+Ph4PP7443jggQfw29/+FmvWrEHHjh3xySefuNu9+eabuP322xETE6M4PjMzEwAwYMCAoPabzHM4HIiJiVEMKnl5eQCAZs2aCdsGwpgxY3D8+HF8/fXXAb0OETVcHMfCE8ccCgYGWBSWdu/ejb59+yqmSzgcDrRu3RoXL14EABw9ehR79uzBiBEjFMdeeeWVuP/++wEAXbt2hc1m07xpmnXzzTejU6dOmuclScKAAQPwq1/9yq/zezNx4kTd66rncHs+d/jwYUycOBHNmjVDYmIiJk2ahJKSEkXbb7/9FoMHD0ZMTAy6dOmC119/XfecZq5//Phx/OEPf0C3bt0QGxuLli1bYvTo0cK56+o57hMnTsTw4cMBAKNHj4bNZsN1112n2xYATp48icmTJyM5ORnR0dHo1asXli5dqnstvdetZ+DAgWjRooXiQxARkRkcx2pZPebUdbwBOOZQcHCKIIWdiooKHDhwAFOmTFE8n5ubix9//NH9bd6WLVsAaL/de/rppzFr1iyUl5djxowZALTfSpk1ePBgfP755zh//jyaN2/ufn758uXYuXMnvv32W80xlZWVKCgo8On8LVq0UAzC/hgzZgw6d+6MOXPmICsrC//+97/RunVrvPzyywCAH374ATfeeCNatWqFWbNmoaqqCjNnzkRycrJf1/3++++xZcsW3Hvvvbjkkktw7NgxvPbaa7juuuuwb98+xMXF+XSe3//+92jXrh1eeuklPP744xg8eLDXvuXm5uKqq66CzWbD1KlT0apVK3z++ed46KGHUFhYiCeffNLd1uzrHjBgAL777jvTvwciIo5jtQIx5lg13gAccyhAJKIws3PnTgmANG/ePCk/P186efKk9MUXX0iDBg2SHA6HtGHDBkmSJOm5556TAEgXL17UnKNDhw7SxIkTfbpex44dpZkzZxq2WbNmjQRASk9Pdz9XUVEhdenSRbrtttt0j/n6668lAD49jh49qnuOCRMmSB07dtQ8P3PmTEn937fmucmTJyuev/POO6WWLVu6t0eNGiXFxMRIx48fdz+3b98+yeFwaM5p5volJSWadhkZGRIA6Z133nE/9+abbypes3pbkmp/dytXrlScT932oYcektq0aSOdOXNG0e7ee++VEhMTFX0y87olSZJ+97vfSbGxsZrniYhEOI7VCsSY4+t4I0kccyg0mMGisLNnzx4AwB//+Ef88Y9/dD/frVs3rFmzxj2V4uzZs4iIiECTJk0UxxcUFCA7Oxt9+/a1rE+DBw8GAGRlZeHXv/41AGDJkiU4evQoVq9erXtMv379sGHDBp/On5KSYkk/AeDhhx9WbP/qV7/CqlWrUFhYiPj4eKxfvx6jRo1Chw4d3G169OiB1NRUrF27ts7XjY2Ndf9cWVmJwsJCXHbZZWjWrBmysrLw4IMP1vnceiRJwkcffYQxY8ZAkiScOXPGvS81NRXLly9H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uw1t27aFzWbD6tWrDdv/9a9/hc1m0wwSTqcTzz//PDp37ozY2Fh06dIFs2fPNryh5sWLF/Hkk0+iY8eOiI2NxbBhw/D9998r2rz22mvo27cvEhISkJCQgKFDh+Lzzz+v68slIgqt8ovA2SOAsyLUPQlrvoxNvowhvrSpy7UB4OTJk3jggQfQsmVLxMbGok+fPtixY0ddX3LYYYBFFAR3LPoOmw/m44F/bw91V8hCxcXF6NevHxYtWiRs+/333+P1119H3759NftefvllvPbaa1i4cCF++uknvPzyy5g7dy5effVVr+f77W9/iw0bNuDdd9/FDz/8gBtvvBEjRozAyZMn3W0uueQS/PWvf0VmZiZ27NiBX//617jjjjvw448/1u0Fe1FRwQ87RBQEBSeA8kKg4JdQ9ySs+TI2+TKG+NKmLtc+f/48rr76akRGRuLzzz/Hvn37MG/ePDRv3rxuL9iLUI5NvNEwURCdKSoPdRdMkSQJJSUlIbl2XFycqXuefPvtt7j++utx8eJF980Bjx07hs6dO+PYsWPo2LGj5X286aabcNNNNwnbFRUV4f7778cbb7yB//u//9Ps37JlC+644w7ccsstAIBOnTrhgw8+wPbt+gF5aWkpPvroI3zyySe49tprAQCzZs3C//73P7z22mvua9x2222K41588UW89tpr2Lp1K3r16uW1vy6XC3/605/w73//G1FRUXj44Ycxa9Ys9/7rrrsOvXv3RkREBN577z306dMHjz76KF544QUcPnwYcXFxuOKKK/DJJ58gPj5e+PshIjJDqqpESXFxSK7dEMYmX8YQX8cZs9cG5C8V27dvjzfffNP9XOfOnYWvqz6NTQywiMirkpISNGnSJCTXLioqMvUGuGvXLvTo0UNx5/WdO3eiefPmXgewl156CS+99JLhefft24cOHTr43A89jz76KG655RaMGDFCd1AaNmwYlixZgoMHD+Lyyy/H7t278e2332L+/Pm656uqqoLT6dTcZT42Nhbffvut7jFOpxMrV65EcXExhg4datjft99+G2lpadi2bRsyMjIwceJEXH311fjNb36jaPPII4/gu+++Q05ODkaMGIG5c+fizjvvxMWLF/HNN98YTnEkIqqrkpJSNEnm2FTXscmXMaQu44yv1qxZg9TUVIwePRqbNm1Cu3bt8Ic//AFTpkwxPK4+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UVxc7G7z/fffK665YcMGAMDo0aMtfW0VFRWWno+IiIJDNDadP38eV199NSIjI/H5559j3759mDdvHpo3b+71nL6MZxyfZAywiEiouLjY66OsrMzntqWlpT61rautW7fihhtuQMuWLTXfnhUWFtb5vEYiIiKQkpLifiQlJSn2z58/H1OmTMGkSZPQs2dPLF68GHFxcVi6dKnu+datW4eJEyeiV69e6NevH9566y1kZ2cjMzPT3aZVq1aKa3766afo0qULhg8fbthXl8uFP/3pT2jRogVSUlIwa9Ysxf7rrrsOU6dOxZNPPomkpCSkpqYCAD788EP06dMHsbGxaNmyJUaMGOHX3xMRkRU4NnknGptefvlltG/fHm+++SauvPJKdO7cGTfeeCO6dOni9Zy+jGfBHJ/CeWxigEVEQk2aNPH6uPvuuxVtW7du7bXtTTfdpGjbqVMn3XZ1sXv3blx33XW44oor8M0332DdunVo0aIFbrjhBqxYsQIJCQmaY1566SXD19akSRNkZ2cbXvfQoUNo27YtLr30Utx///2K9hUVFcjMzMSIESPcz9ntdowYMQIZGRk+va6CggIAQIsWLXT3V1RU4L333sPkyZNhs9kMz/X2228jPj4e27Ztw9y5c/GXv/zF/e2iZ5uoqCh89913WLx4MU6fPo1x48Zh8uTJ+Omnn7Bx40bcddddkCTJp/4TEQUKxybvjMYmAFizZg0GDRqE0aNHo3Xr1rjiiivwxhtveD1fXcazQI5Ps2bNCuuxKSLUHSAissLjjz+Ou+66C3//+98BAD179sS4ceOQmZmJMWPG6B7z8MMPe91Xo23btl73DRkyBG+99Ra6deuG06dP44UXXsCvfvUr7N27F02bNsWZM2fgdDqRnJysOC45ORn79+8XviaXy4Unn3wSV199NXr37q3bZvXq1bhw4QImTpwoPF/fvn0xc+ZMAEDXrl2xcOFCpKen4ze/+Y27TdeuXTF37lz3dlZWFqqqqnDXXXehY8eOAIA+ffoIr0VEROE5NgHAzz//jNdeew1paWl49tln8f333+Pxxx9HVFQUJkyYoDlnXcazQI5PxcXFYT02McAiIqGioiKv+xwOh2Lb29oiQP62y9OxY8f86leN3NxcfPvtt9i0aZPi+fj4eMNvzVq0aOE1M+QLz289+/btiyFDhqBjx47473//i4ceeqjO563x6KOPYu/evZq5857+85//4KabbjIcbD376KlNmzaav6+BAwcqtvv164cbbrgBffr0QWpqKm688Ubcc889hvP0iYiCgWOTPl/GJpfLhUGDBuGll14CAFxxxRXYu3cvFi9erBtg1UUgx6dwH5s4RZCIhOLj470+YmJifG4bGxvrU1uzMjMz4XK50K9fP83zgwYN8nqcFdMwPDVr1gyXX345Dh8+DABISkqCw+FAbm6uol1ubi5SUlIMzzV16lR8+umn+Prrr3HJJZfotjl+/Di+/PJL/Pa3v/Wpf5GRkYptm80Gl8uleE79+3c4HNiwYQM+//xz9OzZE6+++iq6deuGo0eP+nRNIqJA4djkG/XYBMgBTM+ePRXtevTo4fW8ZsezQI9P4T42McAionqv5k3Yc3Hrnj17sHnzZtx3331ej3v44Yexa9cuw4cv37zVKCoqwpEjR9CmTRsAQFRUFAYOHIj09HRFX9PT0zF06FDdc0iShKlTp2LVqlX46quv0LlzZ6/Xe/PNN9G6dWvccsstPvexLmw2G66++mq88MIL2LlzJ6KiorBq1aqAXpOIqL4L17EJAK6++mrNLUAOHjzonm6nZnY8C8b4FM5jE6cIElG9N2TIEMTGxmLatGn485//jCNHjuDRRx/Fo48+iquuusrrcf5Ow/h//+//4bbbbkPHjh1x6tQpzJw5Ew6HA+PGjXO3SUtLw4QJEzBo0CBceeWVWLBgAYqLizFp0iQAwMKFC7Fq1Sr3oPXoo49i2bJl+OSTT9C0aVPk5OQAABITExXfsrpcLrz55puYMGECIiIC91a+bds2pKen48Ybb0Tr1q2xbds25Ofno0ePHgG7JhFRQxDOY9NTTz2FYcOG4aWXXsKYMWOwfft2LFmyBEuWLAGgHZsA8XhWIxjjU7iPTQywiKjea9WqFf773//ij3/8I/r27YsOHTpg6tSpSEtLC+h1f/nlF4wbNw5nz55Fq1atcM0112Dr1q1o1aqVu83YsWORn5+PGTNmICcnB/3798e6devcC4XPnDmDI0eOuNu/9tprAOSStJ7efPNNxULhL7/8EtnZ2Zg8eXLgXiCAhIQEbN68GQsWLEBhYSE6duyIefPmaapuERGRUjiPTYMHD8aqVaswffp0/OUvf0Hnzp2xYMEC3H///QC0YxMgHs9qBGN8CvexySaFSz3DMFNYWIjExEQUFBToltCkxqu4uNhdrrWoqMinedmdnvnM/fOxvwZ2Opc/ysrKcPToUXTu3Fkzf53ISkb/1sLl/XfRokX429/+hpycHPTr1w+vvvoqrrzySq/tV65cieeffx7Hjh1D165d8fLLL+Pmm29WtPnpp5/w9NNPY9OmTaiqqkLPnj3x0UcfoUOHDj71KVx+N0Rm1WXsrOF+v4gvRUyEDYiMB1pdHqiuUiNm1djENVhEREQqK1asQFpaGmbOnImsrCz069cPqampXiuRbdmyBePGjcNDDz2EnTt3YtSoURg1ahT27t3rbnPkyBFcc8016N69OzZu3Ig9e/bg+eef55cZREQNDAMsIiIilfnz52PKlCmYNGkSevbsicWLFyMuLg5Lly7Vbf/KK69g5MiRmDZtGnr06IHZs2djwIABWLhwobvNn//8Z9x8882YO3currjiCnTp0gW33347WrduHayXRUREQcAAi4iIyENFRQUyMzMxYsQI93N2ux0jRoxARkaG7jEZGRmK9gCQmprqbu9yufDZZ5/h8ssvR2pqKlq3bo0hQ4Zg9erVhn0pLy9HYWGh4kFEROGNARYREZGHM2fOwOl0ahZuJycnu6s6quXk5Bi2z8vLQ1FREf76179i5MiR+OKLL3DnnXfirrvu0tyE1NOcOXOQmJjofrRv397PV0dERIEWFgHWokWL0KlTJ8TExGDIkCHYvn27YfuVK1eie/fuiImJQZ8+fbB27VrF/qKiIkydOhWXXHIJYmNj3dM7iMg3rH1DgdbY/o3V3A/njjvuwFNPPYX+/fvjmWeewa233mo4Pk2fPh0FBQXux4kTJ4LVZaKw08jeNigErBqbQh5gBWIhcVpaGtatW4f33nsPP/30E5588klMnToVa9asCdbLIqqXau6kXlJSEuKeUENXUVEBAHA4HCHuiVZSUhIcDgdyc3MVz+fm5iIlJUX3mJSUFMP2SUlJiIiIQM+ePRVtevTogezsbK99iY6ORkJCguJB1NjUvE9UuELcEWrwaj7/1HweqquQ3wfLcyExACxevBifffYZli5dimeeeUbT3nMhMQDMnj0bGzZswMKFC93fAm7ZsgUTJkxw30fmd7/7HV5//XVs374dt99+e3BeGFE95HA40KxZM/cXHHFxcbDZbCHuFTU0LpcL+fn5iIuLC+hNkusqKioKAwcORHp6OkaNGgVA7nN6ejqmTp2qe8zQoUORnp6OJ5980v3chg0bMHToUPc5Bw8ejAMHDiiOO3jwIDp27BiQ10HUUERERCAuLg75588jsnkM7HACZWWh7hY1IJIkoaSkBHl5eWjWrJnfX/6FdGSrWUg8ffp093O+LCRW36AtNTVVsVB42LBhWLNmDSZPnoy2bdti48aNOHjwIP7xj3947Ut5eTnKy8vd21xITI1VzTfu3rLIRFaw2+3o0KFD2AbwaWlpmDBhAgYNGoQrr7wSCxYsQHFxsfvLwPHjx6Ndu3aYM2cOAOCJJ57A8OHDMW/ePNxyyy1Yvnw5duzYgSVLlrjPOW3aNIwdOxbXXnstrr/+eqxbtw7/+9//sHHjxlC8RKJ6w2azoU2bNjh65DscL20BRMQABaHuFTVEzZo18zpTwYyQBlhGC4n379+ve4xoITEAvPrqq/jd736HSy65BBEREbDb7XjjjTdw7bXXeu3LnDlz8MILL/jxaogahpqBrHXr1qisrAx1d6iBioqKgt0e8lnqXo0dOxb5+fmYMWMGcnJy0L9/f6xbt849/mRnZyv6P2zYMCxbtgzPPfccnn32WXTt2hWrV69G79693W3uvPNOLF68GHPmzMHjjz+Obt264aOPPsI111wT9NdHVN9ERUWh6zePoSK2NdB2AHDPf0LdJWpgIiMjLZu2Hn5zMyzw6quvYuvWrVizZg06duyIzZs349FHH0Xbtm01ZXRrTJ8+XZEZKywsZLUmatQcDkdYro8hCpapU6d6nRKol3UaPXo0Ro8ebXjOyZMnY/LkyVZ0j6jRsUtViCk5BZS3B3iDbgpjIQ2wArGQuLS0FM8++yxWrVqFW265BQDQt29f7Nq1C3//+9+9BljR0dGIjo729yUREREREVEjFtL5GZ4LiWvULCSuWRisVrOQ2JPnQuLKykpUVlZqpp44HA53mVwiIiIiIqJACPkUQasXEickJGD48OGYNm0aYmNj0bFjR2zatAnvvPMO5s+fH7LXSUREREREDV/IA6xALCRevnw5pk+fjvvvvx/nzp1Dx44d8eKLL+Lhhx8O+usjIiIiIgvxjsMU5kIeYAHWLyROSUnBm2++aVX3iIiIiIiIfBK+NXKJiIiIiNTC9P55RDUYYBEREREREVmEARYREREREZFFGGARERERUf3BIhcU5hhgERERERERWYQBFhERERHVHyxyQWGOARYREREREZFFGGARERERERFZhAEWERERERGRRRhgERERERERWYQBFhERERERkUUYYBEREREREVmEARYREREREZFFGGARERERERFZhAEWERERERGRRRhgEREREVH9IUmh7gGRIQZYREREREREFmGARURERET1h80W6h4QGWKARUREREREZBEGWERERERERBZhgEXkh6P5RbrP78w+j/FLt+Ng7sUg94iIiIiIQokBFpEfHvtgp+7zd/5rCzYfzMfEpduD3CMiIiIiCiUGWER+yCkoM9x/SrCfiIiIiBoWBlhEREREREQWYYBFRERERERkEQZYREREREREFmGARUREREREZBEGWERERERUf0hSqHtAZIgBFhERERERkUUYYBERERFR/WGzhboHRIYYYBEREREREVmEARYREREREZFFGGARERERUf3BIhcU5hhgERERERERWYQBFhERERHVHyxyQWGOARYREREREZFFGGARERHpWLRoETp16oSYmBgMGTIE27dvN2y/cuVKdO/eHTExMejTpw/Wrl2r2D9x4kTYbDbFY+TIkYF8CUREFAIMsIiIiFRWrFiBtLQ0zJw5E1lZWejXrx9SU1ORl5en237Lli0YN24cHnroIezcuROjRo3CqFGjsHfvXkW7kSNH4vTp0+7HBx98EIyXQ0REQcQAi4iISGX+/PmYMmUKJk2ahJ49e2Lx4sWIi4vD0qVLddu/8sorGDlyJKZNm4YePXpg9uzZGDBgABYuXKhoFx0djZSUFPejefPmwXg5REQURAywiIiIPFRUVCAzMxMjRoxwP2e32zFixAhkZGToHpORkaFoDwCpqama9hs3bkTr1q3RrVs3PPLIIzh79qxhX8rLy1FYWKh4EDV6LNNOYY4BFhERkYczZ87A6XQiOTlZ8XxycjJycnJ0j8nJyRG2HzlyJN555x2kp6fj5ZdfxqZNm3DTTTfB6XR67cucOXOQmJjofrRv396PV0ZERMEQEeoOEBERNQb33nuv++c+ffqgb9++6NKlCzZu3IgbbrhB95jp06cjLS3NvV1YWMggi4hl2inMMYNFRETkISkpCQ6HA7m5uYrnc3NzkZKSontMSkqKqfYAcOmllyIpKQmHDx/22iY6OhoJCQmKBxERhTcGWERERB6ioqIwcOBApKenu59zuVxIT0/H0KFDdY8ZOnSooj0AbNiwwWt7APjll19w9uxZtGnTxpqOExFRWGCARUREpJKWloY33ngDb7/9Nn766Sc88sgjKC4uxqRJkwAA48ePx/Tp093tn3jiCaxbtw7z5s3D/v37MWvWLOzYsQNTp04FABQVFWHatGnYunUrjh07hvT0dNxxxx247LLLkJqaGpLXSFRvscgFhTmuwSIiIlIZO3Ys8vPzMWPGDOTk5KB///5Yt26du5BFdnY27Pba7yiHDRuGZcuW4bnnnsOzzz6Lrl27YvXq1ejduzcAwOFwYM+ePXj77bdx4cIFtG3bFjfeeCNmz56N6OjokLxGIiIKDAZYREREOqZOnerOQKlt3LhR89zo0aMxevRo3faxsbFYv369ld0jarxY5ILCHKcIEhERERERWYQBFhERERERkUUYYBERERFR/cEiFxTmGGARERERkdbO94EP7gMqSkLdE6J6hQEWEREREWl98gfgwGfAtsWh7okSi1xQmGOARURERETelV0IdQ+I6hUGWERERERERBZhgEVERERERGQRBlhEREREREQWYYBFRERERPUHy7RTmGOARUREREREZBEGWERERERUf7BMO4U5BlhEREREREQWYYBFRERERERkEQZYRERERFR/sMgFhTkGWERERERERBZhgEVERERE9QeLXFCYY4BFRERERERkEQZYREREREREFgmLAGvRokXo1KkTYmJiMGTIEGzfvt2w/cqVK9G9e3fExMSgT58+WLt2rabNTz/9hNtvvx2JiYmIj4/H4MGDkZ2dHaiXQERERETBwCIXFOZCHmCtWLECaWlpmDlzJrKystCvXz+kpqYiLy9Pt/2WLVswbtw4PPTQQ9i5cydGjRqFUaNGYe/eve42R44cwTXXXIPu3btj48aN2LNnD55//nnExMQE62UREREREVEjFPIAa/78+ZgyZQomTZqEnj17YvHixYiLi8PSpUt127/yyisYOXIkpk2bhh49emD27NkYMGAAFi5c6G7z5z//GTfffDPmzp2LK664Al26dMHtt9+O1q1bB+tlERERERFRIxTSAKuiogKZmZkYMWKE+zm73Y4RI0YgIyND95iMjAxFewBITU11t3e5XPjss89w+eWXIzU1Fa1bt8aQIUOwevVqw76Ul5ejsLBQ8SAiIiIiIjIjpAHWmTNn4HQ6kZycrHg+OTkZOTk5usfk5OQYts/Ly0NRURH++te/YuTIkfjiiy9w55134q677sKmTZu89mXOnDlITEx0P9q3b+/nqyMiIiIiy7FMO4W5kE8RtJrL5QIA3HHHHXjqqafQv39/PPPMM7j11luxePFir8dNnz4dBQUF7seJEyeC1WUiIiIiImogIkJ58aSkJDgcDuTm5iqez83NRUpKiu4xKSkphu2TkpIQERGBnj17Ktr06NED3377rde+REdHIzo6ui4vg4iIiIiICECIM1hRUVEYOHAg0tPT3c+5XC6kp6dj6NChuscMHTpU0R4ANmzY4G4fFRWFwYMH48CBA4o2Bw8eRMeOHS1+BUREREQUVCzTTmEupBksAEhLS8OECRMwaNAgXHnllViwYAGKi4sxadIkAMD48ePRrl07zJkzBwDwxBNPYPjw4Zg3bx5uueUWLF++HDt27MCSJUvc55w2bRrGjh2La6+9Ftdffz3WrVuH//3vf9i4cWMoXiIRERERETUSIQ+wxo4di/z8fMyYMQM5OTno378/1q1b5y5kkZ2dDbu9NtE2bNgwLFu2DM899xyeffZZdO3aFatXr0bv3r3dbe68804sXrwYc+bMweOPP45u3brho48+wjXXXBP010dERETUKO39GNizArjzdQCRtc+XnAPi4+t+Xha5oDAX8gALAKZOnYqpU6fq7tPLOo0ePRqjR482POfkyZMxefJkK7pHRERERGZ9KM9GwqaXgV89V/v8prnAPa+Gpk9EQdDgqggSERERURgpOavaPhOafhAFCQMsIiIiIqo/WOSCwhwDLCIiIiIiIoswwCIiIiKi+oNFLijMMcAiIiIiIiKyCAMsIiIiIiIiizDAIiIiIqLw5lnYgkUuKMwxwCIiIiKiwGFARI0MAywiIiIiCm8M0qgeYYBFRERERIHDqn/UyDDAIiIiIqIw55HBYsBGYY4BFhERkY5FixahU6dOiImJwZAhQ7B9+3bD9itXrkT37t0RExODPn36YO3atV7bPvzww7DZbFiwYIHFvSYiolBjgEVERKSyYsUKpKWlYebMmcjKykK/fv2QmpqKvLw83fZbtmzBuHHj8NBDD2Hnzp0YNWoURo0ahb1792rarlq1Clu3bkXbtm0D/TKIGg6uwaJ6hAEW1Qvrf8zBpDe340xReUiuv/3oOYxfuh3HzhTr7s88fh7jl27H4byi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", "text/plain": [ "
" ] }, "execution_count": 160, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# TASK: Since the direct estimations of the conditional probabilities p(t|y=0) and p(t|y=1) have \n", "# a lot of missing values we want to fit gaussian distributions instead. The two functions \n", "# below should be implemented to return the probability density value for these fitted gaussian \n", "# distributions for any continuous value of t.\n", "\n", "def gaussian(x, mu, sig):\n", " return 1./(np.sqrt(2.*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)\n", "\n", "\n", "def gauss_y0(t: float) -> float:\n", " data = p_t_y0#[p_t_y0 != 0] \n", " loc = ts#[p_t_y0 != 0]\n", " from scipy.optimize import curve_fit\n", " coeff, var_matrix = curve_fit(gaussian, loc, data, p0=(100,30))\n", " return gaussian(t, *coeff)\n", " \n", "def gauss_y1(t: float) -> float:\n", " data = p_t_y1#[p_t_y1 != 0] \n", " loc = ts#[p_t_y1 != 0]\n", " from scipy.optimize import curve_fit\n", " \n", " coeff, var_matrix = curve_fit(gaussian, loc, data, p0=(100,30))\n", " return gaussian(t, *coeff)\n", " \n", " \n", "fig = copy.deepcopy(fig_t_y)\n", "ax_y0, ax_y1 = fig.get_axes()\n", " \n", "# p(t | y=unqualified)\n", "values_y0 = [gauss_y0(t) for t in ts]\n", "ax_y0.plot(ts, values_y0, color='blue')\n", "ax_y0.fill_between(ts, values_y0, color='blue')\n", "\n", "avg_y0, _ = quad(lambda t: t * gauss_y0(t), -np.inf, np.inf)\n", "var_y0, _ = quad(lambda t: (t - avg_y0)**2 * gauss_y0(t), -np.inf, np.inf)\n", "std_y0 = np.sqrt(var_y0)\n", "\n", "ax_y0.axvline(avg_y0, label=r'$\\mu$' + f' = {avg_y0:.2f} hrs', color='black', ls='-', zorder=10)\n", "ax_y0.hlines(np.mean(ax_y0.get_ylim()), avg_y0 - std_y0, avg_y0 + std_y0, \n", " label=r'$\\sigma$' + f' = {std_y0:.2f} hrs', color='black', ls='--')\n", "#ax_y0.axvline(np.mean(df['hours_study']))\n", "ax_y0.legend(loc='upper right')\n", "ax_y0.set_title(r'$P(t\\;|\\;y=\\mathrm{unqualified})$')\n", "\n", "# p(t | y=qualified)\n", "values_y1 = [gauss_y1(t) for t in ts]\n", "ax_y1.plot(ts, values_y1, color='red')\n", "ax_y1.fill_between(ts, values_y1, color='red')\n", "\n", "avg_y1, _ = quad(lambda t: t * gauss_y1(t), -np.inf, np.inf)\n", "var_y1, _ = quad(lambda t: (t - avg_y1)**2 * gauss_y1(t), -np.inf, np.inf)\n", "std_y1 = np.sqrt(var_y1)\n", "\n", "ax_y1.axvline(avg_y1, label=r'$\\mu$' + f' = {avg_y1:.2f} hrs', color='black', ls='-')\n", "ax_y1.hlines(np.mean(ax_y1.get_ylim()), avg_y1 - std_y1, avg_y1 + std_y1, \n", " label=r'$\\sigma$' + f' = {std_y1:.2f} hrs', color='black', ls='--')\n", "ax_y1.legend(loc='upper right')\n", "\n", "\n", "fig" ] }, { "cell_type": "code", "execution_count": 161, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "6f700e6438c2c54101ccdd0f499d1d0b", "grade": true, "grade_id": "test-5-10-curve-fitting", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-10-curve-fitting - possible points: 2\n", "\n", "assert callable(gauss_y0), 'solution must be callable function'\n", "assert np.isclose(quad(gauss_y0, -1000, 1000)[0], 1.0), 'not a proper probability density function'\n", "value_y0 = gauss_y0(200)\n", "assert 0.005 > value_y0 > 0.002, 'fitted function likely incorrect'\n", "\n", "assert callable(gauss_y1), 'solution must be callable function'\n", "assert np.isclose(quad(gauss_y1, -1000, 1000)[0], 1.0), 'not a proper probability density function'\n", "value_y1 = gauss_y1(200)\n", "assert 0.008 > value_y1 > 0.004, 'fitted function likely incorrect'\n", "\n", "# NOTE: The hidden tests will evaluate the statistical attributes of the fitted gaussian distributions \n", "# (mean and standard deviation) and will compare them to the expected values with a tolerance \n", "# of 2 decimals.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "efdb71fa0cabfeb2e034d8982b830ca2", "grade": false, "grade_id": "cell-d20627b99ea7be54", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "From these results we can see that the groups of \"qualified\" and \"unqualified\" students seem to slightly differ in their studying behavior. On average, an unqualified students spents about ~40 hours less studying. Additionally, the highest reported study time in the group of unqualified students is ~270 hours while for the qualified students this is ~350. Generally, these results support the inuitive interpretation that the longer a student studies, the higher the chance that they obtain the necessary qualifications.\n", "\n", "In the next section, we can use statistical differences like these to not only analyze past data but to build a predictor model for future data points as well." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "88febf9449f3e836fd59497bf1202bc4", "grade": false, "grade_id": "cell-35ea3e838e87e13c", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "## 5.3 Naive Bayes Estimator\n", "\n", "At the end of the previous section, we've established that amongst the two groups / \"classes\" of students we can find differences regarding their statistical properties. In this section, we want to use these insights not only analyze past data, but to build an *estimator* model for future data.\n", "\n", "**Predicting exam outcomes.** Previously, we investigated the question of a student's true qualifications $y = \\{\\mathrm{qualified}, \\mathrm{unqualified} \\}$. Arguably, while this is an important question from the perspective of a *professor*, a *student* likely cares more about simply passing the exam. Therefore, we'll try to build a model which predicts $x = \\{ \\mathrm{pass}, \\mathrm{fail} \\}$ whether a student will pass or fail based on previously available information, such as the number of hours spent studying, the points of the exercise and lecture attendence.\n", "\n", "**Naive Bayes estimation.** There are various different machine learning methods available to solve the aforementioned classification task, but the one which we'll be focusing on is a [Naive Bayes Classifier](https://en.wikipedia.org/wiki/Naive_Bayes_classifier). To understand the Naive Bayes classifier, we can assume a generic classification problem with $k$ possible classes $C_k$. To make this classification, we have a concrete vector of observations $\\mathbf{x} = [x_1 \\; x_2 \\; x_3]$. We can pose the classification problem as a probabilistic problem in which we want to find the conditional probability\n", "\n", "$$\n", "p(C_k \\;|\\; \\mathbf{x}) = p(C_k \\;|\\; x_1,x_2,x_3)\n", "$$\n", "\n", "of classifying as $C_k$ when having observed $\\mathbf{x}$. Given these probabilities, we can then determine the predicted class\n", "\n", "$$\n", "k_{\\mathrm{pred}} = \\mathrm{argmax}_{k} p(C_k \\;|\\; \\mathbf{x})\n", "$$\n", "\n", "as the one with the highest probability given the specific observation $\\mathbf{x}$. To determine this conditional probability $p(C_k \\;|\\; \\mathbf{x})$ we can apply *Bayes Rule*:\n", "\n", "$$\n", "p(C_k \\;|\\; \\mathbf{x}) = \\frac{p(C_k) p(\\mathbf{x} \\;|\\; C_k)}{p(\\mathbf{x})}\n", "$$\n", "\n", "To determine the argmax we can furthermore drop the denominator $p(\\mathbf{x})$ of this expression as it is the same value for all the different classes with respect to the same observation. Usually, the term $p(\\mathbf{x} \\;|\\; C_k)$ would be a complex expression which would not only have to take into account the conditional independence of each observation regarding the class but also the interdependence between the observations. This is where the *naive* part of the method comes into play: We will simply assume that all the features of our observation $\\mathbf{x}$ are themselves mutually *independent* of each other. Under this assumption, the term can be simplified like this:\n", "\n", "$$\n", "p(C_k \\;|\\; \\mathbf{x}) \\sim p(C_k) \\cdot p(x_1 \\;|\\; C_k) \\cdot p(x_2 \\;|\\; C_k) \\cdot p(x_3 \\;|\\; C_k)\n", "$$\n", "\n", "In the end, this formula only requires the prior proabilitiy $p(C_k)$ of each class and the independent conditional probability of each individual observation. \n", "\n", "---\n", "\n", "For a more in-depth understanding of the Naive Bayes Classifier, you can watch the following two videos which explain the topic in more detail:\n", "\n", "- [Naive Bayes, Clearly Explained](https://www.youtube.com/watch?v=O2L2Uv9pdDA)\n", "- [Gaussian Naive Bayes, Clearly Explained](https://www.youtube.com/watch?v=H3EjCKtlVog)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "fa249653fc9e23aeb754d3bb3fede5fc", "grade": false, "grade_id": "cell-5bfc053b0d4ac9d4", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "from IPython.display import YouTubeVideo\n", "YouTubeVideo('O2L2Uv9pdDA', width=800, height=500)\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "6eb0100f6bd92e8d276946fce7ce55a4", "grade": false, "grade_id": "cell-92c65f39f15247bf", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "from IPython.display import YouTubeVideo\n", "YouTubeVideo('H3EjCKtlVog', width=800, height=500)\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "0e45509a83dff45bd51dc9797be87b1e", "grade": false, "grade_id": "cell-db46dbd0af1170a3", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**Types of observations.** There are basically two different types of observations on which the NaiveBayes estimator can base its predictions: *continuous* and *categorical* variables. In our example of predicting the exam outcome, we can use the students' other survey questions as observations. An example for a continuous observation is the number of hours spent studying - theoretically, a student might answer with any real number and there is a continuous sprectrum of possible answers. A categorical observation on the other hand only has a discrete set of possible answers. The question of whether a student has regularly attended the lectures or not, for example, can only be answered with either \"yes\" or \"no\". For the implementation of the NaiveBayes classifier, both of these will have to be treated differently. However, in both cases we want to obtain some function $p(\\mathbf{x} \\;|\\; C_k)$ that returns the likelihood for an observation $x$.\n", "\n", "**Gaussian fitting for continuous data.** For continuous observations, we want to model this likelihood by fitting the parameters of a guassian distribution to approximately model the probability density function of the observation variable. More specifically, we want to fit a *family* of multiple gaussian distributions to model the conditional probabilities for each possible target class separately. Given $K$ possible classes, we need to fit exactly $K$ different gaussion distributions $p(\\mathbf{x} \\;|\\; C_k) \\sim \\mathcal{N}(\\mu_k, \\sigma_k)$." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "66814dfb94882c04b8fa32b4e0cf16aa", "grade": false, "grade_id": "cell-417b1f5ed0b040c6", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.11 (4 points)** For this task, you'll have to implement a function ``fit_gaussian``, which given a dataset of observations and corresponding target classes, fits a family of gaussian distributions $p(\\mathbf{x} \\;|\\; C_k)$. Specifically, this function is itself supposed to return a function ``p(x: float, y: int) -> float`` which implements this conditional probability density function for a specific continuous observation value ``x`` and a target class ``y``." ] }, { "cell_type": "code", "execution_count": 188, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "b7de039e68edde5ab7054301392aa0ea", "grade": false, "grade_id": "cell-08ca74ce77d2b306", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "import typing as t\n", "\n", "# TASK: This function accepts two arrays which constitute a dataset on which to fit the gaussian\n", "# distributions. The first array \"xs\" contains the continuous / float observations and the \n", "# second array \"ys\" contains the targets for the conditioning. The function should then \n", "# return another function p(x, y) which outputs the probability DENSITY value p(x) of a \n", "# gaussian distribution - but a different one depending on the value of the second parameter \n", "# y.\n", "\n", "# HINT: You can simply define a local function inside of another function by using the \"def\"\n", "# statement and then return that local function.\n", "\n", "# HINT: First think about how to generically obtain all the possible target values that appear\n", "# throughout the target array \"ys\". The final function p(x, y) must implement a different \n", "# gaussian for all of them. \n", "\n", "def fit_gaussian(xs: np.ndarray,\n", " ys: np.ndarray,\n", " ) -> t.Callable[[float, int], float]:\n", " \"\"\"\n", " This function is supposed to fit a family of conditional gaussiain probabilitiy density functions\n", " based on a given array observations ``xs`` of shape (num_elements, ) and a given array of the associated \n", " categorical (integer) targets ``ys`` of the shape (num_elements, ).\n", " \n", " This function should itself return a function ``p(x: float, y: int) -> float`` which receives the \n", " observation value x as the first parameter and the target value y as the second parameter and the \n", " function should implement the evaluation of the conditional gaussion p(x|y) for the \n", " given combination.\n", " \n", " :param xs: array of shape (num_elements, ) - continuous / float observations\n", " :param ys: array of shape (num_elements, ) - categorical / integer targets\n", " \n", " :returns: callable function p(x|y)\n", " \"\"\"\n", " \n", " import sklearn.mixture\n", " gmm = sklearn.mixture.GaussianMixture()\n", " \n", " def gaussian(x, mu, sig):\n", " return 1./(np.sqrt(2.*np.pi)*sig)*np.exp(-np.power((x - mu)/sig, 2.)/2)\n", "\n", " \n", " cat = {}\n", "\n", " for i in np.unique(ys):\n", " loc = xs[ys == i]\n", " r = gmm.fit(loc[:, np.newaxis])\n", " cat[i] = r.means_[0, 0], r.covariances_[0, 0][0]\n", " #print(cat)\n", " \n", " return lambda x, i: 1./(np.sqrt(2.*np.pi)*cat[i][1])*np.exp(-np.power((x - cat[i][0])/cat[i][1], 2.)/2)\n", "\n" ] }, { "cell_type": "code", "execution_count": 189, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "51784291858bd04824ed6a5e71fda496", "grade": true, "grade_id": "test-5-11-gaussian-fit", "locked": true, "points": 4, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-11-gaussian-fit - possible points: 4\n", "\n", "\n", "xs = np.array([1, 2, 3, 3, 4], dtype=float)\n", "ys = np.array([0, 0, 0, 1, 1], dtype=int)\n", "\n", "p = fit_gaussian(xs, ys)\n", "assert callable(p), 'fit is not a callable function'\n", "assert isinstance(p(0, 0), float), 'function output is not a float'\n", "p_int, _ = quad(lambda x: p(x, 0), -100, 100) # integral over the whole distribution\n", "assert np.isclose(p_int, 1.0), 'fitted function not a proper density function'\n", "p_mean, _ = quad(lambda x: x * p(x, 0), -100, 100) # mean value for the distribution (1.moment)\n", "assert np.isclose(p_mean, 2.0), 'gaussian has incorrect mean value'\n", "\n", "# NOTE: The hidden tests will perform similar tests, but for a more complex example, which \n", "# includes >2 possible target values.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "570a0d293059ca5856f7966c19bf947f", "grade": false, "grade_id": "cell-0ee4d8594d48e9da", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**Categorical fit.** Categorical observations are the alternative to continuous observations. A categorical observation only has a discrete set of possible values that can possibly be observed. Therefore, the categorical fit is much easier to model since, ony only has to determine a single probability value for all possible combinations of of discrete target and observation values." ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "ce12e199d0a5af876db9439993de1b61", "grade": false, "grade_id": "cell-ec0cec4f10bd78d6", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.12 (4 points)** For this task, you'll have to implement a function ``fit_categorical``, which given a dataset of observations and corresponding target classes, fits a family of conditional probability values $p(\\mathbf{x} \\;|\\; C_k)$. Specifically, this function is itself supposed to return a function ``p(x: int, y: int) -> float`` which implements this conditional probability density function for a specific discrete observation value ``x`` and a discrete target class ``y``." ] }, { "cell_type": "code", "execution_count": 192, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "f73aaa75962322c9c8a969f2dc71a61d", "grade": false, "grade_id": "cell-914053ae87f91bae", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "# TASK: This function accepts two arrays which constitute a dataset on which to fit the gaussian\n", "# distributions. The first array \"xs\" contains the continuous / float observations and the \n", "# second array \"ys\" contains the targets for the conditioning. The function should then \n", "# return another function p(x, y) which outputs the probability DENSITY value p(x) of a \n", "# gaussian distribution - but a different one depending on the value of the second parameter \n", "# y.\n", "\n", "# HINT: You can simply define a local function inside of another function by using the \"def\"\n", "# statement and then return that local function.\n", "\n", "# HINT: First think about how to generically obtain all the possible discrete values that appear\n", "# throughout the target array \"ys\" and the observation array \"xs\". The fitted function \n", "# p(x, y) has to return a distinct value for every possible pairwise combination!\n", "\n", "\n", "def fit_categorical(xs: np.ndarray,\n", " ys: np.ndarray,\n", " ) -> t.Callable[[int], float]:\n", " \"\"\"\n", " This function is supposed to fit a family of conditional probability values \n", " based on a given array observations ``xs`` of shape (num_elements, ) and a given array of the associated \n", " categorical (integer) targets ``ys`` of the shape (num_elements, ).\n", " \n", " This function should itself return a function ``p(x: float, y: int) -> float`` which receives the \n", " observation value x as the first parameter and the target value y as the second parameter and the \n", " function should implement the evaluation of the conditional gaussion p(x|y) for the \n", " given combination.\n", " \n", " :param xs: array of shape (num_elements, ) - categorical / integer observations\n", " :param ys: array of shape (num_elements, ) - categorical / integer targets\n", " \n", " :returns: callable function p(x|y)\n", " \n", " \"\"\"\n", "\n", " return lambda x,y: sum(xs[ys==y]==x)/sum(ys==y)\n" ] }, { "cell_type": "code", "execution_count": 193, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "14b7f7e7930e2a3f57dcbdb498d4c7e2", "grade": true, "grade_id": "test-5-12-categorical-fit", "locked": true, "points": 4, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-12-categorical-fit - possible points: 4\n", "\n", "\n", "xs = np.array([0, 0, 0, 1, 0, 0, 1, 1], dtype=int)\n", "ys = np.array([0, 0, 0, 0, 1, 1, 1, 1], dtype=int)\n", "\n", "p = fit_categorical(xs, ys)\n", "assert callable(p), 'fit is not a callable function'\n", "assert isinstance(p(0, 0), float), 'function output is not a float'\n", "p_sum = p(0, 0) + p(1, 0)\n", "assert np.isclose(p_sum, 1.0), 'fitted function not a proper density function - must add to 1'\n", "assert np.isclose(p(1, 0), 0.25)\n", "\n", "\n", "# NOTE: The hidden tests will perform similar tests, but for a more complex example, which \n", "# includes >2 possible target values and observations.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "code", "execution_count": 194, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "54cd88a0d47a5a573246b5e71b3763c2", "grade": false, "grade_id": "cell-1bd512e3e592e3b9", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# NOTE: You will have to understand, but not modify the content of this cell!\n", "\n", "\n", "class NaiveBayesClassifier:\n", " \"\"\"\n", " Custom implementation of a Naive Bayes classifier.\n", " \"\"\"\n", " \n", " # :const CONTINUOUS: The constant string literal that can be used as a value in the ``observation_types`` \n", " # dictionary to indicate a continuous / float observation.\n", " CONTINUOUS: str = 'continuous'\n", " \n", " # :const CATEGORICAL: The constant string literal that can be used as a value in the ``observation_types`` \n", " # dictionary to indicate a categorical / integer observation.\n", " CATEGORICAL: str = 'categorical'\n", " \n", " def __init__(self, \n", " num_targets: int,\n", " observation_types: dict[int, str],\n", " ) -> None:\n", " \"\"\"\n", " :param num_targets: The number of targets to be predicted.\n", " :param observation_type: A dict whose keys are the integer indices of the observations and \n", " the values is either of the string literals \"continuous\" or \"categorical\" which \n", " indicate whether the corresponding observation is a continuous random variable \n", " (requires gaussian fit) or a categorical random variable (requires categorical fit)\n", " \"\"\"\n", " self.num_targets = num_targets\n", " # This list contains the target indices aka the possible target values / classes.\n", " self.target_indices: list[int] = np.arange(num_targets)\n", " \n", " # The keys of this dict are the integer indices of the observations within the \n", " # observation vectors and the values are string literals which identify whether that \n", " # corresponding observation is continuous (needing gaussian fit) or categorical \n", " # (needing categorical fit).\n", " self.observation_types: dict[int, str] = observation_types\n", " # This list contains the observation indices that will be considered by the \n", " # model.\n", " self.observation_indices: list[int] = list(observation_types.keys())\n", " \n", " # During the fit process this dictionary will be populated, where the \n", " # integers are the observation indices and the values are the corrsponding \n", " # conditional probability functions p(x|y).\n", " self.observation_funcs: dict[int, t.Callable] = {}\n", " \n", " # During the fit process this dict will be populated, where the keys are the \n", " # target keys and the values are the prior probabilities of the targets\n", " self.target_priors: dict[int, float] = {}\n", " \n", " def fit(self, xs: np.ndarray, ys: np.ndarray) -> None:\n", " \"\"\"\n", " fits the model for the given observations ``xs`` of shape (num_elements, num_observations) \n", " and the corresponding target classes ``ys`` of shape (num_elements, ).\n", " \n", " :param xs: The list of observation vectors with shape (num_elements, num_observations)\n", " :param ys: The list of target classes with shape (num_elements, )\n", " \n", " :returns: None\n", " \"\"\"\n", " # x: (num_elements, num_attributes)\n", " # y: (num_elements, num_targets)\n", " \n", " # ~ fitting the prior target probabilities\n", " for target_index in self.target_indices:\n", " self.target_priors[target_index] = len([y for y in ys if y == target_index]) / len(ys)\n", " \n", " # ~ fitting the conditional probability densities\n", " for observation_index, observation_type in self.observation_types.items():\n", " \n", " if observation_type == 'categorical':\n", " func = self.fit_categorical(xs[:, observation_index], ys)\n", " elif observation_type == 'continuous':\n", " func = self.fit_gaussian(xs[:, observation_index], ys)\n", " \n", " self.observation_funcs[observation_index] = func\n", " \n", " def fit_gaussian(self, xs: np.ndarray, ys: np.ndarray) -> t.Callable[[float, int], float]:\n", " return fit_gaussian(xs, ys)\n", " \n", " def fit_categorical(self, xs: np.ndarray, ys: np.ndarray) -> t.Callable[[int, int], float]:\n", " return fit_categorical(xs, ys)\n", " \n", " def predict_single(self, x: np.ndarray) -> int:\n", " \"\"\"\n", " performs a single prediction based on the given vector of observations ``x`` with the shape \n", " (num_observations, ). Method returns the integer index of the predicted target class.\n", " \n", " :param x: observation array of shape (num_observations, )\n", " \n", " :returns: integer target index\n", " \"\"\"\n", " assert len(x.shape) == 1, 'observation array needs to have shape (num_observations, )!'\n", " num_observations = x.shape[0]\n", " \n", " # In this dictionary we will store the accumulated likelihoods corresponding to the different \n", " # target values. The keys of this dict are the target indices and the values are the \n", " # corresponding likelihoods that have been calculated according to bayes rule.\n", " target_ps: dict[int, float] = defaultdict(int)\n", " \n", " # log likelihoods:\n", " # Instead of multiplicatively accumulating the raw likelihood values in the range [0, 1] \n", " # we will actually additively accumulate the log likelihoods. This does not make a difference \n", " # for the argmax computation.\n", " for target_index in self.target_indices:\n", " target_ps[target_index] = np.log(self.target_priors[target_index])\n", " \n", " for observation_index in range(num_observations):\n", " func = self.observation_funcs[observation_index]\n", " p = func(float(x[observation_index]), float(target_index)) + 1e-6\n", " log_p = np.log(p)\n", " target_ps[target_index] += log_p\n", " \n", " return max(self.target_indices, key=lambda i: target_ps[i])\n", " \n", " def predict(self, xs: np.ndarray) -> np.ndarray:\n", " \"\"\"\n", " performs multiple predictions for all of the elements contained in the given array \n", " of observations ``xs``.\n", " \n", " :param xs: An array of the shape (num_elements, num_observations)\n", " \n", " :returns: The array of the resulting target class predictions of the shape (num_elements, )\n", " where all elements are an integer number indicating the predicted class.\n", " \"\"\"\n", " assert isinstance(xs, np.ndarray)\n", " assert len(xs.shape) == 2, 'observation array needs to have shape (num_elements, num_observations)'\n", " \n", " # For multiple predictions we simple iterate over the list of all individual observations \n", " # and use the ``predict_single`` function.\n", " ys = []\n", " for x in xs:\n", " ys.append(self.predict_single(x))\n", " \n", " return np.array(ys)\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "d93ab3219eb03b24bdff55d852103c86", "grade": false, "grade_id": "cell-c76b37fce585a35a", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.13 (1 points)** For this task, you'll have to implement a function ``dataset_from_df``. Currently the student survey dataset is still available as a DataFrame object. To fit the ``NaiveBayesClassifier``. It will have to be processed into a dataset consisting of two numpy arrays ``xs`` and ``ys`` containing the observations and targets respectively. The observation array of the dataset should be structured like this exmaple:\n", "\n", "```python\n", "xs = [\n", " [\n", " 210, # hours of study\n", " 93, # points in the exercise\n", " 0, # lecture attendence\n", " 1, # studying uses old exams\n", " ],\n", " # ...\n", "]\n", "```\n", "\n", "For the target value, we want to predict the **exam outcome** $\\in \\{\\mathrm{fail}, \\mathrm{pass}\\} = \\{0, 1\\}$. The target array should therefore be structured like this example:\n", "\n", "```python\n", "ys = [\n", " 0, # fail\n", " 1, # pass\n", " # ...\n", "]\n", "```" ] }, { "cell_type": "code", "execution_count": 208, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "475aead2250a9febc527428615c64f81", "grade": false, "grade_id": "cell-4b373d0419ac1b83", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [], "source": [ "# TASK: Implement the following function which receives the student survey dataset in the form \n", "# of a data frame and returns a tuple of two numpy arrays that represent the observation and \n", "# targets respectively in the form needed to train the classifier.\n", "\n", "\n", "def dataset_from_df(data_frame: pd.DataFrame\n", " ) -> tuple[np.ndarray, np.ndarray]:\n", " \"\"\"\n", " This function takes a pandas DataFrame ``data_frame`` object as an input and is supposed \n", " to return two numeric numpy arrays which contain the observation vectors and target classes \n", " for each sample of the dataset respectively.\n", " \n", " The observation array ``xs`` has to have the shape (num_elements, num_observations)\n", " The target array ``ys`` has to have the shape (num_elements, )\n", " \n", " :param data_frame: A dataframe object containing the student survey dataset.\n", " \n", " :returns: A tuple of numpy arrays (xs, ys)\n", " \"\"\"\n", " \n", " ys = np.array(data_frame.passed)\n", " xs = np.array(data_frame[[\"hours_study\", \"exercise_points\", \"lecture\", \"old_exams\"]])\n", " return xs, ys\n" ] }, { "cell_type": "code", "execution_count": 209, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "271c2ad05a71dfbc397a8f0d99c55b34", "grade": true, "grade_id": "test-5-13-convert-dataset", "locked": true, "points": 1, "schema_version": 3, "solution": false, "task": false } }, "outputs": [], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-13-convert-dataset - possible points: 1\n", "\n", "\n", "df_ = pd.DataFrame({\n", " 'hours_study': [200, 300], \n", " 'exercise_points': [87, 45],\n", " 'lecture': [0, 1],\n", " 'old_exams': [1, 0],\n", " 'passed': [1, 0],\n", "})\n", "\n", "xs_, ys_ = dataset_from_df(df_)\n", "\n", "assert isinstance(xs_, np.ndarray)\n", "assert len(xs_) == 2\n", "\n", "assert isinstance(ys_, np.ndarray)\n", "assert len(ys_) == 2\n", "\n", "# NOTE: The hidden tests will construct a more complex example df_ and check for the exact \n", "# shapes as well as the exact values.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "500e12555697d74659ad0e169c9ed8ad", "grade": false, "grade_id": "cell-43fd6caf454a67c7", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "**🛠️ Task 5.14 (2 points)** For this task, we will actually instantiate a new ``NaiveBayesClassifier`` model and fit it with the data from the student survey dataset." ] }, { "cell_type": "code", "execution_count": 212, "metadata": { "deletable": false, "nbgrader": { "cell_type": "code", "checksum": "f631bb097f8a623be424413f73f13a3d", "grade": false, "grade_id": "cell-0020b31412e327a1", "locked": false, "schema_version": 3, "solution": true, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model training accuracy: 86.00%\n" ] } ], "source": [ "from sklearn.metrics import accuracy_score\n", "\n", "xs, ys = dataset_from_df(df)\n", "# preparing the training and validation split for the model training.\n", "xs_train, xs_val = xs[:200], xs[200:]\n", "ys_train, ys_val = ys[:200], ys[200:]\n", "\n", "# TASK: Instantiate a new model into this variable ``model`` and use the ``fit`` method to train \n", "# the classifier on the training split of the dataset.\n", "\n", "model: NaiveBayesClassifier = None\n", "\n", "# YOUR CODE HERE\n", "model = NaiveBayesClassifier(2, {0:\"continuous\", 1:\"continuous\", 2:\"categorical\", 3:\"categorical\"})\n", "model.fit(xs, ys)\n", "\n", "ys_pred = model.predict(xs_train)\n", "acc_train = accuracy_score(ys_train, ys_pred)\n", "print(f'Model training accuracy: {acc_train*100:.2f}%')" ] }, { "cell_type": "code", "execution_count": 213, "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "code", "checksum": "8ca65c4206f9070841e66f784248e058", "grade": true, "grade_id": "test-5-14-train-model", "locked": true, "points": 2, "schema_version": 3, "solution": false, "task": false } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model validation accuracy: 82.81%\n" ] } ], "source": [ "##### DO NOT CHANGE #####\n", "# ID: test-5-14-train-model - possible points: 2\n", "\n", "from sklearn.metrics import accuracy_score\n", "\n", "ys_pred = model.predict(xs_val)\n", "assert ys_pred.shape == ys_val.shape, 'multi-element prediction failed'\n", "\n", "acc_val = accuracy_score(ys_val, ys_pred)\n", "print(f'Model validation accuracy: {acc_val*100:.2f}%')\n", "assert acc_val >= 0.8, 'validation accuracy too low'\n", "\n", "# Note: The hidden tests will download an independent and unseen test set (w. same distribution) and \n", "# test the accuracy of the fitted model! The model will not be checked for an exact accuracy \n", "# but will have to pass a minimal accuracy threshold of 80% on this unseen test set.\n", "\n", "# Note: The hidden tests rely on a working implementation of ``dataset_from_df`` to process the \n", "# downloaded test set - so make sure that it is working properly.\n", "\n", "\n", "##### DO NOT CHANGE #####" ] }, { "cell_type": "markdown", "metadata": { "deletable": false, "editable": false, "nbgrader": { "cell_type": "markdown", "checksum": "3bf618e40df9ca745c51beff4d16bc77", "grade": false, "grade_id": "cell-a0b208d5291352cb", "locked": true, "schema_version": 3, "solution": false, "task": false } }, "source": [ "⚠️ **DISCLAIMER.** The student survey dataset used in this exercise was *synthetically* created. The data is not based on any real individuals or events. Consequently, it is not advisable to use the trained predictive models to predict your own exam outcome!" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.2" } }, "nbformat": 4, "nbformat_minor": 4 }