0 / 0
資料の 英語版 に戻る
ノートブックでの時系列データのデータ準備を使用した SPSS 予測分析予測
最終更新: 2024年10月04日
ノートブックでの時系列データのデータ準備を使用した SPSS 予測分析予測

時系列データ用のデータの準備 (TSDP) は、時間の生データ (トランザクション (イベント) ベースのデータと列ベースのデータが含まれる、フラットな多次元形式) を、後続の時系列分析方法で必要とされる正規化された時系列データ (圧縮された行ベースの形式) に変換する機能を提供します。

TSDP のメイン・ジョブは、次元フィールド内の各固有値をメトリック・フィールドと組み合わせることによって、時系列を生成することです。 さらに、タイム・スタンプに基づいてデータをソートし、時間変数のメタデータを抽出し、集約関数または分布関数を適用して時系列を別の時間細分度 (間隔) に変換して、データ品質を検査し、必要に応じて欠損値を処理します。

Python コード例:

from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation

tsdp = TimeSeriesDataPreparation(). \
    setMetricFieldList(["Demand"]). \
    setDateTimeField("Date"). \
    setEncodeSeriesID(True). \
    setInputTimeInterval("MONTH"). \
    setOutTimeInterval("MONTH"). \
    setQualityScoreThreshold(0.0). \
    setConstSeriesThreshold(0.0)

tsdpOut = tsdp.transform(data)

TimeSeriesDataPreparationConvertor

これは、アプリケーションが使用する TSDP 内の日時コンバーターのいくつかの機能を提供するために使用される日時コンバーター API です。 このコンポーネントには以下の 2 つのユース・ケースがあります。

  • 指定された開始時刻と終了時刻の間の時点を計算します。 この場合、開始時刻と終了時刻の両方が、前回の TSDP 出力の最初の観測後に発生します。
  • 前回の TSDP 出力での最後の観測を参照する開始インデックスと終了インデックスの間の時点を計算します。

時間的因果モデリング

時間的因果モデリング (TCM) とは、変数選択にグレンジャー因果関係と回帰アルゴリズムの組み合わせを使用して時系列データ内の重要な時間的関係を見つけ出そうとする一連の手法を指します。

Python コード例:

from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation
from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.temporalcausal import TemporalCausal
from spss.ml.forecasting.params.predictor import MaxLag, MaxNumberOfPredictor, Predictor
from spss.ml.forecasting.params.temporal import FieldNameList, FieldSettings, Forecast, Fit
from spss.ml.forecasting.reversetimeseriesdatapreparation import ReverseTimeSeriesDataPreparation

tsdp = TimeSeriesDataPreparation().setDimFieldList(["Demension1", "Demension2"]). \
    setMetricFieldList(["m1", "m2", "m3", "m4"]). \
    setDateTimeField("date"). \
    setEncodeSeriesID(True). \
    setInputTimeInterval("MONTH"). \
    setOutTimeInterval("MONTH")
tsdpOutput = tsdp.transform(changedDF)

lcm = LocalContainerManager()
lcm.exportContainers("TSDP", tsdp.containers)

estimator = TemporalCausal(lcm). \
    setInputContainerKeys(["TSDP"]). \
    setTargetPredictorList([Predictor(
    targetList=[["", "", ""]],
    predictorCandidateList=[["", "", ""]])]). \
    setMaxNumPredictor(MaxNumberOfPredictor(False, 4)). \
    setMaxLag(MaxLag("SETTING", 5)). \
    setTolerance(1e-6)

tcmModel = estimator.fit(tsdpOutput)
transformer = tcmModel.setDataEncoded(True). \
    setCILevel(0.95). \
    setOutTargetValues(False). \
    setTargets(FieldSettings(fieldNameList=FieldNameList(seriesIDList=[["da1", "db1", "m1"]]))). \
    setReestimate(False). \
    setForecast(Forecast(outForecast=True, forecastSpan=5, outCI=True)). \
    setFit(Fit(outFit=True, outCI=True, outResidual=True))

predictions = transformer.transform(tsdpOutput)
rtsdp = ReverseTimeSeriesDataPreparation(lcm). \
    setInputContainerKeys(["TSDP"]). \
    setDeriveFutureIndicatorField(True)

rtsdpOutput = rtsdp.transform(predictions)
rtsdpOutput.show()

時間的因果自己回帰モデル

自己回帰 (AR) モデルは、対象系列ではない予測変数系列のサンプル外予測を計算するために作成されます。 その後、これらの予測変数の予測を使用して、対象系列のサンプル外予測が計算されます。

TemporalCausal によって生成されたモデル

TemporalCausal では、以下の出力がエクスポートされます。

  • TemporalCausal モデル情報が含まれる JSON ファイル
  • 多系列モデルが含まれる XML ファイル

Python コード例:

from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.temporalcausal import TemporalCausal, TemporalCausalAutoRegressiveModel
from spss.ml.forecasting.params.predictor import MaxLag, MaxNumberOfPredictor, Predictor
from spss.ml.forecasting.params.temporal import FieldNameList, FieldSettingsAr, ForecastAr

lcm = LocalContainerManager()
arEstimator = TemporalCausal(lcm). \
    setInputContainerKeys([tsdp.uid]). \
    setTargetPredictorList([Predictor(
        targetList = [["da1", "db1", "m2"]],
        predictorCandidateList = [["da1", "db1", "m1"],
                                  ["da1", "db2", "m1"],
                                  ["da1", "db2", "m2"],
                                  ["da1", "db3", "m1"],
                                  ["da1", "db3", "m2"],
                                  ["da1", "db3", "m3"]])]). \
    setMaxNumPredictor(MaxNumberOfPredictor(False, 5)). \
    setMaxLag(MaxLag("SETTING", 5))

arEstimator.fit(df)

tcmAr = TemporalCausalAutoRegressiveModel(lcm).\
    setInputContainerKeys([arEstimator.uid]).\
    setDataEncoded(True).\
    setOutTargetValues(True). \
    setTargets(FieldSettingsAr(FieldNameList(
        seriesIDList=[["da1", "db1", "m1"],
                      ["da1", "db2", "m2"],
                      ["da1", "db3", "m3"]]))).\
    setForecast(ForecastAr(forecastSpan = 5))

scored = tcmAr.transform(df)
scored.show()

時間的因果外れ値検出

TCM モデルを作成するメリットの 1 つは、モデル・ベースの外れ値を検出できることです。 外れ値の検出とは、TCM モデルに基づいて予期される (適合) 値からの距離が遠すぎる値を含む対象系列の時点を識別する機能を指します。

時間的因果根本原因分析

根本原因分析とは、当該の外れ値をもたらしたキー/ルート値を分析するために、グレンジャー因果性グラフを探索する機能を指します。

時間的因果シナリオ分析

シナリオ分析とは、時系列の値を人為的に設定することによる影響を「プレイアウト」する TCM モデルの機能を指します。 シナリオは、置換値のベクトルによってルート時系列の値を置換することで実行される一連の予測です。

時間的因果サマリー

TCM サマリーは、特定のモデル品質指標に基づいて上位 N 個のモデルを選択します。 平均 2 乗平方根誤差 (RMSE)、平均 2 乗平方根誤差率 (RMSPE)、ベイズ情報量基準 (BIC)、赤池情報量基準 (AIC)、および R 2 乗 (RSQUARE) の 5 つのモデル品質指標があります。 N とモデルの品質指標の両方をユーザーが設定できます。

時系列探索

時系列探索では、いずれかの統計および検定に基づいて時系列データの特性を探索し、モデル作成前に時系列についての予備的な洞察情報を生成します。 エキスパート・ユーザー向けの分析方法 (時系列クラスタリング、単位根検定、相関など) に対応するだけではなく、ビジネス・ユーザー向けの単純な時系列分解法に基づく自動探索プロセスも提供します。

Python コード例:

from spss.ml.forecasting.timeseriesexploration import TimeSeriesExploration

tse = TimeSeriesExploration(). \
    setAutoExploration(True). \
    setClustering(True)

tseModel = tse.fit(data)
predictions = tseModel.transform(data)
predictions.show()

時系列データの逆データ準備

時系列データの逆方向データ準備 (RTSDP) は、TimeSeriesDataPreperation (TSDP) または TemporalCausalModel (TCM スコア) によって生成されたコンパクト行ベース (CRB) フォーマットをフラット化多次元 (FMD) フォーマットに変換する機能を提供します。

Python コード例:

from spss.ml.common.wrapper import LocalContainerManager
from spss.ml.forecasting.params.temporal import GroupType
from spss.ml.forecasting.reversetimeseriesdatapreparation import ReverseTimeSeriesDataPreparation
from spss.ml.forecasting.timeseriesdatapreparation import TimeSeriesDataPreparation

manager = LocalContainerManager()
tsdp = TimeSeriesDataPreparation(manager). \
    setDimFieldList(["Dimension1", "Dimension2", "Dimension3"]). \
    setMetricFieldList(
    ["Metric1", "Metric2", "Metric3", "Metric4", "Metric5", "Metric6", "Metric7", "Metric8", "Metric9", "Metric10"]). \
    setDateTimeField("TimeStamp"). \
    setEncodeSeriesID(False). \
    setInputTimeInterval("WEEK"). \
    setOutTimeInterval("WEEK"). \
    setMissingImputeType("LINEAR_INTERP"). \
    setQualityScoreThreshold(0.0). \
    setConstSeriesThreshold(0.0). \
    setGroupType(
    GroupType([("Metric1", "MEAN"), ("Metric2", "SUM"), ("Metric3", "MODE"), ("Metric4", "MIN"), ("Metric5", "MAX")]))

tsdpOut = tsdp.transform(changedDF)
rtsdp = ReverseTimeSeriesDataPreparation(manager). \
    setInputContainerKeys([tsdp.uid]). \
    setDeriveFutureIndicatorField(True)

rtdspOut = rtsdp.transform(tsdpOut)
import com.ibm.spss.ml.forecasting.traditional.TimeSeriesForecastingModelReEstimate

val tsdp = TimeSeriesDataPreparation().
   setDimFieldList(Array("da", "db")).
   setMetricFieldList(Array("metric")).
   setDateTimeField("date").
   setEncodeSeriesID(false).
   setInputTimeInterval("MONTH").
   setOutTimeInterval("MONTH")

val lcm = LocalContainerManager()
lcm.exportContainers("k", tsdp.containers)

val reestimate = TimeSeriesForecastingModelReEstimate(lcm).
  setForecast(ForecastEs(outForecast = true, forecastSpan = 4, outCI = true)).
  setFitSettings(Fit(outFit = true, outCI = true, outResidual = true)).
  setOutInputData(true).
  setInputContainerKeys(Seq("k"))

val rtsdp = ReverseTimeSeriesDataPreparation(tsdp.manager).
  setInputContainerKeys(List(tsdp.uid)).
  setDeriveFutureIndicatorField(true)

val pipeline = new Pipeline().setStages(Array(tsdp, reestimate, rtsdp))
val scored = pipeline.fit(data).transform(data)
scored.show()

親トピック: SPSS 予測分析アルゴリズム