https://github.com/akassharjun/shapleyvaluefl

A pip library for calculating the Shapley Value for computing the marginal contribution of each client in a Federated Learning environment.

https://github.com/akassharjun/shapleyvaluefl

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (7.1%) to scientific vocabulary

Keywords

federated-learning game-theory incentive-mechanism machine-learning shapley-value
Last synced: 6 months ago · JSON representation

Repository

A pip library for calculating the Shapley Value for computing the marginal contribution of each client in a Federated Learning environment.

Basic Info
  • Host: GitHub
  • Owner: akassharjun
  • License: mit
  • Language: Python
  • Default Branch: main
  • Homepage:
  • Size: 16.6 KB
Statistics
  • Stars: 26
  • Watchers: 1
  • Forks: 3
  • Open Issues: 0
  • Releases: 0
Topics
federated-learning game-theory incentive-mechanism machine-learning shapley-value
Created almost 4 years ago · Last pushed about 2 years ago
Metadata Files
Readme License

README.md

ShapleyValueFL

A pip library for computing the marginal contribution (Shapley Value) for each client in a Federated Learning environment.

Table of Content

Brief

The Shapley Value is a game theory concept that explores how to equitably distribute rewards and costs among members of a coalition. It is extensively used in incentive mechanisms for Federated Learning to fairly distribute rewards to clients based on their contribution to the system.

Let $v(S)$ where $S\subset N$ is defined as the contribution of the model collaboratively trained by the subset $S$. $N$ is a set of all the participants in the system. The i-th participant’s Shapley Value $\phi(i)$ is defined as

$$\phi(i) = \sum_{S\subset N \backslash {i}} \frac{|S|!(N-|S|-1)!}{|N|!}(v(S\cup {i}) - v(S))$$

The marginal contribution of the $i-th$ participant is defined as $(v(S \cup {i}) - v(S))$ when they join this coalition.

Let's see this equation in action, consider a Federated Learning environment with three clients, so $N = {0, 1, 2}$. We list the contribution of each subset within this coalition. Let's consider the contribution to be measured in terms of model accuracy.

$v(\emptyset) = 0$    $v(\{0\}) = 40$    $v(\{1\}) = 60$    $v(\{2\}) = 80$ $v(\{0,1\}) = 70$    $v(\{0,2\}) = 75$    $v(\{1,2\}) = 85$ $v(\{0,1,2\}) = 90$
| Subset | Client #0 | Client #1 | Client #2 | | ------------- | ------------- | ------------- | ------------- | | $0 \leftarrow 1 \leftarrow 2$ | 40 | 30 | 20 | | $0 \leftarrow 2 \leftarrow 1$ | 40 | 15 | 35 | | $1 \leftarrow 0 \leftarrow 2$ | 10 | 60 | 20 | | $1 \leftarrow 2 \leftarrow 0$ | 5 | 60 | 25 | | $2 \leftarrow 0 \leftarrow 1$ | 0 | 10 | 80 | | $2 \leftarrow 1 \leftarrow 0$ | 5 | 5 | 80 | | $Sum$ | 100 | 180 | 260 | | $\phi(i)$ | 16.67 | 30 | 43.33 |

The arrow signifies the order in which each client joins the coalition. Consider the first iteration $0 \leftarrow 1 \leftarrow 2$, we calculate the marginal contribution of each client using the above equation.

  • Client 0's marginal contribution is given as $v({0}) = 40$.
  • Client 1's marginal contribution is given as $v({0, 1}) - v({0}) = 30$.
  • Client 2's marginal contribution is given as $v({0, 1, 2}) - v({0, 1}) - v({0}) = 20$.

The marginal contribution is calculated for each permutation likewise, and the Shapley Value is derived by averaging all of these marginal contributions.

Usage

```python from svfl.svfl import calculate_sv

models = { "client-id-1" : ModelUpdate(), "client-id-2" : ModelUpdate(), "client-id-3" : ModelUpdate(), }

def evaluate_model(model): # function to compute evaluation metric, ex: accuracy, precision return metric

def fed_avg(models): # function to merge the model updates into one model for evaluation, ex: FedAvg, FedProx return model

returns a key value pair with the client identifier and it's respective Shapley Value

contributionmeasure = calculatesv(models, evaluatemodel, fedavg) ```

Future Work

  • Built-in support for standard averaging methods like FedAvg, & FedProx.

Feedback

Any feedback/corrections/additions are welcome:

If this was helpful, please leave a star on the github page.

Owner

  • Name: Akassharjun Shanmugarajah
  • Login: akassharjun
  • Kind: user
  • Location: Colombo

i am swe.

GitHub Events

Total
  • Watch event: 2
Last Year
  • Watch event: 2

Issues and Pull Requests

Last synced: 8 months ago

All Time
  • Total issues: 0
  • Total pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Total issue authors: 0
  • Total pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 0
  • Average time to close issues: N/A
  • Average time to close pull requests: N/A
  • Issue authors: 0
  • Pull request authors: 0
  • Average comments per issue: 0
  • Average comments per pull request: 0
  • Merged pull requests: 0
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels

Dependencies

setup.py pypi