<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Adebam on Medium]]></title>
        <description><![CDATA[Stories by Adebam on Medium]]></description>
        <link>https://medium.com/@adebam?source=rss-77db01b907c4------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*fBMp688dGO7KU9FJ7Xu6NQ.jpeg</url>
            <title>Stories by Adebam on Medium</title>
            <link>https://medium.com/@adebam?source=rss-77db01b907c4------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 19:08:57 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@adebam/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Building a Machine-Learning Virtual Flow Meter for the Volve Field]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/data-science-collective/building-a-machine-learning-virtual-flow-meter-for-the-volve-field-16f37ad260d7?source=rss-77db01b907c4------2"><img src="https://cdn-images-1.medium.com/max/1672/1*Lz60xnGoiRnf9e1UvoDlVQ.png" width="1672"></a></p><p class="medium-feed-snippet">Why the best validation model was not always the best deployment model</p><p class="medium-feed-link"><a href="https://medium.com/data-science-collective/building-a-machine-learning-virtual-flow-meter-for-the-volve-field-16f37ad260d7?source=rss-77db01b907c4------2">Continue reading on Data Science Collective »</a></p></div>]]></description>
            <link>https://medium.com/data-science-collective/building-a-machine-learning-virtual-flow-meter-for-the-volve-field-16f37ad260d7?source=rss-77db01b907c4------2</link>
            <guid isPermaLink="false">https://medium.com/p/16f37ad260d7</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[timeseries]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[virtual-meter]]></category>
            <category><![CDATA[petroleum-engineering]]></category>
            <dc:creator><![CDATA[Adebam]]></dc:creator>
            <pubDate>Mon, 17 Aug 2026 19:54:35 GMT</pubDate>
            <atom:updated>2026-08-27T02:57:44.209Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[A Practical Guide to A/B/n Headline Testing with Python Using Frequentist and Bayesian Methods]]></title>
            <link>https://medium.com/@adebam/a-b-testing-the-upworthy-archive-when-frequentist-and-bayesian-methods-tell-different-stories-876a48df541c?source=rss-77db01b907c4------2</link>
            <guid isPermaLink="false">https://medium.com/p/876a48df541c</guid>
            <category><![CDATA[headlines]]></category>
            <category><![CDATA[frequentist-statistics]]></category>
            <category><![CDATA[ab-testing]]></category>
            <category><![CDATA[bayesian-vs-frequentist]]></category>
            <category><![CDATA[bayesian-statistics]]></category>
            <dc:creator><![CDATA[Adebam]]></dc:creator>
            <pubDate>Tue, 23 Jun 2026 20:51:56 GMT</pubDate>
            <atom:updated>2026-06-23T21:14:02.054Z</atom:updated>
            <content:encoded><![CDATA[<p>In A/B testing, it is tempting to look at the variant with the highest click-through rate and immediately declare it the winner.</p><p>But that can be misleading.</p><p>A variant may have the highest CTR and still fail to provide enough statistical evidence for a confident decision. At the same time, a Bayesian analysis may suggest that the same variant is probably better than the control, even if the frequentist test does not call it statistically significant.</p><p>This project explores that tension using the Upworthy Research Archive, a public dataset of headline experiments from the media company Upworthy. The goal was to analyze one five-variant A/B/n experiment using two different statistical frameworks:</p><ul><li>a frequentist approach</li><li>a Bayesian approach</li></ul><p>The main question was:</p><blockquote><em>Can we trust the variant with the highest click-through rate?</em></blockquote><p>The answer turned out to be more interesting than a simple yes or no.</p><h3>Project Motivation</h3><p>A/B testing is one of the most common ways companies make data-driven decisions. It is used in digital products, marketing, media, e-commerce, and user engagement.</p><p>However, one common mistake is to rank variants by click-through rate and choose the highest one without asking whether the result is reliable.</p><p>This project was motivated by a practical question:</p><blockquote><em>When an experiment appears to have a winner, can we actually trust that winner?</em></blockquote><p>To answer this, I analyzed one experiment from the Upworthy dataset using a complete statistical workflow. I first used a frequentist framework to check sample-ratio mismatch, effect size, power, multiple comparisons, and confidence intervals. Then I repeated the analysis using a Bayesian framework to estimate the probability that each variant was better than the control.</p><p>The goal was not just to find a winner. The goal was to understand uncertainty.</p><h3>Dataset</h3><p>The <a href="https://upworthy.natematias.com/about-the-archive.html">Upworthy</a> dataset contains A/B tests where different headlines and visual elements were tested to improve engagement.</p><p>For each variant, the dataset includes:</p><ul><li>impressions</li><li>clicks</li><li>headline text</li><li>experiment ID</li><li>eyecatcher ID</li></ul><p>The main metric used in this analysis was click-through rate:</p><pre>CTR = clicks / impressions</pre><p>For this article, I focused on one experiment with five variants. Each variant had a different eyecatcher_id.</p><p>Because the dataset did not explicitly identify a true control group, I treated the variant with the lowest CTR as an exploratory baseline.</p><p>This is an important limitation. In a production A/B test, the control group should be defined before seeing the results. In this project, the baseline was selected only for analysis and learning purposes.</p><h3>Step 1: Sample-Ratio Mismatch Check</h3><p>Before testing which variant performed best, I first checked whether traffic was distributed roughly equally across the five variants.</p><p>This is called a Sample-Ratio Mismatch check.</p><p>Since there were five variants, the expected traffic share was approximately 20% per variant.</p><figure><img alt="Traffic share across the five variants. Since there were five variants, the expected traffic share was about 20% per variant." src="https://cdn-images-1.medium.com/max/1024/1*gjB1Cm5hnDU_lUJ1pL21CA.png" /></figure><p>To complement the visual check, I used a chi-square goodness-of-fit test.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/604/1*h0-KmXk_ck9BQBZE3AE5fw.png" /></figure><p>The chi-square test was not statistically significant. This means there was no strong evidence that traffic allocation deviated from the expected distribution.</p><p>This gave more confidence that the experiment traffic was reasonably balanced.</p><h3>Step 2: CTR and Relative Lift</h3><p>After checking traffic balance, I calculated CTR for each variant.</p><p>One variant had the highest observed CTR and a relative lift of approximately 45.6% compared with the exploratory baseline.</p><p>At first glance, that looks impressive.</p><p>But relative lift alone does not answer the most important question:</p><blockquote><em>Is the difference reliable enough to act on?</em></blockquote><p>This is where effect size and power analysis become important.</p><h3>Step 3: Effect Size with Cohen’s h</h3><p>Because CTR is a proportion, I used Cohen’s h as the effect size measure.</p><p>Cohen’s h is used to compare two proportions, such as the CTR of a control group and the CTR of a treatment group.</p><p>For the best-performing variant, the effect size was small:</p><p>Cohen’s h: 0.0346</p><p>This is an important result.</p><p>A 45.6% relative lift sounds large, but the absolute CTR values were very small. The control had 26 clicks, while the best-performing variant had 37 clicks.</p><p>So even though the relative lift looked strong, the amount of information in the data was still limited.</p><h3>Step 4: Power Analysis</h3><p>Next, I asked:</p><blockquote><em>Did this experiment have enough sample size to reliably detect the observed effect?</em></blockquote><p>Using the observed Cohen’s h value, the required sample size for 80% power was estimated.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/791/1*-MuSMa74_DwmJB3GRG-vbw.png" /></figure><p>The experiment had far fewer impressions than the required sample size. This means the experiment was likely underpowered.</p><p>At the observed effect size, the test would detect a true effect only about 30% of the time. That implies a high Type II error risk.</p><p>In simple terms:</p><blockquote><em>The experiment may not have had enough data to confidently detect the improvement, even if the improvement was real.</em></blockquote><h3>Step 5: Multiple Comparisons and Dunnett’s Test</h3><p>This experiment had one exploratory baseline and four treatment variants.</p><p>If I ran four separate tests at α = 0.05, the chance of at least one false positive would increase.</p><p>The family-wise error rate would be:</p><pre>1 - (1 - 0.05)^4 ≈ 18.5%</pre><p>That means there would be about an 18.5% chance of finding at least one false positive across the four comparisons.</p><p>To address this, I used Dunnett’s test.</p><p>Dunnett’s test is designed for comparing multiple treatments against one control while controlling the family-wise error rate.</p><p>The frequentist result was:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*X8Veo2EUx7ouKo35fJeedw.png" /></figure><p>The best-performing variant was variant 4.</p><p>It had:</p><ul><li>the highest observed CTR</li><li>the largest relative lift</li><li>37 clicks compared with 26 clicks for the control</li></ul><p>However, after Dunnett’s correction, the adjusted p-value was 0.209.</p><p>Since this is greater than 0.05, the frequentist analysis failed to reject the null hypothesis.</p><p>The conclusion was:</p><blockquote><em>Variant 4 looked better, but the frequentist test did not provide enough evidence to declare it statistically significant mainly because the test was under powered.</em></blockquote><h3>Step 6: Confidence Intervals</h3><p>Confidence intervals were used to visualize uncertainty around the CTR estimates.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f_rWRmdSCqWLD7TTX6wsGQ.png" /></figure><p>The control is in black and the treatments are in blue. This plot helped show why the highest CTR alone was not enough. The treatment estimates had uncertainty, and the observed differences could still be explained by random variation. There is a clear overlap between the confidence interval of all the tests.</p><p>Please see a detailed analysis including the code at my <a href="https://github.com/adebam/Upworthy_Project/blob/main/README_PART_1.md">github page.</a></p><h3>Part 4: Bayesian A/B/n Testing</h3><p>After completing the frequentist analysis, I repeated the same experiment using a Bayesian framework.</p><p>The Bayesian approach asks a different question.</p><p>Instead of asking:</p><blockquote><em>Is the result statistically significant?</em></blockquote><p>It asks:</p><blockquote><em>What is the probability that a treatment variant is better than the control?</em></blockquote><p>This is often easier to interpret from a business perspective because it translates uncertainty into probability.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1018/1*7DbaJ2UsmfbP5CSJP_wf5g.png" /></figure><p>The frequentist approach is useful when we want a formal hypothesis test and strict error control.</p><p>The Bayesian approach is useful when we want a probability-based decision framework.</p><h3>The Bayesian Model</h3><p>In this A/B test, each impression can result in one of two outcomes:</p><ul><li>click</li><li>no click</li></ul><p>That makes the click outcome a binary event.</p><p>For each variant, I modeled the true CTR as a probability parameter:</p><pre>θ = true click-through rate</pre><p>Because CTR is a probability, θ must be between 0 and 1.</p><p>I used a Beta distribution as the prior because the Beta distribution is naturally defined between 0 and 1 and works well with binomial click data. The fantastic properties of the Beta distribution can be explored more at its <a href="https://en.wikipedia.org/wiki/Beta_distribution">Wikipedia page</a>. The usefulness of the Beta distribution for A/B testing is as follows:</p><ul><li><em>Perfect Mathematical Fit to Probability Boundary:</em> The Beta distribution naturally has a domain (support) of exactly ([0, 1]). It is physically impossible for a Beta random variable to fall outside these boundaries making it perfect for probability distribution.</li><li><em>Conjugate Prior to the Binomial Likelihood</em>: This is the most powerful algebraic reason. When running A/B test tracking conversions, the incoming data follows a Binomial distribution(Likelihood), because of the conjugate pairing rule, the outgoing data (posterior) will also following a beta distribution. Because posterior and prior distribution are conjugate pairs, there is no need to run heavy simulations to find the posteriror distribution. One calculate the exact answer instantly using simple addition.</li><li><em>Incredible Shape Flexibility</em>: The Beta distribution is controlled by two shape parameters, usually called α (alpha) and β (beta). By changing these two numbers, a Beta distribution can twist into almost any shape to represent the prior state of knowledge.</li></ul><p>For this analysis, I used a uniform prior:</p><pre>Beta(1, 1)</pre><p>This prior treats all CTR values between 0 and 1 as initially possible before observing the data.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4EThqbAATEpZzE6-r9cJAA.png" /></figure><p>The Beta(1, 1) prior distribution used before observing the experiment data.</p><h3>Updating the Prior with Data</h3><p>Because the Beta distribution is conjugate to the Binomial likelihood, the posterior can be calculated directly.</p><p>For each variant:</p><pre>α_new = α_prior + clicks<br>β_new = β_prior + impressions - clicks</pre><p>This gives each variant its own posterior distribution for the true CTR.</p><p>The posterior distribution combines:</p><ul><li>the prior belief</li><li>the observed clicks</li><li>the observed non-clicks</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Xhls6AgsG9gtpovBCqhztw.png" /></figure><p>The black line which is barely visible is the prior distribution of beta(1,1). The blue line is the posterior distribution for the control, while the red line is the posterior distribution for the best performing variant. Instead of only having one CTR number per variant, we now have a full probability distribution for each variant’s true CTR. The best-performing variant shifts to the right, but overlap still remains. The posterior distributions make the uncertainty visible.</p><h3>Probability That Each Variant Beats Control</h3><p>Using simulation, I sampled from each variant’s posterior distribution and estimated how often each treatment variant had a higher CTR than the control.</p><p>This gives the Bayesian probability of out performance:</p><pre>P(θ_treatment &gt; θ_control)</pre><p>The results were:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wg40xsZtAcfTe-EVmnOOMw.png" /></figure><p>The meaning of the columns in the results</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/1*AJt9sNXXWvFewaQ83ivJAA.png" /></figure><p>The most important columns are <strong>P(Variant &gt; Control)</strong> and the <strong>95% Credible Interval</strong>. A high probability of beating the control suggests that a variant is promising, but a wide credible interval means there is still uncertainty. If the credible interval includes negative lift, the variant may still be worse than the control even if it has the highest probability of being better.</p><p>Lastly in the Bayesian analysis, the variant with the highest posterior probability of beating the control is not automatically declared the winner. A decision rule is needed to define how much evidence is required before choosing a variant. The decision rule used was:</p><ol><li>The probability of the P(variant&gt;Control) is greater than 90%</li><li>The observed lift has to be greater the mean of all the lifts.</li></ol><p>Using the rule above it looks as if variant 4 can be a winner. The Bayesian model estimated that it had a 92.99% probability of beating the control.</p><p>That is much more intuitive than saying “p-value = 0.209.”</p><p>However, the result was still not fully conclusive.</p><p>The 95% credible interval for relative lift was:</p><pre>[-11.40%, +138.05%]</pre><p>This interval is wide and includes negative values.</p><p>That means the variant could still be worse than the control, even though it is more likely to be better.</p><h3>Why the Frequentist and Bayesian Results Differ</h3><p>The frequentist and Bayesian analyses do not truly contradict each other.</p><p>They answer different questions.</p><p>The frequentist analysis asks:</p><blockquote><em>If there were no real difference, how surprising would this result be?</em></blockquote><p>The Bayesian analysis asks:</p><blockquote><em>Given the data and prior, how likely is it that this variant is better?</em></blockquote><p>For variant 4:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/854/1*6Ptex0fWAXhF-x8tuGPkYw.png" /></figure><p>The frequentist method was conservative because it controlled the risk of false positives across multiple comparisons.</p><p>The Bayesian method was more decision-oriented because it estimated the probability that the variant was better.</p><h3>Final Business Decision</h3><p>From a business perspective, I would not immediately declare variant 4 the final winner.I would treat it as the best candidate for a follow-up test.</p><p>Why?</p><p>Because the evidence is promising but still uncertain.</p><p>The frequentist analysis did not find statistical significance after correcting for multiple comparisons.</p><p>The Bayesian analysis estimated a 92.99% probability that variant 56437 was better than the control, but the credible interval was wide and still included possible downside.</p><p>Also, the absolute difference was small. Variant 4 generated 37 clicks, while the control generated 26 clicks. That is only about 11 additional clicks in this experiment. Depending on the revenue model, if these 11 additional clicks generate a lot more revenue, then variant 4 can be a winner.</p><p>So practical recommendation is:</p><blockquote><em>Run a larger follow-up experiment comparing variant 4 directly against the control.</em></blockquote><p>This would reduce uncertainty and provide stronger evidence before making a production decision.</p><h3>What I Learned</h3><p>This project helped me understand that A/B testing is not just about picking the highest CTR.</p><p>A good A/B testing workflow should ask:</p><ul><li>Was traffic assigned correctly?</li><li>Is the observed lift practically meaningful?</li><li>Clicks impact on revenue?</li><li>Was the experiment powered enough?</li><li>Did we account for multiple comparisons?</li><li>How much uncertainty remains?</li><li>What decision risk are we willing to accept?</li></ul><p>The frequentist framework helped me control false positives and understand statistical significance.</p><p>The Bayesian framework helped me think in terms of probabilities, uncertainty, and business decision-making.</p><p>The biggest lesson was:</p><blockquote><em>The best A/B testing decision is not always “launch the highest CTR.” Sometimes the best decision is “this variant is promising, but we need more data.”</em></blockquote><h3>Conclusion</h3><p>The Upworthy dataset was a useful case study for comparing frequentist and Bayesian A/B testing.</p><p>In the selected experiment, variant 4 had the highest observed CTR and the largest relative lift. The Bayesian analysis estimated that it had a 92.99% probability of beating the control.</p><p>However, the frequentist analysis did not find the result statistically significant after Dunnett’s multiple-comparison correction. The experiment was also underpowered, and the Bayesian credible interval remained wide.</p><p>A/B testing is not just about finding winners. It is about making decisions under uncertainty.</p><p>Please see a detailed analysis including the code at my <a href="https://github.com/adebam/Upworthy_Project/blob/main/README_PART_4.md">github page</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=876a48df541c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What Makes a Headline More Clickable? Lessons from the Upworthy A/B Testing Archive]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@adebam/what-makes-a-headline-more-clickable-lessons-from-the-upworthy-a-b-testing-archive-bd6b8f5b35eb?source=rss-77db01b907c4------2"><img src="https://cdn-images-1.medium.com/max/1536/1*Ocy1PxGVyKWUHNqfOWw9xw.png" width="1536"></a></p><p class="medium-feed-snippet">A headline can change whether someone clicks or scrolls past.</p><p class="medium-feed-link"><a href="https://medium.com/@adebam/what-makes-a-headline-more-clickable-lessons-from-the-upworthy-a-b-testing-archive-bd6b8f5b35eb?source=rss-77db01b907c4------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@adebam/what-makes-a-headline-more-clickable-lessons-from-the-upworthy-a-b-testing-archive-bd6b8f5b35eb?source=rss-77db01b907c4------2</link>
            <guid isPermaLink="false">https://medium.com/p/bd6b8f5b35eb</guid>
            <category><![CDATA[ads]]></category>
            <category><![CDATA[frequentists]]></category>
            <category><![CDATA[ab-testing]]></category>
            <category><![CDATA[headlines]]></category>
            <category><![CDATA[statistics]]></category>
            <dc:creator><![CDATA[Adebam]]></dc:creator>
            <pubDate>Tue, 23 Jun 2026 20:51:42 GMT</pubDate>
            <atom:updated>2026-08-31T22:24:13.005Z</atom:updated>
        </item>
    </channel>
</rss>