Skip to content

devilmaier/25_fall_deeplearning

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

135 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

2025 Fall Deep Learning Project: Crypto Price Prediction

πŸ“Š 데이터셋 (Dataset)

0. μ›μ‹œ 데이터 μˆ˜μ§‘ (raw_data_fetcher.py)

  • κΈ°λŠ₯: Binance USDT-M PERPETUAL μ„ λ¬Ό κ±°λž˜μ†Œμ—μ„œ μ›μ‹œ 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•©λ‹ˆλ‹€.
  • μˆ˜μ§‘ 데이터:
    • 1뢄봉 Klines: μ‹œκ°€/κ³ κ°€/μ €κ°€/μ’…κ°€, κ±°λž˜λŸ‰, 거래 건수, Taker 맀수/λ§€λ„λŸ‰
    • Premium Index Klines: ν˜„λ¬Ό λŒ€λΉ„ μ„ λ¬Ό 가격 프리미엄 (1λΆ„ λ‹¨μœ„)
    • 5λΆ„ Metrics: λ―Έκ²°μ œμ•½μ •(OI), λ‘±/숏 λΉ„μœ¨, 평균 거래 κΈˆμ•‘ λ“± (1λΆ„ λ‹¨μœ„λ‘œ backfill)
  • 처리 방식:
    • 병렬 처리둜 μ—¬λŸ¬ 심볼을 λ™μ‹œμ— λ‹€μš΄λ‘œλ“œ (κΈ°λ³Έκ°’: CPU μ½”μ–΄ 수)
    • 각 μ‹¬λ³Όλ³„λ‘œ 1일치 데이터(1440ν–‰) 검증
    • λ‚ μ§œλ³„λ‘œ λͺ¨λ“  μ‹¬λ³Όμ˜ 데이터λ₯Ό ν•˜λ‚˜μ˜ HDF5 파일둜 μ €μž₯ (data/1m_raw_data/{date}.h5)
  • μ‚¬μš©λ²•:
    python raw_data_fetcher.py --start_date 2025-02-01 --end_date 2025-02-07 --workers 16

0.5. 데이터 μ „μ²˜λ¦¬ (preprocessor.py)

  • κΈ°λŠ₯: λ‹€μš΄λ‘œλ“œλœ μ›μ‹œ λ°μ΄ν„°μ˜ ν’ˆμ§ˆμ„ κ²€μ¦ν•˜κ³  μ •μ œν•©λ‹ˆλ‹€.
  • 검증 ν•­λͺ©:
    • 심볼별 ν–‰ 수 검증: 각 심볼이 μ •ν™•νžˆ 1440ν–‰(1일치 1뢄봉)을 κ°–λŠ”μ§€ 확인
    • NaN κ°’ 검사: ν•„μˆ˜ μ»¬λŸΌμ— NaN이 μ‘΄μž¬ν•˜λŠ”μ§€ 확인
    • μžλ™ 필터링: NaN이 30개 이상인 심볼 λ˜λŠ” USD둜 μ‹œμž‘ν•˜λŠ” μŠ€ν…Œμ΄λΈ”μ½”μΈ μžλ™ μ œμ™Έ
  • μ •μ œ 방법:
    • Forward Fill: μ‹¬λ³Όλ³„λ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ μ•ž λ°©ν–₯으둜 NaN κ°’ μ±„μš°κΈ°
    • Backward Fill: μ•ž λ°©ν–₯ μ±„μš°κΈ° 후에도 남은 NaN은 λ’€ λ°©ν–₯으둜 μ±„μš°κΈ°
  • 좜λ ₯: λ¬Έμ œκ°€ μžˆλŠ” 심볼 λͺ©λ‘μ„ banned_symbols.json에 μ €μž₯ν•˜μ—¬ 후속 λ‹¨κ³„μ—μ„œ μžλ™ μ œμ™Έ

1. μœ λ‹ˆλ²„μŠ€ μ„ μ • (universe_builder.py)

  • κΈ°μ€€: USDT κΈ°μ€€ κ±°λž˜λŒ€κΈˆ(Quote Volume) μƒμœ„ N개 μ’…λͺ© (예: Top 50).
  • 필터링: 데이터 λˆ„λ½μ΄ μ‹¬ν•˜κ±°λ‚˜ νŠΉμ • 쑰건(예: μŠ€ν…Œμ΄λΈ” 코인 λ“±)에 ν•΄λ‹Ήν•˜λŠ” μ’…λͺ©μ€ μžλ™μœΌλ‘œ μ œμ™Έλ©λ‹ˆλ‹€.
  • 좜λ ₯: λ‚ μ§œλ³„λ‘œ ν•™μŠ΅ λŒ€μƒμ΄ λ˜λŠ” μ’…λͺ© λ¦¬μŠ€νŠΈκ°€ λ‹΄κΈ΄ JSON 파일.

2. μž…λ ₯ λ³€μˆ˜ (x_generator.py) - Input Features

λͺ¨λΈμ€ λ‹€μ–‘ν•œ μ‹œκ°„ λ‹¨μœ„(1λΆ„, 5λΆ„, 15λΆ„, 30λΆ„, 60λΆ„ λ“±)의 κ³Όκ±° 데이터λ₯Ό μš”μ•½ν•œ μœˆλ„μš° 기반 Featureλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λͺ¨λ“  FeatureλŠ” νŠΉμ • μ‹œμ (t)의 전체 μ’…λͺ©μ— λŒ€ν•΄ Z-score μ •κ·œν™”(Neutralization)λ₯Ό μˆ˜ν–‰ν•˜μ—¬, μ‹œμž₯ μ „μ²΄μ˜ 등락 영ν–₯을 λ°°μ œν•˜κ³  μ’…λͺ© κ°„μ˜ μƒλŒ€μ  μš°μœ„λ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€.

κΈ°λ³Έ μ§€ν‘œ (Price Ratios)

  • O2C / O2H / O2L: μ‹œκ°€ λŒ€λΉ„ μ’…κ°€/κ³ κ°€/μ €κ°€ λΉ„μœ¨
  • H2C / L2C: κ³ κ°€/μ €κ°€ λŒ€λΉ„ μ’…κ°€ μœ„μΉ˜ λΉ„μœ¨
  • H2L_Vol: 고가와 μ €κ°€μ˜ 차이 (변동성 크기, μˆ˜μΆ•/ν™•μž₯ 탐지)

κ³ κΈ‰ μ§€ν‘œ (Market Microstructure & Volatility)

μ§€ν‘œλͺ… (Feature) μ„€λͺ… (Description) ν™œμš© 둜직 (Logic)
RVol (Realized Volatility) μ‹€ν˜„ 변동성 둜그 수읡λ₯ μ˜ ν‘œμ€€νŽΈμ°¨λ₯Ό 톡해 μ‹€μ œ μ‹œμž₯의 리슀크 μˆ˜μ€€μ„ μΈ‘μ •ν•©λ‹ˆλ‹€.
EffRatio (Efficiency Ratio) νš¨μœ¨μ„± μ§€μˆ˜ μΆ”μ„Έκ°€ μ–Όλ§ˆλ‚˜ 직선적인지(μˆœλ„)λ₯Ό μΈ‘μ •ν•©λ‹ˆλ‹€. (1에 κ°€κΉŒμšΈμˆ˜λ‘ λ…Έμ΄μ¦ˆ μ—†λŠ” μΆ”μ„Έ)
OI_P_Corr (OI-Price Correlation) OI-가격 μƒκ΄€κ³„μˆ˜ 가격 μƒμŠΉ μ‹œ λ―Έκ²°μ œμ•½μ •(OI)이 λ™λ°˜ μƒμŠΉν•˜λŠ”μ§€ ν™•μΈν•˜μ—¬ μΆ”μ„Έμ˜ 진정성을 νŒλ‹¨ν•©λ‹ˆλ‹€.
Force (Force Index) 포슀 인덱슀 가격 변동뢄에 κ±°λž˜λŸ‰μ„ κ°€μ€‘ν•˜μ—¬ 맀수/맀도 μ„Έλ ₯의 μ‹€μ§ˆμ μΈ νž˜μ„ μΈ‘μ •ν•©λ‹ˆλ‹€.
PctB (Bollinger %B) λ³Όλ¦°μ € %B λ³Όλ¦°μ € λ°΄λ“œ λ‚΄μ—μ„œ ν˜„μž¬ κ°€κ²©μ˜ μƒλŒ€μ  μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄μ–΄ λ°μ΄ν„°μ˜ 정상성(Stationarity)을 ν™•λ³΄ν•©λ‹ˆλ‹€.
  • NetTaker (순맀수 체결 강도): 전체 κ±°λž˜λŸ‰ 쀑 μ‹œμž₯κ°€ 맀수(곡격적 맀수)의 μš°μœ„ λΉ„μœ¨ (-1 ~ +1)
  • AvgTrade (평균 체결 κΈˆμ•‘): μ£Όλ¬Έ 건당 평균 거래 규λͺ¨ (큰손/고래의 μ‹œμž₯ μ§„μž… 감지)
  • OI_Chg (λ―Έκ²°μ œμ•½μ • 변동λ₯ ): μ‹œμž₯에 κΉ”λ¦° 판돈(Open Interest)의 증감 (자금 μœ μž…=좔세지속, 유좜=μΆ”μ„Έλ°˜μ „)
  • WhaleGap (μŠ€λ§ˆνŠΈλ¨Έλ‹ˆ 괴리): 고래(Top Trader)와 개미(Global)의 λ‘±/숏 λΉ„μœ¨ 차이 (μ„Έλ ₯ μΆ”μ’… μ§€ν‘œ)
  • C2VWAP (VWAP 괴리율): κ±°λž˜λŸ‰ 가쀑 평균가(μ„Έλ ₯ 평단) λŒ€λΉ„ ν˜„μž¬κ°€μ˜ 이격도 (μ§€μ§€/μ €ν•­ 및 과맀수 νŒλ³„)
  • Premium (프리미엄 μΆ”μ„Έ): ν˜„λ¬Ό λŒ€λΉ„ μ„ λ¬Ό κ°€κ²©μ˜ 괴리 정도 (νŽ€λ”©λΉ„ 기반의 μ‹œμž₯ κ³Όμ—΄/침체 νŒλ‹¨)

μœˆλ„μš°λ³„ κ³ κΈ‰ μ—”μ§€λ‹ˆμ–΄λ§ ν”Όμ²˜ (Window-Specific Engineered Features)

각 μœˆλ„μš° 크기(1λΆ„, 5λΆ„, 15λΆ„, 30λΆ„, 60λΆ„ λ“±)에 λŒ€ν•΄ λ‹€μŒμ˜ feature듀을 μƒμ„±ν•©λ‹ˆλ‹€.

μ§€ν‘œλͺ… μˆ˜μ‹ μ„€λͺ…(Description) ν™œμš© 둜직(Logic)
Close_Diff_Rate $\frac{Close_t - Close_{t-w}}{Close_{t-w}}$ μœˆλ„μš°λ³„ 가격 λ³€ν™”μœ¨ ν•΄λ‹Ή μœˆλ„μš° κΈ°κ°„ λ™μ•ˆμ˜ 수읡λ₯ μ„ μΈ‘μ •ν•˜μ—¬ 단기/쀑기/μž₯κΈ° λͺ¨λ©˜ν…€μ„ ꡬ뢄
RatioSkew $LS_{top} - LS_{global}$ ν¬μ§€μ…˜ 집쀑도 μ™œλ„ 고래(μƒμœ„ νŠΈλ ˆμ΄λ”)와 일반 투자자의 둱숏 λΉ„μœ¨ 차이. 값이 클수둝 μŠ€λ§ˆνŠΈλ¨Έλ‹ˆκ°€ ν•œμͺ½μœΌλ‘œ 쏠림
RatioSkew_Z $\frac{ratio_skew - \mu_w}{\sigma_w}$ ν¬μ§€μ…˜ 집쀑도 Z-score ratio_skew의 둀링 ν‘œμ€€ν™” κ°’. 극단적 κ°’(Β±2 이상)은 비정상적 ν¬μ§€μ…˜ 편ν–₯을 의미
CrowdingPressure $\tanh(3.0 \times ratio_skew_z)$ ꡰ쀑 μ••λ ₯ μ§€μˆ˜ Z-scoreλ₯Ό tanh둜 μ••μΆ•(-1~+1)ν•˜μ—¬ κ³Όλ„ν•œ 편ν–₯ μ‹œ λ°˜μ „ μ‹ ν˜Έλ‘œ ν™œμš©
OI_Z $\frac{OI_t - \mu_w}{\sigma_w}$ λ―Έκ²°μ œμ•½μ • Z-score OI의 ν‘œμ€€ν™”λœ μˆ˜μ€€. κΈ‰λ“±(+2 이상) μ‹œ μ‹ κ·œ 자금 μœ μž…, 급감(-2 μ΄ν•˜) μ‹œ μ²­μ‚° μ••λ ₯
PriceOIRegime $sign(price_change) \times sign(oi_change)$ 가격-OI 체제 νŒλ³„ +1: μƒμŠΉ+OI증가(κ±΄μ „ν•œ μƒμŠΉ) λ˜λŠ” ν•˜λ½+OIκ°μ†Œ(κ±΄μ „ν•œ ν•˜λ½), -1: 뢈일치(λ°˜μ „ 주의)
OI_XSkew $oi_z \times ratio_skew_z$ OI-ν¬μ§€μ…˜ μƒν˜Έμž‘μš© OI 급증과 ν¬μ§€μ…˜ 쏠림이 λ™μ‹œ λ°œμƒ μ‹œ 극단적 κ°’ β†’ μΆ”μ„Έ 가속 λ˜λŠ” λ°˜μ „ μž„λ°• μ‹ ν˜Έ

핡심 둜직:

  1. x_mt_oi_diff_rate: OI λ³€ν™”μœ¨μ€ μœˆλ„μš°λ³„λ‘œ κ³„μ‚°λ˜μ§€λ§Œ 쀑간 λ³€μˆ˜λ‘œλ§Œ μ‚¬μš©λ˜λ©° μ΅œμ’… 좜λ ₯μ—λŠ” ν¬ν•¨λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  2. Rolling Z-score μ•ˆμ •ν™”:
    • μœˆλ„μš°κ°€ 5 미만일 λ•ŒλŠ” κ°•μ œλ‘œ μ΅œμ†Œ 5개 ꡬ간을 μ‚¬μš©ν•˜μ—¬ κ³Όλ„ν•œ λ…Έμ΄μ¦ˆ λ°©μ§€
    • μœˆλ„μš°κ°€ 5 이상일 λ•ŒλŠ” ν•΄λ‹Ή μœˆλ„μš° 전체λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •ν™•ν•œ 톡계 계산
  3. 닀쀑 μ‹œκ°„λŒ€ 뢄석: λ™μΌν•œ ν”Όμ²˜λ₯Ό μ—¬λŸ¬ μœˆλ„μš°λ‘œ μƒμ„±ν•¨μœΌλ‘œμ¨ λͺ¨λΈμ΄ 단기/쀑기/μž₯κΈ° νŒ¨ν„΄μ„ λ™μ‹œμ— ν•™μŠ΅ κ°€λŠ₯

3. νƒ€κ²Ÿ λ³€μˆ˜ (y_generator.py) - Output Features

λͺ¨λΈμ€ μ ˆλŒ€μ μΈ 수읡λ₯ μ΄ μ•„λ‹Œ, **μ‹œμž₯ 평균 λŒ€λΉ„ 초과 수읡(Alpha)**을 μ˜ˆμΈ‘ν•©λ‹ˆλ‹€.

  • 방식: Forward Difference Neutralized
  • μˆ˜μ‹: $y_{t, w} = (Close_{t+w} - Close_{t}) - \text{Mean}{market}(Close{t+w} - Close_{t})$
  • 예츑 ꡬ간: 1λΆ„, 5λΆ„, 15λΆ„, 30λΆ„, 60λΆ„ λ’€μ˜ 초과 수읡.
  • λͺ©ν‘œ: ν–₯ν›„ $w$λΆ„ λ™μ•ˆ μ‹œμž₯ 평균보닀 더 많이 였λ₯Ό(ν˜Ήμ€ 덜 λ–¨μ–΄μ§ˆ) μ’…λͺ©μ„ 식별.

4. 톡합 데이터셋 생성 (xy_range_dump.py)

  • κΈ°λŠ₯: λ‚ μ§œ λ²”μœ„μ— λŒ€ν•΄ Feature(X)와 Label(Y)λ₯Ό λ³‘λ ¬λ‘œ μƒμ„±ν•˜κ³  ν†΅ν•©ν•©λ‹ˆλ‹€.
  • 처리 κ³Όμ •:
    1. μ§€μ •λœ λ‚ μ§œ λ²”μœ„μ˜ 각 λ‚ μ§œμ— λŒ€ν•΄ x_generator.py와 y_generator.pyλ₯Ό λ³‘λ ¬λ‘œ μ‹€ν–‰
    2. μƒμ„±λœ X와 Y 데이터λ₯Ό symbolκ³Ό start_time_ms κΈ°μ€€μœΌλ‘œ 병합
    3. 각 λ‚ μ§œλ³„λ‘œ ν†΅ν•©λœ 데이터셋을 HDF5 파일둜 μ €μž₯ (data/xy/{date}_xy_top{top}.h5)
  • νŠΉμ§•:
    • 병렬 처리: μ—¬λŸ¬ λ‚ μ§œλ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•˜μ—¬ λŒ€λŸ‰ 데이터 생성 μ‹œκ°„ 단좕
    • 닀쀑 예츑 ꡬ간: μ—¬λŸ¬ μ‹œκ°„ μœˆλ„μš°(1λΆ„, 5λΆ„, 15λΆ„, 30λΆ„, 60λΆ„ λ“±)의 λ ˆμ΄λΈ”μ„ ν•œ λ²ˆμ— 생성
    • μžλ™ μœ λ‹ˆλ²„μŠ€ λ‘œλ”©: universe_builder.pyμ—μ„œ μƒμ„±ν•œ μœ λ‹ˆλ²„μŠ€ νŒŒμΌμ„ μžλ™μœΌλ‘œ μ°Έμ‘°
  • μ‚¬μš©λ²•:
    python xy_range_dump.py \
      --start_date 2025-02-01 \
      --end_date 2025-02-07 \
      --top 50 \
      --data_dir data/1m_raw_data \
      --out_dir data/xy \
      --windows 1,5,15,30,60 \
      --max_workers 12

🧠 λͺ¨λΈ (Model)

ν”„λ‘œμ νŠΈμ—μ„œλŠ” λ‹€μ–‘ν•œ λ”₯λŸ¬λ‹ 및 λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈμ„ κ΅¬ν˜„ν•˜μ—¬ μ•”ν˜Έν™”ν 가격 μ˜ˆμΈ‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

1. CNN

  • μ•„ν‚€ν…μ²˜: 1D Convolutional Neural Network
    • Conv1D (32 filters) β†’ MaxPool β†’ Conv1D (64 filters) β†’ MaxPool β†’ Global Average Pooling β†’ Fully Connected
  • μž…λ ₯ ν˜•νƒœ: (Batch, Time, Features) - μ‹œκ³„μ—΄ 데이터λ₯Ό μ‹œκ°„ μ°¨μ›μœΌλ‘œ 처리
  • νŠΉμ§•:
    • 단일 μ’…λͺ©μ˜ μ‹œκ³„μ—΄ νŒ¨ν„΄ ν•™μŠ΅μ— νŠΉν™”
    • κ²½λŸ‰ λͺ¨λΈλ‘œ λΉ λ₯Έ ν•™μŠ΅ 및 μΆ”λ‘  κ°€λŠ₯
    • μž…λ ₯ μ •κ·œν™”λ₯Ό λͺ¨λΈ λ‚΄λΆ€μ—μ„œ μˆ˜ν–‰

2. CryptoMamba

  • μ•„ν‚€ν…μ²˜: Mamba-based State Space Model
    • Temporal Mamba Layers (μ‹œκ°„ 차원 처리) + Spatial Mamba Layers (μ’…λͺ© κ°„ 관계 ν•™μŠ΅)
  • μž…λ ₯ ν˜•νƒœ: (Batch, Time, Nodes, Features) - 닀쀑 μ’…λͺ©μ˜ μ‹œκ³΅κ°„ 데이터
  • νŠΉμ§•:
    • Mamba SSM을 ν™œμš©ν•œ 효율적인 μž₯κΈ° μ˜μ‘΄μ„± ν•™μŠ΅
    • μ’…λͺ© κ°„ 상관관계λ₯Ό 곡간 μ°¨μ›μ—μ„œ λͺ¨λΈλ§
    • λ‹€μ–‘ν•œ Loss Function 지원 (MSE, Hybrid, Adaptive, Directional, IC Loss)

3. SpatioTemporalTransformer

  • μ•„ν‚€ν…μ²˜: 1D-CNN + Transformer Encoder
    • Temporal Encoder (1D-CNN) β†’ Spatial Encoder (Transformer) β†’ Prediction Head
  • μž…λ ₯ ν˜•νƒœ: (Batch, Time, Nodes, Features) - 닀쀑 μ’…λͺ©μ˜ μ‹œκ³΅κ°„ 데이터
  • νŠΉμ§•:
    • CNN으둜 μ‹œκ°„μ  νŒ¨ν„΄ μΆ”μΆœ ν›„ Transformer둜 μ’…λͺ© κ°„ 관계 ν•™μŠ΅
    • Regression 및 Classification λͺ¨λ“œ 지원
    • Auxiliary Lossλ₯Ό ν†΅ν•œ 닀쀑 νƒœμŠ€ν¬ ν•™μŠ΅

4. LightGBM (LGBM)

  • μ•„ν‚€ν…μ²˜: Gradient Boosting Decision Tree
  • μž…λ ₯ ν˜•νƒœ: Tabular Data (Flattened Features)
  • νŠΉμ§•:
    • 전톡적인 λ¨Έμ‹ λŸ¬λ‹ κΈ°λ²•μœΌλ‘œ λΉ λ₯Έ ν•™μŠ΅ 및 해석 κ°€λŠ₯μ„±
    • Grid Searchλ₯Ό ν†΅ν•œ ν•˜μ΄νΌνŒŒλΌλ―Έν„° μ΅œμ ν™” 지원
  • GBDTλ‘œμ„œμ˜ μž₯점:
    • λΉ„μ„ ν˜• 관계 ν•™μŠ΅: κ²°μ • 트리 기반 μ•™μƒλΈ”λ‘œ λ³΅μž‘ν•œ λΉ„μ„ ν˜• νŒ¨ν„΄μ„ 효과적으둜 ν•™μŠ΅
    • Feature μƒν˜Έμž‘μš© μžλ™ 탐지: μ—¬λŸ¬ Feature κ°„μ˜ μƒν˜Έμž‘μš©μ„ μžλ™μœΌλ‘œ ν•™μŠ΅ν•˜μ—¬ μ‹œμž₯ λ―Έμ‹œκ΅¬μ‘°μ˜ 볡합적 관계λ₯Ό 포착
    • μ΄μƒμΉ˜ 강건성: 트리 기반 λͺ¨λΈμ˜ νŠΉμ„±μƒ μ΄μƒμΉ˜μ— 덜 λ―Όκ°ν•˜μ—¬ μ•”ν˜Έν™”ν μ‹œμž₯의 κΈ‰κ²©ν•œ 변동에도 μ•ˆμ •μ 
    • 결츑치 처리: λ‚΄λΆ€μ μœΌλ‘œ 결츑치λ₯Ό μžλ™ μ²˜λ¦¬ν•˜μ—¬ 데이터 μ „μ²˜λ¦¬ λΆ€λ‹΄ κ°μ†Œ
    • 과적합 λ°©μ§€: Early Stopping, μ •κ·œν™” νŒŒλΌλ―Έν„° 등을 톡해 과적합을 효과적으둜 μ œμ–΄
    • λΉ λ₯Έ μΆ”λ‘  속도: ν•™μŠ΅λœ λͺ¨λΈμ˜ 좔둠이 맀우 λΉ λ₯΄λ©° μ‹€μ‹œκ°„ μ˜ˆμΈ‘μ— 적합

πŸš€ μ‚¬μš© 방법 (Usage)

데이터 μ€€λΉ„

0. μ›μ‹œ 데이터 μˆ˜μ§‘

python raw_data_fetcher.py --start_date 2025-02-01 --end_date 2025-02-07 --workers 16
  • Binanceμ—μ„œ 1뢄봉, Premium Index, Metrics 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•˜μ—¬ data/1m_raw_data/{date}.h5에 μ €μž₯ν•©λ‹ˆλ‹€.

0.5. 데이터 μ „μ²˜λ¦¬ (선택사항)

python -c "from preprocessor import ban_symbols_with_nan; ban_symbols_with_nan('2025-02-01')"
  • νŠΉμ • λ‚ μ§œμ˜ 데이터 ν’ˆμ§ˆμ„ κ²€μ¦ν•˜κ³  λ¬Έμ œκ°€ μžˆλŠ” 심볼을 banned_symbols.json에 μ €μž₯ν•©λ‹ˆλ‹€.
  • x_generator.py와 y_generator.pyμ—μ„œ μžλ™μœΌλ‘œ μ œμ™Έλ©λ‹ˆλ‹€.

1. μœ λ‹ˆλ²„μŠ€ 생성

python universe_builder.py --start_date 2025-02-01 --end_date 2025-03-01 --top_n 50

2. Feature 데이터(X) 생성

python x_generator.py --date 2025-03-01 --top 50

3. Label 데이터(y) 생성

python y_generator.py --date 2025-03-01 --top 50

4. 톡합 데이터셋 생성 (ꢌμž₯)

python xy_range_dump.py \
  --start_date 2025-02-01 \
  --end_date 2025-02-07 \
  --top 50 \
  --data_dir data/1m_raw_data \
  --out_dir data/xy \
  --windows 1,5,15,30,60 \
  --max_workers 12
  • μ—¬λŸ¬ λ‚ μ§œμ— λŒ€ν•΄ X와 Yλ₯Ό λ³‘λ ¬λ‘œ μƒμ„±ν•˜κ³  ν†΅ν•©ν•©λ‹ˆλ‹€.
  • κ°œλ³„ λ‚ μ§œλ³„ μ‹€ν–‰(2, 3번) λŒ€μ‹  λ²”μœ„ λ‹¨μœ„ 일괄 μ²˜λ¦¬κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λͺ¨λΈ ν•™μŠ΅

CNN λͺ¨λΈ

# κΈ°λ³Έ ν•™μŠ΅ λͺ¨λ“œ
python model/CNN_train.py

# Rolling Window ν•™μŠ΅ (5개 μœˆλ„μš°λ‘œ 반볡 ν•™μŠ΅)
$env:MODE="rolling"; python model/CNN_train.py

# Hyperparameter Search
$env:MODE="search"; python model/CNN_train.py

μ„€μ • 파일: model/CNN_train.py의 CONFIG λ”•μ…”λ„ˆλ¦¬μ—μ„œ λ‚ μ§œ λ²”μœ„, 배치 크기, ν•™μŠ΅λ₯  등을 μ‘°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

CryptoMamba λͺ¨λΈ

python model/CryptoMamba_train.py

μ„€μ • 파일: model/CryptoMamba_train.py의 CONFIGμ—μ„œ Mamba λ ˆμ΄μ–΄ 수, hidden dimension, loss function νƒ€μž… 등을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

SpatioTemporalTransformer λͺ¨λΈ

python model/SpatioTemporal_train.py

μ„€μ • 파일: model/SpatioTemporal_train.py의 CONFIGμ—μ„œ Transformer λ ˆμ΄μ–΄ 수, attention heads, λͺ¨λ“œ(regression/classification) 등을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

LightGBM λͺ¨λΈ

# ν•™μŠ΅ + 평가
python -m machine_learning.lgbm \
  --mode train_eval \
  --train_start 2025-02-01 --train_end 2025-04-30 \
  --valid_start 2025-05-01 --valid_end 2025-05-14 \
  --test_start  2025-05-15 --test_end  2025-05-28 \
  --y_name y_60m --topn 30 \
  --max_rows 600000 \
  --num_boost_round 4000 \
  --early_stopping_rounds 200

# μΆ”λ‘ λ§Œ μˆ˜ν–‰
python machine_learning/lgbm.py \
  --mode infer \
  --infer_start 2024-03-02 --infer_end 2024-03-05 \
  --y_name y_60m --topn 30 \
  --model_path /path/to/model.pkl \
  --meta_path  /path/to/meta.json \
  --save_preds

LGBM Grid Search

python machine_learning/lgbm_grid.py

πŸ“‹ μ„€μ • 파일 (Configuration Files)

ν”„λ‘œμ νŠΈμ—μ„œλŠ” 데이터 ν’ˆμ§ˆ 관리, Feature 선택, ν•™μŠ΅ 섀정을 μœ„ν•œ μ—¬λŸ¬ JSON μ„€μ • νŒŒμΌμ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

1. Universe JSON 파일 (top{topn}_universe.json)

  • μš©λ„: λ‚ μ§œλ³„λ‘œ ν•™μŠ΅ λŒ€μƒμ΄ λ˜λŠ” μ’…λͺ© 리슀트λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • 생성: universe_builder.py μ‹€ν–‰ μ‹œ μžλ™ 생성
  • ν˜•μ‹:
    {
      "2025-02-01": ["BTCUSDT", "ETHUSDT", "SOLUSDT", ...],
      "2025-02-02": ["BTCUSDT", "ETHUSDT", "BNBUSDT", ...],
      ...
    }
  • μ‚¬μš©μ²˜:
    • x_generator.py, y_generator.py: νŠΉμ • λ‚ μ§œμ˜ μœ λ‹ˆλ²„μŠ€ 쑰회
    • xy_range_dump.py: λ‚ μ§œ λ²”μœ„μ— λŒ€ν•œ μœ λ‹ˆλ²„μŠ€ λ‘œλ”©
  • νŠΉμ§•:
    • USDT κΈ°μ€€ κ±°λž˜λŒ€κΈˆ μƒμœ„ N개 μ’…λͺ©μœΌλ‘œ ꡬ성
    • banned_symbols.json에 λ“±λ‘λœ 심볼은 μžλ™ μ œμ™Έ

2. Banned Symbols JSON (banned_symbols.json)

  • μš©λ„: λ‚ μ§œλ³„λ‘œ 데이터 ν’ˆμ§ˆ 문제둜 μ œμ™Έν•  심볼 λͺ©λ‘μ„ μ €μž₯ν•©λ‹ˆλ‹€.
  • 생성: preprocessor.py의 ban_symbols_with_nan() ν•¨μˆ˜λ‘œ μžλ™ 생성
  • ν˜•μ‹:
    {
      "2025-02-01": ["CVCUSDT", "USDCUSDT"],
      "2025-02-02": ["BTCDOMUSDT", "CVCUSDT"],
      ...
    }
  • μ œμ™Έ κΈ°μ€€:
    • NaN 값이 30개 이상인 심볼
    • USD둜 μ‹œμž‘ν•˜λŠ” μŠ€ν…Œμ΄λΈ”μ½”μΈ (μžλ™ μ œμ™Έ)
  • μ‚¬μš©μ²˜:
    • universe_builder.py: μœ λ‹ˆλ²„μŠ€ μ„ μ • μ‹œ μžλ™ μ œμ™Έ
    • x_generator.py, y_generator.py: ν•΄λ‹Ή λ‚ μ§œμ˜ μ œμ™Έ 심볼 필터링

3. Global Ban Dates JSON (global_ban_dates.json)

  • μš©λ„: 전체 ν•™μŠ΅ κ³Όμ •μ—μ„œ μ œμ™Έν•  λ‚ μ§œλ“€μ„ μ €μž₯ν•©λ‹ˆλ‹€.
  • ν˜•μ‹:
    {
      "missing_dates": ["2024-03-31", "2024-04-01", ...],
      "nan_dates": {
        "2024-02-16": ["x_15m_OI_P_Corr", "x_30m_OI_P_Corr", ...],
        "2024-02-18": ["x_1m_AvgTrade", "x_1m_NetTaker", ...],
        ...
      }
    }
  • ꡬ성 μš”μ†Œ:
    • missing_dates: 데이터 파일이 μ—†κ±°λ‚˜ μ†μƒλœ λ‚ μ§œ 리슀트
    • nan_dates: νŠΉμ • Feature에 NaN이 λ§Žμ•„ ν•΄λ‹Ή λ‚ μ§œμ˜ νŠΉμ • Feature만 μ œμ™Έν•˜κ³  싢을 λ•Œ μ‚¬μš©
  • μ‚¬μš©μ²˜:
    • machine_learning/datasets.py: λ‚ μ§œ λ²”μœ„ 생성 μ‹œ μžλ™ μ œμ™Έ
    • λ”₯λŸ¬λ‹ λͺ¨λΈμ˜ DataLoader (CNN_dataloader.py, CryptoMamba_dataloader.py, SpatioTemporal_dataloader.py): ν•™μŠ΅ 데이터 λ‘œλ”© μ‹œ μ œμ™Έ
  • νŠΉμ§•:
    • missing_dates에 ν¬ν•¨λœ λ‚ μ§œλŠ” μ™„μ „νžˆ μ œμ™Έ
    • nan_dates에 ν¬ν•¨λœ λ‚ μ§œλŠ” ν•΄λ‹Ή Feature만 0으둜 μ±„μ›Œμ„œ μ‚¬μš© κ°€λŠ₯

4. Feature List JSON (feature_list/{y_name}/top{topn}_example_features_{num}.json)

  • μš©λ„: λͺ¨λΈ ν•™μŠ΅μ— μ‚¬μš©ν•  Feature 리슀트λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • 경둜: feature_list/{y_name}/top{topn}_example_features_{num}.json
    • 예: feature_list/y_60m/top30_example_features_166.json
  • ν˜•μ‹:
    ["x_1m_O2C_neut", "x_1m_H2C_neut", "x_5m_RVol_neut", ...]
    λ˜λŠ” λ¬Έμžμ—΄λ‘œ μΈμ½”λ”©λœ ν˜•νƒœλ„ 지원:
    "['x_1m_O2C_neut', 'x_1m_H2C_neut', ...]"
  • μ‚¬μš©μ²˜:
    • machine_learning/datasets.py: LightGBM ν•™μŠ΅ μ‹œ Feature 선택
    • λ”₯λŸ¬λ‹ λͺ¨λΈ DataLoader: Feature 필터링
  • νŠΉμ§•:
    • Feature Selection κ²°κ³Όλ₯Ό μ €μž₯ν•˜μ—¬ μž¬ν˜„μ„± 확보
    • y_name (예: y_60m)κ³Ό topn (예: 30)에 따라 λ‹€λ₯Έ Feature 리슀트 μ‚¬μš© κ°€λŠ₯
    • 파일이 μ—†μœΌλ©΄ μžλ™μœΌλ‘œ λͺ¨λ“  _neut둜 λλ‚˜λŠ” Featureλ₯Ό μ‚¬μš©

πŸ“ 디렉토리 ꡬ쑰 (Directory Structure)

.
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ 1m_raw_data/               # μ›μ‹œ 1뢄봉 데이터 (raw_data_fetcher.py둜 생성)
β”‚   β”œβ”€β”€ xy/                        # 톡합 Feature + Label 데이터 (λ‚ μ§œλ³„ .h5 파일)
β”‚   └── datasets/                  # μ „μ²˜λ¦¬λœ ν•™μŠ΅μš© 데이터셋
β”‚       β”œβ”€β”€ cnn/                   # CNN λͺ¨λΈμš© 데이터셋
β”‚       β”œβ”€β”€ ml/                    # λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈμš© 데이터셋
β”‚       └── spatiotfm/             # SpatioTemporal λͺ¨λΈμš© 데이터셋
β”‚
β”œβ”€β”€ model/                         # λ”₯λŸ¬λ‹ λͺ¨λΈ μ½”λ“œ
β”‚   β”œβ”€β”€ CNN.py                     # CNN λͺ¨λΈ μ •μ˜
β”‚   β”œβ”€β”€ CNN_train.py               # CNN ν•™μŠ΅ 슀크립트
β”‚   β”œβ”€β”€ CNN_dataloader.py          # CNN 데이터 λ‘œλ”
β”‚   β”œβ”€β”€ CryptoMamba.py             # CryptoMamba λͺ¨λΈ μ •μ˜
β”‚   β”œβ”€β”€ CryptoMamba_train.py       # CryptoMamba ν•™μŠ΅ 슀크립트
β”‚   β”œβ”€β”€ CryptoMamba_dataloader.py # CryptoMamba 데이터 λ‘œλ”
β”‚   β”œβ”€β”€ SpatioTemporalTransformer.py  # SpatioTemporal λͺ¨λΈ μ •μ˜
β”‚   β”œβ”€β”€ SpatioTemporal_train.py    # SpatioTemporal ν•™μŠ΅ 슀크립트
β”‚   └── SpatioTemporal_dataloader.py # SpatioTemporal 데이터 λ‘œλ”
β”‚    
β”‚
β”œβ”€β”€ machine_learning/              # λ¨Έμ‹ λŸ¬λ‹ λͺ¨λΈ μ½”λ“œ
β”‚   β”œβ”€β”€ lgbm.py                    # LightGBM ν•™μŠ΅/μΆ”λ‘  슀크립트
β”‚   β”œβ”€β”€ lgbm_grid.py               # LightGBM Grid Search
β”‚   β”œβ”€β”€ datasets.py                # 데이터셋 λΉŒλ”
β”‚   └── linear_model.py            # μ„ ν˜• λͺ¨λΈ
β”‚
β”œβ”€β”€ models/                        # ν•™μŠ΅λœ λͺ¨λΈ 체크포인트 (.pt, .pkl)
β”‚
β”œβ”€β”€ results/                       # μ‹€ν—˜ κ²°κ³Ό
β”‚   β”œβ”€β”€ cnn/                       # CNN μ‹€ν—˜ κ²°κ³Ό (IC, μ„±λŠ₯ μ§€ν‘œ λ“±)
β”‚   β”œβ”€β”€ lgbm/                      # LGBM μ‹€ν—˜ κ²°κ³Ό (IC, μ„±λŠ₯ μ§€ν‘œ λ“±)
β”‚   β”œβ”€β”€ sttfm/                     # SpatioTemporal μ‹€ν—˜ κ²°κ³Ό (IC, μ„±λŠ₯ μ§€ν‘œ λ“±)
β”‚   └── mamba/                     # CryptoMamba μ‹€ν—˜ κ²°κ³Ό (IC, μ„±λŠ₯ μ§€ν‘œ λ“±)
β”‚
β”‚   각 λͺ¨λΈλ³„λ‘œ Information Coefficient (IC), 예츑 μ„±λŠ₯ μ§€ν‘œ λ“±μ˜ μ‹€ν—˜ κ²°κ³Όλ₯Ό μ •λ¦¬ν•˜μ—¬ μ €μž₯ν•©λ‹ˆλ‹€.
β”‚ 
β”œβ”€β”€ feature_list/                  # Feature 리슀트 JSON 파일
β”‚   └── y_60m/                     # 60λΆ„ 예츑용 feature 리슀트
β”‚       └── top{topn}_example_features_{num}.json
β”‚
β”œβ”€β”€ top{topn}_universe.json        # λ‚ μ§œλ³„ μœ λ‹ˆλ²„μŠ€ μ’…λͺ© 리슀트 (예: top30_universe.json, top50_universe.json)
β”œβ”€β”€ banned_symbols.json             # λ‚ μ§œλ³„ μ œμ™Έ 심볼 λͺ©λ‘
β”œβ”€β”€ global_ban_dates.json           # 전체 μ œμ™Έ λ‚ μ§œ 및 Feature별 NaN λ‚ μ§œ
β”‚
β”œβ”€β”€ raw_data_fetcher.py            # μ›μ‹œ 데이터 μˆ˜μ§‘ 슀크립트 (Binance API)
β”œβ”€β”€ preprocessor.py                # 데이터 μ •μ œ 및 검증 λͺ¨λ“ˆ
β”œβ”€β”€ universe_builder.py            # μ’…λͺ© μ„ μ • 슀크립트
β”œβ”€β”€ x_generator.py                 # Feature μ—”μ§€λ‹ˆμ–΄λ§ ($X$ 생성)
β”œβ”€β”€ y_generator.py                 # νƒ€κ²Ÿ λ ˆμ΄λΈ”λ§ ($y$ 생성)
β”œβ”€β”€ xy_range_dump.py               # 톡합 데이터셋 생성 슀크립트 (X+Y 병합)
└── README.md

About

crypto_price_prediction

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors