9.20 指数平滑法
oml.esm関数は、指数平滑法(ESM)アルゴリズムを使用して時系列モデルを作成します。
               
指数平滑法は、半世紀以上にわたって予測に広く使用されています。戦略的、戦術的および運用レベルで応用できます。たとえば、戦略的レベルでは、投資利益率、成長率、イノベーションの効果などを推定するために予測が使用されます。戦術的レベルでは、原価、在庫要件、顧客満足などを推定するために予測が使用されます。運用レベルでは、ターゲットの設定や品質および標準への適合性を予想するために予測が使用されます。
最も単純な形式の指数平滑法は単一パラメータを使用した移動平均法であり、この手法では、将来の値に対する過去のレベルの影響の指数関数的な減少をモデル化します。指数平滑法は、様々な拡張によって、Box-Jenkins自己回帰和分移動平均(ARIMA)法などの、他のよく知られた方法よりも幅広いクラスのモデルを扱います。Oracle Machine Learningは、理論上およびパフォーマンス上の利点を提供する単一の誤差原因(SSOE)の仮定を組み込んだ最先端の状態空間法を使用する指数平滑法を実装します。
ESMモデルの設定
次の表に、ESMモデルの設定を示します。
表9-18 ESMモデルの設定
| 設定名 | 設定値 | 説明 | 
|---|---|---|
| EXSM_MODEL | {EXSM_SIMPLE, EXSM_SIMPLE_MULT, EXSM_HOLT, EXSM_HOLT_DMP, EXSM_MUL_TRND, EXSM_MULTRD_DMP, EXSM_SEAS_ADD, EXSM_SEAS_MUL, EXSM_HW, EXSM_HW_DMP, EXSM_HW_ADDSEA, EXSM_DHW_ADDSEA, EXSM_HWMT, EXSM_HWMT_DMP}セット内の値を取ることができます | この設定により、モデルが指定されます。 
 
 
 
 
 
 
 
 
 
 
 
 
 
 デフォルト値は | 
| 
 | 
 | この設定により、季節性循環の長さとして正の整数値が指定されます。指定する値は、 この設定は、季節性を持つモデルにのみ適用可能であり、指定する必要があります。それ以外の場合、モデルによりエラーがスローされます。 
 | 
| 
 | {EXSM_INTERVAL_YEAR, EXSM_INTERVAL_QTR, EXSM_INTERVAL_MONTH,EXSM_INTERVAL_WEEK, EXSM_INTERVAL_DAY, EXSM_INTERVAL_HOUR, EXSM_INTERVAL_MIN,EXSM_INTERVAL_SEC}セット内の値を取ることができます | この設定は、時間列( 入力表の時間列が日時型の場合、 入力表の時間列がOracle数値型の場合、 | 
| 
 | {EXSM_ACCU_TOTAL, EXSM_ACCU_STD, EXSM_ACCU_MAX, EXSM_ACCU_MIN, EXSM_ACCU_AVG, EXSM_ACCU_MEDIAN, EXSM_ACCU_COUNT}セット内の値を取ることができます | この設定は、時間列が日時タイプである場合にのみ適用され、指定する必要があります。この設定により、入力時系列から累積された時系列の値を生成する方法が指定されます。 | 
| 
 | {EXSM_MISS_MIN, EXSM_MISS_MAX, EXSM_MISS_AVG, EXSM_MISS_MEDIAN, EXSM_MISS_LAST, EXSM_MISS_FIRST, EXSM_MISS_PREV, EXSM_MISS_NEXT, EXSM_MISS_AUTO}セット内の値を取るオプションを指定することもできます。 | この設定では、欠損値の処理方法を指定します。欠損値は、入力データや時系列の累積処理で発生することがあります。数値またはオプションのどちらかを指定できます。数値が指定された場合は、すべての欠損値がその数値に設定されます。 
 
 
 
 
 
 
 
 
 この設定が指定されていない場合、 | 
| 
 | 1-30の数値に設定する必要があります。 | この設定では、何ステップ先の予測を行うかを指定します。 設定されていない場合、デフォルト値は | 
| 
 | 0と1の間の数値(0と1を含まない)に設定する必要があります。 | この設定では、予測に対して目的とする信頼水準を指定します。 指定した信頼区間の上限と下限が報告されます。この設定が指定されていない場合、デフォルトの信頼水準は | 
| EXSM_OPT_CRITERION  | 集合{EXSM_OPT_CRIT_LIK, EXSM_OPT_CRIT_MSE, EXSM_OPT_CRIT_AMSE, EXSM_OPT_CRIT_SIG, EXSM_OPT_CRIT_MAE}に含まれる値を設定します。 | この設定では、目的とする最適化基準を指定します。最適化基準は、同じデータへのモデルの適合性を比較するための診断として役立ちます。 
 
 
 
 
 デフォルト値は、 | 
| 
 | 正の整数 | この設定により、誤差メトリックの平均二乗誤差の平均(AMSE)を計算するときに使用されるウィンドウの長さが指定されます。 | 
例9-20 oml.esmクラスの使用
この例では、ESMモデルを作成し、oml.esmクラスのメソッドの一部を使用します。 
                  
import oml
import pandas as pd
df = pd.DataFrame({'EVENT': ['A', 'B', 'C', 'D'],
                   'START': ['2021-10-04 13:29:00', '2021-10-07 12:30:00',
                             '2021-10-15 04:20:00', '2021-10-18 15:45:03'],
                   'END':   ['2021-10-08 11:29:06', '2021-10-15 10:30:07',
                             '2021-10-29 05:50:15', '2021-10-22 15:40:03']})
df['START'] = pd.to_datetime(df['START'])
df['END'] = pd.to_datetime(df['END'])
df['DURATION'] = df['END'] - df['START']  
df['HOURS'] = df['DURATION'] / pd.Timedelta(hours=1)
df['MINUTES'] = df['DURATION'] / pd.Timedelta(minutes=1)
#For on-premises database follow the below command to connect to the database#
oml.connect("<username>","<password>", dsn="<dsn>")
dat = oml.create(df, table='DF')
train_x = dat[:, 1]
train_y = dat[:, 4]
setting = {'EXSM_INTERVAL':'EXSM_INTERVAL_DAY'}
esm_mod = oml.esm(**setting).fit(train_x, train_y, time_seq = 'START')
esm_mod 
train_x = dat[:, 4]
train_y = dat[:, 5]
esm_mod = oml.esm().fit(train_x, train_y, time_seq = 'HOURS')
esm_modこの例のリスト
Create pandas DataFrame with start and end dates for an event. Convert start and end date columns to datetime, and create new columns that contain timedelta between the start and end dates. Convert timedelta into total number of hours and convert timedelta into total number of minutes.
>>> import oml
>>> import pandas as pd
>>> df = pd.DataFrame({'EVENT': ['A', 'B', 'C', 'D'],
                   'START': ['2021-10-04 13:29:00', '2021-10-07 12:30:00',
                             '2021-10-15 04:20:00', '2021-10-18 15:45:03'],
                   'END':   ['2021-10-08 11:29:06', '2021-10-15 10:30:07',
                             '2021-10-29 05:50:15', '2021-10-22 15:40:03']})
>>> df['START'] = pd.to_datetime(df['START'])
>>> df['END'] = pd.to_datetime(df['END'])
>>> df['DURATION'] = df['END'] - df['START']  
>>> df['HOURS'] = df['DURATION'] / pd.Timedelta(hours=1)
>>> df['MINUTES'] = df['DURATION'] / pd.Timedelta(minutes=1)
>>> #For on-premises database follow the below command to connect to the database#
>>> oml.connect("<username>","<password>", dsn="<dsn>")
>>> dat = oml.create(df, table='DF')
Using Datetime type
>>> train_x = dat[:, 1]
>>> train_y = dat[:, 4]
>>> setting = {'EXSM_INTERVAL':'EXSM_INTERVAL_DAY'}
>>> esm_mod = oml.esm(**setting).fit(train_x, train_y, time_seq = 'START')
>>> esm_mod
Algorithm Name: Exponential Smoothing
Mining Function: TIME_SERIES
Target: HOURS
Settings:
                    setting name               setting value
0                      ALGO_NAME  ALGO_EXPONENTIAL_SMOOTHING
1                EXSM_ACCUMULATE             EXSM_ACCU_TOTAL
2          EXSM_CONFIDENCE_LEVEL                         .95
3                  EXSM_INTERVAL           EXSM_INTERVAL_DAY
4                      EXSM_NMSE                           3
5         EXSM_OPTIMIZATION_CRIT           EXSM_OPT_CRIT_LIK
6           EXSM_PREDICTION_STEP                           1
7                EXSM_SETMISSING              EXSM_MISS_AUTO
8                    ODMS_BOXCOX          ODMS_BOXCOX_ENABLE
9                   ODMS_DETAILS                 ODMS_ENABLE
10  ODMS_MISSING_VALUE_TREATMENT     ODMS_MISSING_VALUE_AUTO
11                 ODMS_SAMPLING       ODMS_SAMPLING_DISABLE
12                     PREP_AUTO                          ON
Computed Settings:
  setting name setting value
0   EXSM_MODEL   EXSM_SIMPLE
Global Statistics:
       attribute name attribute value
0   -2 LOG-LIKELIHOOD        -21.1618
1                 AIC         48.3236
2                AICC            None
3               ALPHA     0.000100034
4          ALPHA DISC          0.9999
5                AMSE         12175.3
6                 BIC         46.4825
7           CONVERGED             YES
8       INITIAL ALPHA     0.000100034
9       INITIAL LEVEL         179.353
10                MAE          84.403
11                MSE          9843.9
12           NUM_ROWS               4
13              SIGMA         140.313
14                STD         140.313
Attributes:
Partition: NO
Prediction:
    TIME_SEQ       VALUE  PREDICTION      LOWER       UPPER
0 2021-10-04   94.001667  179.352705        NaN         NaN
1 2021-10-07  190.001944  179.344167        NaN         NaN
2 2021-10-15  337.504167  179.345233        NaN         NaN
3 2021-10-18   95.916667  179.361069        NaN         NaN
4 2021-10-19         NaN  179.352712 -95.656158  454.361582
Using Float type
>>> train_x = dat[:, 4]
>>> train_y = dat[:, 5]
>>> esm_mod = oml.esm().fit(train_x, train_y, time_seq = 'HOURS')
>>> esm_mod
Algorithm Name: Exponential Smoothing
Mining Function: TIME_SERIES
Target: MINUTES
Settings:
                    setting name               setting value
0                      ALGO_NAME  ALGO_EXPONENTIAL_SMOOTHING
1          EXSM_CONFIDENCE_LEVEL                         .95
2                      EXSM_NMSE                           3
3         EXSM_OPTIMIZATION_CRIT           EXSM_OPT_CRIT_LIK
4           EXSM_PREDICTION_STEP                           1
5                EXSM_SETMISSING              EXSM_MISS_AUTO
6                    ODMS_BOXCOX          ODMS_BOXCOX_ENABLE
7                   ODMS_DETAILS                 ODMS_ENABLE
8   ODMS_MISSING_VALUE_TREATMENT     ODMS_MISSING_VALUE_AUTO
9                  ODMS_SAMPLING       ODMS_SAMPLING_DISABLE
10                     PREP_AUTO                          ON
Computed Settings:
  setting name setting value
0   EXSM_MODEL     EXSM_HOLT
Global Statistics:
       attribute name attribute value
0   -2 LOG-LIKELIHOOD         4.47424
1                 AIC         1.05153
2                AICC            None
3               ALPHA     0.000104161
4                AMSE       0.0190133
5                BETA     0.000104153
6                 BIC          -2.017
7           CONVERGED             YES
8       INITIAL LEVEL         8.00977
9       INITIAL TREND        0.452033
10             LAMBDA     4.08563e-05
11                MAE         1175.53
12                MSE       0.0266914
13           NUM_ROWS               4
14              SIGMA        0.188649
15                STD        0.188649
Attributes:
Partition: NO
Prediction:
   TIME_SEQ         VALUE    PREDICTION        LOWER         UPPER
0        94   5640.100000   4807.666451          NaN           NaN
1        95   5755.000000   7554.329741          NaN           NaN
2       190  11400.116667  11869.239245          NaN           NaN
3       337  20250.250000  18649.004898          NaN           NaN
4       338           NaN  29301.840039  19894.31833  41663.104953