From 3bfd1ca5a37ce3e3d544670d145f36a6d17e69f8 Mon Sep 17 00:00:00 2001 From: 21in7 Date: Mon, 2 Mar 2026 00:34:21 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20test=5Fmlx=5Ffilter=20=5Fmake=5FX?= =?UTF-8?q?=EB=A5=BC=20FEATURE=5FCOLS=20=EA=B8=B0=EB=B0=98=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95=20=E2=80=94=20=ED=94=BC=EC=B2=98?= =?UTF-8?q?=20=ED=99=95=EC=9E=A5=20=ED=9B=84=20input=5Fdim=20=EB=B6=88?= =?UTF-8?q?=EC=9D=BC=EC=B9=98=20=ED=95=B4=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- tests/test_mlx_filter.py | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/tests/test_mlx_filter.py b/tests/test_mlx_filter.py index af4a2c9..abcebdf 100644 --- a/tests/test_mlx_filter.py +++ b/tests/test_mlx_filter.py @@ -10,23 +10,11 @@ mlx = pytest.importorskip("mlx.core", reason="MLX 미설치") def _make_X(n: int = 4) -> pd.DataFrame: + from src.ml_features import FEATURE_COLS rng = np.random.default_rng(0) return pd.DataFrame( - { - "rsi": rng.uniform(20, 80, n), - "macd_hist": rng.uniform(-0.1, 0.1, n), - "bb_pct": rng.uniform(0, 1, n), - "ema_align": rng.choice([-1.0, 0.0, 1.0], n), - "stoch_k": rng.uniform(0, 100, n), - "stoch_d": rng.uniform(0, 100, n), - "atr_pct": rng.uniform(0.001, 0.05, n), - "vol_ratio": rng.uniform(0.5, 3.0, n), - "ret_1": rng.uniform(-0.01, 0.01, n), - "ret_3": rng.uniform(-0.02, 0.02, n), - "ret_5": rng.uniform(-0.03, 0.03, n), - "signal_strength": rng.integers(0, 6, n).astype(float), - "side": rng.choice([0.0, 1.0], n), - } + rng.uniform(-1.0, 1.0, (n, len(FEATURE_COLS))).astype(np.float32), + columns=FEATURE_COLS, ) @@ -41,9 +29,10 @@ def test_mlx_gpu_device(): def test_mlx_filter_predict_shape_untrained(): """학습 전에도 predict_proba가 (N,) 형태를 반환해야 한다.""" from src.mlx_filter import MLXFilter + from src.ml_features import FEATURE_COLS X = _make_X(4) - model = MLXFilter(input_dim=13, hidden_dim=32) + model = MLXFilter(input_dim=len(FEATURE_COLS), hidden_dim=32) proba = model.predict_proba(X) assert proba.shape == (4,) assert np.all((proba >= 0.0) & (proba <= 1.0)) @@ -52,12 +41,13 @@ def test_mlx_filter_predict_shape_untrained(): def test_mlx_filter_fit_and_predict(): """학습 후 predict_proba가 유효한 확률값을 반환해야 한다.""" from src.mlx_filter import MLXFilter + from src.ml_features import FEATURE_COLS n = 100 X = _make_X(n) y = pd.Series(np.random.randint(0, 2, n)) - model = MLXFilter(input_dim=13, hidden_dim=32, epochs=5, batch_size=32) + model = MLXFilter(input_dim=len(FEATURE_COLS), hidden_dim=32, epochs=5, batch_size=32) model.fit(X, y) proba = model.predict_proba(X) @@ -93,12 +83,13 @@ def test_fit_with_nan_features(): def test_mlx_filter_save_load(tmp_path): """저장 후 로드한 모델이 동일한 예측값을 반환해야 한다.""" from src.mlx_filter import MLXFilter + from src.ml_features import FEATURE_COLS n = 50 X = _make_X(n) y = pd.Series(np.random.randint(0, 2, n)) - model = MLXFilter(input_dim=13, hidden_dim=32, epochs=3, batch_size=32) + model = MLXFilter(input_dim=len(FEATURE_COLS), hidden_dim=32, epochs=3, batch_size=32) model.fit(X, y) proba_before = model.predict_proba(X)