{"record":{"id":"24e8fd8a42112bb5","repo":"microsoft/qlib","slug":"currently-oas-can-only-support-const-var-as-ta","errorCode":null,"errorMessage":"currently `oas` can only support `const_var` as target","messagePattern":"currently `oas` can only support `const_var` as target","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"qlib/model/riskmodel/shrink.py","lineNumber":84,"sourceCode":"        elif isinstance(alpha, (float, np.floating)):\n            assert 0 <= alpha <= 1, \"alpha should be between [0, 1]\"\n        else:\n            raise TypeError(\"invalid argument type for `alpha`\")\n        self.alpha = alpha\n\n        # target\n        if isinstance(target, str):\n            assert target in [\n                self.TGT_CONST_VAR,\n                self.TGT_CONST_CORR,\n                self.TGT_SINGLE_FACTOR,\n            ], f\"shrinking target `{target} is not supported\"\n        elif isinstance(target, np.ndarray):\n            pass\n        else:\n            raise TypeError(\"invalid argument type for `target`\")\n        if alpha == self.SHR_OAS and target != self.TGT_CONST_VAR:\n            raise NotImplementedError(\"currently `oas` can only support `const_var` as target\")\n        self.target = target\n\n    def _predict(self, X: np.ndarray) -> np.ndarray:\n        # sample covariance\n        S = super()._predict(X)\n\n        # shrinking target\n        F = self._get_shrink_target(X, S)\n\n        # get shrinking parameter\n        alpha = self._get_shrink_param(X, S, F)\n\n        # shrink covariance\n        if alpha > 0:\n            S *= 1 - alpha\n            F *= alpha\n            S += F\n","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/model/riskmodel/shrink.py#L66-L102","documentation":"ShrinkRiskModel (qlib/model/riskmodel/shrink.py:84) only implements the Oracle Approximating Shrinkage ('oas') estimator against the constant-variance diagonal target. If alpha='oas' is combined with any target other than 'const_var' (e.g. 'const_corr', 'single_factor', or a custom ndarray), __init__ raises NotImplementedError immediately at construction time.","triggerScenarios":"Constructing ShrinkRiskModel(alpha='oas', target='const_corr'); ShrinkRiskModel(alpha='oas', target=my_ndarray); any config pairing oas with const_var single-factor targets.","commonSituations":"Reusing a shrinkage config and switching alpha from 'lw' to 'oas' while keeping target='const_corr'; assuming all alpha/target combinations are supported because they appear in docs as separate options.","solutions":["Keep target='const_var' when using alpha='oas'","Switch to alpha='lw' (Ledoit-Wolf) if you need 'const_corr' or 'single_factor' targets","Use a fixed float alpha with any supported target instead of the oas estimator"],"exampleFix":"# before\nmodel = ShrinkRiskModel(alpha='oas', target='const_corr')  # NotImplementedError\n\n# after\nmodel = ShrinkRiskModel(alpha='oas', target='const_var')\n# or\nmodel = ShrinkRiskModel(alpha='lw', target='const_corr')","handlingStrategy":"validation","validationCode":"if alpha == 'oas':\n    assert target == 'const_var', \"alpha='oas' requires target='const_var'\"","typeGuard":null,"tryCatchPattern":"try:\n    model = ShrinkRiskModel(alpha=alpha, target=target)\nexcept NotImplementedError as e:\n    raise ValueError(\"pair 'oas' only with 'const_var', or use 'lw'\") from e","preventionTips":["Treat (alpha, target) as a coupled pair in risk-model configs","Add a config-lint rule rejecting oas with non-const_var targets"],"tags":["qlib","risk-model","shrinkage","oas","not-implemented","config"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}