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の間(両端を含まない)の数値にする必要があります。 |
この設定では、予測に対して目的とする信頼水準を指定します。 指定した信頼区間の上限と下限が報告されます。この設定が指定されていない場合、デフォルトの信頼水準は |
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