Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

時系列分析でパブリッククラウドコストの傾向を見極める

By Magdalena TrzeciakNov 25, 20203 min read

このページはEnglishDeutschEspañolFrançaisItalianoPortuguêsでもご覧いただけます。

Amazon Web ServicesやGoogle Cloudのコストはわかりにくいことが多く、ノイズをかき分けて本当に重要な変化を見つけ出すのは一苦労です。本記事では、Mann-Kendall分析を活用してコストや使用量のトレンドを検出する方法をご紹介します。

AWSやGoogle Cloudの請求情報の「ノイズ」をかき分けるのは難しい

過去1か月のクラウド支出をサービス別に分解した時系列データが、何本も重なって表示されている状況を想像してみてください(下図参照)。今回の例のように50本もの系列があると、どれが上昇傾向でどれが下降傾向なのかを目視で見分けるのはほぼ不可能です。とはいえ、私たちが本当に知りたいのはまさにそこです。

本記事では、大量の時系列データから「シグナルとノイズを切り分ける」方法を解説します。

1つのプロットに重ねて描かれた時系列データ

ある時系列に線形の単調トレンドがあるかどうかを判定する手法はいくつか存在します。

Mann-Kendall検定によるトレンド検出

DoiT Internationalでは、お客様向けに開発しているCloud Management技術の一環として、Mann-Kendall検定を用いたワンクリックのトレンド分析機能を実装しました [ 動画を見る]。この検定は、推定された線形回帰直線の傾きがゼロと異なるかどうかを調べるパラメトリックな線形回帰分析に近い性質を持ちます。回帰分析では当てはめた回帰直線の残差が正規分布に従うことが前提となりますが、MK検定はノンパラメトリック検定であるため、この前提を必要としません。

DoiT InternationalのCloud Management Platform (CMP)で動作するトレンド分析

Mann-Kendall検定の前提

本検定では、時系列データに対して次の前提を置きます。

1. トレンドが存在しない場合、時間とともに得られる測定値は独立かつ同一の分布に従う。

2. 測定値は、測定時点における観測対象の真の状態を反映している。

3. サンプル収集、計測、データ処理に用いる手法に偏りがない。

注意すべき制約

Mann-Kendall検定は、周期性(季節性)を含むデータには向きません。検定を有効に機能させるには、実行前の前処理として、既知の周期的影響をデータからすべて除去しておくことが推奨されます。

時系列の分解

Loessによる時系列の季節分解(STL)を使うと、時系列を季節成分・トレンド成分・不規則成分に分解できます。この処理は、Goのpackage stlを使えば簡単に実装できます。

stl.Decomposeメソッドには、以下のパラメータを必須入力として渡します。

  • 分解対象の時系列
  • データの周期
  • 季節幅
  • モデルタイプ

モデルは、トレンド周辺の変動が時系列の水準に依存しない場合はstl.Additive()を、トレンドが時系列の水準に比例する場合はstl.Multiplicative()を選択します。

時系列を分解し、各成分にアクセスする方法は次のとおりです。

res := stl.Decompose(timeSeries, periodicity, width, modelType)
trend := res.Trend
seasonal := res.Seasonal
residual := res.Resid

下図は、乗法モデルで週次の季節性を持つ時系列を分解した例です。値が上昇傾向にあり、7日ごとに季節的な「落ち込み」が見られることがわかります。

時系列をトレンド・季節・残差の各成分に分解した例

自分でトレンド分析を試す

下記のスクリプトを実行すると、Mann-Kendall検定がサンプル時系列の単調トレンドをどのように検出するかを確認できます。

時系列データにトレンドが見つかったら、回帰直線の傾きを計算してみるとよいでしょう。データの変化の速さを把握でき、たとえば回帰直線の傾きがX度未満/超の時系列をすべて除外するといったフィルタリングにも応用できます。

DoiT InternationalのCloud Management Platformで動作するトレンド分析の様子は こちら からご覧ください!