PredictTimeSeries (DMX)
適用対象: SQL Server Analysis Services
予測される時系列データの将来値を返します。 時系列データは継続的であり、入れ子になったテーブルまたはケース テーブルに格納できます。 PredictTimeSeries 関数は常に入れ子になったテーブルを返します。
構文
PredictTimeSeries(<table column reference>)
PredictTimeSeries(<table column reference>, n)
PredictTimeSeries(<table column reference>, n-start, n-end)
PredictTimeSeries(<scalar column reference>)
PredictTimeSeries(<scalar column reference>, n)
PredictTimeSeries(<scalar column reference>, n-start, n-end)
PredictTimeSeries(<table column reference>, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>
PredictTimeSeries(<table column reference>, n-start, n-end, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>
PredictTimeSeries(<scalar column reference>, n, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>
PredictTimeSeries(<scalar column reference>, n-start, n-end, REPLACE_MODEL_CASES | EXTEND_MODEL_CASES) PREDICTION JOIN <source query>
引数
<table column reference>, <scalar column reference>
予測する列の名前を指定します。 列には、スカラー データまたは表形式データを含めることができます。
n
予測する次のステップの数を指定します。 nに値が指定されていない場合、既定値は 1 です。
n を 0 にすることはできません。 少なくとも 1 つの予測を行わない場合、関数はエラーを返します。
n-start、n-end
時系列ステップの範囲を指定します。
n-start は整数である必要があり、0 にすることはできません。
n-end は、 n-start より大きい整数である必要があります。
<ソース クエリ>
予測の作成に使用される外部データを定義します。
REPLACE_MODEL_CASES |EXTEND_MODEL_CASES
新しいデータを処理する方法を示します。
REPLACE_MODEL_CASESは、モデル内のデータ ポイントを新しいデータに置き換えることを指定します。 ただし、予測は既存のマイニング モデルのパターンに基づいています。
EXTEND_MODEL_CASES を指定すると、新しいデータが元のトレーニング データセットに追加されます。 将来の予測は、新しいデータを使い果たした後にのみ複合データセットに基づいて作成されます。
これらの引数は、PREDICTION JOIN ステートメントを使用して新しいデータを追加する場合にのみ使用できます。 PREDICTION JOIN クエリを使用し、引数を指定しない場合、既定値は EXTEND_MODEL_CASES です。
返り値の種類
<テーブル式>。
解説
PREDICTION JOIN ステートメントを使用して新しいデータを追加する場合、Microsoft Time Series アルゴリズムでは履歴予測はサポートされません。
PREDICTION JOIN では、予測プロセスは常に、元のトレーニング シリーズの終了後すぐにタイム ステップで開始されます。 これは、新しいデータを追加した場合でも当てはまります。 したがって、 n パラメーターと n-start パラメーターの値は、0 より大きい整数である必要があります。
Note
新しいデータの長さは、予測の開始位置には影響しません。 そのため、新しいデータを追加して新しい予測を作成する場合は、予測の開始位置を新しいデータの長さより大きい値に設定するか、予測の終了位置を新しいデータの長さだけ拡張するようにします。
例
次の例は、既存の時系列モデルに対して予測を行う方法を示しています。
最初の例では、現在のモデルに基づいて、指定した数の予測を行う方法を示します。
2 番目の例では、REPLACE_MODEL_CASES パラメーターを使用して、指定したモデルのパターンを新しいデータ セットに適用する方法を示します。
3 番目の例では、EXTEND_MODEL_CASES パラメーターを使用して、マイニング モデルを新しいデータで更新する方法を示します。
時系列モデルの操作の詳細については、データ マイニング チュートリアル「 Lesson 2: 予測シナリオの構築 (中間データ マイニング チュートリアル)」 および「 Time Series Prediction DMX チュートリアルを参照してください。
Note
モデルの結果は異なる場合があります。次の例の結果は、結果の形式を説明することのみを目的としています。
例 1: タイム スライスの数を予測する
次の例では、 PredictTimeSeries 関数を使用して、次の 3 つの時間ステップの予測を返し、ヨーロッパおよび太平洋リージョンの M200 シリーズに結果を制限します。 この特定のモデルでは、予測可能な属性は Quantity であるため、PredictTimeSeries 関数の最初の引数として [Quantity]
を使用する必要があります。
SELECT FLATTENED
[Forecasting].[Model Region],
PredictTimeSeries([Forecasting].[Quantity],3)AS t
FROM
[Forecasting]
WHERE [Model Region] = 'M200 Europe'
OR [Model Region] = 'M200 Pacific'
期待される結果:
モデル領域 | t.$TIME | t.Quantity |
---|---|---|
M200 ヨーロッパ | 2008 年 7 月 25 日午前 12:00:00 | 121 |
M200 ヨーロッパ | 2008 年 8 月 25 日午前 12:00:00 | 142 |
M200 ヨーロッパ | 2008 年 9 月 25 日午前 12:00:00 | 152 |
M200 Pacific | 2008 年 7 月 25 日午前 12:00:00 | 46 |
M200 Pacific | 2008 年 8 月 25 日午前 12:00:00 | 44 |
M200 Pacific | 2008 年 9 月 25 日午前 12:00:00 | 42 |
この例では、結果を読みやすくするために FLATTENED キーワードが使用されています。 FLATTENED キーワードを使用せずに、階層的な行セットを返す場合、このクエリでは 2 つの列が返されます。 1 つ目の列には [ModelRegion] の値、2 つ目の列には入れ子になったテーブルが含まれます。入れ子になったテーブルには、予測されているタイム スライスを示す $TIME と予測された値を含む Quantity という 2 つの列が含まれています。
例 2: 新しいデータを追加して REPLACE_MODEL_CASES を使用する
データが特定の領域に対して正しくなく、モデルでパターンを使用するが、新しいデータに一致するように予測を調整するとします。 または、別のリージョンの方が信頼性の高い傾向があり、最も信頼性の高いモデルを別のリージョンのデータに適用したい場合があります。
このようなシナリオでは、REPLACE_MODEL_CASES パラメーターを使用し、履歴データとして使用する新しいデータ セットを指定できます。 そうすることで、プロジェクションは指定されたモデルのパターンに基づきますが、新しいデータ ポイントの末尾からスムーズに続行されます。 このシナリオの完全なチュートリアルについては、「 Advanced Time Series Predictions (Intermediate Data Mining Tutorial)」を参照してください。
次の PREDICTION JOIN クエリでは、データを置き換えて新しい予測を作成する構文を示します。 置換データの場合、この例では Amount 列と Quantity 列の値を取得し、それぞれに 2 を乗算します。
SELECT [Forecasting].[Model Region],
PredictTimeSeries([Forecasting].[Quantity], 3, REPLACE_MODEL_CASES)
FROM
[Forecasting]
PREDICTION JOIN
OPENQUERY([Adventure Works DW Multidimensional 2012],
'SELECT [ModelRegion],
([Quantity] * 2) as Quantity,
([Amount] * 2) as Amount,
[ReportingDate]
FROM [dbo].vTimeSeries
WHERE ModelRegion = N''M200 Pacific''
') AS t
ON
[Forecasting].[Model Region] = t.[ Model Region] AND
[Forecasting].[Reporting Date] = t.[ReportingDate] AND
[Forecasting].[Quantity] = t.[Quantity] AND
[Forecasting].[Amount] = t.[Amount]
次の表では、予測の結果を比較します。
元の予測:
モデル領域 | ReportingDate | 数量 (Quantity) |
---|---|---|
M200 Pacific | 2008 年 7 月 25 日午前 12:00:00 | 46 |
M200 Pacific | 2008 年 8 月 25 日午前 12:00:00 | 44 |
M200 Pacific | 2008 年 9 月 25 日午前 12:00:00 | 42 |
更新された予測:
モデル領域 | ReportingDate | 数量 (Quantity) |
---|---|---|
M200 Pacific | 2008 年 7 月 25 日午前 12:00:00 | 91 |
M200 Pacific | 2008 年 8 月 25 日午前 12:00:00 | 89 |
M200 Pacific | 2008 年 9 月 25 日午前 12:00:00 | 84 |
例 3: 新しいデータの追加とEXTEND_MODEL_CASESの使用
例 3 は、 EXTEND_MODEL_CASES オプションを使用して新しいデータを提供し、既存のデータ系列の末尾に追加する方法を示しています。 既存のデータ ポイントを置き換えるのではなく、新しいデータをモデルに追加します。
次の例では、NATURAL PREDICTION JOIN の後の SELECT ステートメントで新しいデータを指定します。 この構文では複数行の新しい入力を指定できますが、それぞれの新しい入力行のタイムスタンプが一意である必要があります。
SELECT [Model Region],
PredictTimeSeries([Forecasting].[Quantity], 5, EXTEND_MODEL_CASES)
FROM
[Forecasting]
NATURAL PREDICTION JOIN
(SELECT
1 as [Reporting Date],
10 as [Quantity],
'M200 Europe' AS [Model Region]
UNION SELECT
2 as [Reporting Date],
15 as [Quantity],
'M200 Europe' AS [Model Region]
) AS T
WHERE ([Model Region] = 'M200 Europe'
OR [Model Region] = 'M200 Pacific')
クエリでは EXTEND_MODEL_CASES オプションが使用されるため、Analysis Services は予測に対して次のアクションを実行します。
2 か月分の新しいデータをモデルに追加して、トレーニング ケースの合計サイズを大きくします。
前のケース データの末尾から予測を開始します。 そのため、最初の 2 つの予測は、モデルに追加した新しい実際の売上データを表します。
新しく展開されたモデルに基づいて、残りの 3 つのタイム スライスの新しい予測を返します。
次の表に、例 2 のクエリの結果を示します。 M200 ヨーロッパで返される最初の 2 つの値は、指定した新しい値とまったく同じであることに注意してください。 この動作は仕様であり、新しいデータの末尾から予測を開始するには、開始時刻と終了時刻のステップを指定する必要があります。
また、太平洋地域については、新しいデータを指定していません。 そのため、Analysis Services は、5 つのタイム スライスすべてに対して新しい予測を返します。
数量: M200 ヨーロッパ。 EXTEND_MODEL_CASES:
$TIME | 数量 (Quantity) |
---|---|
7/25/2008 0:00 | 10 |
8/25/2008 0:00 | 15 |
9/25/2008 0:00 | 72 |
10/25/2008 0:00 | 69 |
11/25/2008 0:00 | 68 |
数量: M200 Pacific。 EXTEND_MODEL_CASES:
$TIME | 数量 (Quantity) |
---|---|
7/25/2008 0:00 | 46 |
8/25/2008 0:00 | 44 |
9/25/2008 0:00 | 42 |
10/25/2008 0:00 | 42 |
11/25/2008 0:00 | 38 |
例 4: 時系列予測の統計を返す
PredictTimeSeries 関数は、パラメーターとしてのINCLUDE_STATISTICSをサポートしていません。 ただし、次のクエリを使用して、時系列クエリの予測統計を返すことができます。 この方法は、テーブル列を入れ子にしているモデルにも使用できます。
この特定のモデルでは、予測可能な属性は Quantity であるため、PredictTimeSeries 関数の最初の引数として [Quantity]
を使用する必要があります。 モデルで別の予測可能な属性を使用している場合は、別の列名に置き換えることができます。
SELECT FLATTENED [Model Region],
(SELECT
$Time,
[Quantity] as [PREDICTION],
PredictVariance([Quantity]) AS [VARIANCE],
PredictStdev([Quantity]) AS [STDEV]
FROM
PredictTimeSeries([Quantity], 3) AS t
) AS t
FROM Forecasting
WHERE [Model Region] = 'M200 Europe'
OR [Model Region] = 'M200 North America'
サンプルの結果 :
モデル領域 | t.$TIME | t.PREDICTION | t.VARIANCE | t.STDEV |
---|---|---|---|---|
M200 ヨーロッパ | 2008 年 7 月 25 日午前 12:00:00 | 121 | 11.6050581415597 | 3.40661975300439 |
M200 ヨーロッパ | 2008 年 8 月 25 日午前 12:00:00 | 142 | 10.678201866621 | 3.26775180615374 |
M200 ヨーロッパ | 2008 年 9 月 25 日午前 12:00:00 | 152 | 9.86897842568614 | 3.14149302493037 |
M200 North America | 2008 年 7 月 25 日午前 12:00:00 | 163 | 1.20434529288162 | 1.20434529288162 |
M200 North America | 2008 年 8 月 25 日午前 12:00:00 | 178 | 1.65031343900634 | 1.65031343900634 |
M200 North America | 2008 年 9 月 25 日午前 12:00:00 | 156 | 1.68969399185442 | 1.68969399185442 |
Note
この例では、FLATTENED キーワードを使用して、結果を表形式でわかりやすくしました。ただし、プロバイダーで階層的な行セットがサポートされている場合は、FLATTENED キーワードを省略できます。 FLATTENED キーワードを省略すると、クエリは 2 つの列、 [Model Region]
データ系列を識別する値を含む最初の列、および入れ子になった統計テーブルを含む 2 番目の列を返します。
参照
データ マイニング拡張機能 (DMX) 関数リファレンス
タイム シリーズ モデルのクエリ例
Predict (DMX)