A python library for preference based learning using pairwise comparisons.
If we want to recommend a personalised list of items to an individual. We could consider the following:
- Ask the individual to manually rank all items.
- Ask the individual to provide weights based on their preferences of different features (size, cost, weight etc), and calculate the weighted value of each item.
- Find similar people and base recommendations on what these people also like.
- Ask the individual to compare a small number of alternatives, and derive feature weights from those comparisons.
Option 1 quickly becomes an enormous burden on the user as the number of items increases.
Option 2 is difficult for the user to do and replicate. What exactly does it mean if the weight assigned to one feature is double the weight assigned to another?
Option 3 requires lots of data, a way to determine similarity between individuals, and may not be fully personalised.
Option 4 is enabled by preference based learning using pairwise comparisons.
pip install pypbl
Dependencies and packaging is managed using Poetry.
Install poetry and clone the repository
To create a virtual environment and install dependencies
poetry install
To run tests
poetry run pytest --cov=src --cov-branch --cov-fail-under=90 tests/
To run linting
poetry run flake8 src/ --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
This project is licensed under the MIT License - see the LICENSE.md file for details
- Early versions of this package is heavily based on the PrefeR library by John Lepird.
- PreferenceElicitation.jl by Mykel Kochenderfer.
- Interactive Bayesian Optimisation by Eric Brochu.
- Improve suggestion engine as using entropy is expensive to compute.
- Include dynasty sampling algorithm and PyMC3 or perhaps pyMC4
- Include preference elicitation using Gaussian Processes see gp_pref_elicit for non-linear utility functions.