{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Ivan Baldin, Data Analyst: posts tagged Google Sheets",
    "_rss_description": "Data analytics, probability theory, and applied statistics — from the practitioner’s perspective. Ivan Baldin writes about sales funnels, call center performance, conversion analysis, confidence intervals, binomial distributions, Z-scores, and the math behind data-driven decisions. Years of hands-on experience turning raw CRM data into actionable insights for sales teams and business leaders.",
    "_rss_language": "en",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/ivanbaldin.blog\/tags\/google-sheets\/",
    "feed_url": "https:\/\/ivanbaldin.blog\/tags\/google-sheets\/json\/",
    "icon": "https:\/\/ivanbaldin.blog\/pictures\/userpic\/userpic@2x.jpg?1774085044",
    "authors": [
        {
            "name": "Ivan Baldin",
            "url": "https:\/\/ivanbaldin.blog\/",
            "avatar": "https:\/\/ivanbaldin.blog\/pictures\/userpic\/userpic@2x.jpg?1774085044"
        }
    ],
    "items": [
        {
            "id": "3",
            "url": "https:\/\/ivanbaldin.blog\/all\/a-smarter-way-to-calculate-ratings\/",
            "title": "A Smarter Way to Calculate Ratings",
            "content_html": "<p>Here’s a puzzle. Two employees get rated by their clients on a 1-to-5 scale. Their average scores are identical:<\/p>\n<p>Johnson — 5, 5, 5, 5, 5, 2, 2, 2, 2, 2. <b>Average = 3.50.<\/b><br \/>\nMiller — 4, 4, 3, 3. <b>Average = 3.50.<\/b><\/p>\n<p>A tie. Except — it doesn’t feel like a tie, does it? Johnson has ten ratings, all over the map. Miller has four, tightly clustered. Shouldn’t that matter?<\/p>\n<p>It does. And a fascinating <a href=\"https:\/\/www.evanmiller.org\/ranking-items-with-star-ratings.html\">article on EvanMiller.org, “Ranking Items With Star Ratings,”<\/a> shows exactly how. (Judging by the author’s tone, the whole business of ranking things by ratings is <a href=\"https:\/\/www.evanmiller.org\/how-not-to-sort-by-average-rating.html\">far thornier than it looks<\/a>, and he keeps coming back to it.)<\/p>\n<p class=\"loud\">The core problem is simple: a plain average ignores how many votes went into it. A 4.8 rating from 300 reviews is not the same as a 4.8 from 6 reviews. The first one you can trust. The second one — who knows.<\/p>\n<p>The solution comes from <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bayesian_statistics\">Bayesian statistics<\/a> (whatever that might mean in this context exactly), et voilà:<\/p>\n<p>Johnson — <b>2.72<\/b><br \/>\nMiller — <b>2.63<\/b><\/p>\n<p>Somehow, either the tighter spread of Miller’s scores (SD of 0.58 vs. 1.58), or the smaller number of ratings (4 vs. 10), or both together <b>refined<\/b> the average, giving Miller the edge by a few hundredths. The tie is broken.<\/p>\n<h2>The formula behind the advanced rating<\/h2>\n<p>Brace yourself. It’s gonna sting a little.<\/p>\n<p>We <a href=\"https:\/\/www.evanmiller.org\/ranking-items-with-star-ratings.html#setup\">assume<\/a> there are <i><b>K<\/b><\/i> possible ratings, indexed by <i><b>k,<\/b><\/i> where each rating is worth <i><b>s<sub>k<\/sub><\/b><\/i> points (“1” = 1 point, “2” = 2 points, and so on). Given <i><b>N<\/b><\/i> total ratings for each item, with <i><b>n<sub>k<\/sub><\/b><\/i> ratings for each <i><b>k,<\/b><\/i> we can compute the item’s score using the following formula:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/ratings00.png\" width=\"835\" height=\"229\" alt=\"\" \/>\n<\/div>\n<p>Where <i><b>z<sub>α\/2<\/sub><\/b><\/i> is the <i><b>1−α\/2<\/b><\/i> quantile of the normal distribution. The resulting score is the lower bound of a normal approximation to the Bayesian confidence interval for the average rating. Setting, say, α=0.10 (z=1.65), the score <i><b>S<\/b><\/i> means that in 95% of cases, the item’s true average rating will be above <i><b>S<\/b><\/i>.<\/p>\n<p class=\"loud\">In plain English: the “advanced” calculation gives you a conservative estimate of what the average rating would converge to if you had more data. And — as we saw with Johnson and Miller — it lets you rank items even when their plain averages are identical.<\/p>\n<h2>The advanced rating in action<\/h2>\n<p>I took 2,000 ratings on a 1-to-5 scale across a set of regional sales offices and computed both the plain average and the “advanced” score for each one.<\/p>\n<div class=\"e2-text-picture\">\n<div class=\"fotorama\" data-width=\"695\" data-ratio=\"1.08934169279\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/ratings01.png\" width=\"695\" height=\"638\" alt=\"\" \/>\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/ratings02.png\" width=\"695\" height=\"638\" alt=\"\" \/>\n<\/div>\n<div class=\"e2-text-caption\">Average 1.0 — plain average rating; Average 2.0 — advanced average rating.<\/div>\n<\/div>\n<p>Flushing dropped from 2nd to 4th place. The likely reason: its 66 ratings don’t inspire enough confidence that the average is truly that high. In 90% of scenarios, its predicted rating is no better than 4.55 — roughly 4th place territory.<\/p>\n<p>Tribeca, on the other hand, was formally 13th. But thanks to a solid base of 249 ratings, the model predicts — with 90% confidence — an average of at least 4.4, which bumps it up to 10th.<\/p>\n<p>My impression is that the formula works most convincingly for short rating scales, like the 1-to-5 used here.<\/p>\n<p>In any case, here is a <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1fGsO3GJBwV465hwfH6V_wX5herkjVGUrgwzZWUq8T2A\/edit?usp=sharing\">Google Sheets workbook<\/a> — it should handle rating scales up to 100, import up to 10,000 rows of individual ratings, and lets you adjust the confidence level (90% in our example).<\/p>\n<h2>See also<\/h2>\n<p><a href=\"https:\/\/www.evanmiller.org\/ranking-items-with-star-ratings.html\">https:\/\/www.evanmiller.org\/ranking-items-with-star-ratings.html<\/a><\/p>\n<p><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1fGsO3GJBwV465hwfH6V_wX5herkjVGUrgwzZWUq8T2A\/edit?usp=sharing\">Advanced rating calculator<\/a> in Google Sheets<\/p>\n",
            "summary": "Two employees, same average rating — but should we trust 10 scattered scores the same as 4 consistent ones? Inspired by Evan Miller's work on ranking items with star ratings, this post walks through a Bayesian approach that accounts for both spread and sample size.",
            "date_published": "2019-09-21T15:59:00+03:00",
            "date_modified": "2026-04-12T03:29:09+03:00",
            "tags": [
                "Bayes",
                "equations",
                "Google Sheets",
                "ratings",
                "statistics"
            ],
            "image": "https:\/\/ivanbaldin.blog\/pictures\/ratings00.png",
            "_date_published_rfc2822": "Sat, 21 Sep 2019 15:59:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "3",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "jquery\/jquery.js",
                    "fotorama\/fotorama.css",
                    "fotorama\/fotorama.js"
                ],
                "og_images": [
                    "https:\/\/ivanbaldin.blog\/pictures\/ratings00.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/ratings01.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/ratings02.png"
                ]
            }
        },
        {
            "id": "29",
            "url": "https:\/\/ivanbaldin.blog\/all\/4-for-4-against-confidence-interval\/",
            "title": "4 for, 4 against: the confidence interval hiding behind a 50\/50 split",
            "content_html": "<p>I was recently listening to Vesti FM (a Russian national talk-radio station), where the hosts were going over the results of <a href=\"https:\/\/en.wikipedia.org\/wiki\/2019_Russian_regional_elections\">Russia’s nationwide election day on September 8<\/a>.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski05[1].JPG\" width=\"1230\" height=\"601\" alt=\"\" \/>\n<\/div>\n<p>One remark from the host caught my attention (<a href=\"https:\/\/youtu.be\/tOUSxbWdSuY?t=6305\">at 01:45:05<\/a>):<\/p>\n<blockquote>\n<p><i>By the way, listeners from Khabarovsk Krai are texting in, and going by the number of texts, they’re splitting about 50\/50. Half of them think they made a positive choice, half think things got worse and it was a negative choice. This isn’t a public opinion survey, obviously. I’m just seeing eight or ten texts come in, and they split roughly down the middle. Still, it’s interesting.<\/i><\/p>\n<\/blockquote>\n<p>Credit where it’s due: the disclaimer is exactly right, this is not a survey. But the question is still worth asking. What can you actually say about how opinion splits <i>in reality<\/i> when all you have in hand is 4 texts in favor and 4 against? How much does a 50\/50 result on a sample of 8 tell you about the same split <i>in the population?<\/i><\/p>\n<h2>Working it out in Google Sheets<\/h2>\n<p>Let’s reproduce the setup in a spreadsheet:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski00.PNG\" width=\"603\" height=\"402\" alt=\"\" \/>\n<\/div>\n<p>That day, 4 listeners texted in favor and 4 texted against. But no two days are the same. Today it’s one set of listeners, tomorrow it’s another, and the score could just as easily come out 3 to 5, 5 to 3, 2 to 6, or 7 to 1 — any combination is possible in principle. If we assume the audience really is evenly divided, then 4-to-4, 3-to-5 and 5-to-3 are somewhat more likely, while 8-to-0 or 1-to-7 are much less likely.<\/p>\n<p>Technically, this is a <i>binomial<\/i> setup: out of 8 texts we <i>expect<\/i> 4 in favor, but we don’t know in advance how many we’ll actually get. If the probability that any given text is “for” is 50% (let’s assume exactly half the audience is in favor), then the <b><i>standard error (SE, often written &sigma;)<\/i><\/b> of the observed share is:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn[1].png\" width=\"201\" height=\"77\" alt=\"\" \/>\n<\/div>\n<p>where <b><i>p<\/i><\/b> = 50% and <b><i>n<\/i><\/b> = 8.<\/p>\n<p>Let’s compute it:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski01.PNG\" width=\"599\" height=\"396\" alt=\"\" \/>\n<\/div>\n<p>So if the probability of a “for” text is 50%, then on a sample of 8 texts the standard error comes out to <b>17.68%<\/b>.<\/p>\n<p>What does that mean in practice?<\/p>\n<p>It means that because the sample (8 texts) is tiny, the amount of randomness baked into the “4 for, 4 against” result is enormous, and we cannot confidently claim a strict 50\/50 split across the entire Vesti FM audience. The only thing we can state with any confidence is that the true share of “for” votes lies somewhere <i>within an interval<\/i> around 50%. And the wider we want that interval’s reliability to be, the wider the interval itself gets.<\/p>\n<p>Say we want to be 90% confident in our interval — in other words, we accept being wrong 1 time in 10. Since the normal distribution is a decent approximation of the binomial once <i>n<\/i> is large enough, the interval works out to <b>50% &plusmn; 1.645 SE.<\/b><\/p>\n<p>That’s an easy calculation in Google Sheets:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski03.PNG\" width=\"611\" height=\"385\" alt=\"\" \/>\n<\/div>\n<p>The true share of “for” votes lies in the interval 50% &plusmn; 29.08%, <b>that is, anywhere from 20.92% to 79.08%.<\/b> Roughly like this:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski02[1].PNG\" width=\"789\" height=\"368\" alt=\"\" \/>\n<\/div>\n<p>So we’re nowhere near being able to say that “listeners are splitting about 50\/50.” At best — and even then we’re allowing a 10% chance of being wrong — <b>all we can say is somewhere between 21% and 79%.<\/b><\/p>\n<h2>Sharpening the estimate<\/h2>\n<p>That said, the <b><i>p<\/i> &plusmn; 1.645<i>SE<\/i><\/b> interval is itself a crude approximation, and it’s at its worst exactly where we’re using it: small samples. There are more sophisticated and somewhat more accurate ways to set the bounds.<\/p>\n<p>Running the numbers through the <a href=\"https:\/\/www.wolframalpha.com\/input\/?i=binomial+distribution+confidence+interval\">Wolfram Alpha calculator<\/a> gives these bounds:<\/p>\n<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"e2-text-table\">\n<tr>\n<td style=\"text-align: left\">Clopper-Pearson confidence interval for a binomial parameter<\/td>\n<td style=\"text-align: right\">0.1929<\/td>\n<td style=\"text-align: right\">0.8071<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">Wilson score confidence interval for a binomial parameter with continuity correction<\/td>\n<td style=\"text-align: right\">0.2034<\/td>\n<td style=\"text-align: right\">0.7966<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">standard confidence interval for a binomial parameter<\/td>\n<td style=\"text-align: right\">0.2092<\/td>\n<td style=\"text-align: right\">0.7908<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">Jeffreys confidence interval for a binomial parameter<\/td>\n<td style=\"text-align: right\">0.2393<\/td>\n<td style=\"text-align: right\">0.7607<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">Wilson score confidence interval for a binomial parameter<\/td>\n<td style=\"text-align: right\">0.2486<\/td>\n<td style=\"text-align: right\">0.7514<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: left\">Agresti-Coull confidence interval for a binomial parameter<\/td>\n<td style=\"text-align: right\">0.2486<\/td>\n<td style=\"text-align: right\">0.7514<\/td>\n<\/tr>\n<\/table>\n<p>Every one of them is still enormously wide. The method you pick barely matters when the sample is this small.<\/p>\n<h2>So how many texts would it take to get to 45–55%?<\/h2>\n<p>Here’s the flip side of the question: how large would the sample have to be — still splitting exactly 50\/50 — before we could narrow the interval to at least 45–55%?<\/p>\n<p>That’s easy enough to solve. For an interval of 50% &plusmn; 5% (and sticking with our 90% confidence level), those 5 percentage points have to equal 1.645 standard errors. So SE = 3.04%. Plugging that back into the standard error formula:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/4smski04[1].png\" width=\"270\" height=\"58\" alt=\"\" \/>\n<\/div>\n<p>gives <i>n<\/i> = 270.6. In other words, you’d need somewhere around 271 texts, split exactly down the middle, before you could talk about a 45%–55% range at 90% confidence.<\/p>\n<p>Eight texts, it turns out, is not a small sample. It’s barely a sample at all.<\/p>\n<h2>See also<\/h2>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Binomial_proportion_confidence_interval\">https:\/\/en.wikipedia.org\/wiki\/Binomial_proportion_confidence_interval<\/a><br \/>\n<a href=\"https:\/\/www.wolframalpha.com\/input\/?i=binomial+distribution+confidence+interval&assumption=%22FSelect%22+-%3E+%7B%7B%22BinomialInterval%22%7D%7D&assumption=%7B%22F%22%2C+%22BinomialInterval%22%2C+%22phat%22%7D+-%3E%220.5%22&assumption=%7B%22F%22%2C+%22BinomialInterval%22%2C+%22c%22%7D+-%3E%220.9%22&assumption=%7B%22F%22%2C+%22BinomialInterval%22%2C+%22n%22%7D+-%3E%228%22\">Calculator at WolframAlpha.com<\/a><br \/>\n<a href=\"https:\/\/cyberleninka.ru\/article\/n\/doveritelnye-intervaly-dlya-chastot-i-doley.pdf\">https:\/\/cyberleninka.ru\/article\/n\/doveritelnye-intervaly-dlya-chastot-i-doley.pdf<\/a><br \/>\n<a href=\"http:\/\/italylov.ru\/blog\/all\/ctatisticheskaya-dostovernost-koltrekinga\/\">Statistical significance for real-estate developers<\/a><\/p>\n",
            "summary": "A radio host saw 4 listener texts for and 4 against, and called the audience evenly split. The math says otherwise: on a sample of 8, the true share is anywhere from 21% to 79%. Here's how to compute that – and why you'd need 271 texts.",
            "date_published": "2019-09-16T20:03:00+03:00",
            "date_modified": "2026-08-17T00:26:20+03:00",
            "tags": [
                "binomial",
                "Google Sheets",
                "statistics"
            ],
            "image": "https:\/\/ivanbaldin.blog\/pictures\/4smski05[1].JPG",
            "_date_published_rfc2822": "Mon, 16 Sep 2019 20:03:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "29",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski05[1].JPG",
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski00.PNG",
                    "https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn[1].png",
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski01.PNG",
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski03.PNG",
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski02[1].PNG",
                    "https:\/\/ivanbaldin.blog\/pictures\/4smski04[1].png"
                ]
            }
        },
        {
            "id": "5",
            "url": "https:\/\/ivanbaldin.blog\/all\/kupivip-voice-bot-guessing-the-sample-size\/",
            "title": "KupiVIP’s Voice Robot: Guessing the Sample Size",
            "content_html": "<p>In the article “<a href=\"https:\/\/vc.ru\/marketing\/54315-keys-zamenili-na-black-friday-koll-centr-kupivip-robotom-i-tolko-5-chelovek-iz-5000-ponyali-chto-obshchayutsya-s-neyrosetyu\">Case Study: On Black Friday, KupiVIP Replaced Their Call Center with a Robot, and Only 5 Out of 5,000 People Realized They Were Talking to a Neural Network<\/a>” on vc.ru, one phrase caught my attention above all else — the part where the author mentions a conversion rate increase from 6% to 8%:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/vc_quote.png\" width=\"1209\" height=\"593\" alt=\"&quot;the voice robot&#039;s promo code activation rate reached 8%, compared to 6% for real call center employees.&quot;\" \/>\n<\/div>\n<p>Naturally, I started wondering: on what call volume was this conversion rate increase observed, and was that volume sufficient to make a reliable claim that the voice robot outperforms live call center agents?<\/p>\n<p class=\"loud\">The question can be formulated precisely as follows: what is the minimum number of calls required to claim, with a confidence level of, say, 95%, that the conversion rate “increased from 6% to 8%”?<\/p>\n<h2>Building the Experiment in Google Spreadsheets<\/h2>\n<p>Let’s lay out the available data in Google Spreadsheets. For the calculations that follow, we’ll need a “number of calls” parameter — let’s assume for now that both the robot and live agents each made 1,000 calls before the 6% and 8% conversion rates were obtained:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/1000-1000.png\" width=\"439\" height=\"219\" alt=\"\" \/>\n<\/div>\n<p>Essentially, this is a standard A\/B split test, and we’ll need to walk through its algorithm to obtain the <i>Z-score<\/i> and calculate the <i>p-value<\/i>.<\/p>\n<p>Let’s calculate the standard errors (SD, or σ) for both conversion rates, along with the standard error of the difference between them. The formula for the standard error of a conversion rate:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn.png\" width=\"201\" height=\"77\" alt=\"\" \/>\n<\/div>\n<p>where <i>p<\/i> is the conversion rate (6%, for example) and <i>n<\/i> is the sample size (1,000 calls). Here’s the Google Spreadsheets calculation:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/sqrt.png\" width=\"647\" height=\"231\" alt=\"\" \/>\n<\/div>\n<p>The standard error of the difference between conversion rates is calculated using the formula:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn02.png\" width=\"230\" height=\"58\" alt=\"\" \/>\n<\/div>\n<p>where <i>σ<\/i> is the standard error of each conversion rate, A and B (live agent and robot). We’ll compute it just below in Google Spreadsheets:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/sd_difference.png\" width=\"622\" height=\"269\" alt=\"\" \/>\n<\/div>\n<p>How much larger is the difference between conversions A and B compared to the standard error of that difference? This ratio is called the <b><i>Z-score.<\/i><\/b> In Google Spreadsheets, it’s straightforward:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/z-score.png\" width=\"586\" height=\"298\" alt=\"\" \/>\n<\/div>\n<p>So the Z-score = 1.7541. On the normal distribution curve, this corresponds to the 96th percentile — meaning the probability of the Z-score randomly exceeding 1.7541 is about 4% (in other words, 96% of the area under the bell curve falls within +1.7541 standard deviations):<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/kupivip_robot_05.png\" width=\"706\" height=\"304\" alt=\"\" \/>\n<\/div>\n<p>Where did we get 96%? The exact probability, the <i>p-value<\/i>, is calculated using the formula:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">=NORM.DIST(1.7541,0,1,TRUE)<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/p-value.png\" width=\"693\" height=\"113\" alt=\"\" \/>\n<\/div>\n<p>P-value = 96.03%.<\/p>\n<p>So here’s our interim conclusion: <b>if, on a sample of 1,000 calls in each of the two groups, we observed conversion rates (promo code activations) of 6% and 8%, then we are 96% confident that this difference is not due to chance.<\/b> (There remains a 4% probability that the observed difference is random. In that case, perhaps the conversion rate is actually the same — say, 7% — and had we made more calls, the difference would have eventually disappeared.)<\/p>\n<h2>Minimum Experiment Size<\/h2>\n<p>Now, let’s get back to the original question.<\/p>\n<p>We weren’t trying to prove that 8% is greater than 6%, and the figure of 1,000 calls for the robot and agents was chosen arbitrarily. What we wanted to calculate was <b>the minimum number of calls needed to establish the statistical significance of the difference between 8% and 6% at a 95% confidence level.<\/b><\/p>\n<p>1,000 calls turned out to be more than enough. Now we just need to decrease this number until the p-value crosses the 95% threshold. (By the way, according to the normal distribution formula, this corresponds to a Z-score of 1.6449 — try verifying this yourself.)<\/p>\n<p>In theory, it would probably be possible to derive a large formula for the <i>n<\/i> at which the p-value equals 0.95. In practice, it’s faster to manually find the minimum n through trial and error. Or, better yet, install a <b>Goal Seek<\/b> add-on for Google Spreadsheets and use it to find the answer automatically:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/goal_seek_01.png\" width=\"954\" height=\"493\" alt=\"\" \/>\n<div class=\"e2-text-caption\">(Just make sure the number of robot calls is exactly the same as the number of live agent calls, i.e., you’ve entered =C6 in cell C7.)<\/div>\n<\/div>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/goal_seek_02.png\" width=\"939\" height=\"682\" alt=\"\" \/>\n<\/div>\n<h2>Conclusions<\/h2>\n<p>So, we’ve calculated the minimum experiment conditions for evaluating the effectiveness of the KupiVIP voice robot.<\/p>\n<p class=\"loud\">You need at least <b>879 calls<\/b> in each of the two groups to confirm, with a 95% confidence level, that there is a difference between the 6% promo code activation rate in the control group (real live agents) and the 8% rate in the test group (voice robot).<\/p>\n<p>(The only caveat is that neither 6% nor 8% yields a whole number of activations on a sample of 879 calls, and in reality, of course, the numbers would be different — and the number of calls in the two groups could vary as well. But this doesn’t really matter much, since the conversion rates cited in the article were most likely rounded.)<\/p>\n<h2>See also:<\/h2>\n<p><a href=\"https:\/\/abtestguide.com\/calc\/?ua=1000&ub=1000&ca=60&cb=80\">https:\/\/abtestguide.com\/calc\/?ua=1000&ub=1000&ca=60&cb=80<\/a><\/p>\n",
            "summary": "A voice robot beats call center with 8% vs. 6% promo code activations. But how many calls do you actually need to prove the difference is real? We walk through the A\/B test math and find the minimum sample size for 95% confidence using Goal Seek in Google Spreadsheets, Z-score and SD.",
            "date_published": "2019-07-20T13:18:00+03:00",
            "date_modified": "2026-04-12T03:31:13+03:00",
            "tags": [
                "A\/B test",
                "call center",
                "conversion",
                "Google Sheets",
                "statistics"
            ],
            "image": "https:\/\/ivanbaldin.blog\/pictures\/vc_quote.png",
            "_date_published_rfc2822": "Sat, 20 Jul 2019 13:18:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "5",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/ivanbaldin.blog\/pictures\/vc_quote.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/1000-1000.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/sqrt.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/CodeCogsEqn02.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/sd_difference.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/z-score.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/kupivip_robot_05.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/p-value.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/goal_seek_01.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/goal_seek_02.png"
                ]
            }
        },
        {
            "id": "8",
            "url": "https:\/\/ivanbaldin.blog\/all\/one-in-five-testing-a-connection-complaint\/",
            "title": "One in Five? Testing a Connection Complaint",
            "content_html": "<p>A contractor swears the phones <b>drop out on every fifth call.<\/b> You make one — it’s fine. Another — also fine. How many do you need before you can confidently tell him he’s wrong?<\/p>\n<p>Our job is to check <b>whether the claim that 20% of calls have connection problems holds up.<\/b> And as always, we’re not going to just make 100 test calls — we don’t have the resources for that. Instead, we’ll state a null hypothesis, an alternative hypothesis, and test it at a chosen confidence level.<\/p>\n<h2>Stating the hypothesis and choosing a confidence level<\/h2>\n<p><b>The null hypothesis <i>(H<sub>0<\/sub>)<\/i><\/b> is the contractor’s claim: at least 20% of calls have connection problems. This is the claim we’re putting on trial.<\/p>\n<p><b>The alternative hypothesis <i>(H<sub>1<\/sub>)<\/i><\/b> is that the connection is fine — problems happen in fewer than 20% of calls. This is the position we’ll lean toward if the data supports it.<\/p>\n<p>(That framing matters. In hypothesis testing, you never “prove” H<sub>0<\/sub>; you either reject it or you fail to reject it. So when we say we want to side with the contractor or not, what we really mean is: can we gather enough evidence to <i>reject<\/i> his claim?)<\/p>\n<p><b>The confidence level<\/b> is how sure we want to be about the outcome. The higher it is, the more test calls we’ll need to make, so we’ll budget 1% for error and go with <b>99% confidence<\/b> — leaving a 1% chance that we reject the contractor’s claim when problems really are there.<\/p>\n<h2>Building the formula for the sample size<\/h2>\n<p>To reject <i>H<sub>0<\/sub><\/i>, all we need is to pull off <i>N<\/i> successful calls in a row with no signs of trouble — while keeping the probability at or below 1% that we simply got lucky and that real equipment problems just happened not to show up in any of the <i>N<\/i> calls.<\/p>\n<p>If the contractor is right, 80% of calls go through cleanly. The probability of no issues across <i>N<\/i> calls in a row is 0.80<sup>N<\/sup>. We need the smallest <i>N<\/i> for which that probability drops to 1%:<br \/>\n0.80<sup>N<\/sup> = 0.01<\/p>\n<p>Which is exactly the logarithm of 1% to base 80%.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/every5th01.png\" width=\"223\" height=\"36\" alt=\"\" \/>\n<\/div>\n<p>Into Google Sheets it goes:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/every5th02.png\" width=\"513\" height=\"275\" alt=\"\" \/>\n<\/div>\n<p>The formula for cell C5 looks like<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">=LOG(1-C2,1-C3)<\/code><\/pre><p>We need 20.64 calls. (Check: 0.80<sup>20.64<\/sup> = 0.9995%, right on target.)<br \/>\nAll that’s left is rounding up:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">=ROUNDUP(C5)<\/code><\/pre><p>or, in one shot,<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">=ROUNDUP(LOG(1-C2,1-C3))<\/code><\/pre><div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/every5th03.png\" width=\"481\" height=\"299\" alt=\"\" \/>\n<\/div>\n<h2>Testing the hypothesis<\/h2>\n<p>If the contractor’s claim <i>H<sub>0<\/sub><\/i> is correct and every fifth call really does have trouble, then the probability of seeing zero problems across 21 test calls in a row is about 1%. In other words: either we just hit a one-in-a-hundred coincidence, or the claim that 20% of calls have problems doesn’t hold. At the 99% confidence level, we reject <i>H<sub>0<\/sub><\/i> — in everyday terms, the connection is fine.<\/p>\n",
            "summary": "A contractor claims every fifth call has a bad connection. How many good calls in a row do you need to disprove him? This post uses a binomial hypothesis test to calculate the exact sample size for 99% confidence — with the Google Sheets formula included.",
            "date_published": "2019-06-09T16:45:58+03:00",
            "date_modified": "2026-04-24T21:06:41+03:00",
            "tags": [
                "binomial",
                "call center",
                "Google Sheets",
                "statistics"
            ],
            "image": "https:\/\/ivanbaldin.blog\/pictures\/every5th01.png",
            "_date_published_rfc2822": "Sun, 09 Jun 2019 16:45:58 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "8",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/ivanbaldin.blog\/pictures\/every5th01.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/every5th02.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/every5th03.png"
                ]
            }
        },
        {
            "id": "7",
            "url": "https:\/\/ivanbaldin.blog\/all\/call-quality-audits-determining-your-sample-size\/",
            "title": "Call Quality Audits: Determining Your Sample Size",
            "content_html": "<h2>Calculating Sample Size for Quality Call Audits<\/h2>\n<p>A common tool for assessing the quality of sales managers’ work is <b>quality auditing of phone calls<\/b>, or “call monitoring.”<\/p>\n<p>Suppose your goal is not simply to <b>measure<\/b> the quality of phone calls, but to <b>document <i>growth<\/i> in that quality.<\/b> For example, you conducted training for your managers, introduced new incentives for meeting quality standards, or implemented some other intervention.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/create-a-1080-1080-pixels-flat-style-cartoon-showi-(1).png\" width=\"1080\" height=\"1080\" alt=\"\" \/>\n<\/div>\n<p>It’s reasonable to assume that an improvement in quality in the first random call recorded after the training won’t definitively prove that quality has improved across all calls. Likely, a second successful call won’t conclusively confirm the hypothesis either.<\/p>\n<p>Thus, you’ll need to listen to — if not all calls — at least a <b>sufficient number<\/b> of calls after your changes, and the number of calls you’ll need to audit can, in fact, <b>be calculated precisely.<\/b><\/p>\n<h2>Calculating Sample Size<\/h2>\n<p>On page 35 of the paper “<a href=\"https:\/\/bpb-us-e1.wpmucdn.com\/sites.ucsc.edu\/dist\/2\/1389\/files\/2026\/03\/part1.pdf\">Introduction to Statistical Inference and Experimental Design<\/a>” I found a suitable example 1.9 and a formula for calculating such samples:<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/samplesize00.png\" width=\"858\" height=\"506\" alt=\"\" \/>\n<\/div>\n<p>In this example, an improvement in <a href=\"https:\/\/en.wikipedia.org\/wiki\/ACT\">ACT<\/a> math test scores from 24.5 (variance 8.2) to 26.0 points is considered, with α = 0.05 and power = 0.90.<\/p>\n<p>For convenience, I assembled the formula in a Google Sheet:<\/p>\n<p><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1nbpXgnRy9FQUAVQIwfHRHdj6Rvrkjom1UYsj4OHJnrc\/edit?usp=sharing\">Sample Size Calculator<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/ivanbaldin.blog\/pictures\/samplesize03.png\" width=\"1283\" height=\"532\" alt=\"\" \/>\n<div class=\"e2-text-caption\">You simply need to copy the file and substitute your own values.<br \/>\nIt’s reasonable to choose a confidence level between 80% and 95%, and a statistical power between 60% and 80%. Enter the average call quality score before changes, the standard deviation (SD) of call scores “before,” and the expected average call quality score “after” your changes.<\/div>\n<\/div>\n<h2>See also:<\/h2>\n<p><a href=\"https:\/\/bpb-us-e1.wpmucdn.com\/sites.ucsc.edu\/dist\/2\/1389\/files\/2026\/03\/part1.pdf\">https:\/\/bpb-us-e1.wpmucdn.com\/sites.ucsc.edu\/dist\/2\/1389\/files\/2026\/03\/part1.pdf<\/a><\/p>\n",
            "summary": "Stop guessing how many calls to audit. Use this statistical formula to calculate the exact sample size needed for call audits that prove quality improvements. Learn about confidence levels, power calculations, and A\/B testing verification for your sales team.",
            "date_published": "2019-05-26T16:46:00+03:00",
            "date_modified": "2026-04-18T14:21:49+03:00",
            "tags": [
                "A\/B test",
                "call center",
                "equations",
                "Google Sheets",
                "Sales Department"
            ],
            "image": "https:\/\/ivanbaldin.blog\/pictures\/create-a-1080-1080-pixels-flat-style-cartoon-showi-(1).png",
            "_date_published_rfc2822": "Sun, 26 May 2019 16:46:00 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "7",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/ivanbaldin.blog\/pictures\/create-a-1080-1080-pixels-flat-style-cartoon-showi-(1).png",
                    "https:\/\/ivanbaldin.blog\/pictures\/samplesize00.png",
                    "https:\/\/ivanbaldin.blog\/pictures\/samplesize03.png"
                ]
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}