You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Streamlit中无法显示PyCaret Time Series的compare_model()指标表

解决PyCaret Time Series在Streamlit中展示compare_models性能指标表的问题

问题根源

  1. setup()即使设置verbose=False,在Streamlit交互环境下仍可能默认输出配置结果表,这是PyCaret输出捕获逻辑在该环境下的兼容性问题。
  2. 原代码中st.write(best)仅输出了最优模型的对象信息,而非所有模型的性能指标对比表。

解决方案

修改代码,通过以下两步实现目标:

  • 捕获setup()的输出,避免其结果表自动显示
  • 主动提取compare_models()生成的性能指标表并展示

修改后的完整代码:

import streamlit as st
from pycaret.time_series import TSForecastingExperiment
import io
from contextlib import redirect_stdout

# 初始化时间序列实验
exp_auto = TSForecastingExperiment()

# 捕获setup的输出,阻止其在Streamlit界面显示
setup_output = io.StringIO()
with redirect_stdout(setup_output):
    exp_auto.setup(
        data=df_exog, target='qty', fh=fh, enforce_exogenous=False,
        numeric_imputation_target="ffill", numeric_imputation_exogenous="ffill",
        scale_target="minmax",
        scale_exogenous="minmax",
        fold_strategy="expanding",
        session_id=42, verbose=False
    )

if st.button("Run Time series models:"):
    # 运行多模型对比
    best = exp_auto.compare_models(sort="mape", turbo=False, verbose=True)
    # 获取所有模型的性能指标对比表
    compare_results = exp_auto.get_config("compare_results")
    # 在Streamlit中展示对比表
    st.dataframe(compare_results)
    # 可选:展示最优模型的详细信息
    st.subheader("最优模型参数")
    st.write(best)

关键说明

  • 使用redirect_stdout捕获setup()的控制台输出,彻底屏蔽其默认的结果表展示。
  • 通过exp_auto.get_config("compare_results")可直接提取compare_models()生成的完整性能指标DataFrame,再用st.dataframe()实现美观的表格展示。
  • 保留st.write(best)可同时展示最优模型的参数细节,可根据需求选择是否保留。

内容的提问来源于stack exchange,提问作者Sam.H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:45:02