Skip to main content

ci PyPI version fury.io PyPI license PRs Welcome Downloads

MABWiser: Parallelizable Contextual Multi-Armed Bandits

MABWiser (IJAIT 2021, ICTAI 2019) is a research library written in Python for rapid prototyping of multi-armed bandit algorithms. It supports context-free, parametric and non-parametric contextual bandit models and provides built-in parallelization for both training and testing components.

The library also provides a simulation utility for comparing different policies and performing hyper-parameter tuning. MABWiser follows a scikit-learn style public interface, adheres to PEP-8 standards, and is tested heavily.

MABWiser is developed by the Artificial Intelligence Center of Excellence at Fidelity Investments. Documentation is available at fidelity.github.io/mabwiser.

Bandit-based Recommender Systems

To solve personalized recommendation problems, MABWiser is integrated into our Mab2Rec library. Mab2Rec enables building content- and context-aware recommender systems, whereby MABWiser helps selecting the next best item (arm).

To solve combinatorial optimization problems, MABWiser is integrated into Adaptive Large Neighborhood Search. The ALNS library enables building metaheuristics for complex optimization problems, whereby MABWiser helps selecting the next best destroy, repair operation (arm).

Quick Start

# An example that shows how to use the UCB1 learning policy
# to choose between two arms based on their expected rewards.

# Import MABWiser Library
from mabwiser.mab import MAB, LearningPolicy, NeighborhoodPolicy

# Data
arms = ['Arm1', 'Arm2']
decisions = ['Arm1', 'Arm1', 'Arm2', 'Arm1']
rewards = [20, 17, 25, 9]

# Model 
mab = MAB(arms, LearningPolicy.UCB1(alpha=1.25))

# Train
mab.fit(decisions, rewards)

# Test
mab.predict()

Available Bandit Policies

Available Learning Policies:

  • Epsilon Greedy [1, 2]
  • LinGreedy [1, 2]
  • LinTS [3]. See [11] for a formal treatment of reproducibility in LinTS
  • LinUCB [4]
  • Popularity [2]
  • Random [2]
  • Softmax [2]
  • Thompson Sampling (TS) [5]
  • Upper Confidence Bound (UCB1) [2]

Available Neighborhood Policies:

  • Clusters [6]
  • K-Nearest [7, 8]
  • LSH Nearest [9]
  • Radius [7, 8]
  • TreeBandit [10]

Installation

MABWiser requires Python 3.8+ and can be installed from PyPI using pip install mabwiser or by building from source as shown in installation instructions.

Support

Please submit bug reports and feature requests as Issues.

Citation

If you use MABWiser in a publication, please cite it as:

    @article{DBLP:journals/ijait/StrongKK21,
      author    = {Emily Strong and Bernard Kleynhans and Serdar Kadioglu},
      title     = {{MABWiser:} Parallelizable Contextual Multi-armed Bandits},
      journal   = {Int. J. Artif. Intell. Tools},
      volume    = {30},
      number    = {4},
      pages     = {2150021:1--2150021:19},
      year      = {2021},
      url       = {https://doi.org/10.1142/S0218213021500214},
      doi       = {10.1142/S0218213021500214},
    }

    @inproceedings{DBLP:conf/ictai/StrongKK19,
    author    = {Emily Strong and Bernard Kleynhans and Serdar Kadioglu},
    title     = {MABWiser: {A} Parallelizable Contextual Multi-Armed Bandit Library for Python},
    booktitle = {31st {IEEE} International Conference on Tools with Artificial Intelligence, {ICTAI} 2019, Portland, OR, USA, November 4-6, 2019},
    pages     = {909--914},
    publisher = {{IEEE}},
    year      = {2019},
    url       = {https://doi.org/10.1109/ICTAI.2019.00129},
    doi       = {10.1109/ICTAI.2019.00129},
    }

License

MABWiser is licensed under the Apache License 2.0.

References

  1. John Langford and Tong Zhang. The epoch-greedy algorithm for contextual multi-armed bandits
  2. Volodymyr Kuleshov and Doina Precup. Algorithms for multi-armed bandit problems
  3. Agrawal, Shipra and Navin Goyal. Thompson sampling for contextual bandits with linear payoffs
  4. Chu, Wei, Li, Lihong, Reyzin Lev, and Schapire Robert. Contextual bandits with linear payoff functions
  5. Osband, Ian, Daniel Russo, and Benjamin Van Roy. More efficient reinforcement learning via posterior sampling
  6. Nguyen, Trong T. and Hady W. Lauw. Dynamic clustering of contextual multi-armed bandits
  7. Melody Y. Guan and Heinrich Jiang, Nonparametric stochastic contextual bandits
  8. Philippe Rigollet and Assaf Zeevi. Nonparametric bandits with covariates
  9. Indyk, Piotr, Motwani, Rajeev, Raghavan, Prabhakar, Vempala, Santosh. Locality-preserving hashing in multidimensional spaces
  10. Adam N. Elmachtoub, Ryan McNellis, Sechan Oh, Marek Petrik, A practical method for solving contextual bandit problems using decision trees
  11. Doruk Kilitcioglu, Serdar Kadioglu, Non-deterministic behavior of thompson sampling with linear payoffs and how to avoid it

Metadata

Release files for mabwiser 2.7.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mabwiser 2.7.4
File Size Uploaded
mabwiser-2.7.4.tar.gz 95.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mabwiser 2.7.4
File Interpreter ABI Platform
mabwiser-2.7.4-py3-none-any.whl Python 3 none any Details

Total release size: 156.5 kB

Release files / mabwiser-2.7.4.tar.gz

Download URL mabwiser-2.7.4.tar.gz
Size 95.4 kB
Tags Source
SHA-256 checksum
How to use checksums
82055ada833cd81617e67c87630fc9895f05790ebe4679fdf6b1eafccdcf821c
BLAKE2b-256 checksum
How to use checksums
5e051ee61041c3f73e0a0df945eda76f29fe6181443475bb9d5d95b4d453112c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.19

Release files / mabwiser-2.7.4-py3-none-any.whl

Download URL mabwiser-2.7.4-py3-none-any.whl
Size 61.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ac5a5d2d959b55685248645675d5f84f7c620eba270925bf86edce8c5712b49
BLAKE2b-256 checksum
How to use checksums
ad85400f1740996be9afa3e2a84e96b77f1858d7025085d0441da988abc075da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.8.19

Release history Release notifications | RSS feed

This release

2.7.4 This release

2 release files

2.7.3

2 release files

2.7.2

2 release files

2.7.1

2 release files

2.7.0

2 release files

2.6.0

2 release files

2.5.0

2 release files

2.4.1

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.12.0

2 release files

1.11.2

2 release files

1.11.1

2 release files

1.10.1

2 release files

1.10.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page