sklearn.metrics指标需结合classification_report、混淆矩阵热力图和SHAP图深入解读:设pos_label、用average=None、标注行列含义、转概率尺度、控制采样并封装Explainer进pipeline。
sklearn.metrics 算出的指标为什么看不懂?因为多数指标(如 f1_score、roc_auc_score)只返回一个数字,不带业务含义。比如 f1_score=0.82 无法回答“模型在哪些客户群上容易误判?”
classification_report 输出每类的 precision/recall/f1-score,尤其关注低支持度(support)类别的数值是否失真pos_label 参数(如 pos_label=1),否则默认按标签排序可能把负类当正类算average='weighted',结果会掩盖少数类表现;改用 average=None 查看原始数组,再手动加权直接用 seaborn.heatmap 默认会显示小数、不标注绝对频次、颜色映射不区分高低错判,导致关键问题被忽略。
confusion_matrix(y_true, y_pred) 后,用 annot=True + fmt='d' 强制显示整数频次xticklabels=['Predicted Negative', 'Predicted Positive'] 和 yticklabels 显式标注行列含义,避免靠记忆对齐cmap='Blues' 而非默认 cmap='viridis',让高值更醒目,同时加 cbar_kws={'label': 'Count'} 明确色条单位shap.summary_plot 横轴单位混乱?横轴默认是 SHAP 值(log-odds 差分),但业务方只认“提升/降低概率多少个百分点”,直接展示易引发误解。
plot_type='dot'(默认)后,用 feature_names 传入中文列名,避免缩写歧义(如 'age_grp' → '年龄分段')predict_proba 得到原始概率,再用 shap.Explainer(model, X_train, feature_perturbation="tree_path_dependent")(树模型)或 shap.KernelExplainer(线性/其他)重算shap.summary_plot 对样本量敏感:>1000 行会自动采样,导致局部模式丢失;加 max_display=10 和 plot_size=(8,6) 控制可读性matplotlib 画特征重要性却看不出业务逻辑?单纯按 model.feature_importances_ 排序画柱状图,无法体现方向性(正向/负向影响)和阈值效应(如“收入>5万才起作用”)。
pd.Series(model.feature_importances_, index=X.columns).sort_values(ascending=False),再筛选前 10 项,避免长尾噪声干扰焦点plt.box
plot)或小提琴图(seaborn.violinplot),展示该特征在不同预测结果下的分布偏移groupby 先聚合再绘图,比单维度排序更有决策价值import shap explainer = shap.TreeExplainer(model) shap_values = explainer.shap_values(X_test) shap.summary_plot(shap_values, X_test, feature_names=cn_names, max_display=10, plot_size=(8,6))实际部署时最容易漏掉的是:没把
shap.Explainer 的计算过程封装进预测 pipeline,导致上线后无法复现解释结果;还有人直接用训练集算 SHAP 值去解释测试样本,造成数据泄露。