INSTANCE_I = int(np.clip(INSTANCE_I, 0, len(X_test)-1))
x = X_test.iloc[INSTANCE_I].values
y_true = float(y_test.iloc[INSTANCE_I])
pred = float(mannequin.predict([x])[0])
iv = explainer.clarify(x, finances=int(BUDGET_LOCAL), random_state=0)
baseline = float(getattr(iv, "baseline_value", 0.0))
main_effects = extract_main_effects(iv, feature_names)
pair_df = extract_pair_matrix(iv, feature_names)
print("n" + "="*90)
print("LOCAL EXPLANATION (single check occasion)")
print("="*90)
print(f"Index={INDEX} | max_order={MAX_ORDER} | finances={BUDGET_LOCAL} | occasion={INSTANCE_I}")
print(f"Prediction: {pred:.6f} | True: {y_true:.6f} | Baseline (if obtainable): {baseline:.6f}")
print("nTop essential results (signed):")
show(main_effects.reindex(main_effects.abs().sort_values(ascending=False).head(TOP_K).index).to_frame())
print("nASCII view (signed essential results, top-k):")
print(ascii_bar(main_effects, top_k=TOP_K))
print("nTop pairwise interactions by |worth| (native):")
pairs = []
for i in vary(n_features):
for j in vary(i+1, n_features):
v = float(pair_df.iat[i, j])
pairs.append((feature_names[i], feature_names[j], v, abs(v)))
pairs_df = pd.DataFrame(pairs, columns=["feature_i", "feature_j", "interaction", "abs_interaction"]).sort_values("abs_interaction", ascending=False).head(min(25, len(pairs)))
show(pairs_df)
fig1 = plot_local_feature_bar(main_effects, TOP_K)
fig2 = plot_local_interaction_heatmap(pair_df, checklist(main_effects.abs().sort_values(ascending=False).head(TOP_K).index))
fig3 = plot_waterfall(baseline, main_effects, TOP_K)
fig1.present()
fig2.present()
fig3.present()
if GLOBAL_ON:
print("n" + "="*90)
print("GLOBAL SUMMARIES (sampled over a number of check factors)")
print("="*90)
GLOBAL_N = int(np.clip(GLOBAL_N, 5, len(X_test)))
pattern = X_test.pattern(n=GLOBAL_N, random_state=1).values
global_main, global_pair = global_summaries(
explainer=explainer,
X_samples=pattern,
feature_names=feature_names,
finances=int(BUDGET_GLOBAL),
seed=123,
)
print(f"Samples={GLOBAL_N} | finances/pattern={BUDGET_GLOBAL}")
print("nGlobal characteristic significance (imply |essential impact|):")
show(global_main.head(TOP_K))
top_feats_global = checklist(global_main["feature"].head(TOP_K).values)
sub = global_pair.loc[top_feats_global, top_feats_global]
figg1 = px.bar(global_main.head(TOP_K), x="mean_abs_main_effect", y="characteristic", orientation="h", title="World Characteristic Significance (imply |essential impact|, sampled)")
figg1.update_layout(yaxis={"categoryorder": "complete ascending"})
figg2 = px.imshow(sub.values, x=sub.columns, y=sub.index, side="auto", title="World Pairwise Interplay Significance (imply |interplay|, sampled)")
figg1.present()
figg2.present()
print("nDone. If you'd like it quicker: decrease budgets or GLOBAL_N, or set MAX_ORDER=1.")
