時系列分析 VARMAX-As-A-Service
VARMAX-As-A-Service
VARMAX-As-A-Serviceは、統計モデルと機械学習モデルのデプロイメントパイプラインを統一して再利用するためのMLOpsアプローチです。これはそのプロジェクトの上に構築される一連の記事の最初であり、さまざまな統計モデルと機械学習モデル、既存のDAGツールを使用したデータパイプライン、クラウドベースのストレージサービスやオンプレミスの代替ソリューションを使用した実験を表しています。
しかし、VARMAXと統計モデルは一般的にどのようなもので、機械学習モデルとはどのように異なるのでしょうか?
統計モデルは数学モデルであり、機械学習モデルも同様です。統計モデルは通常、1つ以上のランダム変数と他の非ランダム変数との間の数学的な関係として指定されます。そのため、統計モデルは「理論の形式的表現」としての性質を持ち、統計推論の分野に属します。一部の統計モデルは、事前に定義された数学的な式を使用して予測を行い、過去のデータに基づいて係数を推定することができます。統計モデルはデータのための確率モデルを明示的に指定し、通常は解釈可能で特に興味深い変数(予測変数の効果など)を特定します。変数間の関係を特定するだけでなく、統計モデルは関係のスケールと有意性を確立します。
機械学習モデルも数学モデルとして解釈することができます。MLモデルは明示的なプログラミングなしで過去のデータに基づいて予測を行うこともできます。ただし、これらのモデルはより経験的です。機械学習は通常、予測変数と結果の間の関係を強制せず、任意の単一の変数の効果を分離しません。変数間の関係は理解できないかもしれませんが、提供されるのは予測です。
次に、時系列データに適用される予測または予測に焦点を当てましょう。時系列データは、統計モデリングと機械学習を使用して定義することができます(一定の時間間隔で同じソースから行われた連続した測定)。両方とも基になる数学モデルで表され、データをトレーニング/パラメータ化する必要があり、予測値を表す新しい時系列データを生成します。これらの類似点を持つことから、機械学習モデルをサービスとして公開するために使用されるアプローチを、VARMAXという時系列予測に使用される統計モデルに適用します。
VARMAXは統計モデル、一般的にはモデルパラメータを推定し予測を生成する手順です。経済的または金融的な変数は通常、互いに時点的に相関し、互いの過去の値とも相関しています。VARMAX手法は、このような時間的な関係をモデル化するために使用することができます。
この記事は、専用のGitHubリポジトリで見つけることができるVARMAX-As-A-Serviceというアプリケーションに基づいています。これは2つの主要なコンポーネントで構成されています:
- ランタイムコンポーネント — ドッカライズされたデプロイ可能なRESTサービス
- 前処理コンポーネント — データの読み込み、モデルの最適化、モデルのインスタンス化、およびモデルのシリアル化を担当するPython関数のセットで、将来の再利用を可能にします
アプリケーションを構成するランタイムコンポーネントのアーキテクチャは、次の図に示されています:
ユーザーはブラウザを介してApache Web Serverにリクエストを送信します。裏側では、これはPython Flaskアプリケーションであり、事前に設定およびシリアル化されたピクルファイルモデルを呼び出しています。ピクルはPythonの標準ライブラリのシリアライゼーションモジュールです。
Flaskは軽量なWSGIウェブアプリケーションフレームワークです。Flaskは、素早く簡単に始めることができ、複雑なアプリケーションにスケールアップすることができるように設計されています。Flaskは、統計モデルAPIを公開するためのフレームワークとして適した選択肢であり、テスト用のウェブサーバーも提供しています。ただし、本番環境への展開にはウェブサーバーとゲートウェイインタフェースが必要です。このプロジェクトで作成されたDockerイメージは、Linuxベースのシステム上でApache httpdとWSGI(Web Server Gateway Interface)を使用してFlaskアプリケーションを展開します。Apacheは強力で広く使用されているウェブサーバーであり、WSGIはウェブサーバーとPythonアプリケーションの間の標準インターフェースです。Apache httpdは高速な本番レベルのHTTPサーバーです。リバースプロキシとして機能し、着信リクエスト、TLS、およびその他のセキュリティおよびパフォーマンスの問題を、WSGIサーバーよりも優れた方法で処理することができます。
このドッカイメージおよびモデルのコードは、専用のGitHubリポジトリで見つけることができます。
RESTサービスは、既存のウェブアプリケーションにアルゴリズムの一部または予測データパイプラインのDAGのステップとして簡単に統合できます(Apache Airflow、Apache Beam、AWS Step Functions、Azure ML Pipelineを参照)。パイプラインの一部としての統合は、今後の記事の焦点となりますが、この記事ではSwaggerドキュメント化されたエンドポイントとSwagger UIを使用して、さまざまな入力データセットでのテストと実験を行うためのサービスを公開しています。
プロジェクトを展開した後、Swagger APIは<ホスト>:<ポート>/apidocs(例:127.0.0.1:80/apidocs)からアクセスできます。ユーザーの入力パラメータを使用して入力ファイルを送信する2つのエンドポイントが実装されています。
サービス内部では、デシリアライズされたモデルのpickleファイルを使用しています:
以下のように初期化されたモデルにリクエストが送信されます:
RESTサービスとそのデプロイメントの実装の前に、実際のモデルを準備する必要があります。以下の図では、モデルをデプロイするための準備ステップを前処理ステップと呼んでいます。これはデータアナリストのデータ処理とは混同しないでください。この例のプロジェクトでは、モデルパラメータを最適化するために使用されるデータセットは「United States Macroeconomic data」と呼ばれ、Pythonライブラリのstatsmodelsによって提供されており、追加のデータ処理は必要ありません。前処理アルゴリズムは以下のステップで構成されています:
- データを読み込む
- データをトレーニングデータセットとテストデータセットに分割する
- 外部変数を準備する
- 最適なモデルパラメータ(p、q)を見つける
- 最適なパラメータでモデルをインスタンス化する
- インスタンス化されたモデルをpickleファイルにシリアライズする
最後に、アプリケーションを実行するために必要なステップは以下の通りです:
- モデルの準備アルゴリズムを実行する:python varmax_model.py
- アプリケーションをデプロイする:docker-compose up -d
- モデルをテストする:
http://127.0.0.1:80/apidocs
提示されたプロジェクトは、追加の機能(例:リモートリポジトリにモデルファイルを保存する、pickleを代替する標準のシリアライゼーション形式を探索する、KibanaやApache Supersetのような時系列データの可視化ツールを統合する、PrometheusやTimescaleDB、InfluxDBのような時系列データベースに時系列データを保存する、データの読み込みと前処理ステップをパイプラインに追加する、モデルバージョンを追跡する、Apache AirflowやAWS Step Functionsなどの特定のツールを使用してパイプラインを実装する、統計モデルのパフォーマンスと精度を機械学習モデルと比較する、インフラストラクチャコードを含むエンドツーエンドのクラウド統合ソリューションを実装する、他の統計および機械学習モデルをサービスとして公開する)を段階的に拡張できる単純化されたワークフローです。
これらの将来的な改善点のいくつかは、次の記事やプロジェクトの焦点となります。この記事の目的は、基本的なプロジェクト構造とシンプルな処理ワークフローを構築し、時間とともに拡張および改善できるエンドツーエンドのインフラソリューションを展開し、CI/CDプロセスの一部として改善することです。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles