microsoft/qlib

⭐ 26,997 🍴 4,137 Python📄 MIT License GitHubで見る →

主な特徴

  • 完全なMLパイプライン(データ処理、モデル訓練、バックテスト)
  • 定量投資の全チェーンをカバー(アルファ探索からオーダー執行まで)
  • 30以上のSOTAモデルを実装(LSTM、GRU、Transformer、LightGBM、XGBoost、HIST、KRNN、TRA等)
  • 教師あり学習、市場ダイナミクスモデリング、強化学習をサポート
  • 高頻度取引のサポート(1分データ対応)
  • Point-in-Timeデータベース
  • オンラインサービングと自動モデルローリング
  • 実験管理とワークフロー管理
  • RD-Agent: LLMベースの自動クォント研究開発エージェント
  • 多様なデータソース対応(中国市場、米国市場、暗号通貨等)

リポジトリ解析: microsoft/qlib

基本情報

  • リポジトリ名: microsoft/qlib
  • 主要言語: Python
  • スター数: 26,997
  • フォーク数: 4,137
  • 最終更新: 活発に更新中(RD-Agent最新リリース含む)
  • ライセンス: MIT License
  • トピックス: quantitative-trading, machine-learning, deep-learning, quant, finance, reinforcement-learning, artificial-intelligence, investment

概要

一言で言うと

QlibはAI技術を活用して定量投資のポテンシャルを実現し、研究を強化し、価値を創造することを目的としたオープンソースのAI指向定量投資プラットフォームです。

詳細説明

Qlibは、Microsoftが開発したオープンソースのAI指向定量投資プラットフォームで、アイデアの探索から本番実装まで、AI技術を使用した定量投資の全プロセスをサポートします。教師あり学習、市場ダイナミクスモデリング、強化学習など、多様な機械学習モデリングパラダイムをサポートしています。

データ処理、モデル訓練、バックテストを含む完全なMLパイプラインを提供し、アルファ探索、リスクモデリング、ポートフォリオ最適化、注文執行など、定量投資の全チェーンをカバーしています。また、最新のRD-Agentという、LLMベースの自動進化エージェントも提供しており、ファクターマイニングとモデル最適化を自動化します。

主な特徴

  • 完全なMLパイプライン(データ処理、モデル訓練、バックテスト)
  • 定量投資の全チェーンをカバー(アルファ探索からオーダー執行まで)
  • 30以上のSOTAモデルを実装(LSTM、GRU、Transformer、LightGBM、XGBoost、HIST、KRNN、TRA等)
  • 教師あり学習、市場ダイナミクスモデリング、強化学習をサポート
  • 高頻度取引のサポート(1分データ対応)
  • Point-in-Timeデータベース
  • オンラインサービングと自動モデルローリング
  • 実験管理とワークフロー管理
  • RD-Agent: LLMベースの自動クォント研究開発エージェント
  • 多様なデータソース対応(中国市場、米国市場、暗号通貨等)

使用方法

インストール

前提条件

  • Python 3.8以上(3.12まで対応)
  • Linux、Windows、macOS対応(Linuxが推奨)
  • メモリ: 16GB以上(ワークフロー実行用)
  • ディスク: 5GB以上の空き容量(データ用)

インストール手順

# 方法1: pipでインストール(推奨)
pip install pyqlib

# 方法2: ソースからインストール
pip install numpy
pip install --upgrade cython
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install

# オプション: 強化学習機能を含める場合
pip install pyqlib[rl]

# オプション: 開発環境を含める場合
pip install pyqlib[dev]

基本的な使い方

Hello World相当の例

# Qlibの初期化とデータ取得
import qlib
from qlib.constant import REG_CN

# Qlibの初期化(中国市場のデータを使用)
provider_uri = "~/.qlib/qlib_data/cn_data"
qlib.init(provider_uri=provider_uri, region=REG_CN)

# データの準備
from qlib.tests.data import GetData
GetData().qlib_data(target_dir=provider_uri, region=REG_CN, exists_skip=True)

# 簡単なデータ取得例
from qlib.data import D
# CSI300の2020年のデータを取得
df = D.features(["SH600000"], ["$close", "$volume"], start_time="2020-01-01", end_time="2020-12-31")
print(df.head())

実践的な使用例

# LightGBMモデルを使った株価予測の例
import qlib
from qlib.utils import init_instance_by_config
from qlib.workflow import R
from qlib.tests.config import CSI300_GBDT_TASK

# モデルとデータセットの初期化
model = init_instance_by_config(CSI300_GBDT_TASK["model"])
dataset = init_instance_by_config(CSI300_GBDT_TASK["dataset"])

# 実験開始
with R.start(experiment_name="my_experiment"):
    # モデルの訓練
    model.fit(dataset)
    
    # 予測の実行
    prediction = model.predict(dataset)
    
    # バックテストの設定
    port_analysis_config = {
        "strategy": {
            "class": "TopkDropoutStrategy",
            "kwargs": {
                "signal": (model, dataset),
                "topk": 50,  # 上位50銘柄を選択
                "n_drop": 5,  # 5銘柄をドロップアウト
            }
        },
        "backtest": {
            "start_time": "2017-01-01",
            "end_time": "2020-08-01",
            "account": 100000000,  # 初期資金1億
            "benchmark": "SH000300",  # CSI300をベンチマーク
        }
    }

高度な使い方

# RD-Agentを使った自動ファクターマイニング(概念的な例)
from qlib.rl.order_execution import *
from qlib.contrib.model.pytorch_hist import HIST

# HIST(Historical Information-aware Stock Trend Forecasting)モデルの使用
model_config = {
    "class": "HIST",
    "kwargs": {
        "d_feat": 6,  # 特徴量の次元
        "hidden_size": 128,
        "num_layers": 2,
        "dropout": 0.1,
        "n_epochs": 200,
    }
}

# 高頻度取引の設定例
hft_config = {
    "time_per_step": "1min",  # 1分間隔のデータ
    "executor": {
        "class": "NestedExecutor",
        "kwargs": {
            "time_per_step": "1min",
            "inner_executor": {
                "class": "SimulatorExecutor",
                "kwargs": {
                    "time_per_step": "1min",
                    "generate_portfolio_metrics": True,
                }
            }
        }
    }
}

ドキュメント・リソース

公式ドキュメント

  • README.md: プロジェクトの概要、最新機能、基本的な使い方
  • Read the Docs: https://qlib.readthedocs.io - 包括的なAPIドキュメントとチュートリアル
  • docs/start/: インストール、初期化、データ準備、統合ガイド
  • Paper: "Qlib: An AI-oriented Quantitative Investment Platform" (arXiv:2009.11189)
  • RD-Agent Paper: "R&D-Agent-Quant: A Multi-Agent Framework for Data-Centric Factors and Model Joint Optimization" (arXiv:2505.15155)

サンプル・デモ

  • examples/workflow_by_code.py: コードベースのワークフロー実装例
  • examples/benchmarks/: 30以上のSOTAモデルの実装と設定ファイル
    • LightGBM、XGBoost、CatBoost(勾配ブースティング)
    • LSTM、GRU、Transformer(深層学習時系列モデル)
    • HIST、KRNN、TRA(最新の研究モデル)
  • examples/tutorial/: Jupyterノートブックチュートリアル
  • examples/rl/: 強化学習の実装例
  • examples/highfreq/: 高頻度取引の例

チュートリアル・ガイド

  • クイックスタートガイド
  • ワークフロー管理チュートリアル
  • カスタムモデル実装ガイド
  • データハンドラーのカスタマイズ
  • バックテストと評価のベストプラクティス
  • オンラインサービングとモデルローリング

技術的詳細

アーキテクチャ

全体構造

Qlibは、定量投資研究のエンドツーエンドパイプラインを提供する階層型アーキテクチャを採用しています:

  1. インフラレイヤー: データストレージ、計算リソース管理
  2. データレイヤー: データ収集、前処理、特徴エンジニアリング
  3. モデルレイヤー: ML/DLモデル、予測、シグナル生成
  4. ポートフォリオレイヤー: リスク管理、最適化、実行戦略
  5. プラットフォームレイヤー: ワークフロー管理、実験追跡、評価

ディレクトリ構成

qlib/
├── qlib/                   # コアライブラリ
│   ├── data/               # データ処理とデータセット管理
│   │   ├── dataset/        # データセットクラスとハンドラー
│   │   ├── filter/         # データフィルタリング
│   │   └── ops.py          # データ操作関数
│   ├── model/              # モデル基底クラスとユーティリティ
│   │   └── base.py         # BaseModel, Model抽象クラス
│   ├── contrib/            # コントリビューションモデルとツール
│   │   ├── model/          # 実装済みモデル(LSTM、GRU等)
│   │   ├── strategy/       # 取引戦略
│   │   └── evaluate.py     # 評価メトリクス
│   ├── backtest/           # バックテストエンジン
│   │   ├── executor.py     # 実行エンジン
│   │   └── signal.py       # シグナル処理
│   ├── workflow/           # ワークフロー管理
│   │   ├── recorder.py     # 実験記録
│   │   └── exp.py          # 実験管理
│   └── rl/                 # 強化学習フレームワーク
├── examples/               # 使用例とベンチマーク
├── scripts/                # データダウンロードスクリプト
├── tests/                  # ユニットテストとインテグレーションテスト
└── docs/                   # ドキュメント

主要コンポーネント

  • Data: データ管理とアクセス

    • 場所: qlib/data/
    • 依存: cache、filter、ops
    • インターフェース: D.features()、D.calendar()、D.instruments()
  • Model: 機械学習モデル基底クラス

    • 場所: qlib/model/base.py
    • 依存: Dataset、Reweighter
    • インターフェース: fit()、predict()、save()、load()
  • Dataset: データセット管理

    • 場所: qlib/data/dataset/
    • 依存: DataHandler、Processor
    • インターフェース: prepare()、setup_data()
  • Executor: バックテスト実行エンジン

    • 場所: qlib/backtest/executor.py
    • 依存: Exchange、Account
    • インターフェース: execute()、get_portfolio_metrics()

技術スタック

コア技術

  • 言語: Python 3.8-3.12(Cython拡張モジュール含む)
  • フレームワーク: 独自の定量投資フレームワーク
  • 主要ライブラリ:
    • pandas (>=0.24): データ操作と時系列処理
    • numpy: 数値計算
    • LightGBM: 勾配ブースティング決定木
    • PyTorch: 深層学習モデル(オプション)
    • mlflow: 実験管理とモデル追跡
    • cvxpy: ポートフォリオ最適化
    • gym: 強化学習環境
    • redis: キャッシュとデータストレージ
    • pymongo: MongoDB連携

開発・運用ツール

  • ビルドツール: setuptools、Cython(高速化モジュール)
  • テスト: pytest、統合テストスイート
  • CI/CD: GitHub Actions(テスト、パッケージ公開)
  • ドキュメント: Sphinx、Read the Docs
  • パッケージ配布: PyPI(pyqlib)

設計パターン・手法

  • ファクトリーパターン: init_instance_by_config()による動的インスタンス生成
  • 戦略パターン: 取引戦略の抽象化と実装
  • テンプレートメソッド: モデルとデータハンドラーの基底クラス
  • レコーダーパターン: 実験追跡とロギング
  • パイプライン: データ処理からバックテストまでの一連の処理

データフロー・処理フロー

  1. データ取得: 金融データのダウンロードと前処理
  2. 特徴エンジニアリング: Alpha158/Alpha360などの特徴量生成
  3. モデル訓練: 訓練データでのモデル学習
  4. 予測生成: 検証/テストデータでの予測
  5. 戦略実行: 予測に基づく取引シグナル生成
  6. バックテスト: 履歴データでのパフォーマンス評価
  7. 分析・最適化: 結果分析とパラメータ調整

API・インターフェース

公開API

データアクセスAPI

  • 目的: 金融データの取得と操作
  • 使用例:
from qlib.data import D
# 特定銘柄の価格データ取得
df = D.features(
    instruments=["AAPL", "MSFT"], 
    fields=["$close", "$volume", "$open/$close"],
    start_time="2020-01-01",
    end_time="2021-01-01"
)

設定・カスタマイズ

設定ファイル(YAML形式)

# ワークフロー設定例
task:
    model:
        class: LGBModel
        kwargs:
            n_estimators: 1000
            learning_rate: 0.1
    dataset:
        class: DatasetH
        kwargs:
            handler:
                class: Alpha158
                kwargs:
                    start_time: 2008-01-01
                    end_time: 2020-08-01

拡張・プラグイン開発

  • カスタムモデル: BaseModelを継承してfit()とpredict()を実装
  • カスタムデータハンドラー: DataHandlerLPを継承
  • カスタム戦略: BaseStrategyを継承
  • カスタム評価指標: 評価関数を追加

パフォーマンス・スケーラビリティ

パフォーマンス特性

  • データ処理速度: Cython最適化により高速化
  • モデル訓練: GPUサポート(PyTorchモデル)
  • バックテスト速度: 効率的なベクトル化処理
  • メモリ効率: チャンク処理とキャッシング

スケーラビリティ

  • 大規模データセット対応(数千銘柄×数十年)
  • 分散処理サポート(Dask統合可能)
  • Redis/MongoDBによるデータキャッシュ
  • マルチプロセッシング対応

制限事項

  • リアルタイム取引は別途実装が必要
  • 主に日次データに最適化(高頻度データは追加設定要)
  • 中国市場データがデフォルト(他市場は追加設定要)

評価・所感

技術的評価

強み

  • 包括的な定量投資プラットフォーム
  • 豊富なSOTAモデルの実装
  • 優れた実験管理とワークフロー
  • 活発な開発とMicrosoftのサポート
  • 研究から本番まで一貫したパイプライン
  • オープンソースで拡張性が高い

改善の余地

  • ドキュメントの一部が中国市場中心
  • リアルタイム取引機能の標準化
  • 初心者向けのより簡潔なチュートリアル

向いている用途

  • 定量投資研究と戦略開発
  • 機械学習を使った株価予測
  • ファクターマイニングとアルファ探索
  • バックテストとポートフォリオ最適化
  • 学術研究と教育

向いていない用途

  • 超高頻度取引(ミリ秒単位)
  • 暗号通貨のリアルタイム取引(別途実装要)
  • 非構造化データ(ニュース、SNS)の直接分析

総評

Qlibは、Microsoftが開発した本格的なAI指向定量投資プラットフォームとして、研究から本番まで一貫したワークフローを提供する優れたフレームワークです。30以上のSOTAモデルの実装、包括的なバックテスト機能、優れた実験管理システムなど、定量投資研究に必要な機能が網羅されています。特に最新のRD-Agentによる自動ファクターマイニング機能は、LLMを活用した革新的なアプローチとして注目されます。オープンソースかつ活発な開発コミュニティを持つことから、今後も定量投資分野でのデファクトスタンダードとなることが期待されます。