時系列モデリングを強化する時間特徴量の設計

時系列モデリングを強化する時間特徴量の設計 – パート3(ARIMAモデル、Prophetとの比較)

  • 時系列データ

はじめに

時系列モデルは、時間の経過とともに変化するデータのパターンと振る舞いを分析し予測するための統計的手法です。このブログシリーズの 「時系列・時間データに関する特徴量設計 – パート1」では、ARモデル、ARIMA、LTSM、Prophetなどの標準的な時系列モデルを説明し、その利点と欠点を議論しました。一方、パート2では、標準的な時系列モデルの欠点を解決する手法として、時間的データセットからの特徴量設計を紹介しました。

最終回となるパート3では、ARIMAとProphetモデルを検証し、それらに代わるアプローチとして特徴量設計比較し、特徴量設計の利点を示します。

データセット

このブログでは、ProphetのQuick Startから取得したデータセットを使用しました。データは、WikipediaのPeyton Manning(アメリカの元アメリカンフットボール選手)のページの日次ページビューのログに基づく時系列データです。データは8年間(2008年 – 2015年)にわたる周期的な時系列であり、一般的な時系列モデリング技術を示すのに理想的です。以下に、時間経過に伴うデータのクイックビューを示します。

Payton Manning
図1 WikipediaのPayton Manningのページの日次ページビュー

このデータセットにはいくつかの興味深い振る舞いがあります:

  • データは週次、月次、年次の複数の季節性を示しています。
  • Manningのスーパーボウル出場(毎年2月開催)などの特別なイベントにより、時間系列上でのビュー数が増加し、ピークを形成しています。 
  • 特定の日付(非イベント時)にビュー数が増加するような外れ値が存在します。

2007年12月から2014年12月までの過去のデータに基づいて、2015年1月から2016年1月までの未来の期間を予測しました。データセットをPandas Dataframeとしてロードし、訓練用データセットと検証用データに分割しました。

Python
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')

# Prepare the data for ARIMA
train = df[df['ds'] < '2015-01-01'] # 7 years of data for training
test = df[df['ds'] >= '2015-01-01'] # ~1 year and 1 month of data for test

比較のまとめ

表1は、このブログで比較した4つの方法のMAEスコアをまとめています。

  • 「Feature Factory + LightGBM」は、dotDataの特徴量自動設計を使用して時間的特徴量を抽出し、その後にLightGBMを機械学習モデルに適用しました。 
  • 「ARIMA(再学習なし)」は、Auto-ARIMAを使用してARIMAモデルの最適化されたハイパーパラメータを検出しました。 
  • 「ARIMA(再学習あり)」は「ARIMA(再学習なし)」と同じですが、ARIMAモデルを毎週再学習します。
  • 「Prophet」はProphetモデルを適用しました。

グラフに示されているように、「Feature Factory + LightGBM」はARIMAとProphetに比べて予測誤差(MAE)を15%-20%削減しました。予測誤差の大きな差は、時間的特徴量のアプローチが正確な予測モデルを構築する上でどれほど強力であるかを示しています。

さらに詳しく見ていきましょう。

時系列モデル精度比較
4つの方法の精度比較

自己回帰和分移動平均(ARIMAモデル)とProphet

パート1で議論したように、ARIMAとProphetは非常に一般的な時系列モデルです。

ARIMAモデルとは?

ARIMAは、時系列データを自己回帰(AR)、差分(I)、移動平均(MA)のコンポーネントを組み合わせてモデルが構成されます。

  • ラグ変数(ARコンポーネント):同じ時系列の過去の値で、時系列の現在の値に対する過去の値の影響を捉えます。 
  • 差分(Iコンポーネント):これは連続した観測値間の差を取ることで、データのトレンドを安定させ減少させるのに役立ちます。 
  • 移動平均(MAコンポーネント):同じ時系列のラグ残差誤差の平均を、時間の移動窓上で取ります。これらはデータの短期的な依存性とノイズを捉えます。

上記のコンポーネントは特徴量と同等であり、ARIMAはそれらを線形回帰モデルとして学習します。

Prophetとは?

Prophetとは、加法モデルを使用し、時系列をトレンド、季節性、休日の3つの主要なコンポーネントに分解します。モデルは、これらのコンポーネントが線形に組み合わさって観測値を生成すると仮定します。ARIMAに比べて、Prophetは自動的により多くの種類の特徴量をサポートし、これらの特徴量に対して線形および指数モデリングをサポートします。Prophetが自動的に検出する特徴量には以下のものがあります:

  • 年、週、日の季節性 
  • 線形トレンド 
  • 時間経過に伴うトレンドの変化に対応 
  • (オプション)手動で休日指標やプロモーション指標を追加

ARIMAとProphet:学習と予測

ARIMAについては、ARIMAのコンポーネント(ラグ、差分、移動平均)を自動的に検出し、その後ARIMAモデルを構築するARIMAの自動MLバージョンであるauto-ARIMAを使用しました。ARIMAとProphetのコードは以下の通りです。

Python
import pmdarima as pm # to detect ARIMA parameters using auto-arima
from statsmodels.tsa.arima.model import ARIMA # to build the ARIMA model


# Auto-ARIMA to detect ARIMA model parameters
model = pm.auto_arima(train.y,
                      start_p=1, start_q=1,max_p=10, max_q=10,  
                      m=1, # frequency of series set to annual
                      d=1, # 'd' determined manually using the adf test
                      seasonal=True,  
                      start_P=1, start_Q=1, D=0,
                      trace=True,
                      error_action='ignore',  
                      suppress_warnings=True,
                      stepwise=True)


# Extracting the ARIMA parameters 
model.get_params() #order (7,1,9) is obtained from `get_params()` method


# Build the ARIMA model
model_fit = ARIMA(train.y, order=(7, 1, 9))  # order for AR, I, MA components were obtained from auto-ARIMA
fitted = model_fit.fit()


# Forecast for the test period of 2015 (383 data points)
fc = fitted.forecast(383)

図2は、1年間の未来の期間(2015年1月から2016年1月)について、ARIMAを使用した予測されたページビューと実際のページビューを示しています。予測(赤線)が実績(青線)と非常に異なって見えることがわかります。この差異は、ARIMAモデルの単純な性質によるものです。すなわち、ARIMAは一度に一つの季節性しか捉えることができず、このデータの変動を完全に学習することができませんでした。もう一つ注目すべき点は、数ヶ月後に予測がフラットラインになることです。これは、予測期間中、ARIMAは以前の予測を使用して未来の予測を計算するためです。以前の予測を使用するということは、ARIMAは短期的な予測には良いかもしれませんが、長期的な予測には適さないことがわかります。

ARIMAモデル
図2 ARIMAの予測結果(再学習なし)(2015年1月から2016年1月)

一般的な回避策は、ビジネスの精度要件に応じてARIMAモデルを定期的に再学習することです。週次の季節性を観察すると、モデルを週次で再学習することができます。図3は、週次で再学習したARIMAの予測を示しており、大幅な改善が見られます。このアプローチの重要な欠点の一つは、頻繁にモデルを再構築するというオーバーヘッド(この例では、週次)です。

Python
# Date formatting to allow for weekly refit 
date_format_tables = [df, train, test]
for table in date_format_tables:
    table['ds'] = pd.to_datetime(table['ds'])


# Ensuring that we train on a weekly basis by identifying the test time point that is 7 days ahead of train 
test['ds_pet'] = test['ds'] - pd.Timedelta(days=7)


#initializing a dataframe to collect the predictions 
df_preds = pd.DataFrame(columns = ['ds', 'actual_y', 'test_pred'])


# Rebuilding the model on a weekly basis 
for pet, start_date, i in zip(test['ds_pet'], test['ds'], range(len(test))):
  train_rolling = df[df['ds'] < pet]
  test_rolling = df[df['ds'] == start_date]
  model_refit = ARIMA(train_rolling.y, order=(7, 1, 9))  
  fitted = model_refit.fit()
  fc_test = pd.DataFrame({'yhat' : fitted.forecast(1)})
  df_preds = df_preds.append({'ds' : start_date,
                   'actual_y' : test_rolling.iloc[0]['y'],
                   'test_pred' : fc_test.iloc[0]['yhat']},
        ignore_index = True)
ARIMAの予測結果
図3 ARIMAの予測結果(週次再学習あり)(2015年1月から2016年1月)

次に、ARIMAの再学習なしと同じ設定に基づいてProphetを適用しました。Prophetはこのデータセットの複数の季節パターンを捉えることができるため、週次の再学習なしでもProphetは比較的良好に機能しました。これは図4で示されています。一方、Prophetの予測は一貫して過大予測されています。また、Prophetは毎週が同じパターンを持つと仮定し、予測期間の長短にかかわらずそのパターンを無理やり当てはめるため、長期予測での適合は悪くなる傾向があります。

Python
from prophet import Prophet # to build the Prophet model


# Set date column to the right format
train['ds'] = pd.to_datetime(train['ds'])
test['ds'] = pd.to_datetime(test['ds'])


# Build Prophet model
m = Prophet()
m.fit(train)


# Forecast for the test period of 2015 (383 data points)
forecast_for_train = m.predict(train)
forecast_for_test = m.predict(test)
Prophetの予測結果
図4 Prophetの予測結果(2015年1月から2016年1月)

時間特徴量の設計

パート2で議論したように、時系列モデルの代替手法は特徴量設計です。まず、特徴量設計は時系列データを特徴量の一枚表に変換します。次に、何らかの機械学習アルゴリズムを特徴量テーブルに適用し、予測モデルを学習します。

従来の特徴量設計は、データサイエンティストの経験と手作業に大きく依存していますが、dotDataはデータ基点で特徴量を発見する特徴量自動設計を提供しています。これは、時間データセットからさまざまな時系列特徴量を抽出するように設計されています。この日次ビューの予測問題に対してdotDataの特徴量自動設計を適用し、これらの特徴量に対してLightGBMモデルを使用します。

特徴量自動設計は、利用可能なデータに基づいてさまざまな時間範囲で特徴量を自動的に発見します。これにより、長期的および短期的な予測を容易に考慮することができます。このデータセットに対して特徴量自動設計が自動的に発見した特徴量のサンプルを以下に示します。

図5 dotDataの特徴量自動設計によって検出された時間的特徴量

さまざまな時間範囲と特徴量集約関数が自動的に検出され、モデルで使用するための多くの特徴量が作成されています。

これらの時間的特徴量に基づいて、図6に示すように、代替手法(dotData Feature Factory + LightGBM)は最も正確な予測を生成しました(精度比較については、このブログの最初の部分の表1を参照してください)。dotDataはさまざまな時点での変動を手作業で検証することなく、季節性と非季節性のパターンを検出し、時系列のピークを自動的に捉ました。これをProphetモデルと比較すると、Prophetで観察された過学習問題が解消され、MAEの改善に寄与していることがわかります。

特徴量エンジニアリングによる予測
図6 dotDataの特徴量自動設計によって検出された時間的特徴量による予測

まとめ

ARIMAモデルとProphetは、ワンストップで時系列予測を行う初心者にとっては便利な方法ですが、実践には様々な問題と困難が伴います。その根本的な課題は、探索される時系列特徴量の種類と、これらの方法で採用されるモデリング技術がモデルに組み込まれており、ユーザーによるカスタマイズができないことにあります。カスタマイズが不十分であれば、ユーザーが複雑な関係性のある時系列データをモデリングし、最先端の機械学習アルゴリズムを利用する能力が大幅に制限されます。

特徴量設計と最先端の機械学習アルゴリズムの組み合わせは、従来の時系列モデルが提起する多くの課題を克服することができます。 データ基点の特徴量発見プロセスを利用して特徴量を発見し、それらに対して機械学習を適用することで、ユーザーがより強力な時系列予測モデルを開発し、ドメイン知識を組み込むことが可能になります。

dotDataの特徴量エンジニアリングは、複雑な関係性をもつデータセットから時系列特徴量を捉えるのに優れています。特徴量エンジニアリングの自動化を使えば、予測に有効な時系列特徴量を自動的に開発し、ドメイン知識を組み込んでカスタマイズし、それらを高度な機械学習モデルに適用することができます。これにより、ロバストな予測が可能になります。

dotDataが企業における時系列予測にどのように活用できるのか興味がある方は、ぜひお気軽にお問い合わせください。

Sharada Narayanan
Sharada Narayanan

Sharada brings 6+ years of experience in Data Science and Machine Learning to dotData. Sharada is an integral part of the Customer Success team, supporting the automation of business solutions using dotData's AutoML and Auto Feature Engineering. Sharada’s background includes diverse experiences from the retail and automotive industries working on implementing Machine Learning solutions for Customer Analytics, Supplier Analytics and Purchasing analytics.

dotDataのAIプラットフォーム

dotData Feature Factory 特徴量をアセット化し全てのAI/BIを強化

dotData Feature Factoryは、データサイエンティストやIT部門が、企業がキュレーションされたデータ(すなわち特徴量)を開発するために、データ加工に関するノウハウを再利用可能なアセットとして蓄積する仕組みを提供します。データ中心に構築される特徴量空間から、アルゴリズムによってデータに隠れたパターン(特徴量)を発見し、特徴量発見のスピードと効率、再利用性と再現性、専門家間の連携、品質と透明性を向上します。dotData Feature Factoryは、機械学習モデルによる予測、ビジネスインテリジェンス(BI)によるデータ可視化、或いはマーケティングオートメーションのような、全てのデータアプリケーションを強化します。

dotData Insight 業務部門が自ら洞察を導き出す

dotData Insightは、事業部門が主役のビジネスアナリティクスを実現する革新的なデータ分析プラットフォームです。dotDataの隠れたパターン(特徴量)を、BIツールのような直感的で使いやすいインターフェースを通じて提供します。dotData独自のAIが解析するデータの特徴を、生成AIの「世界知識」で補完し、実用的なビジネス仮説を生み出します。この融合により、業務部門は、データの洞察を直感的に理解し、新しいビジネス仮説を立て、戦略立案や施策実行をより効果的に行うことができます。