NUSの授業:拗らせて 長々金融にいたけれど さらば全てのエヴァンゲリオン...IT5006 Fundamentals of Data Analyticsの体験レポート。

さて、NUSのコンピュータサイエンス修士過程、漸く怒涛の2021上半期セメスターが終了した。ここで自身のおさらいも兼ねて、簡単に授業内容を紹介したい。今回はIT5006 Fundamentals of Data Analyticsを紹介したい。

IT 5006の「IT」とは

まずはIT5006の頭に付いている「IT」の解説からしておきたい。

以前に解説した通りで、IS=インフォメーションシステム、実務家向けの企業における実際のITの実装適用を主眼に置いた授業、CS=コンピュータサイエンス、博士志望者や企業でも研究寄りの職種を志望する生徒向けのやや理論面/数学面等を重視した授業、である。

それに対して「IT」とは、今セメスターから創設された「General Track」、自身の所属する非コンピュータサイエンス出自者のCS転向志望者向けの修士クラス独自の「基礎科目」である。以前のGraduate Certificateの所で紹介したIT5001-5003がCS学部生的なプログラミングの基本、パタヘネ本の内容、データ構造とアルゴリズムであった。学部1−2年生位の内容であろうと思われる。

これに対してIT5004-5006は学部生としてはやや発展的な内容、又は修士過程の入口位の内容を速修すると言う授業である。具体的にはIT5004はUMLを中心としたシステム開発(これも今回のセメスターで受講したので別途記載する)、IT5005が学部生3−4年生向け位の機械学習の基本(これは次のセメスターで学習予定)、そして今回紹介するIT5006はデータアナリティクスである。「データアナリティクス」って何?と言う方は、今回の投稿の内容を一覧する事でデータアナリティクスの概要を概観出来るかと思う。

IT5006: Fundamentals of Data Analyticsの授業詳細

さて、以上踏まえた上でIT5006の内容紹介である。データアナリティクスと言うのは、一言で言えば「データ収集、前処理、データビジュアライゼーション(要するにチャートやグラフで分かりやすく表示すると言う事)、回帰モデルなり機械学習なりのモデリング、結果の評価、最終的なビジネス改善提案」までの一連の工程がきちっと出来るように学びましょうと言う趣旨の学習分野である。今回のIT5006では、週1回3時間の授業で、2時間は教授によるパワポスライドメインの授業、1時間はTAによる授業内容の実際のPythonでの実装/実演と言う内容にて上記の一連の工程を学習して行った。

最初の3回位は導入編である。最初のPythonの実装はHello world!やデータ形式(リスト、タプル、ディクショナリ等)、pandasの基本的な使い方、For/Whileループ等の極々初歩の解説、Pythonデータ分析本の序盤戦でよくある類の内容からスタートした。授業内容も平均、標準偏差、推定検定等の基本的な解説から始まった。その後にデータの前処理の各種技法やポイント、データビジュアライゼーション(実装ではmatplotlibとseabornを利用)等である。ここは自身には正直余裕であり、何と言う事はなかった。とは言え、matplotlibやseabornのデータビジュアライゼーション、各種グラフやチャートの作成の類は経験者なら分かると思うが結構面倒臭い、思ったような図を作るのが難しい、自分の知らないようなチャートや見せ方などが案外あり、そうした内容を体系的にまとまった形で教えて頂いたのは大変に助かった。

しかし4回目以降から授業内容が鋭角に難易度が上昇し始める。4回目辺りからデータのtrain/test splitや混同行列の各種指標、ROC等の機械学習結果の評価の仕方やPCAが登場。PCAでは固有値分解、特異値分解等の解説がさらさらっと為され始める。その後は回帰分析の式を線形代数的な導出の仕方とベイズからの導出の仕方の二通りで導出して結局両方同じ式になる事、式が成立する前提としてマルチコがない(xの間で相関がない)、homo-scadasticisty(分散が均一である事)等が確かにある事などがさらさらと解説され、それらが成立しているかを確認するための残差プロット、QQ plot等の話題が抑えられた。加えて、RidgeやLasso等のオーバーフィットを避けるためのペナルティ付きの回帰、交絡因子によるバイアス等の話題が一通り為された。回帰分析も案外奥が深いものだなと感じるなどした。チュートリアルではPCA、回帰分析等の実装を絡めながらsklearnを用いたパイプライン構築等を学んだ。

授業の7回目位で決定木を中心とした分類タスクの解説、情報エントロピー、ジニ係数他の解説が為された。後はナイーブベイズ、パーセプトロン、シグモイド関数とロジスティック回帰、勾配降下法の解説など。この辺は自身の場合は以前のIS5152のおさらいであったため比較的楽であった。とは言え、ナイーブベイズのきちんとした解説は初出であったし、シグモイド関数が何で確率を示すの?と言う辺りがオッズレシオとの関連できちんと解説され、腹落ち感があった。

授業の8回目は教師なし学習をクラスタリング、k-means、Kernel Density Estimation(KDE)辺りを中心に解説が為された。最後の方ではMultivariate GaussianによるクラスタリングからのGaussian Mixture Model(GMM)等にもさらっと触れた。その他、マーケティングのマーケットバスケット分析(いわゆる「おむつとビールを一緒に買う客が多い=お父さんの買い物パシリ客需要的な分析)の基本、サポートとコンフィデンス、アプリオリアルゴリズム等の解説が為された。

授業の9回目では機械学習のアンサンブル学習のバギング、ブースティング、スタッキング の議論とその過程でランダムフォレスト等の解説が為された。Kaggleで最初に使われることの多いXGBoostやLightGBMがブースティングを利用したアルゴリズムである事などを恥ずかしながら自身は今回の授業で知る事となった。バギングやブースティングでシンプルながらアンサンブル学習をしているから、ランダムフォレストやXGBoost、LightGBM等はシンプルながらまあまあ良い結果を出せるのですねなるほどねと。その他、時系列分析の基本、例えば定常性の議論や定常性の確保方法やADFテスト等からのARIMAモデル構築位までを一通り学習した。最後の10回目の授業では線形計画法とPyomoによる実装を一通り学ぶなどした。11回目以降の最後の2−3回の授業は生徒による課題発表や企業で働くNUS卒業生のデータサイエンティスト専門家によるプレゼンなどであった。

全体としては、「データアナリティクスの一通りを、Hello Worldから上記の全てを4ヶ月で速修するコース」であった。コーディングのチュートリアルとしては、主にscikit-learn, numpy, pandasの他、scipy, stats, Pyomo等のライブラリ群が上記の内容の実装の過程で必要に応じて紹介され、基本動作を一通り抑える内容であった。

課題内容

課題内容は、以下である。

*授業2回に1回行われる、10問弱位の選択肢式ミニテスト。

*2回の個人提出課題。

*セメスター全体をかけて完成させる最大3名までのグループワーク。

*最終試験(大学のキャンパスに行き紙とペンで受ける個人テスト。オープンブックで授業ノート、テキスト等紙ベースであれば持ち込み可能、2時間の試験、45点満点で選択式25点/筆記20点)。

ミニテストについては授業の理解度確認程度であり、自身的には特に問題は無かった。

2回の個人提出課題については、授業では紹介し切れていなかった話題を抑える形になっていた。例えば1回目の課題では授業では紹介し切れていなかったANOVAやカイ自乗テスト、コルモゴロフスミノフ検定等が取り扱われた他、データビジュアライゼーションでは地図データを用いたビジュアル化の課題があり、良い学習機会となった。2回目の課題ではK-NNを用いた簡単なレコメンデーションシステムをアイテムベースとユーザーベースの両方で作る機会があり、これは非常に良い課題であった。

グループワークについては、サイエンティストトラック(自由課題でデータ取得からモデリングまでを行いレポートにまとめる)とエンジニアトラック(Kaggleのデータから複数の候補が与えられ、その中から一つを選んでモデル選択やハイパラチューニング等を行いモデルの精度比較/改善過程をレポートにまとめる)の二通りから一つを選んで3人までのプロジェクトチームを組んで行う、途中でマイルストーンレポートの提出、後半8割がた完成位の所で教授や生徒に対するZoomでのプレゼン、最後に最終レポートとデータ、コードの提出である。

自身についてはサイエンティストトラックで、仮想通貨(btc,eth,xrp,ltc)のデータを他のアセットクラスのデータと比較してみる、仮想通貨間で一方からもう一方の価格予測が出来るかを試みる、時系列分析(ARIMA, ARCH/GARCH)で価格やボルの推定を試みる、イベントスタディと検定で移動平均やRSIと言った一般的なテクニカル指標の有効性を調査する、と言ったプロジェクトを行う事にした。

プロジェクトメンバー3名のうち仮想通貨調査の企画を自身に持ち込んで来た生徒はその後修士過程の厳しさに付いて行けずドロップアウト、もう1名も(General Track、非CSからの入学を受け入れている修士課程の最初のセメスターなので仕方ない面もあるのだが)コーディングやデータアナリティクスの一連の基本動作に深く習熟しているとは言えず、非常に厳しいプロジェクトとなった。とは言え何とか最後まで仕上げる事が出来、有り難い事にプロジェクトについては満点の評価を頂いてホッと一息ついた次第である。

最終テストについては、「よくまあ上述の統計学やデータ分析の基本、的な内容でここまで難易度高い、生徒が引っかけに軒並み引っかかる問題を作れるな」と思うレベルで難しく、教授のデータアナリティクス分野の見識の深さ、マニアック度の高さを感じさせられた。

成績については幸いにもA+の着地となった。A+を取る事が出来たのは自身の修士コース通算で初めてであり、苦労した甲斐があった。

参考書

授業とチュートリアルで全て完結する形式であったので、特に参考図書などは利用しなかった。とは言え、日本語書籍で言えば以下の書籍辺りが授業内容に近い印象を持った。以下の書籍について、部分的にやや修士過程に相応しくなるように数学面/理屈面の解説も入れた授業とチュートリアル、と言った内容で理解頂ければ概ね全体の雰囲気を表していると思う。

全体的な感想

以上、全体に「極めて広範な内容を、ハイスピードでどんどん進んでいく」「Hello worldから中盤、後半戦への難易度上昇カーブが急で、付いて行くのに難儀する生徒が少なからず頻出した」感じの授業であった。

しかしながら、データアナリティクスの必要な一揃えの基本的な内容を、非CS出自の幅広い生徒が受講者層の中で「どこまでは修士なのだし妥協せず数学面の解説をして」「どこからは妥協するか」の難しいポイントを教授が試行錯誤しつつも見出し、授業では単にPythonの使い方と言う事ではなく統計やデータ分析の理論/理屈を教えて、その一方でチュートリアルで授業内容のPythonでの実戦で使える実装を教えると言う自身には理想的なスタイルで、グループワークでチームワークやプレゼンスキルと言った企業で活躍する上で不可欠な訓練も積ませる、と言う素晴らしい授業内容であったと自身的には感じている。

自身的には正にこうした基礎、Body of knowledgeを修士課程でしっかりやりたかった、自己流/独学レベルから脱出したかった、と言うのが修士課程に3度も受験して入学した重要な理由の一つであったので、大変に満足している。

蛇足にはなるが、特にイヴェントスタディツールの自作、時系列分析のGARCHの実装によるボルの推定等の辺りは、自身が若い頃より「ジョンハル本」「John Campbell&Andrew Lo本」等(以下参照)を消化し切れずに金融業界で長々と拗らせて来た積み残しを遂に解消した、言わば25年間物語を完結させられずにいたエヴァンゲリオンが2021年に遂に完結した的な成仏供養感、やれやれやっと終わったお疲れ様でした感があり、個人的なカタルシスであった。仮想通貨の価格挙動の調査と言うのもいつか一通りやっておきたかった題材ではあったので、その意味でも良かったと感じている。

最後に一句。

拗らせて 長々金融にいたけれど さらば全てのエヴァンゲリオン

...お粗末様でした。以上、IT5006 Fundamentals of Data Analyticsの授業内容でした。幾らかの参考になればこれ幸いであります。

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