Skip to main content

Enumerating Fair Packages for Group Recommendations (WSDM 2022)

We proposed an efficient method to enumerate all fair packages with respect to envy-freeness and proportionality.

Paper: https://arxiv.org/abs/2105.14423

💿 Installation

$ pip install fape

💡 How to Use

This package is compatible with graphillion and SAPPOROBDD. Please install graphillion via

$ pip install graphillion

Basic Usage

fape.construct_zdd constructs ZDD and outputs a ZDD string.

import fape
import numpy as np
from graphillion import setset

m = 3
n = 4
R = np.array([
    [10.0, 20.0, 5.0, 5.0],
    [10.0, 5.0, 5.0, 30.0],
    [10.0, 20.0, 5.0, 5.0],
]) # 3 members x 4 itmes

zdd_string = fape.construct_zdd(
    R,
    package_size=2,
    tau=3,
    criterion='proportionality',
    delta=0.5
)
setset.set_universe([i for i in range(n)])
ss = setset(setset.loads(zdd_string))
for r in ss:
    print(r)
# {0, 1}
# {0, 2}
# {0, 3}
# {1, 3}

weight = {
    i: R[:, i].mean() for i in range(n)
}
for r in ss.max_iter(weight):
    print(r)
    break
# {1, 3}

In this example, delta = 0.5 means that each member likes the items with top talf ratings. Namely,

  • member 0 likes items 0 and 1,
  • member 1 likes items 0 and 3, and
  • member 2 likes items 0 and 1 (zero-indexed).

tau = 3 means that three members (i.e., all members) should be satisfied. fape.construct_zdd enumerates such packages. There are qualified four packages, {0, 1}, {0, 2}, {0, 3}, and {1, 3}.

weight is a dictionary that stores the average preference of each item. max_iter iterates packages in the descreasing order of weights. In this example, package {1, 3} has the largest weight.

A graphillion.setset.setset supports various operations, including union (|) and intersection (&). Please refer to the document of graphillion for more details.

📝 Results

Dataset
Metric
MovieLens
Proportionality
MovieLens
Envyfreeness
MovieLens
Preference
MovieLens
TotalScore
Amazon
Proportionality
Amazon
Envyfreeness
Amazon
Preference
Amazon
TotalScore
Averanking 1.000 ± 0.000 0.725 ± 0.156 0.911 ± 0.027 2.636 ± 0.171 1.000 ± 0.000 0.500 ± 0.125 0.939 ± 0.012 2.439 ± 0.126
LMRanking 0.988 ± 0.037 0.588 ± 0.168 0.876 ± 0.036 2.451 ± 0.188 0.912 ± 0.263 0.425 ± 0.139 0.924 ± 0.031 2.261 ± 0.373
GreedyVar 0.912 ± 0.080 0.750 ± 0.112 0.812 ± 0.035 2.474 ± 0.157 0.787 ± 0.202 0.637 ± 0.088 0.859 ± 0.031 2.284 ± 0.287
GreedyLM 0.950 ± 0.061 0.775 ± 0.109 0.813 ± 0.036 2.538 ± 0.155 0.662 ± 0.159 0.600 ± 0.094 0.853 ± 0.031 2.115 ± 0.249
GFAR 0.950 ± 0.061 0.762 ± 0.104 0.812 ± 0.038 2.525 ± 0.154 0.762 ± 0.142 0.650 ± 0.075 0.871 ± 0.025 2.284 ± 0.219
SPGreedy 1.000 ± 0.000 0.525 ± 0.156 0.851 ± 0.041 2.376 ± 0.167 1.000 ± 0.000 0.375 ± 0.079 0.867 ± 0.015, 2.242 ± 0.085
EFGreedy 0.925 ± 0.127 1.000 ± 0.000 0.792 ± 0.053 2.717 ± 0.165 0.750 ± 0.244 0.838 ± 0.080 0.854 ± 0.027 2.441 ± 0.302
FAPE(ours, exact) 1.000 ± 0.000 1.000 ± 0.000 0.888 ± 0.037 2.888 ± 0.037 1.000 ± 0.000 0.912 ± 0.057 0.913 ± 0.020 2.825 ± 0.064
FAPE(ours, 10th) 1.000 ± 0.000 1.000 ± 0.000 0.887 ± 0.037 2.887 ± 0.037 1.000 ± 0.000 0.912 ± 0.057 0.911 ± 0.020 2.824 ± 0.064
FAPE(ours, 100th) 1.000 ± 0.000 1.000 ± 0.000 0.881 ± 0.040 2.881 ± 0.040 1.000 ± 0.000 0.900 ± 0.050 0.905 ± 0.025 2.805 ± 0.058
FAPE(ours, random) 1.000 ± 0.000 1.000 ± 0.000 0.720 ± 0.044 2.720 ± 0.044 1.000 ± 0.000 0.912 ± 0.057 0.878 ± 0.023 2.790 ± 0.069

Please refer to the paper for more details.

🧪 How to Reproduce

Dependency of python scripts

Please install graphillion and surprise via pip install graphillion scikit-surprise

Data

You can download and preprocess data by the following command. It may take time. Please use only MovieLens 100k/1m if it takes too much time.

$ bash download.sh

100k.npy, 1m.npy, 10m.npy, 20m.npy, and 25m.npy are variants of the MovieLens dataset. home_and_kitchen.npy is the Amazon dataset.

Evaluation Scripts

  • speed.py measures the speed of FAPE (Section 4.2).
  • evaluate_baselines.py evaluates the baseline methods (Section 4.3).
  • evaluate_ours.py evaluates FAPE (Section 4.3).

Citation

@inproceedings{sato2022enumerating,
  author    = {Ryoma Sato},
  title     = {Enumerating Fair Packages for Group Recommendations},
  booktitle = {Proceedings of the Fifteenth {ACM} International Conference on Web Search and Data Mining, {WSDM}},
  year      = {2022},
}

Metadata

Release files for fape 0.0.1

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

Source distribution (sdist)

Source distribution for fape 0.0.1
File Size Uploaded Provenance Actions
fape-0.0.1.tar.gz 5.6 kB Without provenance Details for fape-0.0.1.tar.gz

Release files / fape-0.0.1.tar.gz

Download URL fape-0.0.1.tar.gz
Size 5.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d8dfc7747cd188b1f72d8b7690454b1de62e96e9267dc6c288d6710a6672deb7
BLAKE2b-256 checksum
How to use checksums
b572672cb1798aa31d3800fe6344a096778428520acce32e1aca82d2e090f2e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.7.1 importlib_metadata/4.8.1 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.8.3

Security for fape 0.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.0.1 This release

1 release file No provenance

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