KernelSHAPIQ

Regression-based k-SII approximation using KernelSHAPIQ Fumagalli et al.[1].

from __future__ import annotations

import numpy as np

import shapiq

N_PLAYERS = 8
BUDGET = 200
feature_names = [f"x{i}" for i in range(N_PLAYERS)]

weights = np.array([0.4, 0.3, 0.2, 0.1, 0.05, -0.1, -0.2, -0.3])


def game_fun(coalitions: np.ndarray) -> np.ndarray:
    coalitions = np.atleast_2d(coalitions)
    return (coalitions @ weights) + 0.5 * coalitions[:, 0] * coalitions[:, 1]

Approximate k-SII values

approximator = shapiq.KernelSHAPIQ(n=N_PLAYERS, max_order=2, random_state=42)
iv = approximator.approximate(BUDGET, game_fun)
print(iv)
InteractionValues(
    index=k-SII, max_order=2, min_order=0, estimated=True, estimation_budget=200,
    n_players=8, baseline_value=0.0,
    Top 10 interactions:
        (0, 1): 0.49555482810444396
        (0,): 0.3955994991048026
        (1,): 0.3072185220105495
        (2,): 0.18232714925767396
        (3,): 0.09776947448142727
        (4,): 0.03651114960387441
        (3, 7): -0.004693641486777738
        (5,): -0.09454436094266919
        (6,): -0.18585629900800327
        (7,): -0.2890251265699228
)

Force plot

iv.plot_force(feature_names=feature_names)
plot kernelshapiq

Network plot

iv.plot_network(feature_names=feature_names)
plot kernelshapiq

References

Total running time of the script: (0 minutes 0.460 seconds)