Introduction to Bayesian Thinking for Business Leaders

Data Science
Decision Making
Why traditional statistical methods often fail in business contexts, and how Bayesian approaches can help you make better decisions under uncertainty.
Author

Luca Fiaschi

Published

January 28, 2026

The Problem with Traditional Statistics

Most of us learned statistics in a way that doesn’t translate well to real business decisions. We were taught to collect data, compute a p-value, and declare something “statistically significant” if p < 0.05. But what does that actually mean for your business?

Here’s the uncomfortable truth: p-values don’t tell you what you really want to know.

When you’re deciding whether to launch a new product, hire a candidate, or invest in a marketing campaign, you want to know: “What’s the probability this will work?” Traditional statistics can’t answer that question directly. Bayesian statistics can.

A Simple Example: Marketing Campaign Effectiveness

Imagine you’ve run a marketing campaign and want to know if it increased sales. You have:

  • Control group: 1,000 customers, 50 purchases (5% conversion rate)
  • Treatment group: 1,000 customers, 65 purchases (6.5% conversion rate)

Let’s analyze this using both approaches.

The Traditional Approach

A frequentist would calculate a p-value. If p < 0.05, they’d declare the campaign “statistically significant.” But this doesn’t tell you:

  • How confident should you be that the campaign actually works?
  • What’s the likely size of the effect?
  • Should you roll out the campaign to everyone?

The Bayesian Approach

With Bayesian analysis, we can directly answer: “What’s the probability that the campaign improved conversion rates?”

Code
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# Set random seed for reproducibility
np.random.seed(42)

# Data
control_conversions = 50
control_total = 1000
treatment_conversions = 65
treatment_total = 1000

# Prior: Beta(1, 1) = Uniform prior (no prior knowledge)
# Posterior: Beta(1 + conversions, 1 + non-conversions)

# Generate posterior samples
control_samples = np.random.beta(
    1 + control_conversions,
    1 + control_total - control_conversions,
    size=100000
)
treatment_samples = np.random.beta(
    1 + treatment_conversions,
    1 + treatment_total - treatment_conversions,
    size=100000
)

# Probability that treatment is better
prob_treatment_better = np.mean(treatment_samples > control_samples)

# Plotting
fig, axes = plt.subplots(1, 2, figsize=(12, 4))

# Left plot: Posterior distributions
x = np.linspace(0.03, 0.10, 200)
control_pdf = stats.beta.pdf(x, 1 + control_conversions, 1 + control_total - control_conversions)
treatment_pdf = stats.beta.pdf(x, 1 + treatment_conversions, 1 + treatment_total - treatment_conversions)

axes[0].fill_between(x, control_pdf, alpha=0.5, label='Control', color='#0ea5e9')
axes[0].fill_between(x, treatment_pdf, alpha=0.5, label='Treatment', color='#ea7d28')
axes[0].set_xlabel('Conversion Rate', fontsize=12)
axes[0].set_ylabel('Probability Density', fontsize=12)
axes[0].set_title('Posterior Distributions of Conversion Rates', fontsize=14)
axes[0].legend()
axes[0].spines['top'].set_visible(False)
axes[0].spines['right'].set_visible(False)

# Right plot: Distribution of the difference
difference = treatment_samples - control_samples
axes[1].hist(difference * 100, bins=50, alpha=0.7, color='#ea7d28', edgecolor='white')
axes[1].axvline(x=0, color='#27241f', linestyle='--', linewidth=2, label='No effect')
axes[1].set_xlabel('Improvement in Conversion Rate (%)', fontsize=12)
axes[1].set_ylabel('Frequency', fontsize=12)
axes[1].set_title(f'Distribution of Treatment Effect\nP(Treatment > Control) = {prob_treatment_better:.1%}', fontsize=14)
axes[1].legend()
axes[1].spines['top'].set_visible(False)
axes[1].spines['right'].set_visible(False)

plt.tight_layout()
plt.savefig('bayesian-preview.png', dpi=150, bbox_inches='tight', facecolor='white')
plt.show()

print(f"\nKey Results:")
print(f"  Probability treatment is better: {prob_treatment_better:.1%}")
print(f"  Expected improvement: {np.mean(difference)*100:.2f} percentage points")
print(f"  95% credible interval: [{np.percentile(difference, 2.5)*100:.2f}, {np.percentile(difference, 97.5)*100:.2f}] percentage points")

Posterior distributions for conversion rates in control and treatment groups

Key Results:
  Probability treatment is better: 92.3%
  Expected improvement: 1.49 percentage points
  95% credible interval: [-0.55, 3.56] percentage points

The Bayesian approach tells us directly: there’s a 95% probability the campaign improved conversion rates. That’s something you can actually use to make a decision!

Understanding Bayes’ Theorem

At the heart of Bayesian statistics is a beautifully simple formula:

\[ P(\theta | \text{data}) = \frac{P(\text{data} | \theta) \cdot P(\theta)}{P(\text{data})} \]

In plain English:

  • \(P(\theta | \text{data})\) - What we want: the probability our hypothesis is true, given the data (the posterior)
  • \(P(\text{data} | \theta)\) - How likely we’d see this data if our hypothesis were true (the likelihood)
  • \(P(\theta)\) - Our prior belief before seeing the data (the prior)
  • \(P(\text{data})\) - How likely this data is overall (the evidence)

The magic is that Bayesian analysis lets you:

  1. Start with what you already know (prior knowledge from past campaigns, industry benchmarks, etc.)
  2. Update your beliefs rationally as new data comes in
  3. Quantify uncertainty in a way that directly informs decisions

Expected Value: Making Decisions Under Uncertainty

Once you have probability distributions instead of point estimates, you can make better decisions by calculating expected values:

\[ E[\text{Profit}] = \sum_{i} P(\text{outcome}_i) \times \text{Profit}_i \]

For our marketing campaign, if the campaign costs $10,000 and each additional conversion is worth $200:

Code
# Campaign cost
campaign_cost = 10000

# Value per additional conversion
value_per_conversion = 200

# Number of customers to roll out to
rollout_customers = 50000

# Calculate expected additional conversions
expected_lift = np.mean(difference)  # difference in conversion rate
expected_additional_conversions = expected_lift * rollout_customers

# Expected profit
expected_profit = expected_additional_conversions * value_per_conversion - campaign_cost

# Risk assessment
profit_samples = (difference * rollout_customers * value_per_conversion) - campaign_cost
prob_profit = np.mean(profit_samples > 0)

print(f"Decision Analysis for Campaign Rollout:")
print(f"  Expected additional conversions: {expected_additional_conversions:,.0f}")
print(f"  Expected profit: ${expected_profit:,.0f}")
print(f"  Probability of being profitable: {prob_profit:.1%}")
print(f"  Risk of loss: {(1-prob_profit):.1%}")
Decision Analysis for Campaign Rollout:
  Expected additional conversions: 746
  Expected profit: $139,196
  Probability of being profitable: 90.8%
  Risk of loss: 9.2%

This is the power of Bayesian thinking: not just “is this significant?” but “what should I do, and what’s my risk?”

When to Use Bayesian Methods

Bayesian approaches are particularly valuable when:

  1. You have prior information - Industry benchmarks, historical data, or expert knowledge
  2. Sample sizes are small - Bayesian methods handle small samples more gracefully
  3. You need to make decisions - Bayesian outputs translate directly to decision-making
  4. Uncertainty matters - You need to quantify and communicate risk

Practical Takeaways

  1. Think in probabilities, not p-values - Ask “What’s the probability this works?” not “Is this significant?”

  2. Embrace uncertainty - A well-quantified uncertainty is more useful than false precision

  3. Update your beliefs - As new data comes in, update your estimates. This is natural in Bayesian thinking.

  4. Calculate expected values - Combine probabilities with business outcomes to make optimal decisions

Learn More

If you’re interested in applying Bayesian thinking to your business decisions, I’d love to help. Get in touch to discuss how we can work together.

For those wanting to dive deeper into the technical side, I recommend:

  • Bayesian Data Analysis by Gelman et al.
  • Statistical Rethinking by Richard McElreath
  • The PyMC library for Bayesian modeling in Python