14 時系列

Oracle Machine Learning回帰機能としての時系列について学習します。

関連項目

14.1 時系列とは

時系列は、既知のターゲット値履歴のみに基づいてターゲット値を予測する機械学習手法です。これは、特殊な形式の回帰であり、文献では自己回帰モデリングと呼ばれています。

時系列分析への入力は、一連のターゲット値です。ケースID列は、順序の並びを指定します。ケースIDは、NUMBER型または日付型(date、datetime、timestamp with timezone、timestamp with local timezone)にできます。ケースIDの型を問わず、ユーザーは予測計算でモデルに傾向または季節的影響、またはその両方を含めるよう要求できます。ケースIDが日付型である場合、ユーザーは、ターゲット値を集計する時間間隔(たとえば、月)と集計手段(たとえば、sum)を指定する必要があります。集計は、モデルを構築する前に、アルゴリズムによって実行されます。

時系列モデルは、ある期間の各ステップのターゲット値の推定値を提供します。期間には、履歴データに加え最大30ステップまで含めることができます。他の回帰モデルと同様に、時系列モデルは、履歴データへの適合度を測定する様々な統計を計算します。

予測は、企業や政府の意思決定の重要な要素です。戦略的レベル、戦術的レベルおよび運営レベルでの用途があります。予測の用途は、次のとおりです。
  • 革新による成長率や戦略的効果などの投資利益率を予測する

  • コスト、在庫要件、顧客満足度の予測などの戦術的問題に対処する

  • 運用目標を設定し、標準への品質と適合性を予測する

関連項目

14.2 時系列モデルの選択

モデルの選択は、時系列データのパターンの認識に依存します。データに影響する傾向、季節性、またはその両方を考慮してください。

時系列データには、予測精度に影響する可能性のあるパターンが含まれていることがあります。たとえば、経済成長期には、売上高が増加傾向にある可能性があります。特定の季節に売上高が増加する可能性があります(夏季の水着など)。このような系列に対応するには、傾向、季節的影響、またはその両方を組み込んだモデルを選択することが有効です。

傾向を単一の定数で表す必要がある場合は、傾向の推定が難しい場合があります。たとえば、成長率が10%である場合、その値は7ステップ後に倍になります。少ない時間ステップに適したローカル成長率は、そのようなレベルに簡単に対処できますが、その後低下してしまします。減衰傾向モデルは、累積する傾向効果を低減することによって、このようなデータをより正確に表すことができます。減衰傾向のモデルは、履歴データに対する傾向効果の変動性をよりよく表すことができます。減衰傾向のモデルは、データに大きな傾向があるが、変動傾向である場合に適しています。

モデリングは誤差を減らそうとするため、誤差の測定方法がモデルの予測に影響する可能性があります。たとえば、広い範囲の値を示すデータは、レベルの比率としての誤差によってよりよく表すことができます。山の標高測定における数百フィートの誤差は、子どもの身長測定における数インチの誤差に相当する可能性があります。値に関連して測定される誤差は、乗算誤差と呼ばれます。値全体で同じである誤差は、加算誤差と呼ばれます。モデルに乗算効果がある場合、誤差タイプは乗算です。明示的な乗算効果がない場合、誤差タイプはユーザー指定によって決まります。タイプは、個々の効果で同じである必要はありません。たとえば、傾向を加算的にすると同時に、季節性を乗算的にできます。このような特定のタイプと効果を混合した組合せは、一般的なHolt-Wintersモデルを定義しています。

ノート:

乗算誤差は、ゼロまたは負の値を含むデータには適切ではありません。したがって、データにこのような値が含まれている場合は、乗算効果を持つモデルを選択するか、誤差タイプを乗算に設定することをお薦めします。

14.3 自動時系列モデル検索

特定のモデルが定義されていない場合に、時系列予測に最適なモデル・タイプを自動的に決定します。

モデル・タイプ(EXSM_MODEL)を指定していない場合、デフォルトの動作は、アルゴリズムがモデル・タイプを自動的に決定します。ESM設定は、「DBMS_DATA_MINING - アルゴリズムの設定: 指数平滑法」にリストされています。時系列モデル検索では、様々なモデルが考慮され、最適なモデルが選択されます。季節モデルの場合、季節性は自動的に決定されます。

次の例では、最適なESMモデルを自動的に選択するモデルの作成に使用できるサンプル・コード・スニペットを示します。この例では、EXSM_MODEL設定が定義されていないため、最適なモデルをアルゴリズムで選択できます。

BEGIN DBMS_DATA_MINING.DROP_MODEL('ESM_SALES_FORECAST_1');
EXCEPTION WHEN OTHERS THEN NULL; END;
/
DECLARE
    v_setlst DBMS_DATA_MINING.SETTING_LIST;
BEGIN
    
    v_setlst('ALGO_NAME')            := 'ALGO_EXPONENTIAL_SMOOTHING';
    v_setlst('EXSM_INTERVAL')        := 'EXSM_INTERVAL_QTR'; 
    v_setlst('EXSM_PREDICTION_STEP') := '4';                  

    DBMS_DATA_MINING.CREATE_MODEL2(
        MODEL_NAME          => 'ESM_SALES_FORECAST_1',
        MINING_FUNCTION     => 'TIME_SERIES',
        DATA_QUERY          => 'select * from ESM_SH_DATA',
        SET_LIST            => v_setlst,
        CASE_ID_COLUMN_NAME => 'TIME_ID',
        TARGET_COLUMN_NAME  => 'AMOUNT_SOLD');
END;
/

14.4 複数時系列モデル

複数の時系列は、時系列回帰への入力として使用する、共通の時間間隔が設定された複数の時系列モデルを作成するための便利な操作です。

時系列モデルの1つを、関心があるターゲット時系列として指定します。すべての時系列出力はターゲット用に生成されます。他の時系列は、ターゲットと相関関係があると仮定されます。この操作では、時系列ごとにバックキャストと予測が生成され、指定されたターゲット時系列の信頼限界の上限と下限が計算されます。この操作は、降雨、売上、顧客満足度など、広範なイベントの予測に使用できます。

天気予報の例では、温度および湿度の属性を依存関係または相関関係がある時系列と見なすことができ、降雨量をターゲット時系列として指定できます。

14.4.1 時系列でのバックキャスト

降雨量、気温、湿度の複数時系列の例では、バックキャストは履歴データのモデルによって生成される推定値になります。

たとえば、降雨量が湿度と依存関係がある場合は、関心がある期間の湿度の値があると役立ちます。先週など、すでに発生しており、モデルの構築に使用している期間の場合は、先月ではなく先週の湿度が必要になります。

14.4.2 複数時系列モデルの作成方法

Oracleの指数平滑化は、単一の時系列予測に加えて、モデル作成方法への単一のコールで複数時系列モデルの作成を扱うように拡張されています。

複数時系列は時系列リストEXSM_SERIES_LISTを指定して作成します。残りのパラメータは、ESMモデルの場合と同じです。天気予報の例では、構築データ・セットとスコア・データ・セットを設定できます。構築データセットには、指定したターゲット時系列(雨量)、依存関係がある時系列(温度および湿度)が含まれます。DM$VPモデル・ディテール・ビューを使用して、指定されたターゲット時系列(雨量)の予測を依存関係がある時系列(温度と湿度)とともに表示します。DM$VRモデル・ディテール・ビューを使用して、ターゲット時系列(雨量)、湿度および温度のバックキャストを表示します。時系列モデルのバックキャストおよび予測は、一般化線形モデル、ニューラル・ネットワーク、時系列回帰用のXGBoostなどの回帰手法に入力できます。

この例のサンプル・コードでは、https://github.com/oracle-samples/oracle-db-examples/blob/main/machine-learning/sql/23ai/oml4sql-time-series-regression-dataset.sqlからダウンロードして実行できる株式市場データを使用しています。

次の例では、ターゲット属性DAXが、予測しようとしている株式市場指数です。依存関係があり、一般的な株式市場指数でもある属性(SMI、CAC、FTSE)が、複数の時系列属性として渡されます。複数の属性が設定された時系列リスト(EXSM_SERIES_LIST)を指定することにより、指数平滑法の設定を使用して複数の時系列モデルが構築されます。

  1. 複数の時系列モデルを構築します。
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
    BEGIN
        v_setlst('ALGO_NAME')            := 'ALGO_EXPONENTIAL_SMOOTHING';
        v_setlst('EXSM_INTERVAL')        := 'EXSM_INTERVAL_DAY';
        v_setlst('EXSM_MODEL')           := 'EXSM_ADDWINTERS_DAMPED';
        v_setlst('EXSM_SEASONALITY')     := '7';
        v_setlst('EXSM_PREDICTION_STEP') := '1';
        v_setlst('EXSM_SERIES_LIST')     := 'SMI,CAC,FTSE';
          
        dbms_data_mining.create_model2(
                   MODEL_NAME          => 'MSDEMO_MODEL',
                   MINING_FUNCTION     => 'TIME_SERIES',
                   DATA_QUERY          => 'SELECT * FROM EUSTOCK',
                   CASE_ID_COLUMN_NAME => 'DATES',
                   TARGET_COLUMN_NAME  => 'DAX',
                   SET_LIST            => v_setlst);
    END;
    /
    
  2. DM$VPMSDEMO_MODELビューを使用して、予測を表示します。
    SELECTCASE_ID, VALUE, PREDICTION, UPPER, LOWERFROMDM$VPMSDEMO_MODEL;
  3. DM$VRMSDEMO_MODELビューを使用して、バックキャストを表示します。
    SELECT * FROM DM$VRMSDEMO_MODEL
    FETCH FIRST 10 ROWS ONLY;
    このモデルの出力は時系列回帰で使用されます。

14.5 時系列回帰

他の機能や関連する系列を含めて精度を高めることで、複数系列作成で時系列回帰を拡張します。

複数系列作成では時系列回帰が可能です。時系列回帰では、時系列モデルに含めることができる機能が拡張され、予測精度が向上する可能性があります。「ターゲット」時系列に関連するか依存関係があると思われるその他の時系列を、追加の特性にすることもできます。温度と湿度は両方とも降雨と依存関係がある時系列であるため、これら2つの属性の履歴データを参照すれば、将来の降雨を予測できます。温度が高く、湿度が高い場合、一般的に降雨の可能性が高くなります。

時系列回帰モデルでは、温度と湿度の関係、およびその他の要因(予測対象の場所および標高など)が考慮されます。次に、降雨量(ターゲット時系列)の予測が上限と下限とともにモデルによって生成されます。たとえば、雨の確率が90%で、降雨量の上限が1インチであるとモデルが予測した場合は、十分な雨具が手元にあることを確認できます。

バックキャストを使用すると、将来の期間の予測の精度を向上させることができます。予測に回帰を使用する際の課題は、予測子の将来の値を指定する必要があることです。たとえば、温度と湿度が予測子である場合、予測するには、降雨系列と同じ時間スケールで将来値を把握する必要があります。

関連項目:

Hyndman, R.J.、Athanasopoulos, G.共著『Forecasting: Principles and Practice, 3rd edition』(モナシュ大学、計量経済統計学科、VIC3800、オーストラリア、2021年5月、第7章)

14.5.1 時系列回帰モデルの構築方法

Oracleの指数平滑化では、指数平滑法を使用して予測子の時系列を予測することによって、ターゲット時系列と同じ時系列の将来の値を知るという問題を解きます。

将来の期間を予測する回帰モデルを構築するには、相関関係がある時系列にその将来期間の値を設定する必要があります。したがって、相関関係があるすべての時系列を予測する必要があります。相関関係がある時系列のバックキャストは、相関関係がある時系列値の平滑化バージョンとして、含められ、回帰モデルへの入力として使用できます。バックキャストは、Oracle機械学習時系列モデルの標準出力の一部であるため、ターゲット時系列でも使用できます。ターゲット時系列のバックキャストも回帰モデルに含めることができます。

構築データセットおよびスコア・データセットを作成することもできます。構築データ・セットには、ターゲット時系列(雨などの予測時系列)、ターゲット系列のバックキャスト(雨のバックキャスト)、および相関関係がある時系列のバックキャスト(温度と湿度のバックキャスト)が含まれます。時系列モデルのバックキャストと予測は、どちらも回帰モデルへの入力として使用できます。これらの時系列ではすべて同じ期間を使用するため、ターゲットの値と予測子の値が共存して発生します。

スコア・データ・セットは、構築データ・セットと同じスキーマに従いますが、将来の値に必要な予測を提供します。スコア・データ・セットは、回帰モデルのapplyプロシージャに対して供給できます。バックキャストがより平滑化され、構造的に予測との一貫性がより高くなります。ベースライン・モデルに対する回帰モデルの段階的な改善は、ターゲット系列のバックキャストで確認できます。

データベースの汎用性により、様々なバリエーションの時系列回帰が可能です。カテゴリ変数の設定場所である構築データ・セットとスコア・データ・セットに、ユーザーが休日や環境変化などの要因を追加できます。複数時系列の回帰では、依存関係がある変数に大きな影響を及ぼす可能性があるイベントまたは条件を、フラグ変数を使用して設定できます。たとえば、特定の日が祝日かどうか、または特定の月が冬の月かどうかを示すフラグ変数を使用できます。このような要因をモデルに含めて、依存関係がある変数にカテゴリ変数が与える影響を考慮することで、予測の精度が向上します。

休日はバイナリ値の列(0および1)として表現できます。たとえば、national_holiday列を作成して、祝日の場合は1、そうでない場合は0に値を設定できます。需要予測では、競合製品の導入など、認識された環境の変更もバイナリ値の列(導入前は0、導入後は1)として表示できます。

さらに、特殊なケースとして、依存関係がある時系列の将来の値をユーザーが知っている場合は、元の構築表に結合するデータ・セットをユーザーが作成すれば、回帰のbuildプロシージャでバックキャストを元の値で置き換えることができます。このユーザー作成データ・セットにより、構築データ・セットが置き換えられます。

次の例では、株式市場のデータを使用して、トレーニング、実績およびテストのデータ・セットを作成します。ESMと回帰の精度を比較するために、予測データ・セットに実績値の特殊なケースが用意されています。変数prodが、カテゴリ値を設定するフラグ変数です。新製品の導入など、環境の変化を指定します。DM$VR<model_name>モデル詳細ビューには、時系列回帰構築スキーマまたはターゲット列の予測の詳細が表示されます。

  1. 構築/トレーニング・データ・セットを作成します。
    BEGIN DROP TABLE tmesm_ms_train;
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    CREATE TABLE tmesm_ms_train as
    SELECT CASE_ID, DAX, DM$DAX, DM$SMI, DM$CAC, DM$FTSE,
           CASE WHEN case_id < to_date('1998-02-03','YYYY-MM-DD')
           THEN 0 ELSE 1 END AS prod
    FROM DM$VRMSDEMO_Model order by 1;
  2. 実績データ・セットを作成します(これは、依存関係がある時系列の将来の値がわかっている特殊なケースのシナリオです)。
    BEGIN EXECUTE IMMEDIATE 'DROP TABLE tmesm_ms_actual';
    EXCEPTION WHEN OTHERS THEN NULL;
    END;
    /
    CREATE TABLE tmesm_ms_actual (case_id DATE, DAX binary_double);
    INSERT INTO tmesm_ms_actual VALUES(DATE '1998-02-04', 4633.008);
    commit;
  3. 表を問い合せて、出力を確認します。
    select * from tmesm_ms_actual;
    CASE_IDおよびDAX4633.00が表示されます。
  4. テスト・データ・セットを作成します。
    BEGIN EXECUTE IMMEDIATE 'DROP TABLE tmesm_ms_test';
    EXCEPTION WHEN OTHERS THEN NULL; END;
    CREATE TABLE tmesm_ms_test as
    SELECT a.case_id, b.DAX, DM$DAX, DM$SMI, DM$CAC, DM$FTSE, 1 prod
    FROM   DM$VTMSDEMO_model a, tmesm_ms_actual b
    WHERE  a.case_id=b.case_id;

    プロシージャが正常に完了し、tmesm_ms_test表が作成されたことが出力に表示されます。

  5. トレーニング・データ・セットを使用して、GLM時系列回帰モデルを作成します。
    SET echo OFF;
    BEGIN DBMS_DATA_MINING.DROP_MODEL('MS_GLM_MODEL');
    EXCEPTION WHEN OTHERS THEN NULL; END;
    /
    SET echo ON;
    DECLARE
        v_setlst DBMS_DATA_MINING.SETTING_LIST;
    BEGIN
        v_setlst('ALGO_NAME')          := 'ALGO_GENERALIZED_LINEAR_MODEL';
         
        DBMS_DATA_MINING.CREATE_MODEL2(
                   MODEL_NAME          => 'MS_GLM_MODEL',
                   MINING_FUNCTION     => dbms_data_mining.regression,
                    DATA_QUERY         => 'SELECT * FROM tmesm_ms_train',
                   CASE_ID_COLUMN_NAME => 'CASE_ID',
                   TARGET_COLUMN_NAME  => 'DAX',
                   SET_LIST            => v_setlst);   
    END;
    /
  6. モデル詳細ビューを表示してモデルを分析します。
    SELECT VIEW_NAME, VIEW_TYPE
    FROM   USER_MINING_MODEL_VIEWS
    WHERE  MODEL_NAME='MSDEMO_MODEL'
    ORDER BY VIEW_NAME;
  7. バックキャストを表示します。
    SELECT *
    FROM   DM$VRMSDEMO_MODEL
    ORDER BY CASE_ID
    FETCH FIRST 10 ROWS ONLY;
  8. 予測を表示します。
    SELECT *
    FROM DM$VTMSDEMO_MODEL
    ORDER BY CASE_ID
    FETCH FIRST 10 ROWS ONLY;

    さらに、ベースライン(ESM)予測を回帰予測と比較できます。

    https://github.com/oracle-samples/oracle-db-examples/tree/main/machine-learning/sql/23aiからoml4sql-time-series-regression.sqlにアクセスすると、完全な例を表示できます。

14.6 時系列の統計

一般的に使用される統計を適用することによってモデルの品質を評価する方法を学習します。

他の回帰関数と同様に、全体的なモデル品質を評価するためによく使用される統計があります。エキスパート・ユーザーは、モデル構築プロセスによって最適化するための基準として、これらの性能指数の1つを指定することもできます。モデル固有のデフォルト値を使用できるため、最適化基準の選択は必須ではありません。

14.6.1 条件付き対数尤度

対数尤度は、モデルのパラメータ値に依存する予測の確率推定値を提供するモデルの最適化基準としてよく使用される性能指数です。

モデルの確率は、トレーニング・データの実際の値に対して推定してから、パラメータ値の尤度の推定値をもたらします。観測されたターゲット値に対して高い確率をもたらすパラメータ値は、高い尤度を持つので、適切なモデルを示します。対数尤度の計算は、モデルの形式によって異なります。

条件付き対数尤度は、パラメータを2つのグループに分割します。一方のグループは正しいものとみなされ、他方のグループは誤差の発生源とみなされます。条件付き対数尤度は、前者のグループに条件付けられた後者のグループの対数尤度です。たとえば、指数平滑法(ESM)モデルは、初期モデル状態を推定します。ESMモデルの条件付き対数尤度は、その初期モデル状態(正確であると想定)が条件となっています。ESM条件付き対数尤度は次のとおりです。

ここで、etは時間tでの誤差であり、k(x(t-1) )は、加算誤差を持つESMモデルの場合は1であり、乗算誤差を持つモデルでは以前の時間ステップでの推定レベルです。

14.6.2 平均平方根誤差(MSE)とその他の誤差の測定

平均平方根誤差(MSE)を計算して予測精度を評価します。他の誤差の評価には、その他のメトリックを使用します。

最適化基準として使用される平均平方根誤差は、次のように計算します:

ここで、時間tにおける誤差は、実際の値と加算誤差を持つモデルの時間tにおける1ステップ先の予測値との間の差を、乗算誤差を持つモデルの1ステップ先の予測で割ったものです。

ノート:

これらの「予測」は、すでに観測された期間に対するものであり、入力される時系列の一部です。

時系列モデルは、先行する複数のステップごとに予測できるため、そのような予測に関連する誤差を時系列で測定できます。もう1つの性能指数である平均平方根誤差の平均値(AMSE)では、まさにそのことが行われます。入力された時系列の各期間について、多ステップ予測を計算し、それらの予測の誤差を計算して、誤差の平均を取ります。AMSEは、MSEが誤差タイプ(加算または乗算)を認識するのと同じように、個々のエラーを正確に計算します。ステップ数kは、ユーザーによって決定されます(デフォルトは3)。式は次のとおりです。

MSEのその他の性能指標には、MSEの平方根である残差標準誤差(RMSE)と、誤差の絶対値の平均である平均絶対誤差(MAE)があります。

14.6.3 不規則な時系列

不規則な時系列とは、観測値間の時間間隔が等間隔でない時系列データです。

一般的な方法の1つのは、隣接するステップ間の時間間隔を等間隔にすることです。しかし、このような間隔を時系列に強制することは、必ずしも適切または現実的ではありません。不規則な時系列では、時系列が等間隔であると仮定するのではなく、ケースIDの日付と時間の値を使用して観測値の間隔を計算します。モデルは、観測された間隔で、観測値に直接構築されます。Oracleの時系列分析では、不規則な時系列が処理されます。

14.6.4 構築および適用

新しいデータが到着したら新しい時系列モデルを作成し、作成プロセスの間に統計値と予測値を生成します。

Oracle Machine Learning for SQLの多くの機能は、作成した1つのモデルをいくつもの異なる入力データセットに適用できるように、構築および適用の操作がそれぞれに異なります。ただし、時系列の入力はターゲット値の履歴のみで構成されます。したがって、適切な入力データのセットは1つのみとなります。新しいデータが到着したら、新しいモデルを構築するようにすることをお薦めします。モデルは一度きりの使用を想定しているため、モデルの統計値と予測値はモデルの作成時に生成され、モデル・ビューを通じて確認できます。

14.7 時系列のアルゴリズム

Oracle Machine Learningでは、時系列データからの予測には指数平滑法が使用されます。

関連項目