feat: OI nan 마스킹 / epsilon 통일 / 정밀도 우선 임계값 #1

Merged
gihyeon merged 5 commits from feature/oi-nan-epsilon-precision-threshold into main 2026-03-01 23:57:32 +09:00
Owner

Summary

  • OI/펀딩비 nan 마스킹: dataset_builder.py에서 0.0 구간(데이터 미제공 구간)을 np.nan으로 마스킹. LightGBM은 nan 자체 처리, MLX는 nanmean/nan_to_num으로 처리
  • 분모 epsilon 통일: bb_pct, atr_pct, vol_ratio, xrp_btc_rs, xrp_eth_rs 분모에 1e-8 epsilon 패턴으로 통일하여 zero-division 방지
  • 정밀도 우선 임계값 탐색: train_model.py / train_mlx_model.py 모두 F1 기반 그리드 탐색 → precision_recall_curve 기반 recall≥0.15 조건부 정밀도 최대화로 교체

Test Plan

  • test_oi_nan_masking_no_column: oi_change 컬럼 없을 때 전부 nan
  • test_oi_nan_masking_with_zeros: 0.0 구간 nan 마스킹, 실제 값 구간 유한값 존재
  • test_epsilon_no_division_by_zero: 극단값(close=0, bb_range=0)에서 inf 없음
  • 기존 테스트 5개 모두 PASS (총 8개 PASS)
  • test_fit_with_nan_features: MLX GPU 환경에서 실행 필요 (현재 환경 Metal 초기화 실패)
## Summary - **OI/펀딩비 nan 마스킹**: `dataset_builder.py`에서 0.0 구간(데이터 미제공 구간)을 `np.nan`으로 마스킹. LightGBM은 nan 자체 처리, MLX는 `nanmean`/`nan_to_num`으로 처리 - **분모 epsilon 통일**: `bb_pct`, `atr_pct`, `vol_ratio`, `xrp_btc_rs`, `xrp_eth_rs` 분모에 `1e-8` epsilon 패턴으로 통일하여 zero-division 방지 - **정밀도 우선 임계값 탐색**: `train_model.py` / `train_mlx_model.py` 모두 F1 기반 그리드 탐색 → `precision_recall_curve` 기반 recall≥0.15 조건부 정밀도 최대화로 교체 ## Test Plan - [x] `test_oi_nan_masking_no_column`: oi_change 컬럼 없을 때 전부 nan - [x] `test_oi_nan_masking_with_zeros`: 0.0 구간 nan 마스킹, 실제 값 구간 유한값 존재 - [x] `test_epsilon_no_division_by_zero`: 극단값(close=0, bb_range=0)에서 inf 없음 - [x] 기존 테스트 5개 모두 PASS (총 8개 PASS) - [ ] `test_fit_with_nan_features`: MLX GPU 환경에서 실행 필요 (현재 환경 Metal 초기화 실패)
gihyeon added 5 commits 2026-03-01 23:57:01 +09:00
gihyeon merged commit 9cac8a4afd into main 2026-03-01 23:57:32 +09:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gihyeon/cointrader#1