Skip to content

bestchoice.js - Self Learning Weighted Multivariate Testing Tool

License

Notifications You must be signed in to change notification settings

programmatio/bestchoice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

32 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bestchoice.js

Self Learning Weighted Multivariate Testing Module

This is a tool to automate the selection of the best page. not only it provides you with an ability to chose the best page, but also it does this more effectively that your typical A/B test approach. It is based on Statistical significance test and typically is superior to A/B testing. Rather than telling which page is the best by the end of testing, typical to A/B testing, it gradually selects the best performing page.

How to use

Type in terminal to install

npm install bestchoice

In your index.js and add

var bc = require('bestchoice');

Campaign Managment Example Code

Adding a new campaign

bc.addCampaign('t00000001',
   'http://www.test1.com/register',
   ['http://www.test1.com/register?lpv=a',
    'http://www.test1.com/register?lpv=b',
    'http://www.test1.com/register?lpv=c',
    'http://www.test1.com/register?lpv=b'],
    0.1,
    1);

Removing a campaign

bc.removeCampaign('t00000001');

Getting all availible campaigns Returns all running campaigns as Objects

bc.getCampaigns();

Saving all availible campaigns as JSON Returns all running campaigns

var data = bc.getCampaigns();

Loading previously computed campaigns as a current stack

bc.loadCampaign(data);

Campaign Managment Example Code

First visit. Supply with campaign ID and path name. Returns page variant to use and unique ID to use as a Cookie.

bc.getPage('t00000001', 'http://www.test1.com/register');

Conversion trigger. Supply with campaign ID, path name, cookie and the amount of reward between 0 and 1.

bc.getPage('t00000001', 'http://www.test2.com/register', 'unique cookie');

Express Example


'use strict';

var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
var bc = require('bestchoice');
app.use(cookieParser());

bc.dictionary = {
  'http://www.test1.com/register': 't00000001',
  'http://localhost:3000/register': 't00000001'
};

bc.addCampaign('t00000001',
  'http://localhost:3000/register',
  ['http://localhost:3000/register/a',
   'http://localhost:3000/register/b',
   'http://localhost:3000/register/c'
  ],
  0.1,
  30); // expire every 30 minutes

  setInterval(function() {
      bc.updateExpiredVisits("t00000001");
  }, 30000); // update every 30 minutes

app.get('/', function(req, res) {

  res.send('Locked and Loaded');

});

app.get('/register', function(req, res) {

  var cookie = req.cookies.bc;
  var url = req.protocol + '://' + req.get('host') + req.originalUrl;
  var campaign = bc.dictionary[url];
  var get = bc.getPage(bc.dictionary[url], url, cookie);
  if (cookie === undefined) {
    res.cookie('bc', get, {
      maxAge: 3600 * 1000,
      httpOnly: true
    });
  }
  res.redirect(get.pageVariant);

});

app.get('/register/:variant', function(req, res) {
  var campaign = req.cookies.bc.campaignID;
  var variant = req.cookies.bc.pageVariant;
  res.send('Variant Page');
});

app.get('/convert', function(req, res) {
  var params = req.cookies.bc;
  var cookie = params.cookie;
  var campaign = req.cookies.bc.campaignID;
  var variant = req.cookies.bc.pageVariant;
  bc.registerConversion(campaign, variant, req.cookies.bc.cookie, 1);
  res.send('Converted');
});

app.get('/results', function(req, res) {
  res.send(JSON.stringify(bc.getCampaigns()));
});

app.listen(3000, function() {
  console.log('Example app listening on port 3000!');
});

About

bestchoice.js - Self Learning Weighted Multivariate Testing Tool

Resources

License

Stars

Watchers

Forks

Packages

No packages published