Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.08 KB | None | 0 0
  1. # A/B TEST
  2. # setup
  3. horizon <- 1000L
  4. simulations <- 1000L
  5. conversionProbabilities <- c(0.05, 0.10, 0.15, 0.20, 0.25)
  6.  
  7. nTestSample <- 0.5 * horizon
  8.  
  9. clickProb <- rep(NA, simulations)
  10. adDistMatrix <- matrix(NA, nrow = simulations,
  11. ncol = length(conversionProbabilities))
  12. adDistMatrixAB <- matrix(NA, nrow = simulations,
  13. ncol = length(conversionProbabilities))
  14.  
  15. # simulation
  16. for(i in 1:simulations){
  17. testSample <- sapply(conversionProbabilities,
  18. function(x) sample(0:1, nTestSample, replace = TRUE, prob = c(1 - x, x)))
  19.  
  20. testColumns <- (1:length(conversionProbabilities))[-which.max(colSums(testSample))]
  21.  
  22. p.values <- sapply(testColumns, function(x) prop.test(x = colSums(testSample[, c(x, which.max(colSums(testSample)))]),
  23. n = rep(nTestSample, 2))$p.value)
  24.  
  25. adsAfterABTest <- (1:length(conversionProbabilities))[- testColumns[which(p.values < 0.05)]]
  26.  
  27. # now just with the best performing ad(s)
  28. ABSample <- sapply(conversionProbabilities[adsAfterABTest],
  29. function(x) sample(0:1,
  30. round((horizon - nTestSample) * length(conversionProbabilities) /
  31. length(adsAfterABTest), 0),
  32. replace = TRUE, prob = c(1 - x, x)))
  33.  
  34. clickProbTest <- sum(as.vector(testSample)) / length(unlist(testSample))
  35. clickProbAB <- sum(as.vector(ABSample)) / length(unlist(ABSample))
  36.  
  37. clickProb[i] <- clickProbTest * (nTestSample / horizon) + clickProbAB * (1 - nTestSample / horizon)
  38.  
  39. # distribution of which ads were seen over the course of all trials
  40. adDistMatrix[i,] <- rep(1 / length(conversionProbabilities), length(conversionProbabilities))
  41. adDistributionAB <- rep(0, length(conversionProbabilities))
  42. adDistributionAB[adsAfterABTest] <- rep(1 / length(adsAfterABTest), length(adsAfterABTest))
  43. adDistMatrixAB[i,] <- adDistributionAB
  44.  
  45. }
  46.  
  47. # total payoff
  48. ABPayoff <- (nTestSample * clickProbTest) + (nTestSample * clickProbAB)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement