for a university project I am currently testing XAI techniques for TimeSeriesData. In particular I am testing MACE and SHAP from OmniXAI MACE from OmniXAI. Even though implementing and running SHAP works completely fine, I am getting an error posted further down. While implementing I oriented myself by the tutorials posted on their website.
This is my implementation of SHAP. It works completely fine for me.
train_df = pd.DataFrame(df.iloc[:1000])test_df = pd.DataFrame(df.iloc[1000:1500])THRESHOLD = np.percentile(train_df.values, 90)def detector(ts: Timeseries): anomaly_scores = np.sum((ts.values > THRESHOLD).astype(int)) return anomaly_scores / ts.shape[0]explainers = ShapTimeseries( training_data = Timeseries.from_pd(train_df), predict_function=detector, mode="anomaly_detection")explanations = explainers.explain(Timeseries.from_pd(test_df))#Darstellen der Explanationsfig = explanations.plot(index=0, max_num_variables_to_plot=4)dict = explanations.get_explanations()
This is my implementation of MACE:
train_df = pd.DataFrame(df.iloc[:1000])test_df = pd.DataFrame(df.iloc[1000:1500])threshold = np.percentile(train_df.values, 90)def detector(ts: Timeseries): anomaly_scores = np.sum((ts.values > threshold).astype(int)) return anomaly_scores / ts.shape[0]explainers = MACEExplainer( training_data = Timeseries.from_pd(train_df), predict_function=detector, mode="anomaly_detection", threshold = 0.1)explanations = explainers.explain(Timeseries.from_pd(test_df))fig = explanations.plot(index=0, max_num_variables_to_plot=18)plt.savefig("mace.png")
While running this, I get the following error:
File "neural.py", line 111, in mace explanations = explainers.explain(Timeseries.from_pd(test_df)) File "/home/y/.local/lib/python3.8/site- packages/omnixai/explainers/timeseries/counterfactual/mace.py", line 306, in explainself._build_explainer(X.ts_len) File "/home/y/.local/lib/python3.8/site- packages/omnixai/explainers/timeseries/counterfactual/mace.py", line 188, in _build_explainerself._candidates(ts_len) File "/home/y/.local/lib/python3.8/site- packages/omnixai/explainers/timeseries/counterfactual/mace.py", line 156, in _candidates values = transformer.invert(np.array([range(n_bins)] * ts.shape[1]).T) File "/home/y/.local/lib/python3.8/site- packages/omnixai/preprocessing/encode.py", line 40, in invert return self.encoder.inverse_transform(x) File "/home/y/.local/lib/python3.8/site- packages/sklearn/preprocessing/_discretization.py", line 425, in inverse_transform Xinv[:, jj] = bin_centers[np.int_(Xinv[:, jj])] IndexError: index 1 is out of bounds for axis 0 with size 1
I am completely stuck and don't know how to approach this problem any further. Do you have any tips?