A clean implementation of the Balancing Walk Design for online experimental design from Arbour, Dimmery, Mai and Rao (2022)
Project description
Balancing Walk Design
This package provides a reference implementation of the Balancing Walk Design. It relies on minimal dependencies and is intended to be an easy way to plug in advanced experimental designs into existing systems with little overhead.
More details on the design of the method on the About page and in the paper. An example of usage is below.
Installation
(packages not yet available)
With pip
:
pip install bwd
Usage
A simple example of how to use BWD to balance a stream of covariate data follows:
from bwd import BWD
from numpy.random import default_rng
import numpy as np
rng = default_rng(2022)
n = 10000
d = 5
ate = 1
beta = rng.normal(size = d)
X = rng.normal(size = (n, d))
balancer = BWD(N = n, D = d)
A_bwd = []
A_rand = []
imbalance_bwd = np.array([[0] * d])
imbalance_rand = np.array([[0] * d])
increment_imbalance = lambda imba, a, x: np.concatenate([imba, imba[-1:, :] + (2 * a - 1) * x])
for x in X:
# Assign with BWD
a_bwd = balancer.assign_next(x)
imbalance_bwd = increment_imbalance(imbalance_bwd, a_bwd, x)
A_bwd.append(a_bwd)
# Assign with Bernoulli randomization
a_rand = rng.binomial(n = 1, p = 0.5, size = 1).item()
imbalance_rand = increment_imbalance(imbalance_rand, a_rand, x)
A_rand.append(a_rand)
# Outcomes are only realized at the conclusion of the experiment
eps = rng.normal(size=n)
Y_bwd = X @ beta + A_bwd * ate + eps
Y_rand = X @ beta + A_rand + ate + eps
We can see how imbalance progresses as a function of time:
import seaborn as sns
import pandas as pd
norm_bwd = np.linalg.norm(imbalance_bwd, axis = 1).tolist()
norm_rand = np.linalg.norm(imbalance_rand, axis = 1).tolist()
sns.relplot(
x=list(range(n + 1)) * 2, y=norm_bwd + norm_rand,
hue = ["BWD"] * (n + 1) + ["Random"] * (n + 1),
kind="line", height=5, aspect=2,
).set_axis_labels("Iteration", "Imbalance");
It's clear from the above chart that using BWD keeps imbalance substantially more under control than standard methods of randomization.
Citation
APA
Arbour, D., Dimmery, D., Mai, T. & Rao, A.. (2022). Online Balanced Experimental Design. Proceedings of the 39th International Conference on Machine Learning, in Proceedings of Machine Learning Research 162:844-864 Available from https://proceedings.mlr.press/v162/arbour22a.html.
BibTeX
@InProceedings{arbour2022online,
title = {Online Balanced Experimental Design},
author = {Arbour, David and Dimmery, Drew and Mai, Tung and Rao, Anup},
booktitle = {Proceedings of the 39th International Conference on Machine Learning},
pages = {844--864},
year = {2022},
editor = {Chaudhuri, Kamalika and Jegelka, Stefanie and Song, Le and Szepesvari, Csaba and Niu, Gang and Sabato, Sivan},
volume = {162},
series = {Proceedings of Machine Learning Research},
month = {17--23 Jul},
publisher = {PMLR},
pdf = {https://proceedings.mlr.press/v162/arbour22a/arbour22a.pdf},
url = {https://proceedings.mlr.press/v162/arbour22a.html},
}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file bwd-0.1.7.tar.gz
.
File metadata
- Download URL: bwd-0.1.7.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/23.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96afcf58dc9f56632bb5dfb8f625981b88cd2304374589c12aafe1951e3d6c00 |
|
MD5 | a06052967c464e5006e8edfe60e68e6a |
|
BLAKE2b-256 | c25a0b35d55ea967334439a18587348b9e12bc05ee069cbc8a8c7d4537b6cb47 |
File details
Details for the file bwd-0.1.7-py3-none-any.whl
.
File metadata
- Download URL: bwd-0.1.7-py3-none-any.whl
- Upload date:
- Size: 14.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.4 Darwin/23.2.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1873267654210324f8d0f0ddf5924e8bd9ef3f73596346ac71251c8e3c688a5a |
|
MD5 | 0ffefdb041bd741c762e0b344f0cb310 |
|
BLAKE2b-256 | 26d7df76b12cdcb3977a568390f553a4f5081275988912ed232eb5af2c0891e6 |