この記事は、 NTT Communications Advent Calendar 2022 24日目の記事です。
はじめに
イノベーションセンターの木村と申します。初めてのアドベントカレンダー&Engineers’blog投稿です。普段の業務は、機械学習をもちいた時系列データ分析の研究開発やお客様データ分析案件支援を主として行っています。プライベートでは自転車にお熱でZwiftでバーチャルライドをしたり、最近ではテクニック向上のためバニーホップの練習に励んでいます(なかなか上達しません…)。
今日はクリスマスイブということで、時系列データ分析コンテンツ「ごちきか」 をプレゼント(?)します!年末休みのお供にぜひご照覧ください。
サマリー
- 時系列データ分析コンテンツ「ごちきか」を公開しました
- (余談として)基盤やデプロイ方法を紹介します
What is 「ごちきか」?
私たちのチームでは、社会・産業DXのためのSmart World の一貫として、時系列データ分析手法の研究開発、お客様のデータ分析支援や社内データ分析人材育成を行っています。
【最近の研究開発成果】
また、これらの研究開発成果は、同じくイノベーションセンターで開発しているノーコードAI開発ツールNode-AIに搭載されていきますので、こちらもぜひご覧ください。詳しくは、以下の公式サイトとEngineers’Blogをご参照ください。
このごちきか(gochikika)プロジェクト は、これら研究開発成果や社内向けデータ分析人材育成コンテンツをまとめたナレッジベースです。主に製造業の時系列データを対象として、前処理からモデリングまで基本的な分析手法をPythonのソースコード付きで解説しています。
Why ごちきか
世の中にはありがたいことにたくさんのデータ分析に関するドキュメントがあります(いつも参考にさせていただいています)。しかし、私たちの興味のある時系列データ分析(特にプラント向けのようなドメイン知識に紐づくもの)については多くはなく、例えば新入社員の教育の際に困ることがありました。
さらに、学会発表資料やコードが個人管理のPCやGitHubに分散しており、チームの研究開発成果や検証結果が属人化していまっていました。社内向けライブラリを作ることも試しましたが、ユーザー不在で維持管理コストが高く普及しませんでした。そこで、ライブラリ化の前段として、ドキュメント化第一で考え、一元管理することとしました。研究者のアウトプットとしてもドキュメント化は重要であると考えました。
本記事の投稿は、私たちの取り組み内容や研究開発、興味がある分野について知ってもらうことが目的の1つです。
How to ごちきか
それぞれの記事は、なるべくそのページ内でコードが完結するようにしています。したがって、一部数式が多く難しく見えるかもしれませんが、基本的なPythonの使い方がわかればコピー&ペーストで試すことができます。
いくつかコンテンツが含まれていますが、現在は2つの項目に大別されています。
- 分析
- 主に製造業の時系列データを対象として、基本的な分析手法をPythonコード付きで解説しています。
- 内部で開発した酢酸ビニルプラントシミュレーターから生成したデータを使用
- 可視化、前処理、モデリング、学習の実行まで一連の分析が可能。例えば以下のようなコンテンツがあります。
- 可視化: matplotlibを使った時系列データの可視化, スペクトル解析
- 前処理: 次元削減, 次元圧縮
- モデリング: PLSモデル, ガウス過程回帰モデル
- 学習: クロスバリデーション, ハイパーパラメータ最適化(ベイズ最適化)
- 主に製造業の時系列データを対象として、基本的な分析手法をPythonコード付きで解説しています。
- 特集記事
- 比較的新しめであったり難易度の高い手法や、私たちの取り組みを知ってもらうための学会発表資料が掲載されます。また一部未分類なコンテンツが格納されています。
- 例えば、変数間の依存関係をはかるHilbert-Schmidt独立性基準や、Trace LASSO/Graphical LASSOといった発展的なスパースモデリング手法 があります(個人的な推しコンテンツです)。
- 比較的新しめであったり難易度の高い手法や、私たちの取り組みを知ってもらうための学会発表資料が掲載されます。また一部未分類なコンテンツが格納されています。
基盤について
私たちの主な業務は研究開発やデータ分析なので、その片手間でサーバーやセキュリティ対策を完全には運用しきることは難しいです。そこで、以下を目的としてごちきか基盤を作成しました。
【モチベーション】
- ドキュメント執筆に注力したい
- 実験ノート(=Jupyter Notebook)をそのまま使いまわしたい
- ⇒ MyST-NB
- 実験ノート(=Jupyter Notebook)をそのまま使いまわしたい
- インフラにとても詳しいわけではない。でもやるからには便利なシステムにしたい
- サーバーレス(セキュリティ対策、運用コストの低減)
- 記事投稿から自動で配信
- ⇒ GitHub Actions, AWS
MyST-NBをベースとした静的サイトをGitHub Actionsでビルドし、AWSで配信することとしました。概略図は以下の通りです。
MyST (MyST-NB)
MySTは、Jupyterのエコシステム上で計算科学のドキュメント化を行うExecutable Book Projectの中核をなすOSSで、Markdownを拡張し柔軟な記述を可能にしたものです。PythonにはドキュメンテーションビルダーSphinxがありますが、recommonmarkというファイルフォーマットを使用しており、Markdownになれたユーザーからすると少々記述に癖がありました。なおrecommonmarkの開発は終了しており、MySTへの移行がすすめられています(MySTはrecommonmarkの文法も使用可能)。
このSphinx+MySTベースで、Jupyter Notebookをhtmlやpdfのドキュメントに変換するものがMyST-NBです。なお以後の説明ではMySTとMyST-NBをまとめて、MySTと記載します。
前述の通り、MySTは標準のMarkdownをJupyter Notebookで扱うだけではなく、リッチな機能を有しています。数式のレンダリングはもちろんのこと、注意書きを示すAdmonition、長すぎるコードをトグル形式で隠す機能、Plotlyやipywidgetsを使ったインタラクティブな描画が可能です。さらに、コンパイル時にJupyter Notebookを実行するテスト機能もあります(機械学習では計算時間がかかるためあまり向きませんが)。
実際にごちきかのコンテンツ、データセット集, Electricity Transformer Temperatureでは、admonition、セルの非表示、Plotlyを使ったプロットをサンプルとして示しています。
GitHub Actions
ソースコードの管理は会社契約のGitHub Enterpriseで行っています。契約して整備してくださった方々に感謝。
記事のクオリティを担保し、執筆者以外にも最低一人は知識を展開する(バス係数を上げる)ため、GitHub Flowに従った編集フローを採用しています。
執筆記事に対するレビューが完了すると、公開用のブランチにマージされ、これをトリガーとしてGitHub Actionsが起動します。ActionsはMySTをもちいてJupyter Notebookをhtmlにビルドし、AWS S3にアップロードします。これにより、手動ビルドの必要なく自動で更新作業が済みます。また、逐次ビルドするため通常のGitHub Pagesのようにビルド後のソースを管理する必要もありません(最近だとベータ版としてPagesでもActionsが使えるようになったようです)。
AWS
AWSでは、ビルドされたコンテンツをS3に格納し、Route53とCloudFrontで配信します。サーバーレスな構成になっているので、運用コストを下げることができました(社内向けだったこともあり、月額利用料金換算でも1ドル以下)。
基本的な設定は以下の公式ドキュメントに従っています。
まとめ
時系列データ分析コンテンツ「ごちきか」を公開しました。ごちきかは、時系列データ分析手法や研究開発成果をPythonコード+その解説記事としてまとめ、広く公開するものです。みなさまのデータ分析の一助となれたら幸いです。
私たちの取り組みに興味がございましたら、時系列データ解析/予測/異常検知/最適化を対象としたPoC、各種究機関との共同研究案件、Node-AIのご契約を募集中ですので、ご興味があればこちらまでご連絡ください!(メール:ai-deep-ic[at]ntt.com) また、中途/新卒採用も実施しておりますので是非エントリーください。
今後は、まだまだ載せきれていない学会発表資料や、デザイン的につたないところがあるので改善していきたいです。面白い研究成果が出ましたらEngineers’Blogに寄稿&宣伝させてください🙇
明日はいよいよ最終日!トリの記事もお楽しみに!!