年利30%
大学生の頃に、寝食を忘れて機械学習による株の自動売買システムを作ったことがありました。
上記の画像は、実際にそのシステムを稼働させて実際にあげた利益になっています(記録にないだけでもう少し続けていたはず)
今回の記事は、そんな手塩をかけて育てたシステムが技術的負債で死んだ話です。
抱えていた技術的負債の一覧
プログラミング経験ほぼなしの中自己流で作っていたため、今思うとかなり厳しい問題をたくさん抱えていました。
- R言語で全部作ってる
- 変数名が全部日本語😓
- R AnalyticFlowというマイナーなツールで開発
- 運用に手動オペレーションが多数存在
- コードベースが数万行(検証コード含む)
- 株価データを取得するスクレイピングがライブラリ依存
- ファイルパスなどが絶対パスで指定されていて自分のPCでしか動かない
- 実行完了まで2~3時間かかる(毎日)
- 実行が日を跨ぐとエラーが起きる
R AnalyticFlowを使っていた
R AnalyticFlowはRスクリプトを矢印で繋いだり外したりして処理フローを制御できるとんでもなく素晴らしいツールです。
これは試行錯誤には非常に使いやすく、株価予測をするシステムを作るときにたくさん検証コードを書き、繋いだり外したりして効果を測定するなどの使い方をしていました。
ただ、データサイエンスをすることにはとても効果的であったものの、システムの実行を自動化ができない、API経由で呼び出せないなど、運用をすることは難しい状態でした。
また繋ぎかえが簡単にできてしまうが故に、運用の中に手動オペレーションが多数存在していました。
- データチェックに失敗したら処理を繋ぎかえて中身を確認
- 売買がうまくいっていない時はパラメータ調整して繋ぎかえ
- 注文失敗したら注文取り消し処理につなぎ変えて実行
などなど。
R AnalyticFlowで矢印を繋ぎ合わせて様々な処理、分析を手動で行なっていました。
状況の変化
R言語の衰退
僕がこのシステムを作っていた頃は、時期的にはDeepLearningが流行りだしてRよりもJupyter Notebook(Python)が急成長していた時期でした。
それによりR言語コミュニティの縮小が始まったと思っています。
依存していたライブラリの死
Yahoo Financeから株価情報を取得するのに「RYahooFinanceJ(正式名称は失念)」というライブラリにに依存していました。
しかしYahoo FinanceのUI更新によりライブラリが動かなくなることがたまに発生するようになりました。
最初の頃は数日でアップデートがされていたのですが、徐々にメンテがされなくなり、最終的に機能停止しました。
当時は自分はスクレイピングの知識がなく(CSSの知識すらなかった!)、このライブラリに完全に依存していたため、動かなくなった日の夜は叫びました。
生活の変化
個人的に家庭教師のバイトを始めて生活が忙しくなりました。
手動のオペレーションがあって毎日2~3時間かかるプログラムを実行していられなくなってきました。
状況の変化に耐えられずシステムが死亡
R言語の衰退
依存ライブラリのメンテナンスがされなくなり、代替案を調べてもPythonを勧められました。
今からPythonでリプレイスするのか? そんなのは無理でした。
依存ライブラリの死
上記に被りますが、システムの根幹にあったスクレイピングを完全に外部に依存していたため、そこが死ぬとシステムが死にました。
生活の変化
毎日数時間のオペレーションをする時間がなくなりました。
今から完全自動化させるための改修をすることは無理でした。
最終的に
MacのOSアップデートとともにR AnalyticFlowも開けなくなり、完全に闇へと葬られました
しくじりから学んだこと
技術的負債やシステムの欠陥は安定稼働しているうちは大きな問題を引き起こしませんが、状況が変化することでシステムの死を招きます。
今回の件から以下のことが言えるのではないかと思います。
① 落ち目のコミュニティに乗るのは危険
② システム根幹に関わるライブラリが死んだ時のリスクは考えておく
③ オペレーションのことまで考えてシステムを作る
以上です。 ありがとうございました!