如何对在严重不平衡的网络入侵检测数据上训练的CNN+BiLSTM模型进行SHAP解释?
我正在用Keras/TensorFlow构建一个可解释的物联网网络入侵检测系统,架构为混合的CNN+BiLSTM+多头自注意力。我的数据集是CIC-BoT-IoT,类别极端不平衡——攻击流量占比99.82%,良性流量占比0.18%。
我在训练前应用了混合采样(SMOTE + RandomUnderSampler)
python
from imblearn.combine import SMOTETomek
from imblearn.under_sampling import RandomUnderSampler
from imblearn.pipeline import Pipeline
resample = Pipeline([
('under', RandomUnderSampler(random_state=42)),
('over', SMOTE(random_state=42))
])
X_resampled, y_resampled = resample.fit_resample(X_train, y_train)
现在我想用SHAP来解释单个预测。我的问题是:
- 对于一个序列化的Keras模型,哪种SHAP解释器最合适——
DeepExplainer还是GradientExplainer? - 原始数据中的极端类别不平衡在重新采样后是否仍会影响SHAP值的可靠性?
- 鉴于不平衡,如何为解释器选择背景数据集——应反映重新采样后的分布,还是原始分布?
解决方案
对于一个序列化的Keras模型,哪种SHAP解释器最合适——DeepExplainer还是GradientExplainer?
两者都可以,通常更安全的默认是通常 GradientExplainer,因为它更通用;如果在你确切的图上运行顺畅,或者另一种选项太慢,则值得尝试 DeepExplainer。
原始数据中的极端类别不平衡在重新采样后是否仍会影响SHAP值的可靠性?
是的,原始数据的偏斜仍可能影响SHAP的可靠性,即使是在重新采样的数据上进行训练。SHAP值始终相对于一个背景分布,因为解释是关于预测相对于该背景集上的模型期望输出来说的。SHAP的文档 指出,期望值取决于传入的背景样本。
还有实证证据表明,不平衡的背景/解释数据会使SHAP解释变得更嘈杂、或偏向多数类别,平衡背景/解释集通常可以提高可靠性。
鉴于不平衡,如何为解释器选择背景数据集——应反映重新采样后的分布,还是原始分布?
背景数据集的选择取决于你在研究的问题以及你希望得到的解释类型。
如果你想要一个“可操作的”解释器,用来回答类似的问题:“在部署时我预期的实际数据分布下,为什么模型将这个流量分类为恶意而不是良性?”,那么就使用反映实际部署分布的背景集,而不是人为重新采样后的分布。
如果你想要一个“诊断性”的解释器,用来回答类似的问题:“哪些特征将此样本与一个类别平衡的参考人群区分开来?”,那么一个平衡的背景集通常更有利于跨类别比较特征贡献、并避免解释被多数类支配。
就你的情况而言,我会避免将完整的重新采样训练集作为默认背景。这会扭曲基线,因为SMOTE生成了合成的少数类样本,且欠采样改变了各类别的比例。对于SHAP,通常只需要大约100–1000个背景样本,且期望值由这些样本定义。