【データ分析】過去データをもとに未来を予測する時系列予測

Data Analyst
※本ページにはプロモーションが含まれます
※本ページにはプロモーションが含まれます
スポンサーリンク

時系列予測についてはじめに

時系列予測(Time Series Forecasting)は、過去のデータを分析し、そのパターンやトレンドをもとに未来の値や出来事を予測するための統計的手法や機械学習アプローチのことを指します。

時系列予測の目的は、未来のデータポイントの値を予測するだけでなく、その不確実性を理解し、意思決定をサポートすることです。

時系列予測はさまざまな分野で応用されており、経済予測、在庫管理、エネルギー需要予測、トラフィック管理、医療診断、自然災害予測など、さまざまな場面で役立ちます。データの特性やタスクに合わせて、最適なモデルと手法を選択することが重要です。また、新しいデータが収集されるたびにモデルを再トレーニングしてアップデートすることも一般的です。

時系列データの定義と特性

時系列データ(Time Series Data)は、時間の経過とともに観測されたデータポイントの系列で、データポイントは通常等間隔または不等間隔で収集されます。時系列データは多くの分野で使用され、時間に関連する出来事、トレンド、パターンを分析し、未来の出来事を予測するために重要です。

時系列データの特性

  1. 時間依存性
    • 時系列データは時間に依存しています。データポイントは一定の時間間隔で収集され、過去のデータが未来のデータに影響を与えることが一般的です。
  2. 季節性(Seasonality)
    • 季節性は、データ内の周期的なパターンを指します。例えば、毎年同じ時期に売上が増加する小売業のデータや、一日の時間帯ごとのトラフィックデータなどがあります。
  3. トレンド(Trend)
    • トレンドは、データが長期的に上昇または下降の傾向を持つ場合に現れます。経済データの成長トレンドや株価の上昇傾向などが例です。
  4. ノイズ(Noise)
    • ノイズは、データ内のランダムな変動を表します。これらは予測モデルの精度を低下させる要因であり、データ内の信頼性を損なう可能性があります。
  5. 自己相関(Autocorrelation)
    • 自己相関は、過去のデータポイントと現在のデータポイントとの間の相関関係を示します。この特性を利用して、過去のデータから未来のデータを予測できる場合があります。
  6. 非定常性(Non-Stationarity)
    • 時系列データが非定常である場合、統計的特性が時間とともに変化します。この場合、データの差分を取るなどの前処理が必要になることがあります。
  7. イベント(Events)
    • 特定の時点で発生したイベントがデータに影響を与えることがあります。例えば、広告キャンペーン、天候変化、新製品の導入など。
  8. 欠損データ(Missing Data)
    • 時系列データは欠損していることがよくあります。欠損データの処理が必要です。
  9. 外れ値(Outliers)
    • 時系列データには外れ値が含まれることがあり、これらの外れ値は分析と予測に影響を与える可能性があります。

予測に大きく左右するため、特にトレンドは重要な要素ととらえています!

時系列予測が利用されるケース

時系列予測が利用されるケースには以下のようなものがあります。

  1. 経済予測:
    • GDP成長、インフレーション率、雇用率などの経済指標の予測。
    • 金融市場での株価、為替レート、債券利回りなどの予測。
  2. 在庫管理:
    • 商品の需要予測と在庫管理の最適化。
    • 需要の季節性と変動に対応するための予測。
  3. 販売予測:
    • 小売業界での製品の販売量予測。
    • 在庫補充、価格設定、プロモーションの計画に役立つ。
  4. 気象予測:
    • 気温、降水量、気象パターンの予測。
    • 農業、エネルギー、天候関連ビジネスへの応用。
  5. エネルギー需要予測:
    • 電力需要の予測と電力供給の調整。
    • 再生可能エネルギーの効率的な運用。
  6. 交通管理:
    • 交通量、交通渋滞、公共交通機関の運行予測。
    • 道路、鉄道、航空などでのスケジューリングと計画に使用。
  7. 株価予測:
    • 株式市場での個別銘柄や市場全体の株価の予測。
    • 投資判断やリスク管理の補助としての応用。
  8. 医療診断:
    • 患者の健康状態や病気の進行の予測。
    • 医療機器のメンテナンス計画。
  9. 自然災害予測:
    • 地震、洪水、ハリケーンなどの自然災害の発生と進行の予測。
    • 防災計画の策定とリスク軽減のための活用。
  10. 交通動態予測:
    • GPSデータを使用した交通動態の予測。
    • ナビゲーションアプリ、交通情報提供サービスでの使用。

時系列予測の手法

移動平均での予測

移動平均とは

移動平均(Moving Average)は、時系列データを平滑化し、データのトレンドや季節性を視覚化しやすくするための一般的な手法です。この手法は、過去の一定期間のデータポイントの平均値を計算し、その平均値を未来のデータポイントとして予測することに基づいています。移動平均にはいくつかのバリエーションがあり、以下でいくつかの主要なタイプを説明します。

  1. 単純移動平均(Simple Moving Average, SMA)
    • 単純移動平均は、一定の期間(たとえば、直近のN日間)におけるデータポイントの平均を計算するものです。
    • すべてのデータポイントに同じ重みを与え、過去のデータが最新のデータと同じ重要性を持つと仮定します。
    • 単純な実装であり、データの平滑化に使用されますが、急激な変動には適していないことがあります。
  2. 加重移動平均(Weighted Moving Average)
    • 加重移動平均は、異なる重みを持つ期間内のデータポイントの平均を計算します。
    • 重みは通常、最新のデータに高い重みを付け、過去のデータに対して低い重みを付けることで、最新のトレンドを強調します。
    • 例として、指数平滑法があり、指数平滑係数によって重みが調整されます。
  3. 累積移動平均(Cumulative Moving Average, CMA)
    • 累積移動平均は、期間内のデータポイントの累積和を計算し、期間数で割る方法です。
    • 新しいデータが追加されるたびに、累積和を更新して新しい平均を計算します。
    • 長期の平均を計算するのに役立ちます。

移動平均の利点は、データのノイズを削減し、長期的なトレンドや季節性を視覚的に捉えやすくすることです。

しかし、移動平均は過去のデータに基づいているため、将来の急激な変動に対しては適切な予測を提供できないことがあります。データの特性や予測対象に合わせて、適切な移動平均手法を選択し、予測の正確性を向上させるために他の手法と組み合わせることが一般的です。

私は価格設定への活用のため、単純移動平均を活用して売上予測を行ったことがあります!

そちらにより、適切なタイミングでの値下げの意思決定に貢献することができました。

移動平均の実装方法

移動平均は、Pythonライブラリなど何か決まった型が存在するというよりはSQLで要件に合わせて実装することが基本ではないかと考えます。

例えば、直近3週間の売上の平均を算出し過去の売り上げ実績と照らし合わせて予測を立てる、といった形です。私自身もそうした形で売上予測を行いました。

ケースに合わせて、適切な期間設定や予測方法をご検討いただければと思います。

SQL参考文献

ARIMAモデルでの予測

ARIMAモデルとは

ARIMA(Autoregressive Integrated Moving Average)モデルは、時系列データの分析と予測に広く使用される統計的なモデルです。

ARIMAモデルは、データの自己相関(Autoregressive, AR)、階差(Integrated, I)、移動平均(Moving Average, MA)の3つの主要な要素から構成されます。これらの要素を組み合わせて、時系列データの特性をモデル化し、未来の値を予測します。

以下はARIMAモデルの主要な要素について詳しく説明します。

  1. 自己相関(AR, Autoregressive):
    • ARIMAモデルの最初の要素は、過去のデータポイントと現在のデータポイントとの間の自己相関をモデル化します。
    • 自己相関はラグ(遅れ)を指定して、現在のデータポイントを過去のデータポイントの線形結合として表現します。
    • 例えば、AR(1)モデルは、直前の1つのデータポイントの影響を考慮し、AR(2)モデルは2つのデータポイントの影響を考慮します。
  2. 階差(I, Integrated):
    • 階差は、データを非定常から定常に変換するための操作です。
    • 定常性を持つデータは、統計モデルを適用しやすく、未来の予測が安定します。
    • 通常、データの階差を取る回数をdと表し、ARIMAモデルはARMA(p, q)モデルに対して、d次の差分を取ることでデータの定常性を確保します。
  3. 移動平均(MA, Moving Average):
    • 移動平均は、データのホワイトノイズ成分をモデル化します。
    • MAモデルは、過去の誤差項(残差)の線形結合として表現され、誤差の自己相関を考慮します。
    • 例えば、MA(1)モデルは直前の1つの誤差項の影響を考慮し、MA(2)モデルは2つの誤差項の影響を考慮します。

ARIMAモデルの一般的な表記はARIMA(p, d, q)であり、pは自己相関の次数、dは階差の次数、qは移動平均の次数を示します。モデルの選択は時系列データの特性に依存し、データの定常性、自己相関、移動平均性などを評価して行われます。

ARIMAモデルは時間の変動に関する情報をモデル化するため、季節性を考慮しない限り、季節性のあるデータには適していません。季節性を扱うためには、季節階差や季節性を考慮するSARIMAモデル(Seasonal ARIMA)が使用されます。 ARIMAモデルとその派生モデルは、経済予測、財務予測、在庫管理、気象予測など、さまざまな分野で広く活用されています。

ARIMAモデルのコード具体例

ARIMAモデルのコードを示すために、PythonのStatsmodelsライブラリを使用した例を記載いたします。Statsmodelsは統計モデリングをサポートするライブラリで、ARIMAモデルを簡単に実装できます。

まず、必要なライブラリをインポートします。

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

次に、時系列データを読み込みます。以下の例では、Pandas DataFrameを使用してCSVファイルからデータを読み込んでいます。データは data.csv というファイル名と仮定します。

data = pd.read_csv('data.csv')

データが読み込まれたら、ARIMAモデルを作成し、データに適合させます。以下はARIMAモデルの具体的なコード例です。

# データの可視化 
plt.plot(data['Date'], data['Value']) 
plt.title('Time Series Data') 
plt.xlabel('Date') 
plt.ylabel('Value') plt.show() 

# ARIMAモデルの作成 
model = sm.tsa.ARIMA(data['Value'], order=(p, d, q)) 
results = model.fit() 

# 予測 
forecast = results.predict(start=len(data), end=len(data) + forecast_horizon - 1, typ='levels') 

# 予測結果の可視化 
plt.plot(data['Date'], data['Value'], label='Observed') 
plt.plot(forecast.index, forecast, label='Forecast', color='r') 
plt.title('ARIMA Forecast') 
plt.xlabel('Date') 
plt.ylabel('Value') 
plt.legend() 
plt.show()

このコードのポイントは以下の通りです。

  1. データを可視化して、データの特性を確認します。
  2. ARIMAモデルを作成し、orderパラメータにはAR次数(p)、差分次数(d)、MA次数(q)を指定します。
  3. モデルをデータに適合させます。
  4. 予測を実行し、未来の値を取得します。
  5. 予測結果を可視化して、実際のデータと比較します。

実際のコードでは、pdqforecast_horizonなどのパラメータを適切に設定し、データの特性に合わせてモデルを調整する必要があります。また、データの前処理やモデルの評価も重要です。ARIMAモデルの詳細なチュートリアルやドキュメンテーションも参考になります。

プログラムの学習につまづきがございましたら、現役エンジニアから学べる TechAcademy [テックアカデミー] のご活用もぜひご検討ください!

ARIMAモデルの評価

ARIMAモデルの評価は、モデルが実際のデータにどの程度適合し、予測がどの程度正確であるかを評価するために重要です。評価は、モデルの性能を理解し、必要に応じてモデルを改善するために行われます。

以下はARIMAモデルの評価に関連する主要な指標と手法です。

  1. 平均絶対誤差 (MAE)
    • MAEは予測誤差の平均絶対値を示します。つまり、予測値と実測値の差の絶対値を平均します。MAEが低いほどモデルの予測が正確です。
  2. 平均二乗誤差 (MSE)
    • MSEは予測誤差の平均二乗値を示します。予測誤差の大きさを考慮するため、大きな誤差に対してペナルティがかかります。MSEが低いほどモデルの予測が正確です。
  3. 平均二乗誤差の平方根 (RMSE)
    • RMSEはMSEの平方根で、誤差の単位を元のデータと同じ単位に戻します。RMSEが低いほどモデルの予測が正確です。
  4. 決定係数 (R-squared, R2)
    • R2は実測データと予測データの間の相関を示します。1に近いほどモデルの予測がデータを適切に説明しています。
  5. 残差分析
    • モデルの残差(実測値と予測値の差)の分布やパターンを評価します。残差がランダムであり、特定のパターンを示さないことが望ましいです。
  6. クロスバリデーション
    • モデルの性能を評価するために、データを訓練セットとテストセットに分割し、モデルの予測精度を複数のテストセットで検証します。
  7. 情報基準 (Information Criteria)
    • 情報基準(例: AIC、BIC)は、モデルの適合度と複雑性をバランスする指標で、モデル選択に役立ちます。

ARIMAモデルの評価は、適切なパラメータ(p、d、q)を選択し、モデルの予測精度を向上させるために繰り返し実施されることが一般的です。また、季節性がある場合、SARIMAモデルなどの派生モデルを検討することも重要です。評価により、モデルの強化や代替モデルの探索が可能になり、実用的な予測精度の向上が期待されます。

時系列予測を行う際の注意点

時系列予測を行う目的の整理と関係者とのすり合わせを行う

時系列予測を行う際には何かしらの目的があると思います。

その目的を明確にし、関係者との認識合わせをすることがプロジェクト成功に重要になります。
そちらを踏まえずに進行してしまうと、活用されないアウトプットになってしまったりします。

逆に目的を明確にし、要件整理をきちんと行うことでプロジェクト成功につながりやすくなると考えます。私自身もそうした段階を踏むことで、売上予測を用いた値引き管理による利益貢献につなげることができました。

時系列予測についてまとめ

今回は、時系列予測の概要と「移動平均」「ARIMAモデル」という2つの具体的な手法をご紹介いたしました。

また、手法論にとらわれずまずは目的を明確にすることが重要とも記載させて頂きました。
(目的と要件の整理の重要性はデータ活用全般に言えることではないかと思います!)

参考になれば幸いです☕

もしIT業界への転職でお困りでしたら、IT・WEB・ソーシャルゲーム業界への転職ならGEEKLYへのご相談をご検討ください!

(私自身も転職の際に活用させて頂き、ご縁を頂くことができました)

コメント

タイトルとURLをコピーしました