<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Rcambier&#39;s Blog</title>
<link>https://rcambier.github.io/</link>
<atom:link href="https://rcambier.github.io/index.xml" rel="self" type="application/rss+xml"/>
<description>Rodolphe Cambier&#39;s blog: machine learning and statistics from scratch in Python, computer science notes, small apps I built, and logic riddles.</description>
<image>
<url>https://rcambier.github.io/profile.jpg</url>
<title>Rcambier&#39;s Blog</title>
<link>https://rcambier.github.io/</link>
</image>
<generator>quarto-1.10.18</generator>
<lastBuildDate>Fri, 04 Sep 2026 23:00:00 GMT</lastBuildDate>
<item>
  <title>Daybound — days abroad, in your own sheet</title>
  <link>https://rcambier.github.io/posts/2026-09-05-daybound-days-abroad-in-your-own-sheet.html</link>
  <description><![CDATA[ 





<p><a href="https://rcambier.github.io/locationtrack/"><strong>Daybound</strong></a> is an iPhone app I built because I live in the UK on a visa, and the number of days I spend outside the country matters. For settlement you cannot be away more than 180 days in any twelve months. There is a Schengen limit too, and a tax one. I had been keeping all of this in a spreadsheet by hand for four years, one row per day, and I wanted the phone to do the writing for me without taking the spreadsheet away.</p>
<div class="quarto-layout-panel" data-layout-ncol="3">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/daybound-today.png" class="img-fluid"></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/daybound-day.png" class="img-fluid"></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/daybound-globe.png" class="img-fluid"></p>
</div>
</div>
</div>
<section id="what-it-does" class="level2">
<h2 class="anchored" data-anchor-id="what-it-does">What it does</h2>
<p>It records the country you sleep in, every night, without you opening it. iOS wakes the app when the phone moves a few hundred metres or settles somewhere, the app works out the country, and the next morning it writes one row to your sheet: the date, the country, and a place for evidence like a flight number.</p>
<p>Then it counts. The interesting part is that every rule counts a day differently. UK settlement only counts whole days outside the country, so the day you leave and the day you come back do not count. Schengen counts any part of a day, so they both do. The tax residence test looks at where you are at midnight. Daybound knows the definition for each rule, and when you open a day it tells you which rules it counts for and why.</p>
<p>The settlement screen goes one step further and tells you the earliest day you can apply, starting from the day your visa started, and starting over if you ever broke the 180-day rule. I learned from it that I had broken it in 2023 without noticing.</p>
</section>
<section id="why-a-spreadsheet" class="level2">
<h2 class="anchored" data-anchor-id="why-a-spreadsheet">Why a spreadsheet</h2>
<p>Because these numbers matter for years, and an app is only as durable as the app. Your history is an ordinary Google Sheet in your own Drive. You can open it, send it to a lawyer, back it up, or delete the app; the rows stay. The app creates the sheet itself and can only see the files it created, nothing else in your Drive.</p>
<p>There is a second sheet with every location fix the phone ever took, and you can import your Google Maps Timeline export into it, so the past is yours as well.</p>
</section>
<section id="the-one-manual-button" class="level2">
<h2 class="anchored" data-anchor-id="the-one-manual-button">The one manual button</h2>
<p>I removed every way of typing days in by hand. There is exactly one: “Correct this day”, and it asks why. The reason goes into the sheet next to the day, so if anyone ever asks, the record explains itself.</p>
</section>
<section id="getting-it" class="level2">
<h2 class="anchored" data-anchor-id="getting-it">Getting it</h2>
<p>Daybound is free on the App Store, with no subscription and no account with me. Every screen works with demo data before you sign in with Google, so you can look around first. It is not legal or tax advice; check the rules that apply to you.</p>


</section>

 ]]></description>
  <category>project</category>
  <guid>https://rcambier.github.io/posts/2026-09-05-daybound-days-abroad-in-your-own-sheet.html</guid>
  <pubDate>Fri, 04 Sep 2026 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Discover — a road trip narrator</title>
  <link>https://rcambier.github.io/posts/2026-08-10-discover-road-trip-narrator.html</link>
  <description><![CDATA[ 





<p><a href="https://discover-on-the-road.vercel.app/"><strong>Discover</strong></a> is a little app I built for road trips. You put your phone on the dashboard, and while you drive it tells you about the places you are passing: the region, its history, the castle on the hill you would otherwise drive straight past. All you need is an OpenAI key.</p>
<div class="quarto-layout-panel" data-layout-ncol="3">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/discover-monteriggioni.png" class="img-fluid"></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/discover-abbadia.png" class="img-fluid"></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 33.3%;justify-content: center;">
<p><img src="https://rcambier.github.io/posts/discover-settings.png" class="img-fluid"></p>
</div>
</div>
</div>
<p>The screen is just a map. The violet marker is the place it is currently talking about, and the grey ones are places it considered but decided were not worth interrupting you for. There is nothing to read while driving, everything is spoken.</p>
<section id="what-it-does-while-you-drive" class="level2">
<h2 class="anchored" data-anchor-id="what-it-does-while-you-drive">What it does while you drive</h2>
<p>Every few kilometres it quietly looks up what is around you: Wikipedia, in the local language because that is usually where the good articles are, travel guides, and the web for the things encyclopedias miss. Then it decides what is worth mentioning. The bar I aimed for is what a good local guide sitting in the passenger seat would point out: famous enough, interesting enough, close enough to the road.</p>
<p>You can also tell it what you care about in the settings. If you say you like railways, it will happily talk about a small station that anyone else would drive past in silence.</p>
<p>It tries to get the timing right too. A place is mentioned once, a little before it comes into view, and it tells you which side to look. In the screenshots: <em>1.1 km, straight ahead</em>.</p>
<p>And if something makes you curious, you hold a button and ask. It answers, and looks things up if it needs to.</p>
</section>
<section id="the-practical-bits" class="level2">
<h2 class="anchored" data-anchor-id="the-practical-bits">The practical bits</h2>
<p>Your OpenAI key stays on your phone and is only used to talk to OpenAI. An hour of driving costs somewhere between 15 and 40 cents. Everything else comes from free sources like Wikipedia.</p>
<p>It runs in the browser, so it keeps your screen on while it works, like a navigation app does. There is also an iPhone version of the same thing.</p>
<p>One honest note about the screenshots: they come from the app’s built-in test drive, on the road from Monteriggioni to Siena. The car and the voice are simulated so I could replay the same drive while building the app, but the map and the places are real.</p>


</section>

 ]]></description>
  <category>project</category>
  <guid>https://rcambier.github.io/posts/2026-08-10-discover-road-trip-narrator.html</guid>
  <pubDate>Sun, 09 Aug 2026 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Memoria — a board your agents can write to</title>
  <link>https://rcambier.github.io/posts/2026-08-10-memoria-boards-in-google-sheets.html</link>
  <description><![CDATA[ 





<p><a href="https://memoria-board.vercel.app/"><strong>Memoria</strong></a> is a kanban board and a notebook that saves everything into a Google Sheet in your own Drive. There is no database and nothing to sign up for. You log in with Google, and your tasks become rows in a spreadsheet you own.</p>
<p><img src="https://rcambier.github.io/posts/memoria-landing.png" class="img-fluid"></p>
<p>The same sheet can also be used by AI agents. The board, your agents and the spreadsheet always see the same thing, because the spreadsheet is the only place where the data lives.</p>
<p><img src="https://rcambier.github.io/posts/memoria-board.png" class="img-fluid"></p>
<section id="why-a-spreadsheet" class="level2">
<h2 class="anchored" data-anchor-id="why-a-spreadsheet">Why a spreadsheet</h2>
<p>Because your data stays yours. Your tasks are just rows in a normal spreadsheet. You can open it in Google Sheets and edit it there whenever you want, and it will still be there, perfectly readable, in ten years, even if this app disappears. The app can only see the files it created or the ones you picked. It cannot look at anything else in your Drive.</p>
</section>
<section id="letting-your-agents-use-it" class="level2">
<h2 class="anchored" data-anchor-id="letting-your-agents-use-it">Letting your agents use it</h2>
<p>This is the reason I built it. I wanted a place where an AI agent could leave something for me, and where I could leave something for it, that is not a chat log and not a file buried in some repo.</p>
<p>If you use claude.ai or Claude Code, you can add Memoria as a connector, sign in with Google, and from then on your agent can read the board, add tasks, move them around and take notes. It works even when the agent runs on a schedule, without you there.</p>
</section>
<section id="trying-it" class="level2">
<h2 class="anchored" data-anchor-id="trying-it">Trying it</h2>
<p>The easiest way is the hosted version at <a href="https://memoria-board.vercel.app">memoria-board.vercel.app</a>. If you would rather run your own copy, the code is open source and takes about fifteen minutes to deploy, all on free tiers.</p>
<p>Source: <a href="https://github.com/RCambier/Memoria">github.com/RCambier/Memoria</a>. MIT.</p>


</section>

 ]]></description>
  <category>project</category>
  <guid>https://rcambier.github.io/posts/2026-08-10-memoria-boards-in-google-sheets.html</guid>
  <pubDate>Sun, 09 Aug 2026 23:00:00 GMT</pubDate>
</item>
<item>
  <title>The fake coin</title>
  <link>https://rcambier.github.io/posts/2026-05-03-fake-coin.html</link>
  <description><![CDATA[ 





<p>You have 11 coins. One of them is fake, and has a different weight from the others: it can be either lighter or heavier.</p>
<p>Using a balance scale, what is the minimum number of weighings needed to identify the fake coin?</p>
<div class="answer-title" data-markdown="1">
<p><em>Hover to show the answer.</em></p>
</div>
<div class="answer-wrapper">
<div class="answer" data-markdown="1" style="color: grey">
<p>The answer is <strong>3 weighings</strong>.</p>
<p>Here is one way to do it.</p>
<p>Split the coins into three groups: <strong>A</strong> and <strong>B</strong> with four coins each, and <strong>C</strong> with the remaining three coins. First weigh <strong>A</strong> against <strong>B</strong>.</p>
<section id="case-1-a-and-b-balance" class="level2">
<h2 class="anchored" data-anchor-id="case-1-a-and-b-balance">Case 1: A and B balance</h2>
<p>Then the fake coin is in group <strong>C</strong>, and all coins in <strong>A</strong> and <strong>B</strong> are genuine.</p>
<p>For the second weighing, weigh one coin from <strong>C</strong> against one genuine coin.</p>
<ul>
<li>If they do not balance, that coin from <strong>C</strong> is the fake one, and the direction tells you whether it is heavier or lighter.</li>
<li>If they balance, then the fake coin is one of the two remaining coins from <strong>C</strong>.</li>
</ul>
<p>For the third weighing, compare one of those two remaining <strong>C</strong> coins against a genuine coin. If it balances, the other remaining <strong>C</strong> coin is fake; otherwise, the coin you weighed is fake.</p>
</section>
<section id="case-2-a-and-b-do-not-balance" class="level2">
<h2 class="anchored" data-anchor-id="case-2-a-and-b-do-not-balance">Case 2: A and B do not balance</h2>
<p>Suppose <strong>A</strong> goes up and <strong>B</strong> goes down. Then either one coin in <strong>A</strong> is light, or one coin in <strong>B</strong> is heavy.</p>
<p>For the second weighing:</p>
<ul>
<li>Put two coins from <strong>A</strong> and one coin from <strong>B</strong> on the left side.</li>
<li>Put the other two coins from <strong>A</strong> and another coin from <strong>B</strong> on the right side.</li>
<li>Leave the two remaining coins from <strong>B</strong> aside.</li>
</ul>
<p>If this second weighing balances, then the fake coin is one of the two <strong>B</strong> coins that were left aside, and it is heavy. Compare those two coins in the third weighing: the heavier one is fake.</p>
<p>If this second weighing does not balance, then the direction of the imbalance tells you that the fake coin is either:</p>
<ul>
<li>the <strong>B</strong> coin on the heavier side, which would be heavy, or</li>
<li>one of the two <strong>A</strong> coins on the lighter side, which would be light.</li>
</ul>
<p>So there are only three suspects left: one possible heavy coin and two possible light coins.</p>
<p>For the third weighing, compare the two possible light coins:</p>
<ul>
<li>If one is lighter, it is the fake coin.</li>
<li>If they balance, then the possible heavy coin is the fake coin.</li>
</ul>
<p>So in all cases, three weighings are enough.</p>
</section>
</div>
</div>



 ]]></description>
  <category>riddle</category>
  <guid>https://rcambier.github.io/posts/2026-05-03-fake-coin.html</guid>
  <pubDate>Sat, 02 May 2026 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Down the cliff</title>
  <link>https://rcambier.github.io/posts/2026-05-03-down-the-cliff.html</link>
  <description><![CDATA[ 





<p>You are standing at the top of a 100 meter cliff.</p>
<p>There is a tree at the top of the cliff, and a branch sticking out of the cliff 50 meters below you. You have a 75 meter rope and a knife.</p>
<p>How can you get down safely to the bottom of the cliff?</p>
<p><img src="https://rcambier.github.io/posts/down-the-cliff.svg" class="img-fluid"></p>
<div class="answer-title" data-markdown="1">
<p><em>Hover to show the answer.</em></p>
</div>
<div class="answer-wrapper">
<div class="answer" data-markdown="1" style="color: grey">
<p>Cut the rope into two pieces: one of <strong>25 meters</strong> and one of <strong>50 meters</strong>.</p>
<p>Tie one end of the 25 meter rope to the tree. At the other end of that rope, make a loop. The loop now hangs 25 meters below the top of the cliff.</p>
<p>Pass the 50 meter rope through the loop, so that it is folded in two equal parts. Each side of the folded rope is 25 meters long, so the two loose ends reach exactly to the branch, which is 50 meters below the top:</p>
<ul>
<li>25 meters from the tree to the loop,</li>
<li>then 25 meters from the loop to the branch.</li>
</ul>
<p>Climb down using the doubled 50 meter rope until you reach the branch.</p>
<p>Once you are on the branch, pull one end of the 50 meter rope to retrieve it from the loop. You now have the full 50 meter rope with you.</p>
<p>Attach this 50 meter rope to the branch, then climb down the remaining 50 meters to the bottom of the cliff.</p>
</div>
</div>



 ]]></description>
  <category>riddle</category>
  <guid>https://rcambier.github.io/posts/2026-05-03-down-the-cliff.html</guid>
  <pubDate>Sat, 02 May 2026 23:00:00 GMT</pubDate>
</item>
<item>
  <title>The mirror flip</title>
  <link>https://rcambier.github.io/posts/2025-03-16-mirror-flip.html</link>
  <description><![CDATA[ 





<p>You are looking to your reflection in a mirror. If you move your right hand, your reflection seems to be moving its left hand. However, if you move your head (your top), your reflection is also moving its head (its top). Why is the reflection flipped left/right but not top/bottom?</p>
<div class="answer-title" data-markdown="1">
<p><em>Hover to show the answer.</em></p>
</div>
<div class="answer-wrapper">
<div class="answer" data-markdown="1" style="color: grey">
<p>The way I understand it is the following:</p>
<ul>
<li><p>The mirror is simply reflecting everything exactly in front of where it is. There is not yet any concept of right/left or top/bottom</p></li>
<li><p>Since, as humans, we are used to refer to left and right in reference to our head and feet, we are under the impression that the being in the mirror is moving its left hand. But notice that if we define “right” as “the side of the heart”, then we could not say that the reflection is moving his left hand. So this is only in reference to the head and feet.</p></li>
<li><p>Picture a being that is symmetric in the other direction, as pictured here. We would call “bloublou” and “blibli” the 2 directions that are indistinguishable. For that being, moving the “bloublou” side and looking into the mirror, it would be under the impression that the “blibli” side is moving. Because compared to the non-symmetrical parts of his body, this is what seems to be moving.</p></li>
</ul>
<p><img src="https://rcambier.github.io/posts/mirror-flip.png" class="img-fluid"></p>
</div>
</div>



 ]]></description>
  <category>riddle</category>
  <guid>https://rcambier.github.io/posts/2025-03-16-mirror-flip.html</guid>
  <pubDate>Sun, 16 Mar 2025 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Bayesian Inference from Scratch</title>
  <link>https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch.html</link>
  <description><![CDATA[ 





<div id="cell-1" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.068058Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.067832Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.677996Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.677453Z&quot;}}" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> binom</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> uniform, bernoulli</span>
<span id="cb1-5"></span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> beta</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> betabinom</span>
<span id="cb1-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb1-10"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> norm</span>
<span id="cb1-11"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-12"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> numpy.random <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> choice</span>
<span id="cb1-13">rng <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.default_rng()</span>
<span id="cb1-14"></span>
<span id="cb1-15">plt.rcParams[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"figure.figsize"</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span></code></pre></div></div>
</div>
<p>I’ve always struggled to understand how Bayesian inference worked, what was the difference between events and random variables, why sampling was needed, how it was used for regression and more.</p>
<p>As always, to start understanding things better, I code them from scratch in Python :)</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/bayesian_header.png" class="img-fluid figure-img"></p>
<figcaption>bayesian</figcaption>
</figure>
</div>
<section id="bayes-for-a-set-of-random-events" class="level1">
<h1>Bayes for a set of random events</h1>
<p>My own way of understanding Bayesian Inference. Heavily based on: - My examples are partially taken from: https://www.bayesrulesbook.com/chapter-6.html - My understanding is coming from: https://xcelab.net/rm/statistical-rethinking/</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<section id="you-have-some-prior-knowledge-about-the-probability-of-each-random-event" class="level2">
<h2 class="anchored" data-anchor-id="you-have-some-prior-knowledge-about-the-probability-of-each-random-event">1. You have some prior knowledge about the probability of each random event</h2>
<p>There is a set of events for which we have some a-priori knowledge of probabilities.</p>
<p>For example, let’s take the following situation:</p>
<blockquote class="blockquote">
<p>You’re about to get on a plane to Seattle. You want to know if you should bring an umbrella. You call a friendof yours who live there and ask if it’s raining. Your friend has a 2/3 chance of telling you the truth and a 1/3 chance of messing with you by lying. He tells you that “Yes” it is raining. What is the probability that it’s actually raining in Seattle?</p>
</blockquote>
<p>We are interested in the probabilities of 2 events: - Event “Rain” - Event “NoRain”</p>
<p>You might not know anything about the probabilities of each of these events, but you might have some a-priori. Either way, you can express your current belief in probabilities of each of those events.</p>
<p>We can visualize our current, our “prior” knowledge with a graph like the following</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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eFf/vKXLP6wWj777LNp4403Tg8++GDO/84776R11103LbXUUrXOvfjii+mEE05Ir776atpggw3SIossko9Rx4033pgob7HFFkujRo1KM8wwQz723nvvpfPOOy8hUldYYYW0+uqr5/0LLbRQmnnmmWtlszLHHHOk6aefPrfhnnvuSW+99Va67bbbavsjM8euu+66XMeXvvSlLFw59vLLL2cr7MMPP5xWWmmltMoqq8QpLiUgAQlIQAISkIAEJCABCUigRGBAXXlfeumlLERHjhyZHn300XT22Wdn4Uh7fvOb32Q32pVXXjk99thjCavopz/96SzuEHmf+9zn0mWXXVZr+iabbJKPsW/RRRdNTzzxRD72ta99LeGai4XzsMMOSzvvvHPtnEMPPTQdddRR6e67705f/OIX00UXXZSPfe9730s333xzLR8rl1xySTrllFMSbcaNFyH89NNP1/aTh7qXWGKJ9Kc/SnXtfjii6fHH388vfvuu+nzn/98uuqqq7LIXn/99bu1nXNNEpCABCQgAQlIQAISkIAEJPABgQG1mAb0448/Pm244YbptddeS3POOWe677778iG2X3jhhWy9XGedddL222+fTj/99HzsYx/7WDr44IOzdZQdu+yySzr55JOz+y1CF2H79a9/Pc0000zp2muvTfPMM09ae+21s7XynHPOyWXgsosoJSFGEaZYZntLyy+/fBaxCN2vfOUr6d57761lR/QyDnWfffbJYpTxqYxjRTQjvM8/y09NJL576+/fbbtfNckYAEJCABCUhAAhKQgAQkIIH/ERhQi2lUu9xyy+XVaaedNiH8cIUlbbTRRjWX2ltuuSULwnyg+LPMMssk3GYjIVxJI0aMyPkYG0pCaO67777ZiooLLek/lPXn75y1/OS/4gZhGmcax2oMkVAiL985/zEIUK+9qq62WBfZDDz2U6952221zm7H04gKM+7JJAhKQgAQkIAEJSEACEpCABCYk0BGLaVkM3n/dnCyNjQj3zkI7UWfupTn0qvv/56bfvvf/97HhcaOxh3GgkXW9x+WSIQDznkkPxhXGh5XGr5nGeeeSZbMxnn2pcUgZH23HPPtOyyy+YiGO+K2Ma6+qMf/SgddNBBebwrEYEZN3vSSSf1pSrPkYAEJCABCUhAAhKQgAQkMKQJ9E2VTSISplwhAi5jNJ966qk8HrO+S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QkIAEJSEACEpBA2wlMPqZIbS/VArsR+Nvf/pbOOOOMdOutt9Y+99xzT/r4xz+eZphhhm55yxuvvPJK+vGPf5zmmGOONOOMM5YP9Xn9mGOOSe+/36aZ555upVx1llnpWuvvTZNP/30uV3dDvbTxuuvv56OO+64NNtss6WZZpqpT7Uceuihuc2UYZKABCQgAQlIQAISkIAEqklgRFeRqtn06rT6kksuSRtttFEWfNNMM01u+KOPPpqXo0ePThyfYoopJujQI488khZYYIF03XXXpdVXX32C433ZMWLEiHTQQQelQw45pHb6t7/97XT00Uen7bffPv30pz9Nk08+ee1Yf648/fTTac4550y/+c1v0tprr92nqujPOeeck7baaqs+ne9JEpCABCQgAQlIQAISkEDnCejKO4DX4Oqrr06ITT7vvfdeOvzww9OVV16ZrrjiioatmHfeedOzzz6bVl555YbH27EzROk3vvGNdOqppw6YKG1H2y1DAhKQgAQkIAEJSEACEhgaBBSmHbqOWCW/8pWv5Nofe+yxvNxjjz3SRRddlI488si03HLLpRdffDHtt99+6aGHHsrHccHF9XXFFVdMCy+8cNp6661TWF7JUH9+PqmXPyFK99577+wyPNlkH9wOJ554YjrqqKPSz3/+87TGGmvk+tguG9d/+9vfprXWWit98pOfTOuss04aO3Zsrummm25Km2yySXrqqafy9sMPP5y36Vek73znO4k6GiWsx+utt15aZpll0l577ZWwqkai/z/84Q9zm6jjqquuikN5GXxWW221zOb666/PTG6/fZavt7Kr2VyRQISkIAEJCABCUhAAhIYUAIK0wHF3b2yiy++OO9YddVV8xKhheDaf/90/zzz59ee+21dPbZZ2erKRn22WefLNbIv/vuu6c77rgjLbnkkumf/xnw/PzzgZ/EJghSrGUMu4Ul9hICDkE8be+9a00cuTI9PLLL+ftaO+ll16axegss8yS24ob8iqrrJJuuOGGPB4WETpu3LhcHG7IbNMP0ptvvpmOOOKINPXUU+ft8p+TTjopuzy/9dZbacMNN8wuvp/97Gdr/d9zzz3Tvvvum95999005ZRTJtygywkhywf357fffjt98YtfzII7hP/Eyi+X5boEJCABCUhAAhKQgAQkMIAEGGNq6l8ChaBjHG/XSiut1LX++uvnz1xzzZX3LbXUUrXKCzHaNe2003YV7rt53/jx43OeQtx1/f3vf8/rRayqWv5nnnmm277682sZSyu0gzpY8llhhRW6CqFXytHVte222+ZjTzzxRN7Pcc4pLJ15m3roSySOL7744rks9nF8l112yYc33njjWl3vvPNOV2HFzNtPPvlk1z/+8Y+8Xowx7SpEeK5jiy22iGK7on+FcO6iLbS3EJ6146eddlreV4wxrfEpRG/t+AknnJCPX3jhhRMtv3aSKxKQgAQkIAEJSEACEpDAgBOYMOJO8fRv6h8CRJ6dffbZc+Ff/vKXszvuNtts060yLKazzjprt31s3HfffXlfWFfZIBLtIossku699958jD89nV/LUKxgicUl9j/+U+2nB522GE5IFI5TyGY0yc+8Ym8C4vopz71qfTcc8+lV199NbsPb7fddrXsHMd99vTTT8/76BtWVcpnXO2PfvSjhLvwX/6/vTtWrWIJ4wC+t0gkpAiCraUBQbBK4wuk0EKwiA9gKl9BEIQ8gZAXCIiWKVMrqFgIgqKF2KcICJYWd/+Ds3cNVyMJHpzxN5Czx7O7szO/z+ZjZmdevy5TfsckdhgT8++m6Wa6ctqVvwcPHkx1jwnx8Pbt2zJlOD9ev359OpcR0VpyTcp8EaVMQ67lpPrrdY4ECBAgQIAAAQIECCxeQGK6QPP79+8PmZr6s5Lpsf9Xjo6Oys9ZxfZ4SQJYy4/ur+dzHEczyzTdvJOZxZfSrqz6e+3atemy1dXV6Xu+1JV6M603pSat5R/fPpJUpuTd00wPPjg4KIlmVswdRy+Hp0+flt9u3rz57Y7/DrV/mcZb30/N2du3bw9Jkutzk9DWMt9i5vPnz+XnJLK1zLeQOan+eo8jAQIECBAgQIAAAQKLF/CO6eLNT/XErNCb8vz583LMR/Y5fffuXRl5nX78hS/ZPzUlyWa2WknZ2toq9ZV/OQje6qmJMmcl2fPng0bGxvlp3F6cDlm5DOjoxcuXCjvpD558mR49erVsLm5Ob+1fK/9S4Kc1YHzl61rLl26VN4Zredfvnw53Tu3uHjxYvn9xYsX0/n5okf1/h/VP93kCwECBAgQIECAAAECCxeQmC6c/HQPTNI3vrtZpsWO754OGQHMSGfK+E5oOZ7mIwlbktOMUt69e/fEKpaWlsrzHj9+PGQF3i9fvgx7e3sl4cxIbMrKysowvks7JEmsSWim+iYpzYhmVtw9XrK6bxLahw8fln1dP3z4UFbUzSJNy8vLZZXi9D8jse/fvy9137t3b6omo6o5P76DW7bfyYq8WbW4lpPqr9c5EiBAgAABAgQIECCweAFTeRdgXle8rdux/OiReVezXptr5t+TnGV12yR8GUWs5dGjR9OI6fH76zXHj/N6cy5TbTOlN3Vlpdu0s07dnd9b78vWMeNiTGXF3no+K/jOE8EbN24M+/v70zXjYknl0rQ/7ZyX1Ju/JLjZQufWrVvT6SSidR/XjLjmHdPLly+X82l3ktTcm1V6817rnTt3ilES4O3t7ZLIJ1H+lfqnh/pCgAABAgQIECBAgMBCBf7JcksLfaKHnUng69evZV/THNfX10tCdqYKT3lz/tskOc2CSNlTdW1t7ZQ1fX9b3pfN3qx5pzT9O15vtoHJ9OUsEFWnFaeG/P7mzZsy7ffcuXNl1Pbjx48lic9eqtlCJuWk+stFPggQIECAAAECBAgQWKiAxHSh3B72uwSSqF+9erUkojs7O2VUNnuaZq/XcduZMgr8u56tXgIECBAgQIAAAQIEzibgHdOz+bn7DxHI9ODd3d3h06dPw5UrV8r2NuPep2V7mpOmUP8hXdAMAgQIECBAgAABAn+tgBHTvzb0/Xb88PBwyCJN58+f77eTekaAAAECBAgQIECgIwGJaUfB1BUCBAgQIECAAAECBAi0KGAqb4tR02YCBAgQIECAAAECBAh0JCAx7SiYukKAAAECBAgQIECAAIEWBSSmLUZNmwkQIECAAAECBAgQINCRgMS0o2DqCgECBAgQIECAAAECBFoUkJi2GDVtJkCAAAECBAgQIECAQEcCEtOOgqkrBAgQIECAAAECBAgQaFFAYtpi1LSZAAECBAgQIECAAAECHQlITDsKpq4QIECAAAECBAgQIECgRQGJaYtR02YCBAgQIECAAAECBAh0JCAx7SiYukKAAAECBAgQIECAAIEWBSSmLUZNmwkQIECAAAECBAgQINCRgMS0o2DqCgECBAgQIECAAAECBFoUkJi2GDVtJkCAAAECBAgQIECAQEcCEtOOgqkrBAgQIECAAAECBAgQaFFAYtpi1LSZAAECBAgQIECAAAECHQlITDsKpq4QIECAAAECBAgQIECgRQGJaYtR02YCBAgQIECAAAECBAh0JCAx7SiYukKAAAECBAgQIECAAIEWBSSmLUZNmwkQIECAAAECBAgQINCRgMS0o2DqCgECBAgQIECAAAECBFoUkJi2GDVtJkCAAAECBAgQIECAQEcCEtOOgqkrBAgQIECAAAECBAgQaFFAYtpi1LSZAAECBAgQIECAAAECHQlITDsKpq4QIECAAAECBAgQIECgRQGJaYtR02YCBAgQIECAAAECBAh0JCAx7SiYukKAAAECBAgQIECAAIEWBSSmLUZNmwkQIECAAAECBAgQINCRgMS0o2DqCgECBAgQIECAAAECBFoUkJi2GDVtJkCAAAECBAgQIECAQEcCEtOOgqkrBAgQIECAAAECBAgQaFFAYtpi1LSZAAECBAgQIECAAAECHQlITDsKpq4QIECAAAECBAgQIECgRQGJaYtR02YCBAgQIECAAAECBAh0JPAvwbv+2EiUbvgAAAAASUVORK5CYII=" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-9" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.679488Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.679387Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.684197Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.683895Z&quot;}}" data-outputid="a615cf6b-4b35-4dbf-a509-b94f42281b81" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">probabilities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb2-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'NoRain'</span>],</span>
<span id="cb2-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>: [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>],</span>
<span id="cb2-4">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb2-5"></span>
<span id="cb2-6">probabilities</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="2">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>Rain</td>
<td>0.5</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>NoRain</td>
<td>0.5</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
</section>
<section id="you-have-an-additional-knowledge-the-relationship-between-another-event-happening-and-the-probabilities-of-events-rain-and-norain" class="level2">
<h2 class="anchored" data-anchor-id="you-have-an-additional-knowledge-the-relationship-between-another-event-happening-and-the-probabilities-of-events-rain-and-norain">2. You have an additional knowledge: the relationship between another event happening and the probabilities of events Rain and NoRain</h2>
<p>Now, there is <em>another</em> event happening: you call a friend and he tells you that it is raining. And you know (maybe from past experiences) that this friend is lying 1/3rd of the time.</p>
<p>The event happening: “Calling a 1/3rd lying friend that tells you it is raining”</p>
<p>Note something: this is another event, which happens “on top” of the event raining/not raninig. But there is a relationship between these events that (for some reason) you can exactly express mathematically.</p>
<p>The trick is to apply this relationship, and understand the likelihood of the event “Calling a 1/3rd lying friend that tells you it is raining” in each of the initial events: - Rain: in this situation there is 2/3 chances of the friend saying that it rains - NoRain: in this situation there is 1/3 chances of the friend saying that it rains</p>
<p>So we now have a sytem to tell, in each situtation “Rain” and “NoRain” of the initial event, what are the chances of observing this new event of the friend mentioning rain.</p>
<ul>
<li>The event “Calling a 1/3rd lying friend that tells you it is raining” is called the <em>data</em></li>
<li>Your prior expcations in the events “Rain”/“NoRain” is called the <em>prior</em></li>
</ul>
<p>I like to visualize this on top of the previous graph:</p>
<p>This drives home for me the fact that we have a pre-existing belief in the probabilities for each event, and that the new event happening has likelihoods of happening that can be different in each of the initial events.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABG8AAAEBCAYAAADGlYh8AAAAAXNSR0IArs4c6QAAAGJlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJKGAAcAAAASAAAAUKABAAMAAAABAAEAAKACAAQAAAABAAAEb6ADAAQAAAABAAABAQAAAABBU0NJSQAAAFNjcmVlbnNob3SF0OW4AAAB12lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4yNTc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTEzNTwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgoC3bdYAABAAElEQVR4AeydCbxN5frHn0pFKUNFpVtHRVw0SboaSDRonkujolnTbdKgUppndZsk3KSZJopC0iCJoihEktxIUSjq3399X/fZd9n2Ps581j7n9/oce+213vH7rr3Wen/reZ93rb+iYAoiIAIiIAIiIAIiIAIiIAIiIAIiIAIiIAKJJLB2ImulSomACIiACIiACIiACIiACIiACIiACIiACAQCEm90IoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRueACIiACIiACIiACIiACIiACIiACIiACCSYgMSbBHeOqiYCIiACIiACIiACIiACIiACIiACIiACEm90DoiACIiACIiACIiACIiACIiACIiACIhAgglIvElw56hqIiACIiACIiACIiACIiACIiACIiACIiDxRudAhSIwZMgQq169ug0dOrRCtUuNEQEREAEREAEREAEREAEREAERqLwE1vorCpW3+Wp5RSPQsGFDmzZtmrVs2dI+/PDDitY8tUcEREAEREAEREAEREAEREAERKASEpDlTSXs9IraZKxufv/999C8qVOnyvqmona02iUCOUpg4sSJNmLEiBytvaotAiIgAiIgAiIgAiJQngRkeVOe9FV2iRJo0KCBTZ8+PZXnHnvsYR988EHquzZEQAREoDwJnHDCCfbSSy/Zt99+a3Xr1i3PqqhsERABERABERABERCBHCMgy5sc6zBVNzMBrG5WrFixysEpU6bYG2+8sco+fREBERCB8iAwYcIEGz58eLhOPfjgg+VRBZUpAiIgAiIgAiIgAiKQwwRkeZPDnaeq/4/AdtttZ19/XVwVszUqfXXX99+/fVXa9GihX300Uf/i6gtERABESgHAmeeeab16dMnlFy1alX75ptvrE6dOuVQExUpAiIgAiIgAiIgAiKQiwRkeZOLvaY6r0IAq5t58+bZRRddZLzdZmD0ySef2IUXXmifffaZrG9WoaUvIiACZU2A69LgwYNTxf72228m65sUDm2IgAiIgAiIgAiIgAgUgIAsbwoASVGST2DGjBmG9Q1h4403tsWLF4dtfOBsv/32YVv/iYAIiEB5EDjjjDPsySefXKXoatWq2axZs2R9swoVfREBERABERABERABEchGQJY32chof04RcOEmvdISbtKJ6LsIiEBZEsDq5vnnn7eaNWvaNttsY1tuuWWY3rls2TK75557yrIqKksEREAEREAEREAERCCHCUi8yeHOU9VFQAREQASSTeDVV1+12rVrW79+/ezhhx+2ffbZJ0zr7NSpk40ZM8bmz5+f7AaodiIgAiIgAiIgAiIgAokgoGlTiegGVaIkCcSnTZVkvspLBERABIpDYOjQoda/f38bOHBgyOaHH37QtKniAFVaERABERABERABEahEBGR5U4k6W00VAREQARFIDgGtNpWcvlBNREAEREAEREAERCDpBCTeJL2HVD8REAEREAEREAEREAEREAEREAEREIFKTUDiTaXufjVeBERABERABERABERABERABERABEQg6QQk3iS9h1Q/ERABERABERABERABERABERABERCBSk1A4k2l7n41XgREQAREQAREQAREQAREQAREQAREIOkEJN4kvYdUPxEQAREQAREQAREQAREQAREQAREQgUpNQOJNpe5+NV4EREAEREAEREAEREAEREAEREAERCDpBCTeJL2HVD8REAEREAEREAEREAEREAEREAEREIFKTUDiTaXufjVeBERABERABERABERABERABERABEQg6QQk3iS9h1Q/ERABERABERABERABERABERABERCBSk1A4k2l7n41XgREQAREQAREQAREQAREQAREQAREIOkEJN4kvYdUPxEQAREQAREQAREQAREQAREQAREQgUpNQOJNpe5+NV4EREAEREAEREAEREAEREAEREAERCDpBCTeJL2HVD8REAEREAEREAEREAEREAEREAEREIFKTUDiTaXufjVeBERABERABERABERABERABERABEQg6QQk3iS9h1Q/ERABERABERABERABERABERABERCBSk2gSnFa/8svvxQnudImjMBGG22UsBolozrL/gtGRUppVqsV6VqKeWsbEVABERABERABERABEQgRwhobJsjHVWBq7mG8XixxJvRo0fb6aefXoHpVZ6m7bPPPvbiiy9WngYXoqXL/jdHn7nhkKkyJ2o57a+wSTe5E5/qaYiIAIiIAIiIAIiIAKlRGDIELMLLiilzJWtCKyBQN++ZgcfnG+kYok35KxBf758c+Lg66+/bn369MmJupZXJdddZz3bv9mp5VV8qZQ7bFL/UslXmYqACIiACIiACIiACIhAThLo0MGsX7+crLoqncMEjj66QJWXz5sCYVIkERABERABERABERABERABERABERABESgfAhJvyoe7ShUBERABERABERABERABERABERABERCBAhGQeFMgTIokAkUnsPDHn6z/o4WfotTl+C7W48oe1q1rN3t/1PurVWBg32fst2UV25nyao3WDhEQgTIh8NFHH9knn3ySKmvChAn29ddf2xdffGGjRo2y5cuXp45pQwREQAREQAREQAREoPQJFNvnTelXUSWIQO4Q+GnhTzblsym2xd+2tO++mWN529e3WV/PsnE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WS3qFIiIAIiIAIiIAIiIAIiIAIiIAIiIAIisJLA2gIhAiIgAiIgAiIgAiIgAiIgAiIgAiIgAiKQXALyeZPcvlHNKggBVvsYP358qjVVqlSx+vXrh7+1186un65YscJYmaZdu3ZGmqKECRMm2JIlS2yvvfZKJf/pp5+M/W3btk3tS9/4448/7K233lpld7169WyHHXZYoxn+1KlTba211gpxV8lAX0RABERABERABERABERABERABIpEQNOmioRNiUSg4ASGDh0almdt06ZNSIQo895779nhhx9uL774YtYlWxFZateubYsWLbKNN9644AXGYh533HH2/PPPh/JatWoVjlD2QQcdZIsXL47FXHWTYzVq1LAWLVrYhhtuGJaY/fLLL61mzZrBESbLzmYL1113nSFK3XjjjdmiaL8IiIAIiIAIiIAIiIAIiIAIiEAhCBTtdX4hClBUERABs4022iiIHs4Cq5b27dvb559/bjvuuGPY/Z/Md+/fVX22677cL3WrVq2c8/xyEm+XLl9uyZctsgw02sGnTphlWMIgrBQ1dunSxiRMn2rrrrrtaEsQkrGW22moro8x46N+/vzVq1CjsWrBggW222WY2ePBgO++888I+rHpmzZoVrGzcOuiaa64Jx/76/bOA1ySovrbhcgCiiBBosCCBEkSJQfJGUkKSFR4yFFy3iVIjksGgSUuGRZJi+QcRJIkyVlgMaAI+of5+j2fNfSdnTs7Nyxz5973PM+d7umurq56e6eerV+fc6pSSaNHj05TTjllevXVV9PEE08cy9aW63dfAhJoLYEHH3ywg5CLWDvffPOFUNuoZT31sPvkk09CVF5ggQViVaR8r8ceeyy+zzjjjPnQGFuE5Ndee616nLFnrrnminGxerDOzgcffJBefvnllIXsOkU8JAEJSEACEpCABPosgc5jNvpsk22YBNqfwODBg6MTWUzZfPPN0+yzzx4eOkxa8LrhD08XPG9GjRqVFlpooRBSll9++Tj+yCOPNAXi0EMPTZ999lk66aSTxij/9ttvp3nnnTdCsxZZZJG0zTbbpC+/HKMchygLVNPPXVVADr88MPTJJNMkljVBA+h++67L6475JBD0pAhQ0J4QuxZddVVE15HCE7Dhg2rW3d/OXj11Venjz/+uL90x34MAAK777572mmnndIxxxwTf1tttVWIuPfee2/D3l966aXpsssua1im0UlEXzwAf/WrX3Uohvh72223dThW+4VVlPAqzG3ed999Q3w+8cQTa4t2+E746n777dfhmF8kIAEJSEACEpBAuxBQvGmXJ2U725oAb5n333/+Ntll11C0ED0wKvlzTffTIgovBXmjfI888xTd1KE9wriwDvvvJM22GCD8IBpBgpv0s8+++zEBIc6ynbJJZck3nzzFvvZZ59NvPV++OGHq0WOP/74aPNee+2VlllmmTTVVFOl9ddfP8KoRowYER47Tz31VDrooIPSKaecUr2uvLPeeuult956KzGxuvjii8un+sQ+3D/PNoC55PeCJheA7h+ZStXO6LL74IL6lPP/004ZGEUcfJJ5+cXnrppXxJeuONN6Ke6gF3JNAHCTA23XXXXfH3yiuvpKWWWiqddtpp1ZaSAwsvQTztsiGycB2/E34DbLn23XffzUWa2t5/3piiuu6LTs+++/n5555pkxzq+99trVNiPKZNG4LD7jZcPvNhvejoSxYojj9Iv6KVe+Lpd3KwEJSEACEpCABPoSAcWbvvQ0bEu/JoB3Cn94o0w00UQhfJDYd6aZZkrHHXdc5IjZcMMN460zIkKtEV614IILRvLixRZbLL333nu1RTr9TtJjvHt23nnnDmXIh8NxwrEIa+JNOAJRNrxtaDOiDSFViDBM4MYff/zI18Oka4sttkhHHHFEiBn5uvJ2o402iq9LLLFEiBnlc63cJ68PbUOM4pnceeed6bDDDkvHHntsNItJJcJTvXLPP/98hGngUcRE9ze/+U1c/TTT0cdXLPwwgunPffcM0SvepPPVvbde0ugEYFZZ5216mF36623xhiAp8t0002XEHSxLJYgcPbEw+6EE05Iu+66a4gptW1iXOSeG2+8cZp/vnT3XffXVuk+j17MzKmIqoSfoqXIiFg66yzTpSjL8suu2zs89vFK5B68XpkHOjPxguCLFz1537aNwlIQAISkEB/JmDOm/78dO1bnyFAzpu999672h5EkkUXXTS8aPC2WXHFFdPpp5+eeJucQ6mqhf+3g8CSjQlKV41JEhMawh2yMfHKuWo4xtvocq4Jwqhyzhs8hphIPfTQQyH0kGNin332CfGGCdDtt9+eq+2wnXDCCeN7d9rcoaJe/nLjjTemOeaYI976I9QQTkFY12abbZbwKrjyyisjpKNeubPOO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gAQlIQAISkIAEBigBxZsB+uDttgQkIAEJSEACEpCABCQgAQlIQALtQUDxpj2ek62UgAQkIAEJSEACEpCABCQgAQlIYIASULwZoA/ebktAAhKQgAQkIAEJSEACEpCABCTQHgQUb9rjOdlKCUhAAhKQgAQkIAEJSEACEpCABAYoAcWbAfrg7bYEJCABCUhAAhKQgAQkIAEJSEAC7UFA8aY9npOtlIAEJCABCUhAAhKQgAQkIAEJSGCAElC8GaAP3m5LQAISkIAEJCABCUhAAhKQgAQk0B4EFG/a4znZSglIQAISkIAEJCABCUhAAhKQgAQGKAHFmwH64Ad6t++44440evToMTC88MIL6cUXX0z/+c9/0qhRo8Y439mBL774It16663pv/9b8p1sD9y5Mj0f/3f51d1u3jn3zySZfax41ox4gRI7p9z/5w4d13353efffd/tAV+yABCUhAAhKQgAQkIAEJDCACijcD6GHb1a8IrLfeeunJJ5/86sD/9i699NJ02WWXpb/+9a9p1VVXHeN8Zwc+++yztPrqq6d/vOfKdfB/k9/+tP0+eefd3ZZt4+/9dZbafPNN+/S9WeffXYIS126qJ8V5jntuuuu/axXdkcCEpCABCQgAQlIQAIS6O8EFG/6+xO2f10icOCBB6b9999/jGvwdEHQyfbBBx+kl19+OVUqlXyouq2tgzKUrfX4wDPnmWee6VAvleTyr7/+erXOvEMbauvhHF41zz33XPryyy9z0Q7bf/zjH9GvHXfcsXqcumgDffnLX/4Sx/1r3+l559/vlrm448/7iA+wQFRqtZo86uvvhp/+Rz3/PTTT+MrnkwfffRRPhV95hhtoO3c/5VXXqmeL+/gIUU7Mdr397/Pfa554cfflh9Bpz705/+VPV0whuK82UmP/7xj4PTfffdF3X4IQEJSEACEpCABCQgAQlIoB0IKN60w1OyjV8bgUMOOSQNGTKkw/0ef/zxNMMMM6TbbrstjuO5Mc0006SFFloo/fCHP0yvvfZah/K1dSy11FJRljrOOOOMKPv222+neeedN6200kppkUUWSdtss02IDAgOeOvMPvvs4fmzyiqrJMpihx12WJpiiininj/72c/iGB8PP/xwmmWWWdImm2wS111/fXVc3nnzjvvTAgXU089dRxC+Jh55pnj3rPNNluadtppow3TTTddmnvuudPWW28d5ZZYYol0xRVXxD4eRJz73e9+l6uNLQIP/VhggQXScsstl9Zaa62EyLPzzjunY445JsrA5Hvf+17sI6hw7/feey+2P/nJT6rtOPnkkzvUzRfuec8998Tx5ZdfPm266aaxT5ja0ksvHdyon7b/Oc/D0Z/+MMfQhCiv/n5EM421VRTpdVWWy1deOGFUYcfEpCABCQgAQlIQAISkIAE2oGA4k07PCXb2DICjzzySFphhRXS+eefnzbeeOP05z/OSb+eL8gqiC8IBw0MoQWvFBOO+20qmhwySWXhNiBsPDss8+mxx57LEQY7kfOHepmi7BC2b/97W/p0EMPTffff394sCy++OLVWw4bNixttdVW6amnnkrDhw+vmwuHeyA0ZcNLBoFl2223jbqXWWaZaAP3JR/QVVddFUXnmmuuRIgWdt5556Xvf/7aaONNorv+ePoo4+OdsIE7xk8d26/fYQSv79739H/Vm0wsuGfUK+2KcN2223XdwDcQpBptYQXAh3Il8NnPCwwY488sh0xBFHBCcENrx38LxZeOGFE98Rc7DsqXTAAQck/hCkagWoKOiHBL5mAn/84x9jTKm9bc6b1Ru5t6ib3w4eduPCbrnllupvstn6EZjrefA1e327lCPHGOOcJgEJSEACEpCABHqDgOJNb1C0jn5LAJEEr5b1118/+njdddelySabLB1/PFp6NChEcLz6KOPNuw/og+24IILpjfeeCP2EUcQML71rW+liSeeOPLlXH311ZHgGM8bvHSwtddeO1188cUJzxk8UPDiGTRoUPrFL34R5/mgbYgY66yzTggZ7Nfa008/nX7wgx9UDz/xxBNp1llnDeHkG9/4RnrnnXdCHJp00klDBMlCD9s333wz+kk4GZ4x4403XrUezp111lnp8MMPT5NMMkm0DW8XBBZEF8Sb3/72t2mnnXaKa95/10wgknpH333TfRBryXcu4evIGy4FK9QbGDVxDiDcwRX6j7gQceiJAo+k4/8BSizhVXXDEmqvPPP3+0k/oRpB588MH0+9/PsogiDGRdVJVpux+KwgcddRRkSOr9t45bxZhhT3NvUXdu+22W90cX7X37c53xFy86Jo1BKsTTzwxxotmr2nXcoy75BrTJCABCUhAAhKQQG8QULzpDYrW0W8JXH755QnB4Zxzzok+IkYQ8kN4EH94ruD50sjqC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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-13" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.697439Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.697358Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.700057Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.699753Z&quot;}}" data-outputid="861e1b5b-5583-46a8-8d28-e1d51ef00baf" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observed the data when calling our friend</span></span>
<span id="cb3-2">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\</span></span>
<span id="cb3-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Rain'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'NoRain'</span>],</span>
<span id="cb3-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>], <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here logical thinking from what is said in the prompt, to link the observations to each event</span></span>
<span id="cb3-5">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb3-6"></span>
<span id="cb3-7">likelihood</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="3">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>Rain</td>
<td>0.666667</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>NoRain</td>
<td>0.333333</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
</section>
<section id="now-you-combine-both-to-answer-the-question-what-are-the-chances-of-raining-if-eventfriend-telling-rain-happened" class="level2">
<h2 class="anchored" data-anchor-id="now-you-combine-both-to-answer-the-question-what-are-the-chances-of-raining-if-eventfriend-telling-rain-happened">3. Now you combine both to answer the question “What are the chances of Raining if event”Friend telling rain” happened ?</h2>
<p>What you can tell looking at the graph, is the chances of the friend saying “rain” if A or saying “rain” if B.</p>
<p>To apply Bayes Rule and answer the question, you need to restrict the events to only the “rain” - friend” events.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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njj/DmfffbZfHVRP+LHJAEJSEACEpCABCQgAQk0H4GKR0yGDBkSfvSjH4WuXbsGxMYBBxwQTjzxxLDOOuuEzp07h/322y/ssMMO4eijjw4dOnSILX3wwQfjO8LhqquuCmPHjg3XXHNN2GmnncJuu+0Wj02YMCFGOzgPQbHpppuGxRdfPNZz7733hjvuuCOQZ7XVVov503a7du2iqLn00kvDa6+9Fn7961+HTTbZJEZQPvnkk/D6668Hzu/Vq1fo169f6N69eyDigh0bbbRRLMs/EpCABCQgAQlIQAISkMCCEah4xARzF1100fD000+HZ555Jlx33XVRoLD/3HPPDSeffHK46KKLwtVXXx1eeOGFsOuuu4Z77rmHw1EYvPTSS1FkIAyIkvzgBz8IDz/8cOjfv3+44YYbYj7+3H/WHYsGGx7FdffTW/v/gD0ZKll1461puOPfDAA1EoDRo0KJaNIKIsEgLmyiuvnC+Sks71XQISkIAEJCABCUhAAhJoPIGKR0wwkWjGIossEl/LLrtsGD58eLS8b9++cZjUk08+GcUHO4leIBTWWmutsO2228Z8G264YSDysthii4WHHnooipsePXqEr776Kh5HaKy77rrxM3W98cYb8XND/1D/888/HxAmDD3r2LFj2H777ePwL6ImRGKYs2KSgAQkIAEJSEACEpCABJqHQFUiJggF5pcwGZ1hWQzjIrVp0ya+tt566zisin3PPvtsjJTweejQobyFF198MUZSEBCkV155Jeyxxx7xM3+IpHz88cdRqAwePDhst912+WMN+YAIOeigg2JUhyFjm222WfjXv/4Vh24xqf6Xv/xlHErWkLLMIwEJSEACEpCABCQgAQnUT6AqERMmp6+33npxSNeZZ54ZIxCFpp500knhsMMOC0suuWRcYYt5JAzteuqpp8JWW20VszKcivkixx9/fJxnQhSDuR/PPfdcHJq1zz77xEn2e+21V4y2DBw4MIqeVE8SQURu1lhjjfCHP/whHmI/E+N/OMfxwjNe++9F2655ZZoB6t1XXvttWH8+PHhwgsvTEX5LgEJSEACEpCABCQgAQksIIE2uRWmKrrEFEOk/vKXv8T5IKy8xbCrUoljCJgVVlhhnsNEWZZbbrm8yGD4FtEXlhJmta00RIz9rPzFULH6Enl5IW4KE6t9UVeahE+ejz76KE6AZ9K8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DCpEGirkYAEJCABCUhAAhKQgATKE1CYlGfjEQlIQAISkIAEJCABCUigQgQUJhUCbTUSkIAEJCABCUhAAhKQQHkCCpPybDwiAQlIQAISkIAEJCABCVSIgMKkQqCtRgISkIAEJCABCUhAAhIoT0BhUp6NRyQgAQlIQAISkIAEJCCBChFQmFQItNVIQAISkIAEJCABCUhAAuUJKEzKs/GIBCQgAQlIQAISkIAEJFAhAgqTCoG2GglIQAISkIAEJCABCUigPAGFSXk2HpGABCQgAQlIQAISkIAEKkRAYVIh0FYjAQlIQAISkIAEJCABCZQnoDApz8YjEpCABCQgAQlIQAISkECFCChMKgTaaiQgAQlIQAISkIAEJCCB8gQUJuXZeEQCEpCABCQgAQlIQAISqBABhUmFQFuNBCQgAQlIQAISkIAEJFCegMKkPBuPSEACEpCABCQgAQlIQAIVIqAwqRBoq5GABCQgAQlIQAISkIAEyhNQmJRn4xEJSEACEpCABCQgAQlIoEIEFCYVAm01EpCABCQgAQlIQAISkEB5AgqT8mw8IgEJSEACEpCABCQgAQlUiECrFyaffvppePTRR/OvQYMGha+++qpCeL+tZvjw4eGdd95pkTrffPPN8MYbb8xT9vjx48OTTz45z76sbXz99dexT7788svQnHweeeSRMGPGjKw1V3skIAEJSEACEpCABOoh0OqFyYsvvhh23XXX0L9/g64ogjwgorrBAQKE1Jhx56aHj99dcbdeott9wSbr311kad09DMV155Zbjsssvmyf7qq6+GnXbaaZ59WduYPXt27Jfp06eH5uTzox/9KIwdOzZrzdUeCUhAAhKQgAQkIIF6CLSv53irOLzKKquEp59+Ot+WffbZJzrz2267bdw3bty48Pnnn4eNNtoon4cPRFbefffd0LNnz9C2bdswderUWM7+++8f1l9/dC+ffvAHf8PPvggdOrUKSyzzDLxfO7Yt2nTJhAV4PMpp5wyT7ml6ps0aVJYaqmloh3LLbdc6NChwzznNHWj0JaPP/449OjRIyy22GJhzpw5YdasWbGe9957L6y++uph2WWXzVdTysbCsvhMOdg8ceLE2F44s3/kyJFhrbXWCosuumi+PCJXiBDqL06FfOiHwkQZya7PPvss9gFlwDcl2oG93bp1S7t8l4AEJCABCUhAAhKoMQKt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QQcdVK677rrym9/8ps45WWeddcoqq6xStt9+++oBOf3002sY1+c+97n6bj5JN91yyy31OSevetWrqndl0003rdvKs5rXU5/61G72fA6BEAiBEAiBEAiBEAiBviEQYdIHXcG78e53v7t88YtfLJtttlnZcccd68pchx9+eK3dLrvsUpZccsnyhje8oc45sQzwm9/85rLlllvOVvsjjzyy7LnnnjWvA5YK9jBGzz8R+sXzkhQCIRACIRACIRACIRAC/Uggc0z6YI5JuzE8f+Taa6+tYViW/11sscXaoSpUeFOEd62xxhpl+eWXHz7WPli1a9111x2eq9L25z0EQiAEQiAE+oLAaaeVoSUn+6IqqUQIhEAPgaF5ydOdsirXdPdA5/o8J6M9d4RI8dDFsdJo5451To6FQAiEQAiEwAIlsNpqpbzvfQv0krlYCITAOASGnqXXDynCpB96IXUIgRAIgRAIgYWJQOY8Lky9nbb2O4Gh1V77JWWOSb/0ROoRAiEQAiEQAiEQAiEQAgsxgQiThbjz0/QQCIEQCIEQCIEQCIEQ6BcCESb90hOpRwiEQAiEQAiEQAiEQAgsxAQiTBbizk/TQyAEQiAEQiAEQiAEQqBfCESY9EtPpB4hEAIhEAIhEAIhEAIhsBATiDDpg87/7xt/W676yyXDNbn6L5eWP992bbnt7r+Vn19zTrnz3tuHj4334YEHHijnnnvucDZPgz/77LPLHXfcUU455ZTiWSlJIRACIRACIRACpfjNvO+++8o/nP4AiBEOgDAhEm09wJx11waLnoup+WH/33d8vpl5xYa3PuFd8rf73zxnLcBR8vt99zaznqxwfOVksiQ/JFes899wwf+9Of/lTe9KY3FU+Gb+m73/1usX+nnXYqf/3rX+uT5X0JJ4VACIRACITAwk7A7+FVV11VfycXdhZpfwj0A4EIk2nuhVWXf3jZeYN/LxvN2rz85Y7ry/3/+me57/5/lOWXWqHstMEeZc2V16nb3Wq+5z3vKccff3x5+9vfXk499dThQ8stt1x5yUteMrztw1lnnVUe/jHlw9+8INl9913L6usskrhRUkKgRAIgRAIgYWdwP33319uuumm8re/W1hR7FA2v+vf/2r8r7++iF7Z4j97bffXrcNsho8/ctf/lL+8Y9/jFsX+Qy6KuOuu+4qN9xwQ7n33ntrP/75z3+e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y1117l4IMPLu9/vLE5/4xLLLLrvME2nG85Zbbln+9a9/Tfj8O+64o2yzzTblrrvumvA5E834t7/9rZZ90003zXbK2972tvKd73xntn39tnHccceVo48+ulZr3333Lb/61a/mu4pnnHFGOeyww+a7nBQQAiEQAiEQAiEQAiEwuQQiTP6X53777VfOPvvs8pOf/KScc8455cQTTywXX3xxPcqjcdFFF5VbbrllDvp/vOfy4033ji8/rrry+M3+7oPlFw5ZVXlgceeGA4n7KUK/+SSy5Zbr311vLgBz941OvJKw+vilH/yUrqdPPNN9e6XXXVVbU+rWx1dD1tVP+u2HKefddcc03LXt9bu6+44oryj3/8Y7jOvB/3339/vc7VV19dbrjhhtnOc51LLrmk3HnnnbPtbxvf/73y3Of+9wq3lyj+2qeJnXCBtPedN1115Xbbrutd3e2QyAEQiAEQiAEQiAE+oRAhMkIHbHWWmvVvX/961/Ln/70p/KkJz2pPP/5zy8bbbRR2WOPPYYN9Je97GVlk002Keutt1551ateVXg+Xvva19Zzt9122/r+1re+tay22mplgw02KI9/OOHRYXjW2+9dXnEIx5Rfvazn5UVV1yxGs6jXY9o2nDDDcvjHve4wtsxWYnYeehDH1q22mqrssUWW9T6HH744bV42/avv/76ZZ111ik77bRT3U9g7LDDDnWf4zxE6k1UrLrqqkXbHvvYx5bTTz+91hfPpz3taWXWrFllxx13LE95ylPKwx/+8HLsscfW8oTRrbTSSgXP1VdfvXzkIx+Zo3nPetazquA78sgjy2Me85j6ci2vX/611UAbbbZZrWumKorD9S9995b67PGGmtUxh/96EfnKDs7QiAEQiAEQiAEQiAEpp/AotNfhf6owde/vVywAEHlPe85z1VhDz60Y8um266aRFOxJA2Es+DcuGFFxbzM4QVfe1rX6vvRuNXWGGFcumll5aTTz65NojY4DX4whe+UEfwGe6EzXvf+97hBjOaeRwY/i2Ndj3HeRre9773lZNOOqlln7R3gsHcmo997GPlS1/60nC5D3vYw4r2afe3vvWtKp5++tOfFh4QbfK+9tprV07tJNvNO8FbdMIJJ1Svi31LL710EV5GfHz5y1+up2gPwcFjQszss88+rag53omyv/979VjQhS+9KUvraLvm9/8ZllmmWXqdfSVen3lK1+pXjDeLnUlNB/0oAfNUWZ2hEAIhEAIhEAIhEAITD+BCJP/7QNhSjwBSyyxRDX+TbpebLHFqvh49atfXY1eRrW5IAzpJz/5ydVT8tSnPrW8613vqgbyxhtvPFuPMpYJFka4uSsMc4KlpT333LM86lGPapv1ndgZ6XoOGvXfbbfd5jCueQF4U7x+9KMfzVae9kjdMCzb2rrUUkv5WFObU/PMZz5ztknxL3/5y+v1iCpJCNW3v/3t6jHhmZC222672cTM29/+9uGwNB4N3g6igedk5513ruURfi3s65BDDqmCwlyf17zmNbXM8f686U1vKib0H3PMMWXRRRet4sdE/333780jw9Pyqmnnlpe8pKXVE8QrwwhkxQCIRACIRACIRACIdB/BDJ8/L99wmAlCHqTUKfuKLt5F4985CPrPp4T81HMKTH/wbtQq5YYzoTH5ptvXnd574oBoqU3jXY9+RjWIyWhVEKtpPbe8q2yyipl+eWXr96bFqJmLgbh1a2reS7SIoss0k6t721/d+ftt99ew6LaPnUmQFpqc2VsEyDdtOyyy3Y362chbTwzr3vd62o41wte8II58nR3HHrooeWUU04pP/5z0srTxgdsdhYP/vZz679xBPT5WyuTlIIhEAIhEAIhEAIhED/EYjHZJw+MXdEaJP5CpdddlkN1WJIn3nmmTXUiwEs/MmcC8vQNsPe6L15DsK5eBvMxSBcjPCPlUa73ljnMMi33377+jJHozeZK2IlKm0wUfyII44oxMUTnvCE3qwT2hb2xWtkkrnwKHxcf14SQSFMTAgdhsTGWEmol3AuixOYu2OCPW8QbkLRnve851UPzYEHHljLUlchaI6Z5N9C7ca6Ro6FQAiEQAiEQAiEQAgseALxmPwv8yYoertg9913L0bwjegz5nlVTGTndVh55ZXLcsstVyd6G5WXl4eCwc9TYLUugkTIE68Fb4a5LGOl0a5HCM1r+uxnP1te+MIXDnsX1MVSwTwwvSuNjcahe21ijPelhXLh8cpXvrKbZdzP7Tr4vfOd76wT6DHEi/dFeNziiy8+RzkHHXRQ3UdstURs8HgdddRRdfK8flKfFhYmBG7NNdes2fVlu3Y7P+8hEAIhEAIhEAIhEALTT2CRIQP7gemvRn/XgJfBUrqECOHRTZbMNX/CKlMtQco4biFNPAu2CRPzIcZLY11vvHPHOs5jYJ4L0TS/xrk28kJ4Z/TPb3kmyQsbI054m4RcEVBzk3hOTHxXDjHSkjpaOEDfdcO62vG8h0AIhEAIhEAIhEAITD+BCJPp74PUIARCIARCIARCIARCIAQWegLjD98v9IgCIARCIARCIARCIARCIARCYKoJRJhMNeGUHwIhEAIhEAIhEAIhEAIhMC6BCJNxESVDCIRACIRACIRACIRACITAVBOIMJlqwik/BEIgBEIgBEIgBEIgBEJgXAIRJuMiSoYQCIEQCIEQCIEQCIEQCIGpJhBhMtWEU34IhEAIhEAIhEAIhEAIhMC4BCJMxkWUDCEQAiEQAiEQAiEQAiEQAlNNIMJkqgmn/BAIgRAIgRAIgRAIgRAIgXEJRJiMiygZQiAEQiAEQiAEQiAEQiAEpppAhMlUE075IRACIRACIRACIRACIRAC4xKIMBkXUTKEQAiEQAiEQAiEQAiEQAhMNYEIk6kmnPJDIARCIARCIARCIARCIATGJRBhMi6iZAiBEAiBEAiBEAiBEAiBEJhqAhEmU0045YdACIRACIRACIRACIRACIxLIMJkXETJEAIhEAIhEAIhEAIhEAIhMNUEIkymmnDKD4EQCIEQCIEQCIEQCIEQGJdAhMm4iJIhBEIgBEIgBEIgBEIgBEJgqglEmEw14ZQfAiEQAiEQAiEQAiEQAiEwLoEIk3ERJUMIhEAIhEAIhEAIhEAIhMBUE/j/AaiFO3mbL1DvAAAAAElFTkSuQmCC" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABCwAAAEwCAYAAAB8PuDXAAAAAXNSR0IArs4c6QAAAGJlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJKGAAcAAAASAAAAUKABAAMAAAABAAEAAKACAAQAAAABAAAELKADAAQAAAABAAABMAAAAABBU0NJSQAAAFNjcmVlbnNob3Ryf6zMAAAB12lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMDQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTA2ODwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1lbnQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrywMulAABAAElEQVR4AeydB5gUVdaGDyYUJQgqoigo6iqKoiKKiiCYE5gDBsxhddk1rGENGP41grtrAFfXuK5ZDCAmBBUTKoiYRRADRgREEOP89V487aXomelJPd0933memUq3bnirqqvOueee26gsEZOIgAiIgAiIgAiIgAiIgAiIgAiIgAiIQAERWKyA6qKqiIAIiIAIiIAIiIAIiIAIiIAIiIAIiEAgIIOFbgQREAEREAEREAEREAEREAEREAEREIGCIyCDRcFdElVIBERABERABERABERABERABERABERABgvdAyIgAiIgAiIgAiIgAiIgAiIgAiIgAgVHQAaLgrskqpAIiIAIiIAIiIAIiIAIiIAIiIAIiIAMFroHREAEREAEREAEREAEREAEREAEREAECo6ADBYFd0lUIREQAREQAREQAREQAREQAREQAREQARksdA+IgAiIgAiIgAiIgAiIgAiIgAiIgAgUHAEZLArukqhCIiACIiACIiACIiACIiACIiACIiACMljoHhABERABERABERABERABERABERABESg4AjJYFNwlUYVEQAREQAREQAREQAREQAREQAREQARksNA9IAIiIAIiIAIiIAIiIAIiIAIiIAIiUHAEZLAouEuiComACIiACIiACIiACIiACIiACIiACMhgoXtABERABERABERABERABERABERABESg4AjIYFFwl0QVEgEREAEREAEREAEREAEREAEREAERkMFC94AIiIAIiIAIiIAIiIAIiIAIiIAIiEDBEZDBouAuiSokAiIgAiIgAiIgAiIgAiIgAiIgAiIgg4XuAREQAREQAREQAREQAREQAREQAREQgYIjIINFwV0SVUgEREAEREAEREAEREAEREAEREAEREAGC90DIiACIiACIiACIiACIiACIiACIiACBUdABouCuySqkAiIgAiIgAiIgAiIgAiIgAiIgAiIgAwWugdEQAREQAREQAREQAREQAREQAREQAQKjoAMFgV3SVQhERABERABERABERABERABERABERABGSx0D4iACIiACIiACIiACIiACIiACIiACBQcARksCu6SqEIiIAIiIAIiIAIiIAIiIAIiIAIiIAIyWNTBPdCvXz8bP358lXIeNGiQ3XTTTVnPOfnkk+3RRx+1X375xXbaaSf7+OOP7eabb7bLL788pP/qq6/siy++COvx/qyZaacIiIAIiIAIiIAIiIAIiIAIiIAIFAGBJYqgjkVXxRdffNFmzZpVpXpPnjzZVl555aznrLnmmrb88stbWVmZPfbYYzZ37lxr3bq1LbnkkiH9pZdeat9/71dc801C+3Pmpl2ioAIiIAIiIAIiIAIiIAIiIAIiEAREJDBIrpI8+bNswcffNA233xzGzFihC222GJ20EEHBWPBhAkTglEAL4fPP/c9t13X3vnnXdC+h9/NF23XVX22STTTK5zZgxw66++mr79ttvrW/fvtaxY8dwjDJGjx5t5LfBBhtYz549rUWLFuHYzz/bLfffrthvNhqq61su+22C/vXWWcda9WqVSZvVlZZZRVr3rx5qMPrr79u8+fPt+effz6z3xNz7Iknnghl7LbbbsGgwbGZM2cGr43333/funfvbttuu62foqUIiIAIiIAIiIAIiIAIiIAIiIAI1DsBDQmJLsE333wTDBQ9evSwKVOm2C233BIMCiR55JFHwnCMbbbZxqZOnWp4Uay33npB6Uf533TTTe2BBx7I5LbffvuFY+xbf/31bdq0aeHY4YcfbgzxwCPi73/ux177LGZcy666CK77LLLbOLEibb99tvbPffcE45dcMEF9uyzz2bSsXL/ffb0KFDjTozHAQDyfTp0zP7SUPZG220kY0bNy6UteGGG9qHH35oP/30k3Xp0sWGDx8ejC99+vRZqO6cKxEBERABERABERABERABERABERCB+iQgD4ss9P/5z3/aXnvtZXPmzLFVV13V3njjjZCK7a+/jp4O+yyyy525JFH2g033BCOrbDCCnbeeecFbwp2HHfccTZkyJAwjAMDCAaP448/3lq2bGmPP/64tWvXznbeeefg3XDrrbeGPBj6gbECwUiBwQJPjopkyy23DMYNDCD77LOPTZo0KZMcYwhxLk499dRgpCD+BXEyMKZgkLnzzjtts802C2394YcfMudpRQREQAREQAREQAREQAREQAREQATqm4A8LLJcgW7duoW9TZs2NQwCDKlA9t5778zQjLFjxwZDQTiQ/Ovatasx/MIFgwbSqFGjkI7YEwgGiNNOOy14XTAUA/n111/Dcs899wxL/mHkwGDhxzIHclwhEOeXX34ZDBR4hfTu3TsYXt57771Qdv/+/UOd8QxhKAnDYCQiIAIiIAIiIAIiIAIiIAIiIAIiUCgE5GGR5UrERoI333wzeCQQe6Jx48aZ1Ouuu6599913me2PPvooxJ3wHcS1cGGoBsNHWGI4OP/888MfcSfiuBfxOZ999lnwfiCORnXEA3L++c9/ti222CJkQTwNjDB4YwwePNjOPffcEE+DGUqIy3HttddWpyidIwIiIAIiIAIiIAIiIAIiIAIiIAK1TqB62nCtV6OwMmRqUGbkIAbEJ598EuI9pGvIsApiXGCEIKbFjTfeaMSCcLn++uuDYYDgmsSbYDgG8SMQhousvfbadtttt4VtykLuuuuuUB7GCvLbfffdw/7K/i2++OIhuGecjkCeGEPwnlhjjTVs2WWXtSOOOMKeeeaZMOwEgwsGGPYdeOCBIdBnfL7WRUAEREAEREAEREAEREAEREAERKA+CcjDIgt9DAxnn3128EYgBgTBKglQGXs79OvXLxgciHGBEAvi0EMPzeSG90WTJk3C9gEHHBC8LzAsELeCKUnxdGBYxkorrRQMGBgUiGux2mqrhXOYVYQYGS4MLXHxda8PQ0swbhBHo1mzZpl6Eq+C2UsoC8Ggcswxx9hSSy0VhpxQ97Zt24Z6YiCRiIAIiIAIiIAIiIAIiIAIiIAIiEChEGiU9O4v6N4vlBrVYz3wpsBgMGvWLJs9e7atuOKKtswyy5RbI6Y4xbsCAwDnuSHBT2D2EIZ5YKCI5eOPPw7BNzFSEOySIRo+tSnDRJj1Y/XVV18kvziP9DoBQalHPGyFNEyVyjSpyy23XDBOxOcxcwn1w9tDIgIiIAIiIAIiIAIiIAIiIAIiIAKFREAGi+hquMECYwWeChIREAEREAEREAEREAEREAEREAEREIH6IaAYFhH35s2b2yWXXGJLL710tFerIiACIiACIiACIiACIiACIiACIiAC+SYgD4t8E1d5IiACIiACIiACIiACIiACIiACIiAClRKQh0WliJRABERABERABERABERABERABERABEQg3wRksMg3cZUnAiIgAiIgAiIgAiIgAiIgAiIgAiJQKQEZLCpFpAQiIAIiIAIiIAIiIAIiIAIiIAIiIAL5JiCDRb6JqzwREAEREAEREAEREAEREAEREAEREIFKCchgUSkiJRABERABERABERABERABERABERABEcg3ARks8k1c5YmACIiACIiACIiACIiACIiACIiACFRKQAaLShEpgQiIgAiIgAiIgAiIgAiIgAiIgAiIQL4JyGCRb+IqTwREQAREQAREQAREQAREQAREQAREoFICMlhUikgJREAEREAEREAEREAEREAEREAEREAE8k1ABot8E6+gvIEDB1ZwVIdEQAREQAREQAREQAREQAREQAREoOEQkMGigK71+eefbzJaFNAFUVVEQAREQAREQAREQAREQAREQATqjYAMFvWGfuGC3VCB0UIiAiIgAiIgAiIgAiIgAiIgAiIgAg2dQKOyRBo6hEJof6NGjUI1WrRoYQMGDJCnRSFcFNVBBERABERABERABERABERABESg3gjIYFFv6H8vGO+KtGeF7Ei/89GaCIiACIiACIiACIiACIiACIhAwyMgg0UBXHP3rvCqyMvCSWgpAiIgAiIgAiIgAiIgAiIgAiLQUAnIYFHPVz6bd4VXSV4WTkJLERABERABERABERABERABERCBhkZABot6vuJp7wqvjrwsnISWIiACIiACIiACIiACIiACIiACDZGAZgmpx6vuM4NQhc6dO1urVq3swAMPDDWaNWvWInEt6rGqKloEREAEREAEREAEREAEREAEREAE8kpABou84l64MAJtYqgYPXq0TZgwwRo3bhwMFgwFOe+880Li2Kix8NnaEgEREAEREAEREAEREAEREAEREIHSJSCDRT1d2zFjxmQMFT179lykFhgqFMNiESzaIQIiIAIiIAIiIAIiIAIiIAIi0EAILNFA2llwzcxmpMhWSXlYZKOifSIgAiIgAiIgAiIgAiIgAiIgAqVOQB4WpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AnIYFHqV1jtEwEREAEREAEREAEREAEREAEREIEiJCCDRRFeNFVZBERABERABERABERABERABERABEqdgAwWpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AnIYFHqV1jtEwEREAEREAEREAEREAEREAEREIEiJCCDRRFeNFVZBERABERABERABERABERABERABEqdgAwWpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AnIYFHqV1jtEwEREAEREAEREAEREAEREAEREIEiJCCDRRFeNFVZBERABERABERABERABERABERABEqdgAwWpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AnIYFHqV1jtEwEREAEREAEREAEREAEREAEREIEiJCCDRRFeNFVZBERABERABERABERABERABERABEqdgAwWpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AnIYFHqV1jtEwEREAEREAEREAEREAEREAEREIEiJCCDRRFeNFVZBERABERABERABERABERABERABEqdgAwWpX6F1T4REAEREAEREAEREAEREAEREAERKEICMlgU4UVTlUVABERABERABERABERABERABESg1AksUeoNVPtql8CLU560F6c8YU2WWs62XnsX69hm01DApE9fsjc+HWcrLLeysd58mVbWa92+tsYK61W5AnPmzLEDDzzQhg8fnjl3zJgxNnLkSDv44IPtvPPOs3nz5oV1tiUiIAIiIAIiIAIiIAIiIAIiIAKlR0AeFqV3TeusRbPmfW1Pvn2vbb3Wztatww52/jr7Yef54fyJn78gq3Sor29Ou0Z26VTP1trpQ1s2IT/LFKX6dOnB2MDB2bNmmUzZ85cKM1dd91lPXv2tBEjRiy0/6GHHrLdd9/dDjjgAOvRo4cNHjzYLrzwQnvxxRcXSqcNERABERABERABERABERABERCB0iAgg0VpXMe8tOLb+TNt03Y9rEv7nrZem01CmbO/n2FlZb/ap7OmJt4Uf7CdOx1k6668cfDA+PmXnxep1zXXXGP9+/cPRotNN93Uxo8fv1CaLl262GWXXbbQvl9/dVGjRplpN9mm21swIAB1rFjR+vUqZNNnTp1obTaEAEREAEREAEREAEREAEREAERKA0CGhJSGtcxL61YveXaxt/s77+xO8ZdlQz/aGMrNV3V3v9yUliu3nKd5LjZf8ZebNNnfWhrt95wkXqde+651rVr1+BF0adPH+vdu/dCaTp06GCtW7deaN+rr75qW265pS2zzDI2ZMgQ+/HHH23QoEE2YcIEu/XWWxdKqw0REAEREAEREAERqJRA8m1hidenRAREQAQKgkDiSS7JTkAGi+xctLccAhM/ft5GTLo9eFps33GfkOq1j56zjVbrlhgyZtjiiy1hR259pn0++2O7/tmL7Ju5X1rLZVfK5Na4cWM7+uij7aSTTrLbb789s7+ilYcfftgwbiDTpk2zPfbYIxg6MFg0adKkolN1TAREQAREQAREQASyE0i+J2yVVbIf014REAERyBeBxIs8Gfuer9KKrhwZLIruktVfhT+b/ZENf/02O7bHeSG4ptdk6tfvWJ/Oh9tLU0fZ5MTb4vCt/poE3WxpizVazJZcfClPFpbEsCD2xIknnhiMFgTSbNSo0UJp0hvEszjrrLOSoSdl1qtXL7vuuutsu+22SyfTtgiIgAiIgAiIgAhUjcCnn1YtvVKLgAiIQG0SOP98Mzy+JOUSkMGiXDQ6kCbwzucT7NckXsV1TycP1m+y4/r7B+PEUks0tk1W726vfTzWLhn5p3C082pbWdOlW3jSsDzuuOPslFNOCX8Ez7z++uvtmGOOWShNvPHOO+/Yuuuua0svvbRNnjzZpkyZYv369cskufjii+2II47IbGtFBERABERABERABERABERABESgNAg0Snqty0qjKcXfilVXXdWGDh0aZsMo5tYQ42K5xs3C8JBibofqLgIiIAIiIAIiUKIE6NFMAn0n7psl2kA1SwREoCgIuIdFMiOiJDsBeVhk56K9NSDAcBCJCIiACIiACIiACIiACIiACIiACNSEgKY1rQk9nSsCIiACIiACIiACIiACIiACIiACIlAnBGSwqBOsylQEREAEREAEREAEREAEREAEREAERKAmBGSwqAk9nSsCIiACIiACIiACIiACIiACIiACIlAnBGSwqBOsylQEREAEREAEREAEREAEREAEREAERKAmBBR0syb0GtC5d758TRJIu7AjaTdqZLZrp4MXmUq1AV0mNVUEREAEREAEREAEREAEREAESoaADBYlcynrtiHTZ31o7VqtV7eF1DD3t6a/ZNaphpnodBEQAREQAREQAREQAREQAREQgYIgIINFQVyG4qhEi2VXsjYt1ijIys7/aa4Fg0VB1k6VEgEREAEREAEREIGaE/jpp5/soYcesi5duli7du1qnqFyEAEREIECJ6AYFgV+gVQ9ERABERABERABERABEYDAnDlz7I033rD3339fQERABESgQRCQh0WDuMz5beS8ufNsscUWs3nzvreWrZavsPCZ38y05i2ah/RxwqrkEZ+ndREQAREQAREQAREoVQItW7a0k08+2ZZZZplSbWKDa9ezzz5rH3zwge2666624oor2qRJk+yFF16wgw8+OBioXn75ZZs5c6YdcsghObOZNm2avf7668bymGOOCXHobr/9dttoo41s0003taefftqmTp1qq622mvXu3TvnfKubkLJeeeUVmzFjhvXv39+WXnrp6mal8xogAXlYNMCLXtdNHnH/CHvq0afs9BP+WmlR114xxObOmbtIuqrkscjJ2iECIiACIiACIiACBUyAQOYezDy99Gr7frY9PcvlllvOllhi4T5HT+vLOA/fx9LX/biW9U+gbdu29uGHH9qPP/4YKvP111/bxx9/HLaXX355mzt3blD0q1LT1q1bh87AWbNm2a+/moMJaKMr776KmSz4YYb2uzZs5POxXlVybbaaVdZZRVr0aKFeX2qnZFObJAEFv61a5AI1OjaJrBs0+WSH6Xm1mL5Fvbl51/amxPftCmTp1r/Yw+z4Ykx49OPPrHuvbtbp4072eZbdbUlGy9lD9873H755Wf76cefbI/99rA4j9qun/ITAREQAREQAREQgfoi8Msvv9jEiROD8oiySu85Pc9NmzYNvd/NmzcPit0777wTFM111lnHXnvtNVthhRWCZ8WXX35pK6+8sq277rqhCSij9MKjgC6++OLWsWNHI1/kzTfftM8/9y6du0ahpJ89913ts0226iHO9ApjH+rrrqqNWKqu9+E67P55ptbkyZNwh6u5WeffeaHc1riwYDRwgUj11lnnZUxdGE88Pw9TV0uGzdubHgHxe2sy/KUd2kRkIdFaV3PgmjNxpt1tj+s/wc79NhD7YvPvrDT/3iGtVqhpT0+4gl77+33bNsdt7W/DTjbfvn5F7vr1rtsXmI5PuPEM6xx8uP6eZIer4s4j4JolCohAiIgAiIgAiIgArVAAKXthx9+sFdffdVGjBgRPCa6d+8eDAvXX399MDzMnz/f3nrrLRs7dqyNHj3allxySXvqqafCMdz5P/nkk1AT8vnPf/4TDBzbbrttMGLcc8899t5774XjpCOP+++/PwwvcENJLTRDWdQSgViJxwOG7aWWWirjDcMwaxeO4zERe8qwzh+GsHh/+jzyjPd5ueT3888/h3y9HF+SH8fJm2Va/Fi6bNL5ueXlnc5L2yJQHoF68bBgnNZ9991njz32WHAP2mqrrez444+vdDzeww8/bA888ICNGzfONt54Y9tuu+3CH25GLoz7uuGGG4KlmX1Yn48++mjr1q2bJwkP3bXXXmvPPPNMcI+ifH7kGcOFBVJSMwJtVm0TMmi1YiubNGGS7dx3Z+u7f1+b8dUMe/fNd+36f91gH7z3Qcb1jcQd1ulgO/fZyaa8PyU5fr3FedSsNjpbBERABERABERABAqHAErjZpttZhMmTLA11ljDOnfuHCq3++672+DBg4Mho1evXuEb96abbgreEe3bt8/0uj/POZnmoMEF988UUmLsDqq69uG2ywgQ0fPtxOOOEE69mzp7300ku20kor2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gIpViFfnhlYiACIiACIiACIiACIiACIiACIhAeQRksCiPjPbXOQF5WNQ5YhUgAiIgAiIgAiIgAiIgAiIgAkVLQAaLor10xV1xDQkp7uun2ouACIiACIiACIiACIiACIhAXROQwaKuCSv/rARksMiKRTtFQAREQAREQAREQAREQAREQAR+IyCDhW6FeiGgGBb1gl2FioAIiIAIiIAIiIAIiIAIiEDREJDBomguVelVVDEsSu+aqkUiIAIiIAIiIAIiIAIiIAIiUFsEZLCoLZLKp0oENCSkSriUWAREQAREQAREQAREQAREQAQaHAEZLBrcJS+MBmtISGFcB9VCBERABERABERABERABERABAqVgAwWhXplSrxe8rAo8Qus5omACIiACIiACIiACIiACIhADQnIYFFDgDq9+gQUw6L67HSmCIiACIiACIiACIiACIiACJQ6ARksSv0KF2j75GFRoBdG1RIBERABERABERABERABERCBAiEgg0WBXIiGVg3FsGhoV1ztFQEREAEREAEREAEREAEREIGqEZDBomq8lLoWCWhISC3CVFYiIAIiIAIiIAIiIAIiIAIiUGIEZLAosQtaLM3RkJBiuVKqpwiIgAiIgAiIgAiIgAiIgAjUDwEZLOqHe4MvtVQMFj179mzw11IAREAEREAEREAEREAEREAERKAuCMhgURdUlWelBBTDolJESiACIiACIiACIiACIiACIiACDZqADBYN+vLXb+MVw6J++at0ERABERABERABERABERABEShkAjJYFPLVKeG6FfuQkDFjxpTw1VHTREAEREAEREAEREAEREAERKD+CchgUf/XoEHWQENCGuRlz6nRAwcOzCmdEomACIiACIiACIiACIiACJQ2ARksSvv6Fmzrit3DomDBlkDFnn76acNoIcNFCVxMNUEEREAEREAEREAEREAEakBgiRqcq1NFoEYEFMOiRvhK9uTzzjvPtt1224XaJ+PFQji0IQIiIAIiIAIiIAIiIAINgoAMFg3iMhdeI+VhUXjXpFBqxFSxnTt3ttdee+3/27vzaJvKP47jX0qKktKAkkiG5pXmTGVsUBo0ioalonRDpbRKaJKKpFmraa0SEUkjJaSZZKUSjTKEojQour/9+a7fPuvc61x34N6799nvZy3nnD2d/Tyv5/pjf8/zfB8bOHBgnmoRuMjDwQYCCCCAAAIIIIAAAlktQMAiq7s3uo0jh0V0+yYKNRs2bFieURYELqLQK9QBAQQQQAABBBBAAIGyFagQDMvPLdtbcreCBGrUqGENGjSw3XffvaBTsmb/ypUrbd68eXkeSuPUuFWrVtmsWbOsY8eOcap2rOo6ffp0W7NmTcY6a9qICiMuMvKwEwEEEEAAAQQQQACBrBBghEWEuvHJJ5+02bNnR6hGpVuV9u3bl+4NSvnb27VrV8p3SPbXT5o0aSOA6tWr2+rVq30/wYqNeNiBAAIIIIAAAggggEBWCTDCIqu6k8YgkB0CCkakTwMJAxUaWUGgIjv6mFYggAACCCCAAAIIIFCYAAGLwoQ4jgACZS4Q5jghUFHm9NwQAQQQQAABBBBAAIHICDAlJDJdQUUQQEAC6SMocnJy8mwjhAACCCCAAAIIIIAAAskRYIRFcvqaliIQCwGNrmDqRyy6ikoigAACCCCAAAIIIFCqAoywKFVevhwBBIorwMJFxRXjfAQQQAABBBBAAAEEslOgYnY2i1YhgAACCCCAAAIIIIAAAggggECcBQhYxLn3qDsCCCCAAAIIIIAAAggggAACWSpAwCJLO5ZmIYAAAggggAACCCCAAAIIIBBnAQIWce496o4AAggggAACCCCAAAIIIIBAlgoQsMjSjqVZCCCAAAIIIIAAAggggAACCMRZgFVC4tx7Ean7okWLbNy4cRvVpk6dOnbMMcdY3bp1NzqWace8efPs1VdftT59+tjWW2+ZP82xY8fat99+a126dLHatWvnue2oUaNszz33tA4dOuTZn2ljS7Vx9erV9uijj1rnzp2tXr16mW7FPgQQQAABBBBAAAEEEEAAgUCgQrCEYC4SCGyOgIIMJ554ou222262/fbb+1f9888/tnjxYv88YcIEO/XUUwu9xdNPP23dunWzP/74w6pUqVLo+UU54eSTT7bJkyfbGWecYS+88EKeSxo1amTHH3+8PfTQQ3n2Z9rYUm1U4KNBgwb25ptvWps2bTLdin0IIIAAAggggAACCCCAAAKBAFNC+DPYYgITJ040PZDr348/mhLly61+vXrW/+/Yt0j7POOsuWLVu2xYIV6TfVCJCXX345fVeJPm9uG/fee29vY4sWLUp0fy5CAAEEEEAAAQQQQAABBJIiQMAiKT1dDu2sWbOm6cF8/vz59t9/3kNPvzwQ+vdu7cdfPDBpgDFAw88YBqNofLRRx9Zv379fHv58uV+fNasWXbppZemzv/iiy/83OK8HHvssXbQQQdZjx49bO3atQVeqlEUmh6yzz77+IiRadOmFXhueCBTGxWsGTRokDVr1szatWtnt956qy1ZssQvWbVqlbdxwYIFvq06vfjiizZw4EA7+uij/f6TJk0Kv573fAIrVqww/W1QEEAAAQQQQAABBBBAIPsFCFhkfx+XWwv1cK6RDa1atbKKFSv6Q/uRRx5p06dPt4svvtjzR1x55ZV29913ex2Va+Kpp56y9evXe2BB+ScUbFizZo1/h7Y7depU7PZUrlzZHn/8cZ+iMnjw4IzXK2igaS277rqrXX/99Z5D47jjjrOpU6dmPD/cmb+N2q9pKArEKFjRsmVLu+uuu+yCCy7wS37/Xdvo0aSqIwfP95OP/10n7ZywgknmAI0p5xyiv30009+nJe8AkOGDPFgUN69bCGAAAIIIIAAAggggEA2CmyZzIbZKEObii1wxRVXWPXq1f06JZecPXu27bDDDvbwww/7Po08UM4IBR523nln3/fOO+/Y3LlzC7xXr169bMSIEX68YcOGpgDHb7/9ZtWqVSvwmkwHDjvsME/mqeDBeeed5yM20s+75pprrHnz5vbMM8/47osuusiaNm1qAwYMsNatW6dOLayNf/75p+2yyy5eZwUrVBSkePDBB1Pfkf+DRn8oUKFEo8r1ccghh5gSkO6xxx75T4309meffea5OfQ3oKDN7rvvblOmTLGtttrKFPxR0d+FgkNnnnmm/2289tprNmfOHM/r0bFjR9t2223tk08+sX/ddk+f7775tyjSgHyZdffmm6x99/+1eGpGiv7HXX3/d/+7OPfdc22mnnSJtROUQQAABBBBAAAEEEECg6AKMsCi6FWcWItC4cWM7/PDD/Z9WB9GDuB7WZ86c6VdqdIUScL700kvWt29fn/6gB85N5X1t37596q6aqqGycuXK1L7ifNC0C60K0r17d9uwYUPqUgVAvvnmG0u/l4IHClToATm9FNZGJQvVA7Smntx4442mh2iNCthU0ciKcFUU5fxQ0dSHOBX1q6b5aMrP7bff7n3/3XffmabwnHPOOakpQQpW3HzzzVa1alVTkEjTgjQ95pJLLvERKRpdo78PjU659tpr7fPPP/fgxhNPPGG/PKLTwfRqBZ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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-18" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.701138Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.701071Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.703712Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.703421Z&quot;}}" data-outputid="1649df1a-5fd1-4fa5-d7e6-b61d16bb7bc2" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">bayes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.concat([probabilities, likelihood.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>])], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb4-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="4">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>Rain</td>
<td>0.5</td>
<td>0.666667</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>NoRain</td>
<td>0.5</td>
<td>0.333333</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-19" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.704609Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.704546Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.707147Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.706747Z&quot;}}" data-outputid="dc0eb8f4-988c-4a43-8989-bbdafebc4d2c" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb5-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="5">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>Rain</td>
<td>0.5</td>
<td>0.666667</td>
<td>0.333333</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>NoRain</td>
<td>0.5</td>
<td>0.333333</td>
<td>0.166667</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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/H8+fM9Kmy5dt68efG8NmzYYBs3brQffvgh5OuJhw8fbiVKlLBff/01pOWY8NZbb9no0aOtUqVKhjLjAaVl4cKFfhi2K1eutGXLlm0XpwMREAEREAEREAEREAEREIGsCaSlQnLRRRdZ7dq1rXPnznbaaacFxeS1116zU045xU444QRD8ejYsaOdf/75wSry73/O7Ru8eLF4TriL7zwwqDUjBgxwo477ji7/fbbrUaNGrZ69eqQtlu3bta6dWs76qijjDSEunXrxpUdP0aRefPNN+2FF16wjz76yNq3bx/SDh482M444wxr1KiRtWzZMlzXr18/u+CCC4IV5Y477gjp9E8EREAEREAEREAEREAERCA5gbRUSKjubbfdZu+++65dc801hvBPKF++vGH9WLBgQbBMTJkyxb744gt76KGHgqsVad5++237/PPPDSvIf/732BVwdLRt29fq1q1alAqSIci8cknn1j/v2tT58+RGUZjjjiCLvqqqusS5cuVrly5ZAGq82dd95p7733nn311VehrLFjx9rAgQOtTZs2NmrUKKtevXrcIpNlxooUAREQAREQAREQAREQARGwtFVIatasGbrn6KOPtgkTJoR9lIhSpUrZuHHjrF69elasWDE74IADrGTJksGKUqZMmWAxIR4LC/M+mBOCteSyyy4LaXAFI9SvXz9ssbig2OQmfPfdd/btt98GS8gf/vCHYHXBBez+++8P7l2HH354UFSoh4IIiIAIiIAIiIAIiIAIiEByAmmrkLgSgpvUOeecE1rgAj6uVSgRWCoWLVoUrCBVqlSxVatWBaWDuR0TJ060Bg0a2F133RUmsON2RbyHadOmhV0mrDdv3tyjk25dkSEBlpZq1aoF5WPMmDHhesp/6aWXbNCgQfb9998HawlzYBREQAREQAREQAREQAREQASSEyiZ/FRqz/Tu3dueeuqpUImpU6faG2+8Ea8QCkm5cuWsVq1awTryr3/9K5zDQsJ8Dia/YxVhfgjuVp06dbLSpUsH68mzzz4brCMffvhhsLJw4dNPPx3PO6sdrCg33nijPfPMM+F08eLFrXv37vHrWY2ra9euduihh9qxxx4bVulifgmT4BVEQAREQAREQAREQAREQASSEygWszL8bxmr5GkK/EyTJk3skUcesQMPPNAOOeSQpOX/9ttvVrZsWUNB8IAVZM2aNbb/vt7VFg1i2PcvVasWBE/x2pYXO+Wl/gFWeyw8tdee+21XVoUH1bkwkXLAxPrWamLuiuIgAiIgAiIgAiIgAiIgAhkTyAtLSTMCUHJyE4ZoVlYSRID10aVEc4fdNBB8WTRc8w/yWnAwpIYUFCiygjnmXivIAIiIAIiIAIiIAIiIAIikDMCaWkhyVnVlUoEREAEREAEREAEREAERCDTCWzzdcr0lqj+IiACIiACIiACIiACIiACGUdACknGdZkqLAIiIAIiIAIiIAIiIAKFh4AUksLTl2qJCIiACIiACIiACIiACGQcASkkGddlqrAIiIAIiIAIiIAIiIAIFB4CUkjSqC9ZQjj68Uav2oYNG4wlincW+Hjj2rVrd5ZM50VABERABERABERABEQgbQhIIUmDrpg9e7adeuqpdvDBB4evwA8bNixeq7/e9h2WKWOK5fv77xPRS+SM8X6M8991zjC/Qe+FL8gAED/FBbERABERABERABERABEUh7AlJIUtxFfJeyXbt2VqdOHVu+fLndfffd9te/jXUavTo0eFr9cOHD7eff/45KCIoKy+/HJI++CDD4YvxC9ZsiRYRl5/fXwZfoUN0nFi4AIiIAIiIAIiIAIiECOCRTZ75BgSeAjiU2bNs0xrPxIuHDhQjvssMNszpw5xpffjzzySOML9BUrVrQbbrjBUFhQUnDHKlOmTPgKfM+ePa169epBkTnzzDOtX79+9tZbb1mtWrWsefPm+VFN5SkCIiACIiACIiACIiAC+UKgSFpI1qxZY23btrU77rgjX6DmJtPvvvsuJG/YsKHVq1cvfOl9zJgxIW7mzJn2zjvvBIWlUqVK1qpVKytWrJh17NjRHn/8cTv00EPt5JNPDi5dU6ZMkTKSG/BKKwIiIAIiIAIiIAIikBYEiqRC8uSTT4a5GN9/7299957Ke2IRYsWhfIfeeQRW7FiRVA0UJSwiMyfPz8oHatXr7bFixcHN60hQ4ZYtWrVbPr06fbtt98Gl67evXvbPffcY3379jUUlwsuuMDmzZuX0napcBEQAREQAREQAREQARHICYEip5BgHenVq1dggwLQo0ePnHDKtzQVKlQIeaNEYP246KKLgiLy008/2eGHH24tWrSwffbZJ0x4b9y4sY0fPz5eF1zOcPVi7knVqlUNxQRFhbywoCiIgAiIgAiIgAiIgAiIQLoTKHIKCdaRlStXxvvl66+/tlGjRsWPC3rnhBNOCHNDBg4cGKwibHHDOuKIIww3rqFDh9rSpUuNievvvvuuXXjhhdtVsXv37tatW7d4HJYV/hREQAREQAREQAREQAREIBMIFCmFJGod8c7BSnLvvff6YYFvDzjgAHvhhRfsmmuusbJly9r1118fLB1U5KabbrIDDzwwzBEpX758sII0adIkXsfJkycHKwrWEZYFZing2rVr28iRI8O18YTaEQEREAEREAEREAEREIE0JVCkVtlC8cBFCxcoJoSzZQ4HFhMsEVFhv6D7iw8a4qaFZWSvvfbarnjiS5QoEVbeip5gKeD99tsvtCMar30REAEREAEREAEREAERyBQCRcZCwpK6n3/+ebBEMM+iWbNmdsstt9jgwYPDcrkTJkxIaZ/tvffedswxx+ygjFApJqqzDHBicKUqMV7HIiACIiACIiACIiACIpApBEpmSkV3t55YHVihionj0cB3PD7++ONolPZFQAREQAREQAREQAREQAQKiECRsZDAM1EZKSDGKkYEREAEREAEREAEREAERCAJgSKlkCRhoGgREAEREAEREAEREAEREIEUEZBCkiLwKlYEREAEREAEREAEREAERMBMConuAhEQAREQAREQAREQAREQgZQRkEKSMvQqWAREQAREQAREQAREQAREQApJCu+BJasW2rQfJ9rmLZtCLVavX2EzFkyxFb/Zp/OG2tr1q/Kce22bt1q48ePj6dftmyZjRkzxlavXm3vvPPOdl+njyfSjgiIgAiIgAiIgAiIgAikmIAUkhR1wMdz37Oh0563X1b+ZM+N7xlq8dkP42zRip/s1cmP2Kp1y63vhH9sVzuUC8KmTZuM76p4mD9/vt1www12/33e5QNGzbMiG/VqpUtXbrUGjRoYBs3boyf144IiIAIiIAIiIAIiIAIpAMBKSQp6oViVswuO/UvdvbRLWLKx4pQi9m/zLCjyh9vrU7uYJUPrG4bN2/YrnZ33nmnvfbaa3brrbfaiBEj4uf23Xdfu+SSS+LH7IwePdpq1KhhvXr1srZt29pBBx1kWE0UREAEREAEREAEREAERCCdCBSZDyOmE3TqUu/IJjZ78Qwb9sWr1uS41vb7xjVWskRJq3rQsbZy3TIb+WV/K1m8lG3ZusWKF/uf3ti7d28744wz7OSTT7aLL7443qSyZctanTp14sdYUkqXLm1169a1hQsX2uWXXx6+TF++fPl4Gu2IgAiIgAiIgAiIgAiIQDoQkIUkRb3w3x/H24ffDLH29f9mNSudYV/Mn2zHV6xrE+eMsGVrlli7M28PH3JctnZJvIbusvXLL7/Yli1b4vGJOx988IE1b97cfvzxx2Adueeee6xr166JyXQsAiIgAiIgAiIgAiIgAiknIIUkRV0w+bv3be2GVfbypIfsuXE97euFn9lJh59ulcodZW/+9znrO76XlS19kB24T4V4DTt37mx9+vQJlo9/vf8fjEnffee8/OPffcMJl9wYIFhqtXy5Ytw5ySxLQ6FgEREAEREAEREAEREIFUEigWW51payorkKqyu3TpEtyc2rRpk6oqJC13a8xNa93G3630HvskTaMTIiACIiACIiACIiACIlAYCMhCkoa9WCw2Z0TKSBp2jKokAiIgAiIgAiIgAiKQ5wSkkOQ5UmUoAiIgAiIgAiIgAiIgAiKQUwJaZSunpHKRrkmTJvbll1/m4or0SXr22Wfb66+/nj4VUk1EQAREQAREQAREQAQKNQEpJHnUvXys0MNbb71lmTo1p3jx4uHDi96W7LbFihWzEiVKZJdE50RABERABERABERABEQgWwJy2coWz66dLFWqlO2xxx558vfGG2/YTz/9ZNOmTdshP87tSjnUr2/fvjZv3rwdri9ZcpuOumHDBmOJYQUREAEREAEREAEREAERyC8CUkjyiOz69euDZSHxa+hLly6Nl/D777/b8uXLzdP+9ttv4ZxvPeGiRYvi3xnBfYovsfOlda5fuXJl+ENZOPLII8Mlnm/USsM3S/hWyebNmz3b+BZFhKWBK1euHM4vXrw4fo4djrHwzJo1y3r27BnP49dff42nW7t2ra1bty60JR6pHREQAREQAREQAREQARHIJYFtw+G5vFDJtyfQq1cv+/TTT22/faz+vXr26WXXmodOnSwcuXKBYXiX/6lx111FFhqeFatWrZxIkTDfeojRs3WrVq1UI60vAF9urVq9vUqVNtxIgRoZAvvvjCZs+ebXvvvXcoY8iQIUZ5r732mrF/9NFH2/nnn2/fffddmP8xcODA8A0SlB/yu/3227er7MiRI4PVZfr06eFcvXr1bMmSJdavXz+76qqrDAsK1zZs2NCmTJkSvvZ+3333BSVlzpw5Nnz48PBdEzJ97rnn4orRdoXoQAREQAREQAREQAREQARyQEAKSQ4g5TTJXXfdZaeeeqq1aNHCypQpY9dee61ddNFF1r59+yDwY5Fgfkn37t3ttttuswMPPNBefvlle+KJJ4zJ5Fglrr76aluxYoXxtfX58+dvV3Tbtm3tsMMOC3mRDoWEcNJJJxkfSuzdu7fNnDnT3n/aA0vPvuu/bNN99slwcH5513XkhXo0YNu/7664Py8eabb9rcuXOtQoUK9tBDDwWFaM899wyKC9YYFK0HH3ww1Jf8sb4MHjw4tGGHAhQhAiIgAiIgAiIgAiIgAjkkIJetHILKSTKUEOZg4CaFO5NP+Malaq+99rKKFSvGs0Gx4DyuWASsJbhKPfbYY3biiSdapUqV4ml959tvvw0uVFgySO+hbNmyYZf5JJSNAsGE86zctfwatqNHj7Zx48bZGWecEaw4uGFxHeHnn38OW/7RFi9vzZo1ts8++wQripcbT6gdERABERABERABERABEcglgW1SbS4vVPLsCWAlefbZZ61du3Z2zDHHBAtD4hUu/Hs8LlkoES+99FJQTiZMmOCnwva6664L5zt16mRMaM8qoDhgAWndunVwx3JFIprWy0Up+uGHH4IS5OeZA0OdR40aFawxbJnDgksX8ePHjw8KjKfXVgREQAREQAREQAREQAR2h0CxmJvQ1t3JIFOv7dKlS5jP0aZNmzxpQnRCeTRDJpcj0Oc0kA+T3rFCYFkpXbp0Ti+Np+vTp09QSHAFq1mzpjFJPhpwI0MZIWDxwDWL2wBFBQsPlhKUIwJ1wfLCuVWrVgVXtHAi9o84twJ5nLYiIAIiIAIiIAIiIAIikBsCmkOSG1rZpM3KEkFy5l7kJvgyvlyDUrIr4ZRTTrEePXqEyfFMas9OacDNLDFEFaioQrT/vsnJtWxCIiACIiACIiACIiACOwWASkku4Vv28XJFJJtKQpujzkh/CmIgAiIgAiIgAiIgAiIQLoT0BySdO8h1U8EREAEREAEREAEREAECjEBKSSFuHPVNBEQAREQAREQAREQARFIdwJSSNK9h1Q/ERABERABERABERABESjEBKSQFOLOVdNEQAREQAREQAREQAREIN0JSCFJ9x5S/URABERABERABERABESgEBPQKluFuHPVNBEQAREQARHIFYHFi80mTszVJUosAiJQQAQaN7bYB+EKqLCCLUYKScHyVmkiIAIiIAIikN4EbrrJ7Mwz07uOqp0IFDUCH3xg9t13hbbVUkgKbdeqYSIgAiIgAiKwiwRef30XL9RlIiAC+ULg4IPzJdt0yVRzSNKlJ1QPERABERABERABERABESiCBKSQFMFOV5NFQAREQAREQAREQAREIF0ISCFJl57IsHr8/vvvtmHDhixrvXz58izjEyM3btxo/CmIgAiIgAiIgAiIgAgUXQJSSIpu3+9Sy1FCrrnmGtt7771tzz33tEsvvdTWrVsX8ho3bpxVqFDBDjjgADv++ONtyJAhIX7OnDnWtm3bkHbatGnxcjt16hSbn1V4J2jFG6odERABERABERABERCBpASkkCRFoxNZEXj33XdjK0JOtEmTJtni2PKQ06dPt0GDBoWk1113nbVv396WLVtmf/nLX+y2226zzZs32+23324NGza0du3aWYcOHUJaFJN99tnHjjnmmKyKUZwIiIAIiIAIiIAIiEARIaBVtopIR+dVM4sXL25/vf7fTTTw/Kxr777hsUE1yvGjRoYP/3f/9n+++/vx122GG2ZMkS27Rpk/3www9Wr149Ozi2QgRKDHE9evSwZ599Nq+qpXxEQAREQAREQAREQAQylIAUkgztuFRVu2XLlqHo559/3p555hmbPXu2XXnllVaqVCnr27dvsI60atXKPoitl33rrbcGty4UmPPOOy/MObnvvvvsww8/tLp16wb3rlS1Q+WKgAiIgAhkBoGlS5fa1q1b7aCDDsqMCquWIiACuSYgl61cI9MFEDj11FPtiiuuCNaQRx99NA6FuSWXX365oZQ89NBDtnDhQjv/PPtm2++sVmzZtnVV19tDz/8cHDpuvHGG4NS0rlzZ01ujxPUjgiIgAiIQJTAp59+alOmTIlGaT+fCaAAeojue1xOttHrku3nJB+lKRoEpJAUjX7Os1b269fPxo8fbyeccILdfPPNwUXr7bfftp9++snuuuuuYBFp3bq1Pffcc6HMjz/+OGz32GOPMBH+P/5j3GelwvKyty5c23NmjU2bNiwPKujMhIBERABESg8BBgAw+1XoWAITJ482XhXs5rmr7/+akOHDg0u2F988YW999574d29s5r897/tf79+9uqVavC34ABAwxLF4OTyAx5vaANLuLDhw83ZI7169fvrHo6n4YEpJCkYaekc5V4u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fz8inDOZPRqYJ4JCwJ8HLB0I7tGAQhMNKArReSaUiYsUwd2k2Efgj4bEukbPoSQRmAxPYMI9+yhW7KNYEbyccBD5d9JJJwXlCSUMS4nPgYEFf9GAUqMgAhCQy1YG3gc81NJxDgl18gduBmJVlUVABERABEQgzwggwCO0JxPc86KgRItCXpTliojXL1qGt8nPZbUlDZYiBRHIDQFNas8NrTRJm64KCaNA0QdXmuBSNURABERABERABERABNKYgBSSNO6cZFVLV4VEFpJkPaZ4ERABERABERABERCBZASkkCQjk8bx6ayQyEKSxjeOqiYCIiACIiACIiACaUhAc0jSsFN2ViUUEl/BYmdpC/K8T9wryDJVlgiIgAiIQD4Q6NkzHzJVliIgAiKQNQFZSLLmktax6WwhoW4K2wi0b9/emjZtGtZo3xarPREQARFIYwIdO6Zx5VQ1ESiiBG66qVA3XBaSDOzedFVINKl9x5upUaNG1rlz56CU8MEoviGTuNzjjlcpRgREQARSRIAlX+++O0WFq1gREIGiSkAWkgzs+XRVSDSpfcebiS/Usm47H6R68cUXg2LSrl07WUx2RKUYERABERABERCBIkqgyH6p/dprrw1fI+Vrp5kW+LIpX1Pl667pFPhC7LJly6x27drpVK2U12X27NnGH1/n9cBHtFBMHnvsMY/SVgREQAREQAREQASKJIEi67LVMzZhb/r06UWy09XogiXwwgsv2LRp0+KF8vVdvsZ77rnnxuO0IwIiIAIiIAIiIAJFlUCRtZAU1Q5XuwuWwIIFC+zII48MFi1XRLp3727NmjUr2IqoNBEQAREQAREQARFIUwJF1kKSpv2hahUyAkxiJ5x22ml27733ShEpZP2r5oiACIiACIiACOw+AVlIdp+hchCBpAQmTJhgP/74o11xxRVJ0+iECIiACIiACIiACBRlAlJIinLvq+0iIAIiIAIiIAIiIAIikGICWvY3xR2g4kVABERABERABERABESgKBOQQlKUe19tFwEREAEREAEREAEREIEUE5BCkuIOUPEiIAIiIAIiIAIiIAIiUJQJaJWtNOn9TZs22QcffLBdbQ477DA75phjbI899tguPvHg448/turVq9vBBx+ceCpHxz/88IN98803ds4552xX1siRI61Bgwa2zz77JM2HsleuXBk/T9oTTzzRypYt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5JTrrcYhtcI8F1zmYBplEM1n1qxZQRlBCcNCgvsWViQFERABERABERABERCBvCOwbRg57/IsUjnhSoV7FspHx44drVixYju0PzGOUfh58+YFCwiJcenygHUAF6SLLrooWAa6dOnip7bb1qhRI7h7nXfeeYbLFRaQxODKwpFHHmmTJk0yLApYVhDwsZAMGDDAGjVqFKw3uEu98MIL1r59+yB4k78rQNF8zzrrLMPS4wHLEGHr1i02c9E0O2Dvg+3Zj/5uB5c5NOaq9T9l5pD9K9tTY7pZqRKlrG6VRvb000+Hck855ZQwdwQFLBpw58JdjPqgmN15553h9JNPPmmHH3542MfKglKEa1tWbff8cNc66fB6VrFsFXsrNrfk64Wf2bpNa+20w5raeV0vCC5xXA/HmjVr+mU2Z84cO+6448IxFjEUqGuvvdb2228/e/nll+PptCMCIiACIiACIiACIrB7BIrFRsm37l4WupqRejBiUchpYDI36bkOhQXLQ24ClgUEY9yrEJRxf0LhiAbmYLhSwoT6smXLBmsC7lAELAu+j6XB649SlJXlJpp3bvc3bFof2lmqxB65vTRP069Zv9L22XO/PM1TmYmACIiACIiACIiACOw6ASkku84u5VeyHPDY2JwQRvexqCiIgAiIgAiIgAiIgAiIQKYRkEKSaT2m+oqACIiACIiACIiACIhAISKgSe2FqDPVFBEQAREQAREQAREQARHINAJSSDKtx1RfERABERABERABERABEShEBKSQFKLOVFNEQAREQAREQAREQAREINMISCHJtB5TfUVABERABERABERABESgEBGQQlKIOlNNEQEREAEREAEREAEREIFMIyCFJNN6TPUVAREQAREQAREQAREQgUJEQApJIepMNUUEREAEREAEREAEREAEMo2AFJJM6zHVVwREQAREQAREQAREQAQKEQEpJIWoM9UUERABERABERABERABEcg0AlJIMq3HVF8REAEREAEREAEREAERKEQEpJAUos5UU0RABERABERABERABEQg0wiUzLQKF+X6Tpw40VatWhVHcPzxx1ulSpXix/m9s3HjRhs9erQ1btzYSpbUrZPfvJW/CIiACIiACIiACBQFAsW2xkJRaGhhaCMKyKZNm6xixYq2bt06++qrr6x58+bWv3/XDdvyZIlduWVV9rIkSOtePGcGcqWLVtm5cqVsxUrVth+++2X6zJ1gQiIgAiIgAiIgAiIgAgkEsiZJJp4lY5TRuDuu++2MWPG2KRJk2zs2LE2YMAA+/LLL0N90C3nzJlj8+bN26F+ixYtsl9++SUev3DhQnv/fcNxcTD4sWLw/VRHRUlBMsI6ffcc09bvnx5XBkhfsaMGUaaaPA8Z8+eHY3WvgiIgAiIgAiIgAiIgAjsQEAKyQ5IMieiatWqobJLly61zZs320UXXWTVq1e3pk2bWpMmTWz+/Pnh/KWXXmpnnnmmnXTSScEqsnr1arv22mvDufPOOy9sb7zxRqtQoYKdfPLJVqNGDfv+++/j55s1a2aHHXaYffLJJ1a2bNlgISHvE044Ibhv1alTxzp06GBbtmyxNWvWWPny5Y18jz766JCH/omACIiACIiACIiACIhAMgJSSJKRSdP4wYMH23333Wd33nlnUAaqVatm9evXtylTptisWbOCEsL2qKOOsldffdWmTZtmAwcODNsFCxbY/vvvb19/bUNHTo0tBAlA0vGiy++GKwgKBooGN26dYsTWL9+fbC61KxZMx5H3rVq1QqKCxaaqVOn2uTJk+PnKR/XLgUREAEREAEREAEREAERyI6AFJLs6KThOawQWEP22GMP6969u82cOdNKlChhb7/9drCQYMkgtGjRwl555RU78cQTg2Wkdu3adscdd1jr1q3t1FNP3a5lQ4YMCYrKgw8+aD169AiKBIqKh86dO9sRRxzhh2GLknP11Vfb3nvvbaVLlw5zWQYNGhRPc+utt8Zdu+KR2hEBERABERABERABERCBBAJaKikBSLofolCgCCQGVt/CncoDcz1wnWI1LCwX/6+9O0ZRJQjCADxmBhppYGQqeAgFwVTQ0MgTeQUv4hlMjYy8g6aPanBZZFksqOAtfJOIs7WlftlPd/XEvEnMjKxWq/Y6m81epd3z+WyBY7lctnvx2u/3v/4eqyrvV/T/ftJWzJF8P/HL0Pu7mPcECBAgQIAAAQI/CVgh+UnlD97bbrddrFDE8HnMlMTqyGaz6c7nc9vStVgsuuPx2FZRLpdL1+v12q+M07p2u13bthVbtWL+JILL6XT6VSFO6IrPeDwe3fV6bVvAYtbERYAAAQIECBAgQCAjYIUko/Uf1L6CxPtXicARQ+6vLVsxnL7f77vxeNyNRqNuMBi0IfNY7TgcDu3+fD7vYgYlTt+KIBL/OxwO22B8zKr8dkWP9XrdTSaT9myUWLWJz4zVFhcBAgQIECBAgACBTwU8h+RTqT9QF8f13u/3Ll6n0+nXKkh89TgOOOY94hkmryvqYqvXa3tVrK7E+zip65Nnk8QzUW63Wws8EXxcBAgQIECAAAECBLICAklWTD0BAgQIECBAgAABAmUCZkjKKDUiQIAAAQIECBAgQCArIJBkxdQTIECAAAECBAgQIFAmIJCUUWpEgAABAgQIECBAgEBWQCDJiqknQIAAAQIECBAgQKBMQCApo9SIAAECBAgQIECAAIGsgECSFVNPgAABAgQIECBAgECZgEBSRqkRAQIECBAgQIAAAQJZAYEkK6aeAAECBAgQIECAAIEyAYGkjFIjAgQIECBAgAABAgSyAgJJVkw9AQIECBAgQIAAAQJlAgJJGaVGBAgQIECAAAECBAhkBQSSrJh6AgQIECBAgAABAgTKBASSMkqNCBAgQIAAAQIECBDICggkWTH1BAgQIECAAAECBAiUCQgkZZQaESBAgAABAgQIECCQFRBIsmLqCRAgQIAAAQIECBAoExBIyig1IkCAAAECBAgQIEAgKyCQZMXUEyBAgAABAgQIECBQJiCQlFFqRIAAAQIECBAgQIBAVkAgyYqpJ0CAAAECBAgQIECgTEAgKaPUiAABAgQIECBAgACBrIBAkhVTT4AAAQIECBAgQIBAmYBAUkapEQECBAgQIECAAAECWQGBJCumngABAgQIECBAgACBMgGBpIxSIwIECBAgQIAAAQIEsgICSVZMPQECBAgQIECAAAECZQICSRmlRgQIECBAgAABAgQIZAUEkqyYegIECBAgQIAAAQIEygQEkjJKjQgQIECAAAECBAgQyAr8A97oxUYPEdLxAAAAAElFTkSuQmCC" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-21" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.707998Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.707927Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.710644Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.710357Z&quot;}}" data-outputid="ac2c4eda-f59f-44c9-cd56-52f9513237b1" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb6-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="6">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>Rain</td>
<td>0.5</td>
<td>0.666667</td>
<td>0.333333</td>
<td>0.666667</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>NoRain</td>
<td>0.5</td>
<td>0.333333</td>
<td>0.166667</td>
<td>0.333333</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<p>Finally, this way, we can answer that the probabilities of Rain given that the friend said that it was raining is 66%.</p>
</section>
</section>
<section id="bayes-for-more-categories" class="level1">
<h1>Bayes for more categories</h1>
<p>From 2 categories, we can move to more categories</p>
<p>From : https://www.bayesrulesbook.com/chapter-2#michelle-simple</p>
<blockquote class="blockquote">
<p>For example, suppose you’re watching an interview of somebody that lives in the United States. Without knowing anything about this person, U.S. Census figures provide prior information about the region in which they might live: the Midwest ( M ), Northeast ( N ), South ( S ), or West ( W ).16 This prior model is summarized in Table 2.5.17 Notice that the South is the most populous region and the Northeast the least (P(S) &gt; P(N)). Thus, based on population statistics alone, there’s a 38% prior probability that the interviewee lives in the South</p>
</blockquote>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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3HPPTb/85S9zmhEjRqRrr702n7/wwgvp/fffHyd+nMKMkIAEJCABCUhAAhKQgAQkIAEJtBCBplA0vPXWW+nBBx/s8rDdfffd6d133x0n3/jjj58WXHDBNPHEE6fnnnsuPfLIIznNHHPMkaaddtp8vuGGG1aVDuX4cQozQgISkIAEJCABCUhAAhKQgAQk0EIEJuzvvt5zzz1ZoMd6AGXBCiuskFZZZZXcrGuuuSbNPvvs6aGHHkoI80sttVQaPXp0uvXWW9NUU02Vtt566zTzzDNXu8C92267Lafl3oQT/n/3nnzyyXTjjTemSqWSll9++bTYYotV87z99tvp+OOPT++9917aeOON0wILLJDGG2+8tOSSS6ZJJ520mo6TeeaZJ00/fS5Da+/nouc/HFF6/GR2KsHujLXHPNlTbYYINcDnVjPXHdddelaaaZJrc9lBaRz6MEJCABCUhAAhKQgAQkIAEJSGCwE+h3i4Y/vGPCWH92GOPTQjvq666arrssssy19/+9rdp6NChaZ999kn/+te/skKA+yxbQEEx33zzpTFjxuS0d9xxR9pqq63y9Q477JD23XffHI/ATzrSY51AXWGhQIItttgiWyZceuml2YqBsj/99NO0zTbb5PbkQr78c9hhh6Xbb789L6n4z3/+k1566aWsoIh4ku233365zKeeeirtuuuuac0110yff/55onwUGR9++GE666yzskKlXLbnEpCABCQgAQlIQAISkIAEJCCBZiDQ74oGIC6yyCLp6quvTieccEJCuXDOOedU2WLF8PLLL6eVVlop+2H405/+lM4444x0/vnnZwuH4447rpr2vvvuy/fw2XDmmWdmAZ9lFVgskO+oo47KioxLLrmkmmfPPfdMV155ZVZErLjiirkd1ZttnGy33XbZ0mLnnXceyzri2WefTaNGjUo33HBDbgdKEBQTt9xyS1ae0JdDDjkkX6MUwYrCIAEJSEACEpCABCQgAQlIQAISaCYCA0LRgBIhljksu+yyWYmAFQBh0003TRNNNFG2YuAai4YILIN4+umn8yXKim984xv5fLnllsuOGh9++OG09NJLJ5QNLMeYccYZ080335z++9/RhFp3XXXzecsl1hjjTXy0obqzS6ehKXE/vvvnxUjWDAQsKT4/ve/n5dasPRil112yZYVU089dRdrMLkEJCABCUhAAhKQ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0dBudGSUgAQlIQAISkIAEJCABCUhAAhKoJaCioZaI1xKQgAQkIAEJSEACEpCABCQgAQl0m4CKhm6jM6MEJCABCUhAAhKQgAQkIAEJSEACtQRUNNQS8VoCEpCABCQgAQlIQAISkIAEJCCBbhNQ0dBtdGaUgAQkIAEJSEACEpBA/xL4z3/+ky644IL0wQcf9G9DrF0CEpBAiYCKhhIMTyUgAQlIQAISkIAEJDCYCLz66qvpscceS6+88spgarZtlYAEmpzAhE3eP7snAQlIQAISkIAEJCCBpiUwxxxzpBEjRqSpppqqafvYSh375z/me699970/PPPpx133DFNNtlk6dJLL01TTz11Wm211dLDDz+cnnjiiRy/4YYbdhrN3/+9/TUU0+lr371q2nVVVdN7777brrwwgvT+uuvn2acccZ07bXXppdeeiltvvnmadppp+10ud1NeP/992cF2SyzzJL71d1yzDdwCWjRMHDHxpZJQAISkIAEJCABCbQIgUqlkvgQao8RV44vp0cIHW+88XLe+FNOG3FRTlyXy4g4j/1L4Ctf+Uqabrrp0ltvvZW++OKL9N/je9/PLL6fXXX89jPOecc6a33367y0tlZptttlzOhx9+mDvI8cUXX0z/ve/c7nf/OY3cx3U1xdhnnnmSW+++WaK9vRFndbRtwS0aOhb3tYmAQlIQAISkIAEJCCBsQh88skn6cEHH8yzzEOHDk3MPr/vtp+umnT0sttVSaZJJJ0pgxY7JgSNz444+fXnjhhYRwSF6E0kUXXTTPTFPwO++8kx544IH02WefpcknnzxRJjPjH330UZ5Fxq/DIosskv72t7/lmfJllllmrPZ40X8EJppoooRSIMKEE06Y9thjj6oiacopp0woI7oayMNzFAFLgp/85Cdp0kknzVFYNfRlwAKn3J6+rNu6+oaAFg19w9laJCABCUhAAhKQgAQkUJcAioM33ngj3X333encc89Ns88+e1psscXy9SWXXJJntTF1v++++9KNN96YHn/88YSJ/T333JNnt++6666spKBwfDWcfvrpadZZZ02rrLJKFuaOO+649K9/SsrHjCfv/3229M111yTpphiinz+8ccf122Xkf1DgOchAlYnKB8mmGCCiKoqHYjgPlYIYcEScWENEfFYvJStXoifeOKJ65ZJeZ9/nkut5rgyxPu1ZZdTtPe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3wvsKmGQwEAncOWVV+ZtVREkUCrw7PLBoehss82Wppxyyk4LFv0tVN13333pqaeeyjur7L/h2iZzeVBx98ME8A4Z8ER6uERvfjgQceSE8/XR2qIqQBl+UjzPOOGN2/oovlVqFTlfawM4wzzzzTH6XXHvttRO72jRLwDIMdq+/nr68Y9/3Olu4biWvM8991yad95502qrrdbpvI1MyDOGr5va8W1kHV0ta6B+T7raj75K79KJviJtPd0m8PHHH2fP4lgj7LbbbmnnnXfO1goUeNlll6Xvfe97WYGwxx57pJtuuim9+OKL2doBxcIPf/jDdN1112UFBFYOCy20ULfbYUYJSEACEpCABCQQBNixhK1Sf/WrX6UzzzwzzTLLLFmxsO+++6bvfOc7eVIk0rZ3rPVJ0l7a3rpHP4455ph08cUXd6oKLErZweXII49Md999dzUPygAUD40K0003Xfrss88yYyaapp566kTcGWeckbbaaqvEVrbl0FWWzz/fPrDH/6QTjrppLwbTbmswX7OVru/+93vsuVvV/qCouHmm29Op556anr88ce7kjWnRdHTiMAEItsND6TQk+8JypsIjf6eRLkD7aiiYaCNiO0ZhwDazDfeeCMvkxg1alT+p7bjjjvmdPvss0/69re/nf+h77fffvmINnqSSSbJW4wdccQR2cP44Ycfng466KBxyjZCAhKQgAQkIAEJdIfAEksskbcynXjiidMqq6yShg4dmtZbb70sFD/55JPp97/fYfFIpRhScDECDO4/RV4r2Lr1s6adrPlK5YPvHNFnvfeey+NHDkyC+yNEjZZ/soyWBgzWYS16gorrJCOOuqoHPeDH/ygKoxSJ0Iy91gu25mw3HLLpd133z1bSXQm/WBKQ79gF+PT2bazrS/PY3ctCbpaX1vtQgmEz56BFPiexNbInWlXe98TntFGfU8605b+SKOioT+oW2e3CKAhx8QNU0R8MhBuvfXWxHZlX/va1xIzC3feeWeOv+GGG7LSgb3N+cfHP8J33nknW0OgcODcIAEJSEACEpCABLpL4PPPP69aWOI7CsGMD2b9+JHCzLqj8MILL6RDDz007b333jkP6cvCB+fl6yivrfja+/XyRhqOUQ7tps31QqQpl4UwyQcFQMRjbbD66qsnLEzxrdWIQB2PPfZYrmPNNdfMddLWySefPM0zzzxZOc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z8jRoxIp556anrvvfeqrUDhwAeLh1plRDWRJxKQgAQkIAEJSEACEpCABEoExisEtErpuqVOr7jiirT/vunJ598sqX6bWcl0B0Cw4YNS6NHj+5OVvNIQAISkIAEJCABCUhAAi1EoKUVDYxzs89Sl5/l5557Lj3wwANp+PDh5WjPJZAJjBo1Kh111FHj0Fh00UXT0UcfnVA0GCQgAQlIQAISkIAEJCABCXREoOUVDR0B8r4EWoVA+LyI/qpgCBIeJSABCUhAAhKQgAQkIIGuEGh5Hw1dgWVaCTQrgbL/BRUMzTrK9ksCEpCABCQgAQlIQAJ9Q0CLhr7hbC0SGNAEsGZQwTCgh8jGSUACEpCABCQgAQlIYNAQUNEwaIbKhkqgdwjccsstuWB9MPQOX0uVgAQkIAEJSEACEpBAqxFQ0dBqI25/JSABCUhAAhKQgAQkIAEJSEACvUhg/F4s26IlIAEJSEACEpCABCQgAQlIQAISaDECKhpabMDtrgQkIAEJSEACEpCABCQgAQlIoDcJqGjoTbqWLQEJSEACEpCABCQgAQlIQAISaDECKhpabMDtrgQkIAEJSEACEpCABCQgAQlIoDcJqGjoTbqWLQEJSEACEpCABCQgAQlIQAISaDECKhqadMBfeuml9Otf/zodddRRqVKpjNPLBx98MN8/++yzx7nXnYhRo0alY445Jn3++edjZf/www9zPY8/vhY8QP14q9/Wtu7zvvvDNWE08/fREH8ss6etvfvObdNlll42V1gsJSEACEpCABCQgAQlIQAKtTMDtLZt09G+77ba08sor597dfffdaemllx6rp1tuuWU6/zz0zLLLJPuuuuuse5152K88cbL2Y4/vi09957V4t49dVX0yyzzJLOPffctNVWW1Xje3LyxhtvpD/84Q/p0UcfTdNOO21ae+2107Bhw/J5T8ol70UXXZSGDx+eLrnkkrTxxhvn4t577730la98JZ8/8sgjaaGFFsrnDz/8cPrWt76VjjjiiHTggQfmOP9IQAISkIAEJCABCUhAAhJodQJaNLTAE4DwXA4ffPBBVjKU4xp1/t3vfje98sorjSpunHKef/75NPfcc6eRI0emt956K6F02HHHHdN0002XUKj0NKy44oq5iLLy5fbbb68We9NNN1XPo75VV121GueJBCQgAQlIQAISkIAEJCCBViegoqHJnwBm+s8888z03/+t9rTa665Jp+HUF290cOTnXbaKZew77779rCktrOzFOT9999PL7zwQho9enS69NJL0xNPPJGmmmqqdNBBB7WdsZN3ZphhhrTIIovksiPL9ddfn+aZZ560ySabpGDHPZZZEJZYYol8bNY/sIa5QQISkIAEJCABCUhAAhKQQGcIqGjoDKVBnIYlEm+++eZYyyMuuOCCtNZaa6WZZpqpoT2ba665sp8Gyr/qqqsaWnYUhq+HWWedNX3961+PqDTzzDOnX/7yl2nOOeesxvXkZJ111kn33ntvwr8E4corr0wbbLBBIv66665LH330UY5H0UH8RBNNlK+b9c+GG26Yrr322mbtnv2SgAQkIAEJSEACEpCABBpMQEVDg4EOtOIWX3zxNMccc6QLL7wwNw1/AygCGuUvoba/+Gegzj333LMqqNem6cn10KFD08svv5y23XbbrAAIp4177bVXOvnkk3tSdDUvViCE+++/Pz3zzDPpueeeS2uuuWZabbXVcjyWDLSBD/H9FT7++OOEM0+ULDfffHNuxttvv53OOOOM9O6771abdcstt6RY/vHaa6+lk046KSuEyg46UabQV3xpHHnkkdVlKChTXn/99XTjjTemZ599Nn3yyScJC49DDz00p611/lmt1BMJSEACEpCABCQgAQlIoGUJqGho8qHHSeMOO+yQzjnnnLwjxNVXX517zCx1b4QJJ5wwnXrqqVkI/nPf97wKn72s58llmigLMGaYPrpp08LLrhg+tWvfjWWcN2TipdbbrmcHT8N4ZNhhRVWyAoblDYI3eGfIRxu9qS+7uT97LPP0korrZR9VeCgEiUIbKaccsr0/e9/Py8poVyWzGDVMmbMmKxImHfeefOzcMUVV2RuYXmCsgIFEVxZHrLsssumf/zjH9nfxn/+85/ELiYoqVAkHXbYYYm4H/3oR/nTnfabRwISkIAEJCABCUhAAhJoXgIqGpp3bKs923TTTfPyiTvuuCM7gVxvvfWy88RqggafLLbYYunHP/5xFv7ZRrORYfLJJ88z9ixrQAnAzDoz+wcccEBaf/310xdffNHj6qaeeuq0/PLLZysAhG6WTFAvYaONNsrbWd55553ZLwRKjv4If/nLX7JvCpQMf/7zn7Py4/DDD88sdt1116oFC8oSls7gXwJLBRQm7EgCOxxqEhcBK5eLL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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<p>Now that we have the prior probabilities for each event, we need to observe some data. Here we will observe</p>
<div id="cell-27" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.711650Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.711601Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.713962Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.713659Z&quot;}}" data-outputid="e11018c4-f324-43d2-ce21-911ea40b4f8e" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observered the data when the person said "pop"</span></span>
<span id="cb7-2">probabilities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb7-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'M'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'S'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'W'</span>],</span>
<span id="cb7-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>: [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.21</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.17</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.38</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.24</span>],  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The likelihoods are derived from analysing data in each region.</span></span>
<span id="cb7-5">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb7-6"></span>
<span id="cb7-7">probabilities</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>M</td>
<td>0.21</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>N</td>
<td>0.17</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>S</td>
<td>0.38</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>W</td>
<td>0.24</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<blockquote class="blockquote">
<p>But then, you see the person point to a fizzy cola drink and say “please pass my pop.” Though the country is united in its love of fizzy drinks, it’s divided in what they’re called, with common regional terms including “pop,” “soda,” and “coke.” This data, i.e., the person’s use of “pop,” provides further information about where they might live. To evaluate this data, we can examine the pop_vs_soda dataset in the bayesrules package (Dogucu, Johnson, and Ott 2021) which includes 374250 responses to a volunteer survey conducted at popvssoda.com</p>
</blockquote>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8wAAAGrCAYAAAAVRh6lAAAAAXNSR0IArs4c6QAAAGJlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAABJKGAAcAAAASAAAAUKABAAMAAAABAAEAAKACAAQAAAABAAADzKADAAQAAAABAAABqwAAAABBU0NJSQAAAFNjcmVlbnNob3Q7WPbyAAAB1mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj40Mjc8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+OTcyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cj6dQV0AAEAASURBVHgB7J0J3JTT+/+vVm1aiRaVNpRKRdpooZIQIoQsZd++dmX7om9C+CKJZM0aWoQklbWV0r5o06K0ShtZ/r3P/3fmez/TzLPOPM/MM5/r9Zpm5tznnPuc930/zOe+rnOdAv/sM5OJgAiIgAiIgAiIgAiIgAiIgAiIgAikIVAwzTd9EQEREAEREAEREAEREAEREAEREAERcAQkmHUjiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAhLMEaCoSAREQAREQAREQAREQAREQAREQAQkmHUPiIAIiIAIiIAIiIAIiIAIiIAIiEAEAoUjlKlIBERABByBL7/8Mt+QqFGjhlWrVi3fzEcTEQEREAEREAEREAERiD8BCeb4M9YZRCBpCezZs8cGDhyYtOP3A1+5cqVNmDDBf9W7CIiACIiACIiACIiACGSKgARzpjCpkgikLoFixYrZmDFjkhpA3bp1k3r8GrwIiIAIiIAIiIAIiEDeENAa5rzhrrOKgAiIgAiIgAiIgAiIgAiIgAgkOAEJ5gS/QBqeCIiACIiACIiACIiACIiACIhA3hCQYM4b7jqrCIiACIiACIiACIiACIiACIhAghOQYE7wC6ThiUB+InDddddFnQ5JuXr37m1nn322TZ06NWo9HRABERABERABERABERCB3CKgpF+5RVrnEQERsNWrV9ucOXPs22+/tV9++cWuvfZaO+iggxyZIUOG2LBhw6x48eL29ttvW/PmzUVMBERABERABERABERABPKUgDzMeYpfJxeB1COwZMkS2759u3Xs2NGGDh0aAnDbbbfZJZdcYj169LDatWuHyvVBBERABERABERABERABPKKgDzMeUVe5xWBFCZwzDHHWLVq1WzXrl0hCgsXLrRRo0bZtm3brFu3bvb555+HjumDCIiACIiACIiACIiACOQFAQnmvKCuc4pAChMoUKBAxNnv3r3bevbsaWXKlLETTzwxYh0VioAIiIAIiIAIiIAIiEBuEijwzz7LzRPqXCIgAslDYPz48TZo0CAbM2ZMrgwa0YygLlasWEzPV7duXSOpGF5tmQiIgAiIgAiIgAiIgAhkloA8zJklpXoiIAJxJ0DCL5kIiIAIiIAIiIAIiIAIJAoBJf1KlCuhcYiACIiACIiACIiACIiACIiACCQUAQnmhLocGowIiIAIiIAIiIAIiIAIiIAIiECiEJBgTpQroXGIQAoTuPvuuzM9+/nz51uvXr1Cr7lz59rjjz9uv/76q61du9ZmzZqV6b5UUQREQAREQAREQAREQATSI6A1zOnR0TEREIEQgS1btthbb71la9assYsvvtjtlTx8+HDbtGmTXXHFFTZp0iT76aefXMKu3r17W+HChS28DTkGv/32WzvqqKPcllJffPGFXXbZZbZ+/Xp75JFHrHTp0kbbIkWKhM4b/qFevXr2wgsv2I8/mhvvPGGvf76666PESNGGEnDrr322vAm+i4CIiACIiACIiACIiAC2SIgD3O2sKmRCKQega1bt9qHH37oPLsDBgywsWPHWokSJaxNmzb2/PPPu2OI2R07dhhCGAtvs3TpUmO/5apVq7r61113ndHX33/7frh3bel/Q033OAEMCKYLNcYWbQLFSpkjz32mN15553WqVMne/XVV61KlSpWp04dmzFjhv3xxx+urv4RAREQAREQAREQAREQgZwQkGDOCT21zbcE8KI2atQojXjLt5PNwsRatGjhPMt4gBctWmSNGze2+vXr2+rVq10v7J/cpEkTW7FiRajXYBsKO3To4LzUtK1cubLzChcsWNC1Q3Bv2LAh1LZ9+/Z28sknu1f16tVD5evWrXPjKFmypJ100klOdDOeefPm2caNG523OlRZH0RABERABERABERABEQgmwQUkp1NcGqWvwkMGzbM5syZY08++aTzfObv2WZ+doMHD3bh002bNrW2bdtav379nJf5kksusaFDh1rPnj1dqDVh0t6CbfAOY82aNbNnnnnGCVz6mTZtmnXv3t0OPPBAe+KJJ3xTK1++vPmt4oN7M7/77rvWuXPnUD280ghn1jB/vnn1rx589AxfRABERABERABERABERCB7BIosO/H6D/Zbax2IpAfCWzevNmqVavmhN8BBxzgkkix5jYVbfz48TZo0CAbM2aMLVu2zFgnTJg0nl1s79697h2PM2uREcd8Zv0yFqmNO/B/+zatcsJbr4SRk07vM1ZNcLAS5UqFbVZ3bp1XUg311UmAiIgAiIgAiIgAiIgApklkPVfppntWfVEIEkJ4PlEyGG/679enTJ0lnEtthV6xY0U477bSQWKZ3xDEvjMRfxYsXD4llyiK1odwba6C9FS1aNFtimfbpiWXfv95FQAREQAREQAREQAREIKsEJJizSkz18zUBMj6TTCpo48aNswULFgSLUvIz4dJHH3101Lm3bNlyv2MZtdmvgQpEQAREQAREQAREQAREIIEISDAn0MXQUPKeAOHH3rvs18ziZe7bt2/eD04jEAEREAEREAEREAEREAERyFUCSvqVq7h1skQmMGvWLPvPf/7jworvuOMOe+655+yee+6xRx991G2hxDreM844I5GnELexPfzww3HrWx2LgAiIgAiIgAiIgAiIQKISUNKvRL0yGleeECDbM1maK1So4LY8WrJkiVuTe80119jLL7+cJ2PKy5OS9GvKlCl5OYSYnZukZEr6FTOc6kgEREAEREAEREAEUoKABHNKXGZNMjsE2CMYwayEUtmhpzYiIAIiIAIiIAIiIAIikPwEtIY5+a+hZiACIiACIiACIiACIiACIiACIhAHAlrDHAeo6lIE4kngm2++cWHj8TxHbvb99NNPW5UqVXLzlDqXCIiACIiACIiACIiACGSKgARzpjCpkggkFoFt27bZLbfckliDysZobrzxxmy0UhMREAEREAEREAEREAERyB0CEsy5w1lnEYGYE+jSpUvM+8ztDiWYc5u4zicCIiACIiACIiACIpAVAlrDnBVaqisCIiACIiACIiACIiACIiACIpAyBCSYU+ZSa6IiIAIiIAIiIAIiIAIiIAIiIAJZISDBnBVaqisCIiACIiACIiACIiACIiACIpAyBCSYU+ZSa6IiEJnARx99ZJ9/nnEg3v37rWmTZvapk2b3PHbbrstYj0VioAIiIAIiIAIiIAIiEB+JCDBnB+vquYkAlkgsH37dvvtt99s9OjR9txzz9ngwYMNoYz9/ffftmfPHrv77rvd99WrV7t3/SMCIiACIiACIiACIiACqUBAgjkVrrLmKAKZIDBhwgRr3Lix7dixw6ZPnx5qcdxxx1nFihXtiy++CJXpgwiIgAiIgAiIgAiIgAikAgFtK5UKV1lzFIFMEmjQoIHhRd65c2eaFn369LHu3btbwYJ6xpYGjL6IgAiIgAiIgAiIgAjkawL69ZuvL68mJwKxIVCiRAm75ZZbbNWqVbHpUL2IgAiIgAiIgAiIgAiIQBIQKPDPPkuCcWqIIpDrBCpXrmxLliyxUqVK5fq50zvhN998Y/fdd1/URF3ptU20Y7Vq1bIvv/zSqlSpkmhD03hEQAREQAREQAREQAREwORh1k0gAiIgAiIgAiIgAiIgAiIgAiIgAhEISDBHgKIiERABERABERABERABERABERABEVDSL90DIiAC+xEYOXKk1axZ0xo1arTfsUgFn3zyiX344Yd2wQUX2MaNG429nbEjjjjCSCS2bt0669Wrl02ePNmOPfbYhAtzjzQnlYmACIiACIiACIiACIiABLPuARFIUgJbtmyxt956y9asWWMXX3yx1a5d24YPH26bNm2yK664wiZNmmQ/fSTFStWzHr37m2FCxe28DakMPj222/tqKOOsl27drmtoy677DK3L/Orr75qZcuWtWuuucYOPvjgqJQQw2PGjLGnn37aunTpYuPGjbOuXbvaiBEj3LnZjqpu3bo2Z84cmz9/vrVt2zZqX9k58MMPPzixnp22idqGa6B13Yl6dTQuERABERABERCBVCKgkOxUutqaa74isHXrVicU8dwOGDDAxo4da2SzbtOmjT3/PPuWL169dy+yn4P5fA2S5cutYULF1rVqlVd/euuu871BahKlSrZ6aefboMGDQpxu+GGG+zaa691L/ZtxkiONnjwYHvvvfesYcOGbuupP/74wz799FM788wznacaUY+w7dSpk82cOdNinWsQ73Z+sZdffjm/TEXzEAEREAEREAEREIGkJyAPc9JfQk0glQm0aNHCeZaLFCliixYtsm7dujnP5GuvveawnHjiic6zvHz58hCmYBsKO3To4LzUjRs3duJ39+7drm6zZs1cSPUvv/wSatu+ffuQ2K1evbor/PPPw0hjVB/7LHHXBkh2Qh57Morr3QeazzOCGu82YRtd+7c2R2P1T/33HNPrLrK034kmPMUv04uAiIgAiIgAiIgAmkISDCnwaEvIpBcBBCg69evt6ZNm7pQ5379+jkv8yWXXGJDhw61nj17ulDr119/PTSxYJsCBQq4csTxM888Y/PmzQuFTLPvMiL60ksvDbUtX758SDAT6o3Nnj3bbQ3F5xkzZtjjjz/uQrSDwo/Q8YsuusiNidDsE044geoyERABERABERABERABEUhoAhLMCX15NDgRSJ/AzTff7Ly7JUuWdBVfeukl947HGcHMOmQ+s37ZW3gbX/7OO+84cU1YN4bA3bt3rx1wwAG+ivMih7783weSeLE2OWjew+3LevTo4YT8TTfd5Iv0LgIiIAIiIAIiIAIiIAIJT+B/v6ITfqgaoAiIQJBAxYoV7bTTTjMvljmGOPZG4q/ixYv7r+49UptgBS+WKStYsGAasRysl9XPpUqVymoT1RcBERABERABERABERCBPCegpF95fgk0ABHIHoEDDzzQjj766KiNW7Zsud+xjNrs1yDFCsj4/cgjj0Sc9fbt2w3vPNa/f38bNWqU+0zYu0wEREAEREAEREAERCB/EpCHOX9eV81KBEQgGwRIYLZhwwYbPXq02zuabN546vHcly5dOhR6TqbvVatW2XHHHWdFixbNxpnURAREQAREQAREQAREIBkIyMOcDFdJYxQBEchVAmyZRcKzHTt22PTp00PnpoxjxxxzjP3+++9uD+uTTz45dFwfREAEREAEREAEREAE8heBPPEwRwt5zF9oU2M2d955Z2pMNAFnqb+j+F6UBg0a2OrVq23nzp2hE7Vt29b69u1r/3vf112cLbR8qHZoUr6IAIiIAIiIAIiIAIikG8I5Ilgvv/++01CK/nvIQSbrmPeXMfWrVu7jNZ5c/bYnZVM3MlkrVq1cvtdE4pdoUIFe+qpp9ze1ck0B41VBERABERABERABEQg8wQK7Fuj90/mq8emJvu37tmzJzadqZc8I5Dfr2PlypVtyZIlllGG57Vr1+bZNYjHiatUqRKPbuPW5w8/GBXXnmlTZs2LW7nyM2Oa9Wq5fa1TrbrkJuMdC4REAEREAEREAERyC0CeeJhzq3J6TwikBsEEMwXXHBBbpwq7ucgvFhCLe6YdQIREAEREAEREAEREIEkISDBnCQXSsNMbAKIzC+/DKxB5nB6AgzlomACIiACIiACIiACIiACPyPgLJk/4+FPomACIiACIiACIiACIiACIiACIhAiIAEcwiFPoiACIhAZAJ333135AMRStluasiQIXbrrbfaihUrbNmyZXbLLbfYwIEDXe1PPvnEhg0b5j5PnjzZbV0VoRsViYAIiIAIiIAIiIAIJAABhWQnwEXQEETAE3jggQfsxhtvtHLlyvmi0PugQYNs+/btblujXbt2WYsWLWzixIkuW3OoUgp/2LJli7311lu2Zs0au/jii6127do2fPhw27Rpk11xxRU2adIk++mnn4xkdb1797bChQtbeBtyIH777bd21FFHuSzkX3zxhV122WW2f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GxSIgAiIgAiIgAiIgAiIgAiIgAqlNQII5ta+/Zi8CIiACIiACIiACIiACIiACIhCFgARzFDAqFoFkIrBixQobN26cbdq0Kc2wt27d6sqXLVuWpjyzXz7/HNbsGBBmur09cMPP6Qpy4sve/fudXNjjt4WL15sX331lf/q3idMmGBr165NU6YvIiACIiACIiACIiACIpAZAhLMmaGkOiKQ4ARGjx5tnTt3tueffz7NSF955RVX/sEHH6Qpz+yXs846y9q1a2dBUfruu+/ao48+mtkuItZbvXq1vfDCC/bRRx+5PYgjVsqgsFChQta9e3dj7t5uvvlmO/HEE+23335zRT/LN16NDBOJ9MBERABERABERABERABLJKQII5q8RUXwQSmMBrr72WZnTDhw9P8z07X3755Re7++67s9M0Yps+ffpY/fr1bdKkSXbjjTfagQceaGPHjo1YN73CggUL2plnnmlff/21q7Zr1y775JNPXH9ffvmlK5s2bZp7b9q0aXpd6ZgIiIAIiIAIiIAIiIAIRCQgwRwRiwpFIPkIdOnSxfCozp071w2e0Onvv/eunbtmqPJDBkyxJ577jljv+Cc2q+/moDBgyw2bNn21tvvWVLly61O+64I9se6/bt2zvhzbi+/fZbq1u3rt10001GGDY2ZcoUN/8iRYq478nyD6z9dUyWMWucIiACIiACIiACIpAfCUgw58erqjmlJIGiRYvahRdeaD78euTIkXbppZfaAQcckCMejRo1snvvvdd69eplrBvOifn2eJf/PNPw0vct29fGzx4cLa6Jfx6+fLltn79evvss8/s9NNPt5NPPtnGjBnj+uM8hGTnhuGJ/33392pduzYEWL1zz/2LZt20JDCNb766+/XEg63nG/pwywsxZPw4jbNWqVUY/MhEQAREQAREQAREQgdwlIMGcu7x1NhGIK4Fzzz3XfFj266+/7tb4xuKEhFHv2bPH/vvf/+aou4MOOsgGDRpkvXv3Nry+p512mrEmukaNGtnqt2bNmla1alWbPn26jRo1yjp27GjNmzd3InrOnDk2Y8YMa9OmTbb6zmyj7du323nnnWdnn322HXzwwTZx4kR78MEHQ15zQsZZCx6p3sKFC+2oo46ytm3bWqtWrax/62Zs0a99Dj5Zdftnnz5hnh5LfeequdcMIJ8jpn9qKongiIgAiIgAiIgAjEiIAEc4xAqhsRSAQCeFw3btzowp3JnE3IciysePHi9uKLL7rw6SVLluSoy+uuu8527tzpPMJHH3203XPPPXb77bdnu09EN2u1GVfr1q2dR50w9H79+rn1zKyXjqd9+OGHLhQcYfzxxx/bfffdZxdccIG9+eab7rQ8ELj88sstUj0/LjJ7E4ZNuHr16tXtoosushtuuMGJbOo8/fTTzgvvPdi+nd5FQAREQAREQAREQATiS6BwfLtX7yIgArlJoHDhwi4Mu0ePHi6EOqfh2MGxky2bsOxhw4YZ/WfHRowY4dYVP/HEEy50mvBpwqgRuojFMmXKZLlbHgqQLZss4SVKlHDt+Xz11VfbxRdfbAUKFMhyn1lpwHpp1k8jmAmnPvTQQ61x48auCzzEeL7xHJPgLLwelfAwc514+eze/vw8AEH8w75YsWJG1nOZCIiACIiACIiACIhA7hGQhzn3WOtMIpArBAjLxhCRGOuEc2JBwfnII484r212+0RMPvnkk044+jHNmjXL9VmqVClflKV3QpWxU089NdTupJNOcp8R5PE2RC0eZdZLs1VWkyZN3CmvuOIKJ9o7derk5hetXjSWf/9t9tTukGDBsb+0tdcc43rP97zUf8iIAIiIAIiIAIiIAL/I1BgXyIZZZL5Hw99EgERiDOBZ5991oUXk+Rq9+7dVqdOHXv44Yfd+uM4nzou3W/ZssV53En0RdbvN954w3nP161bZ1WqVDG2uELUR6rHA4TbbrvNxo0b58bGwwn+k0zCNjzS7733nuv7iCOOcEnBBg4c6PaZjstE1KkIiIAIiIAIiIAIiMB+BCSY90OiAhEQgdwgQHbrcuXKuVdunC/e50Agly1bNhQWHu18ma3HwwTCsAnzXrlypR1++OFWqFChaN2qXAREQAREQAREQAREIA4EJJjjAFVdioAIiIAIiIAIiIAIiIAIiIAIJD+BnC1uTP75awYiIAIiIAIiIAIiIAIiIAIiIAIiEJGABHNELCoUAREQAREQAREQAREQAREQARFIdQISzKl+B2j+IiACIiACIiACIiBWFqpsAABAAElEQVQCIiACIiACEQlIMEfEokIREAEREAEREAEREAEREAEREIFUJyDBnOp3gOYvAiIgAiIgAiIgAiIgAiIgAiIQkYAEc0QsKhSB/EPgt99+c/v8/v3332kmtXfvXlf+559/2oIFC4xtnjJrixcvtkWLFlmwj3nz5rl+MttHVuqtWLHCvv/++6w0UV0REAEREAEREAEREAERyDEBCeYcI1QHIpDYBNjDt3Pnzvb777+nGeiOHTtc+a5du+z555+3Dz74IM3x9L4MHz7cXnrpJQv28dprr9lbb72VXrNsH/vss8/s6aefznZ7NRQBERABERABERABERCB7BCQYM4ONbURgXxAoFy5crZt2zYrXbp0mtngid64caP98ccfrhwvMt7k7du3p6nHl0h9IKLxNocL9PXr19vcuXP36wMP+KxZs0LnC1ZYu3at/frrr8Ei95m+NmzYsF+5CkRABERABERABERABEQglgQkmGNJU32JQBIR2Lp1q5UtWzaNICU8u1evXnbGGWcYnuc5c+ZY1apVrVmzZlamTBnr379/mhmG9/Huu+/agQceaC1btrR69eoZx7HHHnvMKlWqZOeff741atTIJk+e7MonTpxoVapUsXPOOceOOuooe/bZZ105YvvUU09152aMjz/+uCvnn+7du1urVq2sYcOGduGFFzovd+igPoiACIiACIiACIiACIhADAlIMMcQproSgWQmgCf58ssvt6VLl9qnn37qxPTAgQPtmmuucZ7or7/+2u6++25j/XI0+/nnn23Lli2GZxgP9bRp02z37t12xx132JQpU2z+/PnWt2/fkPAeMGCAPfDAA+6cEyZMsD59+jihPmnSJOeNXrNmjW3evNkKFy7sToknesSIEc4jzTkQ8ay/lomACIiACIiACIiACIhAPAj8/1+h8ehZfYqACCQVAYQsNmrUKBemjdB9/fXXrUePHnb77be7Y3iP8TpHs7PPPtuFaXMcjzGh03iR8QY3b97cNWM9NZ5mhDdrk99++20rWLCgHX744VanTh0bP368IZjxOuN9xs4991xjLXaDBg1cX40bN7azzjrLleP9lomACIiACIiACIiACIhAPAjIwxwPqupTBJKQQIcOHZy39/rrr7edO3e6DNhMo0WLFtamTRv3QkAff/zxUWd32GGHhY4hgjFCuw844IBQOeumsUKFCqV558svv/xi5cuXtz179liRIkXccf7B+43haZ46daoNGjTIWGvdvn17wzMtEwEREAEREAEREAEREIF4EJBgjgdV9SkCCUgAb2/wxXrloHXs2NGFRJME7L777nNeZjy7CNwuXbpYzZo17cwzzzSSdGXF6HfGjBnuhfAdOnSonX766Va7dm3ndSa7NuJ37Nixbj01Ah3v8ejRo2316tW2adMm5/XmnIjj1q1b24knnmhPPPGEde3aVdtNZeViqK4IiIAIiIAIiIAIiECWCCgkO0u4VFkEkpcAgjdoeGq9eW8wXl0ELUm1CJu+9dZbDc/zo48+6oTyQw89ZPXr1/fNMvXOOmPWKRM6TUg3Rtg1hjAnuRdroxHiQ4YMcZ7ldu3auYRf1apVc/UYQ4ECBYzyChUqWKlSpaxu3bpuDfOll17q6ugfERABERABERABERABEYg1gQL/7LNYd6r+REAE8g8BMlYvX77cDjnkEBcund2ZkbwLbzHCPRhuTcj2qlWrDHFcsmTJUPf8p4nzHnTQQU4Yhw7s+/Djjz9aiRIlrHLlysFifRYBERABERABERABERCBmBKQYI4pTnUmAiIgAiIgAiIgAiIgAiIgAiKQXwhoDXN+uZKahwiIgAiIgAiIgAiIgAiIgAiIQEwJSDDHFKc6EwEREAEREAEREAEREAEREAERyC8EJJjzy5XUPERABERABERABERABERABERABGJKQII5pjjVWSoSIDkVGadnzpwZl+l/++23tnHjxhz3/fXXX9uWLVvs888/d/ss57jDQAcLFixwibhmzZrltoIKHHJ7KI8bN87Ct7EK1onX58mTJ7u9nePVv+83VtfI96d3ERABERABERABERCBxCAgwZwY10GjSGICgwcPdvsBs2dwPOyOO+4whGhO7aabbrIlS5ZYjx493H7MOe0v2J69lD/44AN78sknbdKkScFDtmPHDuvcubORDTu3jTnPnj077qeN1TWK+0B1AhEQAREQAREQAREQgSwRkGDOEi5VTmUCeJLZzmjlypUhDHv37rVFixbZ2Wef7fYTDh34vw94VfG+/v3332kOUT5/vyQp/evv/5yXuRgPbzBbOn06aefWvv27e2PP/6wX3/91Xls6ZPPQWPbpl9++cUYJ+3CrXTp0m7bJvYw5sXYEbH0u3jx4vDqTlTPnTs3TTl7JTPGtWvX2tatW0PH6I89lnnxOWjlypWzbdu2GeffuXOnOyf9MIdI4/RtEdoLFy504/NlvIez88cYF/MIXh9/bMOGDbZ06dL9rgPH4cD46HfFihW+iWPJ9YZn0CJx9teIepHuE8rhxTnWr1/v7qPgtea4TAREQAREQAREQAREIPEISDAn3jXRiBKQAIK2a9euVqdOHevUqZN17NjR1qxZY2PHjrVXX33V3njjDRs6dGiakROmffjhh9sFF1zg2o0aNcodJzy5fPny1r17d6tUqZINHDjQCcmKFSsaob0YAq5ChQpOVLZs2dI+++wzGz9+vDVp0sSOPPJIa9eunZUtW9amTZvm6g8YMMDtV1y7dm079thjjfdwK1OmjBOz9IuoZcwNGjSwww47zIn9Zs2ahYTzY4895sZ2/vnnW6NGjYzQZox+jzvuOGvevLlVr17d+vXr58q9WEYUhwtmhCJjReA/8MADdtJJJ7l+6IP+gsLbdbbvn7ffftuJ7+OPP97Ni7ljkdhRzvU57bTT3NgaNmxoJ554Ykgc33777Y5/3bp1jfmEGx7xpk2b2hFHHGE333yzO3zjjTe6fac9by+ko3H21yjafUKnbdu2dfcOPLmPeMgiEwEREAEREAEREAERSGwCEsyJfX00ugQhgDDFe4lI5h2hN3z4cDvrrLPs6quvtltuucWuv/76NKN95pln7NJLL7UffvjBiWov+t577z17/vnnnYeZMgQdQvOiiy5yYc108sknnxgCr3Hjxmn6XL58udEeD2+3bt0MEY6XuH/s7TjYe5fv36adr4L4RNV6tWzXmsS5Ys6YrpD5G+bNkya9Wqlb388su2e/duI8R4ypQpbox9+/Z1/ft+ELGEn+N9fvTRR9266CuvvNLOOeccu+eee5yY93UjveM5x3O8atUqd5gHC0HD80ooNV5bxPSDDz5oF198sRPFkdjRluvDHPDe4gHm5XnzUGLTpk3uOowYMcK2b98ePJ37DIf777/fscUT/corr9i6devc9eYBxH333ZcpztHuE3/CQw891F27GTNm2OjRo/eLEvD19C4CIiACIiACIiACIpAYBCSYE+M6aBQJTmDMmDHOw1ylShU30tNPP91ef/31dEeNBxEP7BlnnOFEtvfGIjIRdojMSy65JNQHa4vx+iIY33nnHevVq1fomP+A9xQRXbhwYUO4/vzzz27NMOV4SIsVK+Y82r5+8B1RXqhQISNE2hsiuVatWu4r40VQTpw40egPDzDG+mM83IQ1Ywh1DA8z3maEafHixd25EeJFihRxx6P9Azs87IwDD7fv19efPn26C4fGm4xw5wEFDwKoF43dhx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SEACEqggAgrmChosTZVAQwQMyW6IjuckIAEJSEACEpCABCTQdAIK5qYzs4QEyo6AIdllNyQaJAEJSEACEpCABCRQBQQUzFUwiHZBAnMCgV9++SX8+OOPdbo6Y8aMOvu5O7M7n5vffQlIQAISkIAEJCABCWQTUDBn03BbAhVMoJpDskePHh0WWWSRsNVWW4XTTz89jtJ5550Xtthii7DWWmuF8ePHhylTpoQDDjggHHjggeGrr74KP/8c/jjH/9YwSOq6RKQgAQkIAEJSEACrU2gbWsbYPsSkEDzCVR7SPaFF14Yxo4dG1ZZZZWw2mqrhX322Sfceeed4YUXXghPP/10+J/+Z8ophHM06ZNC/fdd1/Au9y3b9/mw7UGCUhAAhKQgAQkIIE5loAe5jl26O24BCqHwPDhw6NYfu2116LRCy+8cJhnnnnCzJkzw/fffx/GjRsXevToES699NJw5ZVXht/85jfhnXfeCV26dKmcTmqpBCQgAQlIQAISkEDZEdDDXHZDokESKIxANYdkd+rUKXqRx4wZE+65556wzDLLhN/vehW7duoUOHDjFcG+/zvffeG+EhnPfdd9+wxx57xNDsiy66KAruwshaSgISkIAEJCABCUhgTiWgYJ5TR95+VxWBag/JHjBgQFhooYXC448/Huaaa67oVcbDTEj2E088EUU0A9q2bdvw6aefhp9++in84x/iKIaIX3XXXeFk08+uarG3M5IQAISkIAEJCABCZSegIK59IxtQQItQqCaPcyXX355WH311cPdd98dWd52221RKD/33HOBMO0HHniglvHQoUPDCSecEPcPOeSQOJf54osvrj3vhgQkIAEJSEACEpCABBpLQMHcWFLmk0AVE/jhhx9C+/btG91DVqDG08unJdLUqVNnaWbkyJHhiy++CIsuumgdO44++ujojabA7bffPks5D0hAAhKQgAQkIAEJSKCxBFrmbrex1phPAhIoiEChIdmTJk0KK620UujevXuc74tw5jVNrETNB681XtwTTzwxnn/llVeifWeccUYMiy7I2CIWWnzxxeuIZarmmEkCEpCABCQgAQlIQALFIKBgLgZF65BAGRAoJCT75ptvDqeddlqcC7z00kuHBx98ML7TeOLEiYGwZ17fxKJa888/f7jqqqvCkCFDwoQJE0Lnzp3j8TLotiZIQAISkIAEJCABC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MSqBQCxfIw099zzjknvPHGG2GBBRYI77zzTjjhhBMqBUPR7XzyySdDr169wuqrrx7GjBlT9PqtUAISkIAEJCABCUigeAQUzMVjaU0SaFUCxQ7JLpaHOUFBILZv3z4ss8wy6VBRvittDvO1114bZsyYESZOnBj69u2rcC7KVWAlEpCABCQgAQlIoDQEfA9zabhaawUS+PLLL8Njjz0WPvnkk1axfq65Cn9+9dJLL4X3338/3HHHHUWz/b333gvPP/98mD59etHq/OWXX8Kdd94Z5ptvvqLU+eqrr4avv/66qP0uimGzqWTFFVcM48aNCx9++GHMiXCed95542riPXv2nE1pT0tAAhKQgAQkIAEJtBSBNhnvTE1LNWY7EihnArfccksUXh07dixnM/Pahsh/9913w6abbpr3fCEHEeDt2rULnTp1KqR43jJTp04NHTp0CMXyhv/4449xlexiCfC8Rpfg4NNPPx09zNlVt23bNgwZMiT0798/+7DbEpCABCQgAQlIQAKtSEDB3IrwbVoCEpjzCEyZMiWssMIKYdq0abHzeJaZ081iYEsvvfScB8QeS0ACEpCABCQggTImYEh2GQ+OpklAAtVHYNCgQVEsI5RPPPHEcOSRRyqUq2+Y7ZEEJCABCUhAAlVCQA9zlQyk3ZCABMqfwMyZM+MK2YS5Dxw4UKFc/kOmhRKQgAQkIAEJzOEEFMxz+AVg9yUggZYlwLIRxZrD3bKW25oEJCABCUhAAhKY8wgUvizvnMfKHktAAhJoNgHFcrMRWoEEJCABCUhAAhJoMQIK5hZDbUMSkIAEJCABCUhAAhKQgAQkUEkEFMyVNFraKgEJSEACEpCABCQgAQlIQAItRkDB3GKobUgCEpCABCQgAQlIQAISkIAEKomAgrmSRktbJfBvAt9880144IEHwsSJE+swYUGphx56KLz00kt1jjd255VXXglPPfVUnexfffVVePTRR+sca62dp59+Orzzzju1zfNOYzj8+OOPtcdefvnl8Nprr9XuuyEBCUhAAhKQgAQkIIFCCSiYCyVnOQm0IgFE4/bbbx+OOOKIOlaMHTs2bLvttuH000+vc7yxO+eee2743e9+F5555pnaIhMmTAi77bZb7X4hGwj8W265Jdx4443hk08+KaSKWGbo0KHhT3/6U235YcOGRQ5/vfa4/tu+++4cEHH6zdd0MCEpCABCQgAQlIQAKFElAwF0rOchIoAwJ4fj/++ONaS26/fba7eZs/OEPfwg/fRTc6qoLXv33XeHhRdeOIrlIUOGhGWWWSYMGDCg9nxTNrbaaqvwyCOP1Ba5/77Q4cOHcKYMWPiMTzOb731VujevXttHjckIAEJSEACEpCABCRQKAEFc6HkLCeBMiCw6667hnvuuSdaMnPmzHDTTTeF/fffv1mWnXHGGWH69OnhkksuaVY9qfDZZ58dhg8fHkaNGhWeffbZcO+994bzzjsv/PDDDylLo78333zz8OGHH8bP1KlTw+OPPx4uvfTS8Le/S3W8cILL0QBvd566zW6znLI+Nxzz4XXX3+9HEzRBglIQAISkIAEJCCBLAIK5iwYbkqg0gjss88+USRj94svvhjN32STTZrVjQUWWCBceeWV4ZRTTgnvvvtus+qi8DzzzBPnRX/33Xexrh122CEQOt62bdsm173yyiuHZZddNjz/POBMOx11lknwICwcYQ0oeTbbLNNQXU31Zhvv/02fP3117EYDxiyHwAQgv7LL7/Ec9n5OMC5n3/+OXz00UfxPPl46IHnnOMkogZmzJgRt/1HAhKQgAQkIAEJSKD1CCiYW4+9LUug2QQQnyyE9cEHH4Q77rgj9O7dO8w1V/P/rHv27BkOOOCAcOSRRzbbxgsuuCDcfPPN0fO72WabBTzOiy++eBTShVTO3G2EMYub7bLLLqF9+/Zx3jbh6U888UTA9lInvPAI8+WXXz4MHjw4hoTvvPPOsdnvv/8+LLfcclFA5+YjA+e23HLLsPvuu8e54ZMnTw533nlnuP766wPbjCFz02F16623lror1i8BCUhAAhKQgAQk0ACBprt4GqjMUxKQQMsS6NixY9hrr70Cc5dvuOGGcN9990XvbTGsuOiii8JKK61U68EutE6E35dffhntwiuMMBwxYkScazz33HM3uVrEJiIc7+51110XyyOiEZ08PLj66qubXGdTCrz33ntRrBNejrcYAYwnHg/559/Hp588sk4JvQZUZ+d77DDDotN4cFfY401wgYbbBC9yoTRd+rUKX4IL0f4Uy/9MUlAAhKQgAQkIAEJtB6B5ruiWs92W5aABDIE9t5773D88cdHjy0CrFhpiSWWCKxKffnllxdc5dtvvx09scyv3mijjcKJJ54YmGeMwMxevKspDTCPmV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HDgwDBgwoDZbPnZfffVV9LJzjnpzr4nawm5IQAISkIAEJCABCZQdAQVz2Q2JBpUbgQsuuCB06tQp7LPPPmHdddcNjz/+eBg1alS44YYbAh7Gq6++uo7JhGn/+te/Dvvuu29YZZVVwt133x3PE5686KKLhl69esX6Lrzwwnh89913DxdddFFtHdtss024/vrrwyabbBIefvjhKDqXWGKJsO2224bu3buHX/3qV+Evf/lLzD9mzJiwwAILhC5duoS11lorzDfffOH999+vrYuNJJYRrghcbCb/csstF8V+165da4Vzvr5SxxFHHBF++9vfhlVXXTVsuOGGsQ+I6Ny6yZsSQnHhhRcOiOyzzjorbLXVVmHllVcO3bp1i9+cz0233HJLrHOjjTYKiy++eHjooYdiFsT2SiutFHr06BFt32WXXeLxX375Jey0007RtnXWWSdsvvnmtYJ05MiRsS44rrnmmiG3PR5aLLnkkpEB/SIdffTRYamllgrrr79+WH311cOkSZPi8fPOOy/ag/30n2/S6aefHs4888y4XR87xoyx49rheuAhi0kCEpCABCQgAQlIoEIIZLwlJglIoB4CGaGGm7Hm2WefjTkygq5m6623jtsnnXRSzRlnnDFLyf3226/mtNNOi8f/ve/1xx++OFx+5BDDqnJhO/GbeqjXtI111xTkxF0cTvjJY3HM17kmowArLn/vtrvvzyy3gsEwIe81x88cU1GfEatzMe6Jobb7yxJuO1rBkyZEjMl/E2x3PpH/qQEbc1GW9rTcarXJMR4zFfxtsZsxx77LE1p5xySk1Dfe3Tp0+0Z/r06TUZ72pNRlDWZB4axDLZdac2+U52Z7zMNbDKiNKajJc2Hl922WVj37LzZ8RvTUbA1mQ86zUZT3xNJoQ87rOdCSmvOe6442I/M0I32v/qq6/WPP3007FejtE3OI4ePTq2lxHzsa2pU6fW0B7HsxM8GIOjjjqqJiPqa956660aysCefcZx/33r6FujmciCiLHAw44INZHXfRrduwYR+rKePZrXnzxxdgmTEwSkIAEJCABCUhAAuVPQA9zhTzY0MzWIfDoo48GPJd4RUnMycXr+9lnn9VrEB7EP/3pTwEvKKHCbJMGDx4cCMvt379/OOigg2rL42EmTJm89957b/RG4tHOTXvvvXc8tPHGG8cQbEKEsY/ybdq0CRl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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-30" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.714819Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.714758Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.717140Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.716882Z&quot;}}" data-outputid="dc1cf71b-da82-4637-faa7-cc0f11bda9f6" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb8-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'M'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'N'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'S'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'W'</span>],</span>
<span id="cb8-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.6447</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2734</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.07922</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2943</span>], <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here obserbing data in each region, to link the observations to each event</span></span>
<span id="cb8-4">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb8-5"></span>
<span id="cb8-6">likelihood</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="8">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>M</td>
<td>0.64470</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>N</td>
<td>0.27340</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>S</td>
<td>0.07922</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>W</td>
<td>0.29430</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-31" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.717947Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.717892Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.720244Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.719986Z&quot;}}" data-outputid="474d89dc-782c-4422-9e33-48ebe207a4fc" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">bayes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.concat([probabilities, likelihood.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>])], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb9-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="9">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>M</td>
<td>0.21</td>
<td>0.64470</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>N</td>
<td>0.17</td>
<td>0.27340</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>S</td>
<td>0.38</td>
<td>0.07922</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>W</td>
<td>0.24</td>
<td>0.29430</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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CABEqQQMmJoAsuuCCsvvrq4YADDghdunQJDz/8cHjrrbdCx44dQ/v27cPYsWPDP/7xj9C5c+fQo0ePcNBBB1Vh7dmzZ9h3333DeuutF6ZMmRIFySqrrBKOPfbY0KFDh1iWzA8++GDo2rVr2HDDDcNZZ50Vy5Pn+eefr6or7Q8ePDg8/vjj4aGHHorXRKCNHz8+Xrtv376xXYihF198MWy88cbhkEMOCbQDUWaSgAQkIAEJSEACEpCABEqPQMmJIBB179494HUZMmRIQISQEBqvvPJK6NatWzjjjDOioHn55ZfD1KlTw+uvvx7znHjiiWHMmDGhX79+4c4774yeoksvvTQMHTo07LfffmH48OExHz9effXVKGYuvPDC6EGqOpH3hTq33nrr0KtXr6ozF198cfjrX/8ann322VjvVVddFUaOHBk22GCDcPPNN8eQui+++KIqv18kIAEJSEACEpCABCQggdIhUJIiqFOnTpHQqquuGu6+++74ffPNNw+LL754FC6rrbZamHfeecMcc8wR1lprrfDcc8/FPHhiSOuuu25AIM0111wBEbPtttuGUaNGVc3n2XLLLWNYG3WsuOKK4Z133onl6vrjrrvuCieddFL0Bj3wwANh7rnnjnOICI3D83TRRReF+eefv67VmU8CEpCABCQgAQlIQAISaEYCJSmCWJiAsDO2u+++e8SR5uIQ1vbGG2+E7777Lnpw8PwgkEjjxo2LW8rhTbriiivC3nvvHR577LHQrl27eI4fL7zwQqyfOUHMDWLBg5pSdt4P+bbbbrsYRoewOuaYY2Ko3bBhw+L3adOmhcUWWyzce++9NVXpOQlIQAISkIAEJCABCUighQjM0ULXrfGyiBbmBbEYQlqZLRWYZ555woABA+K8H7wtO++8c/TmcP68886LH0TN0UcfHZZddtm4Ehyhanh9qHerrbaK83WYb8TCC2eeeWZo06ZNrD5t07XYZx7So48+OlMo3ZFHHhnn/tCW999/P9aLMEMcERKHENpmm21SNW4lIAEJSEACEpCABCQggRIi0Ca3etp/l1IrgYadffbZYZFFFgm77rprWHjhhWPIW6FmpYUHEDfZ9Omnn4ZFF1206hBCii4usMACcWU5togbyuNdatu2bVXe6r6w6htlCL9LiTrffvvtsPzyy1cd51pc/3e/+13K5lYCEpCABCQgAQ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txVYxS7mff/45TJs2rdHq/Omnn8IPP/wQX+o6y8WKPDBhwoTw/vvvN1obi2xGvYux0t4XX3wRBSFiaNSoUaFz587hr3/9a+jatWu967OABCQgAQlIQAISkEDDCbTJPV0vr4kWDe9zuPTSS8Po0aPDggsu2Ai1NW8VLDLw0UcfhQ033LDRLswiCT/++GNYYIEFGq3OL7/8slH50kZC4tq2bdtobWyOih566KEwderUmS5FH0aMGBFY+c4kAQlIQAISkIAEJND8BCpSBDU/Zq9YiQRef/31uPgEgpDEIhG84+iII45oVIFYiWztswQkIAEJSEACEmgIgYoMh2sIMMtKoK4EzjjjjIAAUvzUlZj5JCABCUhAAhKQQPMQ0BPUPJy9SoUR+Oabb0Lv3r3DZpttFo455hg9PxU2/nZXAhKQgAQkIIHSJqAIKu3xsXVlTKCx50WVMQqbLgEJSEACEpCABEqKgCKopIbDxkhAAhKQgAQkIAEJSEACTU3A9wQ1NWHrl4AEJCABCUhAAhKQgARKioAiqKSGw8ZIQAISkIAEJCABCUhAAk1NQBHU1IStXwISkIAEJCABCUhAAhIoKQKKoJIajsKNGTlyZHj66adnOfnss88GzhWTeOnqAw88EH744YeZinOMlc1aOr322muB/qX0008/xfa+/776VCYMmVKfOlt1QG/SEACEpCABCQgAQlIoA4EFEF1gNTSWbbbbruwySabzCROvv/++7D11lsHzhWT7rvvvrDDDjuECy+8sKr4L7/8Eo9NnTq16lh9v/z444/h4YcfDldccUVAyBSbxowZE3r16lVV/Lnnnotto96UBg0aFM4999y061YCEpCABCQgAQlIQAJ1IqAIqhOm0siElyalRx99NHz11Vdpt+jtcccdFyZNmlR0+WzBd955Jyy22GLh5JNPjl6bNdZYI2yxxRYBwVbfRLkPP/wwTJ48ORZFWC2wwALhnnvuqaoKBghBkwQkIAEJSEACEpCABOpDQBFUH1otmPf3v/99uPXWW6tacNttt4X+/ftX7RfzBU8Q9f7pT38qpvgsZS699NKw++67h6eeeiqMGDEivPfee+Hxxx8PTz755Cx5azuw+uqrhyWXXDI888wzMeu9994b8Py88MILYfr06eGzzz4Lr776aujRo0dtVZXU+XfffTfcf/9JdUmGyMBCUhAAhKQg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3EMqAO+KdEP2tuuXbt0yK0EJCABCUhAAhKQQCsgoCeoEQdxzTXXDBjUpPPOOy8ss8wyYa+99grrrrtuGD16dDyOB6l9+/ahX79+YdVVVw0jRowIp512Wnj33XfD4YcfHhAOeISWX375sNFGG0VDfeDAgbHs2WefHbbaaqsoioYNGxZOOeWU8Le/S2eq+56O+64Y9h+++2jGCE8rLESbaYtiJKNN944bhFcI0eODJ06dYoCr0ePHgHh9cwzz9TYxvx+de/ePWy66aaRz1JLLRUOOOCAyJLrICi/fbbWN8+++wT89DHFVZYIXD9bEp8EI0InPRBVFGWdOSRRwaukdo8efLkeJx+IBgZO/r41VdfxeP+kIAEJCABCUhAAhIofwKKoAaMIYLn9NNPjx/C2RArhMXhQRgwYEB46qmnAnNrTjjhhHiOSxFitv/++4eXX345XHfddVE0DBo0KKy00krh5ptvDh07dgznn39+OPTQQ8Pnn38ew+vwaKS5P9T37LPPhiOOOKKq5TVdj0zff/99mDJlSjT0qwo1whc8Na+99lr00FAdAo80adKkMHz48PDee++FXXfdNQq92tqY36+ll146fPLJJwE2Q4YMiRzgTUgaIvGdd96JwpFjsEGAVhcaOPvss0dPDx43GJNOPvnkKDipe9q0abGuDTfcMApLzp900kkxzBFhxfiZJCABCUhAAhKQgARaDwFFUAPHEi8DHzwGGP/9+/cPjz76aFhnnXWih4TqmTv00EMPBUK3+vbtG84444yw8847R+Od79mEWLjhhhuigf6Xv/wl3HHHHWGBBRaomi+EZ6lz587ZIjVej4wIqhVXXHGmMhj3G2ywQfzglcpPc889d/jll19mOsw+bUmpV69ecR7UIossEj009I9E39dff/0Y1telS5coXGpiQpn8fhEaOOecc0YvzGqrrRbrpE14fBBHv/vd76K3DY8UeR988MEYFkdd1SWEVs+ePaMQguGdd94ZPW2ITur54osvosAkBG7s2LFRrCKgmA9kkoAEJCABCUhAAhJoPQScE9SAsSSsKoWjZashXIt5LSnh0SEhIPCMEHJ13333hWuvvTZ+sospMBeItMkmm0RDn+9bbLFFFBV4QAgvy081XY+8ae5Lttx8880XTj311HgozTnKnme+0lVXXZU9FEVeVoDNM888M51PO9l5R2mOTW1tzO8XniAS5ZkflJ8QVYTjXXrppQExhmCqKbGyHcITDw+Ci4TgRBx269Yt7rNFaDGviZTqzBeD8aQ/JCABCUhAAhKQgATKloCeoCYYum233TZ6EvAmIGoQExjqiAMWTSBs7LDDDouhcQgbVjQjIRQQJLvvvnsMhdtpp51imBwLLtQ0J6Wm61XXPRYGQBTwYQ5OfsKTQ/vTktiEtiE48OwUk4ppY03XeeKJJ6KHDY7MscoKyfxyiBqYEmpIaBv7LE6BV445WITBbbfddtFbhzDFy4TYu+aaa2K+FEKXX6/7EpCABCQgAQlIQALlSUBPUAPGLbtKWbYaPC+EV7GwQQofY6I9ifk9Bx98cPTCIHrOOuus6H3YeuutoyGOKDr22GPjUtTnnntuFD/MO2LOS3WpputVV6a24wiDwYMHx3bQB0QYQg5PSqHEKneFEp4cPg1pIyFp+YkQvksuuSQudoCoQcSceeaZoXfv3vlZo+hMC1MkLxWr8BEeRzlWsKOPLFRx++23x/J4yQidYxw5nsZxlso9IAEJSEACEpCABCRQdgTa/JpLZdfqMmkwc1cIw2LRgxRaRdNB/tZbb4V2uaWXs8eZp0NYGKKBxQyYY8TKZbx/qC6puuvVpWx1efCYpKW6G0MINGYbmYvFAgmEtCHCYA2r6gRZdX1kYQREHmInW5ZjzHNi/LLHq6vH4xKQgAQkIAEJSEAC5UFAEVQe42QrJSABCUhAAhKQgAQkIIFGIlA4hqmRKrcaCUhAAhKQgAQkIAEJSEACpUZAEVRqI2J7JCABCUhAAhKQgAQkIIEmJaAIalK8Vi4BCUhAAhKQgAQkIAEJlBoBRVCpjYjtkYAEJCABCUhAAhKQgASalIAiqEnxWrkEJCABCUhAAhKQgAQkUGoEFEGlNiK2RwISkIAEJCABCUhAAhJoUgKKoCbFa+USkIAEJCABCUhAAhKQQKkRUASV2ojYHglIQAISkIAEJCABCUigSQkogpoUr5VLQAISkIAEJCABCUhAAqVGQBFUaiNieyQgAQlIQAISkIAEJCCBJiWgCGpSvFYuAQlIQAISkIAEJCABCZQaAUVQqY2I7ZGABCQgAQlIQAISkIAEmpSAIqhJ8Vq5BCQgAQlIQAISkIAEJFBqBBRBpTYitkcCEpCABCQgAQlIQAISaFICiqAmxWvlEpCABCQgAQlIQAISkECpEVAEldqI2B4JSEACEpCABCQgAQlIoEkJKIKaFK+VS0ACEpCABCQgAQlIQAKlRkARVGojYnskIAEJSEACEpCABCQggSYloAhqUrxWLgEJSEACEpCABCQgAQmUGgFFUKmNiO2RgAQkIAEJSEACEpCABJqUgCKoSfFauQQkIAEJSEACEpCABCRQagQUQaU2IrZHAhKQgAQkIAEJSEACEmhSAoqgJsVr5RKQgAQkIAEJSEACEpBAqRFQBJXaiNgeCUhAAhKQgAQkIAEJSKBJCSiCmhSvlUtAAhKQgAQkIAEJSEACpUZAEVRqI2J7JCABCUhAAhKQgAQkIIEmJfD/AZ6kbRPZBQnCAAAAAElFTkSuQmCC" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-33" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.721048Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.720989Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.723669Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.723361Z&quot;}}" data-outputid="5892f9ba-ea7c-49e3-f352-a99ff6ddd6df" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb10-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="10">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>M</td>
<td>0.21</td>
<td>0.64470</td>
<td>0.135387</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>N</td>
<td>0.17</td>
<td>0.27340</td>
<td>0.046478</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>S</td>
<td>0.38</td>
<td>0.07922</td>
<td>0.030104</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>W</td>
<td>0.24</td>
<td>0.29430</td>
<td>0.070632</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/data:image/png;base64,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wwQfho48+aol3/fXXh549e4b3338/pjnggAOiaLrqqqvCbbfdFuuU4pAIMfXmm2+2pOcLdcvmOdpBNyQgAQlIQAISkIAEJCCBpiHQ7ULpr3/9a5hvvvnCtttuG5Zddtlw6623hhdffDEssMACYY455ggPPvhgtPasu+66Md7pp5/eAnu99dYLQ4cODYsttlh49dVXw6hRo8Lcc88d/vCHP4T5558/PPTQQzHuTTfdFFZYYYWw1FJLhWHDhsV9Sy+9dBQ/KTPS3HjjjeHyyy8PZ599dswvxRkxYkRMv+qqqwYsWYimM888M1D+RhttFPbZZ5+UjZ8SkIAEJCABCUhAAhKQQBMS6HahBMN+/foFrDfnnHNOOP744yPWN954Izz11FNhuummi5acBx54IDzxxBPhmGOOiS5zRNpvv/3CPffcE7bYYotwxRVXhHfffTecdNJJ4aKLLgpbb711uOyyy2Je/Hv66aejS91xxx0XLVEtBzJfZpxxxjBkyJCw6667RsHFIaxVf/rTnwJii/pgxRo5cmS49NJLYxk333xzmGeeeUazamWy9KsEJCABCUhAAhKQgAQk0AQExolQWmKJJSI6BMc111wTv6+00kph2mmnDXfddVdYfvnlQ48ePcJUU00Vxh9/PD666/HOMstt1z8XHTRRcPjjz8eJpxwwiie1lhjjXDHHXe0CKr+/ftHN7tevXqF2WefPfznP/+J6ar5hxvf888/Hy1Hq6++enQJxK3viCOOCLjpzTLLLFFAUT+DBCQgAQlIQAISkIAEJNCcBMaJULr33nujOxufgwcPjmSZP0TA/Q1rEpadt99+O85j6tOnTzyGhYlAOqxSp556athyyy2juEpxOP7II4/E/JlPxFwlFmloKzCvKQXymXPOOaMoQnytvfbagX3nnntutFghpLAuJfGW0vkpAQlIQAISkIAEJCABCTQPgfHHRVOwGjFPiQUcbrjhhtGqgFCaeuqp4zwkrElHHXVUy3G+84fw+f3vfx969+4dV7jDHQ7rEfmuttpqcREI5j+xWMShhx4arVMtmWS+YBXq27dv2G233QLzkQjjjTdeOPDAA6NVi23K2muvvcJMM80U51Gxah7zn2addVYOGyQgAQlIQAISkIAEJCCBJiTQo2K5+XkJuW5o4OGHHx5d6jbeeOMw5ZRTRte6omI/PDDeBzhkg3sR0ilgNiiCZNPPnlclY5PBBCr5GGlmmiiiVLUVj+/+uqrMPHEE48mqBBZrJCHq10KzIkiz2mmmSbt8lMCEpCABCQgAQlIQAISaEIC3W5RQvggNpiP1FbIiqFsvPz+ySabrOXwFFNM0fIdC1O1YZJJJhkjKsIpK5KIMP30048Rzx0SkIAEJCABCUhAAhKQQPMR6HaLUvMhtEUSkIAEJCABCUhAAhKQQLMRGN2vrdlaZ3skIAEJSEACEpCABCQgAQl0gIBCqQPQTCIBCUhAAhKQgAQkIAEJNDcBhVJz96+tk4AEJCABCUhAAhKQgAQ6QECh1AFoJpGABCQgAQlIQAISkIAEmpuAQqm5+9fWSUACEpCABCQgAQlIQAIdIKBQ6gA0k0hAAhKQgAQkIAEJSEACzU1AodTc/WvrJCABCUhAAhKQgAQkIIEOEGg6ofTFF1+EddZZJ3z88ccdwGESCUhAAhKQgAQkIAEJSEACITSdUDrxxBPDDTfcEPg0SEACEpCABCQgAQlIQAIS6AiBHj9WQkcS1mMarEm9e/cOn376aZh00knDG2+8Eaaccsp6rKp1koAEJCABCUhAAhKQgATqmEBTWZSwIiGSCIgmrUp1fOZZNQlIQAISkIAEJCABCdQxgaaxKGWtSYm3VqVEwk8JSEACEpCABCQgAQlIoD0EmsailLUmTT755JEB4umEE05oDw/jSkACEpCABCQgAQlIQAISCE1hUcLdboYZZojd2b9/3DnnXeGLbbYIgwfPjx8/fXX4fXXXw/TTz+93S0BCUhAAhKQgAQkIAEJSKAqAk1hUZpiiinC3HPPHe67775w3XXXhQkmmCCceuqp4e677w5LL720IqmqU8FIEpCABCQgAQlIQAISkEAi0BQWpdSY9DnVVFOF999/P/Ts2TPt8lMCEpCABCQgAQlIQAISkEDVBJrColR1a40oAQlIQAISkIAEJCABCUigCgIKpSogGUUCEpCABCQgAQlIQAISKBcBhVK5+tvWSkACEpCABCQgAQlIQAJVEFAoVQHJKBKQgAQkIAEJSEACEpBAuQgolMrV37ZWAhKQgAQkIAEJSEACEqiCgEKpCkhGkYAEJCABCUhAAhKQgATKRUChVK7+trUSkIAEJCABCUhAAhKQQBUEFEpVQDKKBCQgAQlIQAISkIAEJFAuAgqlcvW3rZWABCQgAQlIQAISkIAEqiCgUKoCklEkIAEJSEACEpCABCQggXIRUCiVq79trQQkIAEJSEACEpCABCRQBQGFUhWQjCIBCUhAAhKQgAQkIAEJlIuAQqlc/W1rJSABCUhAAhKQgAQkIIEqCCiUqoBkFAlIQAISkIAEJCABCUigXAQUSuXqb1srAQlIQAISkIAEJCABCVRBQKFUBSSjSEACEpCABCQgAQlIQALlIqBQKld/21oJSEACEpCABCQgAQlIoAoCCqUqIBlFAhKQgAQkIAEJSEACEigXAYVSufrb1kpAAhKQgAQkIAEJSEACVRBQKFUBySgSkIAEJCABCUhAAhKQQLkIjF+u5tpaCUhAAhKQgAQaksCwYSF8/HFDVt1KS6DhCWy8cQjLLNPwzWhvAxRK7SVmfAlIQAISkIAExg2BXr1CmHLKcVO2pUqgrARGjAgBoVTCoFAqYafbZAlIQAISkEDDEvjd7xq26lZcAg1JAKFU0uAcpZJ2vM2WgAQkIAEJSEACEpCABFonoFBqnY1HJCABCUhAAhKQgAQkIIGSElAolbTjbbYEJCABCUhAAhKQgAQk0DoBhVLrbDwiAQlIQAISkIAEJCABCZSUgEKppB1vsyUgAQlIQAISkIAEJCCB1gkolFpn4xEJSEACEpCABCQQ3nnnnfDGG29IQgISKBkBhVLJOtzmSkACEpCABCTQPgIPP/xwuPvuu9uXyNgdJvDDDz+E7777Lqb/8ccf43c++eMYn2MLKY8Ul/xSHun72PJoz3Hy/v777+Nfe9IZt74JKJTqu3+snQQkIAEJSEAC45jAWmutFTbZZJNxXIvyFP/AAw+E0047LXzyySfx75xzzgnvvfdeePzxx8Mll1wSXnnllbHCePTRR8OZZ54Z3n333fDpp5+GM844I7z/vvh2WefDeeff37497/PdY82hPho48+CldffXW4/vrrw5dfftmepMatYwIKpXHYOR9/PFopX/99dejbWc3eFLx7bffZnf5XQISkIAEJCCBDhDAosDA9oMPPgifffZZ/P7FF19EawD34g8/DDuT8c/zzuE1RWCpIw+Cbv6+++iruY3DMfZ195N3WPb0DVS5VkkUXXTSKDVhPPPHEYd555w2TTz55mG222UKPHj1arE1tQVlwwQVjPPp6ookmCvPPP3+YdNJJQ58+fcJkk01WVR5t5Z8/NtVUU4V55pknng/JipWP43bjERi/8arcHDUeOXJk2GqrrcLrr78e/4YOHRqFED+ys88+O5x33nlh+PDhMc5mm20Wn6DMOeecYZlllmkOALZCAhKQgAQkMA4IMIjFOnHLLbeE/73v3Fwi7ghLLnkkvHY/fffH2aeeeaAQPrFL34R90044YRh8803jxYKjk877bThm2++CeONN15gUP7888+Hl156KUw55ZQxHXnNN998cWA/DprZ0EUibBBEKSyxxBJR7CA+J5hgguhCB3tc3cYff/z4xzYPlHv27Bnj0l/0DYE+X3rppeN+4nAMEYY4JlAe+RDIhz/Kz+5HcFE+eSHeqAeBOiCWiU+e2XrHCP5raAIKpXHQfTyhOuyww+IPleIvu+yyMHjw4LDzzjuH5ZdfPrz44otRJF177bVhvfXWCxtssEF45JFH4gV6HFTXIiUgAQlIQAJNQ4CB7DTTTBOtFG+++WZYYYUVonXh1ltvjfffxRZbLDz55JNh6qmnDr/85S/jYPu5554LL7/8chwk4xY2xRRThBVXXDFapO69997wn/8J8w666yB/PjsU7Fa5Af7TQOwmxsCWwQo/ZQCYue1116LlrvZZ589TDLJJPGhM8KWwINlBGsKLMSByx19hshB0DAWYx+iaKaZZgrkg3AiLvkgiDhPEMycM6+++mq0JLKf8uaaa64orqjH22+/HfsbiyLHDc1DQNe7bu5LfkAIoqOOOqrl6cUaa6wRhg0bFrAc8YPlB77IIouETTfdNFqQ8LHdYYcdurmmFicBCUhAAhJoTgIMfLE2YEXAutCrV6/4h/scloMkphhs85esB9zDmeeClYnAfv4YIJMf7mH8IbJw8zJ0ngCihPlEyZURkYMFEKsgfQV/jiOm6BfEKnOYGE+lQP8yvwnLDwErEO6TiCDyYD4T1sVnnnkmCjBE04wzzhgfUo8aNSoKaB5Ys3+BBRYI/rXv2JcXDRHVjyEOEcQx4qkRLx5PhVK3dyXTCDkB8sPnQvyCy+8EK644oqw9tprh+233z5eCHhyhcXp3HPPDbvuumu8KN9zzz3RunTwwQd3c40tTgISkIAEJNCcBBgkM6DGksBAnPszrlv5AS/3bP4IDIqTxYH0/DHnhTT5dM1JrXtbhZhJQpWSETSIIoQOLnkIVEQT7BFAc8wxR3SLTG53pMFihCBOgfyIN8MMM0SrERYqxBfLwCNwcaucZZZZYp5vvfVWeOqpp8J0000XLYkcJ+1jjz0WRRllIp5SGkS2oXkIKJS6uS/5ofHUgZVRWM0FAYRf8xZbbBEGDBgQ/zDvE3iKctJJJ0ULFO55uOLx1IMftEECEpCABCQggc4RQPDgUsUDSgbP3J95iMmgGisRIopthBQCivs2Cw1gmcDlCusFA2fc7ZI1imMM5g0dJ5AVnHzPig8EEH1F/9AHCFiOI1RYsIH+QVzRX9mQzYP9aZtPysiWk98mftrH9xRSHoil7HG+G5qDgHOUurkfsRzxR2Cxhm233Tb07ds37LjjjvFCy5Op1VdfPR7nAsAFGHHFsqTMV1puueVGe7ISI/pPAhKQgAQkIIF2E0jWIwbeuLxzv8U6sfDCC7cMpBkEY3ngGA8qsSYw/wiLBumIy5wlBsdzzz13tC4l61O7K2SCSAArDqyZL4QFD+GJKMWtke8IUwQp88OWXXbZaBXCIoTLHUKK/mE8ldLRH4he3OgIiCzyog9xpUQIE5d+xp2OhbZIz/mBCx5xeYiNxQkRzZwkxm4c46E2FifmM7EfwUxdsDIaGp9Aj8oPu+lkL0s0cuLnnybUc3fxI2ZiIRfiFPihMekway5Ox/yUgAQkIIGuJYD1gGswgy5DHRCozOWtjHZDOPDATleGQTgeGgxsBw4cGPNL1gE20tAov6+t7ZQuGydm7L92E0CUIHqmn376KESw+iFiEB+IGMZ5/DYRUrjVsc37khhLMe+MuIggHjhzjIfO5Md+LE+47iFuEVwsFoFlkcUZcL1ETJEPf/z2WZIc8ZWsjvQv4zMEMkKZvBBX5IdIIi9WMMZ1r2nCyiuHcPTRoTJxvmmaVG1DtChVS6qL4/EjzIokiuNHZ5CABCQggXFDgKfVTN5m6WdD8xBABDGY5YEqVgY+8/ffIrGT35ffhlDRvuYh130tQcDwlwQrv0O+wzcJEL73qbhK8smDcSw6WIXSAh1YotI8I2qe8siOt/ieft/kwR+iivlqHEMopYfuWJAQQtQDIZT2p3cnUQbCiXPKB9zQaI6gUGqOfrQVEpCABCTQCgGeDDPAwUUmDW5aiTrabp4++8BqNCRNscHAmgEwLzElOKitv25FcLQ3IJD4SyH7Pe0r+sxfE0hX5DaHcGptP+IqBc+nRKI5Pn8+o5qjPbZCAhKQgASaiEB6opxvEoNdAsdTHPbxl/alOMxlYIWqpZZaqkUopTTkkU/DMfbxBJnBESHFT8fYl9LxPYVUZtr2sz4J4GKFq5VBAhKQQFsEFEpt0fGYBCQgAQmMMwK4sPAKBeYr8H6UNG+gT8XdBjcarETMG2C+CS43vIOO1a6Yc8DcBdITj8n5vEOFJ7248yBmmFeAew3zF+aoTM5nLgMTvIlDfCZpM+eBPBdaaKE4JwGxhSWCSd7ki2sP729BiDFfgvxw4yGtof4JKGrrv4+soQTGNQGXBx/XPWD5EpCABCRQSAAXGFabYj4Jg1pECC4uTz/9dJxwzUsfESeIGYQLr1tA7CCKmK/ApG2O9+7dO1qEmJRNPk8++WScl8J38kJY4ZbHZG8CYgu3O8olP8Kdd94Z3Xpw1yLfhx56KAo1hBXpsTyRJu/GExP7TwISkIAEGpKAQqkhu81KS0ACEmh+AogPhBHzArD8MOEe0YOlKC3Vi1WHlbEQQViYsCQhkm6/fa4EhX7SY+AQXSRlsn7WH1YyplXLhCHY1iL2M8y0VieKBtXO9JguSLe1FNPHfPHqoTFiTjMY2LSOCKK4wYJSEACEmgOArreNUc/2goJSEACTUkAqw+CiT++80fg3Ta44qX96RMBw7K9CKh/vOfcRUqXkKZDYgmjmM5IpAnlicmkGMh4i/t5xhiiXzTBHP2UR77iJvSpeMxsf8kIAEJSKDhCWhRqqMuxM/9wgsvjH+8/MwgAQlIQAK8Oueb+E6UZMVBuOBuhyWHdx1x7eQ9dIgnxA/WJCbqDxgwIL4gElFD4L0q5IEVCGsQgod3svAunSS8yJvAJ/uSGMJihIsd+3DJw3rF+1tSPESbQQISkIAEmouAFqU66U8mBK+77rrxRkyVuNlfe+21YbHFFquTGloNCUhAAuOGACKE+UMIFeYtLbrooqFPZUEHXOweeeSRcOutt8YFHRBGuOcx3+j666+PFidc69hGON11111h8cUXD0suuWR82eiVV14ZXfnIi/wRQbjYYW1CQLFAxFtvvRXefPPNsP7668f05IvwWrnyAkasScRDqPHJghOUZZCABCQggeYg0KPyNOynx2fN0Z7YCnzZ8UFvpEm1m266abj00ktH64VBgwaFK664YrR9bkhAAhIoEwEsRffff38URgsssEBsOpag5BLHJwInWY3Sfm5t/LE/uy/FSxYgjqXjiWvRNsfIL7n7sd1aPI4ZuoDAsGGYF0M48MAuyNwsJSCBVglUHgyFo48OYZllWo3SrAe0KNVJz2JRyoeiffk4bktAAhJoVgIIE1zfEEJJ2CShQ5sRKoQkhuJG5R/707HsvvSdz2w+bI8tfopTVBbHDBKQgAQk0HwEnKNUJ326TIFKL9pXJ9W1GhKQgAS6nADvR3rnnXeia9tHH30U5wUVFZoXOUVx2FdtvNbS1yqPtvL3WHUEENGcH8xfS3+IavbXS0DcUzfq2Va90gMB4tYikF9ikj47w4YHFbSBz3oP1BGX2fRgpa36wimdQ9XEbyuvejyWPQ/aql/iMLbztK08mvmYFqU66d1DDjkkvtsDf3sCPviHHnpondTOakhAAhLofgKsIse7k3C5Q+Q0kjt199MqV4kMhkeNGhWFNAM9FuhgzhhzxFjinRcA10IYd4YqLy5+8cUX4/L0LB1fNH+Nun/66acxHmJm6aWXHsPa2d46MGfu+eefj4uXMKeP5fH5ZO4d8/rSqo7V5AvnV199NdaRd5WxFH+9Blau5MXRzGVkfjfzFVsLcGdxF+Ykwp2VMuHUFYH8qRvnJP3QHQHhxxQUzgPKXWqppVotFvdm5mhyXvBy7e6qY6sVqrMD3dNjddboeqwOKyrx8sTtt98+PrU566yz6rGa1kkCEpBAtxFgoMtNm0ENYVwPfLut4RY0VgI8/X7ppZfCP/7xj3jPXG211eKA99lnnw1rrbVW+OUvfxnfi5XPiHMJIcEgmYF03gUzH78z2y+88EI444wzwjzzzBN+85vfFAolBrQIkb/e/x/GaAn6xAzLfuSP1I/DDD4errroqzDHHHKF/6RFfvXW2+9+PCBhw6srsvqjbz7q7WHELxwecSIEfG9ZYxP6lkosQImK16yENaf/znsQolVrvk/OFcIH5XCSUYMpWC1xQg4rsjIM6eeeaZcPbZZ8cXYbcllIh3+umnx/rxbjms94gr3i1nqLhpC6G+CLAyEyeqQQISkIAEfiKAQFIkeTZkCTCIY4l4VhrE4rjmmmuGIUOGxPPkkksuicvGZ+On7zzZf/TRR8Pjjz8+hitZEuQp7tg+xxYfscYT+iILTkqLQEFIERfRxB+WMhYwYSDfkQATvFKwsiG8NthggygeeRnznXfeGYUBAunBBx+Mg2kG1a2FGWaYISBCeRlzCqnuaZvPon3peFvHUpxqP1vLi/2IuBVXXLEqMcL1BBG59tprj1H31srgtQCIiPxxtvP7su1BkGKxIX17Q2v5trY/5Y81nnOgaApHPi3MYJEsSTyAQHAiIA0KJc8BCUhAAhKQgAQakAAuVri3IZiwijAARJR8+OGH0bqUbxKC4KmnnorWFlw6GRimOSqkTZacNJDMHsvmxXEEF2IDYZMNHCMdx5kvU2SpwZ2NwXOa88OgPYkpLEi8n4u63nPPPQFrRHsDZTMwJ+DyR6AelIObH2Xfe++90d1vvvnmaymbutMmLG6JAWmpE+nZR935S3XnOPtJA7/8fuJyLMuJtsGIuCkNeWTLTPmmfXyShvplyyAeeVMOeVHXsVnhKJ86kU++f9gHv2z/UAZl8wLrp59+uqUt1Im8iEuaVFfiVxuy5xxtoBxCai/H8/nSXupPmVmu2XQcJ+TbR16pTxLH7PlHmiWWWCK+FuGGG25oqQ/7yxp0vauzns/IOqsejWrDj9QLjDZp1Rjy5wLRrqZjC2uxyUgAQlIoHkJMNhjPgqDYiwJPK3HUvTyyy/H+Ri9evWKjeeeykCQgEi47rrr4kAQFyiEFml4cfG0004b34XFvalv375x0I0FhjR9Ku/ZWmSRRaKwYnCKNYpP8uXJPWIDocY9jTxxuWMAiysXQg4XOgJ1wc0JIUd6wvLLLz/GYBaLEJ4lDFQpi3d2pTbERGP5hwsarl60Cbd+3gOGMKItq666avzEYsArSJizRN7wY44036kn7aLNWKUI8MbSwCd1hxmWPOY94e7IC5xTOt5dRj5PPPFELIt7N/2BdYs6MM2AfElLf2EdZEAPPywbfSq8sWbQdkK/fv1iPNgS6HP6iLqTXyqf8QTCEjHVWmDeDpY06sqcMdweU4AbfUee1IXjlEP/wRMXRKw0CGwshZTD+YObGsIEV06Ywa6awPyhxx57LMw222yxTdSN84bzCX7whjVMYE2+tI90lEccxkTUJbnJkQYxR1yOc/6lQN8hoFkghz6hD3lgkNKmeKTdZJNNwh577BHbT5wyB13v6rD3ObmbOXDx58KDOf+AAw6ITd12223jBYgXQR555JHxx73VVluFoUOHRlM3F6199tmnmbHYNglIQAISqJIAg0oG2QxaGaTjqsYAcdlllw0bb7xxHEgyiH3ooYfiE38GoAgfhEqar8Fg/O677w6XXXZZnNTP4BMrzkUXXRQHsFgK0jyPJGwQGDfffHMcaFNVxMA111wThQYDeb5jteKehZsWg+701J9BOO9LZD+WA+LecssthS2eddZZ42CXNiXrQGHEgp0Mpqk34gNGCAPqscYaa4QVVlghDrQZDONWl6xql19+eXjggQdiGkQEwuqmm26K7aAI2s+kf9pFfag3rOgHXsJMm/iDDXEQFsOHD4/s2X/11VeH++67L6alPhdccEFkR/0Y+JPXhRdeGMUqvMiDfBF59O8555wTxwUIujvuuCPceOONkTl15jttZvCPMGiNF0Lh/PPPj+2kjeSFaEiB/hk5cmSsM/1D+QgZvlMfXirNOcF5g6CmHohLxApsOI+SmEt5tvVJPZlPxfmW8uY8Pu+881rOP84l4vDia8rm5doITRjRBlwpOSepI66azIlLdUD4US8C8Tkn6B/anPqEvOCWDYxBEaGIbPIve9CiVPYzYBy0/+jKS8v4ceKXzZOT3/72t/GHzQUpiUQmFiKUuJDwBJAfMmLKIAEJSEACEkD08Md9hNXYsDLw5B1LEZaFK6+8MrrkMThmoIl4YgCJeMACxSfpcE1jAIm1g/QICsRV/8oCCAgqrDIHH3xwvAdhQTj33HPjggirrLJKHCwjNJgwjwWIAT1P7LfccsvAQz/KRkil+xoDb+qAhYjBNS52CIWigDWKJ/7MV6JOyUJWFDe7j3slljbKZiU3rAVYbrCEIIyw5MCN/LGEEIjPvK6DDjoothlRgDBCzOCGRcC6guUCixSDcgQMrmgzzzxzS37MdaFdsGWRBEQUbYARVjLSwI16IUr6VCxHAwYMiIN4hAJ/5A0v6slAfeDAgVEIIXp5uMqAH8sNeROfOtA+rGMwou8QG0UByxOC7ZhjjgmLL754bCOCJ/UBdURIck5RV0QG/QVLzgXqhHUFC1c6j2hL7969Y1zSEJ+55tUErE+kRdDAFcbUh3MXiw686SdEKe1FDCLsmVcFa7giDBHf1BvBxLm85557xvM21Z+0iDvEL+cn5zz9RP8Th/YVBcQ6FqqyB4VS2c+AcdB+npZwceUGQuDJBU+f+KFzUT/ssMPiReN3v/tdPI6FiScuv/rVr+K2/yQgAQlIoLwEGMgz2E8D2OyEdQbZ3E94As8KbwwmeRi3+uqrxwdvWFIY5BIQV3zHbQ7xRFwGjwzEERUMJhkc8+SeATpCCFHBQJhyiJ/mRj355JNxkEsaxBp5M/Bl8E59CdSLY+RPPagfn0WB9ORP2pS+KF5+H2IOlzUEHm3GrSuFJNjgRv78EZK7WXL5olxEIy6CiAjuy7SLQTtpEKK0g3IQZgg/LBVYhhCYBFbdY/BPPeCHKCR9Ygw3GCMUCGxTVyxEiBhEDUulkwarDf1DmQTSUQfqh1BgNTniEagrx4oC1hmEGAIEFrBHHKVA+bQHQcFx+hz21D+xIy7f+aN+POAlX4Ql51J7+oo8qANsaD9l0w7OG+bdwQru5EtdEGGUg0dOOm/oJyxEiDQ4kRfnF4G0CNUkshCWtDe5+m244YZxOwnmmCjzj/1tuTFmojb1V4VSnXVv/gdZZ9WrSXX4If/lL3+JJmSWLyWwHPo666wTXQT23nvvcNttt8UnPxw77rjjwhZbbBE22mijeBHiaRBPfAwSkIAEJFA+ArgN8aSbh2wM+rKDWGhwjAEnA0wGnQwyEU4M/Bgos82An/stIX3yPZ9X2iZOGpySPoWUlmPExSLAX1HgOHVCaGUHpwx+CSmv9J1BN/EZMFcbcCdj4I61DBGS6p9Nj5DAjSu1I7UrW2+OkTaVTd1SfPKCYxJbzLOiL7Bo4G630kortaRNi0lky+c7+aa82UZQkg7rHMINoTR48OAWMUfdyCvbHtrAdl6cZDmSdwoIBwKCBAakTWKRtsGNsQfjCyxFuAOSVzY/4qVtvF2o5/rrrx95tGbJSuW39pnlSpyUfzY++zgXqHP2OFzYpg/5o21sJ07pk7z4DmfODT5TyMZJ+/jkvOT3U/bw0+OEslOos/a3dtLWWTU7XJ199903XiBHVnyBeRLEU6HknoCIShcNLqI8CeGCzI0P14n9998/XHHFFR0u24QSaAYC3Ajzf43ertSesbWj2nhjyyd7vCvyzOZfy+/trSvxmynQHqxJDFCxLPCXDzwFTwNgjjHAZNCHKxHWFIQWgbwYaHLPSSKBQXcSU8ThO/dkBqA8qWcAzf2KtBzjaT7Hcc3qU3ElI3/uV+SHWxMWD8qmDBY54AWnuNIREDW4ghHIi5AG/bSB41gPsJJUE8gDkcF9k7pkhUg2PcyoE3Ul4E6G5QcrEO2irYgGrDhYmQjUGasF7cJVDEsTniEMzrHA4Hq43XbbxWMIGCxLuMslQYZQZb4LHGgjn/xlA25+CC7mEeF2l6xEWKyw5lEm9YMrIgYu9Cn74UzdcFWkfnwnbjbQRwz877rrrngMxilPWGMdwmJI2WxznsCCOEwDSAITboxbcHkjYNVhfhCMqBt1qDbQZ6nvqW/q/QJI47ziYBD4HDO0X/Ex9WO8hHFWPCwGvGSY47RBtoDC86j5B6KZYpAu7CE0keUl+qR6g5zHkSUPfQ8qBKaDcIRRxwR/vjHP452oWyUNuJ/ykUX/9NmDQgeLuS8YI+Jh5h/L7744nhxxK+ZF7/xwyfgdocLHtv0K5Mnf/730czdbPysV0SGBsB/M25qXET56bNTZFBUaM+ZKH+3PgZ4GSfdOY5EI92E5fAADgfiNMeDsSHISzJLzvAzuc9rrer5ZTqyQApDYIa+fxI7fmhMsB9vzJIPLsywGNASPsYLOOSlawFxGVwyLnEvBwG8lg5mNeBGMBdDKHAQzlc4XAZY9DLAJ3fFYNo8mZgidWHxYcQCMRhoI01iAH1q5XV0hA9/DFAZU4SeTD4RnAg5KgHA2hEAi5PvCuJMphXw2CV+TTc2xjkUw/moHAOso9BKvVjcIyQGds5ze+Cif4sEEEZxGfuDmImHziGuMEFDfGHeyEDbR5eUi4iicE292qsONyvExPazqIM/F54sS9tTsxggphAJFFn0mBlYV4MAg53MsQHdaQc4tIPlE9gm9826Xj3E31AXekvPpmrwzEWuKBtlAFX6sq8Z/qC/OkvxAQPYjk/SEtAeFFf+vTV/+8/WCE26GvqQV70GecT4oR4uK/RJ/QPfcY+zgPiEZ9zjfgwQSTBErGVAsdhgCUHF7sU4A076sC5SR8yP4k2wIK6c14gvPn9IlrJm/6hDgh2eDCGgi0s4Qcnzj14sI0got24qNKXsMJNkjohhPhN4PLIOY6QpG20nfHZpptu+tM5VLH0VVYDCZWNVP3SfPaoXHhHl9xN0HR+XJwMRTfRem/eoYceGutdxhXeuDjQd9lAP3IBMUhAAj8R4JLNJGtudgzqecLN4IybKqtaJT/+WvGivDTQqFWe+XwYVLLiFYNHJsu3FhiUsDoXN3EGUiyZmw0MSBi88OS02us/Ax8GbgxAmBBea37Z+nX2O4Mb5msySDrzzDPbbCMDJAZhLGSAJYP5MAz4ahHSsKGrz4t8XX+szF/9pvL0e9Svfx2fgNPHDJS5b2T7m0EiD9122mmnOADG0sGgj/piiWDwzgM3BqbcYwgMvBFV3IcY8JIvA2ssBLDkGNYLzj0G+YhrnsIj7Bn88skxrAoIHxgx8Eaokh+DfeIx2KZM0vKbRahwnH2koUzaw0NB2sEgGMvO2AJpyYPfAN8ZWJMP7coHymPxBuLg8k5baQ/igk84IRwoFwHAQJ5BNHUjf7hRdwbfBNrLPtJyjjFgJw/ygyf1oQziEw9+sIIPTBAFKZA/+TGAz4pf9iM4kzimbdSBMmk33InPQJ+60l8Ik6yLI2VgGcIiCQPqSj2pD22lD+kfAvWlj7DK8J3yqANpKZfrBXFpH1xIy3lCfRizECcF+hG3RFwLuTalwLlFekLiADPYkJ760TbyTayIS/uoF/1HmzmHEkPyIw+YkwdtoJ4IZsrgOHnSbvKkrvQv/LL9xHWD6/Juu+32E8OKVS9UFuKqqC2qUKpQveNrqbCM28ZyApcxcCHKB0VSnojbZSfA9YHVn7jxMjhEMHDzZuDDAOM3v/lNvHHXghM3T55G8jvMPiGtRd7ZPPr06ROf/o9tKVoGqgx+WF6YAU8+IJIYYBInO3DOx8tu81QaSz6DCwZx9RwYPLJS1tg40QYGUMTFcsBAkAFmrQJP4BHpPGVPA7Ra5d1WPpz7E1XaxdPztgLnKtaEZKXZeeedYz0ZCDIBHxZYFfjtMAjOhryYZACcDZxXDDoZzJJf9jyDCcKEPDjGNp/pO/VHLHCvow4M5gkM7lM9yBdLEgNaLDbV3gPJmwEzf2MLnBvMq4EP7nHMMaIfOb/SeZJtF0KAQTXtoe7Z9lAWPPLtZD/ikPpzjEE9gXLIr7UAOwb4lJUN8GE/9aNu6Tj5IVp4wAED/pIFKsXJ5gNrxAqc03HSkidp0ziE74QkUtlGaFAPvpOWcuCd8qGdhJQ2brTxj3Mhic0ULX9uc83LB9qb+omys+VRf+pIXWgT7SSPFI/+SG1M+xCT2fOG6yui9NeVBxJ5oZmvSxm2FUpl6GXbKAEJNBUBbnDJPYWbN4GbPQMsrDIM/jsbeBKOGKMsBp3ZQUD2eyqHfdkbdtrPZ1H87H5uxq0NCLNpGRQxEGWgVxR4esrT15SmKE46lurKAJABGFY5juWPpzzYn9KkfXwWxc/GzX7Ppiv6XpRXtow0oCmqRz4/4jBgYlCa8s3mxfdsPgy8cMUhZJ96s51vAwNqrJo8YWdeSRrwE7ceAgPENddcM4ppviexQ3vhkVzgsu1vb735XbQWsseKyuB4Nk4+H4Q+Yo9zva14+XTt2ebcwMpIHyYRQ3p45QNtSO0oqk/2eD5tUX75ONnttvJqjRtpsuVkv2fzTt/z8bPt51g25LfzeWd55OOmfNjf2rEUp72f+Xpk02frlP2e4rSVljgIX9wyuTYaKqtjCkECEpCABBqHAINW3MUIzJlgO03aRUDU4ubGoBm3LUQXblsIFEQI7ioc4xMXE8rmj6eWCCs+s4FthAv1Iz1xU8imw5KTH0hwnP24hfCZ0nZm0EEdyC8vplLZ1Je60rZsWyibASX1yO4nPwQW1q20n7jw4Rjx82Wl9uc/SU8+5JfyIg75sQ1f8htbIC71Jx/6KrUt5UW9aAvtTEw5xjaT07EipsBx6kR82pEC5xhCBDdILI7ZfFKccf2JqEzWnfxAGOGEpWBsA8Zx0QYGtlhVeOpfNMitZZ2wrmAVqUcOtWxnPeQF4+xvsR7q1FodsvPGWotTpv1alOqst7nhNMqPqc7QWR0JlIIA1wgmgzPYY6I1/u8ss89k6aFDh9ZklSImJDNhGJcNXDKYD8XcGAaebFMWrmrrrrtunCPFvCLc3ngSyfxKBnkMvHERY5JwcrVh9SrEHQNXJmRjlUC4IPBIkwQCn0xE5jjWHuLgKrTssst26PqIYCA/JvUzyEdwYDVhfkaqG+5pLE1M3WgL73XjlQQMJnlFAcKDdFhTePk1E8ZZHpi4iAkm8/PeGpYXZkI2T+uZU8REad4LA1Ou7bzqgHYwIR53SeZZsY+J+DBBZPWpuCIyNwXWuLnBHlcsOGFBROwUBcQMc3AQMAyyGQS/WpnP1Ldv3xidFa6oG23CXZOFAnbYYYdoETr88MPDyMrkctrDYgQsfkB96EOYIZaYA9evX7/IiDoyoEdQ0++JY1G9OGdT3xYdZx/1rfW9r6382jrWWh27a3931q07y+oufvVWTpr/2ChubF0t0Outf8ZWH4XS2Ah5vMsJ4O4xYsSIWA6r7OD3bpCABIoJYC3AhxxXOxZAYACKyGCgm14YWZxy7HvTgxpEAxOAsSYxkMK9CuHEoge8Mf6ggw6Kc1+OP/74GIdtBuk77rhjHFgzyGauEKsvIZyoK258pOcmzBPLE044IYoRFlDAYnX66ae3VJDJxoccckj0kcftj7wQTR2ZJ0WbsIz99a9/DZtttlmc34V4gB1WmiFDhsRyESiIMVZKQwQyiZnBP3NaEBCUz7UKQYNo4TUFCDheZoqQZL4H/YAYRKxwnLYjyOgXRBUMWXkKMYZAwsVq4MCBkQ2CkgUGYI+Aghf8TznllCi0uDYy0GIRh6KAGGS+CfXccsstYzux9px88skt0W+66aZYLtYgJoRvv/32UfggpKgrlkrENsKOtiKsmCdDPagToonrM6ticV4g1DkX6fvWhBJc4ZOu8S2VyX3ZaqutortP1vqTonCOx3Oz8ln5En6stNUggUYhwG8luX/yO220QP3L7H6mUGq0M7bJ6sskap5SJrcOlgZnwMHqMAYJSGBMArx9ncHnNttsEwYMGBAjcCNLIodPAp/ZJ4NpsJl1s+GmneIgwBj4M1eI3yPb6eaebvSIFixCWBIY5GPZ2HrrraPFgXyxOGF5YRCOxQRLQ1oBi0nKTKDHSsFyt7QBAUZe1JXV+3D94jurkmHZwAqDcCAuVpiODDKwAiFCsHAhUmgv9cJalpbXhRciDAsOA3WeACMesA4x0R0WRx11VFwumQUAWK2K9tEmxCD1QxBh7WFyNhYYFlKg7XwSaOevfvWrKCzIE0aIDtgiUGCOpRCm7Cct9YYnwiVN0KZeRWKC9mEJohzyT+2kLSlgPYIv7nVYumBDnxPSeZHOG/qX1eJgjgURyyWWM9qaAmVhaWqrX6hrn4r1CUHcVqBP0rmYjcd5yzmAOJ2G1boqdX6/YqkzSEACXU+A3yRuqmMutdX1ZddLCQqleumJ/68HN6nOBm7qPKHNBm6GuLAUBW7M/BiKblJF8Wu5j6fgSSSRL9/Zp1CqJWXzaiYCWDcQMIiM7G+WwSqDSQbWuGgxCOYpPwNsrgkMjonDtYEBPftYJY8BMgNeBBiWFtzN8oHBPH/ZQNlpUJ2Op/pQNgN3LEkpHeVSL+pBOgbQacCf0qf8GRjjHjZ48OCYhv0pH1zo2hMYaCNKaGcSfiw+QP5YlKhnPlAWYgceXDexbmHZOahiOcNNjonO8MPSgvUshdQOPmFPOaneiCri8844xBNiENfFNF+IBTh4Z0kKpCMu9U6LJaT8U5zsJ9dx8oIpbSNk48Occ4PzB6GH4CLv1u45cGPBEMQafUeeCKX2BuoAi7FZA8mfuPlAu7BsYZVavuKG2LNyDt9TcTU1SEACXU+A3/4qq6yiUOp61JbQHgJFN4tq0+OywtNHnpTiBsKT2/SehH4V33Je4LrnnnvGCbhYb4h74IEHRreL1oRUtWV3JB71y4eiffk4bkugjAQYqGLJYG5JfpU4BsG4hWEpYL4MD0cYYOMKxjwXHkIgiJg3g1UEwYEQQCzwwkzc23DtYu5NEjXZgTEDagbPKaQBdvpkP8fZJh+sM4gQBroM3vmOgMLiwsCZF1dSR9JwzaOslB6BRT7Mo8FSQx5JALI/aW6tPWJGMBaQd4IJubtUBZlYwHjj8A+6kfAaoL7HVYn+HBtxKJ02WWXxTk+CCX2IegI1J/8EIoILOqXv46zjRDafffdo9siTGCR+oW6UT7sYUUeHEfcJpFL/llOsfD/4cIhRv9x32AdpIffxxD2J133nmRI0vIUx/YwCWJRfKHNftwvWPuGe51iGfmwaV3CqU+pc2cU+TTWiAu5x9ul20F3CJxR8znRd2xnLIkfo9KvSqdE1aovFDeIAEJdD2B/HWs60usvxK0KNVfn3S4RryMkRsgg4sU9t9/gklDdlI5J4MseTO+YD4JO+xx57hD4Vt4hxIZKoI08q8k+I2WeQgARGJ4D1BysEg2Dm0TAgzrpVMWDlt4xVgYUIGGDyO8e9lUEvA1EEFq5vuHhxA2TQjZsXViesHAxqGRjzsIJrAmURyJPvWKwQBwzIccUiILwQFMwDYsCNwGBwj6scE/15aIOoY7DMwxtEBoN43MSY34Kooq5cvxigcz1gXhBub7jhUk8G5AzSETy834N6UA7iKVmJYmUK/iFIeCCEwKTduA7i1ocw4TttQSAgiODEdywptJk5S3A/55xz4stLiY8QhReM4cSS7FxTSUteWOsQNuQDs6yQoB7wZR4RLxcnEJ+86Cf6F8sLecEK4cDiEVhTEJeIKMqELy+DhGUayMCB+tG/CGbcDGljss7RP7SbfBDI1BH2cIcR/Y+4JV/KhjPxOafoO3jTD7QXt0Dayr0GFz36r7VA3rSDvNsKuPfArCjQxtjOymflS+jRSryitO4btwT4TRPo2/SAo6U/a1S1rsq3RtUzmwYn0POgSmjwNoxR/SOOOCL8sfLEqbWL7hgJ6mgHk2V5Csx7HtobuOEyX4And0zI5ea99957R+vRscceG0UJT+VOPPHEcPXVV4f/+Z/iRNs99prrzGe4rW37I7GRxQxCGDSMYFVo/7+97/HAUFH8zSdBJqRAAKC3woDZ0QMA2MGqdnAnB4G9gxM+f0jDghYExgIc41gQQEEDUKGQTIDaybnM6hmAM7gmwE5+SBOEFd8MtDmaT+DaAb/5MMn1hfcABE9WC8YiCPgcCVjAM1vm4UhECIM3pmLhBWHgTYDdsrhj4E0Ax7EGnVDUFA3RBHpOU67mS/D4JvvDNgpLwXyoTwEQ9ZdDVYIEI4x2Cce4q5fxcqOBYgy2Kb+MIQL83xwAaZOiMJkZYIjFjv6AY7kCR/qg/ULIYMIoe1YhBCF1JfAAJF4/GHFY5t6wgK2tI1+YD95USfSwx7Bg/AiT+pEfahLus/xiYCDLfVP/UnZ9Cv1hSF1QyD3qQggBCx5wpo6kAdtJX+OI6QQjNSNunBe8B1xjSUMKyTXcM5D9hcF2kK6ZL1r7RNexG0zVBbJqDQmVDquzWgerA8CiG4epHD+cd3gd8yDE/qZa0etAr9ZyuE8G9uDk1qVWbp8KiuCViaU85Kl0jW9R+WC2PlJMXWGjR8kF/WLtx1Vt3RqvOXv/wl/tBxj+to4CbOE8U0oLn22mvjE2hccHjCy82UmxwDG26m7OMiw0RfnqCOi8AKU1zkcG8xSEACYxLgUp29XDPYyA8ssUiw4tqKK64YB9KsgoaIwZLMnBTEAstDM1cGCwEDZH7/rMrGwBthwqp2xGPAzDWCAfJiiy0WB83UKpWZrQsD7Gz9Ut3Yx7UGocYABlGQTY8oQkAhVggM4hERDJpJi3BBjCD6+MuWQfxUDt8JiDcWV8CyTvxsIG0qj3pQn1QX6kcb+ENIJSsX2wzy+KMu/HH9TOlSfmzTBu452Trm60d9yIPysgKP/ZSBhYwn8Ckv0mfrnThRR75zzcwH4sOcutFGvpM336kf5fNJ2whsp34hHv2R4lIX/pLQ4ziBOFjnEFy4xcGkW8KwYdH1ruIv3i3FWUjnCLDSI0vb4/7PSoxYJlm1kVUXeShaq8BvnofMrAyJ1dbQBQQq48dw9NGh8rSrCzKv7yx/esxV33W0dp0gwNNg3FW4kXHzSzc6BiIs17rffvuF66+/Pg6e8J/PCyVutoR0o+QmzI2V9EWBwVZrx4rip308JU2DgLTPTwlI4GcCRYPun4/+/I3fJ09uiY9lGusSlgOsJlg+sOggnhBV7MOChPWHwTfpECaEZK3CksGAmOtHNpB/NhTVj30IFoRHUXwG6FnhgcUrBeJzLeGBT0rLZ/qe4lX7Sbp8eSltVnBg8ciGJCpIS8iWz3WRJ+PZfXzPbmfz4jv5pOtp9hjlJPGUTc/3fL1h0logflYkcl3lup3yzF+fyTsdow7ZJ/1s85dCqjeClnhY/rLxUzw/JQABrKasZJnGHVg0WfwEC3ZnAuIfSyfWVgLWV37DWVfkzuRvWglkCSiUsjSa8DvzknDH4wbM+zrSQASRxJwF/MI5hkDaaaedRiPA4IjlbHnPCKszcbFj5Sf893FvxH2FOU7cZP/2t7/FJ8HMe+J9Je0N3MjTE872pjW+BCTwEwF+Rzx0SPOA0iAYscRDD/4YKPNbw62M3zS/X+KRDksSA+P0W8TFKrlkdYZxGogX5ZE9lv2e4hbtS8fyn8RNf/ljabs9+VWTppb5tZVX9lj2e6pjW59txW/rWGt5ch9hkJoXXa3Fd3/XEcDix++V335r91H2p3j5/uYY+zjOZ/qezTPtpxXEJ7AvG0jPsaywJg4PSVLggQ3iqdqQ8qQuqTyuWbiiYj3mpcwErlM82ElxUv4pfbZOHMu3lXT5tCkPPyWgUKqzcyBdhDpTLeYxpMCcJHzIeQKTnlZyjIsVFy1Ca8KGpXl5v0d6IePBBx8cnw7xxnkCL1TkJYEIKkzsWJN4Y31HQrpYdyStaSQggZ9WbcMixNN+rEK4zGUD1oBkEWA/g4fsAIKBAoIpH7LWifyxettG7OF6k21XvdWxGeqj9X/c9yL3dNxmmZ/DQ1AWR+H3j9WGxUH43SIIWPQF13oekvC7wN0WLxMsxbjkYonBKsh3LD24VWJ5ZkEV5tvxHUsN71Bj8Q720f9YpZkjyP0fF1+uObiOkheuv0lEJwFCvsSjjiyVz/WJepE/9UIAUUfcfGkDcZkagIWcwFiGPHHf40Ev1zniURfyhAcPiJiLRz4IKdrI2ILrGu7GMGGOFHOn0py7VyvzJLkuUi5pDRLIEyheYiYfy+1uJZAuLLUqlItAViSRbxJJbZXB3Kas8DnooIPiynkpDWLruOOOC6eddlq8yDCBGLeejoT0hKcjaU0jAQn8tKoUc40JMjlbAAAhQ0lEQVRY4bKa33czMqPdDPCygrAZ22mbJICVBXHAHCCWrWduHyKFlzoztxCBwOqJ3MdxsUVUICjYZj/HEUfDhw+P71BDkCC8EC0XXnhhuPzyy6Olit8S7vm40CHKEBu47aY5agg0Fo1BxOChQjr25QPjGspnJUsWpsEjBaGEQGJ8wvu6mGuECzDHWXCKNmHRZv7RjTfeGK0+1A+3O8QPLqi4BGNhYl42Qo52EZ9VJKkT7aYcVpqkLNozsvIuMd5RhpDC9RfhxMNeeBokkCegUMoTcbtqAsx/4mLGHxcxXsTI+zZw42P1pvYELm5c+A0SkEDHCPBkmCe1POllcFDGwCCKgVytHzaVkaVtrm8CiAAWbsKKg5hgRUmsJvwGsLpgwUF8YDHh4QGWVj4RFQgbXOKwFGFx4gEn71bDxZ48schgnWXlR+ahIS6w7lBGv379oiAjX8omHg9NyRv3NwQQi8LkA79Lrk/UG1GGJYjXHGD9QqDg0k/ZWKkQfFiQWL0SKxdWK7xbaBsun9SbhyLMrWQcgnWI8QNCiCXtGY8w15BrIe2GC+8Bo17UAddR2kR5tBFLEmOWND8zX3e3y01A17s6638EQyMFLjZcmLjwYZJn1RkuXLjlsUR7tYF2O7iplpbxJCABCUig7ATSAivcc7GwpAcFuMEz6GfpegQRQorAJw9UuFcjTkjPH0IBwcMfKzIiZhAfiBlc3LD4EI/0iBHyTCs0UjaWHCxV5M19nPLzgf0cT3OWKAuLEKtrYrFCwCDCsCJRLnVghU7SkSblmR0n8D0dJz4B4cc7wFhpj3wIuBsiHHkHGC6EiDbqwgMl8mUbccifQQJ5Aj7CzxOpg+3shaAW1eHi0F4LT3vKPfnkk8POO+8cnyohkA455JBoWWpPHrretYeWcSUgAQlIoOwE0lghfcKD7+nBI1YWvucfwCbvDeIiGNJ2azyJV1QG8Znzc+6550bRgfWp2qXieciK2LrpppuiOGO5cIQT1iPE0zHHHBO3WbkTQZNvQ2t1pS35dqe0qZ1F7SG/FK+1vN1fTgJalJq437nYbL755tGfmGZi7cGXuT3h8MMPHy06pnn+soF3IKWLY3vzT/lwgUoXsbTPTwlIQAISkIAEiglg3SFkLSHs48Ej7mtYe5ivhNcHbnF8YmnCpQ3XNOIViQPySHmTf8qT78QnXUrL3CDmQGER4h7OHCPq82rFNQ83uWxa0qd0xGEuEYs2DBo0KL7n7bbbbotucSxIRXpc87BmMTcKcYNbH+mwnCGoUt6pTnzSTixfWLkQYliomKOExY12E8gj2+5Up+y+GNF/EqgQ6HlQJTQbCZauxu2rEQfevOkcMzN+s50NLO3NRSwF/Ja5QDDZu5Yhmf87kyeTOHmahJ+zQQISkIAEJDAGgcrLlCuj4xAqLlplD7iSnXTSSXEhAgQELmWMH1jMgUUTWOofofH+++8HhAdihuPMAcJ6g/jgwSbjgiSesPKceOKJcTEG8kd0IGRY6AAXPFbLQ8DgEsdcJ+YJ4ar32GOPRTc/6oEgoTxc2rA2sUAE9WE/L8NmEQjKYx9CiXxxmyPNNddcEwUTrnAsGIHrIItEMScp5cNrDVjMgUUhcLNjdTvSpjLhgKvdvffeG1+qzdwnPF14TyTjC8ZE1J+6IhZpJws90J40jwormyFH4OyzQ1hjjVA5CXIHmn+zR0VBN9akmCr6hAE3FweeOjRaOLDyxnF+vLvvvnunqw4HLkbZsHLl7cpcnDoauEAhanjKs9Zaa3U0mzHS7bXXXnHS5o477jjGMXdIQAISkIAEwrBhoTICD6Fynyx7YOjGPKNkYeEBK3OFESg8JGawzxgIIcMS3Fh6sK4wN4hjWFE4hlUGgUR6rDbkST6kJR7HyZNjbFMu6QgIHLZZ6IFj6aEpq8mxAh6BvKgPQokyU97kT96k5zufbJMPAWFHmYw1SJ+EDfOOKP+dd96J+aX5V3CgHdSJdFiTiEN5uO5hYaMObNPG1B4+yY/yOZ7Sx0r472cClbFjOProUFnR4+d9Jfmm610TdzRvq84v08mL2ToaeBqF+x4XMALvSsC/OF0cO5ov6bhINaIFsDNtNq0EJCABCUigIwQY4GMByQZERhIaaT8CCItMCqQjIE6K7t3E5y8F4iEesgFBkQ2IlZQv+1kIIm1n8+JYfpt9RSEJrXQMa1Y2z/TOo7QvxUufCKy0mEM2DnXP1x+BZZBAawRczKE1MuNoP4KhVmG/fYbLSv8hbHcdDTsu+++LSKJPDCjs3BDLQLtzl7MapGneUhAAhKQgATKToB7a/rrChb5e3d+uxZl5vOspj3VxKlF3cyjuQkolOqwf/MXhI5WkQmSrHjHSjRDhgyJ/sK8ubqjIW+dIp/HH3+8o9mNlg6TfK3aPVrGbkhAAhKQgAQkIAEJSKADBBRKHYDWSEkQRn379g0DBw5s8RnuaP3TijHZ9EwWrUXQ9a4WFM1DAhKQgAQkIAEJSKBWBBRKtSJZx/kweTHvk9uR6g6rTKRlgYgUEE77779/2uzUp653ncJnYglIQAISkIAEJCCBGhNwBluNgXY2u64QDGk1mM7WbdVVVw2vvPJK2GabbeJqeuecc07hZNCOlKPrXUeomUYCEpBACQlUlqw2SEACEugOAgql7qA8jsuolUWJZvBi2UUWWSQuYc47FmoVdL2rFUnzkYAEJNDEBG68MQT+DBKQgAS6gYBCqRsgj+siamVRSu1gqdD0HoW0r7OfWpQ6S9D0EpCABJqcQGXl1cCfQQISkEA3EXCOUjeBrraYrnC9q6VFiXbwngZeQFfLoEWpljTNSwISkIAEJCABCUigswQUSp0l2ADpG8Gi1BUCsQG6xipKQAISkIAEJCABCdQpAYVSnXZMLavVCBYlXe9q2ePmJQEJSEACEpCABCTQWQIKpc4SrHF6LCu1Dgil8cev3XS0rpijpOtdrXvd/CQgAQlIQAISkIAEOkNAodQZel2UtkePHjXNGde7WrxHKVWqq+Yo1brdqb5+SkACEpCABCQgAQlIoL0EFErtJdaA8WvteodFqdaLOeh614AnllWWgAQkIAEJSEACTUxAoVRnndsVrne1XswBi1KtlwfX9a7OTkSrIwEJSEACEpCABEpOQKFUhydArV3QGsGihFCqdbvrsGutkgQkIAEJSEACEpBAgxBQKDVIR3WmmrW2KHXFYg6N6Ho3cuTIznSLaSUgAQlIQAISkIAE6piAQqnOOqcrXO9qbVHqqsUcxhuvcU7H559/PgwcODAMGjQoKJjq7EdkdSQgAQlIQAISkEANCDTOyLQGjW2ULGrtgtYoy4PXut1d2d/zzjtv2GabbcJVV10Vttxyy7DJJpsomLoSuHlLQAISkIAEJCCBbiagUOpm4OOiuEZYHrwRXe922WWXgHXtzTffDCNGjFAwjYuT2zIlIAEJSEACEpBAFxHoUXH1qv0bTruostVm279/Dss89WG72u4n322WehZ8+eoVevXjWr1wcffBCmnnrqmi2WgPBi1btJJ520ZnX86quvAq53CI9GCu+9916ARzbABeaN1pZsG/wuAQlIQAISkIAEyk5g/GYEcPXVV7e7WSxQUA/htddei0JplllmqYfqWIc2CIwaNSosuOCCLUIJMUq/7b/oqkNrh5SAISkIAEJCABCTQCgaYUSpNNNlkjsC+s4zzzzFO43531R+C0004LX3/9dbTWJYE0ePDg+quoNZKABCQgAQlIQAISaDeBpnS9azcFE0ignQSwJs0555xh7rnnDgceeGDYdNNN25mD0SUgAQlIQAISkIAE6pmAQqmee8e61TWBCy+8MC7gUNeVtHISkIAEJCABCUhAAh0ioFDqEDYTSUACEpCABCQgAQlIQALNTMDlwZu5d22bBCQgAQlIQAISkIAEJNAhAgqlDmEzkQQkIAEJSEACEpCABCTQzAQUSs3cu7ZNAhKQgAQkIAEJSEACEugQAYVSh7DVLtEnn3wSbrzxxvDcc8+NlinvAb755pvDww8/PNr+ajceffTRcM8994wW/aOPPgq33377aPvG1cY/nP8OKLL7YUz4tb4cCLbFN45JFHwhNPPJE2/ZSABCQgAQlIQAISkEC3EVAodRvq4oIQC2uvvXbYeeedR4vwr3/9K6y55prhgAMOGG1/tRvDhg0LK620Urj33ntbkjz99NNh0KBBLdsd+YKw+8c/hEuuOCC8NZbb3Uki5jm5JNPDoccckhL+nPOOSdyuPvuu1v2bbHFFuGmm25q2faLBCQgAQlIQAISkIAEuouAQqm7SI+lHCw9b775Zkusyy67rOV7Z75sv/324dtvv+1MFi1pr7zyyjDllFNGkXTSSSeF3r17h3333bfleHu+rLbaauG2225rSXL99deHySefPNx6661xHxam559/PvTr168ljl8kIAEJSEACEpCABCTQXQQUSt1FeizlbLDBBuGqq66KsX744YfAO3qGDBkyllRtH+ZFqF9/XU49thj245Y5dGDDz44nHfeeeHaa68N9913X7j66qvD4YcfHr788ssqc/g52sorrxzeeOON+Pfpp5+GkSNHhuOOOy5cc801MdKDDz4YhdPiiy/+c6IG+Hb/feHJ598sgFqahUlIAEJSEACEpCABNoioFBqi043Htt8882jOKLIhx56KJa8wgordKoGk046aTjttNPC3nvvHV5++eVO5UXiCSecMM57+vzzz2Ne66yzTsBFcPzxx2933nPPPXeYZZZZwgMPPBBwt1tkkUUCDHAPREDhMrjGGmt0KO/2Vuazzz4LH3/8cUyGsMwKP1wNv/++3gsG48dHPvuu+/CqFGj4nHiIXaxlLGfgJXwm2++id/9JwEJSEACEpCABCTQOAQUSnXSV4gOFjh4/fXXw4gRI8KWW24Zxhuv890zYMCAsNVWW4Vddtml0y096qijwsUXXxwtPSuuuGLAwjTttNNGAdWRzJmbhSBi0Yr1118/9OrVK87Lwg3xzjvvDNS9qwNWNwTZbLPNFo488sjo+jdw4MBY7BdffBFmnXXWKJzy8YjAsf79+4cNN9wwzv169dVXw+WXXx7OPvvswHf6kLlnsLrkkku6uinmLwEJSEACEpCABCRQQwLtNwXUsHCz+pnAFFNMEQYPHhyYm3TuueeG6667Llprfo7R8W/HHHNMmGuuuVosVh3NiQH/hx9+GOuFFQhBcP7558e5RD179mx3togMxBfWnLPOOiumRzwhNhCNZ5xxRrvzbE+C1157LYo03AixDiF8sLxh0Xv33XfDXXfdFfuENiPmsvF23HHHWBQWuwUWWCAsueSS0YqEu+RMM80U/3AjRPCRL+0xSEACEpCABCQgAQk0DoHOmywap611X9PNNtss7LHHHtFCw8C7VmG66aYLrDJ3yimndDjLF154IVpemD+17LLLhj333DMwjwhhkV2UoT0FME+JJcDJY7nllotJsSLhvjb99NOH+eefvz3ZtTsuIoayV1111WgRwv0PN7ntttsuzsNidb+tt946ip18vOR+ON9888VyZ5hhhtFc9nB7RPxhUWKeFW57BglIQAISkIAEJCCBxiGgUKqjvlprrbVibbbZZpvQo0eP+NeZ6pFHCriBrb766mmz3Z8IgVtuuSUKrpT4mWeeiV+nmWaatKtdn6yaN++880bXtYkmmiimXXDBBaNIwhUxW/92ZVxlZATfPPPME98txap7Cy+8cEBUwurUU0+NizJgRWstHsUUuUciJt955534biysUDfccEPAdc8gAQlIQAISkIAEJNA4BHS9G8d9heWIl8sSsEKk72zvsMMO8Y/v7Q3Dhw8fLQmiA/exjgZcAxFKzOPh3U6TTDJJmGyyycIJJ5wQ3c46mm/+RbvUE5HRHQFrEPyXWmqpuIDE7rvvHiaYYIK4D1e8oUOHRiHUWryiOvbt2zfstttu0UqFSFp++eVjnrvuumtRdPdJQAISkIAEJCABCdQpgR6VgflPo/Q6raDVqj8CvOOIleFmn332+qtcB2r00UcfRYE69dRTt5m62nhfffVVmHjiiaNF7JVXXglY41iowiABCUhAAhKQgAQk0DgEFEqN01fWVAISkIAEJCABCUhAAhLoJgLOUeom0BYjAQlIQAISkIAEJCABCTQOAYVS4/SVNZWABCQgAQlIQAISkIAEuomAQqmbQFuMBCQgAQlIQAISkIAEJNA4BBRKjdNX1lQCEpCABCQgAQlIQAIS6CYCCqVuAm0xEpCABCQgAQlIQAISkEDjEFAoNU5fWVMJSEACEpCABCQgAQlIoJsIKJS6CbTFSEACEpCABCQgAQlIQAKNQ0Ch1Dh9ZU0lIAEJSEACEpCABCQggW4ioFDqJtAWIwEJSEACEpCABCQgAQk0DgGFUuP0lTWVgAQkIAEJSEACEpCABLqJgEKpm0BbjAQkIAEJSEACEpCABCTQOAQUSo3TV9ZUAhKQgAQkIAEJSEACEugmAgqlbgJtMRKQgAQkIAEJSEACEpBA4xBQKDVOX1lTCUhAAhKQgAQkIAEJSKCbCIzfTeU0TTHvvPNOePTRR1vaM9lkk4XlllsujD9+96F89tlnQ48ePcJ8883XUo9afaFtX3zxRVhxxRVbsvzoo49im/v379+yr6u/PPfcc+HHH38Mc801V7jtttvCgAEDOs34lVdeCbRliSWW6Orqm78EJCABCUhAAhKQQIMT0KLUzg68/77w9prrx2OOOKI+PfrX/86TD311OGee+5pZ04/RT/22GPDhRde2K60xL/ooovalabayMOGDQsrrbRSuPfee1uSPP3002HQoEEt293x5YILLghnnXVW+PzzzyPvL7/8stPF3nLLLeH444/vdD5mIAEJSEACEpCABCTQ/AQUSh3o4+mnnz7ccccd8Q/LB5aWE044oSWnzz77LFpgvvnmm5Z9fPnuu+8CouOHH36I+7/66qsY79/nfgOwErCpaPN998M27z79tvvw0ff/xxTM+x/fbbL+y7774tx99+++3w5JNPtmzzBasQ4oK6cLy9Yfvtt4/lFqWjPpSHdSYb3nvvvbj5wgsvBNqe6gyj77/Prbt5ZdfDm+99VY2WWzXU089Fes82oHKxlRTTRXzmWKKKWJ7KCP7B1MCdcLS9umnn8bt7L9Ro0aFTz75JLvL7xKQgAQkIAEJSEACEmiTgEKpTTzVHVxooYXCu+++GyPffvvtYeaZZw6bbLJJWGCBBcJJJ50U92OJmmOOOcIWW2wR5plnnnDllVeGq6++On4SZ8SIEVEQYM1ZdNFFYx4bbbRRFAeIsiWXXDK62u2+++7hgAMOCAcddFDM96ijjgozzTRT2HzzzWO6kSNHxv2HH354WG211QIC49JLL437qv134IEHhq+/jpg7cqHN954I/Tt2ze6wi211FJhu+22i8IPYYaAXGeddcK8884bbr755lhf2rz00kuHPn36hA033DAstthioXfv3uG8886LWd94443RIrfpppvGdhx99NGjFYkYm3LKKaPQOe2006IrHu54lMXfY489Fp544okwyyyzhGWWWSb84he/CIcddljM47/W+sD8fI45hjjhktbzckIAEJSEACEpCABCTQGgGFUmtk2tiPKDr44IPj39ChQ+PAHBc8AgLlf/3fwNWlVtvvTVafrDsYHHaZpttwuOPPx7OPffcKCQ222yzsOWWW4Z99tknDBkyJFxxxRWhV69e0QKE5QhLzMUXXxzzxRKDgLnsssviNv+wQv3xj38M9913X8Ai86c/alFJHCcfQ8++GDYdddd2aw6TDrppAFRsvfeewfKzQZc4hA71A9L2EMPPRQQgSnMPffcLdYbOF1yySWxPVh0JplkkvDhhx8GxFByHaQ9lEVdEVd77bVXymqMT0QiFiMsSr/85S/D4MGD43wj8ttpp52i0MQFEosb7BCYWL4Qdx988EGn5ziNUSF3SEACEpCABCQgAQk0LQGFUge7Flcy/rD+ICYQOogA5sFsvfXWYbzxxosWJKxHCACsQ4ccckhYf/314yCe7/mAqMCS8+c/7nFlQ+LCQGrCKIsu2gE1qtFFlkkLiZBHOZOUT4LThCwMmHNyQcEGhYq/lpzSWPxhK222irssssuoyXHOsV+BB3ChzKz4u0Pf/hDtGKRCIvPCiusEONiWdp4441j/eecc84odohz5JFHRiG1ww47RG7sG1v47W9/G0Xi2WefHbAanX/++VGYIrIuv/zyMPnkk0cr0w033BAte1j4mEeGsDJIQAISkIAEJCABCUigGgLdt1RbNbVpkDgIgOT6lq1ymmfUs2fPlt1YVRikr7zyytEKc/311wcG+PzlF4Bg4YKFF144rLLKKjE9aWadddbw/vvvxzxaMv3/L1iqJppoopbdzAkiIBQIuJsVhR133DHOXeIYgqe1gKsabm7ZxSYoIyvWcI2jjing6pcCgigbsFTlw1prrRVmnHHGgEUO97vVV189H2W07eOOOy5cc8014eGHHw7kl+YkLb/88mG22WaLceG2+OKLR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" class="img-fluid figure-img"></p>
<figcaption>image.png</figcaption>
</figure>
</div>
<div id="cell-35" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.724477Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.724417Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.727023Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.726740Z&quot;}}" data-outputid="a3b5d072-6ba4-4fac-b3de-10d8cf912791" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb11-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="11">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>M</td>
<td>0.21</td>
<td>0.64470</td>
<td>0.135387</td>
<td>0.479075</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>N</td>
<td>0.17</td>
<td>0.27340</td>
<td>0.046478</td>
<td>0.164465</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>S</td>
<td>0.38</td>
<td>0.07922</td>
<td>0.030104</td>
<td>0.106523</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>W</td>
<td>0.24</td>
<td>0.29430</td>
<td>0.070632</td>
<td>0.249936</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
</section>
<section id="bayes-for-random-variable-still-discrete" class="level1">
<h1>Bayes for random variable, still discrete</h1>
<p>We now have a system where, if we have prior events with prior probabilities, and some “data” event happening that relate to the prior events with some probabilities, we can derive a posterior where we update our knowledge on the prior events.</p>
<p><em>The Trick</em></p>
<p>Magically, we can use this exact system with a Statistical Model, and adapt it the following way: - The “prior events” are going to be a random variable of a statistical model - The “data events” are going to be observations you make of the statistical model outputs</p>
<div id="cell-39" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.728051Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.727990Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.730310Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.730026Z&quot;}}" data-outputid="bb28fb6d-39fc-4a20-d1ca-8b6a8e8329d3" data-execution_count="12">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1">probabilities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb12-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.2'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.5'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.8'</span>],</span>
<span id="cb12-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>: [<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.25</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.65</span>],</span>
<span id="cb12-4">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb12-5"></span>
<span id="cb12-6">probabilities</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="12">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.2</td>
<td>0.10</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.5</td>
<td>0.25</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.8</td>
<td>0.65</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<p>the binomial model is the “system” we use to find the likelihood at each event, at each potential value of PI</p>
<div id="cell-41" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.731128Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.731080Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.733731Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.733332Z&quot;}}" data-outputid="889a1c11-d4dc-4e00-d863-af7d324eb040" data-execution_count="13">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observed 1 victory out of 6 games</span></span>
<span id="cb13-2">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb13-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.2'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.5'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'0.8'</span>],</span>
<span id="cb13-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [</span>
<span id="cb13-5">        binom.pmf(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>),  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here the Binomial distribution, to link the observations to each event</span></span>
<span id="cb13-6">        binom.pmf(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>),  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here the Binomial distribution, to link the observations to each event</span></span>
<span id="cb13-7">        binom.pmf(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.8</span>)], <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here the Binomial distribution, to link the observations to each event</span></span>
<span id="cb13-8">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb13-9"></span>
<span id="cb13-10">likelihood</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="13">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.2</td>
<td>0.393216</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.5</td>
<td>0.093750</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.8</td>
<td>0.001536</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-42" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.734466Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.734411Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.736816Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.736548Z&quot;}}" data-outputid="a040b071-93a8-4092-80cc-bf10f0c0b9f3" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb14-1">bayes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.concat([probabilities, likelihood.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>])], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb14-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="14">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.2</td>
<td>0.10</td>
<td>0.393216</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.5</td>
<td>0.25</td>
<td>0.093750</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.8</td>
<td>0.65</td>
<td>0.001536</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-43" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.737667Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.737609Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.740053Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.739780Z&quot;}}" data-outputid="3fcc89c2-9e30-417e-b4c4-c8f24d0ff4af" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb15-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="15">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.2</td>
<td>0.10</td>
<td>0.393216</td>
<td>0.039322</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.5</td>
<td>0.25</td>
<td>0.093750</td>
<td>0.023438</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.8</td>
<td>0.65</td>
<td>0.001536</td>
<td>0.000998</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-44" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.740874Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.740814Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.743363Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.743130Z&quot;}}" data-outputid="f9a84488-0b8d-4245-e4ac-d2da4c51d0c5" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb16-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="16">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.2</td>
<td>0.10</td>
<td>0.393216</td>
<td>0.039322</td>
<td>0.616737</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.5</td>
<td>0.25</td>
<td>0.093750</td>
<td>0.023438</td>
<td>0.367604</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.8</td>
<td>0.65</td>
<td>0.001536</td>
<td>0.000998</td>
<td>0.015659</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
</section>
<section id="bayes-for-continuous-random-variable" class="level1">
<h1>Bayes for continuous random variable</h1>
<p>Instead of considering only 3 possible events, 3 possible values to the PI, we can define a continuous set of possible events.</p>
<p>Let’s say that PI represents the chances of winning a chess Game.</p>
<p>The observable “data” is how many out of 8 games have been won.</p>
<p>For example if 1 out of 8 games are won, we can estimate the likelihood of that event happening for every possible PI with <code>Binomial(k=1, n=8, p=PI)</code></p>
<div id="cell-47" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.744257Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.744206Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.796189Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.795892Z&quot;}}" data-outputid="bc780383-db59-4cef-ba2d-a2b4acfaf0dc" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb17-1">linspace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>)</span>
<span id="cb17-2">pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> beta.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>linspace, a<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, b<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>)</span>
<span id="cb17-3">pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pdf<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>pdf.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb17-4">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>)</span>
<span id="cb17-5">plt.stem(linspace, pdf)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-18-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-48" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.797122Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.797057Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.800224Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.799910Z&quot;}}" data-outputid="5e6a4cff-a508-4c52-e701-01947fe52e2d" data-execution_count="18">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1">probabilities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb18-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: linspace,</span>
<span id="cb18-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>: pdf,</span>
<span id="cb18-4">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb18-5"></span>
<span id="cb18-6">probabilities</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="18">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.034483</td>
<td>0.001147</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.068966</td>
<td>0.004265</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>0.103448</td>
<td>0.008899</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.137931</td>
<td>0.014626</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">5</th>
<td>0.172414</td>
<td>0.021062</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">6</th>
<td>0.206897</td>
<td>0.027854</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7</th>
<td>0.241379</td>
<td>0.034688</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8</th>
<td>0.275862</td>
<td>0.041281</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">9</th>
<td>0.310345</td>
<td>0.047389</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">10</th>
<td>0.344828</td>
<td>0.052801</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">11</th>
<td>0.379310</td>
<td>0.057341</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">12</th>
<td>0.413793</td>
<td>0.060868</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">13</th>
<td>0.448276</td>
<td>0.063279</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>0.482759</td>
<td>0.064502</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>0.517241</td>
<td>0.064502</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>0.551724</td>
<td>0.063279</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>0.586207</td>
<td>0.060868</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>0.620690</td>
<td>0.057341</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">19</th>
<td>0.655172</td>
<td>0.052801</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">20</th>
<td>0.689655</td>
<td>0.047389</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">21</th>
<td>0.724138</td>
<td>0.041281</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">22</th>
<td>0.758621</td>
<td>0.034688</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">23</th>
<td>0.793103</td>
<td>0.027854</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">24</th>
<td>0.827586</td>
<td>0.021062</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">25</th>
<td>0.862069</td>
<td>0.014626</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">26</th>
<td>0.896552</td>
<td>0.008899</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">27</th>
<td>0.931034</td>
<td>0.004265</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">28</th>
<td>0.965517</td>
<td>0.001147</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">29</th>
<td>1.000000</td>
<td>0.000000</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-49" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.801034Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.800982Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.804552Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.804319Z&quot;}}" data-outputid="18ad0ea3-7703-443a-cb6f-f1a0ffdd64c3" data-execution_count="19">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb19-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observed 1 win out of 8 games</span></span>
<span id="cb19-2">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb19-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: linspace,</span>
<span id="cb19-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [</span>
<span id="cb19-5">        binom.pmf(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>probability) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We use our system, here the PMF of the Binomial, to link the observations to each event</span></span>
<span id="cb19-6">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> probability <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> linspace],</span>
<span id="cb19-7">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb19-8"></span>
<span id="cb19-9">likelihood</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="19">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.000000</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.034483</td>
<td>2.157805e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.068966</td>
<td>3.345664e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>0.103448</td>
<td>3.853370e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.137931</td>
<td>3.904326e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">5</th>
<td>0.172414</td>
<td>3.667370e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">6</th>
<td>0.206897</td>
<td>3.267022e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7</th>
<td>0.241379</td>
<td>2.792305e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8</th>
<td>0.275862</td>
<td>2.304258e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">9</th>
<td>0.310345</td>
<td>1.842292e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">10</th>
<td>0.344828</td>
<td>1.429490e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">11</th>
<td>0.379310</td>
<td>1.076976e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">12</th>
<td>0.413793</td>
<td>7.874622e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">13</th>
<td>0.448276</td>
<td>5.580707e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>0.482759</td>
<td>3.825365e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>0.517241</td>
<td>2.528678e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>0.551724</td>
<td>1.605571e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>0.586207</td>
<td>9.741451e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>0.620690</td>
<td>5.609541e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">19</th>
<td>0.655172</td>
<td>3.038503e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">20</th>
<td>0.689655</td>
<td>1.529796e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">21</th>
<td>0.724138</td>
<td>7.042960e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">22</th>
<td>0.758621</td>
<td>2.897443e-04</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">23</th>
<td>0.793103</td>
<td>1.029657e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">24</th>
<td>0.827586</td>
<td>2.998522e-05</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">25</th>
<td>0.862069</td>
<td>6.550372e-06</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">26</th>
<td>0.896552</td>
<td>9.093439e-07</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">27</th>
<td>0.931034</td>
<td>5.526876e-08</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">28</th>
<td>0.965517</td>
<td>4.477793e-10</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">29</th>
<td>1.000000</td>
<td>0.000000e+00</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-50" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.805502Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.805452Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.834291Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.833930Z&quot;}}" data-outputid="3250f40e-850e-410d-f297-44090c4bb5e0" data-execution_count="20">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb20-1">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>)</span>
<span id="cb20-2">plt.stem(likelihood[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>], likelihood[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>])</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-21-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-51" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.835361Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.835295Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.839063Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.838733Z&quot;}}" data-outputid="3556d61c-65e8-4d30-b009-b523eb220cb9" data-execution_count="21">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb21-1">bayes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.concat([probabilities, likelihood.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>])], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb21-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="21">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.034483</td>
<td>0.001147</td>
<td>2.157805e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.068966</td>
<td>0.004265</td>
<td>3.345664e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>0.103448</td>
<td>0.008899</td>
<td>3.853370e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.137931</td>
<td>0.014626</td>
<td>3.904326e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">5</th>
<td>0.172414</td>
<td>0.021062</td>
<td>3.667370e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">6</th>
<td>0.206897</td>
<td>0.027854</td>
<td>3.267022e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7</th>
<td>0.241379</td>
<td>0.034688</td>
<td>2.792305e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8</th>
<td>0.275862</td>
<td>0.041281</td>
<td>2.304258e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">9</th>
<td>0.310345</td>
<td>0.047389</td>
<td>1.842292e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">10</th>
<td>0.344828</td>
<td>0.052801</td>
<td>1.429490e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">11</th>
<td>0.379310</td>
<td>0.057341</td>
<td>1.076976e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">12</th>
<td>0.413793</td>
<td>0.060868</td>
<td>7.874622e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">13</th>
<td>0.448276</td>
<td>0.063279</td>
<td>5.580707e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>0.482759</td>
<td>0.064502</td>
<td>3.825365e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>0.517241</td>
<td>0.064502</td>
<td>2.528678e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>0.551724</td>
<td>0.063279</td>
<td>1.605571e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>0.586207</td>
<td>0.060868</td>
<td>9.741451e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>0.620690</td>
<td>0.057341</td>
<td>5.609541e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">19</th>
<td>0.655172</td>
<td>0.052801</td>
<td>3.038503e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">20</th>
<td>0.689655</td>
<td>0.047389</td>
<td>1.529796e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">21</th>
<td>0.724138</td>
<td>0.041281</td>
<td>7.042960e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">22</th>
<td>0.758621</td>
<td>0.034688</td>
<td>2.897443e-04</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">23</th>
<td>0.793103</td>
<td>0.027854</td>
<td>1.029657e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">24</th>
<td>0.827586</td>
<td>0.021062</td>
<td>2.998522e-05</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">25</th>
<td>0.862069</td>
<td>0.014626</td>
<td>6.550372e-06</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">26</th>
<td>0.896552</td>
<td>0.008899</td>
<td>9.093439e-07</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">27</th>
<td>0.931034</td>
<td>0.004265</td>
<td>5.526876e-08</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">28</th>
<td>0.965517</td>
<td>0.001147</td>
<td>4.477793e-10</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">29</th>
<td>1.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-52" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.839903Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.839855Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.843370Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.843080Z&quot;}}" data-outputid="6c081be6-397e-4d90-f9d2-34a8f69c9aba" data-execution_count="22">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb22-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb22-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="22">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.034483</td>
<td>0.001147</td>
<td>2.157805e-01</td>
<td>2.474344e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.068966</td>
<td>0.004265</td>
<td>3.345664e-01</td>
<td>1.426927e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>0.103448</td>
<td>0.008899</td>
<td>3.853370e-01</td>
<td>3.428955e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.137931</td>
<td>0.014626</td>
<td>3.904326e-01</td>
<td>5.710550e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">5</th>
<td>0.172414</td>
<td>0.021062</td>
<td>3.667370e-01</td>
<td>7.724121e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">6</th>
<td>0.206897</td>
<td>0.027854</td>
<td>3.267022e-01</td>
<td>9.100016e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7</th>
<td>0.241379</td>
<td>0.034688</td>
<td>2.792305e-01</td>
<td>9.685814e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8</th>
<td>0.275862</td>
<td>0.041281</td>
<td>2.304258e-01</td>
<td>9.512211e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">9</th>
<td>0.310345</td>
<td>0.047389</td>
<td>1.842292e-01</td>
<td>8.730425e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">10</th>
<td>0.344828</td>
<td>0.052801</td>
<td>1.429490e-01</td>
<td>7.547798e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">11</th>
<td>0.379310</td>
<td>0.057341</td>
<td>1.076976e-01</td>
<td>6.175448e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">12</th>
<td>0.413793</td>
<td>0.060868</td>
<td>7.874622e-02</td>
<td>4.793160e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">13</th>
<td>0.448276</td>
<td>0.063279</td>
<td>5.580707e-02</td>
<td>3.531407e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>0.482759</td>
<td>0.064502</td>
<td>3.825365e-02</td>
<td>2.467421e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>0.517241</td>
<td>0.064502</td>
<td>2.528678e-02</td>
<td>1.631038e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>0.551724</td>
<td>0.063279</td>
<td>1.605571e-02</td>
<td>1.015987e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>0.586207</td>
<td>0.060868</td>
<td>9.741451e-03</td>
<td>5.929470e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>0.620690</td>
<td>0.057341</td>
<td>5.609541e-03</td>
<td>3.216545e-04</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">19</th>
<td>0.655172</td>
<td>0.052801</td>
<td>3.038503e-03</td>
<td>1.604348e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">20</th>
<td>0.689655</td>
<td>0.047389</td>
<td>1.529796e-03</td>
<td>7.249540e-05</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">21</th>
<td>0.724138</td>
<td>0.041281</td>
<td>7.042960e-04</td>
<td>2.907406e-05</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">22</th>
<td>0.758621</td>
<td>0.034688</td>
<td>2.897443e-04</td>
<td>1.005051e-05</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">23</th>
<td>0.793103</td>
<td>0.027854</td>
<td>1.029657e-04</td>
<td>2.868023e-06</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">24</th>
<td>0.827586</td>
<td>0.021062</td>
<td>2.998522e-05</td>
<td>6.315411e-07</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">25</th>
<td>0.862069</td>
<td>0.014626</td>
<td>6.550372e-06</td>
<td>9.580713e-08</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">26</th>
<td>0.896552</td>
<td>0.008899</td>
<td>9.093439e-07</td>
<td>8.091876e-09</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">27</th>
<td>0.931034</td>
<td>0.004265</td>
<td>5.526876e-08</td>
<td>2.357215e-10</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">28</th>
<td>0.965517</td>
<td>0.001147</td>
<td>4.477793e-10</td>
<td>5.134663e-13</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">29</th>
<td>1.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-53" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.844167Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.844125Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.848118Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.847797Z&quot;}}" data-outputid="936b05cd-5e3f-479f-cb15-bf86ead7158d" data-execution_count="23">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb23-1">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb23-2">bayes</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="23">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">events</th>
<th data-quarto-table-cell-role="th">prior_knowledge</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.034483</td>
<td>0.001147</td>
<td>2.157805e-01</td>
<td>2.474344e-04</td>
<td>2.948492e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.068966</td>
<td>0.004265</td>
<td>3.345664e-01</td>
<td>1.426927e-03</td>
<td>1.700363e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>0.103448</td>
<td>0.008899</td>
<td>3.853370e-01</td>
<td>3.428955e-03</td>
<td>4.086031e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.137931</td>
<td>0.014626</td>
<td>3.904326e-01</td>
<td>5.710550e-03</td>
<td>6.804838e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">5</th>
<td>0.172414</td>
<td>0.021062</td>
<td>3.667370e-01</td>
<td>7.724121e-03</td>
<td>9.204261e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">6</th>
<td>0.206897</td>
<td>0.027854</td>
<td>3.267022e-01</td>
<td>9.100016e-03</td>
<td>1.084381e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7</th>
<td>0.241379</td>
<td>0.034688</td>
<td>2.792305e-01</td>
<td>9.685814e-03</td>
<td>1.154186e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8</th>
<td>0.275862</td>
<td>0.041281</td>
<td>2.304258e-01</td>
<td>9.512211e-03</td>
<td>1.133500e-01</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">9</th>
<td>0.310345</td>
<td>0.047389</td>
<td>1.842292e-01</td>
<td>8.730425e-03</td>
<td>1.040340e-01</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">10</th>
<td>0.344828</td>
<td>0.052801</td>
<td>1.429490e-01</td>
<td>7.547798e-03</td>
<td>8.994150e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">11</th>
<td>0.379310</td>
<td>0.057341</td>
<td>1.076976e-01</td>
<td>6.175448e-03</td>
<td>7.358822e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">12</th>
<td>0.413793</td>
<td>0.060868</td>
<td>7.874622e-02</td>
<td>4.793160e-03</td>
<td>5.711652e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">13</th>
<td>0.448276</td>
<td>0.063279</td>
<td>5.580707e-02</td>
<td>3.531407e-03</td>
<td>4.208115e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>0.482759</td>
<td>0.064502</td>
<td>3.825365e-02</td>
<td>2.467421e-03</td>
<td>2.940243e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>0.517241</td>
<td>0.064502</td>
<td>2.528678e-02</td>
<td>1.631038e-03</td>
<td>1.943586e-02</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>0.551724</td>
<td>0.063279</td>
<td>1.605571e-02</td>
<td>1.015987e-03</td>
<td>1.210676e-02</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>0.586207</td>
<td>0.060868</td>
<td>9.741451e-03</td>
<td>5.929470e-04</td>
<td>7.065708e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>0.620690</td>
<td>0.057341</td>
<td>5.609541e-03</td>
<td>3.216545e-04</td>
<td>3.832917e-03</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">19</th>
<td>0.655172</td>
<td>0.052801</td>
<td>3.038503e-03</td>
<td>1.604348e-04</td>
<td>1.911783e-03</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">20</th>
<td>0.689655</td>
<td>0.047389</td>
<td>1.529796e-03</td>
<td>7.249540e-05</td>
<td>8.638738e-04</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">21</th>
<td>0.724138</td>
<td>0.041281</td>
<td>7.042960e-04</td>
<td>2.907406e-05</td>
<td>3.464539e-04</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">22</th>
<td>0.758621</td>
<td>0.034688</td>
<td>2.897443e-04</td>
<td>1.005051e-05</td>
<td>1.197645e-04</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">23</th>
<td>0.793103</td>
<td>0.027854</td>
<td>1.029657e-04</td>
<td>2.868023e-06</td>
<td>3.417610e-05</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">24</th>
<td>0.827586</td>
<td>0.021062</td>
<td>2.998522e-05</td>
<td>6.315411e-07</td>
<td>7.525606e-06</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">25</th>
<td>0.862069</td>
<td>0.014626</td>
<td>6.550372e-06</td>
<td>9.580713e-08</td>
<td>1.141662e-06</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">26</th>
<td>0.896552</td>
<td>0.008899</td>
<td>9.093439e-07</td>
<td>8.091876e-09</td>
<td>9.642487e-08</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">27</th>
<td>0.931034</td>
<td>0.004265</td>
<td>5.526876e-08</td>
<td>2.357215e-10</td>
<td>2.808917e-09</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">28</th>
<td>0.965517</td>
<td>0.001147</td>
<td>4.477793e-10</td>
<td>5.134663e-13</td>
<td>6.118597e-12</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">29</th>
<td>1.000000</td>
<td>0.000000</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-54" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.848950Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.848896Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.881420Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.881070Z&quot;}}" data-outputid="f0743ac5-1ac2-4f67-e5d8-3fda50622239" data-execution_count="24">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb24" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb24-1">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>)</span>
<span id="cb24-2">plt.stem(linspace, bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>])</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-25-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="using-it-for-a-regression" class="level1">
<h1>Using it for a regression</h1>
<p>https://www.bayesrulesbook.com/chapter-9</p>
<p>So far, this is neat, but not very useful. How can we use this system for a regression ?</p>
<p>The idea is to assign things in the following way: - For a regression Yi = Gaussian(mu=Alpha + Beta * Xi, sigma=variance) (for a single Sample!!) - The “events” are going to be the possible values of Alpha and Beta - The “system” linking a likelihood to each possible events is going to be applying the linear system with the chosen Alpha, Beta and the observed Xi and Yi fo this sample.</p>
<p>The situation will be the following:</p>
<p>We have a dataset coming from a bike rental agencies. For a set of sample days, we have the <code>number of clients</code> and the <code>temperature</code>.</p>
<p>We will start with a trivial dataset with a single sample: - temperatures = [15] - n_clients [5]</p>
<p>We want to build a regression to know how those two values relate.</p>
<p>We will then extend to a less trivial use case with multiple samples: - temperatures = [15, 23, 22, 12] - n_clients = [5, 7, 6, 2]</p>
<div id="cell-58" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.882466Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.882416Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.883941Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.883687Z&quot;}}" data-execution_count="25">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb25" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb25-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.stats <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> expon, beta, norm</span></code></pre></div></div>
</div>
<div id="cell-59" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.884778Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.884730Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.936816Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.936528Z&quot;}}" data-outputid="1c40269c-901a-4812-e59c-8ce438027b0f" data-execution_count="26">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb26" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb26-1">linspace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">40</span>)</span>
<span id="cb26-2"></span>
<span id="cb26-3">alpha_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> norm.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>linspace, loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb26-4">alpha_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alpha_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> alpha_pdf.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb26-5"></span>
<span id="cb26-6">beta_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> norm.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>linspace, loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb26-7">beta_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> beta_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> beta_pdf.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb26-8"></span>
<span id="cb26-9">gaussian_variance_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> expon.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>linspace, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>)</span>
<span id="cb26-10">gaussian_variance_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gaussian_variance_pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> gaussian_variance_pdf.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb26-11"></span>
<span id="cb26-12">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'priors'</span>)</span>
<span id="cb26-13">plt.stem(linspace, alpha_pdf, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Alpha'</span>, basefmt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)</span>
<span id="cb26-14">plt.stem(linspace, beta_pdf, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'g'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Beta'</span>, basefmt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)</span>
<span id="cb26-15">plt.legend()</span>
<span id="cb26-16">plt.show()</span>
<span id="cb26-17"></span>
<span id="cb26-18"></span>
<span id="cb26-19">plt.stem(linspace, gaussian_variance_pdf, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'r'</span>, label<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'Variance'</span>, basefmt<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)</span>
<span id="cb26-20">plt.legend()</span>
<span id="cb26-21">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-27-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-27-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-60" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.937868Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.937813Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.942502Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.942214Z&quot;}}" data-outputid="dc3c58fb-2c76-4e54-f700-b0ca670d3d22" data-execution_count="27">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb27" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb27-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> IPython.display <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> display</span>
<span id="cb27-2"></span>
<span id="cb27-3">probabilities_alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb27-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>: linspace,</span>
<span id="cb27-5">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_alpha'</span>: alpha_pdf,</span>
<span id="cb27-6">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb27-7"></span>
<span id="cb27-8">probabilities_beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb27-9">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>: linspace,</span>
<span id="cb27-10">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_beta'</span>: beta_pdf,</span>
<span id="cb27-11">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb27-12"></span>
<span id="cb27-13">probabilities_variance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb27-14">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_variance'</span>: linspace,</span>
<span id="cb27-15">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_variance'</span>: gaussian_variance_pdf,</span>
<span id="cb27-16">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb27-17"></span>
<span id="cb27-18">display(probabilities_alpha.head())</span>
<span id="cb27-19">display(probabilities_beta.head())</span>
<span id="cb27-20">display(probabilities_variance.head())</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.000000</td>
<td>0.024695</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-2.769231</td>
<td>0.025362</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-2.538462</td>
<td>0.025991</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-2.307692</td>
<td>0.026579</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-2.076923</td>
<td>0.027122</td>
</tr>
</tbody>
</table>

</div>
</div>
<div class="cell-output cell-output-display">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.000000</td>
<td>0.017404</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-2.769231</td>
<td>0.018207</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-2.538462</td>
<td>0.019006</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-2.307692</td>
<td>0.019798</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-2.076923</td>
<td>0.020579</td>
</tr>
</tbody>
</table>

</div>
</div>
<div class="cell-output cell-output-display">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.000000</td>
<td>0.0</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-2.769231</td>
<td>0.0</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-2.538462</td>
<td>0.0</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-2.307692</td>
<td>0.0</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-2.076923</td>
<td>0.0</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-61" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.943377Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.943321Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:06.950073Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:06.949750Z&quot;}}" data-outputid="b7a0fa40-271d-45b4-e61d-0a35a0325c33" data-execution_count="28">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb28" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb28-1">all_possible_events<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.merge(</span>
<span id="cb28-2">    left<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>pd.merge(left<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>probabilities_alpha,</span>
<span id="cb28-3">                  right<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>probabilities_beta,</span>
<span id="cb28-4">                  how<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cross'</span>),</span>
<span id="cb28-5">    right<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>probabilities_variance,</span>
<span id="cb28-6">    how<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cross'</span>)</span>
<span id="cb28-7"></span>
<span id="cb28-8">all_possible_events <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events[all_possible_events.columns.sort_values()]</span>
<span id="cb28-9">all_possible_events[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_alpha'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> all_possible_events[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_beta'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> all_possible_events[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge_variance'</span>]</span>
<span id="cb28-10">all_possible_events</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="28">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
<th data-quarto-table-cell-role="th">prior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-3.000000</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.769231</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.538462</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.307692</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.076923</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">...</th>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63995</th>
<td>6.0</td>
<td>6.0</td>
<td>5.076923</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.471799e-12</td>
<td>1.940668e-15</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63996</th>
<td>6.0</td>
<td>6.0</td>
<td>5.307692</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.041343e-12</td>
<td>6.121281e-16</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63997</th>
<td>6.0</td>
<td>6.0</td>
<td>5.538462</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.438830e-13</td>
<td>1.930782e-16</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63998</th>
<td>6.0</td>
<td>6.0</td>
<td>5.769231</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.030944e-13</td>
<td>6.090098e-17</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63999</th>
<td>6.0</td>
<td>6.0</td>
<td>6.000000</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.406030e-14</td>
<td>1.920947e-17</td>
</tr>
</tbody>
</table>

<p>64000 rows × 7 columns</p>
</div>
</div>
</div>
<div id="cell-62" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:06.950866Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:06.950818Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.499770Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.499442Z&quot;}}" data-outputid="220dc643-ccc9-4ad7-c989-9e0cf2c4bf2b" data-execution_count="29">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb29" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb29-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We image a system where each day, the chance of rain is represented by number_of_clients = alpha + beta * temperature</span></span>
<span id="cb29-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observed a day with 15 degrees, and 5 clients</span></span>
<span id="cb29-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What is the likelihood of these observations at each possible "event" of alpha, beta and variance ?</span></span>
<span id="cb29-4">all_possible_events_one_day <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events.copy()</span>
<span id="cb29-5">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb29-6">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [</span>
<span id="cb29-7">         norm.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,                                             <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observe 5 clients</span></span>
<span id="cb29-8">                 loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>,  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We had 15 degrees, and every possible combinations of alpha, beta and variance</span></span>
<span id="cb29-9">                 scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_variance'</span>])</span>
<span id="cb29-10">         <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> _, row <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> all_possible_events_one_day.iterrows()],</span>
<span id="cb29-11">}, index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>all_possible_events_one_day.index)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb29-12"></span>
<span id="cb29-13">all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> likelihood</span>
<span id="cb29-14">all_possible_events_one_day</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:2079: RuntimeWarning: divide by zero encountered in divide
  x = np.asarray((x - loc)/scale, dtype=dtyp)</code></pre>
</div>
<div class="cell-output cell-output-display" data-execution_count="29">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
<th data-quarto-table-cell-role="th">prior</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-3.000000</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.769231</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.538462</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.307692</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.076923</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">...</th>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63995</th>
<td>6.0</td>
<td>6.0</td>
<td>5.076923</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.471799e-12</td>
<td>1.940668e-15</td>
<td>1.350756e-71</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63996</th>
<td>6.0</td>
<td>6.0</td>
<td>5.307692</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.041343e-12</td>
<td>6.121281e-16</td>
<td>1.111450e-65</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63997</th>
<td>6.0</td>
<td>6.0</td>
<td>5.538462</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.438830e-13</td>
<td>1.930782e-16</td>
<td>1.720943e-60</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63998</th>
<td>6.0</td>
<td>6.0</td>
<td>5.769231</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.030944e-13</td>
<td>6.090098e-17</td>
<td>6.516033e-56</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63999</th>
<td>6.0</td>
<td>6.0</td>
<td>6.000000</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.406030e-14</td>
<td>1.920947e-17</td>
<td>7.462108e-52</td>
</tr>
</tbody>
</table>

<p>64000 rows × 8 columns</p>
</div>
</div>
</div>
<div id="cell-63" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.500694Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.500637Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.506549Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.506267Z&quot;}}" data-outputid="4e511654-9e35-40b6-c350-c8b6d954e0f7" data-execution_count="30">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb31" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb31-1">all_possible_events_one_day.sort_values(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>, ascending<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>).head()</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="30">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
<th data-quarto-table-cell-role="th">prior</th>
<th data-quarto-table-cell-role="th">likelihood</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">56534</th>
<td>5.076923</td>
<td>0.000000</td>
<td>0.230769</td>
<td>0.017657</td>
<td>0.026489</td>
<td>0.215931</td>
<td>0.000101</td>
<td>1.635327</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">32574</th>
<td>1.615385</td>
<td>0.230769</td>
<td>0.230769</td>
<td>0.028062</td>
<td>0.026953</td>
<td>0.215931</td>
<td>0.000163</td>
<td>1.635327</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">8614</th>
<td>-1.846154</td>
<td>0.461538</td>
<td>0.230769</td>
<td>0.027618</td>
<td>0.027368</td>
<td>0.215931</td>
<td>0.000163</td>
<td>1.635327</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">7014</th>
<td>-2.076923</td>
<td>0.461538</td>
<td>0.230769</td>
<td>0.027122</td>
<td>0.027368</td>
<td>0.215931</td>
<td>0.000160</td>
<td>1.384275</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">30974</th>
<td>1.384615</td>
<td>0.230769</td>
<td>0.230769</td>
<td>0.028454</td>
<td>0.026953</td>
<td>0.215931</td>
<td>0.000166</td>
<td>1.384275</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-64" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.507465Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.507408Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.512400Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.512033Z&quot;}}" data-outputid="7a050ca5-7b8f-4faa-9771-598d9c3fd6da" data-execution_count="31">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb32" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb32-1">all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb32-2">all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> all_possible_events_one_day[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb32-3">all_possible_events_one_day</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="31">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
<th data-quarto-table-cell-role="th">prior</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-3.000000</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.769231</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.538462</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.307692</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>-3.0</td>
<td>-3.0</td>
<td>-2.076923</td>
<td>0.024695</td>
<td>0.017404</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>NaN</td>
<td>NaN</td>
<td>NaN</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">...</th>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63995</th>
<td>6.0</td>
<td>6.0</td>
<td>5.076923</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.471799e-12</td>
<td>1.940668e-15</td>
<td>1.350756e-71</td>
<td>2.621370e-86</td>
<td>9.709554e-84</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63996</th>
<td>6.0</td>
<td>6.0</td>
<td>5.307692</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.041343e-12</td>
<td>6.121281e-16</td>
<td>1.111450e-65</td>
<td>6.803496e-81</td>
<td>2.520015e-78</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63997</th>
<td>6.0</td>
<td>6.0</td>
<td>5.538462</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.438830e-13</td>
<td>1.930782e-16</td>
<td>1.720943e-60</td>
<td>3.322766e-76</td>
<td>1.230753e-73</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63998</th>
<td>6.0</td>
<td>6.0</td>
<td>5.769231</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.030944e-13</td>
<td>6.090098e-17</td>
<td>6.516033e-56</td>
<td>3.968328e-72</td>
<td>1.469869e-69</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63999</th>
<td>6.0</td>
<td>6.0</td>
<td>6.000000</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.406030e-14</td>
<td>1.920947e-17</td>
<td>7.462108e-52</td>
<td>1.433431e-68</td>
<td>5.309429e-66</td>
</tr>
</tbody>
</table>

<p>64000 rows × 10 columns</p>
</div>
</div>
</div>
<p>The posterior is the 3 dimensional joint posterior probability for every sample (alpha, beta, variance).</p>
<p>We can also get the marginal posterior distributions for each dimension:</p>
<div id="cell-66" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.513312Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.513258Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.516150Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.515819Z&quot;}}" data-outputid="5ab1ac39-1121-456b-bd09-4c3d2196a50e" data-execution_count="32">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb33" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb33-1">all_possible_events_one_day.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="32">
<pre><code>event_alpha
-3.000000    0.002512
-2.769231    0.005188
-2.538462    0.012265
-2.307692    0.040148
-2.076923    0.101899
-1.846154    0.119673
-1.615385    0.061342
-1.384615    0.019318
-1.153846    0.007543
-0.923077    0.003718
-0.692308    0.001918
-0.461538    0.001131
-0.230769    0.000881
 0.000000    0.000998
 0.230769    0.001564
 0.461538    0.002950
 0.692308    0.005899
 0.923077    0.013508
 1.153846    0.042828
 1.384615    0.105282
 1.615385    0.119758
 1.846154    0.059455
 2.076923    0.018135
 2.307692    0.006858
 2.538462    0.003274
 2.769231    0.001636
 3.000000    0.000934
 3.230769    0.000705
 3.461538    0.000772
 3.692308    0.001172
 3.923077    0.002140
 4.153846    0.004145
 4.384615    0.009193
 4.615385    0.028230
 4.846154    0.067214
 5.076923    0.074052
 5.307692    0.035608
 5.538462    0.010519
 5.769231    0.003853
 6.000000    0.001781
Name: posterior, dtype: float64</code></pre>
</div>
</div>
<div id="cell-67" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.517054Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.517011Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.589458Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.589083Z&quot;}}" data-outputid="167fc59e-2be2-4681-eb8b-1b89ed688063" data-execution_count="33">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb35" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb35-1">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior alpha'</span>)</span>
<span id="cb35-2">marginal_alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb35-3">plt.stem(marginal_alpha.index, marginal_alpha)</span>
<span id="cb35-4">plt.show()</span>
<span id="cb35-5"></span>
<span id="cb35-6">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior beta'</span>)</span>
<span id="cb35-7">marginal_beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb35-8">plt.stem(marginal_beta.index, marginal_beta)</span>
<span id="cb35-9">plt.show()</span>
<span id="cb35-10"></span>
<span id="cb35-11">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior variance'</span>)</span>
<span id="cb35-12">marginal_variance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_variance'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb35-13">plt.stem(marginal_variance.index, marginal_variance)</span>
<span id="cb35-14">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-34-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-34-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-34-output-3.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-68" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.590422Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.590359Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.623525Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.623208Z&quot;}}" data-outputid="6f90bfae-6340-46c8-93d7-10a909591a13" data-execution_count="34">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb36" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb36-1">all_possible_events_one_day_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day.dropna()</span>
<span id="cb36-2">sampled_parameters <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> choice(all_possible_events_one_day_.index, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>all_possible_events_one_day_[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>])</span>
<span id="cb36-3">sampled_parameters <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_one_day_.loc[sampled_parameters]</span>
<span id="cb36-4"></span>
<span id="cb36-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> mxline(intercept, slope, start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, end<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>):</span>
<span id="cb36-6">    y1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> intercept</span>
<span id="cb36-7">    y2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>end <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> intercept</span>
<span id="cb36-8">    plt.plot([start, end], [y1, y2])</span>
<span id="cb36-9"></span>
<span id="cb36-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> _, row <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> sampled_parameters[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>]].iterrows():</span>
<span id="cb36-11">  mxline(row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>], slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>])</span>
<span id="cb36-12">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-35-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<section id="the-limitations-of-our-approach" class="level2">
<h2 class="anchored" data-anchor-id="the-limitations-of-our-approach">The limitations of our approach</h2>
<p>Here we start seeing artifacts of our method. The marginal posterior probability of Alpha is showing spikes. Those spikes don’t exist, they are the result of the fact that we only took a limited set of points (30 x 30 x 30) in a 3 dimensional space. We essentially have a very low resolution.</p>
<p>Increasing the resolution is not a scalable strategy, it quickly becomes impossible to compute.</p>
<p>We have to go back to the formulas and use those. But the problem there is that the denominator is a huge integral with multiple dimensions. The solution will be to avoid computing the denominator, and only use the top part of the formula and some estimation method like MCMC to approximate the posterior.</p>
</section>
<section id="doing-it-for-an-actual-dataset-with-multiple-days" class="level2">
<h2 class="anchored" data-anchor-id="doing-it-for-an-actual-dataset-with-multiple-days">Doing it for an actual dataset, with multiple days</h2>
<div id="cell-71" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.624679Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.624623Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:08.728337Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:08.727918Z&quot;}}" data-outputid="aa9a2d0c-6158-41d6-a98e-67e16ebdc19a" data-execution_count="35">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb37" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb37-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb37-2"></span>
<span id="cb37-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's cheat and see what the alpha and beta values could be</span></span>
<span id="cb37-4">sns.regplot(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> ], y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>], truncate<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">False</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-36-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-72" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:08.729319Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:08.729265Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:17.348048Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:17.347592Z&quot;}}" data-outputid="6685197b-4fae-411c-97e7-a917b23517d9" data-execution_count="36">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb38" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb38-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> math</span>
<span id="cb38-2"></span>
<span id="cb38-3">temperatures <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> ] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># x</span></span>
<span id="cb38-4">n_clients    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># y</span></span>
<span id="cb38-5"></span>
<span id="cb38-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Finding the likelihood of observing those values at every possible alpha,beta,variance events</span></span>
<span id="cb38-7">all_possible_events_mutliple_days <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events.copy()</span>
<span id="cb38-8"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i, sample <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>(temperatures, n_clients)):</span>
<span id="cb38-9">  likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.Series([</span>
<span id="cb38-10">          norm.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sample[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb38-11">                  loc<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> sample[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],</span>
<span id="cb38-12">                  scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_variance'</span>])</span>
<span id="cb38-13">          <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> _, row <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> all_possible_events_mutliple_days.iterrows()],</span>
<span id="cb38-14">  )<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb38-15">  all_possible_events_mutliple_days[<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'likelihood_</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>i<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> likelihood</span>
<span id="cb38-16"></span>
<span id="cb38-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The likelihood is the product of all the daily likelihoods !</span></span>
<span id="cb38-18">all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> math.prod([all_possible_events_mutliple_days[<span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f'likelihood_</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>i<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">'</span>] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(temperatures))])</span>
<span id="cb38-19">all_possible_events_mutliple_days</span>
<span id="cb38-20"></span>
<span id="cb38-21">all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb38-22">all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb38-23"></span>
<span id="cb38-24">all_possible_events_mutliple_days <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days.dropna()</span>
<span id="cb38-25"></span>
<span id="cb38-26"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Once we know the posterior of each 3-dimensional event, we can gather the marginal posterior distributions</span></span>
<span id="cb38-27">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior alpha'</span>)</span>
<span id="cb38-28">marginal_alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb38-29">plt.stem(marginal_alpha.index, marginal_alpha)</span>
<span id="cb38-30">plt.show()</span>
<span id="cb38-31"></span>
<span id="cb38-32">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior beta'</span>)</span>
<span id="cb38-33">marginal_beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb38-34">plt.stem(marginal_beta.index, marginal_beta)</span>
<span id="cb38-35">plt.show()</span>
<span id="cb38-36"></span>
<span id="cb38-37">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'marginal posterior variance'</span>)</span>
<span id="cb38-38">marginal_variance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days.groupby([<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_variance'</span>])[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb38-39">plt.stem(marginal_variance.index, marginal_variance)</span>
<span id="cb38-40">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:2079: RuntimeWarning: divide by zero encountered in divide
  x = np.asarray((x - loc)/scale, dtype=dtyp)
/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/scipy/stats/_distn_infrastructure.py:2079: RuntimeWarning: invalid value encountered in divide
  x = np.asarray((x - loc)/scale, dtype=dtyp)</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-37-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-37-output-3.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-37-output-4.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-73" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:17.348926Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:17.348871Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:17.354816Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:17.354480Z&quot;}}" data-execution_count="37">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb40" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb40-1">all_possible_events_mutliple_days</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="37">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">event_alpha</th>
<th data-quarto-table-cell-role="th">event_beta</th>
<th data-quarto-table-cell-role="th">event_variance</th>
<th data-quarto-table-cell-role="th">prior_knowledge_alpha</th>
<th data-quarto-table-cell-role="th">prior_knowledge_beta</th>
<th data-quarto-table-cell-role="th">prior_knowledge_variance</th>
<th data-quarto-table-cell-role="th">prior</th>
<th data-quarto-table-cell-role="th">likelihood_0</th>
<th data-quarto-table-cell-role="th">likelihood_1</th>
<th data-quarto-table-cell-role="th">likelihood_2</th>
<th data-quarto-table-cell-role="th">likelihood_3</th>
<th data-quarto-table-cell-role="th">likelihood_4</th>
<th data-quarto-table-cell-role="th">likelihood_5</th>
<th data-quarto-table-cell-role="th">likelihood</th>
<th data-quarto-table-cell-role="th">posterior_unnormalized</th>
<th data-quarto-table-cell-role="th">posterior</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">14</th>
<td>-3.0</td>
<td>-3.0</td>
<td>0.230769</td>
<td>0.024695</td>
<td>0.017404</td>
<td>2.159307e-01</td>
<td>9.280828e-05</td>
<td>1.883664e-261</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">15</th>
<td>-3.0</td>
<td>-3.0</td>
<td>0.461538</td>
<td>0.024695</td>
<td>0.017404</td>
<td>6.810913e-02</td>
<td>2.927371e-05</td>
<td>4.966152e-66</td>
<td>1.396906e-147</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">16</th>
<td>-3.0</td>
<td>-3.0</td>
<td>0.692308</td>
<td>0.024695</td>
<td>0.017404</td>
<td>2.148307e-02</td>
<td>9.233550e-06</td>
<td>5.817711e-30</td>
<td>3.310768e-66</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>9.141590e-201</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">17</th>
<td>-3.0</td>
<td>-3.0</td>
<td>0.923077</td>
<td>0.024695</td>
<td>0.017404</td>
<td>6.776217e-03</td>
<td>2.912458e-06</td>
<td>2.115932e-17</td>
<td>8.665397e-38</td>
<td>1.282114e-278</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>1.771753e-113</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">18</th>
<td>-3.0</td>
<td>-3.0</td>
<td>1.153846</td>
<td>0.024695</td>
<td>0.017404</td>
<td>2.137363e-03</td>
<td>9.186512e-07</td>
<td>1.259659e-11</td>
<td>1.127500e-24</td>
<td>8.336907e-179</td>
<td>2.316303e-275</td>
<td>2.891134e-249</td>
<td>4.082348e-73</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">...</th>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63995</th>
<td>6.0</td>
<td>6.0</td>
<td>5.076923</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.471799e-12</td>
<td>1.940668e-15</td>
<td>7.706990e-02</td>
<td>3.908600e-02</td>
<td>1.513658e-05</td>
<td>6.297917e-10</td>
<td>1.103308e-06</td>
<td>3.908600e-02</td>
<td>1.238365e-24</td>
<td>2.403256e-39</td>
<td>1.331171e-29</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63996</th>
<td>6.0</td>
<td>6.0</td>
<td>5.307692</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.041343e-12</td>
<td>6.121281e-16</td>
<td>7.384079e-02</td>
<td>3.967488e-02</td>
<td>2.997557e-05</td>
<td>2.941691e-09</td>
<td>2.730139e-06</td>
<td>3.967488e-02</td>
<td>2.798187e-23</td>
<td>1.712849e-38</td>
<td>9.487521e-29</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63997</th>
<td>6.0</td>
<td>6.0</td>
<td>5.538462</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.438830e-13</td>
<td>1.930782e-16</td>
<td>7.086664e-02</td>
<td>4.005664e-02</td>
<td>5.440669e-05</td>
<td>1.133803e-08</td>
<td>6.025295e-06</td>
<td>4.005664e-02</td>
<td>4.226287e-22</td>
<td>8.160040e-38</td>
<td>4.519870e-28</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">63998</th>
<td>6.0</td>
<td>6.0</td>
<td>5.769231</td>
<td>0.014391</td>
<td>0.020837</td>
<td>2.030944e-13</td>
<td>6.090098e-17</td>
<td>6.811897e-02</td>
<td>4.026481e-02</td>
<td>9.176521e-05</td>
<td>3.716744e-08</td>
<td>1.207616e-05</td>
<td>4.026481e-02</td>
<td>4.548718e-21</td>
<td>2.770214e-37</td>
<td>1.534430e-27</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">63999</th>
<td>6.0</td>
<td>6.0</td>
<td>6.000000</td>
<td>0.014391</td>
<td>0.020837</td>
<td>6.406030e-14</td>
<td>1.920947e-17</td>
<td>6.557329e-02</td>
<td>4.032845e-02</td>
<td>1.454471e-04</td>
<td>1.062023e-07</td>
<td>2.230504e-05</td>
<td>4.032845e-02</td>
<td>3.674447e-20</td>
<td>7.058417e-37</td>
<td>3.909678e-27</td>
</tr>
</tbody>
</table>

<p>41600 rows × 16 columns</p>
</div>
</div>
</div>
<p>We can sample from the posterior and visualize what regression results this would give us</p>
<div id="cell-75" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:17.355757Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:17.355706Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:17.389073Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:17.388654Z&quot;}}" data-outputid="238c0975-da4b-4d5a-f629-8c693bd06449" data-execution_count="38">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb41" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb41-1">sampled_parameters <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> choice(all_possible_events_mutliple_days.index, size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>all_possible_events_mutliple_days[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>])</span>
<span id="cb41-2">sampled_parameters <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> all_possible_events_mutliple_days.loc[sampled_parameters]</span>
<span id="cb41-3"></span>
<span id="cb41-4"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> mxline(intercept, slope, start<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, end<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>):</span>
<span id="cb41-5">    y1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> intercept</span>
<span id="cb41-6">    y2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>end <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> intercept</span>
<span id="cb41-7">    plt.plot([start, end], [y1, y2])</span>
<span id="cb41-8"></span>
<span id="cb41-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> _, row <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> sampled_parameters[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>]].iterrows():</span>
<span id="cb41-10">  mxline(row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_alpha'</span>], slope<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'event_beta'</span>])</span>
<span id="cb41-11">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-39-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>What we start to notice, is that this method is very expensive. We are only sampling <code>30*30*30</code> points.</p>
<p>The more dimensions, the harder it gets to have a good precision and actually find the most interesting points, which are likely to be those where the probabilities are high.</p>
<p>This is why many methods, quap, MCMC, etc. exist.</p>
</section>
</section>
<section id="doing-the-same-with-pymc" class="level1">
<h1>Doing the same with PyMC</h1>
<section id="with-a-single-sample-day" class="level2">
<h2 class="anchored" data-anchor-id="with-a-single-sample-day">With a single sample day</h2>
<div id="cell-79" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:17.390141Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:17.390093Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:27.552285Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:27.551928Z&quot;}}" data-outputid="87ee8d78-0c85-4e31-9986-f2323facca1f" data-execution_count="39">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb42" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb42-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb42-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> arviz <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> az</span>
<span id="cb42-3"></span>
<span id="cb42-4">basic_model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Model()</span>
<span id="cb42-5"></span>
<span id="cb42-6"></span>
<span id="cb42-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Reminder: This is how we did it manually</span></span>
<span id="cb42-8"></span>
<span id="cb42-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># linspace = np.linspace(0, 1, 30)</span></span>
<span id="cb42-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># alpha_pdf = beta.pdf(x=linspace, a=3, b=3)</span></span>
<span id="cb42-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># alpha_pdf = alpha_pdf / alpha_pdf.sum()</span></span>
<span id="cb42-12"></span>
<span id="cb42-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># beta_pdf = beta.pdf(x=linspace, a=3, b=1)</span></span>
<span id="cb42-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># beta_pdf = beta_pdf / beta_pdf.sum()</span></span>
<span id="cb42-15"></span>
<span id="cb42-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># gaussian_variance_pdf = expon.pdf(x=linspace, scale=0.2)</span></span>
<span id="cb42-17"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># gaussian_variance_pdf = gaussian_variance_pdf / gaussian_variance_pdf.sum()</span></span>
<span id="cb42-18"></span>
<span id="cb42-19">Y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The number of clients</span></span>
<span id="cb42-20">X1 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The temperature</span></span>
<span id="cb42-21"></span>
<span id="cb42-22"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> basic_model:</span>
<span id="cb42-23"></span>
<span id="cb42-24">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's do the same with PyMC</span></span>
<span id="cb42-25">    alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"alpha"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb42-26">    beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"beta"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb42-27">    sigma <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Exponential(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sigma"</span>, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>)</span>
<span id="cb42-28"></span>
<span id="cb42-29">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Expected value of outcome</span></span>
<span id="cb42-30">    mu <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> X1</span>
<span id="cb42-31"></span>
<span id="cb42-32">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood (sampling distribution) of observations</span></span>
<span id="cb42-33">    Y_obs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Y_obs"</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>mu, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sigma, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>Y)</span>
<span id="cb42-34"></span>
<span id="cb42-35">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>)</span>
<span id="cb42-36"></span>
<span id="cb42-37">az.plot_trace(trace, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [alpha, beta, sigma]</code></pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f
4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/rich/live.py:260: 
UserWarning: install "ipywidgets" for Jupyter support
  warnings.warn('install "ipywidgets" for Jupyter support')
</pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"></pre>
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 4 chains for 1_000 tune and 5_000 draw iterations (4_000 + 20_000 draws total) took 3 seconds.
There were 2326 divergences after tuning. Increase `target_accept` or reparameterize.
The rhat statistic is larger than 1.01 for some parameters. This indicates problems during sampling. See https://arxiv.org/abs/1903.08008 for details
The effective sample size per chain is smaller than 100 for some parameters.  A higher number is needed for reliable rhat and ess computation. See https://arxiv.org/abs/1903.08008 for details</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-40-output-5.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="with-multiple-days" class="level2">
<h2 class="anchored" data-anchor-id="with-multiple-days">With multiple days</h2>
<div id="cell-81" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:27.553652Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:27.553514Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:32.308187Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:32.307789Z&quot;}}" data-outputid="4d7b9595-2980-4703-8a17-f1a46a1b2488" data-execution_count="40">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb45" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb45-1">basic_model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Model()</span>
<span id="cb45-2"></span>
<span id="cb45-3">temperatures <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> ] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># x</span></span>
<span id="cb45-4">n_clients    <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">15</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">18</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span>] <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># y</span></span>
<span id="cb45-5"></span>
<span id="cb45-6"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> basic_model:</span>
<span id="cb45-7"></span>
<span id="cb45-8">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's do the same with PyMC</span></span>
<span id="cb45-9">    alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"alpha"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb45-10">    beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"beta"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>)</span>
<span id="cb45-11">    sigma <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Exponential(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"sigma"</span>, scale<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.2</span>)</span>
<span id="cb45-12"></span>
<span id="cb45-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Expected value of outcome</span></span>
<span id="cb45-14">    mu <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> beta <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> temperatures</span>
<span id="cb45-15"></span>
<span id="cb45-16">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Likelihood (sampling distribution) of observations</span></span>
<span id="cb45-17">    Y_obs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Normal(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Y_obs"</span>, mu<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>mu, sigma<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>sigma, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>n_clients)</span>
<span id="cb45-18"></span>
<span id="cb45-19">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>)</span>
<span id="cb45-20"></span>
<span id="cb45-21">az.plot_trace(trace, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>Initializing NUTS using jitter+adapt_diag...
Multiprocess sampling (4 chains in 4 jobs)
NUTS: [alpha, beta, sigma]</code></pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f
4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/rich/live.py:260: 
UserWarning: install "ipywidgets" for Jupyter support
  warnings.warn('install "ipywidgets" for Jupyter support')
</pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"></pre>
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 4 chains for 1_000 tune and 5_000 draw iterations (4_000 + 20_000 draws total) took 1 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-41-output-5.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
</section>
<section id="re-exploring-the-initial-problem-but-differently" class="level1">
<h1>Re-exploring the initial problem, but differently</h1>
<p>In the first problem of this notebook, we analyzed the probability of 2 events, “Rain” and “NoRain” based on some additional observerd data.</p>
<p>Let’s reproduce our results with PyMC, where we model the initial events as “Rain” and “NoRain”</p>
<div id="cell-83" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:32.309460Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:32.309381Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:34.566165Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:34.565811Z&quot;}}" data-outputid="2003522d-9abf-4d4f-a6da-d4ec8723d5de" data-execution_count="41">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb48" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb48-1">basic_model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Model()</span>
<span id="cb48-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> basic_model:</span>
<span id="cb48-3"></span>
<span id="cb48-4">    p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Rain"</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># A prio on the Rain event</span></span>
<span id="cb48-5">    p_yes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>p) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb48-6">    Y_obs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Y_obs"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_yes, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The chances of observing "Friend saying it rains"</span></span>
<span id="cb48-7"></span>
<span id="cb48-8">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>)</span>
<span id="cb48-9"></span>
<span id="cb48-10">az.plot_trace(trace, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>Multiprocess sampling (4 chains in 4 jobs)
BinaryGibbsMetropolis: [Rain]</code></pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f
4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/rich/live.py:260: 
UserWarning: install "ipywidgets" for Jupyter support
  warnings.warn('install "ipywidgets" for Jupyter support')
</pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"></pre>
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 4 chains for 1_000 tune and 5_000 draw iterations (4_000 + 20_000 draws total) took 0 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-42-output-5.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>Another way to tackle the same problem is to consider the events to be all possible values of “p”, the probability of a binomial distribution that would represent the chances of raining.</p>
<div id="cell-85" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:34.567319Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:34.567258Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:34.643688Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:34.643391Z&quot;}}" data-outputid="3ba405bb-498c-4e73-b6c5-ef7e91c40172" data-execution_count="42">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb51" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb51-1"></span>
<span id="cb51-2"></span>
<span id="cb51-3">linspace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linspace(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">30</span>)</span>
<span id="cb51-4">pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> uniform.pdf(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>linspace)</span>
<span id="cb51-5">pdf <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pdf<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>pdf.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb51-6"></span>
<span id="cb51-7">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior'</span>)</span>
<span id="cb51-8">plt.stem(linspace, pdf)</span>
<span id="cb51-9">plt.show()</span>
<span id="cb51-10"></span>
<span id="cb51-11">probabilities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb51-12">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: linspace,</span>
<span id="cb51-13">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>: pdf,</span>
<span id="cb51-14">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb51-15"></span>
<span id="cb51-16">probabilities</span>
<span id="cb51-17"></span>
<span id="cb51-18"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We observed 1 friend saying "rain"</span></span>
<span id="cb51-19">likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame({</span>
<span id="cb51-20">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>: linspace,</span>
<span id="cb51-21">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>: [</span>
<span id="cb51-22">        bernoulli.pmf(k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>probability) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>probability) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Here the system is the link between rain and the friend lying about it</span></span>
<span id="cb51-23">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> probability <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> linspace],</span>
<span id="cb51-24">})<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span>
<span id="cb51-25"></span>
<span id="cb51-26">likelihood</span>
<span id="cb51-27"></span>
<span id="cb51-28">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>)</span>
<span id="cb51-29">plt.stem(likelihood[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>], likelihood[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>])</span>
<span id="cb51-30">plt.show()</span>
<span id="cb51-31"></span>
<span id="cb51-32">bayes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.concat([probabilities, likelihood.drop(columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'events'</span>])], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb51-33">bayes</span>
<span id="cb51-34"></span>
<span id="cb51-35">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'prior_knowledge'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'likelihood'</span>]</span>
<span id="cb51-36">bayes</span>
<span id="cb51-37"></span>
<span id="cb51-38">bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior_unnormalized'</span>].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb51-39">bayes</span>
<span id="cb51-40"></span>
<span id="cb51-41">plt.title(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>)</span>
<span id="cb51-42">plt.stem(linspace, bayes[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'posterior'</span>])</span>
<span id="cb51-43">plt.show()</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-43-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-43-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-43-output-3.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>Now the same but with PyMC</p>
<div id="cell-87" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T18:32:34.644874Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T18:32:34.644813Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T18:32:38.536667Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T18:32:38.536250Z&quot;}}" data-outputid="892a31c0-2d8c-4fce-8bf1-7f5689d4f93b" data-execution_count="43">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb52" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb52-1">basic_model <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Model()</span>
<span id="cb52-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> basic_model:</span>
<span id="cb52-3">    p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Uniform(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"p"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># A flat prior between 0 and 1 for the probability of rain</span></span>
<span id="cb52-4">    rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># we plug it in here</span></span>
<span id="cb52-5">    p_yes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>rain) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb52-6">    Y_obs <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Y_obs"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_yes, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The chances of observing "Friend saying it rains"</span></span>
<span id="cb52-7"></span>
<span id="cb52-8">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span>)</span>
<span id="cb52-9"></span>
<span id="cb52-10">az.plot_trace(trace, figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>))<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">;</span></span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>Multiprocess sampling (4 chains in 4 jobs)
CompoundStep
&gt;NUTS: [p]
&gt;BinaryGibbsMetropolis: [rain]</code></pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace">/private/tmp/claude-501/-Users-rodolphecambier-Projects-rcambier-github-io--claude-worktrees-blog-post-review-8a57f
4/0010ddf8-6e73-46b1-8c34-53b653ade511/scratchpad/bayes-venv/lib/python3.12/site-packages/rich/live.py:260: 
UserWarning: install "ipywidgets" for Jupyter support
  warnings.warn('install "ipywidgets" for Jupyter support')
</pre>
</div>
<div class="cell-output cell-output-display">
<pre style="white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace"></pre>
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 4 chains for 1_000 tune and 5_000 draw iterations (4_000 + 20_000 draws total) took 1 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch_files/figure-html/cell-44-output-5.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2023-10-20-bayesian-inference-from-scratch.html</guid>
  <pubDate>Sat, 21 Oct 2023 23:00:00 GMT</pubDate>
  <media:content url="https://rcambier.github.io/posts/bayesian_header.png" medium="image" type="image/png" height="97" width="144"/>
</item>
<item>
  <title>SHAP values from scratch</title>
  <link>https://rcambier.github.io/posts/2023-01-14-shap-values.html</link>
  <description><![CDATA[ 





<p>SHAP values are great for understanding a model. The basic logic of how they work is quite simple and worth trying to reproduce with raw Python.</p>
<p>On a high level, the logic is the following: To get the importance of a feature, let’s remove then add it back, on every sample. By checking the impact of removing/adding the feature on the prediction for that sample, we have the importance of the feature for that sample. We can then aggregate to get the feature importance overall. This is why we loop over all samples and all features in each sample below.</p>
<p>The only thing to add is that if we just use the existing samples, we only compute the impact of removing/adding the feature when all other features of the sample are present. The point of SHAP is to perform the operation with every combination of other features removed. This is why below we compute the coalitions.</p>
<div id="cell-2" class="cell" data-execution_count="64">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.datasets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> load_breast_cancer</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.linear_model <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> LogisticRegression</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sympy.utilities.iterables <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> multiset_permutations</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> tqdm.notebook <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> tqdm</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> pprint <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pprint</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-8"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.linear_model <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> LinearRegression</span>
<span id="cb1-9"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> random </span></code></pre></div></div>
</div>
<section id="loading-a-dataset-and-fitting-a-model" class="level1">
<h1>1. Loading a dataset and fitting a model</h1>
<div id="cell-4" class="cell" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">X, y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> load_breast_cancer(return_X_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>, as_frame<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span></code></pre></div></div>
</div>
<div id="cell-5" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="905de1f2-77b0-4d9e-e5d5-c1b3942cd3a8" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">lr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> LogisticRegression(max_iter<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">100</span>, verbose<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>).fit(X.values, y.values)</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>/usr/local/lib/python3.8/dist-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
    https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
  n_iter_i = _check_optimize_result(</code></pre>
</div>
</div>
</section>
<section id="computing-feature-importance" class="level1">
<h1>2. Computing feature importance</h1>
<section id="creating-coalitions" class="level2">
<h2 class="anchored" data-anchor-id="creating-coalitions">2.1 Creating “coalitions”</h2>
<p>Coalitions are list of 0s and 1s representing all possible combinations of features.</p>
<p>Ideally, we would use all possible coalitions, to cover all the possible cases. In practice, extreme coalitions (mostly 1s and mostly 0s) are used. In our case, as we use pure Python, we will only consider a few coalitions.</p>
<p>This image, from the great SHAP explanation <a href="https://christophm.github.io/interpretable-ml-book/shap.html#kernelshap">here</a>, shows the way coalitions are used to remove features and replace them by the average values (in red)</p>
<p><img src="https://christophm.github.io/interpretable-ml-book/images/shap-simplified-features.jpg" class="img-fluid"></p>
<div id="cell-9" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:1000}}" data-outputid="5966fe05-c300-45d9-f2e0-01cb99af6f08" data-execution_count="48">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">coalitions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb5-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X.columns)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X.columns)]: </span>
<span id="cb5-3">  num_ones <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> i </span>
<span id="cb5-4">  num_zeroes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X.columns) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> i</span>
<span id="cb5-5">  coalitions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(multiset_permutations([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> num_zeroes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> num_ones))</span>
<span id="cb5-6"></span>
<span id="cb5-7">pd.DataFrame(coalitions).style.applymap(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> v: <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'background-color:red'</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> v <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">else</span> <span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">None</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="48">


<table id="T_b855c_" class="dataframe caption-top table table-sm table-striped small">
<thead>
<tr class="header">
<th class="blank level0" data-quarto-table-cell-role="th">&nbsp;</th>
<th class="col_heading level0 col0" data-quarto-table-cell-role="th">0</th>
<th class="col_heading level0 col1" data-quarto-table-cell-role="th">1</th>
<th class="col_heading level0 col2" data-quarto-table-cell-role="th">2</th>
<th class="col_heading level0 col3" data-quarto-table-cell-role="th">3</th>
<th class="col_heading level0 col4" data-quarto-table-cell-role="th">4</th>
<th class="col_heading level0 col5" data-quarto-table-cell-role="th">5</th>
<th class="col_heading level0 col6" data-quarto-table-cell-role="th">6</th>
<th class="col_heading level0 col7" data-quarto-table-cell-role="th">7</th>
<th class="col_heading level0 col8" data-quarto-table-cell-role="th">8</th>
<th class="col_heading level0 col9" data-quarto-table-cell-role="th">9</th>
<th class="col_heading level0 col10" data-quarto-table-cell-role="th">10</th>
<th class="col_heading level0 col11" data-quarto-table-cell-role="th">11</th>
<th class="col_heading level0 col12" data-quarto-table-cell-role="th">12</th>
<th class="col_heading level0 col13" data-quarto-table-cell-role="th">13</th>
<th class="col_heading level0 col14" data-quarto-table-cell-role="th">14</th>
<th class="col_heading level0 col15" data-quarto-table-cell-role="th">15</th>
<th class="col_heading level0 col16" data-quarto-table-cell-role="th">16</th>
<th class="col_heading level0 col17" data-quarto-table-cell-role="th">17</th>
<th class="col_heading level0 col18" data-quarto-table-cell-role="th">18</th>
<th class="col_heading level0 col19" data-quarto-table-cell-role="th">19</th>
<th class="col_heading level0 col20" data-quarto-table-cell-role="th">20</th>
<th class="col_heading level0 col21" data-quarto-table-cell-role="th">21</th>
<th class="col_heading level0 col22" data-quarto-table-cell-role="th">22</th>
<th class="col_heading level0 col23" data-quarto-table-cell-role="th">23</th>
<th class="col_heading level0 col24" data-quarto-table-cell-role="th">24</th>
<th class="col_heading level0 col25" data-quarto-table-cell-role="th">25</th>
<th class="col_heading level0 col26" data-quarto-table-cell-role="th">26</th>
<th class="col_heading level0 col27" data-quarto-table-cell-role="th">27</th>
<th class="col_heading level0 col28" data-quarto-table-cell-role="th">28</th>
<th class="col_heading level0 col29" data-quarto-table-cell-role="th">29</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th id="T_b855c_level0_row0" class="row_heading level0 row0" data-quarto-table-cell-role="th">0</th>
<td id="T_b855c_row0_col0" class="data row0 col0">0</td>
<td id="T_b855c_row0_col1" class="data row0 col1">0</td>
<td id="T_b855c_row0_col2" class="data row0 col2">0</td>
<td id="T_b855c_row0_col3" class="data row0 col3">0</td>
<td id="T_b855c_row0_col4" class="data row0 col4">0</td>
<td id="T_b855c_row0_col5" class="data row0 col5">0</td>
<td id="T_b855c_row0_col6" class="data row0 col6">0</td>
<td id="T_b855c_row0_col7" class="data row0 col7">0</td>
<td id="T_b855c_row0_col8" class="data row0 col8">0</td>
<td id="T_b855c_row0_col9" class="data row0 col9">0</td>
<td id="T_b855c_row0_col10" class="data row0 col10">0</td>
<td id="T_b855c_row0_col11" class="data row0 col11">0</td>
<td id="T_b855c_row0_col12" class="data row0 col12">0</td>
<td id="T_b855c_row0_col13" class="data row0 col13">0</td>
<td id="T_b855c_row0_col14" class="data row0 col14">0</td>
<td id="T_b855c_row0_col15" class="data row0 col15">0</td>
<td id="T_b855c_row0_col16" class="data row0 col16">0</td>
<td id="T_b855c_row0_col17" class="data row0 col17">0</td>
<td id="T_b855c_row0_col18" class="data row0 col18">0</td>
<td id="T_b855c_row0_col19" class="data row0 col19">0</td>
<td id="T_b855c_row0_col20" class="data row0 col20">0</td>
<td id="T_b855c_row0_col21" class="data row0 col21">0</td>
<td id="T_b855c_row0_col22" class="data row0 col22">0</td>
<td id="T_b855c_row0_col23" class="data row0 col23">0</td>
<td id="T_b855c_row0_col24" class="data row0 col24">0</td>
<td id="T_b855c_row0_col25" class="data row0 col25">0</td>
<td id="T_b855c_row0_col26" class="data row0 col26">0</td>
<td id="T_b855c_row0_col27" class="data row0 col27">0</td>
<td id="T_b855c_row0_col28" class="data row0 col28">0</td>
<td id="T_b855c_row0_col29" class="data row0 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row1" class="row_heading level0 row1" data-quarto-table-cell-role="th">1</th>
<td id="T_b855c_row1_col0" class="data row1 col0">0</td>
<td id="T_b855c_row1_col1" class="data row1 col1">0</td>
<td id="T_b855c_row1_col2" class="data row1 col2">0</td>
<td id="T_b855c_row1_col3" class="data row1 col3">0</td>
<td id="T_b855c_row1_col4" class="data row1 col4">0</td>
<td id="T_b855c_row1_col5" class="data row1 col5">0</td>
<td id="T_b855c_row1_col6" class="data row1 col6">0</td>
<td id="T_b855c_row1_col7" class="data row1 col7">0</td>
<td id="T_b855c_row1_col8" class="data row1 col8">0</td>
<td id="T_b855c_row1_col9" class="data row1 col9">0</td>
<td id="T_b855c_row1_col10" class="data row1 col10">0</td>
<td id="T_b855c_row1_col11" class="data row1 col11">0</td>
<td id="T_b855c_row1_col12" class="data row1 col12">0</td>
<td id="T_b855c_row1_col13" class="data row1 col13">0</td>
<td id="T_b855c_row1_col14" class="data row1 col14">0</td>
<td id="T_b855c_row1_col15" class="data row1 col15">0</td>
<td id="T_b855c_row1_col16" class="data row1 col16">0</td>
<td id="T_b855c_row1_col17" class="data row1 col17">0</td>
<td id="T_b855c_row1_col18" class="data row1 col18">0</td>
<td id="T_b855c_row1_col19" class="data row1 col19">0</td>
<td id="T_b855c_row1_col20" class="data row1 col20">0</td>
<td id="T_b855c_row1_col21" class="data row1 col21">0</td>
<td id="T_b855c_row1_col22" class="data row1 col22">0</td>
<td id="T_b855c_row1_col23" class="data row1 col23">0</td>
<td id="T_b855c_row1_col24" class="data row1 col24">0</td>
<td id="T_b855c_row1_col25" class="data row1 col25">0</td>
<td id="T_b855c_row1_col26" class="data row1 col26">0</td>
<td id="T_b855c_row1_col27" class="data row1 col27">0</td>
<td id="T_b855c_row1_col28" class="data row1 col28">0</td>
<td id="T_b855c_row1_col29" class="data row1 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row2" class="row_heading level0 row2" data-quarto-table-cell-role="th">2</th>
<td id="T_b855c_row2_col0" class="data row2 col0">0</td>
<td id="T_b855c_row2_col1" class="data row2 col1">0</td>
<td id="T_b855c_row2_col2" class="data row2 col2">0</td>
<td id="T_b855c_row2_col3" class="data row2 col3">0</td>
<td id="T_b855c_row2_col4" class="data row2 col4">0</td>
<td id="T_b855c_row2_col5" class="data row2 col5">0</td>
<td id="T_b855c_row2_col6" class="data row2 col6">0</td>
<td id="T_b855c_row2_col7" class="data row2 col7">0</td>
<td id="T_b855c_row2_col8" class="data row2 col8">0</td>
<td id="T_b855c_row2_col9" class="data row2 col9">0</td>
<td id="T_b855c_row2_col10" class="data row2 col10">0</td>
<td id="T_b855c_row2_col11" class="data row2 col11">0</td>
<td id="T_b855c_row2_col12" class="data row2 col12">0</td>
<td id="T_b855c_row2_col13" class="data row2 col13">0</td>
<td id="T_b855c_row2_col14" class="data row2 col14">0</td>
<td id="T_b855c_row2_col15" class="data row2 col15">0</td>
<td id="T_b855c_row2_col16" class="data row2 col16">0</td>
<td id="T_b855c_row2_col17" class="data row2 col17">0</td>
<td id="T_b855c_row2_col18" class="data row2 col18">0</td>
<td id="T_b855c_row2_col19" class="data row2 col19">0</td>
<td id="T_b855c_row2_col20" class="data row2 col20">0</td>
<td id="T_b855c_row2_col21" class="data row2 col21">0</td>
<td id="T_b855c_row2_col22" class="data row2 col22">0</td>
<td id="T_b855c_row2_col23" class="data row2 col23">0</td>
<td id="T_b855c_row2_col24" class="data row2 col24">0</td>
<td id="T_b855c_row2_col25" class="data row2 col25">0</td>
<td id="T_b855c_row2_col26" class="data row2 col26">0</td>
<td id="T_b855c_row2_col27" class="data row2 col27">0</td>
<td id="T_b855c_row2_col28" class="data row2 col28">1</td>
<td id="T_b855c_row2_col29" class="data row2 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row3" class="row_heading level0 row3" data-quarto-table-cell-role="th">3</th>
<td id="T_b855c_row3_col0" class="data row3 col0">0</td>
<td id="T_b855c_row3_col1" class="data row3 col1">0</td>
<td id="T_b855c_row3_col2" class="data row3 col2">0</td>
<td id="T_b855c_row3_col3" class="data row3 col3">0</td>
<td id="T_b855c_row3_col4" class="data row3 col4">0</td>
<td id="T_b855c_row3_col5" class="data row3 col5">0</td>
<td id="T_b855c_row3_col6" class="data row3 col6">0</td>
<td id="T_b855c_row3_col7" class="data row3 col7">0</td>
<td id="T_b855c_row3_col8" class="data row3 col8">0</td>
<td id="T_b855c_row3_col9" class="data row3 col9">0</td>
<td id="T_b855c_row3_col10" class="data row3 col10">0</td>
<td id="T_b855c_row3_col11" class="data row3 col11">0</td>
<td id="T_b855c_row3_col12" class="data row3 col12">0</td>
<td id="T_b855c_row3_col13" class="data row3 col13">0</td>
<td id="T_b855c_row3_col14" class="data row3 col14">0</td>
<td id="T_b855c_row3_col15" class="data row3 col15">0</td>
<td id="T_b855c_row3_col16" class="data row3 col16">0</td>
<td id="T_b855c_row3_col17" class="data row3 col17">0</td>
<td id="T_b855c_row3_col18" class="data row3 col18">0</td>
<td id="T_b855c_row3_col19" class="data row3 col19">0</td>
<td id="T_b855c_row3_col20" class="data row3 col20">0</td>
<td id="T_b855c_row3_col21" class="data row3 col21">0</td>
<td id="T_b855c_row3_col22" class="data row3 col22">0</td>
<td id="T_b855c_row3_col23" class="data row3 col23">0</td>
<td id="T_b855c_row3_col24" class="data row3 col24">0</td>
<td id="T_b855c_row3_col25" class="data row3 col25">0</td>
<td id="T_b855c_row3_col26" class="data row3 col26">0</td>
<td id="T_b855c_row3_col27" class="data row3 col27">1</td>
<td id="T_b855c_row3_col28" class="data row3 col28">0</td>
<td id="T_b855c_row3_col29" class="data row3 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row4" class="row_heading level0 row4" data-quarto-table-cell-role="th">4</th>
<td id="T_b855c_row4_col0" class="data row4 col0">0</td>
<td id="T_b855c_row4_col1" class="data row4 col1">0</td>
<td id="T_b855c_row4_col2" class="data row4 col2">0</td>
<td id="T_b855c_row4_col3" class="data row4 col3">0</td>
<td id="T_b855c_row4_col4" class="data row4 col4">0</td>
<td id="T_b855c_row4_col5" class="data row4 col5">0</td>
<td id="T_b855c_row4_col6" class="data row4 col6">0</td>
<td id="T_b855c_row4_col7" class="data row4 col7">0</td>
<td id="T_b855c_row4_col8" class="data row4 col8">0</td>
<td id="T_b855c_row4_col9" class="data row4 col9">0</td>
<td id="T_b855c_row4_col10" class="data row4 col10">0</td>
<td id="T_b855c_row4_col11" class="data row4 col11">0</td>
<td id="T_b855c_row4_col12" class="data row4 col12">0</td>
<td id="T_b855c_row4_col13" class="data row4 col13">0</td>
<td id="T_b855c_row4_col14" class="data row4 col14">0</td>
<td id="T_b855c_row4_col15" class="data row4 col15">0</td>
<td id="T_b855c_row4_col16" class="data row4 col16">0</td>
<td id="T_b855c_row4_col17" class="data row4 col17">0</td>
<td id="T_b855c_row4_col18" class="data row4 col18">0</td>
<td id="T_b855c_row4_col19" class="data row4 col19">0</td>
<td id="T_b855c_row4_col20" class="data row4 col20">0</td>
<td id="T_b855c_row4_col21" class="data row4 col21">0</td>
<td id="T_b855c_row4_col22" class="data row4 col22">0</td>
<td id="T_b855c_row4_col23" class="data row4 col23">0</td>
<td id="T_b855c_row4_col24" class="data row4 col24">0</td>
<td id="T_b855c_row4_col25" class="data row4 col25">0</td>
<td id="T_b855c_row4_col26" class="data row4 col26">1</td>
<td id="T_b855c_row4_col27" class="data row4 col27">0</td>
<td id="T_b855c_row4_col28" class="data row4 col28">0</td>
<td id="T_b855c_row4_col29" class="data row4 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row5" class="row_heading level0 row5" data-quarto-table-cell-role="th">5</th>
<td id="T_b855c_row5_col0" class="data row5 col0">0</td>
<td id="T_b855c_row5_col1" class="data row5 col1">0</td>
<td id="T_b855c_row5_col2" class="data row5 col2">0</td>
<td id="T_b855c_row5_col3" class="data row5 col3">0</td>
<td id="T_b855c_row5_col4" class="data row5 col4">0</td>
<td id="T_b855c_row5_col5" class="data row5 col5">0</td>
<td id="T_b855c_row5_col6" class="data row5 col6">0</td>
<td id="T_b855c_row5_col7" class="data row5 col7">0</td>
<td id="T_b855c_row5_col8" class="data row5 col8">0</td>
<td id="T_b855c_row5_col9" class="data row5 col9">0</td>
<td id="T_b855c_row5_col10" class="data row5 col10">0</td>
<td id="T_b855c_row5_col11" class="data row5 col11">0</td>
<td id="T_b855c_row5_col12" class="data row5 col12">0</td>
<td id="T_b855c_row5_col13" class="data row5 col13">0</td>
<td id="T_b855c_row5_col14" class="data row5 col14">0</td>
<td id="T_b855c_row5_col15" class="data row5 col15">0</td>
<td id="T_b855c_row5_col16" class="data row5 col16">0</td>
<td id="T_b855c_row5_col17" class="data row5 col17">0</td>
<td id="T_b855c_row5_col18" class="data row5 col18">0</td>
<td id="T_b855c_row5_col19" class="data row5 col19">0</td>
<td id="T_b855c_row5_col20" class="data row5 col20">0</td>
<td id="T_b855c_row5_col21" class="data row5 col21">0</td>
<td id="T_b855c_row5_col22" class="data row5 col22">0</td>
<td id="T_b855c_row5_col23" class="data row5 col23">0</td>
<td id="T_b855c_row5_col24" class="data row5 col24">0</td>
<td id="T_b855c_row5_col25" class="data row5 col25">1</td>
<td id="T_b855c_row5_col26" class="data row5 col26">0</td>
<td id="T_b855c_row5_col27" class="data row5 col27">0</td>
<td id="T_b855c_row5_col28" class="data row5 col28">0</td>
<td id="T_b855c_row5_col29" class="data row5 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row6" class="row_heading level0 row6" data-quarto-table-cell-role="th">6</th>
<td id="T_b855c_row6_col0" class="data row6 col0">0</td>
<td id="T_b855c_row6_col1" class="data row6 col1">0</td>
<td id="T_b855c_row6_col2" class="data row6 col2">0</td>
<td id="T_b855c_row6_col3" class="data row6 col3">0</td>
<td id="T_b855c_row6_col4" class="data row6 col4">0</td>
<td id="T_b855c_row6_col5" class="data row6 col5">0</td>
<td id="T_b855c_row6_col6" class="data row6 col6">0</td>
<td id="T_b855c_row6_col7" class="data row6 col7">0</td>
<td id="T_b855c_row6_col8" class="data row6 col8">0</td>
<td id="T_b855c_row6_col9" class="data row6 col9">0</td>
<td id="T_b855c_row6_col10" class="data row6 col10">0</td>
<td id="T_b855c_row6_col11" class="data row6 col11">0</td>
<td id="T_b855c_row6_col12" class="data row6 col12">0</td>
<td id="T_b855c_row6_col13" class="data row6 col13">0</td>
<td id="T_b855c_row6_col14" class="data row6 col14">0</td>
<td id="T_b855c_row6_col15" class="data row6 col15">0</td>
<td id="T_b855c_row6_col16" class="data row6 col16">0</td>
<td id="T_b855c_row6_col17" class="data row6 col17">0</td>
<td id="T_b855c_row6_col18" class="data row6 col18">0</td>
<td id="T_b855c_row6_col19" class="data row6 col19">0</td>
<td id="T_b855c_row6_col20" class="data row6 col20">0</td>
<td id="T_b855c_row6_col21" class="data row6 col21">0</td>
<td id="T_b855c_row6_col22" class="data row6 col22">0</td>
<td id="T_b855c_row6_col23" class="data row6 col23">0</td>
<td id="T_b855c_row6_col24" class="data row6 col24">1</td>
<td id="T_b855c_row6_col25" class="data row6 col25">0</td>
<td id="T_b855c_row6_col26" class="data row6 col26">0</td>
<td id="T_b855c_row6_col27" class="data row6 col27">0</td>
<td id="T_b855c_row6_col28" class="data row6 col28">0</td>
<td id="T_b855c_row6_col29" class="data row6 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row7" class="row_heading level0 row7" data-quarto-table-cell-role="th">7</th>
<td id="T_b855c_row7_col0" class="data row7 col0">0</td>
<td id="T_b855c_row7_col1" class="data row7 col1">0</td>
<td id="T_b855c_row7_col2" class="data row7 col2">0</td>
<td id="T_b855c_row7_col3" class="data row7 col3">0</td>
<td id="T_b855c_row7_col4" class="data row7 col4">0</td>
<td id="T_b855c_row7_col5" class="data row7 col5">0</td>
<td id="T_b855c_row7_col6" class="data row7 col6">0</td>
<td id="T_b855c_row7_col7" class="data row7 col7">0</td>
<td id="T_b855c_row7_col8" class="data row7 col8">0</td>
<td id="T_b855c_row7_col9" class="data row7 col9">0</td>
<td id="T_b855c_row7_col10" class="data row7 col10">0</td>
<td id="T_b855c_row7_col11" class="data row7 col11">0</td>
<td id="T_b855c_row7_col12" class="data row7 col12">0</td>
<td id="T_b855c_row7_col13" class="data row7 col13">0</td>
<td id="T_b855c_row7_col14" class="data row7 col14">0</td>
<td id="T_b855c_row7_col15" class="data row7 col15">0</td>
<td id="T_b855c_row7_col16" class="data row7 col16">0</td>
<td id="T_b855c_row7_col17" class="data row7 col17">0</td>
<td id="T_b855c_row7_col18" class="data row7 col18">0</td>
<td id="T_b855c_row7_col19" class="data row7 col19">0</td>
<td id="T_b855c_row7_col20" class="data row7 col20">0</td>
<td id="T_b855c_row7_col21" class="data row7 col21">0</td>
<td id="T_b855c_row7_col22" class="data row7 col22">0</td>
<td id="T_b855c_row7_col23" class="data row7 col23">1</td>
<td id="T_b855c_row7_col24" class="data row7 col24">0</td>
<td id="T_b855c_row7_col25" class="data row7 col25">0</td>
<td id="T_b855c_row7_col26" class="data row7 col26">0</td>
<td id="T_b855c_row7_col27" class="data row7 col27">0</td>
<td id="T_b855c_row7_col28" class="data row7 col28">0</td>
<td id="T_b855c_row7_col29" class="data row7 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row8" class="row_heading level0 row8" data-quarto-table-cell-role="th">8</th>
<td id="T_b855c_row8_col0" class="data row8 col0">0</td>
<td id="T_b855c_row8_col1" class="data row8 col1">0</td>
<td id="T_b855c_row8_col2" class="data row8 col2">0</td>
<td id="T_b855c_row8_col3" class="data row8 col3">0</td>
<td id="T_b855c_row8_col4" class="data row8 col4">0</td>
<td id="T_b855c_row8_col5" class="data row8 col5">0</td>
<td id="T_b855c_row8_col6" class="data row8 col6">0</td>
<td id="T_b855c_row8_col7" class="data row8 col7">0</td>
<td id="T_b855c_row8_col8" class="data row8 col8">0</td>
<td id="T_b855c_row8_col9" class="data row8 col9">0</td>
<td id="T_b855c_row8_col10" class="data row8 col10">0</td>
<td id="T_b855c_row8_col11" class="data row8 col11">0</td>
<td id="T_b855c_row8_col12" class="data row8 col12">0</td>
<td id="T_b855c_row8_col13" class="data row8 col13">0</td>
<td id="T_b855c_row8_col14" class="data row8 col14">0</td>
<td id="T_b855c_row8_col15" class="data row8 col15">0</td>
<td id="T_b855c_row8_col16" class="data row8 col16">0</td>
<td id="T_b855c_row8_col17" class="data row8 col17">0</td>
<td id="T_b855c_row8_col18" class="data row8 col18">0</td>
<td id="T_b855c_row8_col19" class="data row8 col19">0</td>
<td id="T_b855c_row8_col20" class="data row8 col20">0</td>
<td id="T_b855c_row8_col21" class="data row8 col21">0</td>
<td id="T_b855c_row8_col22" class="data row8 col22">1</td>
<td id="T_b855c_row8_col23" class="data row8 col23">0</td>
<td id="T_b855c_row8_col24" class="data row8 col24">0</td>
<td id="T_b855c_row8_col25" class="data row8 col25">0</td>
<td id="T_b855c_row8_col26" class="data row8 col26">0</td>
<td id="T_b855c_row8_col27" class="data row8 col27">0</td>
<td id="T_b855c_row8_col28" class="data row8 col28">0</td>
<td id="T_b855c_row8_col29" class="data row8 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row9" class="row_heading level0 row9" data-quarto-table-cell-role="th">9</th>
<td id="T_b855c_row9_col0" class="data row9 col0">0</td>
<td id="T_b855c_row9_col1" class="data row9 col1">0</td>
<td id="T_b855c_row9_col2" class="data row9 col2">0</td>
<td id="T_b855c_row9_col3" class="data row9 col3">0</td>
<td id="T_b855c_row9_col4" class="data row9 col4">0</td>
<td id="T_b855c_row9_col5" class="data row9 col5">0</td>
<td id="T_b855c_row9_col6" class="data row9 col6">0</td>
<td id="T_b855c_row9_col7" class="data row9 col7">0</td>
<td id="T_b855c_row9_col8" class="data row9 col8">0</td>
<td id="T_b855c_row9_col9" class="data row9 col9">0</td>
<td id="T_b855c_row9_col10" class="data row9 col10">0</td>
<td id="T_b855c_row9_col11" class="data row9 col11">0</td>
<td id="T_b855c_row9_col12" class="data row9 col12">0</td>
<td id="T_b855c_row9_col13" class="data row9 col13">0</td>
<td id="T_b855c_row9_col14" class="data row9 col14">0</td>
<td id="T_b855c_row9_col15" class="data row9 col15">0</td>
<td id="T_b855c_row9_col16" class="data row9 col16">0</td>
<td id="T_b855c_row9_col17" class="data row9 col17">0</td>
<td id="T_b855c_row9_col18" class="data row9 col18">0</td>
<td id="T_b855c_row9_col19" class="data row9 col19">0</td>
<td id="T_b855c_row9_col20" class="data row9 col20">0</td>
<td id="T_b855c_row9_col21" class="data row9 col21">1</td>
<td id="T_b855c_row9_col22" class="data row9 col22">0</td>
<td id="T_b855c_row9_col23" class="data row9 col23">0</td>
<td id="T_b855c_row9_col24" class="data row9 col24">0</td>
<td id="T_b855c_row9_col25" class="data row9 col25">0</td>
<td id="T_b855c_row9_col26" class="data row9 col26">0</td>
<td id="T_b855c_row9_col27" class="data row9 col27">0</td>
<td id="T_b855c_row9_col28" class="data row9 col28">0</td>
<td id="T_b855c_row9_col29" class="data row9 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row10" class="row_heading level0 row10" data-quarto-table-cell-role="th">10</th>
<td id="T_b855c_row10_col0" class="data row10 col0">0</td>
<td id="T_b855c_row10_col1" class="data row10 col1">0</td>
<td id="T_b855c_row10_col2" class="data row10 col2">0</td>
<td id="T_b855c_row10_col3" class="data row10 col3">0</td>
<td id="T_b855c_row10_col4" class="data row10 col4">0</td>
<td id="T_b855c_row10_col5" class="data row10 col5">0</td>
<td id="T_b855c_row10_col6" class="data row10 col6">0</td>
<td id="T_b855c_row10_col7" class="data row10 col7">0</td>
<td id="T_b855c_row10_col8" class="data row10 col8">0</td>
<td id="T_b855c_row10_col9" class="data row10 col9">0</td>
<td id="T_b855c_row10_col10" class="data row10 col10">0</td>
<td id="T_b855c_row10_col11" class="data row10 col11">0</td>
<td id="T_b855c_row10_col12" class="data row10 col12">0</td>
<td id="T_b855c_row10_col13" class="data row10 col13">0</td>
<td id="T_b855c_row10_col14" class="data row10 col14">0</td>
<td id="T_b855c_row10_col15" class="data row10 col15">0</td>
<td id="T_b855c_row10_col16" class="data row10 col16">0</td>
<td id="T_b855c_row10_col17" class="data row10 col17">0</td>
<td id="T_b855c_row10_col18" class="data row10 col18">0</td>
<td id="T_b855c_row10_col19" class="data row10 col19">0</td>
<td id="T_b855c_row10_col20" class="data row10 col20">1</td>
<td id="T_b855c_row10_col21" class="data row10 col21">0</td>
<td id="T_b855c_row10_col22" class="data row10 col22">0</td>
<td id="T_b855c_row10_col23" class="data row10 col23">0</td>
<td id="T_b855c_row10_col24" class="data row10 col24">0</td>
<td id="T_b855c_row10_col25" class="data row10 col25">0</td>
<td id="T_b855c_row10_col26" class="data row10 col26">0</td>
<td id="T_b855c_row10_col27" class="data row10 col27">0</td>
<td id="T_b855c_row10_col28" class="data row10 col28">0</td>
<td id="T_b855c_row10_col29" class="data row10 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row11" class="row_heading level0 row11" data-quarto-table-cell-role="th">11</th>
<td id="T_b855c_row11_col0" class="data row11 col0">0</td>
<td id="T_b855c_row11_col1" class="data row11 col1">0</td>
<td id="T_b855c_row11_col2" class="data row11 col2">0</td>
<td id="T_b855c_row11_col3" class="data row11 col3">0</td>
<td id="T_b855c_row11_col4" class="data row11 col4">0</td>
<td id="T_b855c_row11_col5" class="data row11 col5">0</td>
<td id="T_b855c_row11_col6" class="data row11 col6">0</td>
<td id="T_b855c_row11_col7" class="data row11 col7">0</td>
<td id="T_b855c_row11_col8" class="data row11 col8">0</td>
<td id="T_b855c_row11_col9" class="data row11 col9">0</td>
<td id="T_b855c_row11_col10" class="data row11 col10">0</td>
<td id="T_b855c_row11_col11" class="data row11 col11">0</td>
<td id="T_b855c_row11_col12" class="data row11 col12">0</td>
<td id="T_b855c_row11_col13" class="data row11 col13">0</td>
<td id="T_b855c_row11_col14" class="data row11 col14">0</td>
<td id="T_b855c_row11_col15" class="data row11 col15">0</td>
<td id="T_b855c_row11_col16" class="data row11 col16">0</td>
<td id="T_b855c_row11_col17" class="data row11 col17">0</td>
<td id="T_b855c_row11_col18" class="data row11 col18">0</td>
<td id="T_b855c_row11_col19" class="data row11 col19">1</td>
<td id="T_b855c_row11_col20" class="data row11 col20">0</td>
<td id="T_b855c_row11_col21" class="data row11 col21">0</td>
<td id="T_b855c_row11_col22" class="data row11 col22">0</td>
<td id="T_b855c_row11_col23" class="data row11 col23">0</td>
<td id="T_b855c_row11_col24" class="data row11 col24">0</td>
<td id="T_b855c_row11_col25" class="data row11 col25">0</td>
<td id="T_b855c_row11_col26" class="data row11 col26">0</td>
<td id="T_b855c_row11_col27" class="data row11 col27">0</td>
<td id="T_b855c_row11_col28" class="data row11 col28">0</td>
<td id="T_b855c_row11_col29" class="data row11 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row12" class="row_heading level0 row12" data-quarto-table-cell-role="th">12</th>
<td id="T_b855c_row12_col0" class="data row12 col0">0</td>
<td id="T_b855c_row12_col1" class="data row12 col1">0</td>
<td id="T_b855c_row12_col2" class="data row12 col2">0</td>
<td id="T_b855c_row12_col3" class="data row12 col3">0</td>
<td id="T_b855c_row12_col4" class="data row12 col4">0</td>
<td id="T_b855c_row12_col5" class="data row12 col5">0</td>
<td id="T_b855c_row12_col6" class="data row12 col6">0</td>
<td id="T_b855c_row12_col7" class="data row12 col7">0</td>
<td id="T_b855c_row12_col8" class="data row12 col8">0</td>
<td id="T_b855c_row12_col9" class="data row12 col9">0</td>
<td id="T_b855c_row12_col10" class="data row12 col10">0</td>
<td id="T_b855c_row12_col11" class="data row12 col11">0</td>
<td id="T_b855c_row12_col12" class="data row12 col12">0</td>
<td id="T_b855c_row12_col13" class="data row12 col13">0</td>
<td id="T_b855c_row12_col14" class="data row12 col14">0</td>
<td id="T_b855c_row12_col15" class="data row12 col15">0</td>
<td id="T_b855c_row12_col16" class="data row12 col16">0</td>
<td id="T_b855c_row12_col17" class="data row12 col17">0</td>
<td id="T_b855c_row12_col18" class="data row12 col18">1</td>
<td id="T_b855c_row12_col19" class="data row12 col19">0</td>
<td id="T_b855c_row12_col20" class="data row12 col20">0</td>
<td id="T_b855c_row12_col21" class="data row12 col21">0</td>
<td id="T_b855c_row12_col22" class="data row12 col22">0</td>
<td id="T_b855c_row12_col23" class="data row12 col23">0</td>
<td id="T_b855c_row12_col24" class="data row12 col24">0</td>
<td id="T_b855c_row12_col25" class="data row12 col25">0</td>
<td id="T_b855c_row12_col26" class="data row12 col26">0</td>
<td id="T_b855c_row12_col27" class="data row12 col27">0</td>
<td id="T_b855c_row12_col28" class="data row12 col28">0</td>
<td id="T_b855c_row12_col29" class="data row12 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row13" class="row_heading level0 row13" data-quarto-table-cell-role="th">13</th>
<td id="T_b855c_row13_col0" class="data row13 col0">0</td>
<td id="T_b855c_row13_col1" class="data row13 col1">0</td>
<td id="T_b855c_row13_col2" class="data row13 col2">0</td>
<td id="T_b855c_row13_col3" class="data row13 col3">0</td>
<td id="T_b855c_row13_col4" class="data row13 col4">0</td>
<td id="T_b855c_row13_col5" class="data row13 col5">0</td>
<td id="T_b855c_row13_col6" class="data row13 col6">0</td>
<td id="T_b855c_row13_col7" class="data row13 col7">0</td>
<td id="T_b855c_row13_col8" class="data row13 col8">0</td>
<td id="T_b855c_row13_col9" class="data row13 col9">0</td>
<td id="T_b855c_row13_col10" class="data row13 col10">0</td>
<td id="T_b855c_row13_col11" class="data row13 col11">0</td>
<td id="T_b855c_row13_col12" class="data row13 col12">0</td>
<td id="T_b855c_row13_col13" class="data row13 col13">0</td>
<td id="T_b855c_row13_col14" class="data row13 col14">0</td>
<td id="T_b855c_row13_col15" class="data row13 col15">0</td>
<td id="T_b855c_row13_col16" class="data row13 col16">0</td>
<td id="T_b855c_row13_col17" class="data row13 col17">1</td>
<td id="T_b855c_row13_col18" class="data row13 col18">0</td>
<td id="T_b855c_row13_col19" class="data row13 col19">0</td>
<td id="T_b855c_row13_col20" class="data row13 col20">0</td>
<td id="T_b855c_row13_col21" class="data row13 col21">0</td>
<td id="T_b855c_row13_col22" class="data row13 col22">0</td>
<td id="T_b855c_row13_col23" class="data row13 col23">0</td>
<td id="T_b855c_row13_col24" class="data row13 col24">0</td>
<td id="T_b855c_row13_col25" class="data row13 col25">0</td>
<td id="T_b855c_row13_col26" class="data row13 col26">0</td>
<td id="T_b855c_row13_col27" class="data row13 col27">0</td>
<td id="T_b855c_row13_col28" class="data row13 col28">0</td>
<td id="T_b855c_row13_col29" class="data row13 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row14" class="row_heading level0 row14" data-quarto-table-cell-role="th">14</th>
<td id="T_b855c_row14_col0" class="data row14 col0">0</td>
<td id="T_b855c_row14_col1" class="data row14 col1">0</td>
<td id="T_b855c_row14_col2" class="data row14 col2">0</td>
<td id="T_b855c_row14_col3" class="data row14 col3">0</td>
<td id="T_b855c_row14_col4" class="data row14 col4">0</td>
<td id="T_b855c_row14_col5" class="data row14 col5">0</td>
<td id="T_b855c_row14_col6" class="data row14 col6">0</td>
<td id="T_b855c_row14_col7" class="data row14 col7">0</td>
<td id="T_b855c_row14_col8" class="data row14 col8">0</td>
<td id="T_b855c_row14_col9" class="data row14 col9">0</td>
<td id="T_b855c_row14_col10" class="data row14 col10">0</td>
<td id="T_b855c_row14_col11" class="data row14 col11">0</td>
<td id="T_b855c_row14_col12" class="data row14 col12">0</td>
<td id="T_b855c_row14_col13" class="data row14 col13">0</td>
<td id="T_b855c_row14_col14" class="data row14 col14">0</td>
<td id="T_b855c_row14_col15" class="data row14 col15">0</td>
<td id="T_b855c_row14_col16" class="data row14 col16">1</td>
<td id="T_b855c_row14_col17" class="data row14 col17">0</td>
<td id="T_b855c_row14_col18" class="data row14 col18">0</td>
<td id="T_b855c_row14_col19" class="data row14 col19">0</td>
<td id="T_b855c_row14_col20" class="data row14 col20">0</td>
<td id="T_b855c_row14_col21" class="data row14 col21">0</td>
<td id="T_b855c_row14_col22" class="data row14 col22">0</td>
<td id="T_b855c_row14_col23" class="data row14 col23">0</td>
<td id="T_b855c_row14_col24" class="data row14 col24">0</td>
<td id="T_b855c_row14_col25" class="data row14 col25">0</td>
<td id="T_b855c_row14_col26" class="data row14 col26">0</td>
<td id="T_b855c_row14_col27" class="data row14 col27">0</td>
<td id="T_b855c_row14_col28" class="data row14 col28">0</td>
<td id="T_b855c_row14_col29" class="data row14 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row15" class="row_heading level0 row15" data-quarto-table-cell-role="th">15</th>
<td id="T_b855c_row15_col0" class="data row15 col0">0</td>
<td id="T_b855c_row15_col1" class="data row15 col1">0</td>
<td id="T_b855c_row15_col2" class="data row15 col2">0</td>
<td id="T_b855c_row15_col3" class="data row15 col3">0</td>
<td id="T_b855c_row15_col4" class="data row15 col4">0</td>
<td id="T_b855c_row15_col5" class="data row15 col5">0</td>
<td id="T_b855c_row15_col6" class="data row15 col6">0</td>
<td id="T_b855c_row15_col7" class="data row15 col7">0</td>
<td id="T_b855c_row15_col8" class="data row15 col8">0</td>
<td id="T_b855c_row15_col9" class="data row15 col9">0</td>
<td id="T_b855c_row15_col10" class="data row15 col10">0</td>
<td id="T_b855c_row15_col11" class="data row15 col11">0</td>
<td id="T_b855c_row15_col12" class="data row15 col12">0</td>
<td id="T_b855c_row15_col13" class="data row15 col13">0</td>
<td id="T_b855c_row15_col14" class="data row15 col14">0</td>
<td id="T_b855c_row15_col15" class="data row15 col15">1</td>
<td id="T_b855c_row15_col16" class="data row15 col16">0</td>
<td id="T_b855c_row15_col17" class="data row15 col17">0</td>
<td id="T_b855c_row15_col18" class="data row15 col18">0</td>
<td id="T_b855c_row15_col19" class="data row15 col19">0</td>
<td id="T_b855c_row15_col20" class="data row15 col20">0</td>
<td id="T_b855c_row15_col21" class="data row15 col21">0</td>
<td id="T_b855c_row15_col22" class="data row15 col22">0</td>
<td id="T_b855c_row15_col23" class="data row15 col23">0</td>
<td id="T_b855c_row15_col24" class="data row15 col24">0</td>
<td id="T_b855c_row15_col25" class="data row15 col25">0</td>
<td id="T_b855c_row15_col26" class="data row15 col26">0</td>
<td id="T_b855c_row15_col27" class="data row15 col27">0</td>
<td id="T_b855c_row15_col28" class="data row15 col28">0</td>
<td id="T_b855c_row15_col29" class="data row15 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row16" class="row_heading level0 row16" data-quarto-table-cell-role="th">16</th>
<td id="T_b855c_row16_col0" class="data row16 col0">0</td>
<td id="T_b855c_row16_col1" class="data row16 col1">0</td>
<td id="T_b855c_row16_col2" class="data row16 col2">0</td>
<td id="T_b855c_row16_col3" class="data row16 col3">0</td>
<td id="T_b855c_row16_col4" class="data row16 col4">0</td>
<td id="T_b855c_row16_col5" class="data row16 col5">0</td>
<td id="T_b855c_row16_col6" class="data row16 col6">0</td>
<td id="T_b855c_row16_col7" class="data row16 col7">0</td>
<td id="T_b855c_row16_col8" class="data row16 col8">0</td>
<td id="T_b855c_row16_col9" class="data row16 col9">0</td>
<td id="T_b855c_row16_col10" class="data row16 col10">0</td>
<td id="T_b855c_row16_col11" class="data row16 col11">0</td>
<td id="T_b855c_row16_col12" class="data row16 col12">0</td>
<td id="T_b855c_row16_col13" class="data row16 col13">0</td>
<td id="T_b855c_row16_col14" class="data row16 col14">1</td>
<td id="T_b855c_row16_col15" class="data row16 col15">0</td>
<td id="T_b855c_row16_col16" class="data row16 col16">0</td>
<td id="T_b855c_row16_col17" class="data row16 col17">0</td>
<td id="T_b855c_row16_col18" class="data row16 col18">0</td>
<td id="T_b855c_row16_col19" class="data row16 col19">0</td>
<td id="T_b855c_row16_col20" class="data row16 col20">0</td>
<td id="T_b855c_row16_col21" class="data row16 col21">0</td>
<td id="T_b855c_row16_col22" class="data row16 col22">0</td>
<td id="T_b855c_row16_col23" class="data row16 col23">0</td>
<td id="T_b855c_row16_col24" class="data row16 col24">0</td>
<td id="T_b855c_row16_col25" class="data row16 col25">0</td>
<td id="T_b855c_row16_col26" class="data row16 col26">0</td>
<td id="T_b855c_row16_col27" class="data row16 col27">0</td>
<td id="T_b855c_row16_col28" class="data row16 col28">0</td>
<td id="T_b855c_row16_col29" class="data row16 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row17" class="row_heading level0 row17" data-quarto-table-cell-role="th">17</th>
<td id="T_b855c_row17_col0" class="data row17 col0">0</td>
<td id="T_b855c_row17_col1" class="data row17 col1">0</td>
<td id="T_b855c_row17_col2" class="data row17 col2">0</td>
<td id="T_b855c_row17_col3" class="data row17 col3">0</td>
<td id="T_b855c_row17_col4" class="data row17 col4">0</td>
<td id="T_b855c_row17_col5" class="data row17 col5">0</td>
<td id="T_b855c_row17_col6" class="data row17 col6">0</td>
<td id="T_b855c_row17_col7" class="data row17 col7">0</td>
<td id="T_b855c_row17_col8" class="data row17 col8">0</td>
<td id="T_b855c_row17_col9" class="data row17 col9">0</td>
<td id="T_b855c_row17_col10" class="data row17 col10">0</td>
<td id="T_b855c_row17_col11" class="data row17 col11">0</td>
<td id="T_b855c_row17_col12" class="data row17 col12">0</td>
<td id="T_b855c_row17_col13" class="data row17 col13">1</td>
<td id="T_b855c_row17_col14" class="data row17 col14">0</td>
<td id="T_b855c_row17_col15" class="data row17 col15">0</td>
<td id="T_b855c_row17_col16" class="data row17 col16">0</td>
<td id="T_b855c_row17_col17" class="data row17 col17">0</td>
<td id="T_b855c_row17_col18" class="data row17 col18">0</td>
<td id="T_b855c_row17_col19" class="data row17 col19">0</td>
<td id="T_b855c_row17_col20" class="data row17 col20">0</td>
<td id="T_b855c_row17_col21" class="data row17 col21">0</td>
<td id="T_b855c_row17_col22" class="data row17 col22">0</td>
<td id="T_b855c_row17_col23" class="data row17 col23">0</td>
<td id="T_b855c_row17_col24" class="data row17 col24">0</td>
<td id="T_b855c_row17_col25" class="data row17 col25">0</td>
<td id="T_b855c_row17_col26" class="data row17 col26">0</td>
<td id="T_b855c_row17_col27" class="data row17 col27">0</td>
<td id="T_b855c_row17_col28" class="data row17 col28">0</td>
<td id="T_b855c_row17_col29" class="data row17 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row18" class="row_heading level0 row18" data-quarto-table-cell-role="th">18</th>
<td id="T_b855c_row18_col0" class="data row18 col0">0</td>
<td id="T_b855c_row18_col1" class="data row18 col1">0</td>
<td id="T_b855c_row18_col2" class="data row18 col2">0</td>
<td id="T_b855c_row18_col3" class="data row18 col3">0</td>
<td id="T_b855c_row18_col4" class="data row18 col4">0</td>
<td id="T_b855c_row18_col5" class="data row18 col5">0</td>
<td id="T_b855c_row18_col6" class="data row18 col6">0</td>
<td id="T_b855c_row18_col7" class="data row18 col7">0</td>
<td id="T_b855c_row18_col8" class="data row18 col8">0</td>
<td id="T_b855c_row18_col9" class="data row18 col9">0</td>
<td id="T_b855c_row18_col10" class="data row18 col10">0</td>
<td id="T_b855c_row18_col11" class="data row18 col11">0</td>
<td id="T_b855c_row18_col12" class="data row18 col12">1</td>
<td id="T_b855c_row18_col13" class="data row18 col13">0</td>
<td id="T_b855c_row18_col14" class="data row18 col14">0</td>
<td id="T_b855c_row18_col15" class="data row18 col15">0</td>
<td id="T_b855c_row18_col16" class="data row18 col16">0</td>
<td id="T_b855c_row18_col17" class="data row18 col17">0</td>
<td id="T_b855c_row18_col18" class="data row18 col18">0</td>
<td id="T_b855c_row18_col19" class="data row18 col19">0</td>
<td id="T_b855c_row18_col20" class="data row18 col20">0</td>
<td id="T_b855c_row18_col21" class="data row18 col21">0</td>
<td id="T_b855c_row18_col22" class="data row18 col22">0</td>
<td id="T_b855c_row18_col23" class="data row18 col23">0</td>
<td id="T_b855c_row18_col24" class="data row18 col24">0</td>
<td id="T_b855c_row18_col25" class="data row18 col25">0</td>
<td id="T_b855c_row18_col26" class="data row18 col26">0</td>
<td id="T_b855c_row18_col27" class="data row18 col27">0</td>
<td id="T_b855c_row18_col28" class="data row18 col28">0</td>
<td id="T_b855c_row18_col29" class="data row18 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row19" class="row_heading level0 row19" data-quarto-table-cell-role="th">19</th>
<td id="T_b855c_row19_col0" class="data row19 col0">0</td>
<td id="T_b855c_row19_col1" class="data row19 col1">0</td>
<td id="T_b855c_row19_col2" class="data row19 col2">0</td>
<td id="T_b855c_row19_col3" class="data row19 col3">0</td>
<td id="T_b855c_row19_col4" class="data row19 col4">0</td>
<td id="T_b855c_row19_col5" class="data row19 col5">0</td>
<td id="T_b855c_row19_col6" class="data row19 col6">0</td>
<td id="T_b855c_row19_col7" class="data row19 col7">0</td>
<td id="T_b855c_row19_col8" class="data row19 col8">0</td>
<td id="T_b855c_row19_col9" class="data row19 col9">0</td>
<td id="T_b855c_row19_col10" class="data row19 col10">0</td>
<td id="T_b855c_row19_col11" class="data row19 col11">1</td>
<td id="T_b855c_row19_col12" class="data row19 col12">0</td>
<td id="T_b855c_row19_col13" class="data row19 col13">0</td>
<td id="T_b855c_row19_col14" class="data row19 col14">0</td>
<td id="T_b855c_row19_col15" class="data row19 col15">0</td>
<td id="T_b855c_row19_col16" class="data row19 col16">0</td>
<td id="T_b855c_row19_col17" class="data row19 col17">0</td>
<td id="T_b855c_row19_col18" class="data row19 col18">0</td>
<td id="T_b855c_row19_col19" class="data row19 col19">0</td>
<td id="T_b855c_row19_col20" class="data row19 col20">0</td>
<td id="T_b855c_row19_col21" class="data row19 col21">0</td>
<td id="T_b855c_row19_col22" class="data row19 col22">0</td>
<td id="T_b855c_row19_col23" class="data row19 col23">0</td>
<td id="T_b855c_row19_col24" class="data row19 col24">0</td>
<td id="T_b855c_row19_col25" class="data row19 col25">0</td>
<td id="T_b855c_row19_col26" class="data row19 col26">0</td>
<td id="T_b855c_row19_col27" class="data row19 col27">0</td>
<td id="T_b855c_row19_col28" class="data row19 col28">0</td>
<td id="T_b855c_row19_col29" class="data row19 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row20" class="row_heading level0 row20" data-quarto-table-cell-role="th">20</th>
<td id="T_b855c_row20_col0" class="data row20 col0">0</td>
<td id="T_b855c_row20_col1" class="data row20 col1">0</td>
<td id="T_b855c_row20_col2" class="data row20 col2">0</td>
<td id="T_b855c_row20_col3" class="data row20 col3">0</td>
<td id="T_b855c_row20_col4" class="data row20 col4">0</td>
<td id="T_b855c_row20_col5" class="data row20 col5">0</td>
<td id="T_b855c_row20_col6" class="data row20 col6">0</td>
<td id="T_b855c_row20_col7" class="data row20 col7">0</td>
<td id="T_b855c_row20_col8" class="data row20 col8">0</td>
<td id="T_b855c_row20_col9" class="data row20 col9">0</td>
<td id="T_b855c_row20_col10" class="data row20 col10">1</td>
<td id="T_b855c_row20_col11" class="data row20 col11">0</td>
<td id="T_b855c_row20_col12" class="data row20 col12">0</td>
<td id="T_b855c_row20_col13" class="data row20 col13">0</td>
<td id="T_b855c_row20_col14" class="data row20 col14">0</td>
<td id="T_b855c_row20_col15" class="data row20 col15">0</td>
<td id="T_b855c_row20_col16" class="data row20 col16">0</td>
<td id="T_b855c_row20_col17" class="data row20 col17">0</td>
<td id="T_b855c_row20_col18" class="data row20 col18">0</td>
<td id="T_b855c_row20_col19" class="data row20 col19">0</td>
<td id="T_b855c_row20_col20" class="data row20 col20">0</td>
<td id="T_b855c_row20_col21" class="data row20 col21">0</td>
<td id="T_b855c_row20_col22" class="data row20 col22">0</td>
<td id="T_b855c_row20_col23" class="data row20 col23">0</td>
<td id="T_b855c_row20_col24" class="data row20 col24">0</td>
<td id="T_b855c_row20_col25" class="data row20 col25">0</td>
<td id="T_b855c_row20_col26" class="data row20 col26">0</td>
<td id="T_b855c_row20_col27" class="data row20 col27">0</td>
<td id="T_b855c_row20_col28" class="data row20 col28">0</td>
<td id="T_b855c_row20_col29" class="data row20 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row21" class="row_heading level0 row21" data-quarto-table-cell-role="th">21</th>
<td id="T_b855c_row21_col0" class="data row21 col0">0</td>
<td id="T_b855c_row21_col1" class="data row21 col1">0</td>
<td id="T_b855c_row21_col2" class="data row21 col2">0</td>
<td id="T_b855c_row21_col3" class="data row21 col3">0</td>
<td id="T_b855c_row21_col4" class="data row21 col4">0</td>
<td id="T_b855c_row21_col5" class="data row21 col5">0</td>
<td id="T_b855c_row21_col6" class="data row21 col6">0</td>
<td id="T_b855c_row21_col7" class="data row21 col7">0</td>
<td id="T_b855c_row21_col8" class="data row21 col8">0</td>
<td id="T_b855c_row21_col9" class="data row21 col9">1</td>
<td id="T_b855c_row21_col10" class="data row21 col10">0</td>
<td id="T_b855c_row21_col11" class="data row21 col11">0</td>
<td id="T_b855c_row21_col12" class="data row21 col12">0</td>
<td id="T_b855c_row21_col13" class="data row21 col13">0</td>
<td id="T_b855c_row21_col14" class="data row21 col14">0</td>
<td id="T_b855c_row21_col15" class="data row21 col15">0</td>
<td id="T_b855c_row21_col16" class="data row21 col16">0</td>
<td id="T_b855c_row21_col17" class="data row21 col17">0</td>
<td id="T_b855c_row21_col18" class="data row21 col18">0</td>
<td id="T_b855c_row21_col19" class="data row21 col19">0</td>
<td id="T_b855c_row21_col20" class="data row21 col20">0</td>
<td id="T_b855c_row21_col21" class="data row21 col21">0</td>
<td id="T_b855c_row21_col22" class="data row21 col22">0</td>
<td id="T_b855c_row21_col23" class="data row21 col23">0</td>
<td id="T_b855c_row21_col24" class="data row21 col24">0</td>
<td id="T_b855c_row21_col25" class="data row21 col25">0</td>
<td id="T_b855c_row21_col26" class="data row21 col26">0</td>
<td id="T_b855c_row21_col27" class="data row21 col27">0</td>
<td id="T_b855c_row21_col28" class="data row21 col28">0</td>
<td id="T_b855c_row21_col29" class="data row21 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row22" class="row_heading level0 row22" data-quarto-table-cell-role="th">22</th>
<td id="T_b855c_row22_col0" class="data row22 col0">0</td>
<td id="T_b855c_row22_col1" class="data row22 col1">0</td>
<td id="T_b855c_row22_col2" class="data row22 col2">0</td>
<td id="T_b855c_row22_col3" class="data row22 col3">0</td>
<td id="T_b855c_row22_col4" class="data row22 col4">0</td>
<td id="T_b855c_row22_col5" class="data row22 col5">0</td>
<td id="T_b855c_row22_col6" class="data row22 col6">0</td>
<td id="T_b855c_row22_col7" class="data row22 col7">0</td>
<td id="T_b855c_row22_col8" class="data row22 col8">1</td>
<td id="T_b855c_row22_col9" class="data row22 col9">0</td>
<td id="T_b855c_row22_col10" class="data row22 col10">0</td>
<td id="T_b855c_row22_col11" class="data row22 col11">0</td>
<td id="T_b855c_row22_col12" class="data row22 col12">0</td>
<td id="T_b855c_row22_col13" class="data row22 col13">0</td>
<td id="T_b855c_row22_col14" class="data row22 col14">0</td>
<td id="T_b855c_row22_col15" class="data row22 col15">0</td>
<td id="T_b855c_row22_col16" class="data row22 col16">0</td>
<td id="T_b855c_row22_col17" class="data row22 col17">0</td>
<td id="T_b855c_row22_col18" class="data row22 col18">0</td>
<td id="T_b855c_row22_col19" class="data row22 col19">0</td>
<td id="T_b855c_row22_col20" class="data row22 col20">0</td>
<td id="T_b855c_row22_col21" class="data row22 col21">0</td>
<td id="T_b855c_row22_col22" class="data row22 col22">0</td>
<td id="T_b855c_row22_col23" class="data row22 col23">0</td>
<td id="T_b855c_row22_col24" class="data row22 col24">0</td>
<td id="T_b855c_row22_col25" class="data row22 col25">0</td>
<td id="T_b855c_row22_col26" class="data row22 col26">0</td>
<td id="T_b855c_row22_col27" class="data row22 col27">0</td>
<td id="T_b855c_row22_col28" class="data row22 col28">0</td>
<td id="T_b855c_row22_col29" class="data row22 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row23" class="row_heading level0 row23" data-quarto-table-cell-role="th">23</th>
<td id="T_b855c_row23_col0" class="data row23 col0">0</td>
<td id="T_b855c_row23_col1" class="data row23 col1">0</td>
<td id="T_b855c_row23_col2" class="data row23 col2">0</td>
<td id="T_b855c_row23_col3" class="data row23 col3">0</td>
<td id="T_b855c_row23_col4" class="data row23 col4">0</td>
<td id="T_b855c_row23_col5" class="data row23 col5">0</td>
<td id="T_b855c_row23_col6" class="data row23 col6">0</td>
<td id="T_b855c_row23_col7" class="data row23 col7">1</td>
<td id="T_b855c_row23_col8" class="data row23 col8">0</td>
<td id="T_b855c_row23_col9" class="data row23 col9">0</td>
<td id="T_b855c_row23_col10" class="data row23 col10">0</td>
<td id="T_b855c_row23_col11" class="data row23 col11">0</td>
<td id="T_b855c_row23_col12" class="data row23 col12">0</td>
<td id="T_b855c_row23_col13" class="data row23 col13">0</td>
<td id="T_b855c_row23_col14" class="data row23 col14">0</td>
<td id="T_b855c_row23_col15" class="data row23 col15">0</td>
<td id="T_b855c_row23_col16" class="data row23 col16">0</td>
<td id="T_b855c_row23_col17" class="data row23 col17">0</td>
<td id="T_b855c_row23_col18" class="data row23 col18">0</td>
<td id="T_b855c_row23_col19" class="data row23 col19">0</td>
<td id="T_b855c_row23_col20" class="data row23 col20">0</td>
<td id="T_b855c_row23_col21" class="data row23 col21">0</td>
<td id="T_b855c_row23_col22" class="data row23 col22">0</td>
<td id="T_b855c_row23_col23" class="data row23 col23">0</td>
<td id="T_b855c_row23_col24" class="data row23 col24">0</td>
<td id="T_b855c_row23_col25" class="data row23 col25">0</td>
<td id="T_b855c_row23_col26" class="data row23 col26">0</td>
<td id="T_b855c_row23_col27" class="data row23 col27">0</td>
<td id="T_b855c_row23_col28" class="data row23 col28">0</td>
<td id="T_b855c_row23_col29" class="data row23 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row24" class="row_heading level0 row24" data-quarto-table-cell-role="th">24</th>
<td id="T_b855c_row24_col0" class="data row24 col0">0</td>
<td id="T_b855c_row24_col1" class="data row24 col1">0</td>
<td id="T_b855c_row24_col2" class="data row24 col2">0</td>
<td id="T_b855c_row24_col3" class="data row24 col3">0</td>
<td id="T_b855c_row24_col4" class="data row24 col4">0</td>
<td id="T_b855c_row24_col5" class="data row24 col5">0</td>
<td id="T_b855c_row24_col6" class="data row24 col6">1</td>
<td id="T_b855c_row24_col7" class="data row24 col7">0</td>
<td id="T_b855c_row24_col8" class="data row24 col8">0</td>
<td id="T_b855c_row24_col9" class="data row24 col9">0</td>
<td id="T_b855c_row24_col10" class="data row24 col10">0</td>
<td id="T_b855c_row24_col11" class="data row24 col11">0</td>
<td id="T_b855c_row24_col12" class="data row24 col12">0</td>
<td id="T_b855c_row24_col13" class="data row24 col13">0</td>
<td id="T_b855c_row24_col14" class="data row24 col14">0</td>
<td id="T_b855c_row24_col15" class="data row24 col15">0</td>
<td id="T_b855c_row24_col16" class="data row24 col16">0</td>
<td id="T_b855c_row24_col17" class="data row24 col17">0</td>
<td id="T_b855c_row24_col18" class="data row24 col18">0</td>
<td id="T_b855c_row24_col19" class="data row24 col19">0</td>
<td id="T_b855c_row24_col20" class="data row24 col20">0</td>
<td id="T_b855c_row24_col21" class="data row24 col21">0</td>
<td id="T_b855c_row24_col22" class="data row24 col22">0</td>
<td id="T_b855c_row24_col23" class="data row24 col23">0</td>
<td id="T_b855c_row24_col24" class="data row24 col24">0</td>
<td id="T_b855c_row24_col25" class="data row24 col25">0</td>
<td id="T_b855c_row24_col26" class="data row24 col26">0</td>
<td id="T_b855c_row24_col27" class="data row24 col27">0</td>
<td id="T_b855c_row24_col28" class="data row24 col28">0</td>
<td id="T_b855c_row24_col29" class="data row24 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row25" class="row_heading level0 row25" data-quarto-table-cell-role="th">25</th>
<td id="T_b855c_row25_col0" class="data row25 col0">0</td>
<td id="T_b855c_row25_col1" class="data row25 col1">0</td>
<td id="T_b855c_row25_col2" class="data row25 col2">0</td>
<td id="T_b855c_row25_col3" class="data row25 col3">0</td>
<td id="T_b855c_row25_col4" class="data row25 col4">0</td>
<td id="T_b855c_row25_col5" class="data row25 col5">1</td>
<td id="T_b855c_row25_col6" class="data row25 col6">0</td>
<td id="T_b855c_row25_col7" class="data row25 col7">0</td>
<td id="T_b855c_row25_col8" class="data row25 col8">0</td>
<td id="T_b855c_row25_col9" class="data row25 col9">0</td>
<td id="T_b855c_row25_col10" class="data row25 col10">0</td>
<td id="T_b855c_row25_col11" class="data row25 col11">0</td>
<td id="T_b855c_row25_col12" class="data row25 col12">0</td>
<td id="T_b855c_row25_col13" class="data row25 col13">0</td>
<td id="T_b855c_row25_col14" class="data row25 col14">0</td>
<td id="T_b855c_row25_col15" class="data row25 col15">0</td>
<td id="T_b855c_row25_col16" class="data row25 col16">0</td>
<td id="T_b855c_row25_col17" class="data row25 col17">0</td>
<td id="T_b855c_row25_col18" class="data row25 col18">0</td>
<td id="T_b855c_row25_col19" class="data row25 col19">0</td>
<td id="T_b855c_row25_col20" class="data row25 col20">0</td>
<td id="T_b855c_row25_col21" class="data row25 col21">0</td>
<td id="T_b855c_row25_col22" class="data row25 col22">0</td>
<td id="T_b855c_row25_col23" class="data row25 col23">0</td>
<td id="T_b855c_row25_col24" class="data row25 col24">0</td>
<td id="T_b855c_row25_col25" class="data row25 col25">0</td>
<td id="T_b855c_row25_col26" class="data row25 col26">0</td>
<td id="T_b855c_row25_col27" class="data row25 col27">0</td>
<td id="T_b855c_row25_col28" class="data row25 col28">0</td>
<td id="T_b855c_row25_col29" class="data row25 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row26" class="row_heading level0 row26" data-quarto-table-cell-role="th">26</th>
<td id="T_b855c_row26_col0" class="data row26 col0">0</td>
<td id="T_b855c_row26_col1" class="data row26 col1">0</td>
<td id="T_b855c_row26_col2" class="data row26 col2">0</td>
<td id="T_b855c_row26_col3" class="data row26 col3">0</td>
<td id="T_b855c_row26_col4" class="data row26 col4">1</td>
<td id="T_b855c_row26_col5" class="data row26 col5">0</td>
<td id="T_b855c_row26_col6" class="data row26 col6">0</td>
<td id="T_b855c_row26_col7" class="data row26 col7">0</td>
<td id="T_b855c_row26_col8" class="data row26 col8">0</td>
<td id="T_b855c_row26_col9" class="data row26 col9">0</td>
<td id="T_b855c_row26_col10" class="data row26 col10">0</td>
<td id="T_b855c_row26_col11" class="data row26 col11">0</td>
<td id="T_b855c_row26_col12" class="data row26 col12">0</td>
<td id="T_b855c_row26_col13" class="data row26 col13">0</td>
<td id="T_b855c_row26_col14" class="data row26 col14">0</td>
<td id="T_b855c_row26_col15" class="data row26 col15">0</td>
<td id="T_b855c_row26_col16" class="data row26 col16">0</td>
<td id="T_b855c_row26_col17" class="data row26 col17">0</td>
<td id="T_b855c_row26_col18" class="data row26 col18">0</td>
<td id="T_b855c_row26_col19" class="data row26 col19">0</td>
<td id="T_b855c_row26_col20" class="data row26 col20">0</td>
<td id="T_b855c_row26_col21" class="data row26 col21">0</td>
<td id="T_b855c_row26_col22" class="data row26 col22">0</td>
<td id="T_b855c_row26_col23" class="data row26 col23">0</td>
<td id="T_b855c_row26_col24" class="data row26 col24">0</td>
<td id="T_b855c_row26_col25" class="data row26 col25">0</td>
<td id="T_b855c_row26_col26" class="data row26 col26">0</td>
<td id="T_b855c_row26_col27" class="data row26 col27">0</td>
<td id="T_b855c_row26_col28" class="data row26 col28">0</td>
<td id="T_b855c_row26_col29" class="data row26 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row27" class="row_heading level0 row27" data-quarto-table-cell-role="th">27</th>
<td id="T_b855c_row27_col0" class="data row27 col0">0</td>
<td id="T_b855c_row27_col1" class="data row27 col1">0</td>
<td id="T_b855c_row27_col2" class="data row27 col2">0</td>
<td id="T_b855c_row27_col3" class="data row27 col3">1</td>
<td id="T_b855c_row27_col4" class="data row27 col4">0</td>
<td id="T_b855c_row27_col5" class="data row27 col5">0</td>
<td id="T_b855c_row27_col6" class="data row27 col6">0</td>
<td id="T_b855c_row27_col7" class="data row27 col7">0</td>
<td id="T_b855c_row27_col8" class="data row27 col8">0</td>
<td id="T_b855c_row27_col9" class="data row27 col9">0</td>
<td id="T_b855c_row27_col10" class="data row27 col10">0</td>
<td id="T_b855c_row27_col11" class="data row27 col11">0</td>
<td id="T_b855c_row27_col12" class="data row27 col12">0</td>
<td id="T_b855c_row27_col13" class="data row27 col13">0</td>
<td id="T_b855c_row27_col14" class="data row27 col14">0</td>
<td id="T_b855c_row27_col15" class="data row27 col15">0</td>
<td id="T_b855c_row27_col16" class="data row27 col16">0</td>
<td id="T_b855c_row27_col17" class="data row27 col17">0</td>
<td id="T_b855c_row27_col18" class="data row27 col18">0</td>
<td id="T_b855c_row27_col19" class="data row27 col19">0</td>
<td id="T_b855c_row27_col20" class="data row27 col20">0</td>
<td id="T_b855c_row27_col21" class="data row27 col21">0</td>
<td id="T_b855c_row27_col22" class="data row27 col22">0</td>
<td id="T_b855c_row27_col23" class="data row27 col23">0</td>
<td id="T_b855c_row27_col24" class="data row27 col24">0</td>
<td id="T_b855c_row27_col25" class="data row27 col25">0</td>
<td id="T_b855c_row27_col26" class="data row27 col26">0</td>
<td id="T_b855c_row27_col27" class="data row27 col27">0</td>
<td id="T_b855c_row27_col28" class="data row27 col28">0</td>
<td id="T_b855c_row27_col29" class="data row27 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row28" class="row_heading level0 row28" data-quarto-table-cell-role="th">28</th>
<td id="T_b855c_row28_col0" class="data row28 col0">0</td>
<td id="T_b855c_row28_col1" class="data row28 col1">0</td>
<td id="T_b855c_row28_col2" class="data row28 col2">1</td>
<td id="T_b855c_row28_col3" class="data row28 col3">0</td>
<td id="T_b855c_row28_col4" class="data row28 col4">0</td>
<td id="T_b855c_row28_col5" class="data row28 col5">0</td>
<td id="T_b855c_row28_col6" class="data row28 col6">0</td>
<td id="T_b855c_row28_col7" class="data row28 col7">0</td>
<td id="T_b855c_row28_col8" class="data row28 col8">0</td>
<td id="T_b855c_row28_col9" class="data row28 col9">0</td>
<td id="T_b855c_row28_col10" class="data row28 col10">0</td>
<td id="T_b855c_row28_col11" class="data row28 col11">0</td>
<td id="T_b855c_row28_col12" class="data row28 col12">0</td>
<td id="T_b855c_row28_col13" class="data row28 col13">0</td>
<td id="T_b855c_row28_col14" class="data row28 col14">0</td>
<td id="T_b855c_row28_col15" class="data row28 col15">0</td>
<td id="T_b855c_row28_col16" class="data row28 col16">0</td>
<td id="T_b855c_row28_col17" class="data row28 col17">0</td>
<td id="T_b855c_row28_col18" class="data row28 col18">0</td>
<td id="T_b855c_row28_col19" class="data row28 col19">0</td>
<td id="T_b855c_row28_col20" class="data row28 col20">0</td>
<td id="T_b855c_row28_col21" class="data row28 col21">0</td>
<td id="T_b855c_row28_col22" class="data row28 col22">0</td>
<td id="T_b855c_row28_col23" class="data row28 col23">0</td>
<td id="T_b855c_row28_col24" class="data row28 col24">0</td>
<td id="T_b855c_row28_col25" class="data row28 col25">0</td>
<td id="T_b855c_row28_col26" class="data row28 col26">0</td>
<td id="T_b855c_row28_col27" class="data row28 col27">0</td>
<td id="T_b855c_row28_col28" class="data row28 col28">0</td>
<td id="T_b855c_row28_col29" class="data row28 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row29" class="row_heading level0 row29" data-quarto-table-cell-role="th">29</th>
<td id="T_b855c_row29_col0" class="data row29 col0">0</td>
<td id="T_b855c_row29_col1" class="data row29 col1">1</td>
<td id="T_b855c_row29_col2" class="data row29 col2">0</td>
<td id="T_b855c_row29_col3" class="data row29 col3">0</td>
<td id="T_b855c_row29_col4" class="data row29 col4">0</td>
<td id="T_b855c_row29_col5" class="data row29 col5">0</td>
<td id="T_b855c_row29_col6" class="data row29 col6">0</td>
<td id="T_b855c_row29_col7" class="data row29 col7">0</td>
<td id="T_b855c_row29_col8" class="data row29 col8">0</td>
<td id="T_b855c_row29_col9" class="data row29 col9">0</td>
<td id="T_b855c_row29_col10" class="data row29 col10">0</td>
<td id="T_b855c_row29_col11" class="data row29 col11">0</td>
<td id="T_b855c_row29_col12" class="data row29 col12">0</td>
<td id="T_b855c_row29_col13" class="data row29 col13">0</td>
<td id="T_b855c_row29_col14" class="data row29 col14">0</td>
<td id="T_b855c_row29_col15" class="data row29 col15">0</td>
<td id="T_b855c_row29_col16" class="data row29 col16">0</td>
<td id="T_b855c_row29_col17" class="data row29 col17">0</td>
<td id="T_b855c_row29_col18" class="data row29 col18">0</td>
<td id="T_b855c_row29_col19" class="data row29 col19">0</td>
<td id="T_b855c_row29_col20" class="data row29 col20">0</td>
<td id="T_b855c_row29_col21" class="data row29 col21">0</td>
<td id="T_b855c_row29_col22" class="data row29 col22">0</td>
<td id="T_b855c_row29_col23" class="data row29 col23">0</td>
<td id="T_b855c_row29_col24" class="data row29 col24">0</td>
<td id="T_b855c_row29_col25" class="data row29 col25">0</td>
<td id="T_b855c_row29_col26" class="data row29 col26">0</td>
<td id="T_b855c_row29_col27" class="data row29 col27">0</td>
<td id="T_b855c_row29_col28" class="data row29 col28">0</td>
<td id="T_b855c_row29_col29" class="data row29 col29">0</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row30" class="row_heading level0 row30" data-quarto-table-cell-role="th">30</th>
<td id="T_b855c_row30_col0" class="data row30 col0">1</td>
<td id="T_b855c_row30_col1" class="data row30 col1">0</td>
<td id="T_b855c_row30_col2" class="data row30 col2">0</td>
<td id="T_b855c_row30_col3" class="data row30 col3">0</td>
<td id="T_b855c_row30_col4" class="data row30 col4">0</td>
<td id="T_b855c_row30_col5" class="data row30 col5">0</td>
<td id="T_b855c_row30_col6" class="data row30 col6">0</td>
<td id="T_b855c_row30_col7" class="data row30 col7">0</td>
<td id="T_b855c_row30_col8" class="data row30 col8">0</td>
<td id="T_b855c_row30_col9" class="data row30 col9">0</td>
<td id="T_b855c_row30_col10" class="data row30 col10">0</td>
<td id="T_b855c_row30_col11" class="data row30 col11">0</td>
<td id="T_b855c_row30_col12" class="data row30 col12">0</td>
<td id="T_b855c_row30_col13" class="data row30 col13">0</td>
<td id="T_b855c_row30_col14" class="data row30 col14">0</td>
<td id="T_b855c_row30_col15" class="data row30 col15">0</td>
<td id="T_b855c_row30_col16" class="data row30 col16">0</td>
<td id="T_b855c_row30_col17" class="data row30 col17">0</td>
<td id="T_b855c_row30_col18" class="data row30 col18">0</td>
<td id="T_b855c_row30_col19" class="data row30 col19">0</td>
<td id="T_b855c_row30_col20" class="data row30 col20">0</td>
<td id="T_b855c_row30_col21" class="data row30 col21">0</td>
<td id="T_b855c_row30_col22" class="data row30 col22">0</td>
<td id="T_b855c_row30_col23" class="data row30 col23">0</td>
<td id="T_b855c_row30_col24" class="data row30 col24">0</td>
<td id="T_b855c_row30_col25" class="data row30 col25">0</td>
<td id="T_b855c_row30_col26" class="data row30 col26">0</td>
<td id="T_b855c_row30_col27" class="data row30 col27">0</td>
<td id="T_b855c_row30_col28" class="data row30 col28">0</td>
<td id="T_b855c_row30_col29" class="data row30 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row31" class="row_heading level0 row31" data-quarto-table-cell-role="th">31</th>
<td id="T_b855c_row31_col0" class="data row31 col0">0</td>
<td id="T_b855c_row31_col1" class="data row31 col1">1</td>
<td id="T_b855c_row31_col2" class="data row31 col2">1</td>
<td id="T_b855c_row31_col3" class="data row31 col3">1</td>
<td id="T_b855c_row31_col4" class="data row31 col4">1</td>
<td id="T_b855c_row31_col5" class="data row31 col5">1</td>
<td id="T_b855c_row31_col6" class="data row31 col6">1</td>
<td id="T_b855c_row31_col7" class="data row31 col7">1</td>
<td id="T_b855c_row31_col8" class="data row31 col8">1</td>
<td id="T_b855c_row31_col9" class="data row31 col9">1</td>
<td id="T_b855c_row31_col10" class="data row31 col10">1</td>
<td id="T_b855c_row31_col11" class="data row31 col11">1</td>
<td id="T_b855c_row31_col12" class="data row31 col12">1</td>
<td id="T_b855c_row31_col13" class="data row31 col13">1</td>
<td id="T_b855c_row31_col14" class="data row31 col14">1</td>
<td id="T_b855c_row31_col15" class="data row31 col15">1</td>
<td id="T_b855c_row31_col16" class="data row31 col16">1</td>
<td id="T_b855c_row31_col17" class="data row31 col17">1</td>
<td id="T_b855c_row31_col18" class="data row31 col18">1</td>
<td id="T_b855c_row31_col19" class="data row31 col19">1</td>
<td id="T_b855c_row31_col20" class="data row31 col20">1</td>
<td id="T_b855c_row31_col21" class="data row31 col21">1</td>
<td id="T_b855c_row31_col22" class="data row31 col22">1</td>
<td id="T_b855c_row31_col23" class="data row31 col23">1</td>
<td id="T_b855c_row31_col24" class="data row31 col24">1</td>
<td id="T_b855c_row31_col25" class="data row31 col25">1</td>
<td id="T_b855c_row31_col26" class="data row31 col26">1</td>
<td id="T_b855c_row31_col27" class="data row31 col27">1</td>
<td id="T_b855c_row31_col28" class="data row31 col28">1</td>
<td id="T_b855c_row31_col29" class="data row31 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row32" class="row_heading level0 row32" data-quarto-table-cell-role="th">32</th>
<td id="T_b855c_row32_col0" class="data row32 col0">1</td>
<td id="T_b855c_row32_col1" class="data row32 col1">0</td>
<td id="T_b855c_row32_col2" class="data row32 col2">1</td>
<td id="T_b855c_row32_col3" class="data row32 col3">1</td>
<td id="T_b855c_row32_col4" class="data row32 col4">1</td>
<td id="T_b855c_row32_col5" class="data row32 col5">1</td>
<td id="T_b855c_row32_col6" class="data row32 col6">1</td>
<td id="T_b855c_row32_col7" class="data row32 col7">1</td>
<td id="T_b855c_row32_col8" class="data row32 col8">1</td>
<td id="T_b855c_row32_col9" class="data row32 col9">1</td>
<td id="T_b855c_row32_col10" class="data row32 col10">1</td>
<td id="T_b855c_row32_col11" class="data row32 col11">1</td>
<td id="T_b855c_row32_col12" class="data row32 col12">1</td>
<td id="T_b855c_row32_col13" class="data row32 col13">1</td>
<td id="T_b855c_row32_col14" class="data row32 col14">1</td>
<td id="T_b855c_row32_col15" class="data row32 col15">1</td>
<td id="T_b855c_row32_col16" class="data row32 col16">1</td>
<td id="T_b855c_row32_col17" class="data row32 col17">1</td>
<td id="T_b855c_row32_col18" class="data row32 col18">1</td>
<td id="T_b855c_row32_col19" class="data row32 col19">1</td>
<td id="T_b855c_row32_col20" class="data row32 col20">1</td>
<td id="T_b855c_row32_col21" class="data row32 col21">1</td>
<td id="T_b855c_row32_col22" class="data row32 col22">1</td>
<td id="T_b855c_row32_col23" class="data row32 col23">1</td>
<td id="T_b855c_row32_col24" class="data row32 col24">1</td>
<td id="T_b855c_row32_col25" class="data row32 col25">1</td>
<td id="T_b855c_row32_col26" class="data row32 col26">1</td>
<td id="T_b855c_row32_col27" class="data row32 col27">1</td>
<td id="T_b855c_row32_col28" class="data row32 col28">1</td>
<td id="T_b855c_row32_col29" class="data row32 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row33" class="row_heading level0 row33" data-quarto-table-cell-role="th">33</th>
<td id="T_b855c_row33_col0" class="data row33 col0">1</td>
<td id="T_b855c_row33_col1" class="data row33 col1">1</td>
<td id="T_b855c_row33_col2" class="data row33 col2">0</td>
<td id="T_b855c_row33_col3" class="data row33 col3">1</td>
<td id="T_b855c_row33_col4" class="data row33 col4">1</td>
<td id="T_b855c_row33_col5" class="data row33 col5">1</td>
<td id="T_b855c_row33_col6" class="data row33 col6">1</td>
<td id="T_b855c_row33_col7" class="data row33 col7">1</td>
<td id="T_b855c_row33_col8" class="data row33 col8">1</td>
<td id="T_b855c_row33_col9" class="data row33 col9">1</td>
<td id="T_b855c_row33_col10" class="data row33 col10">1</td>
<td id="T_b855c_row33_col11" class="data row33 col11">1</td>
<td id="T_b855c_row33_col12" class="data row33 col12">1</td>
<td id="T_b855c_row33_col13" class="data row33 col13">1</td>
<td id="T_b855c_row33_col14" class="data row33 col14">1</td>
<td id="T_b855c_row33_col15" class="data row33 col15">1</td>
<td id="T_b855c_row33_col16" class="data row33 col16">1</td>
<td id="T_b855c_row33_col17" class="data row33 col17">1</td>
<td id="T_b855c_row33_col18" class="data row33 col18">1</td>
<td id="T_b855c_row33_col19" class="data row33 col19">1</td>
<td id="T_b855c_row33_col20" class="data row33 col20">1</td>
<td id="T_b855c_row33_col21" class="data row33 col21">1</td>
<td id="T_b855c_row33_col22" class="data row33 col22">1</td>
<td id="T_b855c_row33_col23" class="data row33 col23">1</td>
<td id="T_b855c_row33_col24" class="data row33 col24">1</td>
<td id="T_b855c_row33_col25" class="data row33 col25">1</td>
<td id="T_b855c_row33_col26" class="data row33 col26">1</td>
<td id="T_b855c_row33_col27" class="data row33 col27">1</td>
<td id="T_b855c_row33_col28" class="data row33 col28">1</td>
<td id="T_b855c_row33_col29" class="data row33 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row34" class="row_heading level0 row34" data-quarto-table-cell-role="th">34</th>
<td id="T_b855c_row34_col0" class="data row34 col0">1</td>
<td id="T_b855c_row34_col1" class="data row34 col1">1</td>
<td id="T_b855c_row34_col2" class="data row34 col2">1</td>
<td id="T_b855c_row34_col3" class="data row34 col3">0</td>
<td id="T_b855c_row34_col4" class="data row34 col4">1</td>
<td id="T_b855c_row34_col5" class="data row34 col5">1</td>
<td id="T_b855c_row34_col6" class="data row34 col6">1</td>
<td id="T_b855c_row34_col7" class="data row34 col7">1</td>
<td id="T_b855c_row34_col8" class="data row34 col8">1</td>
<td id="T_b855c_row34_col9" class="data row34 col9">1</td>
<td id="T_b855c_row34_col10" class="data row34 col10">1</td>
<td id="T_b855c_row34_col11" class="data row34 col11">1</td>
<td id="T_b855c_row34_col12" class="data row34 col12">1</td>
<td id="T_b855c_row34_col13" class="data row34 col13">1</td>
<td id="T_b855c_row34_col14" class="data row34 col14">1</td>
<td id="T_b855c_row34_col15" class="data row34 col15">1</td>
<td id="T_b855c_row34_col16" class="data row34 col16">1</td>
<td id="T_b855c_row34_col17" class="data row34 col17">1</td>
<td id="T_b855c_row34_col18" class="data row34 col18">1</td>
<td id="T_b855c_row34_col19" class="data row34 col19">1</td>
<td id="T_b855c_row34_col20" class="data row34 col20">1</td>
<td id="T_b855c_row34_col21" class="data row34 col21">1</td>
<td id="T_b855c_row34_col22" class="data row34 col22">1</td>
<td id="T_b855c_row34_col23" class="data row34 col23">1</td>
<td id="T_b855c_row34_col24" class="data row34 col24">1</td>
<td id="T_b855c_row34_col25" class="data row34 col25">1</td>
<td id="T_b855c_row34_col26" class="data row34 col26">1</td>
<td id="T_b855c_row34_col27" class="data row34 col27">1</td>
<td id="T_b855c_row34_col28" class="data row34 col28">1</td>
<td id="T_b855c_row34_col29" class="data row34 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row35" class="row_heading level0 row35" data-quarto-table-cell-role="th">35</th>
<td id="T_b855c_row35_col0" class="data row35 col0">1</td>
<td id="T_b855c_row35_col1" class="data row35 col1">1</td>
<td id="T_b855c_row35_col2" class="data row35 col2">1</td>
<td id="T_b855c_row35_col3" class="data row35 col3">1</td>
<td id="T_b855c_row35_col4" class="data row35 col4">0</td>
<td id="T_b855c_row35_col5" class="data row35 col5">1</td>
<td id="T_b855c_row35_col6" class="data row35 col6">1</td>
<td id="T_b855c_row35_col7" class="data row35 col7">1</td>
<td id="T_b855c_row35_col8" class="data row35 col8">1</td>
<td id="T_b855c_row35_col9" class="data row35 col9">1</td>
<td id="T_b855c_row35_col10" class="data row35 col10">1</td>
<td id="T_b855c_row35_col11" class="data row35 col11">1</td>
<td id="T_b855c_row35_col12" class="data row35 col12">1</td>
<td id="T_b855c_row35_col13" class="data row35 col13">1</td>
<td id="T_b855c_row35_col14" class="data row35 col14">1</td>
<td id="T_b855c_row35_col15" class="data row35 col15">1</td>
<td id="T_b855c_row35_col16" class="data row35 col16">1</td>
<td id="T_b855c_row35_col17" class="data row35 col17">1</td>
<td id="T_b855c_row35_col18" class="data row35 col18">1</td>
<td id="T_b855c_row35_col19" class="data row35 col19">1</td>
<td id="T_b855c_row35_col20" class="data row35 col20">1</td>
<td id="T_b855c_row35_col21" class="data row35 col21">1</td>
<td id="T_b855c_row35_col22" class="data row35 col22">1</td>
<td id="T_b855c_row35_col23" class="data row35 col23">1</td>
<td id="T_b855c_row35_col24" class="data row35 col24">1</td>
<td id="T_b855c_row35_col25" class="data row35 col25">1</td>
<td id="T_b855c_row35_col26" class="data row35 col26">1</td>
<td id="T_b855c_row35_col27" class="data row35 col27">1</td>
<td id="T_b855c_row35_col28" class="data row35 col28">1</td>
<td id="T_b855c_row35_col29" class="data row35 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row36" class="row_heading level0 row36" data-quarto-table-cell-role="th">36</th>
<td id="T_b855c_row36_col0" class="data row36 col0">1</td>
<td id="T_b855c_row36_col1" class="data row36 col1">1</td>
<td id="T_b855c_row36_col2" class="data row36 col2">1</td>
<td id="T_b855c_row36_col3" class="data row36 col3">1</td>
<td id="T_b855c_row36_col4" class="data row36 col4">1</td>
<td id="T_b855c_row36_col5" class="data row36 col5">0</td>
<td id="T_b855c_row36_col6" class="data row36 col6">1</td>
<td id="T_b855c_row36_col7" class="data row36 col7">1</td>
<td id="T_b855c_row36_col8" class="data row36 col8">1</td>
<td id="T_b855c_row36_col9" class="data row36 col9">1</td>
<td id="T_b855c_row36_col10" class="data row36 col10">1</td>
<td id="T_b855c_row36_col11" class="data row36 col11">1</td>
<td id="T_b855c_row36_col12" class="data row36 col12">1</td>
<td id="T_b855c_row36_col13" class="data row36 col13">1</td>
<td id="T_b855c_row36_col14" class="data row36 col14">1</td>
<td id="T_b855c_row36_col15" class="data row36 col15">1</td>
<td id="T_b855c_row36_col16" class="data row36 col16">1</td>
<td id="T_b855c_row36_col17" class="data row36 col17">1</td>
<td id="T_b855c_row36_col18" class="data row36 col18">1</td>
<td id="T_b855c_row36_col19" class="data row36 col19">1</td>
<td id="T_b855c_row36_col20" class="data row36 col20">1</td>
<td id="T_b855c_row36_col21" class="data row36 col21">1</td>
<td id="T_b855c_row36_col22" class="data row36 col22">1</td>
<td id="T_b855c_row36_col23" class="data row36 col23">1</td>
<td id="T_b855c_row36_col24" class="data row36 col24">1</td>
<td id="T_b855c_row36_col25" class="data row36 col25">1</td>
<td id="T_b855c_row36_col26" class="data row36 col26">1</td>
<td id="T_b855c_row36_col27" class="data row36 col27">1</td>
<td id="T_b855c_row36_col28" class="data row36 col28">1</td>
<td id="T_b855c_row36_col29" class="data row36 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row37" class="row_heading level0 row37" data-quarto-table-cell-role="th">37</th>
<td id="T_b855c_row37_col0" class="data row37 col0">1</td>
<td id="T_b855c_row37_col1" class="data row37 col1">1</td>
<td id="T_b855c_row37_col2" class="data row37 col2">1</td>
<td id="T_b855c_row37_col3" class="data row37 col3">1</td>
<td id="T_b855c_row37_col4" class="data row37 col4">1</td>
<td id="T_b855c_row37_col5" class="data row37 col5">1</td>
<td id="T_b855c_row37_col6" class="data row37 col6">0</td>
<td id="T_b855c_row37_col7" class="data row37 col7">1</td>
<td id="T_b855c_row37_col8" class="data row37 col8">1</td>
<td id="T_b855c_row37_col9" class="data row37 col9">1</td>
<td id="T_b855c_row37_col10" class="data row37 col10">1</td>
<td id="T_b855c_row37_col11" class="data row37 col11">1</td>
<td id="T_b855c_row37_col12" class="data row37 col12">1</td>
<td id="T_b855c_row37_col13" class="data row37 col13">1</td>
<td id="T_b855c_row37_col14" class="data row37 col14">1</td>
<td id="T_b855c_row37_col15" class="data row37 col15">1</td>
<td id="T_b855c_row37_col16" class="data row37 col16">1</td>
<td id="T_b855c_row37_col17" class="data row37 col17">1</td>
<td id="T_b855c_row37_col18" class="data row37 col18">1</td>
<td id="T_b855c_row37_col19" class="data row37 col19">1</td>
<td id="T_b855c_row37_col20" class="data row37 col20">1</td>
<td id="T_b855c_row37_col21" class="data row37 col21">1</td>
<td id="T_b855c_row37_col22" class="data row37 col22">1</td>
<td id="T_b855c_row37_col23" class="data row37 col23">1</td>
<td id="T_b855c_row37_col24" class="data row37 col24">1</td>
<td id="T_b855c_row37_col25" class="data row37 col25">1</td>
<td id="T_b855c_row37_col26" class="data row37 col26">1</td>
<td id="T_b855c_row37_col27" class="data row37 col27">1</td>
<td id="T_b855c_row37_col28" class="data row37 col28">1</td>
<td id="T_b855c_row37_col29" class="data row37 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row38" class="row_heading level0 row38" data-quarto-table-cell-role="th">38</th>
<td id="T_b855c_row38_col0" class="data row38 col0">1</td>
<td id="T_b855c_row38_col1" class="data row38 col1">1</td>
<td id="T_b855c_row38_col2" class="data row38 col2">1</td>
<td id="T_b855c_row38_col3" class="data row38 col3">1</td>
<td id="T_b855c_row38_col4" class="data row38 col4">1</td>
<td id="T_b855c_row38_col5" class="data row38 col5">1</td>
<td id="T_b855c_row38_col6" class="data row38 col6">1</td>
<td id="T_b855c_row38_col7" class="data row38 col7">0</td>
<td id="T_b855c_row38_col8" class="data row38 col8">1</td>
<td id="T_b855c_row38_col9" class="data row38 col9">1</td>
<td id="T_b855c_row38_col10" class="data row38 col10">1</td>
<td id="T_b855c_row38_col11" class="data row38 col11">1</td>
<td id="T_b855c_row38_col12" class="data row38 col12">1</td>
<td id="T_b855c_row38_col13" class="data row38 col13">1</td>
<td id="T_b855c_row38_col14" class="data row38 col14">1</td>
<td id="T_b855c_row38_col15" class="data row38 col15">1</td>
<td id="T_b855c_row38_col16" class="data row38 col16">1</td>
<td id="T_b855c_row38_col17" class="data row38 col17">1</td>
<td id="T_b855c_row38_col18" class="data row38 col18">1</td>
<td id="T_b855c_row38_col19" class="data row38 col19">1</td>
<td id="T_b855c_row38_col20" class="data row38 col20">1</td>
<td id="T_b855c_row38_col21" class="data row38 col21">1</td>
<td id="T_b855c_row38_col22" class="data row38 col22">1</td>
<td id="T_b855c_row38_col23" class="data row38 col23">1</td>
<td id="T_b855c_row38_col24" class="data row38 col24">1</td>
<td id="T_b855c_row38_col25" class="data row38 col25">1</td>
<td id="T_b855c_row38_col26" class="data row38 col26">1</td>
<td id="T_b855c_row38_col27" class="data row38 col27">1</td>
<td id="T_b855c_row38_col28" class="data row38 col28">1</td>
<td id="T_b855c_row38_col29" class="data row38 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row39" class="row_heading level0 row39" data-quarto-table-cell-role="th">39</th>
<td id="T_b855c_row39_col0" class="data row39 col0">1</td>
<td id="T_b855c_row39_col1" class="data row39 col1">1</td>
<td id="T_b855c_row39_col2" class="data row39 col2">1</td>
<td id="T_b855c_row39_col3" class="data row39 col3">1</td>
<td id="T_b855c_row39_col4" class="data row39 col4">1</td>
<td id="T_b855c_row39_col5" class="data row39 col5">1</td>
<td id="T_b855c_row39_col6" class="data row39 col6">1</td>
<td id="T_b855c_row39_col7" class="data row39 col7">1</td>
<td id="T_b855c_row39_col8" class="data row39 col8">0</td>
<td id="T_b855c_row39_col9" class="data row39 col9">1</td>
<td id="T_b855c_row39_col10" class="data row39 col10">1</td>
<td id="T_b855c_row39_col11" class="data row39 col11">1</td>
<td id="T_b855c_row39_col12" class="data row39 col12">1</td>
<td id="T_b855c_row39_col13" class="data row39 col13">1</td>
<td id="T_b855c_row39_col14" class="data row39 col14">1</td>
<td id="T_b855c_row39_col15" class="data row39 col15">1</td>
<td id="T_b855c_row39_col16" class="data row39 col16">1</td>
<td id="T_b855c_row39_col17" class="data row39 col17">1</td>
<td id="T_b855c_row39_col18" class="data row39 col18">1</td>
<td id="T_b855c_row39_col19" class="data row39 col19">1</td>
<td id="T_b855c_row39_col20" class="data row39 col20">1</td>
<td id="T_b855c_row39_col21" class="data row39 col21">1</td>
<td id="T_b855c_row39_col22" class="data row39 col22">1</td>
<td id="T_b855c_row39_col23" class="data row39 col23">1</td>
<td id="T_b855c_row39_col24" class="data row39 col24">1</td>
<td id="T_b855c_row39_col25" class="data row39 col25">1</td>
<td id="T_b855c_row39_col26" class="data row39 col26">1</td>
<td id="T_b855c_row39_col27" class="data row39 col27">1</td>
<td id="T_b855c_row39_col28" class="data row39 col28">1</td>
<td id="T_b855c_row39_col29" class="data row39 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row40" class="row_heading level0 row40" data-quarto-table-cell-role="th">40</th>
<td id="T_b855c_row40_col0" class="data row40 col0">1</td>
<td id="T_b855c_row40_col1" class="data row40 col1">1</td>
<td id="T_b855c_row40_col2" class="data row40 col2">1</td>
<td id="T_b855c_row40_col3" class="data row40 col3">1</td>
<td id="T_b855c_row40_col4" class="data row40 col4">1</td>
<td id="T_b855c_row40_col5" class="data row40 col5">1</td>
<td id="T_b855c_row40_col6" class="data row40 col6">1</td>
<td id="T_b855c_row40_col7" class="data row40 col7">1</td>
<td id="T_b855c_row40_col8" class="data row40 col8">1</td>
<td id="T_b855c_row40_col9" class="data row40 col9">0</td>
<td id="T_b855c_row40_col10" class="data row40 col10">1</td>
<td id="T_b855c_row40_col11" class="data row40 col11">1</td>
<td id="T_b855c_row40_col12" class="data row40 col12">1</td>
<td id="T_b855c_row40_col13" class="data row40 col13">1</td>
<td id="T_b855c_row40_col14" class="data row40 col14">1</td>
<td id="T_b855c_row40_col15" class="data row40 col15">1</td>
<td id="T_b855c_row40_col16" class="data row40 col16">1</td>
<td id="T_b855c_row40_col17" class="data row40 col17">1</td>
<td id="T_b855c_row40_col18" class="data row40 col18">1</td>
<td id="T_b855c_row40_col19" class="data row40 col19">1</td>
<td id="T_b855c_row40_col20" class="data row40 col20">1</td>
<td id="T_b855c_row40_col21" class="data row40 col21">1</td>
<td id="T_b855c_row40_col22" class="data row40 col22">1</td>
<td id="T_b855c_row40_col23" class="data row40 col23">1</td>
<td id="T_b855c_row40_col24" class="data row40 col24">1</td>
<td id="T_b855c_row40_col25" class="data row40 col25">1</td>
<td id="T_b855c_row40_col26" class="data row40 col26">1</td>
<td id="T_b855c_row40_col27" class="data row40 col27">1</td>
<td id="T_b855c_row40_col28" class="data row40 col28">1</td>
<td id="T_b855c_row40_col29" class="data row40 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row41" class="row_heading level0 row41" data-quarto-table-cell-role="th">41</th>
<td id="T_b855c_row41_col0" class="data row41 col0">1</td>
<td id="T_b855c_row41_col1" class="data row41 col1">1</td>
<td id="T_b855c_row41_col2" class="data row41 col2">1</td>
<td id="T_b855c_row41_col3" class="data row41 col3">1</td>
<td id="T_b855c_row41_col4" class="data row41 col4">1</td>
<td id="T_b855c_row41_col5" class="data row41 col5">1</td>
<td id="T_b855c_row41_col6" class="data row41 col6">1</td>
<td id="T_b855c_row41_col7" class="data row41 col7">1</td>
<td id="T_b855c_row41_col8" class="data row41 col8">1</td>
<td id="T_b855c_row41_col9" class="data row41 col9">1</td>
<td id="T_b855c_row41_col10" class="data row41 col10">0</td>
<td id="T_b855c_row41_col11" class="data row41 col11">1</td>
<td id="T_b855c_row41_col12" class="data row41 col12">1</td>
<td id="T_b855c_row41_col13" class="data row41 col13">1</td>
<td id="T_b855c_row41_col14" class="data row41 col14">1</td>
<td id="T_b855c_row41_col15" class="data row41 col15">1</td>
<td id="T_b855c_row41_col16" class="data row41 col16">1</td>
<td id="T_b855c_row41_col17" class="data row41 col17">1</td>
<td id="T_b855c_row41_col18" class="data row41 col18">1</td>
<td id="T_b855c_row41_col19" class="data row41 col19">1</td>
<td id="T_b855c_row41_col20" class="data row41 col20">1</td>
<td id="T_b855c_row41_col21" class="data row41 col21">1</td>
<td id="T_b855c_row41_col22" class="data row41 col22">1</td>
<td id="T_b855c_row41_col23" class="data row41 col23">1</td>
<td id="T_b855c_row41_col24" class="data row41 col24">1</td>
<td id="T_b855c_row41_col25" class="data row41 col25">1</td>
<td id="T_b855c_row41_col26" class="data row41 col26">1</td>
<td id="T_b855c_row41_col27" class="data row41 col27">1</td>
<td id="T_b855c_row41_col28" class="data row41 col28">1</td>
<td id="T_b855c_row41_col29" class="data row41 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row42" class="row_heading level0 row42" data-quarto-table-cell-role="th">42</th>
<td id="T_b855c_row42_col0" class="data row42 col0">1</td>
<td id="T_b855c_row42_col1" class="data row42 col1">1</td>
<td id="T_b855c_row42_col2" class="data row42 col2">1</td>
<td id="T_b855c_row42_col3" class="data row42 col3">1</td>
<td id="T_b855c_row42_col4" class="data row42 col4">1</td>
<td id="T_b855c_row42_col5" class="data row42 col5">1</td>
<td id="T_b855c_row42_col6" class="data row42 col6">1</td>
<td id="T_b855c_row42_col7" class="data row42 col7">1</td>
<td id="T_b855c_row42_col8" class="data row42 col8">1</td>
<td id="T_b855c_row42_col9" class="data row42 col9">1</td>
<td id="T_b855c_row42_col10" class="data row42 col10">1</td>
<td id="T_b855c_row42_col11" class="data row42 col11">0</td>
<td id="T_b855c_row42_col12" class="data row42 col12">1</td>
<td id="T_b855c_row42_col13" class="data row42 col13">1</td>
<td id="T_b855c_row42_col14" class="data row42 col14">1</td>
<td id="T_b855c_row42_col15" class="data row42 col15">1</td>
<td id="T_b855c_row42_col16" class="data row42 col16">1</td>
<td id="T_b855c_row42_col17" class="data row42 col17">1</td>
<td id="T_b855c_row42_col18" class="data row42 col18">1</td>
<td id="T_b855c_row42_col19" class="data row42 col19">1</td>
<td id="T_b855c_row42_col20" class="data row42 col20">1</td>
<td id="T_b855c_row42_col21" class="data row42 col21">1</td>
<td id="T_b855c_row42_col22" class="data row42 col22">1</td>
<td id="T_b855c_row42_col23" class="data row42 col23">1</td>
<td id="T_b855c_row42_col24" class="data row42 col24">1</td>
<td id="T_b855c_row42_col25" class="data row42 col25">1</td>
<td id="T_b855c_row42_col26" class="data row42 col26">1</td>
<td id="T_b855c_row42_col27" class="data row42 col27">1</td>
<td id="T_b855c_row42_col28" class="data row42 col28">1</td>
<td id="T_b855c_row42_col29" class="data row42 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row43" class="row_heading level0 row43" data-quarto-table-cell-role="th">43</th>
<td id="T_b855c_row43_col0" class="data row43 col0">1</td>
<td id="T_b855c_row43_col1" class="data row43 col1">1</td>
<td id="T_b855c_row43_col2" class="data row43 col2">1</td>
<td id="T_b855c_row43_col3" class="data row43 col3">1</td>
<td id="T_b855c_row43_col4" class="data row43 col4">1</td>
<td id="T_b855c_row43_col5" class="data row43 col5">1</td>
<td id="T_b855c_row43_col6" class="data row43 col6">1</td>
<td id="T_b855c_row43_col7" class="data row43 col7">1</td>
<td id="T_b855c_row43_col8" class="data row43 col8">1</td>
<td id="T_b855c_row43_col9" class="data row43 col9">1</td>
<td id="T_b855c_row43_col10" class="data row43 col10">1</td>
<td id="T_b855c_row43_col11" class="data row43 col11">1</td>
<td id="T_b855c_row43_col12" class="data row43 col12">0</td>
<td id="T_b855c_row43_col13" class="data row43 col13">1</td>
<td id="T_b855c_row43_col14" class="data row43 col14">1</td>
<td id="T_b855c_row43_col15" class="data row43 col15">1</td>
<td id="T_b855c_row43_col16" class="data row43 col16">1</td>
<td id="T_b855c_row43_col17" class="data row43 col17">1</td>
<td id="T_b855c_row43_col18" class="data row43 col18">1</td>
<td id="T_b855c_row43_col19" class="data row43 col19">1</td>
<td id="T_b855c_row43_col20" class="data row43 col20">1</td>
<td id="T_b855c_row43_col21" class="data row43 col21">1</td>
<td id="T_b855c_row43_col22" class="data row43 col22">1</td>
<td id="T_b855c_row43_col23" class="data row43 col23">1</td>
<td id="T_b855c_row43_col24" class="data row43 col24">1</td>
<td id="T_b855c_row43_col25" class="data row43 col25">1</td>
<td id="T_b855c_row43_col26" class="data row43 col26">1</td>
<td id="T_b855c_row43_col27" class="data row43 col27">1</td>
<td id="T_b855c_row43_col28" class="data row43 col28">1</td>
<td id="T_b855c_row43_col29" class="data row43 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row44" class="row_heading level0 row44" data-quarto-table-cell-role="th">44</th>
<td id="T_b855c_row44_col0" class="data row44 col0">1</td>
<td id="T_b855c_row44_col1" class="data row44 col1">1</td>
<td id="T_b855c_row44_col2" class="data row44 col2">1</td>
<td id="T_b855c_row44_col3" class="data row44 col3">1</td>
<td id="T_b855c_row44_col4" class="data row44 col4">1</td>
<td id="T_b855c_row44_col5" class="data row44 col5">1</td>
<td id="T_b855c_row44_col6" class="data row44 col6">1</td>
<td id="T_b855c_row44_col7" class="data row44 col7">1</td>
<td id="T_b855c_row44_col8" class="data row44 col8">1</td>
<td id="T_b855c_row44_col9" class="data row44 col9">1</td>
<td id="T_b855c_row44_col10" class="data row44 col10">1</td>
<td id="T_b855c_row44_col11" class="data row44 col11">1</td>
<td id="T_b855c_row44_col12" class="data row44 col12">1</td>
<td id="T_b855c_row44_col13" class="data row44 col13">0</td>
<td id="T_b855c_row44_col14" class="data row44 col14">1</td>
<td id="T_b855c_row44_col15" class="data row44 col15">1</td>
<td id="T_b855c_row44_col16" class="data row44 col16">1</td>
<td id="T_b855c_row44_col17" class="data row44 col17">1</td>
<td id="T_b855c_row44_col18" class="data row44 col18">1</td>
<td id="T_b855c_row44_col19" class="data row44 col19">1</td>
<td id="T_b855c_row44_col20" class="data row44 col20">1</td>
<td id="T_b855c_row44_col21" class="data row44 col21">1</td>
<td id="T_b855c_row44_col22" class="data row44 col22">1</td>
<td id="T_b855c_row44_col23" class="data row44 col23">1</td>
<td id="T_b855c_row44_col24" class="data row44 col24">1</td>
<td id="T_b855c_row44_col25" class="data row44 col25">1</td>
<td id="T_b855c_row44_col26" class="data row44 col26">1</td>
<td id="T_b855c_row44_col27" class="data row44 col27">1</td>
<td id="T_b855c_row44_col28" class="data row44 col28">1</td>
<td id="T_b855c_row44_col29" class="data row44 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row45" class="row_heading level0 row45" data-quarto-table-cell-role="th">45</th>
<td id="T_b855c_row45_col0" class="data row45 col0">1</td>
<td id="T_b855c_row45_col1" class="data row45 col1">1</td>
<td id="T_b855c_row45_col2" class="data row45 col2">1</td>
<td id="T_b855c_row45_col3" class="data row45 col3">1</td>
<td id="T_b855c_row45_col4" class="data row45 col4">1</td>
<td id="T_b855c_row45_col5" class="data row45 col5">1</td>
<td id="T_b855c_row45_col6" class="data row45 col6">1</td>
<td id="T_b855c_row45_col7" class="data row45 col7">1</td>
<td id="T_b855c_row45_col8" class="data row45 col8">1</td>
<td id="T_b855c_row45_col9" class="data row45 col9">1</td>
<td id="T_b855c_row45_col10" class="data row45 col10">1</td>
<td id="T_b855c_row45_col11" class="data row45 col11">1</td>
<td id="T_b855c_row45_col12" class="data row45 col12">1</td>
<td id="T_b855c_row45_col13" class="data row45 col13">1</td>
<td id="T_b855c_row45_col14" class="data row45 col14">0</td>
<td id="T_b855c_row45_col15" class="data row45 col15">1</td>
<td id="T_b855c_row45_col16" class="data row45 col16">1</td>
<td id="T_b855c_row45_col17" class="data row45 col17">1</td>
<td id="T_b855c_row45_col18" class="data row45 col18">1</td>
<td id="T_b855c_row45_col19" class="data row45 col19">1</td>
<td id="T_b855c_row45_col20" class="data row45 col20">1</td>
<td id="T_b855c_row45_col21" class="data row45 col21">1</td>
<td id="T_b855c_row45_col22" class="data row45 col22">1</td>
<td id="T_b855c_row45_col23" class="data row45 col23">1</td>
<td id="T_b855c_row45_col24" class="data row45 col24">1</td>
<td id="T_b855c_row45_col25" class="data row45 col25">1</td>
<td id="T_b855c_row45_col26" class="data row45 col26">1</td>
<td id="T_b855c_row45_col27" class="data row45 col27">1</td>
<td id="T_b855c_row45_col28" class="data row45 col28">1</td>
<td id="T_b855c_row45_col29" class="data row45 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row46" class="row_heading level0 row46" data-quarto-table-cell-role="th">46</th>
<td id="T_b855c_row46_col0" class="data row46 col0">1</td>
<td id="T_b855c_row46_col1" class="data row46 col1">1</td>
<td id="T_b855c_row46_col2" class="data row46 col2">1</td>
<td id="T_b855c_row46_col3" class="data row46 col3">1</td>
<td id="T_b855c_row46_col4" class="data row46 col4">1</td>
<td id="T_b855c_row46_col5" class="data row46 col5">1</td>
<td id="T_b855c_row46_col6" class="data row46 col6">1</td>
<td id="T_b855c_row46_col7" class="data row46 col7">1</td>
<td id="T_b855c_row46_col8" class="data row46 col8">1</td>
<td id="T_b855c_row46_col9" class="data row46 col9">1</td>
<td id="T_b855c_row46_col10" class="data row46 col10">1</td>
<td id="T_b855c_row46_col11" class="data row46 col11">1</td>
<td id="T_b855c_row46_col12" class="data row46 col12">1</td>
<td id="T_b855c_row46_col13" class="data row46 col13">1</td>
<td id="T_b855c_row46_col14" class="data row46 col14">1</td>
<td id="T_b855c_row46_col15" class="data row46 col15">0</td>
<td id="T_b855c_row46_col16" class="data row46 col16">1</td>
<td id="T_b855c_row46_col17" class="data row46 col17">1</td>
<td id="T_b855c_row46_col18" class="data row46 col18">1</td>
<td id="T_b855c_row46_col19" class="data row46 col19">1</td>
<td id="T_b855c_row46_col20" class="data row46 col20">1</td>
<td id="T_b855c_row46_col21" class="data row46 col21">1</td>
<td id="T_b855c_row46_col22" class="data row46 col22">1</td>
<td id="T_b855c_row46_col23" class="data row46 col23">1</td>
<td id="T_b855c_row46_col24" class="data row46 col24">1</td>
<td id="T_b855c_row46_col25" class="data row46 col25">1</td>
<td id="T_b855c_row46_col26" class="data row46 col26">1</td>
<td id="T_b855c_row46_col27" class="data row46 col27">1</td>
<td id="T_b855c_row46_col28" class="data row46 col28">1</td>
<td id="T_b855c_row46_col29" class="data row46 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row47" class="row_heading level0 row47" data-quarto-table-cell-role="th">47</th>
<td id="T_b855c_row47_col0" class="data row47 col0">1</td>
<td id="T_b855c_row47_col1" class="data row47 col1">1</td>
<td id="T_b855c_row47_col2" class="data row47 col2">1</td>
<td id="T_b855c_row47_col3" class="data row47 col3">1</td>
<td id="T_b855c_row47_col4" class="data row47 col4">1</td>
<td id="T_b855c_row47_col5" class="data row47 col5">1</td>
<td id="T_b855c_row47_col6" class="data row47 col6">1</td>
<td id="T_b855c_row47_col7" class="data row47 col7">1</td>
<td id="T_b855c_row47_col8" class="data row47 col8">1</td>
<td id="T_b855c_row47_col9" class="data row47 col9">1</td>
<td id="T_b855c_row47_col10" class="data row47 col10">1</td>
<td id="T_b855c_row47_col11" class="data row47 col11">1</td>
<td id="T_b855c_row47_col12" class="data row47 col12">1</td>
<td id="T_b855c_row47_col13" class="data row47 col13">1</td>
<td id="T_b855c_row47_col14" class="data row47 col14">1</td>
<td id="T_b855c_row47_col15" class="data row47 col15">1</td>
<td id="T_b855c_row47_col16" class="data row47 col16">0</td>
<td id="T_b855c_row47_col17" class="data row47 col17">1</td>
<td id="T_b855c_row47_col18" class="data row47 col18">1</td>
<td id="T_b855c_row47_col19" class="data row47 col19">1</td>
<td id="T_b855c_row47_col20" class="data row47 col20">1</td>
<td id="T_b855c_row47_col21" class="data row47 col21">1</td>
<td id="T_b855c_row47_col22" class="data row47 col22">1</td>
<td id="T_b855c_row47_col23" class="data row47 col23">1</td>
<td id="T_b855c_row47_col24" class="data row47 col24">1</td>
<td id="T_b855c_row47_col25" class="data row47 col25">1</td>
<td id="T_b855c_row47_col26" class="data row47 col26">1</td>
<td id="T_b855c_row47_col27" class="data row47 col27">1</td>
<td id="T_b855c_row47_col28" class="data row47 col28">1</td>
<td id="T_b855c_row47_col29" class="data row47 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row48" class="row_heading level0 row48" data-quarto-table-cell-role="th">48</th>
<td id="T_b855c_row48_col0" class="data row48 col0">1</td>
<td id="T_b855c_row48_col1" class="data row48 col1">1</td>
<td id="T_b855c_row48_col2" class="data row48 col2">1</td>
<td id="T_b855c_row48_col3" class="data row48 col3">1</td>
<td id="T_b855c_row48_col4" class="data row48 col4">1</td>
<td id="T_b855c_row48_col5" class="data row48 col5">1</td>
<td id="T_b855c_row48_col6" class="data row48 col6">1</td>
<td id="T_b855c_row48_col7" class="data row48 col7">1</td>
<td id="T_b855c_row48_col8" class="data row48 col8">1</td>
<td id="T_b855c_row48_col9" class="data row48 col9">1</td>
<td id="T_b855c_row48_col10" class="data row48 col10">1</td>
<td id="T_b855c_row48_col11" class="data row48 col11">1</td>
<td id="T_b855c_row48_col12" class="data row48 col12">1</td>
<td id="T_b855c_row48_col13" class="data row48 col13">1</td>
<td id="T_b855c_row48_col14" class="data row48 col14">1</td>
<td id="T_b855c_row48_col15" class="data row48 col15">1</td>
<td id="T_b855c_row48_col16" class="data row48 col16">1</td>
<td id="T_b855c_row48_col17" class="data row48 col17">0</td>
<td id="T_b855c_row48_col18" class="data row48 col18">1</td>
<td id="T_b855c_row48_col19" class="data row48 col19">1</td>
<td id="T_b855c_row48_col20" class="data row48 col20">1</td>
<td id="T_b855c_row48_col21" class="data row48 col21">1</td>
<td id="T_b855c_row48_col22" class="data row48 col22">1</td>
<td id="T_b855c_row48_col23" class="data row48 col23">1</td>
<td id="T_b855c_row48_col24" class="data row48 col24">1</td>
<td id="T_b855c_row48_col25" class="data row48 col25">1</td>
<td id="T_b855c_row48_col26" class="data row48 col26">1</td>
<td id="T_b855c_row48_col27" class="data row48 col27">1</td>
<td id="T_b855c_row48_col28" class="data row48 col28">1</td>
<td id="T_b855c_row48_col29" class="data row48 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row49" class="row_heading level0 row49" data-quarto-table-cell-role="th">49</th>
<td id="T_b855c_row49_col0" class="data row49 col0">1</td>
<td id="T_b855c_row49_col1" class="data row49 col1">1</td>
<td id="T_b855c_row49_col2" class="data row49 col2">1</td>
<td id="T_b855c_row49_col3" class="data row49 col3">1</td>
<td id="T_b855c_row49_col4" class="data row49 col4">1</td>
<td id="T_b855c_row49_col5" class="data row49 col5">1</td>
<td id="T_b855c_row49_col6" class="data row49 col6">1</td>
<td id="T_b855c_row49_col7" class="data row49 col7">1</td>
<td id="T_b855c_row49_col8" class="data row49 col8">1</td>
<td id="T_b855c_row49_col9" class="data row49 col9">1</td>
<td id="T_b855c_row49_col10" class="data row49 col10">1</td>
<td id="T_b855c_row49_col11" class="data row49 col11">1</td>
<td id="T_b855c_row49_col12" class="data row49 col12">1</td>
<td id="T_b855c_row49_col13" class="data row49 col13">1</td>
<td id="T_b855c_row49_col14" class="data row49 col14">1</td>
<td id="T_b855c_row49_col15" class="data row49 col15">1</td>
<td id="T_b855c_row49_col16" class="data row49 col16">1</td>
<td id="T_b855c_row49_col17" class="data row49 col17">1</td>
<td id="T_b855c_row49_col18" class="data row49 col18">0</td>
<td id="T_b855c_row49_col19" class="data row49 col19">1</td>
<td id="T_b855c_row49_col20" class="data row49 col20">1</td>
<td id="T_b855c_row49_col21" class="data row49 col21">1</td>
<td id="T_b855c_row49_col22" class="data row49 col22">1</td>
<td id="T_b855c_row49_col23" class="data row49 col23">1</td>
<td id="T_b855c_row49_col24" class="data row49 col24">1</td>
<td id="T_b855c_row49_col25" class="data row49 col25">1</td>
<td id="T_b855c_row49_col26" class="data row49 col26">1</td>
<td id="T_b855c_row49_col27" class="data row49 col27">1</td>
<td id="T_b855c_row49_col28" class="data row49 col28">1</td>
<td id="T_b855c_row49_col29" class="data row49 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row50" class="row_heading level0 row50" data-quarto-table-cell-role="th">50</th>
<td id="T_b855c_row50_col0" class="data row50 col0">1</td>
<td id="T_b855c_row50_col1" class="data row50 col1">1</td>
<td id="T_b855c_row50_col2" class="data row50 col2">1</td>
<td id="T_b855c_row50_col3" class="data row50 col3">1</td>
<td id="T_b855c_row50_col4" class="data row50 col4">1</td>
<td id="T_b855c_row50_col5" class="data row50 col5">1</td>
<td id="T_b855c_row50_col6" class="data row50 col6">1</td>
<td id="T_b855c_row50_col7" class="data row50 col7">1</td>
<td id="T_b855c_row50_col8" class="data row50 col8">1</td>
<td id="T_b855c_row50_col9" class="data row50 col9">1</td>
<td id="T_b855c_row50_col10" class="data row50 col10">1</td>
<td id="T_b855c_row50_col11" class="data row50 col11">1</td>
<td id="T_b855c_row50_col12" class="data row50 col12">1</td>
<td id="T_b855c_row50_col13" class="data row50 col13">1</td>
<td id="T_b855c_row50_col14" class="data row50 col14">1</td>
<td id="T_b855c_row50_col15" class="data row50 col15">1</td>
<td id="T_b855c_row50_col16" class="data row50 col16">1</td>
<td id="T_b855c_row50_col17" class="data row50 col17">1</td>
<td id="T_b855c_row50_col18" class="data row50 col18">1</td>
<td id="T_b855c_row50_col19" class="data row50 col19">0</td>
<td id="T_b855c_row50_col20" class="data row50 col20">1</td>
<td id="T_b855c_row50_col21" class="data row50 col21">1</td>
<td id="T_b855c_row50_col22" class="data row50 col22">1</td>
<td id="T_b855c_row50_col23" class="data row50 col23">1</td>
<td id="T_b855c_row50_col24" class="data row50 col24">1</td>
<td id="T_b855c_row50_col25" class="data row50 col25">1</td>
<td id="T_b855c_row50_col26" class="data row50 col26">1</td>
<td id="T_b855c_row50_col27" class="data row50 col27">1</td>
<td id="T_b855c_row50_col28" class="data row50 col28">1</td>
<td id="T_b855c_row50_col29" class="data row50 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row51" class="row_heading level0 row51" data-quarto-table-cell-role="th">51</th>
<td id="T_b855c_row51_col0" class="data row51 col0">1</td>
<td id="T_b855c_row51_col1" class="data row51 col1">1</td>
<td id="T_b855c_row51_col2" class="data row51 col2">1</td>
<td id="T_b855c_row51_col3" class="data row51 col3">1</td>
<td id="T_b855c_row51_col4" class="data row51 col4">1</td>
<td id="T_b855c_row51_col5" class="data row51 col5">1</td>
<td id="T_b855c_row51_col6" class="data row51 col6">1</td>
<td id="T_b855c_row51_col7" class="data row51 col7">1</td>
<td id="T_b855c_row51_col8" class="data row51 col8">1</td>
<td id="T_b855c_row51_col9" class="data row51 col9">1</td>
<td id="T_b855c_row51_col10" class="data row51 col10">1</td>
<td id="T_b855c_row51_col11" class="data row51 col11">1</td>
<td id="T_b855c_row51_col12" class="data row51 col12">1</td>
<td id="T_b855c_row51_col13" class="data row51 col13">1</td>
<td id="T_b855c_row51_col14" class="data row51 col14">1</td>
<td id="T_b855c_row51_col15" class="data row51 col15">1</td>
<td id="T_b855c_row51_col16" class="data row51 col16">1</td>
<td id="T_b855c_row51_col17" class="data row51 col17">1</td>
<td id="T_b855c_row51_col18" class="data row51 col18">1</td>
<td id="T_b855c_row51_col19" class="data row51 col19">1</td>
<td id="T_b855c_row51_col20" class="data row51 col20">0</td>
<td id="T_b855c_row51_col21" class="data row51 col21">1</td>
<td id="T_b855c_row51_col22" class="data row51 col22">1</td>
<td id="T_b855c_row51_col23" class="data row51 col23">1</td>
<td id="T_b855c_row51_col24" class="data row51 col24">1</td>
<td id="T_b855c_row51_col25" class="data row51 col25">1</td>
<td id="T_b855c_row51_col26" class="data row51 col26">1</td>
<td id="T_b855c_row51_col27" class="data row51 col27">1</td>
<td id="T_b855c_row51_col28" class="data row51 col28">1</td>
<td id="T_b855c_row51_col29" class="data row51 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row52" class="row_heading level0 row52" data-quarto-table-cell-role="th">52</th>
<td id="T_b855c_row52_col0" class="data row52 col0">1</td>
<td id="T_b855c_row52_col1" class="data row52 col1">1</td>
<td id="T_b855c_row52_col2" class="data row52 col2">1</td>
<td id="T_b855c_row52_col3" class="data row52 col3">1</td>
<td id="T_b855c_row52_col4" class="data row52 col4">1</td>
<td id="T_b855c_row52_col5" class="data row52 col5">1</td>
<td id="T_b855c_row52_col6" class="data row52 col6">1</td>
<td id="T_b855c_row52_col7" class="data row52 col7">1</td>
<td id="T_b855c_row52_col8" class="data row52 col8">1</td>
<td id="T_b855c_row52_col9" class="data row52 col9">1</td>
<td id="T_b855c_row52_col10" class="data row52 col10">1</td>
<td id="T_b855c_row52_col11" class="data row52 col11">1</td>
<td id="T_b855c_row52_col12" class="data row52 col12">1</td>
<td id="T_b855c_row52_col13" class="data row52 col13">1</td>
<td id="T_b855c_row52_col14" class="data row52 col14">1</td>
<td id="T_b855c_row52_col15" class="data row52 col15">1</td>
<td id="T_b855c_row52_col16" class="data row52 col16">1</td>
<td id="T_b855c_row52_col17" class="data row52 col17">1</td>
<td id="T_b855c_row52_col18" class="data row52 col18">1</td>
<td id="T_b855c_row52_col19" class="data row52 col19">1</td>
<td id="T_b855c_row52_col20" class="data row52 col20">1</td>
<td id="T_b855c_row52_col21" class="data row52 col21">0</td>
<td id="T_b855c_row52_col22" class="data row52 col22">1</td>
<td id="T_b855c_row52_col23" class="data row52 col23">1</td>
<td id="T_b855c_row52_col24" class="data row52 col24">1</td>
<td id="T_b855c_row52_col25" class="data row52 col25">1</td>
<td id="T_b855c_row52_col26" class="data row52 col26">1</td>
<td id="T_b855c_row52_col27" class="data row52 col27">1</td>
<td id="T_b855c_row52_col28" class="data row52 col28">1</td>
<td id="T_b855c_row52_col29" class="data row52 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row53" class="row_heading level0 row53" data-quarto-table-cell-role="th">53</th>
<td id="T_b855c_row53_col0" class="data row53 col0">1</td>
<td id="T_b855c_row53_col1" class="data row53 col1">1</td>
<td id="T_b855c_row53_col2" class="data row53 col2">1</td>
<td id="T_b855c_row53_col3" class="data row53 col3">1</td>
<td id="T_b855c_row53_col4" class="data row53 col4">1</td>
<td id="T_b855c_row53_col5" class="data row53 col5">1</td>
<td id="T_b855c_row53_col6" class="data row53 col6">1</td>
<td id="T_b855c_row53_col7" class="data row53 col7">1</td>
<td id="T_b855c_row53_col8" class="data row53 col8">1</td>
<td id="T_b855c_row53_col9" class="data row53 col9">1</td>
<td id="T_b855c_row53_col10" class="data row53 col10">1</td>
<td id="T_b855c_row53_col11" class="data row53 col11">1</td>
<td id="T_b855c_row53_col12" class="data row53 col12">1</td>
<td id="T_b855c_row53_col13" class="data row53 col13">1</td>
<td id="T_b855c_row53_col14" class="data row53 col14">1</td>
<td id="T_b855c_row53_col15" class="data row53 col15">1</td>
<td id="T_b855c_row53_col16" class="data row53 col16">1</td>
<td id="T_b855c_row53_col17" class="data row53 col17">1</td>
<td id="T_b855c_row53_col18" class="data row53 col18">1</td>
<td id="T_b855c_row53_col19" class="data row53 col19">1</td>
<td id="T_b855c_row53_col20" class="data row53 col20">1</td>
<td id="T_b855c_row53_col21" class="data row53 col21">1</td>
<td id="T_b855c_row53_col22" class="data row53 col22">0</td>
<td id="T_b855c_row53_col23" class="data row53 col23">1</td>
<td id="T_b855c_row53_col24" class="data row53 col24">1</td>
<td id="T_b855c_row53_col25" class="data row53 col25">1</td>
<td id="T_b855c_row53_col26" class="data row53 col26">1</td>
<td id="T_b855c_row53_col27" class="data row53 col27">1</td>
<td id="T_b855c_row53_col28" class="data row53 col28">1</td>
<td id="T_b855c_row53_col29" class="data row53 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row54" class="row_heading level0 row54" data-quarto-table-cell-role="th">54</th>
<td id="T_b855c_row54_col0" class="data row54 col0">1</td>
<td id="T_b855c_row54_col1" class="data row54 col1">1</td>
<td id="T_b855c_row54_col2" class="data row54 col2">1</td>
<td id="T_b855c_row54_col3" class="data row54 col3">1</td>
<td id="T_b855c_row54_col4" class="data row54 col4">1</td>
<td id="T_b855c_row54_col5" class="data row54 col5">1</td>
<td id="T_b855c_row54_col6" class="data row54 col6">1</td>
<td id="T_b855c_row54_col7" class="data row54 col7">1</td>
<td id="T_b855c_row54_col8" class="data row54 col8">1</td>
<td id="T_b855c_row54_col9" class="data row54 col9">1</td>
<td id="T_b855c_row54_col10" class="data row54 col10">1</td>
<td id="T_b855c_row54_col11" class="data row54 col11">1</td>
<td id="T_b855c_row54_col12" class="data row54 col12">1</td>
<td id="T_b855c_row54_col13" class="data row54 col13">1</td>
<td id="T_b855c_row54_col14" class="data row54 col14">1</td>
<td id="T_b855c_row54_col15" class="data row54 col15">1</td>
<td id="T_b855c_row54_col16" class="data row54 col16">1</td>
<td id="T_b855c_row54_col17" class="data row54 col17">1</td>
<td id="T_b855c_row54_col18" class="data row54 col18">1</td>
<td id="T_b855c_row54_col19" class="data row54 col19">1</td>
<td id="T_b855c_row54_col20" class="data row54 col20">1</td>
<td id="T_b855c_row54_col21" class="data row54 col21">1</td>
<td id="T_b855c_row54_col22" class="data row54 col22">1</td>
<td id="T_b855c_row54_col23" class="data row54 col23">0</td>
<td id="T_b855c_row54_col24" class="data row54 col24">1</td>
<td id="T_b855c_row54_col25" class="data row54 col25">1</td>
<td id="T_b855c_row54_col26" class="data row54 col26">1</td>
<td id="T_b855c_row54_col27" class="data row54 col27">1</td>
<td id="T_b855c_row54_col28" class="data row54 col28">1</td>
<td id="T_b855c_row54_col29" class="data row54 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row55" class="row_heading level0 row55" data-quarto-table-cell-role="th">55</th>
<td id="T_b855c_row55_col0" class="data row55 col0">1</td>
<td id="T_b855c_row55_col1" class="data row55 col1">1</td>
<td id="T_b855c_row55_col2" class="data row55 col2">1</td>
<td id="T_b855c_row55_col3" class="data row55 col3">1</td>
<td id="T_b855c_row55_col4" class="data row55 col4">1</td>
<td id="T_b855c_row55_col5" class="data row55 col5">1</td>
<td id="T_b855c_row55_col6" class="data row55 col6">1</td>
<td id="T_b855c_row55_col7" class="data row55 col7">1</td>
<td id="T_b855c_row55_col8" class="data row55 col8">1</td>
<td id="T_b855c_row55_col9" class="data row55 col9">1</td>
<td id="T_b855c_row55_col10" class="data row55 col10">1</td>
<td id="T_b855c_row55_col11" class="data row55 col11">1</td>
<td id="T_b855c_row55_col12" class="data row55 col12">1</td>
<td id="T_b855c_row55_col13" class="data row55 col13">1</td>
<td id="T_b855c_row55_col14" class="data row55 col14">1</td>
<td id="T_b855c_row55_col15" class="data row55 col15">1</td>
<td id="T_b855c_row55_col16" class="data row55 col16">1</td>
<td id="T_b855c_row55_col17" class="data row55 col17">1</td>
<td id="T_b855c_row55_col18" class="data row55 col18">1</td>
<td id="T_b855c_row55_col19" class="data row55 col19">1</td>
<td id="T_b855c_row55_col20" class="data row55 col20">1</td>
<td id="T_b855c_row55_col21" class="data row55 col21">1</td>
<td id="T_b855c_row55_col22" class="data row55 col22">1</td>
<td id="T_b855c_row55_col23" class="data row55 col23">1</td>
<td id="T_b855c_row55_col24" class="data row55 col24">0</td>
<td id="T_b855c_row55_col25" class="data row55 col25">1</td>
<td id="T_b855c_row55_col26" class="data row55 col26">1</td>
<td id="T_b855c_row55_col27" class="data row55 col27">1</td>
<td id="T_b855c_row55_col28" class="data row55 col28">1</td>
<td id="T_b855c_row55_col29" class="data row55 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row56" class="row_heading level0 row56" data-quarto-table-cell-role="th">56</th>
<td id="T_b855c_row56_col0" class="data row56 col0">1</td>
<td id="T_b855c_row56_col1" class="data row56 col1">1</td>
<td id="T_b855c_row56_col2" class="data row56 col2">1</td>
<td id="T_b855c_row56_col3" class="data row56 col3">1</td>
<td id="T_b855c_row56_col4" class="data row56 col4">1</td>
<td id="T_b855c_row56_col5" class="data row56 col5">1</td>
<td id="T_b855c_row56_col6" class="data row56 col6">1</td>
<td id="T_b855c_row56_col7" class="data row56 col7">1</td>
<td id="T_b855c_row56_col8" class="data row56 col8">1</td>
<td id="T_b855c_row56_col9" class="data row56 col9">1</td>
<td id="T_b855c_row56_col10" class="data row56 col10">1</td>
<td id="T_b855c_row56_col11" class="data row56 col11">1</td>
<td id="T_b855c_row56_col12" class="data row56 col12">1</td>
<td id="T_b855c_row56_col13" class="data row56 col13">1</td>
<td id="T_b855c_row56_col14" class="data row56 col14">1</td>
<td id="T_b855c_row56_col15" class="data row56 col15">1</td>
<td id="T_b855c_row56_col16" class="data row56 col16">1</td>
<td id="T_b855c_row56_col17" class="data row56 col17">1</td>
<td id="T_b855c_row56_col18" class="data row56 col18">1</td>
<td id="T_b855c_row56_col19" class="data row56 col19">1</td>
<td id="T_b855c_row56_col20" class="data row56 col20">1</td>
<td id="T_b855c_row56_col21" class="data row56 col21">1</td>
<td id="T_b855c_row56_col22" class="data row56 col22">1</td>
<td id="T_b855c_row56_col23" class="data row56 col23">1</td>
<td id="T_b855c_row56_col24" class="data row56 col24">1</td>
<td id="T_b855c_row56_col25" class="data row56 col25">0</td>
<td id="T_b855c_row56_col26" class="data row56 col26">1</td>
<td id="T_b855c_row56_col27" class="data row56 col27">1</td>
<td id="T_b855c_row56_col28" class="data row56 col28">1</td>
<td id="T_b855c_row56_col29" class="data row56 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row57" class="row_heading level0 row57" data-quarto-table-cell-role="th">57</th>
<td id="T_b855c_row57_col0" class="data row57 col0">1</td>
<td id="T_b855c_row57_col1" class="data row57 col1">1</td>
<td id="T_b855c_row57_col2" class="data row57 col2">1</td>
<td id="T_b855c_row57_col3" class="data row57 col3">1</td>
<td id="T_b855c_row57_col4" class="data row57 col4">1</td>
<td id="T_b855c_row57_col5" class="data row57 col5">1</td>
<td id="T_b855c_row57_col6" class="data row57 col6">1</td>
<td id="T_b855c_row57_col7" class="data row57 col7">1</td>
<td id="T_b855c_row57_col8" class="data row57 col8">1</td>
<td id="T_b855c_row57_col9" class="data row57 col9">1</td>
<td id="T_b855c_row57_col10" class="data row57 col10">1</td>
<td id="T_b855c_row57_col11" class="data row57 col11">1</td>
<td id="T_b855c_row57_col12" class="data row57 col12">1</td>
<td id="T_b855c_row57_col13" class="data row57 col13">1</td>
<td id="T_b855c_row57_col14" class="data row57 col14">1</td>
<td id="T_b855c_row57_col15" class="data row57 col15">1</td>
<td id="T_b855c_row57_col16" class="data row57 col16">1</td>
<td id="T_b855c_row57_col17" class="data row57 col17">1</td>
<td id="T_b855c_row57_col18" class="data row57 col18">1</td>
<td id="T_b855c_row57_col19" class="data row57 col19">1</td>
<td id="T_b855c_row57_col20" class="data row57 col20">1</td>
<td id="T_b855c_row57_col21" class="data row57 col21">1</td>
<td id="T_b855c_row57_col22" class="data row57 col22">1</td>
<td id="T_b855c_row57_col23" class="data row57 col23">1</td>
<td id="T_b855c_row57_col24" class="data row57 col24">1</td>
<td id="T_b855c_row57_col25" class="data row57 col25">1</td>
<td id="T_b855c_row57_col26" class="data row57 col26">0</td>
<td id="T_b855c_row57_col27" class="data row57 col27">1</td>
<td id="T_b855c_row57_col28" class="data row57 col28">1</td>
<td id="T_b855c_row57_col29" class="data row57 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row58" class="row_heading level0 row58" data-quarto-table-cell-role="th">58</th>
<td id="T_b855c_row58_col0" class="data row58 col0">1</td>
<td id="T_b855c_row58_col1" class="data row58 col1">1</td>
<td id="T_b855c_row58_col2" class="data row58 col2">1</td>
<td id="T_b855c_row58_col3" class="data row58 col3">1</td>
<td id="T_b855c_row58_col4" class="data row58 col4">1</td>
<td id="T_b855c_row58_col5" class="data row58 col5">1</td>
<td id="T_b855c_row58_col6" class="data row58 col6">1</td>
<td id="T_b855c_row58_col7" class="data row58 col7">1</td>
<td id="T_b855c_row58_col8" class="data row58 col8">1</td>
<td id="T_b855c_row58_col9" class="data row58 col9">1</td>
<td id="T_b855c_row58_col10" class="data row58 col10">1</td>
<td id="T_b855c_row58_col11" class="data row58 col11">1</td>
<td id="T_b855c_row58_col12" class="data row58 col12">1</td>
<td id="T_b855c_row58_col13" class="data row58 col13">1</td>
<td id="T_b855c_row58_col14" class="data row58 col14">1</td>
<td id="T_b855c_row58_col15" class="data row58 col15">1</td>
<td id="T_b855c_row58_col16" class="data row58 col16">1</td>
<td id="T_b855c_row58_col17" class="data row58 col17">1</td>
<td id="T_b855c_row58_col18" class="data row58 col18">1</td>
<td id="T_b855c_row58_col19" class="data row58 col19">1</td>
<td id="T_b855c_row58_col20" class="data row58 col20">1</td>
<td id="T_b855c_row58_col21" class="data row58 col21">1</td>
<td id="T_b855c_row58_col22" class="data row58 col22">1</td>
<td id="T_b855c_row58_col23" class="data row58 col23">1</td>
<td id="T_b855c_row58_col24" class="data row58 col24">1</td>
<td id="T_b855c_row58_col25" class="data row58 col25">1</td>
<td id="T_b855c_row58_col26" class="data row58 col26">1</td>
<td id="T_b855c_row58_col27" class="data row58 col27">0</td>
<td id="T_b855c_row58_col28" class="data row58 col28">1</td>
<td id="T_b855c_row58_col29" class="data row58 col29">1</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row59" class="row_heading level0 row59" data-quarto-table-cell-role="th">59</th>
<td id="T_b855c_row59_col0" class="data row59 col0">1</td>
<td id="T_b855c_row59_col1" class="data row59 col1">1</td>
<td id="T_b855c_row59_col2" class="data row59 col2">1</td>
<td id="T_b855c_row59_col3" class="data row59 col3">1</td>
<td id="T_b855c_row59_col4" class="data row59 col4">1</td>
<td id="T_b855c_row59_col5" class="data row59 col5">1</td>
<td id="T_b855c_row59_col6" class="data row59 col6">1</td>
<td id="T_b855c_row59_col7" class="data row59 col7">1</td>
<td id="T_b855c_row59_col8" class="data row59 col8">1</td>
<td id="T_b855c_row59_col9" class="data row59 col9">1</td>
<td id="T_b855c_row59_col10" class="data row59 col10">1</td>
<td id="T_b855c_row59_col11" class="data row59 col11">1</td>
<td id="T_b855c_row59_col12" class="data row59 col12">1</td>
<td id="T_b855c_row59_col13" class="data row59 col13">1</td>
<td id="T_b855c_row59_col14" class="data row59 col14">1</td>
<td id="T_b855c_row59_col15" class="data row59 col15">1</td>
<td id="T_b855c_row59_col16" class="data row59 col16">1</td>
<td id="T_b855c_row59_col17" class="data row59 col17">1</td>
<td id="T_b855c_row59_col18" class="data row59 col18">1</td>
<td id="T_b855c_row59_col19" class="data row59 col19">1</td>
<td id="T_b855c_row59_col20" class="data row59 col20">1</td>
<td id="T_b855c_row59_col21" class="data row59 col21">1</td>
<td id="T_b855c_row59_col22" class="data row59 col22">1</td>
<td id="T_b855c_row59_col23" class="data row59 col23">1</td>
<td id="T_b855c_row59_col24" class="data row59 col24">1</td>
<td id="T_b855c_row59_col25" class="data row59 col25">1</td>
<td id="T_b855c_row59_col26" class="data row59 col26">1</td>
<td id="T_b855c_row59_col27" class="data row59 col27">1</td>
<td id="T_b855c_row59_col28" class="data row59 col28">0</td>
<td id="T_b855c_row59_col29" class="data row59 col29">1</td>
</tr>
<tr class="odd">
<th id="T_b855c_level0_row60" class="row_heading level0 row60" data-quarto-table-cell-role="th">60</th>
<td id="T_b855c_row60_col0" class="data row60 col0">1</td>
<td id="T_b855c_row60_col1" class="data row60 col1">1</td>
<td id="T_b855c_row60_col2" class="data row60 col2">1</td>
<td id="T_b855c_row60_col3" class="data row60 col3">1</td>
<td id="T_b855c_row60_col4" class="data row60 col4">1</td>
<td id="T_b855c_row60_col5" class="data row60 col5">1</td>
<td id="T_b855c_row60_col6" class="data row60 col6">1</td>
<td id="T_b855c_row60_col7" class="data row60 col7">1</td>
<td id="T_b855c_row60_col8" class="data row60 col8">1</td>
<td id="T_b855c_row60_col9" class="data row60 col9">1</td>
<td id="T_b855c_row60_col10" class="data row60 col10">1</td>
<td id="T_b855c_row60_col11" class="data row60 col11">1</td>
<td id="T_b855c_row60_col12" class="data row60 col12">1</td>
<td id="T_b855c_row60_col13" class="data row60 col13">1</td>
<td id="T_b855c_row60_col14" class="data row60 col14">1</td>
<td id="T_b855c_row60_col15" class="data row60 col15">1</td>
<td id="T_b855c_row60_col16" class="data row60 col16">1</td>
<td id="T_b855c_row60_col17" class="data row60 col17">1</td>
<td id="T_b855c_row60_col18" class="data row60 col18">1</td>
<td id="T_b855c_row60_col19" class="data row60 col19">1</td>
<td id="T_b855c_row60_col20" class="data row60 col20">1</td>
<td id="T_b855c_row60_col21" class="data row60 col21">1</td>
<td id="T_b855c_row60_col22" class="data row60 col22">1</td>
<td id="T_b855c_row60_col23" class="data row60 col23">1</td>
<td id="T_b855c_row60_col24" class="data row60 col24">1</td>
<td id="T_b855c_row60_col25" class="data row60 col25">1</td>
<td id="T_b855c_row60_col26" class="data row60 col26">1</td>
<td id="T_b855c_row60_col27" class="data row60 col27">1</td>
<td id="T_b855c_row60_col28" class="data row60 col28">1</td>
<td id="T_b855c_row60_col29" class="data row60 col29">0</td>
</tr>
<tr class="even">
<th id="T_b855c_level0_row61" class="row_heading level0 row61" data-quarto-table-cell-role="th">61</th>
<td id="T_b855c_row61_col0" class="data row61 col0">1</td>
<td id="T_b855c_row61_col1" class="data row61 col1">1</td>
<td id="T_b855c_row61_col2" class="data row61 col2">1</td>
<td id="T_b855c_row61_col3" class="data row61 col3">1</td>
<td id="T_b855c_row61_col4" class="data row61 col4">1</td>
<td id="T_b855c_row61_col5" class="data row61 col5">1</td>
<td id="T_b855c_row61_col6" class="data row61 col6">1</td>
<td id="T_b855c_row61_col7" class="data row61 col7">1</td>
<td id="T_b855c_row61_col8" class="data row61 col8">1</td>
<td id="T_b855c_row61_col9" class="data row61 col9">1</td>
<td id="T_b855c_row61_col10" class="data row61 col10">1</td>
<td id="T_b855c_row61_col11" class="data row61 col11">1</td>
<td id="T_b855c_row61_col12" class="data row61 col12">1</td>
<td id="T_b855c_row61_col13" class="data row61 col13">1</td>
<td id="T_b855c_row61_col14" class="data row61 col14">1</td>
<td id="T_b855c_row61_col15" class="data row61 col15">1</td>
<td id="T_b855c_row61_col16" class="data row61 col16">1</td>
<td id="T_b855c_row61_col17" class="data row61 col17">1</td>
<td id="T_b855c_row61_col18" class="data row61 col18">1</td>
<td id="T_b855c_row61_col19" class="data row61 col19">1</td>
<td id="T_b855c_row61_col20" class="data row61 col20">1</td>
<td id="T_b855c_row61_col21" class="data row61 col21">1</td>
<td id="T_b855c_row61_col22" class="data row61 col22">1</td>
<td id="T_b855c_row61_col23" class="data row61 col23">1</td>
<td id="T_b855c_row61_col24" class="data row61 col24">1</td>
<td id="T_b855c_row61_col25" class="data row61 col25">1</td>
<td id="T_b855c_row61_col26" class="data row61 col26">1</td>
<td id="T_b855c_row61_col27" class="data row61 col27">1</td>
<td id="T_b855c_row61_col28" class="data row61 col28">1</td>
<td id="T_b855c_row61_col29" class="data row61 col29">1</td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<section id="computing-the-feature-impact-simple-approach" class="level2">
<h2 class="anchored" data-anchor-id="computing-the-feature-impact-simple-approach">2.2 Computing the feature impact (simple approach)</h2>
<p>Here is the pseudo-logic - For every coalition - For every sample in the dataset, replace “0” in coalition with average feature value for that sample - For every feature of the sample - Compute model score wihtout and with the feature. The difference is the impact of that feature, on that sample, for that coalition.</p>
<p>Aggregate all the impacts</p>
<div id="cell-11" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:49,&quot;referenced_widgets&quot;:[&quot;7003881749b94a0d9f8eac0d05bae392&quot;,&quot;86e6eab2c7ff46938ed1e6f61c09e330&quot;,&quot;feda9b5a4c424fedbfd4daba7974050c&quot;,&quot;2c81466df4e24519bb76ff7e37501119&quot;,&quot;9d14599da12f49aca63236dfde0b47fb&quot;,&quot;193eea9cac014070bcb4191f320689bf&quot;,&quot;900a7a51ca374610a2a25fc8f8ca6d5c&quot;,&quot;aa6b641de1174e62881312a1e3a38114&quot;,&quot;a2290cbdc8d94d3ea233e91ea6de0aca&quot;,&quot;fc673795d97f4893a023d45d1d9d4bf1&quot;,&quot;0efea7db230e4dfca3d2f4770f0dd388&quot;]}}" data-outputid="9350e8e9-7fe9-4539-b861-73c9d7aca619" data-execution_count="98">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We will gather all feature impacts </span></span>
<span id="cb6-2">feature_impacts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {col:[] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> col <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> X.columns}</span>
<span id="cb6-3"></span>
<span id="cb6-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The mean values are used for when a feature needs to be "removed"</span></span>
<span id="cb6-5">mean_values <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> X.mean().values</span>
<span id="cb6-6"></span>
<span id="cb6-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># For each coalition we have prepared (1s and 0s)</span></span>
<span id="cb6-8"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> coalition <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> tqdm(pd.DataFrame(coalitions).astype(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">bool</span>).values, total<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(coalitions)): </span>
<span id="cb6-9"></span>
<span id="cb6-10">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># For each sample in the dataset</span></span>
<span id="cb6-11">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> sample <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> X.values: </span>
<span id="cb6-12"></span>
<span id="cb6-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># In the sample, replace all the '0s' of the coalition</span></span>
<span id="cb6-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># with the mean of that feature</span></span>
<span id="cb6-15">    sample_masked <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sample.copy()</span>
<span id="cb6-16">    sample_masked[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>coalition] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> mean_values[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">~</span>coalition] </span>
<span id="cb6-17"></span>
<span id="cb6-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># For each feature</span></span>
<span id="cb6-19">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> feature_idx, feature_name <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(X.columns):</span>
<span id="cb6-20"></span>
<span id="cb6-21">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the score without the feature</span></span>
<span id="cb6-22">      sample_without_feature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sample_masked.copy()</span>
<span id="cb6-23">      sample_without_feature[feature_idx] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> mean_values[feature_idx]</span>
<span id="cb6-24">      score_without_feature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> lr.predict_proba([sample_without_feature])[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb6-25"></span>
<span id="cb6-26">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the score with the feature</span></span>
<span id="cb6-27">      sample_with_feature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sample_masked.copy()</span>
<span id="cb6-28">      sample_with_feature[feature_idx] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sample[feature_idx]</span>
<span id="cb6-29">      score_with_feature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> lr.predict_proba([sample_with_feature])[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb6-30"></span>
<span id="cb6-31">      <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Store the feature impact</span></span>
<span id="cb6-32">      feature_impacts[feature_name].append(score_with_feature <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> score_without_feature)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<script type="application/vnd.jupyter.widget-view+json">
{"model_id":"7003881749b94a0d9f8eac0d05bae392","version_major":2,"version_minor":0,"quarto_mimetype":"application/vnd.jupyter.widget-view+json"}
</script>
</div>
</div>
<div id="cell-12" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:421}}" data-outputid="e251f6db-5110-4c9b-acd1-0ab2b8918887" data-execution_count="99">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">pd.DataFrame(feature_impacts, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>X.columns).head()</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="99">
<div id="df-70b04ad1-e356-47be-b143-98612389c24c">
    <div class="colab-df-container">
      <div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">mean radius</th>
<th data-quarto-table-cell-role="th">mean texture</th>
<th data-quarto-table-cell-role="th">mean perimeter</th>
<th data-quarto-table-cell-role="th">mean area</th>
<th data-quarto-table-cell-role="th">mean smoothness</th>
<th data-quarto-table-cell-role="th">mean compactness</th>
<th data-quarto-table-cell-role="th">mean concavity</th>
<th data-quarto-table-cell-role="th">mean concave points</th>
<th data-quarto-table-cell-role="th">mean symmetry</th>
<th data-quarto-table-cell-role="th">mean fractal dimension</th>
<th data-quarto-table-cell-role="th">...</th>
<th data-quarto-table-cell-role="th">worst radius</th>
<th data-quarto-table-cell-role="th">worst texture</th>
<th data-quarto-table-cell-role="th">worst perimeter</th>
<th data-quarto-table-cell-role="th">worst area</th>
<th data-quarto-table-cell-role="th">worst smoothness</th>
<th data-quarto-table-cell-role="th">worst compactness</th>
<th data-quarto-table-cell-role="th">worst concavity</th>
<th data-quarto-table-cell-role="th">worst concave points</th>
<th data-quarto-table-cell-role="th">worst symmetry</th>
<th data-quarto-table-cell-role="th">worst fractal dimension</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">0</th>
<td>0.722058</td>
<td>-0.126389</td>
<td>0.869852</td>
<td>-0.128361</td>
<td>-0.000087</td>
<td>-0.003189</td>
<td>-0.005405</td>
<td>-0.001073</td>
<td>-3.318434e-04</td>
<td>-0.000017</td>
<td>...</td>
<td>0.870383</td>
<td>0.780434</td>
<td>-0.128907</td>
<td>-0.128907</td>
<td>-0.000214</td>
<td>-0.022046</td>
<td>-0.028566</td>
<td>-0.003150</td>
<td>-0.002920</td>
<td>-0.000195</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">1</th>
<td>0.856055</td>
<td>-0.060093</td>
<td>0.871019</td>
<td>-0.128904</td>
<td>0.000046</td>
<td>0.000479</td>
<td>0.000049</td>
<td>-0.000233</td>
<td>-2.085911e-07</td>
<td>0.000007</td>
<td>...</td>
<td>0.870042</td>
<td>0.188555</td>
<td>-0.128906</td>
<td>-0.128907</td>
<td>0.000061</td>
<td>0.003977</td>
<td>0.002225</td>
<td>-0.001500</td>
<td>0.000262</td>
<td>-0.000028</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">2</th>
<td>0.837193</td>
<td>0.137117</td>
<td>0.870927</td>
<td>-0.128886</td>
<td>-0.000052</td>
<td>-0.001030</td>
<td>-0.002803</td>
<td>-0.000864</td>
<td>-1.407096e-04</td>
<td>0.000003</td>
<td>...</td>
<td>0.866727</td>
<td>0.008583</td>
<td>-0.128905</td>
<td>-0.128905</td>
<td>-0.000086</td>
<td>-0.009560</td>
<td>-0.012331</td>
<td>-0.002686</td>
<td>-0.001230</td>
<td>-0.000020</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">3</th>
<td>-0.117599</td>
<td>0.066944</td>
<td>-0.126242</td>
<td>0.790957</td>
<td>-0.000182</td>
<td>-0.003304</td>
<td>-0.003923</td>
<td>-0.000616</td>
<td>-4.289558e-04</td>
<td>-0.000038</td>
<td>...</td>
<td>-0.092544</td>
<td>-0.039935</td>
<td>0.412002</td>
<td>0.789438</td>
<td>-0.000554</td>
<td>-0.031548</td>
<td>-0.027105</td>
<td>-0.002987</td>
<td>-0.006344</td>
<td>-0.000496</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">4</th>
<td>0.851585</td>
<td>-0.113725</td>
<td>0.871053</td>
<td>-0.128902</td>
<td>-0.000016</td>
<td>-0.000529</td>
<td>-0.002818</td>
<td>-0.000606</td>
<td>1.432269e-06</td>
<td>0.000004</td>
<td>...</td>
<td>0.858891</td>
<td>0.804422</td>
<td>-0.128905</td>
<td>-0.128897</td>
<td>-0.000036</td>
<td>0.002886</td>
<td>-0.008952</td>
<td>-0.001008</td>
<td>0.000934</td>
<td>0.000040</td>
</tr>
</tbody>
</table>

<p>5 rows × 30 columns</p>
</div>
      <button class="colab-df-convert" onclick="convertToInteractive('df-70b04ad1-e356-47be-b143-98612389c24c')" title="Convert this dataframe to an interactive table." style="display:none;">
        
  <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewbox="0 0 24 24" width="24px">
    <path d="M0 0h24v24H0V0z" fill="none"></path>
    <path d="M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z"></path><path d="M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z"></path>
  </svg>
      </button>
      
  <style>
    .colab-df-container {
      display:flex;
      flex-wrap:wrap;
      gap: 12px;
    }

    .colab-df-convert {
      background-color: #E8F0FE;
      border: none;
      border-radius: 50%;
      cursor: pointer;
      display: none;
      fill: #1967D2;
      height: 32px;
      padding: 0 0 0 0;
      width: 32px;
    }

    .colab-df-convert:hover {
      background-color: #E2EBFA;
      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);
      fill: #174EA6;
    }

    [theme=dark] .colab-df-convert {
      background-color: #3B4455;
      fill: #D2E3FC;
    }

    [theme=dark] .colab-df-convert:hover {
      background-color: #434B5C;
      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);
      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));
      fill: #FFFFFF;
    }
  </style>

      <script>
        const buttonEl =
          document.querySelector('#df-70b04ad1-e356-47be-b143-98612389c24c button.colab-df-convert');
        buttonEl.style.display =
          google.colab.kernel.accessAllowed ? 'block' : 'none';

        async function convertToInteractive(key) {
          const element = document.querySelector('#df-70b04ad1-e356-47be-b143-98612389c24c');
          const dataTable =
            await google.colab.kernel.invokeFunction('convertToInteractive',
                                                     [key], {});
          if (!dataTable) return;

          const docLinkHtml = 'Like what you see? Visit the ' +
            '<a target="_blank" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'
            + ' to learn more about interactive tables.';
          element.innerHTML = '';
          dataTable['output_type'] = 'display_data';
          await google.colab.output.renderOutput(dataTable, element);
          const docLink = document.createElement('div');
          docLink.innerHTML = docLinkHtml;
          element.appendChild(docLink);
        }
      </script>
    </div>
  </div>
</div>
</div>
<div id="cell-13" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:391}}" data-outputid="5c5e0763-0e43-4aba-c675-1c19c6bb697a" data-execution_count="100">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">pd.DataFrame(feature_impacts).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">abs</span>().mean().sort_values().iloc[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:].plot.barh(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-01-14-shap-values_files/figure-html/cell-8-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
</section>
<section id="the-method-described-in-the-shap-paper" class="level1">
<h1>The method described in the SHAP paper</h1>
<p>The SHAP paper gives a faster method in order to compute accurate SHAP values with a subset of coalitions.</p>
<p>They create a linear regression for each sample, trying to match all the coalitions to the scores, in order to compute the SHAP values in one shot.</p>
<div id="cell-16" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:423,&quot;referenced_widgets&quot;:[&quot;12ad01b583844bf182a104535eeccf06&quot;,&quot;5617854b9ae5442c96f7eefcec6735c0&quot;,&quot;e06240b36e4b422eab9f0d8f040f032c&quot;,&quot;963e41ee1ba64a7685cb2717b51fd003&quot;,&quot;7bd7dcac41d74d7ebf021de221daf4f2&quot;,&quot;736070e57a58448eac9a16880657d565&quot;,&quot;25bea2ff4c6e474f80613f15f728dc36&quot;,&quot;f76d11fb4bad4886a7d5615ebf7e47e6&quot;,&quot;abce7f3f937345b39ef6693e3621171f&quot;,&quot;3363c4b0d750404183024f0a442e31c7&quot;,&quot;66c26a7b4a9f4f3ea09f75f295ef3289&quot;]}}" data-outputid="e0f88860-24a7-4c8c-e042-d3dae6e137c1" data-execution_count="94">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">feature_impacts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb9-2">M <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X.columns)</span>
<span id="cb9-3"></span>
<span id="cb9-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create a big set of coalitions</span></span>
<span id="cb9-5">coalitions_array <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.choice([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], size<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span>, <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X.columns)))</span>
<span id="cb9-6"></span>
<span id="cb9-7"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> sample_idx <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> tqdm(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X)), total<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X)):</span>
<span id="cb9-8">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Apply all coalitions to sample 0 </span></span>
<span id="cb9-9">  sample_with_missing_replaced <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (coalitions_array <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> X.iloc[sample_idx].values) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> ((<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> coalitions_array) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> X.mean().values)</span>
<span id="cb9-10">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get model predictions for all these possibilities</span></span>
<span id="cb9-11">  predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> lr.predict_proba(sample_with_missing_replaced)[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]</span>
<span id="cb9-12">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Find a linear model that matches the coalitioned features to the predictions</span></span>
<span id="cb9-13">  linreg <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> LinearRegression().fit(coalitions_array, predictions)</span>
<span id="cb9-14">  feature_impacts.append(linreg.coef_)</span>
<span id="cb9-15"></span>
<span id="cb9-16">pd.DataFrame(feature_impacts, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>X.columns).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">abs</span>().mean().sort_values(ascending<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).iloc[<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>:].plot.barh(figsize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<script type="application/vnd.jupyter.widget-view+json">
{"model_id":"12ad01b583844bf182a104535eeccf06","version_major":2,"version_minor":0,"quarto_mimetype":"application/vnd.jupyter.widget-view+json"}
</script>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-01-14-shap-values_files/figure-html/cell-9-output-2.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="comparing-to-shap" class="level1">
<h1>Comparing to SHAP</h1>
<p>The calculation above should get us close to the SHAP values</p>
<div id="cell-18" class="cell" data-execution_count="86">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>capture</span>
<span id="cb10-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span>pip install shap</span></code></pre></div></div>
</div>
<div id="cell-19" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> shap</span>
<span id="cb11-2">expl <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> shap.KernelExplainer(<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">lambda</span> x: lr.predict_proba(x)[:, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], X.mean())</span>
<span id="cb11-3">shap_values <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> expl.shap_values(X)</span></code></pre></div></div>
</div>
<div id="cell-20" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:418}}" data-outputid="8ea65e3e-f798-4a16-9842-c906f139f107" data-execution_count="97">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1">shap.plots.bar(shap.Explanation(shap_values, np.repeat(expl.expected_value, <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(shap_values)), feature_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>X.columns))</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2023-01-14-shap-values_files/figure-html/cell-12-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<p>It is highlighting the same set of top features as our manual method, with similar feature importance values.</p>
<p>We would get better results if we considered more coalitions, but the problem becomes exponentially harder.</p>
</section>
<section id="sources" class="level1">
<h1>Sources</h1>
<p>Some good links: - https://christophm.github.io/interpretable-ml-book/shap.html#kernelshap - https://www.telesens.co/2020/09/17/kernel-shap/</p>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2023-01-14-shap-values.html</guid>
  <pubDate>Sat, 14 Jan 2023 00:00:00 GMT</pubDate>
</item>
<item>
  <title>Easy way to queue a job in the terminal</title>
  <link>https://rcambier.github.io/posts/2022-04-29-background-jobs.html</link>
  <description><![CDATA[ 





<p>There is a small trick I love to use when running long commands in my terminal.</p>
<p>To run a job in the background, you can append <code>&amp;</code> to the end of it. But what if you just started running a command, and you now realize you wanted to queue another command after it? Since you forgot to add <code>&amp;</code>, it’s now running in the foreground in your terminal and it’s not easy to queue another job after it. Well, here is how to do it:</p>
<ol type="1">
<li>You run your first command forgetting to add the <code>&amp;</code> at the end</li>
</ol>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">$</span> for i in <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">{</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">..</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span><span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">}</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">do</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">sleep</span> 1<span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">;</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">done</span></span></code></pre></div></div>
<ol start="2" type="1">
<li>You use <code>CTRL + Z</code> to pause that job and put it in the background. You should see</li>
</ol>
<pre><code>&gt; [1]  + 93657 suspended  sleep 1</code></pre>
<ol start="3" type="1">
<li>You use <code>fg &amp;&amp; [new command]</code> in order to put that job back to the foreground and queue another job to it.</li>
</ol>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">$</span> fg <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">&amp;&amp;</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">echo</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'see!?'</span></span></code></pre></div></div>
<pre><code>&gt; [1]  + 93657 continued  sleep 1
&gt; see!?</code></pre>
<section id="using-the-jobs-feature" class="level1">
<h1>Using the <code>jobs</code> feature</h1>
<p>This is using the foreground/background job feature of the terminal. <a href="https://www.digitalocean.com/community/tutorials/how-to-use-bash-s-job-control-to-manage-foreground-and-background-processes">Here</a> is a more detailed tutorial.</p>
<p>To summarize the few command I use: - <code>CTRL + Z</code> to put a job in the background - <code>jobs</code> to have a look at all the jobs - <code>fg</code> to put the last bakgrounded process back to the foreground - <code>fg %2</code> to put another job back to the foreground - <code>kill %2</code> to kill job number 2</p>


</section>

 ]]></description>
  <category>programming</category>
  <category>system</category>
  <guid>https://rcambier.github.io/posts/2022-04-29-background-jobs.html</guid>
  <pubDate>Thu, 28 Apr 2022 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Python multiprocessing with loading bar</title>
  <link>https://rcambier.github.io/posts/2022-04-01-multiprocessing.html</link>
  <description><![CDATA[ 





<p>Multiprocessing in Python is already not the best. But on top of it, I always want to add a loading bar that tells me how much work has been performed. It took me a while to figure out how to best do that.</p>
<p>What I want is: - Work gets done in parrallel, either in threads or in processes depending on how much GIL locking there is in my function. - The loading bar progresses as work gets done. - When the progress bars hits the end, work is finished. - You can pipe a generator into the parrallel processing, and it will be consumed progressively</p>
<p>What I settled for is the below code. It consumes the <code>iterable</code> generator progressively, and displays a progress bar indicating how much work has been achieved.</p>
<section id="for-multiprocessing" class="level3">
<h3 class="anchored" data-anchor-id="for-multiprocessing">For multiprocessing:</h3>
<div id="cell-2" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> multiprocessing.pool <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> Pool</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> tqdm.auto <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> tqdm </span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> time</span>
<span id="cb1-4"></span>
<span id="cb1-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> work_function(arg): </span>
<span id="cb1-6">    time.sleep(arg)</span>
<span id="cb1-7">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> arg</span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> iterable():</span>
<span id="cb1-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>):</span>
<span id="cb1-11">        time.sleep(i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb1-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">yield</span> i</span>
<span id="cb1-13"></span>
<span id="cb1-14"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> Pool(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> p: </span>
<span id="cb1-15">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(tqdm(p.imap(work_function, iterable(), chunksize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb1-16">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(results)</span>
<span id="cb1-17">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"done"</span>)</span></code></pre></div></div>
</div>
</section>
<section id="for-multithreading" class="level3">
<h3 class="anchored" data-anchor-id="for-multithreading">For multithreading:</h3>
<div id="cell-4" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> multiprocessing.pool <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> ThreadPool</span>
<span id="cb2-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> tqdm.auto <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> tqdm </span>
<span id="cb2-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> time</span>
<span id="cb2-4"></span>
<span id="cb2-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> work_function(arg): </span>
<span id="cb2-6">    time.sleep(arg)</span>
<span id="cb2-7">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> arg</span>
<span id="cb2-8"></span>
<span id="cb2-9"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> iterable():</span>
<span id="cb2-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>):</span>
<span id="cb2-11">        time.sleep(i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb2-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">yield</span> i</span>
<span id="cb2-13"></span>
<span id="cb2-14"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> ThreadPool(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> p: </span>
<span id="cb2-15">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(tqdm(p.imap(work_function, iterable(), chunksize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb2-16">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(results)</span>
<span id="cb2-17">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"done"</span>)</span></code></pre></div></div>
</div>
</section>
<section id="why-not-use-concurrent.futures" class="level2">
<h2 class="anchored" data-anchor-id="why-not-use-concurrent.futures">Why not use concurrent.futures ?</h2>
<p>Because this option does not allow for the <code>imap</code> multiprocessing. This means that all the iterable will be consumed before being sent to the workers. This could be fine, but sometimes, if the iterable takes time to compute or is a generator itself, you don’t want to consume it fully before starting the concurrent processing.</p>
<p>Try the code below. Notice that the loading bar starts appearing once the iterable has been consumed, which means it already reached the 13/20 iteration.</p>
<div id="cell-6" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> concurrent.futures <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> ProcessPoolExecutor</span>
<span id="cb3-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> tqdm.auto <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> tqdm </span>
<span id="cb3-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> time</span>
<span id="cb3-4"></span>
<span id="cb3-5"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> work_function(arg): </span>
<span id="cb3-6">    time.sleep(arg)</span>
<span id="cb3-7">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> arg</span>
<span id="cb3-8"></span>
<span id="cb3-9"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> iterable():</span>
<span id="cb3-10">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span>):</span>
<span id="cb3-11">        time.sleep(i<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>)</span>
<span id="cb3-12">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">yield</span> i</span>
<span id="cb3-13"></span>
<span id="cb3-14"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> ProcessPoolExecutor(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> p: </span>
<span id="cb3-15">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(tqdm(p.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">map</span>(work_function, iterable(), chunksize<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span>
<span id="cb3-16">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(results)</span>
<span id="cb3-17">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"done"</span>)</span></code></pre></div></div>
</div>
</section>
<section id="what-about-tqdm-process_map" class="level1">
<h1>What about tqdm process_map ?</h1>
<p><code>tqdm.contrib.concurrent.process_map</code> is essentially the same as the concurrent.futures behind the scenes, and will exhibit the same behavior.</p>
</section>
<section id="how-to-share-data-accross-workers" class="level1">
<h1>How to share data accross workers</h1>
<p>When you use thread workers, the data will simply be accessible to every thread directly. You can share it as a variable or as a global object.</p>
<div id="cell-10" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">some_global_data <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_parquet(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"huge_file.parquet"</span>)</span>
<span id="cb4-2"></span>
<span id="cb4-3"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> work_function(arg): </span>
<span id="cb4-4">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># `some_global_data` and `arg` are coming straight form the memory</span></span>
<span id="cb4-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># shared accross threads</span></span>
<span id="cb4-6">    s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> some_global_data[some_global_data.val <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> some_data].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb4-7">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s</span>
<span id="cb4-8"></span>
<span id="cb4-9"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> ThreadPoolExecutor(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> p: </span>
<span id="cb4-10">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(tqdm(p.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">map</span>(work_function, iterable())))</span></code></pre></div></div>
</div>
<p>However, when you use process workers, the data shared to workers as arguments is most often pickled and shared as a string. This could quickly be an issue. For 2 reasons: - Pickling a big object and sending it to every worker can be very expensive - This will copy the object many times, which could harm the available memory</p>
<p>The global data is shared directly from the memory, but it is copied to each worker. Which is also harming the memory.</p>
<p>So what can we do ? Not a lot, there are no great mechanics (that I am aware of) to share data accross process workers in Python. It’s basically a work in progress: https://lukasz.langa.pl/5d044f91-49c1-4170-aed1-62b6763e6ad0/</p>
<p>There is still a trick you can use, but with varying degrees of success. It’s to simply share the object globally accross the workers.</p>
<p>When Python starts a process, it’s going to fork the main process. This means that all data will be copied to the child processes. But it’s going to do a <em>copy on write</em>. This means that the underlying data will still be read from the main process (even from a child process) and will only be copied when it changes. This means that you can share the data accross all the processes withtout any memory increases.</p>
<p>Unfortunately, this assumption does not hold very long in Python. Since Python modifies object for reference counting (and other) reasons behind the scenes, the object will soon be copied to the child process even if you don’t explicity modify it yourself.</p>
<p>Still, I’ve noticed that this often works and saves me when processing a huge object with many processes. I would then do something like this:</p>
<div id="cell-13" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"></span>
<span id="cb5-2">big_object <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_parquet(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"big_file.parquet"</span>)</span>
<span id="cb5-3"></span>
<span id="cb5-4"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> work_function(arg): </span>
<span id="cb5-5">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># big object is in the global scope, and might not be copied to the</span></span>
<span id="cb5-6">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># child process for a while. </span></span>
<span id="cb5-7">    s <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> big_object[big_object.val <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> arg].<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()</span>
<span id="cb5-8">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> s</span>
<span id="cb5-9"></span>
<span id="cb5-10"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> ProcessPoolExecutor(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> p: </span>
<span id="cb5-11">    results <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">list</span>(tqdm(p.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">map</span>(work_function, iterable())))</span></code></pre></div></div>
</div>


</section>

 ]]></description>
  <category>programming</category>
  <guid>https://rcambier.github.io/posts/2022-04-01-multiprocessing.html</guid>
  <pubDate>Thu, 31 Mar 2022 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Cython for fast python</title>
  <link>https://rcambier.github.io/posts/2021-10-15-cython.html</link>
  <description><![CDATA[ 





<p>A philosophy I like to follow in Python is “Python is slow, let’s code everything and than see if we have any bottleneck we should replace with something else”. If you find such bottlenecks, you can replace them with a faster library or another language.</p>
<p>Replacing Python by Cython is one of the ways to speedup such bottlenecks.</p>
<p>Let’s try to code a correlation computation function in cython and compare it to Python or Numpy.</p>
<p>First, the easy numpy version</p>
<div id="cell-4" class="cell" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1">a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span>
<span id="cb1-2">b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1000</span></span></code></pre></div></div>
</div>
<div id="cell-5" class="cell" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb2-2"></span>
<span id="cb2-3"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit np.corrcoef(a,b)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>947 µs ± 113 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)</code></pre>
</div>
</div>
<p>Now, a simple pupre Python version.</p>
<div id="cell-7" class="cell" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> correlation(a_samples, b_samples): </span>
<span id="cb4-2">  a_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(a_samples) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(a_samples)</span>
<span id="cb4-3">  b_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(b_samples) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(b_samples)</span>
<span id="cb4-4"></span>
<span id="cb4-5">  diff_a_samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> a_mean <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> a <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> a_samples]</span>
<span id="cb4-6">  diff_b_samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> b_mean <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> b <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> b_samples]</span>
<span id="cb4-7"></span>
<span id="cb4-8">  covariance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>([diff_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> diff_b <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> diff_a, diff_b  <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">zip</span>(diff_a_samples, diff_b_samples)]) </span>
<span id="cb4-9">  variance_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(diff_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> diff_a <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> diff_a_samples)</span>
<span id="cb4-10">  variance_b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>(diff_b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span> <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> diff_b <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> diff_b_samples)</span>
<span id="cb4-11">  correlation <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> covariance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (variance_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> variance_b) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb4-12">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> correlation</span>
<span id="cb4-13"></span>
<span id="cb4-14"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit correlation(a,b)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>2.38 ms ± 85.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)</code></pre>
</div>
</div>
<p>Let’s now try to build a version in cython.</p>
<p>First, I have to transform the Python lists in C arrays. Then I compute the values one by one, making sure that I don’t leave any Python operations.</p>
<div id="cell-9" class="cell" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>load_ext cython</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>The cython extension is already loaded. To reload it, use:
  %reload_ext cython</code></pre>
</div>
</div>
<div id="cell-10" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%%</span>cython</span>
<span id="cb8-2"></span>
<span id="cb8-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> cython</span>
<span id="cb8-4"></span>
<span id="cb8-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> libc.stdlib cimport malloc, free</span>
<span id="cb8-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> libc.math cimport sqrt</span>
<span id="cb8-7"></span>
<span id="cb8-8"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> cython_correlation(a_samples, b_samples): </span>
<span id="cb8-9">  cdef <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> a_len <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(a_samples)</span>
<span id="cb8-10">  cdef <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> b_len <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(b_samples)</span>
<span id="cb8-11"></span>
<span id="cb8-12">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First we convert the Python lists into C arrays</span></span>
<span id="cb8-13">  a_samples_array <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*&gt;</span>malloc(a_len<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>cython.sizeof(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>))</span>
<span id="cb8-14">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> a_samples_array <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> NULL:</span>
<span id="cb8-15">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">MemoryError</span></span>
<span id="cb8-16">  b_samples_array <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*&gt;</span>malloc(b_len<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>cython.sizeof(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>))</span>
<span id="cb8-17">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> b_samples_array <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> NULL: </span>
<span id="cb8-18">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">MemoryError</span></span>
<span id="cb8-19">  </span>
<span id="cb8-20">  cdef <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-21">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len): </span>
<span id="cb8-22">    a_samples_array[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> a_samples[i]</span>
<span id="cb8-23">    b_samples_array[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b_samples[i]</span>
<span id="cb8-24"></span>
<span id="cb8-25">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Now we can compute the correlation</span></span>
<span id="cb8-26"></span>
<span id="cb8-27">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># First compute the sum of the arrays</span></span>
<span id="cb8-28">  cdef <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> a_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-29">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len):</span>
<span id="cb8-30">    a_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> a_samples_array[i]</span>
<span id="cb8-31"></span>
<span id="cb8-32">  cdef <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span> b_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-33">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len):</span>
<span id="cb8-34">    b_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> b_samples_array[i]</span>
<span id="cb8-35"></span>
<span id="cb8-36">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Then we can compute the means</span></span>
<span id="cb8-37">  cdef double a_mean</span>
<span id="cb8-38">  cdef double b_mean</span>
<span id="cb8-39">  a_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> a_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> a_len</span>
<span id="cb8-40">  b_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b_sum <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> b_len</span>
<span id="cb8-41">  </span>
<span id="cb8-42">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We then put the difference to the means in new arrays</span></span>
<span id="cb8-43">  diff_a_samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span>double <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*&gt;</span>malloc(a_len<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>cython.sizeof(double))</span>
<span id="cb8-44">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> diff_a_samples <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> NULL:</span>
<span id="cb8-45">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">MemoryError</span></span>
<span id="cb8-46">  diff_b_samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span>double <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*&gt;</span>malloc(b_len<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span>cython.sizeof(double))</span>
<span id="cb8-47">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> diff_b_samples <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">is</span> NULL: </span>
<span id="cb8-48">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">raise</span> <span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">MemoryError</span></span>
<span id="cb8-49"></span>
<span id="cb8-50">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len):</span>
<span id="cb8-51">    diff_a_samples[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> a_samples_array[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> a_mean</span>
<span id="cb8-52">    diff_b_samples[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> b_samples_array[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> b_mean</span>
<span id="cb8-53"></span>
<span id="cb8-54">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># This then allows us to easily compute the </span></span>
<span id="cb8-55">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># covariance and variances.  </span></span>
<span id="cb8-56">  cdef double covariance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-57">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len):</span>
<span id="cb8-58">    covariance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> diff_a_samples[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> diff_b_samples[i]</span>
<span id="cb8-59"></span>
<span id="cb8-60">  cdef double variance_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-61">  cdef double variance_b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-62">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(a_len):</span>
<span id="cb8-63">    variance_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> diff_a_samples[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-64">    variance_b <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> diff_b_samples[i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb8-65"></span>
<span id="cb8-66"></span>
<span id="cb8-67">  cdef double correlation <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb8-68">  cdef double variance_product <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (variance_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> variance_b)</span>
<span id="cb8-69">  correlation <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> covariance <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> sqrt(variance_product)</span>
<span id="cb8-70"></span>
<span id="cb8-71">  free(a_samples_array)</span>
<span id="cb8-72">  free(b_samples_array)</span>
<span id="cb8-73"></span>
<span id="cb8-74">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> correlation</span></code></pre></div></div>
</div>
<div id="cell-11" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span>timeit cython_correlation(a,b)</span>
<span id="cb9-2"></span>
<span id="cb9-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 10000 loops, best of 5: 154 µs per loop</span></span></code></pre></div></div>
</div>
<p>Nice! We got a 6X improvement compared to Numpy and 15X improvement compared to pure Python. Pretty cool.</p>



 ]]></description>
  <category>programming</category>
  <guid>https://rcambier.github.io/posts/2021-10-15-cython.html</guid>
  <pubDate>Thu, 14 Oct 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Bayesian riddle</title>
  <link>https://rcambier.github.io/posts/2021-09-27-bayesian-seattle.html</link>
  <description><![CDATA[ 





<p>Here is a statement I saw multiple times online. I also received it once during a Data Science interview. I was not sure at first how to fully solve it.</p>
<section id="the-problem" class="level1">
<h1>The problem:</h1>
<p>You’re about to get on a plane to Seattle. You want to know if you should bring an umbrella. You call 3 random friends of yours who live there and ask each independently if it’s raining. Each of your friends has a 2/3 chance of telling you the truth and a 1/3 chance of messing with you by lying. All 3 friends tell you that “Yes” it is raining. What is the probability that it’s actually raining in Seattle?</p>
</section>
<section id="a-first-way-to-solve-it" class="level1">
<h1>A first way to solve it</h1>
<p>You can solve the problem by applying the rule of bayes.</p>
<p>We are looking for <code>the probability that it rains, given that we had 3 yes</code>.</p>
<p>Through the bayes formula, this can be reformulated as <code>[the probability that we have 3 yes, given that it rains] * [the probability that it rains]  /  [the probability of having 3 yes]</code></p>
<section id="using-the-bayes-formula" class="level2">
<h2 class="anchored" data-anchor-id="using-the-bayes-formula">Using the bayes formula</h2>
<pre><code>We want to get p(rain | 3xYes)

p(rain | 3xYes) = (p(3xYes | rain ) * p(rain)) / P(3xYes)        # Bayes formula

p(rain | 3xYes) = (((2/3)^3 ) * p(rain)) / P(3xYes)              # If it rains, there is (2/3)^3 chances of having 3xYes        

p(rain | 3xYes) = ((8/27) * p(rain)) / P(3xYes)

p(rain | 3xYes) = ((8/27) * p(rain)) / (P(3xYes | rain) p(rain) + P(3xYes | not_rain) p (not_rain))      # The chances of having 3xYes are the chances 
                                                                                                         # of having it when it rains, added to chances 
                                                                                                         # of having it when it does not rain

p(rain | 3xYes) = ((8/27) * p(rain)) / (8/27) p(rain) + (1/27) p (not_rain))

p(rain | 3xYes) = ((8) * p(rain)) / (8 p(rain) + ( 1- p (rain) ))

p(rain | 3xYes) = ((8) * p(rain)) / (7 p(rain) + ( 1 ))</code></pre>
</section>
<section id="choosing-a-prior" class="level2">
<h2 class="anchored" data-anchor-id="choosing-a-prior">Choosing a prior</h2>
<p>Now that you did that, you are left with a formula that depends on the probability that it rains. You can choose a prior for what you consider your a-priori belief on the chances of raining, and plug it in.</p>
<p>For example, if you chose the prior p(rain) = 0.5, it gives.</p>
<p>p(rain | 3xYes) = 0.8888</p>
</section>
</section>
<section id="the-same-problem-as-code" class="level1">
<h1>The same problem as code</h1>
<p>You can use the python library PyMC3 to model such interactions. Here for example, I start with a <code>rain</code> prior distribution with a probability of 0.5. I then construct the probability of hearing a “yes” as a transformation of that rain distribution. This gives me a Bernouilly distribution of the event “hearing a yes”.</p>
<p>This is the event that is observed 3 times in the riddle. This is represented by the <code>observed = [1,1,1]</code>.</p>
<p>We can then solve that model with <code>pm.sample</code>, and sample the posterior distribution with <code>pm.sample_posterior_predictive</code>. This gives us an expected value for the rain of <code>0.8878</code> (this can vary as this is a random process). This is very close to what we computed above !</p>
<div id="cell-7" class="cell" data-execution_count="26">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> model: </span>
<span id="cb2-2">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># model the problem</span></span>
<span id="cb2-3">  rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) </span>
<span id="cb2-4">  p_yes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>rain) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> </span>
<span id="cb2-5">  likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"likelihood"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_yes, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) </span>
<span id="cb2-6"></span>
<span id="cb2-7">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># solve it</span></span>
<span id="cb2-8">  trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5_000</span>, chains<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, )</span>
<span id="cb2-9">  samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(trace, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>], samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10_000</span>)</span>
<span id="cb2-10">  </span>
<span id="cb2-11">pm.traceplot(trace)</span>
<span id="cb2-12"></span>
<span id="cb2-13"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posterior sampling of rain: "</span>, samples[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rain'</span>].mean())</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>FutureWarning: In v4.0, pm.sample will return an `arviz.InferenceData` object instead of a `MultiTrace` by default. You can pass return_inferencedata=True or return_inferencedata=False to be safe and silence this warning.
  trace = pm.sample(5_000, chains=2, )
Multiprocess sampling (2 chains in 4 jobs)
BinaryGibbsMetropolis: [rain]</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="12000" class="" max="12000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [12000/12000 00:01&lt;00:00 Sampling 2 chains, 0 divergences]
    </div>
    
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 2 chains for 1_000 tune and 5_000 draw iterations (2_000 + 10_000 draws total) took 11 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="10000" class="" max="10000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [10000/10000 00:00&lt;00:00]
    </div>
    
</div>
<div class="cell-output cell-output-stderr">
<pre><code>DeprecationWarning: The function `traceplot` from PyMC3 is just an alias for `plot_trace` from ArviZ. Please switch to `pymc3.plot_trace` or `arviz.plot_trace`.
  pm.traceplot(trace)
/Users/rodolphe_cambier/miniconda3/lib/python3.8/site-packages/arviz/data/io_pymc3.py:96: FutureWarning: Using `from_pymc3` without the model will be deprecated in a future release. Not using the model will return less accurate and less useful results. Make sure you use the model argument or call from_pymc3 within a model context.
  warnings.warn(</code></pre>
</div>
<div class="cell-output cell-output-stdout">
<pre><code>Posterior sampling of rain:  0.8953</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2021-09-27-bayesian-seattle_files/figure-html/cell-2-output-7.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="quantifying-uncertainty" class="level1">
<h1>Quantifying uncertainty</h1>
<p>However, that solution seems incomplete to me. When we say we have a prior of p(rain) = 0.5, what is our confidence in that prior ? If we are absolutely certain, then new information should not influence us. If 0.5 was just a random guess, than we should only use new information.</p>
<p>For that reason, I think it is more complete to state the problem using distributions to represent our belief.</p>
<p>In order to do that, I will replace the <code>0.5</code> value in the rain prior by another distribution. This distribution, that I call <code>p_rain</code>, will represent my belief in the different potential values of <code>p</code> in the Bernouilli distribution.</p>
<p>I can now use a Uniform distribution to represent that I don’t know anything. I can use a more informative prior to represent some knowledge. I can even use the output of another Bayesian model as the input for this one !</p>
<p>If I use the Uniform prior, we can see that it is similar to using the <code>p=0.5</code> from aboe in the Bernouilli distribution, and leads to an expected value of 0.889 for the rain event.</p>
<p>But what is very nice now, is that we have a visualisiation of our belief! In the <code>p_rain</code> graph that you see below, you can check for every value of the probability of rain what our belief is.</p>
<div id="cell-10" class="cell" data-execution_count="28">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pymc3 <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pm</span>
<span id="cb7-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> model: </span>
<span id="cb7-3">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># model the problem</span></span>
<span id="cb7-4">    p_rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Uniform(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"p_rain"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># this will now represent our belief</span></span>
<span id="cb7-5">    rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_rain) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># we plug it in here</span></span>
<span id="cb7-6">    p_yes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>rain) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span></span>
<span id="cb7-7">    likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"likelihood"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_yes, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb7-8"></span>
<span id="cb7-9">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># solve it</span></span>
<span id="cb7-10">    trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5_000</span>, chains<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb7-11">    samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(trace, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>], samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10_000</span>)</span>
<span id="cb7-12"></span>
<span id="cb7-13">pm.traceplot(trace)</span>
<span id="cb7-14"></span>
<span id="cb7-15"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posterior sampling of rain: "</span>, samples[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rain'</span>].mean())</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>FutureWarning: In v4.0, pm.sample will return an `arviz.InferenceData` object instead of a `MultiTrace` by default. You can pass return_inferencedata=True or return_inferencedata=False to be safe and silence this warning.
  trace = pm.sample(5_000, chains=2)
Multiprocess sampling (2 chains in 4 jobs)
CompoundStep
&gt;NUTS: [p_rain]
&gt;BinaryGibbsMetropolis: [rain]</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="12000" class="" max="12000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [12000/12000 00:04&lt;00:00 Sampling 2 chains, 0 divergences]
    </div>
    
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 2 chains for 1_000 tune and 5_000 draw iterations (2_000 + 10_000 draws total) took 14 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="10000" class="" max="10000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [10000/10000 00:00&lt;00:00]
    </div>
    
</div>
<div class="cell-output cell-output-stderr">
<pre><code>DeprecationWarning: The function `traceplot` from PyMC3 is just an alias for `plot_trace` from ArviZ. Please switch to `pymc3.plot_trace` or `arviz.plot_trace`.
  pm.traceplot(trace)
/Users/rodolphe_cambier/miniconda3/lib/python3.8/site-packages/arviz/data/io_pymc3.py:96: FutureWarning: Using `from_pymc3` without the model will be deprecated in a future release. Not using the model will return less accurate and less useful results. Make sure you use the model argument or call from_pymc3 within a model context.
  warnings.warn(</code></pre>
</div>
<div class="cell-output cell-output-stdout">
<pre><code>Posterior sampling of rain:  0.8882</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2021-09-27-bayesian-seattle_files/figure-html/cell-3-output-7.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
</section>
<section id="using-an-informative-prior" class="level1">
<h1>Using an informative prior</h1>
<p>We can also use a prior where we include some a-priori knowledge. For example, if we know that it rained 150 days last year, we could use a beta distribution with alpha=150 and beta=215 to represent that knowledge. (I don’t explain here why such a distribution would encode that knowledge. It could for example be the posterior of a previous modelling effort.)</p>
<p>The chances of rain are now 0.8445. This is less than before. Notice also how our <code>p_rain</code> distribution represents a different belief. Way more centered around 0.41.</p>
<div id="cell-13" class="cell" data-execution_count="21">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> pm.Model() <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> model: </span>
<span id="cb12-2">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># model the problem</span></span>
<span id="cb12-3">  p_rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Beta(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"p_rain"</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">215</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># This encodes our beliefs of how much it rains in Seattle</span></span>
<span id="cb12-4">  rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_rain) </span>
<span id="cb12-5">  p_yes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> rain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>rain) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> </span>
<span id="cb12-6">  likelihood <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.Bernoulli(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"likelihood"</span>, p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>p_yes, observed<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]) </span>
<span id="cb12-7"></span>
<span id="cb12-8">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># solve it</span></span>
<span id="cb12-9">  trace <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5_000</span>, chains<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb12-10">  samples <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pm.sample_posterior_predictive(trace, var_names<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rain"</span>], samples<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10_000</span>)</span>
<span id="cb12-11">  <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posterior sampling of rain: "</span>, samples[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'rain'</span>].mean())</span>
<span id="cb12-12">pm.traceplot(trace)</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>FutureWarning: In v4.0, pm.sample will return an `arviz.InferenceData` object instead of a `MultiTrace` by default. You can pass return_inferencedata=True or return_inferencedata=False to be safe and silence this warning.
  trace = pm.sample(5_000, chains=2)
Multiprocess sampling (2 chains in 4 jobs)
CompoundStep
&gt;NUTS: [p_rain]
&gt;BinaryGibbsMetropolis: [rain]</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="12000" class="" max="12000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [12000/12000 00:04&lt;00:00 Sampling 2 chains, 0 divergences]
    </div>
    
</div>
<div class="cell-output cell-output-stderr">
<pre><code>Sampling 2 chains for 1_000 tune and 5_000 draw iterations (2_000 + 10_000 draws total) took 11 seconds.</code></pre>
</div>
<div class="cell-output cell-output-display">

    <div>
        <style>
            /* Turns off some styling */
            progress {
                /* gets rid of default border in Firefox and Opera. */
                border: none;
                /* Needs to be in here for Safari polyfill so background images work as expected. */
                background-size: auto;
            }
            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {
                background: #F44336;
            }
        </style>
      <progress value="10000" class="" max="10000" style="width:300px; height:20px; vertical-align: middle;"></progress>
      100.00% [10000/10000 00:00&lt;00:00]
    </div>
    
</div>
<div class="cell-output cell-output-stdout">
<pre><code>Posterior sampling of rain:  0.849</code></pre>
</div>
<div class="cell-output cell-output-stderr">
<pre><code>DeprecationWarning: The function `traceplot` from PyMC3 is just an alias for `plot_trace` from ArviZ. Please switch to `pymc3.plot_trace` or `arviz.plot_trace`.
  pm.traceplot(trace)
/Users/rodolphe_cambier/miniconda3/lib/python3.8/site-packages/arviz/data/io_pymc3.py:96: FutureWarning: Using `from_pymc3` without the model will be deprecated in a future release. Not using the model will return less accurate and less useful results. Make sure you use the model argument or call from_pymc3 within a model context.
  warnings.warn(</code></pre>
</div>
<div class="cell-output cell-output-display" data-execution_count="21">
<pre><code>array([[&lt;AxesSubplot:title={'center':'rain'}&gt;,
        &lt;AxesSubplot:title={'center':'rain'}&gt;],
       [&lt;AxesSubplot:title={'center':'p_rain'}&gt;,
        &lt;AxesSubplot:title={'center':'p_rain'}&gt;]], dtype=object)</code></pre>
</div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2021-09-27-bayesian-seattle_files/figure-html/cell-4-output-8.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>


</section>

 ]]></description>
  <category>programming</category>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-27-bayesian-seattle.html</guid>
  <pubDate>Sun, 26 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Random forest</title>
  <link>https://rcambier.github.io/posts/2021-09-20-random-forest.html</link>
  <description><![CDATA[ 





<div id="cell-1" class="cell" data-execution_count="75">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.datasets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> load_breast_cancer</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.tree <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> DecisionTreeClassifier</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> f1_score</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> random</span></code></pre></div></div>
</div>
<div id="cell-2" class="cell" data-execution_count="76">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> load_breast_cancer(return_X_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb2-2"></span>
<span id="cb2-3">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>])</span>
<span id="cb2-4">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell" data-execution_count="77">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">features <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> X.columns</span>
<span id="cb3-2">n_features <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(features)</span>
<span id="cb3-3">n_features_to_consider <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">round</span>(np.sqrt(n_features)))</span>
<span id="cb3-4">features, n_features_to_consider</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="77">
<pre><code>(RangeIndex(start=0, stop=30, step=1), 5)</code></pre>
</div>
</div>
<div id="cell-4" class="cell" data-execution_count="78">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">trees <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb5-2"></span>
<span id="cb5-3"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>): </span>
<span id="cb5-4">    feature_subset <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> random.sample(features.values.tolist(), k<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>n_features_to_consider)</span>
<span id="cb5-5">    tree <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> DecisionTreeClassifier(max_depth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>)</span>
<span id="cb5-6">    sampling_index <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> X.sample(frac<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, replace<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>).index <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># RANDOMly select data to train on </span></span>
<span id="cb5-7">    tree.fit(X.loc[sampling_index, feature_subset], y.loc[sampling_index]) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># RANDOMly select features to train on</span></span>
<span id="cb5-8">    trees.append((tree, feature_subset))</span></code></pre></div></div>
</div>
<div id="cell-5" class="cell" data-execution_count="79">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">rf_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.mean([tree.predict(X.loc[:, features]) <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> tree, features <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> trees], axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span></code></pre></div></div>
</div>
<div id="cell-6" class="cell" data-execution_count="80">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The precision of a single tree</span></span>
<span id="cb7-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>):</span>
<span id="cb7-3">    one_tree_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> trees[i][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>].predict(X.loc[:, trees[i][<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]])</span>
<span id="cb7-4">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(f1_score(y, one_tree_predictions) )</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>0.9195088676671215
0.9346879535558781
0.9439124487004104
0.9482517482517482
0.9410187667560322</code></pre>
</div>
</div>
<div id="cell-7" class="cell" data-execution_count="81">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The precision of the forest</span></span>
<span id="cb9-2">f1_score(y, (rf_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="81">
<pre><code>0.9665738161559889</code></pre>
</div>
</div>



 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-20-random-forest.html</guid>
  <pubDate>Sun, 19 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Word embedding</title>
  <link>https://rcambier.github.io/posts/2021-09-19-word-embeddings.html</link>
  <description><![CDATA[ 





<p>We will use the following method to build simple word embeddings.</p>
<p>We create a matrix where we put the co-occurences of all the words.</p>
<p>We factorize that matrix.</p>
<div id="cell-2" class="cell" data-execution_count="207">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell" data-execution_count="208">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">sentences <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [</span>
<span id="cb2-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a dog is a sweet animal"</span>,</span>
<span id="cb2-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a cat is a mean beast"</span>, </span>
<span id="cb2-4">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a human is a different creature"</span>,</span>
<span id="cb2-5">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a cat is a nice pet"</span>,</span>
<span id="cb2-6">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"a dog is a nice pet also"</span></span>
<span id="cb2-7">]</span></code></pre></div></div>
</div>
<div id="cell-4" class="cell" data-execution_count="209">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> collections <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> defaultdict</span>
<span id="cb3-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> itertools <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> product, combinations</span>
<span id="cb3-3"></span>
<span id="cb3-4">Nij_counts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> defaultdict(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>)</span>
<span id="cb3-5"></span>
<span id="cb3-6">N <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-7">k <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The window size</span></span>
<span id="cb3-8">window_size <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb3-9"></span>
<span id="cb3-10">vocab <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">set</span>()</span>
<span id="cb3-11"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> sentence <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> sentences: </span>
<span id="cb3-12">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> idx_a, word_a <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(sentence.split(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)): </span>
<span id="cb3-13">        start <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> idx_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> </span>
<span id="cb3-14">        stop <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> idx_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span></span>
<span id="cb3-15">        <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> word_b <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> sentence.split(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">" "</span>)[start:stop]:</span>
<span id="cb3-16">            <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> word_a <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> word_b:</span>
<span id="cb3-17">              <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">continue</span></span>
<span id="cb3-18">            Nij_counts[(word_a, word_b)] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-19">            N <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span></span>
<span id="cb3-20">            vocab.add(word_a)</span>
<span id="cb3-21">            vocab.add(word_b)</span>
<span id="cb3-22"></span>
<span id="cb3-23">Ni_counts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> defaultdict(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>)</span>
<span id="cb3-24">Nj_counts <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> defaultdict(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>)</span>
<span id="cb3-25"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> (i,j), N_ij <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> Nij_counts.items():</span>
<span id="cb3-26">  Ni_counts[ i ] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> N_ij</span>
<span id="cb3-27">  Nj_counts[ j ] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+=</span> N_ij</span>
<span id="cb3-28"></span>
<span id="cb3-29"></span>
<span id="cb3-30">Pi <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {k:v<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>N <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k,v <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> Ni_counts.items()}</span>
<span id="cb3-31">Pj <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {k:v<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>N <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k,v <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> Nj_counts.items()}</span>
<span id="cb3-32">Pij <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {k:v<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>N <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> k,v <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> Nij_counts.items()}</span></code></pre></div></div>
</div>
<div id="cell-5" class="cell" data-execution_count="220">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">pmi_matrix <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.zeros((<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(vocab), <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(vocab)))</span>
<span id="cb4-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i, word_i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(vocab): </span>
<span id="cb4-3">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> j, word_j <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(vocab):</span>
<span id="cb4-4">        pmi_matrix[i][j] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.log( Pij.get((word_i, word_j), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (Pi[word_i] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> Pj[word_j] ))  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#- np.log(k)</span></span>
<span id="cb4-5"></span>
<span id="cb4-6">pmi_matrix[ pmi_matrix <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&lt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb4-7">pd.DataFrame(pmi_matrix, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>vocab, index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>vocab)</span></code></pre></div></div>
<div class="cell-output cell-output-stderr">
<pre><code>RuntimeWarning: divide by zero encountered in log
  pmi_matrix[i][j] = np.log( Pij.get((word_i, word_j), 0) / (Pi[word_i] * Pj[word_j] ))  #- np.log(k)</code></pre>
</div>
<div class="cell-output cell-output-display" data-execution_count="220">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">cat</th>
<th data-quarto-table-cell-role="th">different</th>
<th data-quarto-table-cell-role="th">animal</th>
<th data-quarto-table-cell-role="th">dog</th>
<th data-quarto-table-cell-role="th">sweet</th>
<th data-quarto-table-cell-role="th">nice</th>
<th data-quarto-table-cell-role="th">is</th>
<th data-quarto-table-cell-role="th">beast</th>
<th data-quarto-table-cell-role="th">pet</th>
<th data-quarto-table-cell-role="th">creature</th>
<th data-quarto-table-cell-role="th">also</th>
<th data-quarto-table-cell-role="th">a</th>
<th data-quarto-table-cell-role="th">mean</th>
<th data-quarto-table-cell-role="th">human</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">cat</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.875469</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">different</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">animal</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">dog</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.875469</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">sweet</th>
<td>0.000000</td>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">nice</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>2.079442</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">is</th>
<td>1.568616</td>
<td>0.000000</td>
<td>0.000000</td>
<td>1.568616</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>1.568616</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">beast</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">pet</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>2.079442</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>2.772589</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">creature</th>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">also</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>2.772589</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">a</th>
<td>0.000000</td>
<td>0.875469</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.875469</td>
<td>0.875469</td>
<td>0.875469</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.875469</td>
<td>0.000000</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">mean</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>3.178054</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">human</th>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.875469</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.000000</td>
<td>0.470004</td>
<td>0.000000</td>
<td>0.000000</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-6" class="cell" data-execution_count="221">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">U, sigma, Vt <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.svd(pmi_matrix)</span>
<span id="cb6-2">word_embeddings <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> U <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> sigma</span></code></pre></div></div>
</div>
<div id="cell-7" class="cell" data-execution_count="222">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">pd.DataFrame(U <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> sigma, index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>vocab)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="222">
<div>


<table class="dataframe caption-top table table-sm table-striped small" data-border="1">
<thead>
<tr class="header">
<th data-quarto-table-cell-role="th"></th>
<th data-quarto-table-cell-role="th">0</th>
<th data-quarto-table-cell-role="th">1</th>
<th data-quarto-table-cell-role="th">2</th>
<th data-quarto-table-cell-role="th">3</th>
<th data-quarto-table-cell-role="th">4</th>
<th data-quarto-table-cell-role="th">5</th>
<th data-quarto-table-cell-role="th">6</th>
<th data-quarto-table-cell-role="th">7</th>
<th data-quarto-table-cell-role="th">8</th>
<th data-quarto-table-cell-role="th">9</th>
<th data-quarto-table-cell-role="th">10</th>
<th data-quarto-table-cell-role="th">11</th>
<th data-quarto-table-cell-role="th">12</th>
<th data-quarto-table-cell-role="th">13</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<th data-quarto-table-cell-role="th">cat</th>
<td>-0.125528</td>
<td>-0.082352</td>
<td>-0.056639</td>
<td>-0.154977</td>
<td>1.770129e-16</td>
<td>-3.472768e-16</td>
<td>2.250913e-16</td>
<td>-5.898841e-17</td>
<td>0.103016</td>
<td>0.950212</td>
<td>-0.152147</td>
<td>0.030330</td>
<td>-5.896389e-17</td>
<td>-8.886491e-18</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">different</th>
<td>-0.036187</td>
<td>-0.397648</td>
<td>-0.036706</td>
<td>-1.837233</td>
<td>-8.467333e-01</td>
<td>-5.539689e-01</td>
<td>-2.376266e+00</td>
<td>-2.507431e-01</td>
<td>-0.210186</td>
<td>-0.083805</td>
<td>0.012984</td>
<td>0.002184</td>
<td>1.223874e-32</td>
<td>6.412951e-34</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">animal</th>
<td>-1.399474</td>
<td>0.009853</td>
<td>-1.144664</td>
<td>0.061518</td>
<td>-2.343343e+00</td>
<td>9.292952e-01</td>
<td>6.095900e-01</td>
<td>8.310343e-02</td>
<td>-0.019071</td>
<td>-0.265032</td>
<td>-0.152087</td>
<td>0.016544</td>
<td>-4.343979e-33</td>
<td>-1.361987e-33</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">dog</th>
<td>-0.125528</td>
<td>-0.082352</td>
<td>-0.056639</td>
<td>-0.154977</td>
<td>-1.407845e-15</td>
<td>1.465704e-16</td>
<td>3.570005e-16</td>
<td>5.723916e-16</td>
<td>0.103016</td>
<td>0.950212</td>
<td>-0.152147</td>
<td>0.030330</td>
<td>-6.870092e-17</td>
<td>8.445844e-18</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">sweet</th>
<td>-0.036187</td>
<td>-0.397648</td>
<td>-0.036706</td>
<td>-1.837233</td>
<td>7.382504e-02</td>
<td>-8.159933e-01</td>
<td>1.762162e+00</td>
<td>-1.719547e+00</td>
<td>-0.210186</td>
<td>-0.083805</td>
<td>0.012984</td>
<td>0.002184</td>
<td>1.219035e-32</td>
<td>1.377710e-33</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">nice</th>
<td>-0.036590</td>
<td>-2.088265</td>
<td>0.044529</td>
<td>0.326219</td>
<td>1.017894e-15</td>
<td>-1.242717e-15</td>
<td>-1.230756e-15</td>
<td>1.167800e-15</td>
<td>0.001746</td>
<td>0.082020</td>
<td>-0.166661</td>
<td>-0.199703</td>
<td>4.333732e-31</td>
<td>-4.584136e-33</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">is</th>
<td>-0.019859</td>
<td>-0.171200</td>
<td>-0.013028</td>
<td>-0.387229</td>
<td>-1.320726e-15</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>0.000000e+00</td>
<td>2.720756</td>
<td>-0.141082</td>
<td>0.018090</td>
<td>0.002996</td>
<td>-4.170220e-31</td>
<td>0.000000e+00</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">beast</th>
<td>-1.399474</td>
<td>0.009853</td>
<td>-1.144664</td>
<td>0.061518</td>
<td>6.504474e-01</td>
<td>-2.190208e+00</td>
<td>1.499843e-01</td>
<td>1.220968e+00</td>
<td>-0.019071</td>
<td>-0.265032</td>
<td>-0.152087</td>
<td>0.016544</td>
<td>2.060855e-32</td>
<td>3.835476e-33</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">pet</th>
<td>-2.170444</td>
<td>0.092111</td>
<td>2.695585</td>
<td>-0.024651</td>
<td>-8.828112e-16</td>
<td>-1.487032e-15</td>
<td>-1.830279e-15</td>
<td>2.331132e-15</td>
<td>-0.007100</td>
<td>-0.134905</td>
<td>-0.083034</td>
<td>0.009092</td>
<td>7.846944e-33</td>
<td>2.243644e-34</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">creature</th>
<td>-1.399474</td>
<td>0.009853</td>
<td>-1.144664</td>
<td>0.061518</td>
<td>1.692895e+00</td>
<td>1.260913e+00</td>
<td>-7.595744e-01</td>
<td>-1.304071e+00</td>
<td>-0.019071</td>
<td>-0.265032</td>
<td>-0.152087</td>
<td>0.016544</td>
<td>-1.541832e-32</td>
<td>1.128522e-33</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">also</th>
<td>-0.036888</td>
<td>-2.694710</td>
<td>0.065685</td>
<td>0.599222</td>
<td>1.951203e-15</td>
<td>-1.874111e-15</td>
<td>-2.216379e-15</td>
<td>1.708128e-15</td>
<td>-0.091009</td>
<td>-0.110411</td>
<td>0.133121</td>
<td>0.151153</td>
<td>-3.268027e-31</td>
<td>1.746002e-33</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">a</th>
<td>-1.662965</td>
<td>0.007278</td>
<td>-0.615354</td>
<td>0.016051</td>
<td>1.023148e-15</td>
<td>1.197922e-15</td>
<td>-3.519035e-16</td>
<td>-9.126765e-16</td>
<td>0.017296</td>
<td>0.637811</td>
<td>0.526446</td>
<td>-0.059639</td>
<td>-8.140555e-34</td>
<td>9.449184e-34</td>
</tr>
<tr class="odd">
<th data-quarto-table-cell-role="th">mean</th>
<td>-0.036187</td>
<td>-0.397648</td>
<td>-0.036706</td>
<td>-1.837233</td>
<td>7.729083e-01</td>
<td>1.369962e+00</td>
<td>6.141042e-01</td>
<td>1.970290e+00</td>
<td>-0.210186</td>
<td>-0.083805</td>
<td>0.012984</td>
<td>0.002184</td>
<td>-1.920898e-32</td>
<td>-7.791129e-35</td>
</tr>
<tr class="even">
<th data-quarto-table-cell-role="th">human</th>
<td>-0.125528</td>
<td>-0.082352</td>
<td>-0.056639</td>
<td>-0.154977</td>
<td>-8.785929e-16</td>
<td>8.522401e-16</td>
<td>4.452092e-16</td>
<td>-3.537999e-16</td>
<td>0.103016</td>
<td>0.950212</td>
<td>-0.152147</td>
<td>0.030330</td>
<td>1.276648e-16</td>
<td>4.406470e-19</td>
</tr>
</tbody>
</table>

</div>
</div>
</div>
<div id="cell-8" class="cell" data-execution_count="223">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">U_embeddings <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {word: (U <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> sigma)[index, :] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> index, word <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(vocab)}</span>
<span id="cb8-2">V_embeddings <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> {word: Vt[index, :] <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> index, word <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">enumerate</span>(vocab)}</span></code></pre></div></div>
</div>
<div id="cell-9" class="cell" data-execution_count="224">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">(U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cat'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'dog'</span>],</span>
<span id="cb9-2">U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cat'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'is'</span>],</span>
<span id="cb9-3">U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'cat'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> U_embeddings[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'human'</span>])</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="224">
<pre><code>(0.987348921588194, 0.22090341150415482, 0.987348921588194)</code></pre>
</div>
</div>



 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-19-word-embeddings.html</guid>
  <pubDate>Sat, 18 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Gradient Boosting trees</title>
  <link>https://rcambier.github.io/posts/2021-09-18-boosting-trees.html</link>
  <description><![CDATA[ 





<section id="boosting-trees" class="level1">

<section id="regression" class="level2">

<div id="cell-3" class="cell" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.datasets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> load_wine, load_breast_cancer, load_boston</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.tree <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> DecisionTreeClassifier, DecisionTreeRegressor</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.model_selection <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> cross_val_score</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> f1_score, mean_absolute_error</span>
<span id="cb1-7"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.ensemble._gb_losses <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> BinomialDeviance</span></code></pre></div></div>
</div>
<div id="cell-4" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="7d61722f-0f00-4234-8542-71f70d45e5b8" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> load_boston(return_X_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb2-2"></span>
<span id="cb2-3">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>])</span>
<span id="cb2-4">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb2-5"></span>
<span id="cb2-6">initial_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> [y.mean()[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(y)</span>
<span id="cb2-7"></span>
<span id="cb2-8"></span>
<span id="cb2-9"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error with mean: "</span>, mean_absolute_error(y, initial_predictions))</span>
<span id="cb2-10"></span>
<span id="cb2-11">learning_rate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span></span>
<span id="cb2-12"></span>
<span id="cb2-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Let's build some trees !</span></span>
<span id="cb2-14">predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> initial_predictions</span>
<span id="cb2-15">gradient_of_loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (y.values.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> predictions_so_far)</span>
<span id="cb2-16">trees <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb2-17"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>): </span>
<span id="cb2-18"></span>
<span id="cb2-19">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Train a tree on the latest residuals</span></span>
<span id="cb2-20">  tree <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> DecisionTreeRegressor(max_depth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb2-21">  tree.fit(X, gradient_of_loss)</span>
<span id="cb2-22">  trees.append(tree)</span>
<span id="cb2-23"></span>
<span id="cb2-24">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the predictions of the trees</span></span>
<span id="cb2-25">  predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> learning_rate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> tree.predict(X).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Each tree tries to predict the error. </span></span>
<span id="cb2-26"></span>
<span id="cb2-27">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get the new residuals. This is what we fit the next tree on</span></span>
<span id="cb2-28">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Residuals are the gradient of the loss with respect to the previous trees predictions. </span></span>
<span id="cb2-29">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># In this case the loss is MSE: </span></span>
<span id="cb2-30">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># loss = (y_hat - y) ** 2</span></span>
<span id="cb2-31">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># loss_gradient_with_respect_to_y = - 2 * (y_hat - y) = 2 * (y - y_hat)</span></span>
<span id="cb2-32">  gradient_of_loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (y.values.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> predictions_so_far)</span>
<span id="cb2-33"></span>
<span id="cb2-34"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Error with boosting: "</span>, mean_absolute_error(y, predictions_so_far))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Error with mean:  6.647207423956011
Error with boosting:  3.3369627690621475</code></pre>
</div>
</div>
</section>
<section id="classification" class="level2">

<div id="cell-6" class="cell" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.datasets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> load_wine, load_breast_cancer</span>
<span id="cb4-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb4-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb4-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.tree <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> DecisionTreeClassifier, DecisionTreeRegressor</span>
<span id="cb4-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.model_selection <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> cross_val_score</span>
<span id="cb4-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> f1_score</span></code></pre></div></div>
</div>
<div id="cell-7" class="cell">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> update_lead_values(tree): </span>
<span id="cb5-2">    </span></code></pre></div></div>
</div>
<div id="cell-8" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> load_breast_cancer(return_X_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)</span>
<span id="cb6-2"></span>
<span id="cb6-3">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>])</span>
<span id="cb6-4">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(raw[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb6-5"></span>
<span id="cb6-6">p <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> y.mean()[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>]</span>
<span id="cb6-7">initial_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([np.log(p<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>p))] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(y))<span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Initial prediction is logodds of y</span></span>
<span id="cb6-8"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Initial score: "</span>, f1_score(y, (initial_predictions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb6-9"></span>
<span id="cb6-10"></span>
<span id="cb6-11">learning_rate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span></span>
<span id="cb6-12"></span>
<span id="cb6-13"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> sigmoid(x): </span>
<span id="cb6-14">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> np.exp(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>x))</span>
<span id="cb6-15"></span>
<span id="cb6-16">y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sigmoid(initial_predictions)</span>
<span id="cb6-17">gradient_of_loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y.values.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb6-18"></span>
<span id="cb6-19"></span>
<span id="cb6-20">trees <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> []</span>
<span id="cb6-21">predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> initial_predictions</span>
<span id="cb6-22"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>): </span>
<span id="cb6-23"></span>
<span id="cb6-24">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Train a tree on the latest residuals</span></span>
<span id="cb6-25">  tree <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> DecisionTreeRegressor(max_depth<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb6-26">  tree.fit(X, gradient_of_loss)</span>
<span id="cb6-27"></span>
<span id="cb6-28">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># </span><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">TODO</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">: Here you need to update the values of the tree leaves</span></span>
<span id="cb6-29">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># to equal a specific value each. </span></span>
<span id="cb6-30"></span>
<span id="cb6-31">  trees.append(tree)</span>
<span id="cb6-32"></span>
<span id="cb6-33">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the predictions of the trees</span></span>
<span id="cb6-34">  predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> predictions_so_far <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> learning_rate <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> tree.predict(X).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) </span>
<span id="cb6-35"></span>
<span id="cb6-36">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The gradient of the loss with respect to y_hat</span></span>
<span id="cb6-37">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># is y_hat - y. Neat.</span></span>
<span id="cb6-38">  y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sigmoid(predictions_so_far)</span>
<span id="cb6-39">  gradient_of_loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>  y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y.values.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb6-40"></span>
<span id="cb6-41"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Score with boosting: "</span>, f1_score(y, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (sigmoid(predictions_so_far) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>)))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Initial score:  0.7710583153347732
Score with boosting:  0.922279792746114</code></pre>
</div>
</div>
<div id="cell-9" class="cell" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">trees[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>].tree_</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="17">
<pre><code>&lt;sklearn.tree._tree.Tree at 0x7faeec0f2180&gt;</code></pre>
</div>
</div>


</section>
</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-18-boosting-trees.html</guid>
  <pubDate>Fri, 17 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>SVD</title>
  <link>https://rcambier.github.io/posts/2021-09-16-svd.html</link>
  <description><![CDATA[ 





<div id="cell-1" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> scipy.linalg <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> eig</span>
<span id="cb1-4"></span>
<span id="cb1-5">raw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://raw.githubusercontent.com/smanihwr/ml-latest-small/master/ratings.csv"</span>)</span>
<span id="cb1-6">user_item_interactions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> raw.pivot(values<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rating"</span>, columns<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"movieId"</span>, index<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"userId"</span>)</span>
<span id="cb1-7">user_item_interactions <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> user_item_interactions.fillna(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span></code></pre></div></div>
</div>
<div id="cell-2" class="cell" data-execution_count="14">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">A <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.array([</span>
<span id="cb2-2">              [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>],</span>
<span id="cb2-3">              [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>],</span>
<span id="cb2-4">              [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>],</span>
<span id="cb2-5">              [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>],</span>
<span id="cb2-6">              [<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span>]</span>
<span id="cb2-7">])</span>
<span id="cb2-8"></span>
<span id="cb2-9"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Get the singular vectors of V from the eigenvectors of the covariance matrix</span></span>
<span id="cb2-10">V_eigen_values, V_unordered <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.eig(A.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> A) </span>
<span id="cb2-11"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># We need to sort them by the magnitude of the eigenvalues</span></span>
<span id="cb2-12">idx_V <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.argsort(V_eigen_values)[::<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>] </span>
<span id="cb2-13">V <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> V_unordered[:,idx_V]</span>
<span id="cb2-14"></span>
<span id="cb2-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Compute the singular vectors of U. We could also use the eingenvectors, but we need to base it on V to have the correct vector directions.</span></span>
<span id="cb2-16"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># U_eigen_values, U = np.linalg.eig(A @ A.T) this is similar but leads to incorrect directions for the eigenvectors</span></span>
<span id="cb2-17">U <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> A <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> V <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> np.linalg.norm(A <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> V, axis<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>)</span>
<span id="cb2-18"></span>
<span id="cb2-19"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The matrix D is the square root of the eigenvalues.</span></span>
<span id="cb2-20">D <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.sqrt(np.around(V_eigen_values[idx_V], decimals<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>))</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="67d054d4-84e2-455f-f31e-e79dfbc2a656" data-execution_count="15">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">np.around(np.matrix(U) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.diag(D) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.matrix(V.T), decimals<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="15">
<pre><code>array([[ 5.,  5., -0.,  1.],
       [ 5.,  5.,  0., -0.],
       [ 0.,  1.,  5.,  5.],
       [-0.,  0.,  5.,  5.],
       [ 0., -0.,  3.,  5.]])</code></pre>
</div>
</div>
<div id="cell-4" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="ad1cb6ef-9361-4c77-e8e1-551a9858250f" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">U_, D_, Vt_ <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.svd(A)</span>
<span id="cb5-2">np.around(np.matrix(U_) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.vstack((np.diag(D_), np.zeros((<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(Vt_))))) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.matrix(Vt_), decimals<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="8">
<pre><code>array([[ 5.,  5., -0.,  1.],
       [ 5.,  5., -0., -0.],
       [-0.,  1.,  5.,  5.],
       [-0.,  0.,  5.,  5.],
       [-0.,  0.,  3.,  5.]])</code></pre>
</div>
</div>
<section id="truncated-svd" class="level2">
<h2 class="anchored" data-anchor-id="truncated-svd">Truncated SVD</h2>
<p>Truncate the SVD to 2 components by only keeping the two bigest eigenvalues</p>
<div id="cell-7" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="31af80f9-048b-4215-c522-17e3f5796668" data-execution_count="16">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">np.matrix(U[:, :<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>])</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="16">
<pre><code>matrix([[-0.23093819, -0.66810948],
        [-0.16863574, -0.68636674],
        [-0.59892473,  0.13274366],
        [-0.57986295,  0.20070102],
        [-0.47252267,  0.15693514]])</code></pre>
</div>
</div>
<div id="cell-8" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;}}" data-outputid="9c8279b2-b2dd-4e8b-88d2-453ce730f214" data-execution_count="17">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">np.around(np.matrix(U[:, :<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.diag(D[:<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> np.matrix(V[:,:<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>].T), decimals<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="17">
<pre><code>array([[ 5. ,  5. ,  0.3,  0.8],
       [ 5. ,  5. , -0.2,  0.2],
       [ 0.3,  0.7,  4.7,  5.3],
       [-0.2,  0.2,  4.7,  5.3],
       [-0.1,  0.2,  3.8,  4.3]])</code></pre>
</div>
</div>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-16-svd.html</guid>
  <pubDate>Wed, 15 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>PCA</title>
  <link>https://rcambier.github.io/posts/2021-09-15-pca.html</link>
  <description><![CDATA[ 





<section id="pca" class="level1">
<h1>PCA</h1>
<p>The principal components are the eigenvectors+eigenvalues of the Covariance matrix of our data.</p>
<p>This is because we are looking for the “Direction of stretching and how much streching happens” regarding the variance of our data.</p>
<div id="cell-2" class="cell" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.datasets <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> load_digits</span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> seaborn <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sns</span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.decomposition <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> PCA</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd </span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np</span>
<span id="cb1-6"></span>
<span id="cb1-7">digits <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.DataFrame(load_digits()[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'data'</span>])</span>
<span id="cb1-8">classes <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> load_digits(return_X_y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>)[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span></code></pre></div></div>
</div>
<div id="cell-3" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:282}}" data-outputid="9e6491ac-8fe9-4d3e-e564-686593772dff" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">low_dim_digits <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> PCA(n_components<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>).fit_transform(digits)</span>
<span id="cb2-2">sns.scatterplot(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>low_dim_digits[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>], y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>low_dim_digits[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], hue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>classes)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2021-09-15-pca_files/figure-html/cell-3-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>
<div id="cell-4" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;colab&quot;,&quot;value&quot;:{&quot;base_uri&quot;:&quot;https://localhost:8080/&quot;,&quot;height&quot;:285}}" data-outputid="7cd5a90d-8bc4-4297-ad40-7febb37216fb" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">digits_normed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> digits <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> digits.mean()</span>
<span id="cb3-2"></span>
<span id="cb3-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># compute the covariance matrix </span></span>
<span id="cb3-4">cov_matrix <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> digits_normed.T  <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> digits_normed <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(digits_normed) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># same as digits_normed.cov()</span></span>
<span id="cb3-5">eigen_values, eigen_vectors <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.eig(cov_matrix)</span>
<span id="cb3-6">eigen_values, eigen_vectors</span>
<span id="cb3-7"></span>
<span id="cb3-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sort eigen values end eigen vectors</span></span>
<span id="cb3-9">sorted_index <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.argsort(eigen_values)[::<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>]</span>
<span id="cb3-10">sorted_eigenvalue <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> eigen_values[sorted_index]</span>
<span id="cb3-11">sorted_eigenvectors <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> eigen_vectors[:,sorted_index]</span>
<span id="cb3-12"></span>
<span id="cb3-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Select the 2 best</span></span>
<span id="cb3-14">eigenvector_subset <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sorted_eigenvectors[:, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>:<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>]</span>
<span id="cb3-15"></span>
<span id="cb3-16">X_reduced <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.dot(eigenvector_subset.transpose(), digits_normed.transpose()).transpose()</span>
<span id="cb3-17">sns.scatterplot(x<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>X_reduced[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>], y<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>X_reduced[:,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>], hue<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>classes)</span></code></pre></div></div>
<div class="cell-output cell-output-display">
<div>
<figure class="figure">
<p><img src="https://rcambier.github.io/posts/2021-09-15-pca_files/figure-html/cell-4-output-1.png" class="img-fluid figure-img"></p>
</figure>
</div>
</div>
</div>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-15-pca.html</guid>
  <pubDate>Tue, 14 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Linear regression &amp; Logistic regression</title>
  <link>https://rcambier.github.io/posts/2021-09-14-linear-regression.html</link>
  <description><![CDATA[ 





<div id="cell-1" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:49.662053Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:49.661849Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:50.448073Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:50.447715Z&quot;}}" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp </span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np </span>
<span id="cb1-3"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> pandas <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> pd</span>
<span id="cb1-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> r2_score, precision_score, recall_score, log_loss</span>
<span id="cb1-5"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.linear_model <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> LinearRegression, Ridge</span>
<span id="cb1-6"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> sklearn</span></code></pre></div></div>
</div>
<section id="some-data" class="level1">
<h1>Some data</h1>
<div id="cell-3" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:50.449436Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:50.449339Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.736471Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.735933Z&quot;}}" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pd.read_csv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"https://download.mlcc.google.com/mledu-datasets/california_housing_train.csv"</span>)</span>
<span id="cb2-2">df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> df[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'housing_median_age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_rooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_bedrooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'population'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'households'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_income'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value'</span>]]</span></code></pre></div></div>
</div>
</section>
<section id="linear-regression" class="level1">
<h1>Linear Regression</h1>
<div id="cell-5" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.738879Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.738702Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.747734Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.747456Z&quot;}}" data-outputid="258b2687-227d-4b00-cd43-6b0dc6a0eba4" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1">scaled_df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>())</span>
<span id="cb3-2">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> scaled_df[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'housing_median_age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_rooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_bedrooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'population'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'households'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_income'</span>]].values</span>
<span id="cb3-3">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> scaled_df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value'</span>].values</span>
<span id="cb3-4"></span>
<span id="cb3-5">X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.hstack((np.ones((<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)),X))</span>
<span id="cb3-6">B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.inv(X_with_intercept.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> X_with_intercept) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> (X_with_intercept.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> y.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb3-7"></span>
<span id="cb3-8"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual weights: "</span>, B.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb3-9"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual score: "</span>, r2_score(y, (X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Manual weights:  [-0.07556544  0.19769139 -1.56087573  1.32234017 -2.57610401  1.59516284
  1.43606576]
Manual score:  0.5713482748283873</code></pre>
</div>
</div>
<div id="cell-6" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.768310Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.768184Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.772626Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.772375Z&quot;}}" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> sklearn.metrics <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> r2_score</span>
<span id="cb5-2"></span>
<span id="cb5-3">RSS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (((X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>() <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Squared distance from our new regression line</span></span>
<span id="cb5-4">TSS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> ((y.mean() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y)<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">**</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>).<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>()                           <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Squared distance from the mean</span></span>
<span id="cb5-5">r2 <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> RSS <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> TSS                                        <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># How much distance did we gained ? Did we reduce the errors ? Are we closer to the actual point values ?</span></span>
<span id="cb5-6">r2, r2_score(y, (X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="4">
<pre><code>(np.float64(0.5713482748283873), 0.5713482748283873)</code></pre>
</div>
</div>
<p>Let’s compare those results with sklearn linear regression</p>
<div id="cell-8" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.773786Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.773708Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.780121Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.779920Z&quot;}}" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1"></span>
<span id="cb7-2">lr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> LinearRegression().fit(X, y)</span>
<span id="cb7-3"></span>
<span id="cb7-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>)</span>
<span id="cb7-5"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn weights: "</span>, [lr.intercept_] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> lr.coef_.tolist() )</span>
<span id="cb7-6"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn score: "</span>, r2_score(y, lr.predict(X)))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>
Sklearn weights:  [np.float64(-0.07556543642855307), 0.19769138728528812, -1.5608757342094828, 1.322340171543368, -2.576104006535326, 1.5951628411047347, 1.4360657609756633]
Sklearn score:  0.5713482748283873</code></pre>
</div>
</div>
</section>
<section id="linear-regression-with-regularization-ridge-regression" class="level1">
<h1>Linear regression with regularization (Ridge regression)</h1>
<p>Regularization is the action of adding to the loss, a term that contains the weight values. That way these terms are forced to stay small. This helps avoiding overfitting.</p>
<p>Let’s look at the ordinary least sqaure loss and then add the square of each weight to build the regularized loss. Adding the square of each weight means we buil the Ridge regression loss. If we add the absolute value of each weight we build the Lasso regression loss.</p>
<div id="cell-11" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.781201Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.781132Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.783337Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.783153Z&quot;}}" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb9-1">e <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb9-2">loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (e.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> e).item()</span>
<span id="cb9-3">regularized_loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> loss <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (B.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).item()</span>
<span id="cb9-4">loss, regularized_loss</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="6">
<pre><code>(416.71131319597765, 421.3531681415839)</code></pre>
</div>
</div>
<p>The way adding this loss impacts the formula is the following</p>
<div id="cell-13" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.784339Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.784279Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.788924Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.788708Z&quot;}}" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">scaled_df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>())</span>
<span id="cb11-2">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> scaled_df[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'housing_median_age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_rooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_bedrooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'population'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'households'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_income'</span>]].values</span>
<span id="cb11-3">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> scaled_df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value'</span>].values</span>
<span id="cb11-4"></span>
<span id="cb11-5"></span>
<span id="cb11-6">X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.hstack((np.ones((<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)),X))</span>
<span id="cb11-7"></span>
<span id="cb11-8">I <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.identity(X_with_intercept.shape[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>])</span>
<span id="cb11-9">I[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span></span>
<span id="cb11-10">B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.linalg.inv(X_with_intercept.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> I) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> (X_with_intercept.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> y.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb11-11"></span>
<span id="cb11-12"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual weights: "</span>, B.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb11-13"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual score: "</span>, r2_score(y, (X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Manual weights:  [-0.07457501  0.19926227 -1.4614579   1.30386275 -2.31228351  1.40463349
  1.42708759]
Manual score:  0.5710213053584059</code></pre>
</div>
</div>
<div id="cell-14" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.789903Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.789838Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.792874Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.792686Z&quot;}}" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb13-1"></span>
<span id="cb13-2">lr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> Ridge(alpha<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span>).fit(X, y)</span>
<span id="cb13-3"></span>
<span id="cb13-4"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">""</span>)</span>
<span id="cb13-5"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn weights: "</span>, [lr.intercept_] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> lr.coef_.tolist() )</span>
<span id="cb13-6"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn score: "</span>, r2_score(y, lr.predict(X)))</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>
Sklearn weights:  [np.float64(-0.07457500943073725), 0.19926227134208804, -1.4614578956147584, 1.3038627486537557, -2.312283513756178, 1.4046334910837726, 1.4270875901070879]
Sklearn score:  0.5710213053584055</code></pre>
</div>
</div>
</section>
<section id="logistic-regression" class="level1">
<h1>Logistic Regression</h1>
<p>For the logistic regression, we transform the X values in the same way but we add a sigmoid transform at the end in order to map to values between 0 and 1.</p>
<p>We can not use the normal form anymore for computing the weights. We have to resort to other techniques like gradient descent.</p>
<div id="cell-17" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.793870Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.793803Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:51.795967Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:51.795766Z&quot;}}" data-execution_count="9">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb15-1"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> sigmoid(x):</span>
<span id="cb15-2">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span>  <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> np.exp(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>x)) </span>
<span id="cb15-3"></span>
<span id="cb15-4"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> log_likelihood(y_hat, y_true):</span>
<span id="cb15-5">  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Being far away from the correct class is penalized heavily. </span></span>
<span id="cb15-6">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> np.mean( y_true <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.log(y_hat) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>y_true) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> np.log(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>y_hat) )</span>
<span id="cb15-7"></span>
<span id="cb15-8"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> gradient_sigmoid(x):</span>
<span id="cb15-9">  sigmoid(X) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> sigmoid(X))</span>
<span id="cb15-10"></span>
<span id="cb15-11"></span>
<span id="cb15-12"><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">def</span> gradients(X, y, y_hat):</span>
<span id="cb15-13">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Loss = y * log(h) + (1 - y) * log(1-h)</span></span>
<span id="cb15-14">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># where h = sigmoid(z)</span></span>
<span id="cb15-15">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># and z = Xt @ B</span></span>
<span id="cb15-16"></span>
<span id="cb15-17">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># deriv_loss_to_h = y / h - (1-y) / (1-h) = (y - h) / (h * (1 - h))</span></span>
<span id="cb15-18">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># deriv_h_to_z = sigmoid(h) * (1 - sigmoid(h))</span></span>
<span id="cb15-19">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># deriv_z_to_b = Xt</span></span>
<span id="cb15-20">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Though chain rule, final derivative </span></span>
<span id="cb15-21">    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># final_derivative = deriv_loss_to_h * deriv_h_to_z * deriv_z_to_b = x * (y - h) = x * (y - y_hat) </span></span>
<span id="cb15-22">    dw <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X)) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> (X.T <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> (y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> y))</span>
<span id="cb15-23">    <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">return</span> dw</span></code></pre></div></div>
</div>
<div id="cell-18" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:51.796932Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:51.796866Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:56.558117Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:56.557777Z&quot;}}" data-outputid="5f6d87ac-84f7-4b81-fd63-544e80bdcac4" data-execution_count="10">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb16-1">df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value_cat'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value'</span>] <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">150_000</span>).astype(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>)</span>
<span id="cb16-2"></span>
<span id="cb16-3">scaled_df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (df <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>()) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> (df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">max</span>() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> df.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">min</span>())</span>
<span id="cb16-4">X <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> scaled_df[[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'housing_median_age'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_rooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'total_bedrooms'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'population'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'households'</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_income'</span>]].values</span>
<span id="cb16-5">y <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> df[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">'median_house_value_cat'</span>].values </span>
<span id="cb16-6"></span>
<span id="cb16-7">X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.hstack((np.ones((<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">len</span>(X), <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)),X))</span>
<span id="cb16-8"></span>
<span id="cb16-9">B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> np.random.normal(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>, <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.1</span> ,(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb16-10"></span>
<span id="cb16-11"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> i <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">range</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50_000</span>):</span>
<span id="cb16-12">  y_hat <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sigmoid(X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb16-13">  <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">%</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5000</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">or</span> i <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">0</span>: </span>
<span id="cb16-14">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"loss: "</span>, log_likelihood(y_hat, y))</span>
<span id="cb16-15">  deltas <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> gradients(X_with_intercept, y, y_hat)</span>
<span id="cb16-16">  B <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.3</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> deltas.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb16-17"></span>
<span id="cb16-18"></span>
<span id="cb16-19">lr <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sklearn.linear_model.LogisticRegression().fit(X, y)</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>loss:  0.7175633823124513
loss:  0.46247742549766496
loss:  0.45400111162106355
loss:  0.45092915252987215
loss:  0.44860694198860407
loss:  0.44654040375802884
loss:  0.44465189016022644
loss:  0.4429190526397757
loss:  0.44132801358504486
loss:  0.43986676128612356</code></pre>
</div>
</div>
<div id="cell-19" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T17:07:56.559788Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T17:07:56.559673Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T17:07:56.572718Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T17:07:56.572467Z&quot;}}" data-outputid="5f7905f6-01fa-4169-e606-691d859e01a9" data-execution_count="11">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb18-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual weights: "</span>, B.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))</span>
<span id="cb18-2"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Manual score: "</span>, </span>
<span id="cb18-3">        precision_score(y, (sigmoid(X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>).astype(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>) ),</span>
<span id="cb18-4">        recall_score(y, (sigmoid(X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.5</span>).astype(<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">int</span>) ),</span>
<span id="cb18-5">      )</span>
<span id="cb18-6"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>()</span>
<span id="cb18-7"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn log loss: "</span>, log_loss(y, (sigmoid(X_with_intercept <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">@</span> B).reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>))))</span>
<span id="cb18-8"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn weights: "</span>, lr.intercept_.tolist() <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> lr.coef_.reshape(<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>).tolist())</span>
<span id="cb18-9"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">print</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Sklearn score"</span>, </span>
<span id="cb18-10">      precision_score(y, lr.predict(X)),</span>
<span id="cb18-11">      recall_score(y, lr.predict(X))</span>
<span id="cb18-12">      )</span></code></pre></div></div>
<div class="cell-output cell-output-stdout">
<pre><code>Manual weights:  [ -4.74777447   2.09463637 -11.67292203   7.04060378  -3.12359728
   8.17776188  18.8596743 ]
Manual score:  0.8215827338129497 0.8513652036156929

Sklearn log loss:  0.43852424076056
Sklearn weights:  [-4.382530400697039, 1.9562829511733213, -10.781475873180312, 6.397256726894048, -2.6864271237826665, 7.662584658270458, 17.40432279277666]
Sklearn score 0.8187667560321715 0.8537880905786972</code></pre>
</div>
</div>
<p>The weights are not exactly the same but the performances are very similar. This is due to the randomness aspect of training through gradient descent.</p>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-14-linear-regression.html</guid>
  <pubDate>Mon, 13 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Hypothesis testing</title>
  <link>https://rcambier.github.io/posts/2021-09-13-hypothesis-testing.html</link>
  <description><![CDATA[ 





<section id="hypothesis-testing" class="level1">
<h1>Hypothesis testing</h1>
<div id="cell-2" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:33.184655Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:33.184572Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:33.267236Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:33.266886Z&quot;}}" data-execution_count="1">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb1-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> scipy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> sp </span>
<span id="cb1-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> numpy <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> np </span></code></pre></div></div>
</div>
<section id="a-typical-statement" class="level3">
<h3 class="anchored" data-anchor-id="a-typical-statement">A typical statement</h3>
<p>A particular brand of tires claims that its deluxe tire averages at least 50,000 miles before it needs to be replaced. From past studies of this tire, the standard deviation is known to be 8,000. A survey of owners of that tire design is conducted. From the 28 tires surveyed, the mean lifespan was 46,500 miles with a standard deviation of 9,800 miles. Using 𝛼=0.05 , is the data highly inconsistent with the claim?</p>
<div id="cell-4" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:33.268424Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:33.268344Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:33.270633Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:33.270279Z&quot;}}" data-execution_count="2">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What we know of the population</span></span>
<span id="cb2-2">claim_pop_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50_000</span></span>
<span id="cb2-3">pop_std <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8000</span></span>
<span id="cb2-4"></span>
<span id="cb2-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What we know of the sample</span></span>
<span id="cb2-6">n <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span></span>
<span id="cb2-7">sample_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span></span>
<span id="cb2-8">sample_std <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9800</span></span>
<span id="cb2-9"></span>
<span id="cb2-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The chances of Type 1 error we are ready to accept</span></span>
<span id="cb2-11">alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span></span></code></pre></div></div>
</div>
<p>The question can be formulated as: - “Compared to the mean of that population (50_000), how crazy is the sample mean (46_500) ? With an alpha of 0.05”</p>
<p>which becomes - “Using the sample deviation of the mean of that population, how far is the sample mean ? With an alpha of 0.05”</p>
<p>which becomes - “Is the sample mean further away than 1.64 times the standard error of that population ?”</p>
<div id="cell-6" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:33.271544Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:33.271486Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:33.273060Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:33.272790Z&quot;}}" data-execution_count="3">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb3-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 1. How far is the sample_mean from the pop_mean ?</span></span>
<span id="cb3-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># H0 =&gt; pop_mean &gt;= 50_000</span></span>
<span id="cb3-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># H1 =&gt; pop_mean &lt; 50_000</span></span>
<span id="cb3-4"></span>
<span id="cb3-5">population_standard_error <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8000</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> np.sqrt(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># "If you grab a random sample mean, how is it going to variate"</span></span>
<span id="cb3-6">how_far_we_are_from_pop_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50_000</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> population_standard_error <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># How far is this specific sample mean from the population mean. </span></span></code></pre></div></div>
</div>
<p>There are different ways to reject the null hypothesis.</p>
<p>We can look at wether we are smaller or not than 0.05.</p>
<div id="cell-8" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:33.273846Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:33.273797Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:34.028425Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:34.028129Z&quot;}}" data-execution_count="4">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1">how_far_we_are_in_z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sp.stats.norm.cdf(how_far_we_are_from_pop_mean) </span>
<span id="cb4-2">how_far_we_are_in_z</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="4">
<pre><code>np.float64(0.010305579572800306)</code></pre>
</div>
</div>
<p>In this case we are at 0.01, which means that in the distribution of sample means, we are so extreme that there is no way that the sample mean we observed actually came from the sample mean distribution that we built looking at the population.</p>
<p>Another way is to look at how far we go on the axis, not in term of percentage (like 0,05 being 5%) but in term of distance from the population mean. This would look like the following</p>
<div id="cell-10" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:34.041115Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:34.041000Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:34.043078Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:34.042692Z&quot;}}" data-execution_count="5">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">how_far_we_are_from_pop_mean</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="5">
<pre><code>np.float64(-2.315032397181517)</code></pre>
</div>
</div>
<p>To know if this is a value too extreme or not, we can compare it to how far 0.05 is on the same axis:</p>
<div id="cell-12" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:34.043965Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:34.043900Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:34.045829Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:34.045540Z&quot;}}" data-execution_count="6">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> sp.stats.norm.ppf(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.95</span>)</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="6">
<pre><code>np.float64(-1.644853626951472)</code></pre>
</div>
</div>
</section>
</section>
<section id="when-you-dont-have-the-population-standard-deviation" class="level1">
<h1>When you don’t have the population standard deviation</h1>
<p>Realistically however, you often don’t have the population standard deviation. In this case, you need to estimate it from the sample.</p>
<p>Doing that is less accurate. In order to compensate a bit, we need to model the “spread of sample means” a bit differently.</p>
<p>Since normally we allow the sample mean to only go “so far” from the population mean. We will force it to be “even a bit further”. The way we do this is by using a “heavy tail” distribution for the sample mean. That way, the 0.05 mark will be further to the right or to the left, and we are forced to be a little bit more sure of ourselves before saying anything.</p>
<p>Let’s use the sample problem as above, but pretend that we don’t know that the population has a standard deviation of 8000. We are forced to use the 9800 that we discovered experimentally.</p>
<div id="cell-15" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:34.046767Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:34.046722Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:34.049390Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:34.049016Z&quot;}}" data-execution_count="7">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What we know of the population</span></span>
<span id="cb10-2">claim_pop_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50_000</span></span>
<span id="cb10-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># --- pop_std = 8000 # we don't know this anymore ---</span></span>
<span id="cb10-4"></span>
<span id="cb10-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># What we know of the sample</span></span>
<span id="cb10-6">n <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span></span>
<span id="cb10-7">sample_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span></span>
<span id="cb10-8">sample_std <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9800</span></span>
<span id="cb10-9"></span>
<span id="cb10-10"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># The chances of Type 1 error we are ready to accept</span></span>
<span id="cb10-11">alpha <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.05</span></span>
<span id="cb10-12"></span>
<span id="cb10-13"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># 1. How far is the sample_mean from the pop_mean ?</span></span>
<span id="cb10-14"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># H0 =&gt; pop_mean &gt;= 50_000</span></span>
<span id="cb10-15"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># H1 =&gt; pop_mean &lt; 50_000</span></span>
<span id="cb10-16"></span>
<span id="cb10-17">population_standard_error <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9800</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> np.sqrt(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">28</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># "If you grab a random sample mean, how is it going to variate"</span></span>
<span id="cb10-18">how_far_we_are_from_pop_mean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> (<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">50_000</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> population_standard_error <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># How far is this specific sample mean from the population mean. </span></span>
<span id="cb10-19"></span>
<span id="cb10-20">how_far_we_are_in_z <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sp.stats.t.cdf(how_far_we_are_from_pop_mean, df<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>) </span>
<span id="cb10-21">how_far_we_are_in_z</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="7">
<pre><code>np.float64(0.03478161702239143)</code></pre>
</div>
</div>
<p>We still reject the null hypothesis. But notice how much less confident we are ! Even if the standard deviation we sample was exactly 8000 (like the population one), we would still be less confident than if we received the standard deviation through a trustful source.</p>
<p>This is the whole point of this T student distribution !</p>
</section>
<section id="confidence-interval" class="level1">
<h1>Confidence interval</h1>
<p>Confidence interval are only in the point of view of the sample we just took.</p>
<p>From that sample, let’s just add a standard error on each side and see how far this goes.</p>
<div id="cell-19" class="cell" data-quarto-private-1="{&quot;key&quot;:&quot;execution&quot;,&quot;value&quot;:{&quot;iopub.execute_input&quot;:&quot;2026-08-10T23:16:34.050287Z&quot;,&quot;iopub.status.busy&quot;:&quot;2026-08-10T23:16:34.050237Z&quot;,&quot;iopub.status.idle&quot;:&quot;2026-08-10T23:16:34.052560Z&quot;,&quot;shell.execute_reply&quot;:&quot;2026-08-10T23:16:34.052230Z&quot;}}" data-outputid="e02f5e88-ea43-4ba6-f7bb-a6623f0aab5f" data-execution_count="8">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1">how_much_we_allow_on_t_distrib <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> sp.stats.t.ppf(<span class="fl" style="color: #AD0000;
background-color: null;
font-style: inherit;">0.975</span>, df<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>n<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>)</span>
<span id="cb12-2">sample_mean_standard_error <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">9800</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">/</span> np.sqrt(n)</span>
<span id="cb12-3">how_much_we_allow_in_problem_domain <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> how_much_we_allow_on_t_distrib <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">*</span> sample_mean_standard_error</span>
<span id="cb12-4">how_much_we_allow_in_problem_domain</span>
<span id="cb12-5">[<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> how_much_we_allow_in_problem_domain, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">46_500</span> <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> how_much_we_allow_in_problem_domain]</span></code></pre></div></div>
<div class="cell-output cell-output-display" data-execution_count="8">
<pre><code>[np.float64(42699.95670465797), np.float64(50300.04329534203)]</code></pre>
</div>
</div>


</section>

 ]]></description>
  <category>ai</category>
  <guid>https://rcambier.github.io/posts/2021-09-13-hypothesis-testing.html</guid>
  <pubDate>Sun, 12 Sep 2021 23:00:00 GMT</pubDate>
</item>
<item>
  <title>Three’s a Crowd</title>
  <link>https://rcambier.github.io/posts/2021-01-05-scoundrels.html</link>
  <description><![CDATA[ 





<p>From: http://www.twinbear.com/riddles.html</p>
<p>(Clayton Lewis) After solving the riddle of the three wise folks, three scoundrels claim to be the smartest in the country. So you decide to give them a challenge. Suspecting that the thing they care about most is money, you give them $100 and tell them they are to divide this money observing the following rule: they are to discuss offers and counter-offers from each other and then take a vote. Majority vote wins. Sounds easy enough… now the question is, assuming each person is motivated to take the largest amount possible, what will the outcome be?</p>
<p>Note: careful… if the answer were that they split it 50% / 50% / 0%, or 1/3 / 1/3 / 1/3, it wouldn‘t be a riddle!</p>
<p>Note: careful… 96.6523544 % of people who send answers to this have not thought about it for even 1 minute. I guarantee you won‘t solve it in a minute. (96.6523544% of the time this guarantee is correct.)</p>
<div class="answer-title" data-markdown="1">
<p><em>Hover to show the answer.</em></p>
</div>
<div class="answer-wrapper">
<div class="answer" data-markdown="1" style="color: grey">
<p>I can not solve this one so far. If you can please share your answer!</p>
</div>
</div>



 ]]></description>
  <category>riddle</category>
  <guid>https://rcambier.github.io/posts/2021-01-05-scoundrels.html</guid>
  <pubDate>Tue, 05 Jan 2021 00:00:00 GMT</pubDate>
</item>
</channel>
</rss>
