0 / 0
Go back to the English version of the documentation
使用 Notebook 中时间序列数据的数据准备进行 SPSS 预测性分析预测
Last updated: 2024年10月07日
使用 Notebook 中时间序列数据的数据准备进行 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。 此组件有以下两个用例:

  • 计算指定的开始时间与结束时间之间的时间点数。 在此用例中,开始时间和结束时间都在前一次 TSDP 的输出中的第一个观测值之后发生。
  • 计算开始索引与结束索引(指示前一次 TSDP 的输出中的最后一个观测值)之间的时间点数。

时间因果建模

时间因果建模 (TCM) 是一套方法,其试图通过结合使用 Granger 因果关系和回归算法来选择变量以发现时间序列数据中的关键时间关系。

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 模型的一个优势是能够检测基于模型的离群值。 离群值检测功能可识别目标序列中值距离基于 TCM 模型的期望(拟合)值过远的时间点。

时间因果根本原因分析

根本原因分析功能可以探索 Granger 因果图以分析导致当前离群值的关键/根值。

时间因果场景分析

情景分析是指中医模型对人为设定一个时间序列的价值所产生的反响进行 "排场" 的一种能力。 场景是一组可通过用替代值向量替换根时间序列值来执行的预测。

时间因果汇总

TCM 汇总可根据一个模型质量度量值来选择排名前 N 位的模型。 提供了 5 个模型质量度量值:均方根误差 (RMSE)、均方根百分比误差 (RMSPE)、贝叶斯信息准则 (BIC)、赤池信息准则 (AIC) 和 R 平方 (RSQUARE)。 用户可设置 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 Score)生成的基于紧凑行(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 预测分析算法

Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more