NUSの修士クラス:31時までの徹夜の果てに...IS5006 Intelligent System Deploymentのレビュー

はあ。怒涛の2021年上半期セメスターもこれにて終了である。出産立会い、ベビー氏との格闘と同時並行で純ドメ文系日本人が海外大学院で理転を図る、土日なし、延々と毎日10−12時間勉強、グループワークの最終課題提出の前には夜更かしや徹夜、と言うのは中年のおっさんのやる事としては中々のハードワークであり、はっきり言って会社員していた時よりも全然きついと断言出来るハードな日々であった。そうした半年弱の怒涛のセメスターも終了し、漸くひと区切りがついた。そうした事もあるので、今回は今セメスターで受講した本格的修士コースの一つ、IS5006 Intelligent System Deploymentの内容レビュー、解説を試みたい。

IS5006 Intelligent System Deploymentの概要

この授業はNUSのコンピュータサイエンス学科のうちのIS=インフォメーションシステム区分の講座であり、一言で言えば「機械学習とマルチエージェントシステムのビジネス実務への実装/適用」と言った内容である。機械学習の理論/数学的な解説(例えばシグモイド関数、勾配降下法やその応用、CNN/RNN他各種手法の解説等)は完全に他の授業に譲る、他の授業で学んで来ていると言う前提のもとで、それを如何に雑多なビジネスワールドの現実に適用して行くのか、と言った点に徹頭徹尾フォーカスを置いた内容である。教授はITコンサル→事業会社のSCM/IT構築改善等で実績を上げた理系卒+MBAの出自である。また、フィンテック/金融関連分野にも詳しく、最近にNUSでローンチされたFin-Tech Labのディレクターでもある。そうした教授のバックグラウンドを反映した授業内容であった。

自身としては、他の授業では理論までは行かないが比較的理論寄りの内容を学習した、例えばDeep Learningの授業ではCNN/RNN/LSTM他各種アルゴリズムの数学的背景やnumpyからのスクラッチ実装、Kaggleの学内コンペでImageNetによる転移学習を用いて医療画像診断を云々する、と言った内容は学んだ、しかしいまいち金融分野にどう活用すれば良いかがまだピンと来ていない、大学のクラスルームやKaggle上のMNISTやImageNetのデータで云々ではなく、現実の金融データでどうプログラミングや機械学習を活用するか、と言う所を学びたかった所であった。加えて、再度仕事を探す際には「企業側に分かり易いスキル、Day1から実装して現場の改善に使えそうなアピールポイント」が必要である事も感じていた。そうした背景のもとで受講した講座である。

IS5006 Intelligent System Deploymentの詳細

例により序盤の1−2回の授業はイントロである。どの授業も大体は1−2回目の授業はキャッチーでファンシーな導入イントロであり簡単な内容であり、その後急角度に難易度が上がる、と言う形式を取る。なので最初の1−2回の難易度が全体の難易度であると考えてしまうと痛い目に遭うので留意である(この授業も実際にその通りの展開であった)。

最初の3回位の授業は、上記のIntelligent Systems for Engineers and Scientistsの内容に沿って、マルチエージェントシステムの概要、「AI」への試みの歴史、古典的AI(と言ってもルールベースでまあ厳密には人工知能というほどのものではないものの)の走りとしてのファジィロジックの概要等を学んだ。

ファジーロジックについては、炊飯ジャーなどの家電等でいかにしていい感じにご飯が炊けるようにファジィに調節しているのかと言った辺りが学べてなるほどーとなった他、Pythonで簡単に実装するライブラリや実際の実装も学習した。「いい感じ」「まあまあ」「いまいち」、仮想通貨の売買システムなどの話で行けば「凄く買い」「打診買い」「買わない(又は売り)」と言ったニュアンスをプログラミングで如何に表現するかと言った所を学ぶ事が出来、単純ではあるが使いでのある手法だなと感じた次第である。また、アンサンブリングのスタッキングの際の各モデルからの結果の取りまとめ用のメタモデルについて、回帰やソフトマックス等で実装する事も多いのではないかと思うが、代わりにファジーロジックで実装すると言った用途にも使える。これが後段の最終的な仮想通貨売買システムを組む際の前振りに今思うとなっていたのであるが、「ヘェ〜」と言うちょっとした発見のある内容であった。

その他の所では、序盤でベイジアンネットワークの基本、Deduction/Abduction/Inductionの違い、Forward/Backward chaining、Depth/Breadth-firstサーチなどのアルゴリズムの基本的な内容を学んだ。この辺りは実装メインとは言え修士過程としての相応の知識ベースを提供しようと言う意図を感じた。

中盤戦に入ると、より現実的な内容になった。例えば以下のような事を順次学んでいった。

*簡単なナイーブベイズ分類器の実装。

*Google Text Analyticsを用いてツイッターのテキストを吸い込んだセンチメント分析。

*最終課題の「仮想通貨の売買システム構築」に向けた仮想通貨関連のドメイン知識の提供、QuantConnectを用いたバックテストや売買の実演。

*マルチエージェントシステムについての一段踏み込んだ内容、マルチエージェントシステムを用いた取引システムについての論文の読み込み。

*最終課題のグループワークに向けたGit/Githubの使い方実演。

*ZapierやGoogle sheet APIを用いたRPA、各種タスク自動化。

*matplotlib, seabornから一歩踏み込んだデータビジュアライゼーションツールとしてPower BIの活用。

*Pythonを使ったマルチスレッド。

*実際の金融業界のクオンツによるプレゼン、ワークショップ。

...と言った具合である。そして最終課題の「最大6人のグループで、マルチエージェントシステムを構築する」と言う最終ゴールに収束して行く訳である。

課題、宿題等

最初の課題は個人課題で、ファジーロジックをPythonで実装する、と言う類のものであった。これはウォームアップ程度の課題であり、Pythonでコードを書く事に慣れていれば何ということはない課題であった。

次にグループ課題のキックオフとして、ツイッターのセンチメント分析を行うというものであった。これもガチエンジニア5人のチームで取り組めば比較的容易に終了であった。

グループ課題の2つ目は簡単な移動平均の売買ロジックや結果評価が出来る簡易なバックテストツールを皆で作ると言った内容である。これも自身がドメイン知識があるという事もあったがグループで取り組めば比較的無難に終了できた課題であった。

個人課題の2つ目はZapierとPower BIを用いた自動化の実装である。具体的には、仮想通貨の価格を取ってきて、先のグループワークで作った簡易な売買ロジックに基づいてemailの自動送信で「今の価格はxxです」「買いです」「売りです」と言った指示を質問を送ってきたメール送信者に返信する、と言った機能を実装する事になった。これが簡単に見えて案外厄介で、ZapierやPowerBIの使い方に余り習熟していなかった自身にとっては非常に時間のかかる課題となった。また、メールの文面をhtmlでいい感じにするであるとか、所謂フロントエンド/UI部分のスキル能力が自身にはそうなく、大昔に少しかじったhtmlを思い出しながら簡素な見栄えの物を作るにとどまってしまった。ここは他の生徒は非常に美しい商用プロダクト的な見栄えのものを作っており、「いいなあ」と自身的に感じた点であった。自身も試作品/プロトタイプを作る程度に多少はフロントエンドの嗜みも身につけておいても良いかも知れないと感じた局面であった。

そして深夜作業の連続、最後は31時まで徹夜の最終課題...

そして最終課題では、「仮想通貨の価格取り込み、売買判定、ポジションサイズ決定、売買発注、リスク管理などのトータルな売買システムをマルチエージェントシステムとして完成させる」というプロジェクトに取り組む事になった。ここで授業内容の難易度ハードルが一気に上昇する形となった。

自身のチームには幸いにもシステム構築を生業としているデキるエンジニアがおり、彼が全体のプロジェクトマネジメントと最初のマルチエージェントシステムの骨格をだーっと作ってくれたのは幸運であった。1万倍の速度で実際の市場売買シミュレーションを走らせてバックテストをする機能など、自身独力では作った事のないシステム骨格を作ってくれて良いスタートが切れた。

しかしながら、問題はそこからであった。最後の1週間位になりシステムの抜け漏れやエラーが次々と発覚、最後の1週間位は夜更かしを繰り返して不足していた機能を制作し、エラー潰しを行う日々であった。

チームメンバーが自身以外は金融バックグラウンドがなく、例えば売買シグナル(例:移動平均ゴールデンクロス等で買いとか売りとか)を送出するエージェントとは別に、一旦ポジションを取った後のリスク管理、利食い損切りを判断実行するエージェントが必要である事等にこの部分の制作を担当していたメンバーが気づいていなかったと言ったことがあった。かなり直前になりこの点に気付き、自身がトレーリングストップ、売買シグナルの強弱を踏まえてポジション量を調節する等の機能を加えて行く事になった。

しかし自身も問題がなかったかと言えばあった。「これだけガチなエンジニアだし地頭もいい感じだから自分があれこれ言うのも薮蛇になるだけだろう」と妙に遠慮してしまい、自分の担当外の部分を他のメンバーに任せきりにしていたと言った面があった。誰が悪いと言う事でもなく、全体的に皆が「ちょっと見通しが甘かった」「役割分担を決めて後は各々勝手にやる形でコミュニケーションが全体的に直前まで少なかった」と言った所が改善点であったと反省している。

そうした諸々を経て、最後の最後、提出日期限が昼の12時であった締切日当日の朝7時まで自身が徹夜して力尽き、最後の仕上げを夜中4時に寝て朝9時に起きたチームメンバーが行い提出、ようやく「きちんと動作する売買システム」が完成して、教授の元に納入出来た。結果として、テクニカル指標からの売買シグナル、ツイッターやニュースからのセンチメントによる売買シグナルをファジーロジック等も使い統合して「最終判断」シグナルを出して売買、売買後の結果を記録して各売買シグナルの実績に基づいて結果の出ているシステムの発言力を強めて結果の出ていないシステムの発言力を弱めたりして仮想通貨を売買する、と言った(実際には実運用に耐えるものではなくあくまで学習用題材の範囲は超えないものではあるが)「それっぽい」プロダクトを完成して提出した。最後にシステムがようやっとエラーなしに走り提出できた後には安堵の余りチームメンバー皆で大喜びした。

何だか人生で久しぶりの徹夜、久しぶりのチームで味わった達成感であった。大変にしんどかったが修士課程のハイライト的な思い出になった最終課題であった。

全体的な感想

以上で分かる通り、IS5006のこの授業は、レクチャーによる理論の解説と言うよりは、実際の仮想通貨データを題材にしたマルチエージェントシステム、機械学習の実践、実装、現実への適用と言う所に的を絞った授業であった。結果として、ファジーロジック、ツイッターやニュースのテキストデータによるセンチメント分析の仮想通貨売買への適用、各種自動化、マルチエージェントシステムによる売買システムの構築、と言った「分かりやすい実績」「Day1から貢献出来る事柄」を作る事が出来た。「大学のクラスルームやKaggle上のMNISTやImageNetでのプログラミングや機械学習→現実の金融データでのプログラミングや機械学習の活用へのシフトに目処を立てる」と言う当初の目標を大いに達成出来る結果となったと感じている。

また、データ分析の一環ではなく、githubを用いるなどして比較的規模の大きい「ソフトウェア」「システム」を構築する事に本格的にメンバーの一員として携われた経験も大変に良かったと感じている。まだ今回のグループワークの中核となった生徒のようにプロジェクトを率いて行く、中核となるシステムの骨格を主導して作って行くと言う所までは至らないなとは感じたものの、メンバーの一員としては所謂「ガチエンジニア」達の中できちんと貢献が出来る、加えてドメイン知識が効く所では主導的な役割を果たし得る、と言った手応えが得られた事も大きかった。

加えて、教授のレクチャーもMBAの講座も持たれていたらしく、TedX的、システムコンサル感のある華のあるよく練られた内容であった。プレゼン、動画、クイズ、生徒を少人数に分割したディスカッションセッション等多彩な形で工夫されこなれたものであった。加えて、生徒への細やかな気遣いやアドバイス、分からない生徒が多いトピックについて追加でチュートリアルやコンサルティングセッションを行う等も充実しており、プロの教育者とはこのレベルなのか、すごいなと思わせるに十二分であった。

最終的な成績はB+の着地であった。最終課題は本当に大変であったが、修羅場を乗り越える事でひと回り成長できたかも知れない、と感じさせてくれる講座であった。

以上、IS5006 Intelligent System Deploymentの感想であった。Fin-Techに興味がある人、機械学習なりプログラミングなりを実際の雑多なビジネスワールドに如何に適用実装してプロダクトにするか、と言う実践面を学びたい層にはお勧め出来る授業であると感じている。何かしらの参考になればこれ幸いであります。



この記事が気に入ったらサポートをしてみませんか?