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입니다. 이 구성요소에는 두 가지 유스 케이스가 있습니다.

  • 지정된 시작 및 종료 시간 사이의 시간 지점을 계산합니다. 이 경우 시작 및 종료 시간은 모두 이전 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 모델의 능력을 말합니다. 시나리오는 근본 시계열의 값을 대체 값의 벡터로 대체하여 수행된 예측의 세트입니다.

시간 인과 요약

TCM 요약은 모델 품질 기준에 따라 최상위 N개 모델을 선택합니다. 모델 품질 기준에는 평균 제곱근 오차(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(시계열 데이터에 대한 역 데이터 준비)는 TSDP(TimeSeriesDataPreperation) 또는 TCM Score(TemporalCausalModel)에 의해 생성된 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 예측 분석 알고리즘