2. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
ご挨拶
● AlpacaJapan株式会社
○ Head of Japan R&D
● 会社では主に
○ クライアントとエンジニアリング
の橋渡し
■ クライアントのAIに対する
期待値コントロール
■ 成果をわかりやすく届ける
ための工夫
■ Alpacaのすべての予測プ
ロジェクトのプロマネ
○ AlpacaForecast AI Prediction
Matrixのプロダクトマネー
ジャー
2
皆様ご存知の通り、ここがAIス
タートアップの腕の見せ所です(低
すぎず、高すぎず、これだけで一晩話せそうではあるが )
3. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
本日のお話
最近Alpacaがブルームバーグと共同リリースした AlpacaForecast AI Prediction Matrixの裏側
● ブルームバーグ端末 (金融情報を閲覧するための端末 )で動作するアプリで、ブルームバーグ端末は世界
で40万人以上のユーザー
● Alpacaが研究開発した最新の予測モデルの結果をリアルタイムに届けるためアプリ
○ 効率的に予測モデルを動作すること、管理することがそのままシステムの要件となる
○ 金融機関とも接続、もしくは金融機関のプライベートクラウド上でも動作する必要がある
3
4. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
市場予測でDeepLearningを使う上でのチャレンジ
・サンプルが足りない(マーケットの普遍性は長期間存続しない)
・単純な予測精度と利益が一致しない (学習可能なものと目的関数の乖離 )
・錯誤相関・評価方法(汎用性のあるパターンかどうかが重要)
・膨大な探索空間(予測時間軸、ウィンドウサイズ、 etc...)
・時系列方向のチート (先読み)防止保証
4
データサイエンス
エンジニアリング
・リアルタイム性の要求
→ マーケットフィードを高速に処理するデータベースを独自開発
・大量のモデルを分散実行する基盤
→ 開発したモデルを即デプロイできる AlpacaForecastingPlatformを独自開発
今日はこちらの話をします!
5. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
Alpacaの予測モデルの触りだけ
マーケットのX分後の値動きを予測
するモデルだが、マーケットはほぼラ
ンダムウォークをするので、実際に
やってみるととても難しい。
● AI・ディープラーニングに向い
ているのは大量に発生した
データからパターンを探す作
業
● マーケットにおいて最も大量に
発生しているデータはなにか、
それがTick
● 大量のTickデータから発生パ
ターンを解析し、どのようなパ
ターンが発生したときにプライ
スが上がるか・下がるかを
ディープラーニングで学習
ただ、予測モデルの中身は公表して
いないので、、、、
5
画像認識向けのCNNを
時系列解析のネットワークとして拡張
ディープニューラルネットワークがマーケットの
特徴的なTickの発生パターンを解析、予測を出
している。
画像認識
Tick発生パターン
6. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
Tickデータってなに
Tickデータは最短数msecで発生する金融商品の
プライスデータ
Alpacaの予測モデルはTickデータのパターン解析
を行うので結果的に数msecの分解能を持つデー
タを扱えるように設計。具体的な要件を並べてみる
と、
● 数msecのTickデータを格納、リアルタイムに
クエリできるデータベース
● 数100msec以内に予測結果をリアルタイムに
配信できる予測システム
● 金融機関での利用を想定した予測システムの
冗長化
● 将来の検証のため、出力したデータはすべて
ログとして格納されること
● コンテナによる予測モデルの管理とバックテス
ト環境とライブテスト環境における動作の同一
性の保証
6
こういう時刻・プライスの情報
が最短5msec間隔で発生す
る。といってもサイズは時系列
なので1アセット、1年で4GB程
度。
7. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
Kubernetesによる予測システムの構成
7
pred pred pred pred pred pred
adapter adapter
Bloomberg
predictor
RDS
dispatcher dispatcher
api api
Bloomberg App
pod
StatefulSet
SQS
Deployment
DB Access
...
marketstore marketstore
service
dispatch queue
USDJPY EURUSD Nikkei
batch batch
8. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
予測モデルをリアルタイムに実行する工夫
8
MarketStoreはAlpacaが独自開発し
たDataFrame配信サーバ
データがすべてnumpyバイナリで直
接MarketStoreから配信されるので
JSON => dfの最も時間がかかる処理
を省略出来る
推論処理そのものよりもその前の TickデータをChainerで処理可能とするまでのプロセスがリアルタイム
処理を行う上では支配的な影響を持つ
9. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
MarketStoreとは
Go言語を用いてAlpacaによりフルスクラッチ実装された金融時系列向け OSSデータベース
https://github.com/alpacahq/marketstore
うかつにMongoDBとかを使うとJSON => DataFrameで死亡する。そのコンバート処理を回避するため
MessagePackによるバイナリクエリを利用し、 MarketStore側でnumpyバイナリをDB内のバイナリ構造からそ
のまま生成、python側はMessagePack RPC経由で取得したnumpyバイナリをDataFrameとしてロードする
9
10. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
予測モデルの処理時間
1010
Feed Adapters
Predictor
Dispatcher
RDS
(1) SQSにB-PIPEからストリーミングさ
れるレート情報を書き込む
(2) MarketStoreへの書き込み処理
(4) 予測処理内のMarketStoreへのク
エリ
(3) MarketStore内でクエリ可能となる
(書き込み処理後即座に反映 )
(5) 予測処理(前処理・予測処理)
(6) 予測結果のSQSへの書き込み
(7) 予測結果のSQSからの取得処理
(8) DBに保存
ストリーミングの
リアルタイム処理
SQSのレイテンシなどで
50msec
クエリ・前処理含めて、
350msecで完了
およそ100ミリ秒
Bloomberg B-PIPE全体のパイプラインとしては 500msec程度で予測処理が完了
HFTではないので数msecで終わらせたいわけではない
API
11. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
モデルの予測システム内でのロード方法
● confdを用いてDockerコンテナ内でロー
ドされる
○ https://github.com/kelseyhigh
tower/confd
● オンプレや金融機関のクラウド環境では
外部ネットワークには原則アクセスできな
い。なので設定を柔軟に渡したい。
○ コンテナ内の設定ファイル
○ ECSやk8sの環境変数
○ AWS Parameter Store
● ロードされる予測モデルをどこから設定
するかの柔軟性を確保
● 作成されたモデルはすべて S3で
ModelPackageとして管理
● 外部ネットワークに出れないときは S3へ
のアクセスがコンテナ内部の NGINXのリ
バースプロキシによりコンテナ内部のファ
イルを指すようになっており、 S3のURL
のまま環境の差異が吸収される
11
どの予測モデルをロードする
かはconfdを経由して渡され、
S3 or コンテナ内部からロード
される
confdは設定情報を様々な
データソースから生成する薄
いラッパーライブラリ
12. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
予測モデルが分散して動ける仕組み
すべての予測モデルは ModelPackageというパッケージ
形式で管理
● データの前処理
● 入力データの形式
● 出力フォーマットの形式
● ラベルの定義
などなど、予測モデルを動作させるすべての情報が
yamlファイルで記載されModelPackage内部で保持
ロードされたModelPackageは自分に保存された情報か
ら、自分がどのように動作すればいいか一意に決定す
る
重要: バックテスト・ライブテストで同一の仕組みで動作
させ、過去データとライブデータの動作の同一性を保証
するためにも利用。
12
例: 特徴量をどのように生成するかを
YAMLファイルで管理している
13. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
リアルタイム処理をしながらデータの漏れを防ぐ仕組み
13
リアルタイムデータは Amazn SQSを一
旦通して取得することで漏れをふせぐ
(MarketStoreが死んでいてもOK)
予測結果もAmazon SQSを通してか
らRDSに書き込むことで漏れをふせぐ
(Dispatcherが死んでいてもOK)
システムのどのモジュールが死んでも重要データはすべて SQSに滞留するためデータのロストが極力でない仕
組み
14. STRICTLY CONFIDENTIAL AND FOR INTERNAL USE ONLY
まとめ
● 大量の予測モデルを動作し、かつ、大手金融機関との接続を想定した予測システムを設計したらこうなり
ました
○ たくさんの失敗から産まれたノウハウの集合体
○ これからもたくさんの予測モデルを設計し、公開していく予定
● 弊社のデータエンジニアリングやモデルの話はまた機会があれば
○ サンプルが足りない(普遍性が長期間存続しない)
■ データオーギュメンテーションは完全に研究レベル
○ 錯誤相関・評価方法(汎用性のあるパターンかどうかが重要)
■ 汎用性ってそもそも何?
○ 膨大な探索空間(予測時間軸、ウィンドウサイズ、 etc...)
■ ていうか1分後予測と10分後予測で別物の問題だった、、、
○ 時系列方向のチート (先読み)防止保証
■ マーケット予測あるある : Batch Normalizationで先読みして精度出てライブで死亡
14
データエンジニアリング・予測モデルの構築に
興味がある方、WE ARE HIRING!