From 14b763b395aab7b0b8351a79e7b97024510644f4 Mon Sep 17 00:00:00 2001 From: Cyber-Marty <15370813896@163.com> Date: Mon, 12 Oct 2026 14:35:35 +0800 Subject: [PATCH 1/2] fix(eva): keep DataFrame columns available for autocorr warning --- qlib/contrib/eva/alpha.py | 2 +- tests/misc/test_pred_autocorr_dataframe.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/misc/test_pred_autocorr_dataframe.py diff --git a/qlib/contrib/eva/alpha.py b/qlib/contrib/eva/alpha.py index 2c2f9ea7e18..c7cdaf780b0 100644 --- a/qlib/contrib/eva/alpha.py +++ b/qlib/contrib/eva/alpha.py @@ -130,8 +130,8 @@ def pred_autocorr(pred: pd.Series, lag=1, inst_col="instrument", date_col="datet :param lag: """ if isinstance(pred, pd.DataFrame): - pred = pred.iloc[:, 0] get_module_logger("pred_autocorr").warning(f"Only the first column in {pred.columns} of `pred` is kept") + pred = pred.iloc[:, 0] pred_ustk = pred.sort_index().unstack(inst_col) corr_s = {} for (idx, cur), (_, prev) in zip(pred_ustk.iterrows(), pred_ustk.shift(lag).iterrows()): diff --git a/tests/misc/test_pred_autocorr_dataframe.py b/tests/misc/test_pred_autocorr_dataframe.py new file mode 100644 index 00000000000..1a67c65d3f8 --- /dev/null +++ b/tests/misc/test_pred_autocorr_dataframe.py @@ -0,0 +1,14 @@ +import pandas as pd + +from qlib.contrib.eva.alpha import pred_autocorr + + +def test_pred_autocorr_dataframe_uses_first_column(): + index = pd.MultiIndex.from_product( + [list("ABC"), pd.date_range("2024-01-02", periods=3, freq="B")], + names=["instrument", "datetime"], + ) + first = pd.Series([1, 2, 3, 2, 3, 1, 3, 1, 2], index=index, name="score") + predictions = pd.DataFrame({"score": first, "unused": -first}) + + pd.testing.assert_series_equal(pred_autocorr(predictions), pred_autocorr(first)) From 44881c12e7d7652bbd679e92d6e5b63d84817cb5 Mon Sep 17 00:00:00 2001 From: Cyber-Marty <15370813896@163.com> Date: Fri, 16 Oct 2026 08:57:21 +0800 Subject: [PATCH 2/2] test(eva): strengthen DataFrame autocorrelation regression --- tests/misc/test_pred_autocorr_dataframe.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/misc/test_pred_autocorr_dataframe.py b/tests/misc/test_pred_autocorr_dataframe.py index 1a67c65d3f8..67f2c48c4e2 100644 --- a/tests/misc/test_pred_autocorr_dataframe.py +++ b/tests/misc/test_pred_autocorr_dataframe.py @@ -1,14 +1,24 @@ +import logging + import pandas as pd from qlib.contrib.eva.alpha import pred_autocorr -def test_pred_autocorr_dataframe_uses_first_column(): +def test_pred_autocorr_dataframe_uses_first_column(caplog, monkeypatch): index = pd.MultiIndex.from_product( [list("ABC"), pd.date_range("2024-01-02", periods=3, freq="B")], names=["instrument", "datetime"], ) first = pd.Series([1, 2, 3, 2, 3, 1, 3, 1, 2], index=index, name="score") - predictions = pd.DataFrame({"score": first, "unused": -first}) + # The second column must have different autocorrelations to detect selecting it. + second = pd.Series([1, 2, 4, 1, 5, 2, 3, 1, 9], index=index) + predictions = pd.DataFrame({"score": first, "unused": second}) + monkeypatch.setattr(logging.getLogger("qlib"), "propagate", True) pd.testing.assert_series_equal(pred_autocorr(predictions), pred_autocorr(first)) + assert ( + "qlib.pred_autocorr", + logging.WARNING, + f"Only the first column in {predictions.columns} of `pred` is kept", + ) in caplog.record_tuples