Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Chainerを使って本気でマーケットの予測システムを作ったらこうなった

13,838 views

Published on

Chainer Meetup #07 ~Chainer 3歳記念イベント~ 発表資料

Published in: Technology
  • Be the first to comment

Chainerを使って本気でマーケットの予測システムを作ったらこうなった

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

×