ML Documentation

暗号通貨価格予測のための機械学習アーキテクチャ提案

1. エグゼクティブサマリー

本ドキュメントでは、OHLCV、Ticks(不規則時系列データ)、Orderbook(不規則時系列データ)を活用した機械学習による価格予測システムの最適なアーキテクチャを提案します。

推奨アプローチ:ハイブリッド型アーキテクチャ
- 各データタイプごとに特化したモデルを構築(個別モデル)
- 各モデルの予測結果を統合するメタモデル(アンサンブル学習)
- リアルタイム性を重視した特徴量エンジニアリング

2. データ特性の分析

2.1 各データタイプの特徴

OHLCV(規則的時系列データ)

Ticks(不規則時系列データ)

Orderbook(不規則時系列データ)

2.2 データ間の相関性

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   OHLCV     │     │    Ticks    │     │  Orderbook  │
│ (マクロ視点) │ ←→ │ (執行データ) │ ←→ │ (需給状態)  │
└─────────────┘     └─────────────┘     └─────────────┘
       ↓                    ↓                    ↓
   長期トレンド        実際の取引         短期需給

3. 推奨アーキテクチャ:ハイブリッド型

3.1 アーキテクチャ概要

[データ層]
    OHLCV → 特徴量抽出 → OHLCVモデル → 予測1
    Ticks → 特徴量抽出 → Ticksモデル → 予測2    → メタモデル → 最終予測
    Orderbook → 特徴量抽出 → Orderbookモデル → 予測3

3.2 各コンポーネントの詳細

3.2.1 OHLCVモデル

推奨モデル: LSTM/GRU + Attention

特徴量:
- 価格系列正規化済み
- テクニカル指標RSIMACDボリンジャーバンド等
- 移動平均SMAEMA
- ボラティリティ指標
- 出来高プロファイル

予測対象:
- 次の1分1時間の価格
- トレンド方向上昇/下降/横ばい

3.2.2 Ticksモデル

推奨モデル: Transformer + TCN(Temporal Convolutional Network)

特徴量:
- トレードサイズ分布
- 買い/売り比率
- 取引頻度時間窓内
- 価格インパクト
- 大口取引の検出
- マイクロプライスモメンタム

予測対象:
- 次の15分の価格変動
- ボラティリティクラスタリング

3.2.3 Orderbookモデル

推奨モデル: CNN + LSTM(画像認識的アプローチ)

特徴量:
- オーダーブック不均衡Order Book Imbalance
- 深度加重価格Depth Weighted Price
- スプレッド時系列
- 板の形状特徴CNN
- 流動性指標
- 価格レベル別の注文量変化

予測対象:
- 短期価格方向130
- 実行可能価格

3.2.4 メタモデル(アンサンブル)

推奨モデル: XGBoost/LightGBM または Neural Network

入力:
- 各モデルの予測値
- 各モデルの信頼度
- 市場状態指標ボラティリティ流動性等
- 時間帯特徴

出力:
- 統合予測価格
- 予測信頼区間
- 推奨アクション買い/売り/待機

4. 単一モデル vs ハイブリッドモデルの比較

4.1 単一モデルアプローチ

メリット:
- 実装がシンプル
- 計算リソースが少ない
- デバッグが容易

デメリット:
- 各データタイプの特性を十分に活用できない
- 特徴量の次元が大きくなりすぎる
- 不規則時系列の扱いが困難

4.2 ハイブリッドモデルアプローチ(推奨)

メリット:
- 各データタイプに最適なモデルを選択可能
- 予測の多様性による精度向上
- 段階的な開発・改善が可能
- 市場状況に応じた重み付け調整

デメリット:
- 実装の複雑性
- 計算リソースの増加
- モデル間の調整が必要

5. 実装ロードマップ

Phase 1: 基盤構築(1-2週間)

  1. 特徴量エンジニアリングパイプラインの構築
  2. データ前処理とラベリング
  3. バックテスト環境の整備

Phase 2: 個別モデル開発(2-3週間)

  1. OHLCVモデルの実装(LSTM)
  2. Ticksモデルの実装(Transformer)
  3. Orderbookモデルの実装(CNN+LSTM)
  4. 各モデルの個別評価

Phase 3: 統合と最適化(1-2週間)

  1. メタモデルの実装
  2. ハイパーパラメータチューニング
  3. リアルタイム予測システムの構築

Phase 4: 評価と改善(継続的)

  1. バックテストによる性能評価
  2. リアルタイムモニタリング
  3. モデルの継続的改善

6. 特徴量エンジニアリング詳細

6.1 時間軸の統合

不規則時系列データを規則的な時間窓に変換:

# Ticksデータの集計例
def aggregate_ticks(ticks, window='1min'):
    features = {
        'trade_count': len(ticks),
        'volume': sum(t.size for t in ticks),
        'buy_ratio': sum(1 for t in ticks if t.side == 'buy') / len(ticks),
        'vwap': weighted_average(ticks),
        'large_trade_count': sum(1 for t in ticks if t.size > threshold)
    }
    return features

# Orderbookデータのスナップショット
def orderbook_features(orderbook, timestamps):
    features = {
        'bid_ask_spread': [],
        'depth_imbalance': [],
        'mid_price': [],
        'total_liquidity': []
    }
    # 指定タイムスタンプでのスナップショット取得
    return features

6.2 マルチスケール特徴量

異なる時間スケールでの特徴量を組み合わせ:

scales = ['1min', '5min', '15min', '1hour']
multi_scale_features = {}

for scale in scales:
    multi_scale_features[f'ma_{scale}'] = moving_average(prices, scale)
    multi_scale_features[f'vol_{scale}'] = volatility(prices, scale)
    multi_scale_features[f'rsi_{scale}'] = rsi(prices, scale)

7. バックテストとリスク管理

7.1 バックテスト戦略

class BacktestFramework:
    def __init__(self):
        self.models = {
            'ohlcv': OHLCVModel(),
            'ticks': TicksModel(),
            'orderbook': OrderbookModel(),
            'meta': MetaModel()
        }

    def evaluate(self, start_date, end_date):
        # ウォークフォワード分析
        # 取引コスト考慮
        # スリッページモデリング
        pass

7.2 リスク指標

8. 推奨事項とベストプラクティス

8.1 データ品質管理

8.2 モデル管理

8.3 計算効率

9. 結論

暗号通貨の価格予測において、ハイブリッド型アーキテクチャを推奨します。このアプローチにより:

  1. 各データタイプの特性を最大限活用できる
  2. 予測精度の向上が期待できる
  3. 段階的な実装により、リスクを最小化できる
  4. 市場環境の変化に柔軟に対応できる

初期実装では、まずOHLCVモデルから開始し、順次Ticks、Orderbookモデルを追加していくことで、着実な改善が可能です。最終的にメタモデルで統合することで、各モデルの強みを組み合わせた高精度な予測システムを構築できます。

10. 付録:実装例

10.1 特徴量抽出パイプライン例

class FeatureExtractor:
    def __init__(self):
        self.ohlcv_features = OHLCVFeatures()
        self.tick_features = TickFeatures()
        self.orderbook_features = OrderbookFeatures()

    def extract_all_features(self, timestamp):
        # 各データソースから特徴量を抽出
        features = {}
        features.update(self.ohlcv_features.extract(timestamp))
        features.update(self.tick_features.extract(timestamp))
        features.update(self.orderbook_features.extract(timestamp))
        return features

10.2 予測パイプライン例

class PredictionPipeline:
    def predict(self, timestamp):
        # 1. 特徴量抽出
        features = self.feature_extractor.extract_all_features(timestamp)

        # 2. 個別モデル予測
        predictions = {
            'ohlcv': self.ohlcv_model.predict(features['ohlcv']),
            'ticks': self.ticks_model.predict(features['ticks']),
            'orderbook': self.orderbook_model.predict(features['orderbook'])
        }

        # 3. メタモデル統合
        final_prediction = self.meta_model.predict(predictions)

        return final_prediction