Public
Edited
Dec 20, 2022
Insert cell
Insert cell
Insert cell
variations = {
let totalDays = 21
let totalVisitors = 100000
let variations = [
{name: 'Control', expected_conversion_rate: 3.54},
{name: 'Variation A', expected_conversion_rate: 5.21}
]

return simulateTestConversionRates(totalVisitors, totalDays, variations)
}
Insert cell
Insert cell
data = Object.assign(
(await require("@observablehq/aapl")).map(({date, close}) => ({date, value: close})),
{y: "$ Close"}
)
Insert cell
simulateTestConversionRates = (totalVisitors, totalDays, variations) => {
const variationOutcomes = []
variations.forEach((variation) => {
const dailyVisitors = totalVisitors / totalDays;
let dailyRates = []

// Run the simulation for each day
for (let i = 0; i < totalDays; i++) {
let dailyConversions = 0;
// Run the simulation for the each visitor
for (let j = 0; j < dailyVisitors; j++) {
const isConversion = (Math.random() * 100) <= variation.expected_conversion_rate;
if (isConversion) dailyConversions += 1
}
// Calculate the simulated conversion rate for the current day
const conversionRate = parseFloat(((dailyConversions / dailyVisitors) * 100).toFixed(2))
dailyRates.push(conversionRate);
}

let controlCR = variationOutcomes.find((o) => o.name == 'Control')?.conversion_rate
let varCR = parseFloat((dailyRates.reduce((a, b) => a + b) / dailyRates.length).toFixed(2))
let lift = controlCR ? parseFloat((((varCR / controlCR) - 1) * 100).toFixed(2)) : null

variationOutcomes.push({
name: variation.name,
daily_rates: dailyRates,
expected_conversion_rate: variation.expected_conversion_rate,
conversion_rate: varCR,
delta: lift,
p_value: null // TODO
})
})
return variationOutcomes
}
Insert cell
d3 = require('d3@5')
Insert cell
_ = require('lodash')
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more