%23%20%2F%2F%2F%20script%0A%23%20%5Btool.marimo.opengraph%5D%0A%23%20title%20%3D%20%22CatBoost%20SHAP%20Explorer%22%0A%23%20description%20%3D%20%22Inspect%20CatBoost%20feature%20attributions%20using%20benchmark-selected%20settings.%22%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.23.3%22%0Aapp%20%3D%20marimo.App(width%3D%22full%22%2C%20auto_download%3D%5B%22html%22%5D)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20CatBoost%20SHAP%20Explorer%0A%0A%20%20%20%20Inspect%20CatBoost%20feature%20attributions%20on%20the%20training%20split.%0A%0A%20%20%20%20This%20notebook%20is%20separate%20from%20%60notebooks%2Fregression_benchmarks.py%60%2C%20but%0A%20%20%20%20prefill%20its%20parameters%20from%20the%20latest%20exported%20benchmark%20selection.%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20init()%3A%0A%20%20%20%20import%20altair%20as%20alt%0A%20%20%20%20import%20json%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20import%20sys%0A%0A%20%20%20%20def%20_ensure_repo_root_on_path()%3A%0A%20%20%20%20%20%20%20%20candidates%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20file_value%20%3D%20globals().get(%22__file__%22)%0A%20%20%20%20%20%20%20%20if%20file_value%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20candidates.append(Path(file_value).resolve())%0A%20%20%20%20%20%20%20%20candidates.append(Path.cwd().resolve())%0A%0A%20%20%20%20%20%20%20%20for%20candidate%20in%20candidates%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20current%20%3D%20candidate%20if%20candidate.is_dir()%20else%20candidate.parent%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20parent%20in%20%5Bcurrent%2C%20*current.parents%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(parent%20%2F%20%22experiments%22).is_dir()%20and%20(parent%20%2F%20%22notebooks%22).is_dir()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20parent_str%20%3D%20str(parent)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20parent_str%20not%20in%20sys.path%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sys.path.insert(0%2C%20parent_str)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20parent%0A%20%20%20%20%20%20%20%20return%20None%0A%0A%20%20%20%20_ensure_repo_root_on_path()%0A%0A%20%20%20%20from%20experiments.regression.core%20import%20(%0A%20%20%20%20%20%20%20%20DEFAULT_VIEW_ORDER%2C%0A%20%20%20%20%20%20%20%20compute_catboost_shap_values%2C%0A%20%20%20%20%20%20%20%20fit_model_for_application%2C%0A%20%20%20%20%20%20%20%20find_pipeline_by_name%2C%0A%20%20%20%20%20%20%20%20load_workspace_bundle%20as%20_load_workspace_bundle%2C%0A%20%20%20%20%20%20%20%20select_pipelines%2C%0A%20%20%20%20)%0A%0A%20%20%20%20BASE_TABLE_PATH%20%3D%20Path(%22inferred%2Fbase_table.parquet%22)%0A%20%20%20%20SATELLITE_FEATURES_PATH%20%3D%20Path(%22inferred%2Fsatellite_features.parquet%22)%0A%20%20%20%20CLAY_EMBEDDINGS_PATH%20%3D%20Path(%22inferred%2Fsentinel2_embeddings.parquet%22)%0A%20%20%20%20SATMAE_EMBEDDINGS_PATH%20%3D%20Path(%22inferred%2Fsatmae_embeddings.parquet%22)%0A%20%20%20%20IMPLISAT_FEATURES_PATH%20%3D%20Path(%22inferred%2Fimplisat_features.parquet%22)%0A%20%20%20%20OUTPUT_DIR%20%3D%20Path(%22inferred%22)%0A%20%20%20%20EXPORT_CONFIG_PATH%20%3D%20OUTPUT_DIR%20%2F%20%22regression_benchmark_export_config.json%22%0A%20%20%20%20DEFAULT_SEED%20%3D%2042%0A%0A%20%20%20%20def%20load_workspace_bundle(%0A%20%20%20%20%20%20%20%20base_path%3DBASE_TABLE_PATH%2C%0A%20%20%20%20%20%20%20%20satellite_path%3DSATELLITE_FEATURES_PATH%2C%0A%20%20%20%20%20%20%20%20clay_embeddings_path%3DCLAY_EMBEDDINGS_PATH%2C%0A%20%20%20%20%20%20%20%20satmae_embeddings_path%3DSATMAE_EMBEDDINGS_PATH%2C%0A%20%20%20%20%20%20%20%20implisat_features_path%3DIMPLISAT_FEATURES_PATH%2C%0A%20%20%20%20)%3A%0A%20%20%20%20%20%20%20%20return%20_load_workspace_bundle(%0A%20%20%20%20%20%20%20%20%20%20%20%20base_path%3Dbase_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20satellite_path%3Dsatellite_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20clay_embeddings_path%3Dclay_embeddings_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20satmae_embeddings_path%3Dsatmae_embeddings_path%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20implisat_features_path%3Dimplisat_features_path%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20def%20load_export_config(path%3DEXPORT_CONFIG_PATH)%3A%0A%20%20%20%20%20%20%20%20if%20not%20path.exists()%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20None%0A%20%20%20%20%20%20%20%20return%20json.loads(path.read_text(encoding%3D%22utf-8%22))%0A%0A%20%20%20%20def%20catboost_model_names_for_view(view_name)%3A%0A%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20pipeline.spec.name%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20pipeline%20in%20select_pipelines(view_name%3Dview_name%2C%20tabpfn_mode%3D%22none%22%2C%20nam_mode%3D%22none%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20pipeline.spec.family%20%3D%3D%20%22catboost%22%0A%20%20%20%20%20%20%20%20%5D%0A%0A%20%20%20%20def%20catboost_view_names(bundle)%3A%0A%20%20%20%20%20%20%20%20ordered%20%3D%20%5B%5D%0A%20%20%20%20%20%20%20%20for%20view_name%20in%20DEFAULT_VIEW_ORDER%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20view_name%20in%20bundle.feature_views%20and%20catboost_model_names_for_view(view_name)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ordered.append(view_name)%0A%20%20%20%20%20%20%20%20return%20ordered%0A%0A%20%20%20%20def%20resolve_default_state(bundle%2C%20export_config%2C%20*%2C%20default_seed%3DDEFAULT_SEED)%3A%0A%20%20%20%20%20%20%20%20supported_views%20%3D%20catboost_view_names(bundle)%0A%20%20%20%20%20%20%20%20if%20not%20supported_views%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22feature_view%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model_name%22%3A%20None%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22seed%22%3A%20default_seed%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22supported_views%22%3A%20%5B%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22tuned_params_by_family%22%3A%20%7B%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20default_view%20%3D%20supported_views%5B0%5D%0A%20%20%20%20%20%20%20%20default_model%20%3D%20catboost_model_names_for_view(default_view)%5B0%5D%0A%20%20%20%20%20%20%20%20tuned_params_by_family%20%3D%20%7B%7D%0A%20%20%20%20%20%20%20%20default_seed_value%20%3D%20default_seed%0A%0A%20%20%20%20%20%20%20%20if%20isinstance(export_config%2C%20dict)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20exported_tuned%20%3D%20export_config.get(%22tuned_params_by_family%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20isinstance(exported_tuned%2C%20dict)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tuned_params_by_family%20%3D%20exported_tuned%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20exported_view%20%3D%20export_config.get(%22feature_view%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20exported_model%20%3D%20export_config.get(%22model_name%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20export_config.get(%22model_family%22)%20%3D%3D%20%22catboost%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20and%20exported_view%20in%20supported_views%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20and%20exported_model%20in%20catboost_model_names_for_view(exported_view)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default_view%20%3D%20exported_view%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default_model%20%3D%20exported_model%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default_seed_value%20%3D%20int(export_config.get(%22seed%22%2C%20default_seed))%0A%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22feature_view%22%3A%20default_view%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22model_name%22%3A%20default_model%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22seed%22%3A%20default_seed_value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22supported_views%22%3A%20supported_views%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22tuned_params_by_family%22%3A%20tuned_params_by_family%2C%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20def%20feature_view_dropdown_config(bundle%2C%20default_state)%3A%0A%20%20%20%20%20%20%20%20options%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20bundle.feature_views%5Bname%5D%5B%22label%22%5D%3A%20name%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20name%20in%20default_state%5B%22supported_views%22%5D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20default_view_name%20%3D%20default_state%5B%22feature_view%22%5D%0A%20%20%20%20%20%20%20%20default_label%20%3D%20None%0A%20%20%20%20%20%20%20%20if%20default_view_name%20in%20bundle.feature_views%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20candidate_label%20%3D%20bundle.feature_views%5Bdefault_view_name%5D%5B%22label%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20candidate_label%20in%20options%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default_label%20%3D%20candidate_label%0A%20%20%20%20%20%20%20%20if%20default_label%20is%20None%20and%20options%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20default_label%20%3D%20next(iter(options.keys()))%0A%20%20%20%20%20%20%20%20return%20options%2C%20default_label%0A%0A%20%20%20%20def%20build_shap_artifacts(%0A%20%20%20%20%20%20%20%20train_frame%2C%0A%20%20%20%20%20%20%20%20apply_frame%2C%0A%20%20%20%20%20%20%20%20*%2C%0A%20%20%20%20%20%20%20%20view_meta%2C%0A%20%20%20%20%20%20%20%20model_name%2C%0A%20%20%20%20%20%20%20%20seed%2C%0A%20%20%20%20%20%20%20%20tuned_params_by_family%3DNone%2C%0A%20%20%20%20)%3A%0A%20%20%20%20%20%20%20%20pipeline%20%3D%20find_pipeline_by_name(model_name)%0A%20%20%20%20%20%20%20%20if%20pipeline.spec.family%20!%3D%20%22catboost%22%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20raise%20ValueError(f%22%60%7Bmodel_name%7D%60%20is%20not%20a%20CatBoost%20pipeline%22)%0A%0A%20%20%20%20%20%20%20%20family_tuned_params%20%3D%20None%0A%20%20%20%20%20%20%20%20if%20isinstance(tuned_params_by_family%2C%20dict)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20family_tuned_params%20%3D%20tuned_params_by_family.get(pipeline.spec.family)%0A%0A%20%20%20%20%20%20%20%20fit_result%20%3D%20fit_model_for_application(%0A%20%20%20%20%20%20%20%20%20%20%20%20train_frame%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20apply_frame%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20view_meta%3Dview_meta%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20pipeline%3Dpipeline%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20seed%3Dseed%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20default_seed%3DDEFAULT_SEED%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20output_dir%3DOUTPUT_DIR%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tuned_params%3Dfamily_tuned_params%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20shap_frame%2C%20base_value%20%3D%20compute_catboost_shap_values(%0A%20%20%20%20%20%20%20%20%20%20%20%20fit_result%5B%22estimator%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fit_result%5B%22X_apply%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20cat_features%3Dfit_result%5B%22fit_context%22%5D.get(%22cat_features%22%2C%20%5B%5D)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20predicted_log%20%3D%20fit_result%5B%22predicted_log%22%5D%0A%20%20%20%20%20%20%20%20shap_sum%20%3D%20shap_frame.sum(axis%3D1).to_numpy()%0A%20%20%20%20%20%20%20%20predicted_usd%20%3D%20np.clip(np.expm1(predicted_log)%2C%200.0%2C%20None)%0A%0A%20%20%20%20%20%20%20%20explained_frame%20%3D%20apply_frame%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22country%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22year%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22geolocation_name%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22construction_cost_per_m2_usd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D.reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20explained_frame%5B%22row_id%22%5D%20%3D%20np.arange(len(explained_frame))%0A%20%20%20%20%20%20%20%20explained_frame%5B%22predicted_log%22%5D%20%3D%20predicted_log%0A%20%20%20%20%20%20%20%20explained_frame%5B%22predicted_usd%22%5D%20%3D%20predicted_usd%0A%20%20%20%20%20%20%20%20explained_frame%5B%22base_value%22%5D%20%3D%20base_value%0A%20%20%20%20%20%20%20%20explained_frame%5B%22shap_sum%22%5D%20%3D%20shap_sum%0A%20%20%20%20%20%20%20%20explained_frame%5B%22reconstructed_log%22%5D%20%3D%20base_value%20%2B%20shap_sum%0A%0A%20%20%20%20%20%20%20%20importance_frame%20%3D%20pd.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22feature%22%3A%20shap_frame.columns%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mean_abs_shap%22%3A%20np.abs(shap_frame).mean(axis%3D0).to_numpy()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mean_shap%22%3A%20shap_frame.mean(axis%3D0).to_numpy()%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20).sort_values(%22mean_abs_shap%22%2C%20ascending%3DFalse%2C%20kind%3D%22stable%22).reset_index(%0A%20%20%20%20%20%20%20%20%20%20%20%20drop%3DTrue%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22base_value%22%3A%20base_value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22explained_frame%22%3A%20explained_frame%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22fit_context%22%3A%20fit_result%5B%22fit_context%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22importance_frame%22%3A%20importance_frame%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22pipeline%22%3A%20pipeline%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22shap_frame%22%3A%20shap_frame%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22X_apply%22%3A%20fit_result%5B%22X_apply%22%5D.reset_index(drop%3DTrue)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20_%20%3D%20alt.data_transformers.enable(%22vegafusion%22)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20DEFAULT_SEED%2C%0A%20%20%20%20%20%20%20%20EXPORT_CONFIG_PATH%2C%0A%20%20%20%20%20%20%20%20alt%2C%0A%20%20%20%20%20%20%20%20build_shap_artifacts%2C%0A%20%20%20%20%20%20%20%20catboost_model_names_for_view%2C%0A%20%20%20%20%20%20%20%20feature_view_dropdown_config%2C%0A%20%20%20%20%20%20%20%20load_export_config%2C%0A%20%20%20%20%20%20%20%20load_workspace_bundle%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20pd%2C%0A%20%20%20%20%20%20%20%20resolve_default_state%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20bundle_state(%0A%20%20%20%20DEFAULT_SEED%2C%0A%20%20%20%20load_export_config%2C%0A%20%20%20%20load_workspace_bundle%2C%0A%20%20%20%20resolve_default_state%2C%0A)%3A%0A%20%20%20%20bundle%20%3D%20load_workspace_bundle()%0A%20%20%20%20export_config%20%3D%20load_export_config()%0A%20%20%20%20default_state%20%3D%20resolve_default_state(%0A%20%20%20%20%20%20%20%20bundle%2C%0A%20%20%20%20%20%20%20%20export_config%2C%0A%20%20%20%20%20%20%20%20default_seed%3DDEFAULT_SEED%2C%0A%20%20%20%20)%0A%20%20%20%20return%20bundle%2C%20default_state%2C%20export_config%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20export_status(EXPORT_CONFIG_PATH%2C%20export_config%2C%20mo)%3A%0A%20%20%20%20if%20export_config%20is%20None%3A%0A%20%20%20%20%20%20%20%20export_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22No%20benchmark%20export%20config%20was%20found.%20Controls%20are%20using%20notebook%20defaults.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20elif%20export_config.get(%22model_family%22)%20%3D%3D%20%22catboost%22%3A%0A%20%20%20%20%20%20%20%20export_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22Loaded%20defaults%20from%20%60%7BEXPORT_CONFIG_PATH%7D%60.%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20Feature%20view%3A%20%60%7Bexport_config.get('feature_view'%2C%20'unknown')%7D%60%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20Model%3A%20%60%7Bexport_config.get('model_name'%2C%20'unknown')%7D%60%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22-%20Seed%3A%20%60%7Bexport_config.get('seed'%2C%20'unknown')%7D%60%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22success%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20export_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%60%7BEXPORT_CONFIG_PATH%7D%60%20exists%2C%20but%20the%20last%20exported%20model%20family%20was%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%60%7Bexport_config.get('model_family'%2C%20'unknown')%7D%60%20rather%20than%20%60catboost%60.%5Cn%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Controls%20are%20falling%20back%20to%20the%20default%20CatBoost%20explorer%20state.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22warn%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20export_status_panel%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20model_selector(%0A%20%20%20%20catboost_model_names_for_view%2C%0A%20%20%20%20default_state%2C%0A%20%20%20%20feature_view%2C%0A%20%20%20%20mo%2C%0A)%3A%0A%20%20%20%20model_names%20%3D%20catboost_model_names_for_view(feature_view.value)%0A%20%20%20%20selected_default%20%3D%20default_state%5B%22model_name%22%5D%0A%20%20%20%20if%20selected_default%20not%20in%20model_names%3A%0A%20%20%20%20%20%20%20%20selected_default%20%3D%20model_names%5B0%5D%20if%20model_names%20else%20None%0A%0A%20%20%20%20if%20not%20model_names%3A%0A%20%20%20%20%20%20%20%20model_selector_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22No%20CatBoost%20pipelines%20are%20available%20for%20the%20current%20feature%20view.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22warn%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20model_name%20%3D%20None%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20model_name%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%20%20%20%20%20%20%20%20options%3Dmodel_names%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20value%3Dselected_default%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22CatBoost%20model%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20model_selector_panel%20%3D%20model_name%0A%20%20%20%20model_selector_panel%0A%20%20%20%20return%20(model_name%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20controls(bundle%2C%20default_state%2C%20feature_view_dropdown_config%2C%20mo)%3A%0A%20%20%20%20feature_options%2C%20feature_default_label%20%3D%20feature_view_dropdown_config(%0A%20%20%20%20%20%20%20%20bundle%2C%0A%20%20%20%20%20%20%20%20default_state%2C%0A%20%20%20%20)%0A%20%20%20%20feature_view%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%20%20%20%20options%3Dfeature_options%2C%0A%20%20%20%20%20%20%20%20value%3Dfeature_default_label%2C%0A%20%20%20%20%20%20%20%20label%3D%22Feature%20view%22%2C%0A%20%20%20%20)%0A%20%20%20%20seed%20%3D%20mo.ui.number(%0A%20%20%20%20%20%20%20%20start%3D0%2C%0A%20%20%20%20%20%20%20%20stop%3D10_000%2C%0A%20%20%20%20%20%20%20%20step%3D1%2C%0A%20%20%20%20%20%20%20%20value%3Ddefault_state%5B%22seed%22%5D%2C%0A%20%20%20%20%20%20%20%20label%3D%22Random%20seed%22%2C%0A%20%20%20%20)%0A%20%20%20%20top_n%20%3D%20mo.ui.slider(%0A%20%20%20%20%20%20%20%20start%3D5%2C%0A%20%20%20%20%20%20%20%20stop%3D25%2C%0A%20%20%20%20%20%20%20%20step%3D1%2C%0A%20%20%20%20%20%20%20%20value%3D12%2C%0A%20%20%20%20%20%20%20%20show_value%3DTrue%2C%0A%20%20%20%20%20%20%20%20label%3D%22Top%20features%22%2C%0A%20%20%20%20)%0A%20%20%20%20mo.hstack(%5Bfeature_view%2C%20seed%2C%20top_n%5D%2C%20justify%3D%22start%22)%0A%20%20%20%20return%20feature_view%2C%20seed%2C%20top_n%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20shap_data(%0A%20%20%20%20build_shap_artifacts%2C%0A%20%20%20%20bundle%2C%0A%20%20%20%20default_state%2C%0A%20%20%20%20feature_view%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20model_name%2C%0A%20%20%20%20seed%2C%0A)%3A%0A%20%20%20%20if%20model_name%20is%20None%3A%0A%20%20%20%20%20%20%20%20shap_artifacts%20%3D%20None%0A%20%20%20%20%20%20%20%20shap_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Select%20a%20CatBoost%20model%20to%20compute%20SHAP%20values.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%20%3D%20build_shap_artifacts(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bundle.train.reset_index(drop%3DTrue)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bundle.train.reset_index(drop%3DTrue)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20view_meta%3Dbundle.feature_views%5Bfeature_view.value%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20model_name%3Dmodel_name.value%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20seed%3Dint(seed.value)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tuned_params_by_family%3Ddefault_state%5B%22tuned_params_by_family%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22Explaining%20%60%7Bmodel_name.value%7D%60%20on%20%60%7Bfeature_view.value%7D%60%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22using%20%60%7Blen(shap_artifacts%5B'explained_frame'%5D)%3A%2C%7D%60%20train%20rows.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22success%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20except%20Exception%20as%20exc%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%20%3D%20None%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_status_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(f%22Could%20not%20compute%20SHAP%20values%3A%20%60%7Bexc%7D%60%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22danger%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20shap_status_panel%0A%20%20%20%20return%20(shap_artifacts%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20overview(mo%2C%20shap_artifacts)%3A%0A%20%20%20%20if%20shap_artifacts%20is%20None%3A%0A%20%20%20%20%20%20%20%20overview_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22SHAP%20artifacts%20will%20appear%20here%20after%20a%20successful%20fit.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20explained_frame%20%3D%20shap_artifacts%5B%22explained_frame%22%5D%0A%20%20%20%20%20%20%20%20importance_frame%20%3D%20shap_artifacts%5B%22importance_frame%22%5D%0A%20%20%20%20%20%20%20%20max_reconstruction_error%20%3D%20float(%0A%20%20%20%20%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20explained_frame%5B%22reconstructed_log%22%5D%20-%20explained_frame%5B%22predicted_log%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20).abs().max()%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20overview_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22**Model%3A**%20%60%7Bshap_artifacts%5B'pipeline'%5D.spec.name%7D%60%20%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22**Explained%20rows%3A**%20%60%7Blen(explained_frame)%3A%2C%7D%60%20%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22**Features%3A**%20%60%7Blen(importance_frame)%3A%2C%7D%60%20%20%5Cn%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22**Max%20reconstruction%20error%3A**%20%60%7Bmax_reconstruction_error%3A.6f%7D%60%20log-units%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20overview_panel%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20importance_view(alt%2C%20mo%2C%20shap_artifacts%2C%20top_n)%3A%0A%20%20%20%20if%20shap_artifacts%20is%20None%3A%0A%20%20%20%20%20%20%20%20importance_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Fit%20a%20CatBoost%20model%20to%20view%20global%20SHAP%20importance.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20top_features%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%5B%22importance_frame%22%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20.head(int(top_n.value))%0A%20%20%20%20%20%20%20%20%20%20%20%20.copy()%0A%20%20%20%20%20%20%20%20%20%20%20%20.sort_values(%22mean_abs_shap%22%2C%20ascending%3DTrue)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20importance_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(top_features)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_bar(color%3D%22%231d4ed8%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.X(%22mean_abs_shap%3AQ%22%2C%20title%3D%22Mean%20%7CSHAP%7C%20contribution%20(log-target)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Y(%22feature%3AN%22%2C%20title%3DNone%2C%20sort%3DNone)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22feature%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22mean_abs_shap%3AQ%22%2C%20format%3D%22.4f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22mean_shap%3AQ%22%2C%20format%3D%22.4f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3D640%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3Dmax(220%2C%2022%20*%20len(top_features))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Global%20CatBoost%20feature%20importance%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20importance_panel%20%3D%20mo.vstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Global%20importance%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22The%20bars%20rank%20features%20by%20average%20absolute%20contribution%20in%20the%20model's%20log-target%20space.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20importance_chart%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.table(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%5B%22importance_frame%22%5D.head(int(top_n.value))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Top%20SHAP%20features%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20importance_panel%0A%20%20%20%20return%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20feature_selector(mo%2C%20shap_artifacts)%3A%0A%20%20%20%20if%20shap_artifacts%20is%20None%3A%0A%20%20%20%20%20%20%20%20selected_feature%20%3D%20None%0A%20%20%20%20%20%20%20%20feature_selector_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22A%20feature%20selector%20will%20appear%20after%20SHAP%20values%20are%20available.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20features%20%3D%20shap_artifacts%5B%22importance_frame%22%5D%5B%22feature%22%5D.tolist()%0A%20%20%20%20%20%20%20%20selected_feature%20%3D%20mo.ui.dropdown(%0A%20%20%20%20%20%20%20%20%20%20%20%20options%3Dfeatures%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20value%3Dfeatures%5B0%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Dependence%20feature%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20feature_selector_panel%20%3D%20selected_feature%0A%20%20%20%20feature_selector_panel%0A%20%20%20%20return%20(selected_feature%2C)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20dependence_view(alt%2C%20mo%2C%20pd%2C%20selected_feature%2C%20shap_artifacts)%3A%0A%20%20%20%20if%20selected_feature%20is%20None%20or%20shap_artifacts%20is%20None%3A%0A%20%20%20%20%20%20%20%20dependence_panel%20%3D%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22Select%20a%20feature%20to%20inspect%20row-level%20SHAP%20contributions.%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22info%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20feature_name%20%3D%20selected_feature.value%0A%20%20%20%20%20%20%20%20dependence_frame%20%3D%20shap_artifacts%5B%22explained_frame%22%5D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22country%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22year%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22geolocation_name%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22construction_cost_per_m2_usd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22predicted_usd%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%5D.copy()%0A%20%20%20%20%20%20%20%20dependence_frame%5B%22feature_value%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%5B%22X_apply%22%5D%5Bfeature_name%5D.reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20dependence_frame%5B%22shap_value%22%5D%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20shap_artifacts%5B%22shap_frame%22%5D%5Bfeature_name%5D.reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20if%20pd.api.types.is_numeric_dtype(dependence_frame%5B%22feature_value%22%5D)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x_encoding%20%3D%20alt.X(%22feature_value%3AQ%22%2C%20title%3Dfeature_name)%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20x_encoding%20%3D%20alt.X(%22feature_value%3AN%22%2C%20title%3Dfeature_name%2C%20sort%3D%22-y%22)%0A%0A%20%20%20%20%20%20%20%20dependence_chart%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20alt.Chart(dependence_frame)%0A%20%20%20%20%20%20%20%20%20%20%20%20.mark_circle(size%3D72%2C%20opacity%3D0.72)%0A%20%20%20%20%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20x_encoding%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Y(%22shap_value%3AQ%22%2C%20title%3D%22SHAP%20contribution%20(log-target)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Color(%22country%3AN%22%2C%20title%3D%22Country%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22geolocation_name%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22country%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22year%3AO%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22feature_value%3AN%22%2C%20title%3Dfeature_name)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22shap_value%3AQ%22%2C%20format%3D%22.4f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22construction_cost_per_m2_usd%3AQ%22%2C%20format%3D%22%2C.0f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22predicted_usd%3AQ%22%2C%20format%3D%22%2C.0f%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20width%3D760%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20height%3D360%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3Df%22Dependence%20plot%3A%20%7Bfeature_name%7D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20top_rows%20%3D%20dependence_frame.iloc%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20dependence_frame%5B%22shap_value%22%5D.abs().sort_values(ascending%3DFalse).head(20).index%0A%20%20%20%20%20%20%20%20%5D.reset_index(drop%3DTrue)%0A%20%20%20%20%20%20%20%20dependence_panel%20%3D%20mo.vstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%20Dependence%20view%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22The%20y-axis%20shows%20how%20much%20the%20selected%20feature%20pushes%20each%20prediction%20up%20or%20down%20in%20log-space.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dependence_chart%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.table(top_rows%2C%20label%3D%22Largest%20row-level%20feature%20effects%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20dependence_panel%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
929caa40306de440062ce47a2ca62177