simulateTestConversionRates = (totalVisitors, totalDays, variations) => {
const variationOutcomes = []
variations.forEach((variation) => {
const dailyVisitors = totalVisitors / totalDays;
let dailyRates = []
for (let i = 0; i < totalDays; i++) {
let dailyConversions = 0;
for (let j = 0; j < dailyVisitors; j++) {
const isConversion = (Math.random() * 100) <= variation.expected_conversion_rate;
if (isConversion) dailyConversions += 1
}
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
})
})
return variationOutcomes
}