Skip to content

joisino/fape

Repository files navigation

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},
}

About

Code for "Enumerating Fair Packages for Group Recommendations" (WSDM 2022)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published