diff --git a/tests/references/time_res/test_ozone_Daily.log b/tests/references/time_res/test_ozone_Daily.log index b6ae1a664..d13ea11e5 100644 --- a/tests/references/time_res/test_ozone_Daily.log +++ b/tests/references/time_res/test_ozone_Daily.log @@ -7,45 +7,38 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 3 1955-04 5.0 1955-04-01 4 1955-05 6.5 1955-05-01 INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 14.5, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 14.705, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.515, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 19.111, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 19.415, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.085, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.284, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 17.785, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 20.075, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 20.204, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.194, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.395, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.316, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.303, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.893, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 22.396, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.929, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.515, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 22.723, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_1_Daily' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-06-01T00:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -54,13 +47,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 22.396 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 22.723 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.699, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.494, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) Transformation DecompositionType ... Voting Complexity @@ -78,10 +71,10 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], Forecast Columns Index(['Time_1_Daily', 'Ozone', 'row_number', 'Time_1_Daily_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -122,48 +115,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-07-22 00:00:00" - ], + "TimeDelta": "", + "TimeMax": "2000-07-22 00:00:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_1_Daily" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 22.396 + "Training_Time": 22.723 } @@ -179,42 +201,35 @@ INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transform INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 18.0, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 19.098, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 27.314, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 27.906, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 28.203, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 17.798, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 18.785, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 20.704, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 26.413, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 26.696, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.589, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.905, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.307, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.309, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.69, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.185, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 30.389, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.277, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.894, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 29.591, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_5_Daily' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2002-01-30T00:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -223,13 +238,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 30.389 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 29.591 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.227, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.433, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) Transformation DecompositionType ... Voting Complexity 0 CumSum_Ozone T+S+R ... 663.0833 MSSSS @@ -245,10 +260,10 @@ INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.227, ('FORECASTING', {'Signals': [' Forecast Columns Index(['Time_5_Daily', 'Ozone', 'row_number', 'Time_5_Daily_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -289,48 +304,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2002-10-12 00:00:00" - ], + "TimeDelta": "", + "TimeMax": "2002-10-12 00:00:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_5_Daily" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 30.389 + "Training_Time": 29.591 } diff --git a/tests/references/time_res/test_ozone_Hourly.log b/tests/references/time_res/test_ozone_Hourly.log index 12710b7c7..ef496fda9 100644 --- a/tests/references/time_res/test_ozone_Hourly.log +++ b/tests/references/time_res/test_ozone_Hourly.log @@ -10,42 +10,35 @@ INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transform INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.598, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.803, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.098, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 11.606, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 11.894, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.462, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.856, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 7.556, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 7.565, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 7.781, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.099, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.606, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.102, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.098, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.705, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.41, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.308, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.799, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.999, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.785, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_1_Hourly' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-01-07T08:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -54,13 +47,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 15.308 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 12.785 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.696, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.402, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) Transformation DecompositionType ... Voting Complexity @@ -78,10 +71,10 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], Forecast Columns Index(['Time_1_Hourly', 'Ozone', 'row_number', 'Time_1_Hourly_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -122,48 +115,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-01-09 11:00:00" - ], + "TimeDelta": "", + "TimeMax": "2000-01-09 11:00:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_1_Hourly" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 15.308 + "Training_Time": 12.785 } @@ -179,20 +201,20 @@ INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transform INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 11.794, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.209, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 13.201, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 20.708, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 21.106, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 8.81, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 8.915, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.393, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 17.003, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 17.408, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.195, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.199, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Hour_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.103, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Hour_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.789, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Hour_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.492, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.791, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 24.898, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.906, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.895, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 22.305, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_5_Hourly' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-02-01T16:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Ozone' Min=0.0 Max=1.0 Mean=0.351438 StdDev=0.198875 @@ -202,19 +224,12 @@ INFO:pyaf.std:BEST_DECOMPOSITION '_Ozone_LinearTrend_residue_Seasonal_Hour_resi INFO:pyaf.std:TREND_DETAIL '_Ozone_LinearTrend' [LinearTrend] INFO:pyaf.std:CYCLE_DETAIL '_Ozone_LinearTrend_residue_Seasonal_Hour' [Seasonal_Hour] INFO:pyaf.std:AUTOREG_DETAIL '_Ozone_LinearTrend_residue_Seasonal_Hour_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.1717 MAPE_Forecast=0.1793 MAPE_Test=0.2716 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.1658 SMAPE_Forecast=0.1994 SMAPE_Test=0.2581 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.1635 DiffSMAPE_Forecast=0.1956 DiffSMAPE_Test=0.2522 -INFO:pyaf.std:MODEL_MASE MASE_Fit=0.7499 MASE_Forecast=0.7235 MASE_Test=1.322 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.3422 CRPS_Forecast=0.2974 CRPS_Test=0.36 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.6592 L1_Forecast=0.5617 L1_Test=0.6249 -INFO:pyaf.std:MODEL_L2 L2_Fit=0.9095 L2_Forecast=0.6833 L2_Test=0.7379 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=7.3781 LnQ_Forecast=2.504 LnQ_Test=1.2169 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.5152 MedAE_Forecast=0.5695 MedAE_Test=0.5689 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.6375 KENDALL_TAU_Forecast=0.6963 KENDALL_TAU_Test=0.5954 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0784 KS_Forecast=0.2051 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11769.0 MWU_Forecast=871.0 MWU_Test=64.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.5028 AUC_Forecast=0.5726 AUC_Test=0.4444 +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.1717, 'RMSE': 0.9095, 'MAE': 0.6592, 'MASE': 0.7499} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.1793, 'RMSE': 0.6833, 'MAE': 0.5617, 'MASE': 0.7235} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.2716, 'RMSE': 0.7379, 'MAE': 0.6249, 'MASE': 1.322} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.1717, 'RMSE': 0.9095, 'MAE': 0.6592, 'MASE': 0.7499} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1793, 'RMSE': 0.6833, 'MAE': 0.5617, 'MASE': 0.7235} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2716, 'RMSE': 0.7379, 'MAE': 0.6249, 'MASE': 1.322} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'S', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [SSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES NoTransf None @@ -227,9 +242,9 @@ INFO:pyaf.std:SEASONAL_MODEL_VALUES _Ozone_LinearTrend_residue_Seasonal_Hour 0.0 INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 24.898 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 22.305 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.595, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.715, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) Transformation DecompositionType ... Voting Complexity 0 _Ozone T+S+R ... 305.5 SSSSS @@ -288,14 +303,20 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "S", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-02-12 07:00:00" - ], + "TimeDelta": "", + "TimeMax": "2000-02-12 07:00:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_5_Hourly" }, "Training_Signal_Length": 204 @@ -309,27 +330,50 @@ Forecasts "Trend": "LinearTrend" }, "Model_Performance": { - "AUC": 0.5726, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "S", - "Trend": "S" + "1": { + "AUC": 0.5726, + "DiffSMAPE": 0.1956, + "ErrorMean": -0.3263, + "ErrorStdDev": 0.6004, + "KS": 0.2051, + "KendallTau": 0.6963, + "Length": 39, + "LnQ": 2.504, + "MAE": 0.5617, + "MAPE": 0.1793, + "MASE": 0.7235, + "MannWhitneyU": 871.0, + "MedAE": 0.5695, + "Pearson": 0.8485, + "R2": 0.6029, + "RMSE": 0.6833, + "SMAPE": 0.1994, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2974, - "KS": 0.2051, - "KendallTau": 0.6963, - "LnQ": 2.504, - "MAE": 0.5617, - "MAPE": 0.1793, - "MASE": 0.7235, - "MannWhitneyU": 871.0, - "MedAE": 0.5695, - "RMSE": 0.6833 - } + "12": { + "AUC": 0.5726, + "DiffSMAPE": 0.1956, + "ErrorMean": -0.3263, + "ErrorStdDev": 0.6004, + "KS": 0.2051, + "KendallTau": 0.6963, + "Length": 39, + "LnQ": 2.504, + "MAE": 0.5617, + "MAPE": 0.1793, + "MASE": 0.7235, + "MannWhitneyU": 871.0, + "MedAE": 0.5695, + "Pearson": 0.8485, + "R2": 0.6029, + "RMSE": 0.6833, + "SMAPE": 0.1994, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 24.898 + "Training_Time": 22.305 } diff --git a/tests/references/time_res/test_ozone_Minutely.log b/tests/references/time_res/test_ozone_Minutely.log index 3a482b69c..59b223756 100644 --- a/tests/references/time_res/test_ozone_Minutely.log +++ b/tests/references/time_res/test_ozone_Minutely.log @@ -7,14 +7,14 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 3 1955-04 5.0 1955-04-01 4 1955-05 6.5 1955-05-01 INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.706, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.904, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.995, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.194, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.397, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.789, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.96, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.999, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.475, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.513, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) INFO:pyaf.std:PERF_DUMP_START @@ -26,10 +26,10 @@ INFO:pyaf.std:[ "CumSum_Ozone", "T+S+R", null, - "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR" + "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR" ], "ForecastMAPE": 0.2515, - "Model": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Voting": 196.9167 }, { @@ -39,10 +39,10 @@ INFO:pyaf.std:[ "_Ozone", "T+S+R", null, - "_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR" + "_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.3192, - "Model": "_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR", "Voting": 184.9167 }, { @@ -65,10 +65,10 @@ INFO:pyaf.std:[ "Diff_Ozone", "T+S+R", null, - "Diff_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR" + "Diff_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.3305, - "Model": "Diff_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "Diff_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR", "Voting": 171.9167 }, { @@ -91,10 +91,10 @@ INFO:pyaf.std:[ "_Ozone", "T+S+R", null, - "_Ozone_PolyTrend_residue_bestCycle_byMAPE_residue_NoAR" + "_Ozone_PolyTrend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.4088, - "Model": "_Ozone_PolyTrend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "_Ozone_PolyTrend_residue_Cycle_None_residue_NoAR", "Voting": 154.75 }, { @@ -143,43 +143,36 @@ INFO:pyaf.std:[ "Diff_Ozone", "T+S+R", null, - "Diff_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR" + "Diff_Ozone_Lag1Trend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.2778, - "Model": "Diff_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "Diff_Ozone_Lag1Trend_residue_Cycle_None_residue_NoAR", "Voting": 152.1667 } ] INFO:pyaf.std:PERF_DUMP_END -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.196, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.42, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.084, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.005, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.397, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.014, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.415, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.072, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.161, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.679, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_1_PerMinute' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-01-01T02:32:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -188,13 +181,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 12.415 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 5.679 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.509, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.7, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) Transformation DecompositionType ... Voting Complexity @@ -212,10 +205,10 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], Forecast Columns Index(['Time_1_PerMinute', 'Ozone', 'row_number', 'Time_1_PerMinute_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -256,48 +249,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-01-01 03:23:00" - ], + "TimeDelta": "", + "TimeMax": "2000-01-01 03:23:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_1_PerMinute" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 12.415 + "Training_Time": 5.679 } @@ -313,11 +335,11 @@ INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transform INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 10.085, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 10.393, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.009, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 14.9, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.211, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.197, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 13.4, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 14.003, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.114, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 15.405, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) INFO:pyaf.std:PERF_DUMP_START @@ -349,29 +371,29 @@ INFO:pyaf.std:[ "Voting": 292.0 }, { - "Category": "Integration_Lag1Trend_Seasonal_Minute_NoAR", + "Category": "Integration_Lag1Trend_Cycle_12_NoAR", "Complexity": "MSSSS", "DetailedFormula": [ "CumSum_Ozone", "T+S+R", null, - "CumSum_Ozone_Lag1Trend_residue_Seasonal_Minute_residue_NoAR" + "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR" ], "ForecastMAPE": 0.2515, - "Model": "CumSum_Ozone_Lag1Trend_residue_Seasonal_Minute_residue_NoAR", + "Model": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Voting": 289.25 }, { - "Category": "Integration_Lag1Trend_Cycle_12_NoAR", + "Category": "Integration_Lag1Trend_Seasonal_Minute_NoAR", "Complexity": "MSSSS", "DetailedFormula": [ "CumSum_Ozone", "T+S+R", null, - "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR" + "CumSum_Ozone_Lag1Trend_residue_Seasonal_Minute_residue_NoAR" ], "ForecastMAPE": 0.2515, - "Model": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "CumSum_Ozone_Lag1Trend_residue_Seasonal_Minute_residue_NoAR", "Voting": 289.25 }, { @@ -420,10 +442,10 @@ INFO:pyaf.std:[ "_Ozone", "T+S+R", null, - "_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR" + "_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.3192, - "Model": "_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR", "Voting": 249.9167 }, { @@ -446,21 +468,21 @@ INFO:pyaf.std:[ "Diff_Ozone", "T+S+R", null, - "Diff_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR" + "Diff_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR" ], "ForecastMAPE": 0.3305, - "Model": "Diff_Ozone_LinearTrend_residue_bestCycle_byMAPE_residue_NoAR", + "Model": "Diff_Ozone_LinearTrend_residue_Cycle_None_residue_NoAR", "Voting": 236.9167 } ] INFO:pyaf.std:PERF_DUMP_END -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.385, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.109, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Minute_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.914, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Minute_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.8, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': '_Ozone_LinearTrend_residue_Seasonal_Minute_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.989, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.288, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 21.501, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.495, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.405, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 18.811, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_5_PerMinute' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-01-01T12:40:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='_Ozone' Min=0.0 Max=1.0 Mean=0.351438 StdDev=0.198875 @@ -470,19 +492,12 @@ INFO:pyaf.std:BEST_DECOMPOSITION '_Ozone_LinearTrend_residue_Seasonal_Minute_re INFO:pyaf.std:TREND_DETAIL '_Ozone_LinearTrend' [LinearTrend] INFO:pyaf.std:CYCLE_DETAIL '_Ozone_LinearTrend_residue_Seasonal_Minute' [Seasonal_Minute] INFO:pyaf.std:AUTOREG_DETAIL '_Ozone_LinearTrend_residue_Seasonal_Minute_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.1761 MAPE_Forecast=0.1764 MAPE_Test=0.2208 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.1712 SMAPE_Forecast=0.194 SMAPE_Test=0.2249 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.1688 DiffSMAPE_Forecast=0.1903 DiffSMAPE_Test=0.2195 -INFO:pyaf.std:MODEL_MASE MASE_Fit=0.7728 MASE_Forecast=0.715 MASE_Test=1.0917 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.3308 CRPS_Forecast=0.2854 CRPS_Test=0.3409 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.6793 L1_Forecast=0.5551 L1_Test=0.5161 -INFO:pyaf.std:MODEL_L2 L2_Fit=0.9119 L2_Forecast=0.6628 L2_Test=0.5962 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=7.4082 LnQ_Forecast=2.174 LnQ_Test=0.911 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.5326 MedAE_Forecast=0.5579 MedAE_Test=0.5692 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.6293 KENDALL_TAU_Forecast=0.7354 KENDALL_TAU_Test=0.6565 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0915 KS_Forecast=0.2051 KS_Test=0.25 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11828.5 MWU_Forecast=877.0 MWU_Test=68.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.5053 AUC_Forecast=0.5766 AUC_Test=0.4722 +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.1761, 'RMSE': 0.9119, 'MAE': 0.6793, 'MASE': 0.7728} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.1764, 'RMSE': 0.6628, 'MAE': 0.5551, 'MASE': 0.715} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.2208, 'RMSE': 0.5962, 'MAE': 0.5161, 'MASE': 1.0917} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.1761, 'RMSE': 0.9119, 'MAE': 0.6793, 'MASE': 0.7728} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1764, 'RMSE': 0.6628, 'MAE': 0.5551, 'MASE': 0.715} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2208, 'RMSE': 0.5962, 'MAE': 0.5161, 'MASE': 1.0917} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'S', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [SSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES NoTransf None @@ -495,9 +510,9 @@ INFO:pyaf.std:SEASONAL_MODEL_VALUES _Ozone_LinearTrend_residue_Seasonal_Minute 0 INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 21.501 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 18.811 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.596, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.701, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) Transformation DecompositionType ... Voting Complexity 0 _Ozone T+S+R ... 305.5 SSSSS @@ -557,14 +572,20 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "S", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-01-01 16:55:00" - ], + "TimeDelta": "", + "TimeMax": "2000-01-01 16:55:00", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_5_PerMinute" }, "Training_Signal_Length": 204 @@ -578,27 +599,50 @@ Forecasts "Trend": "LinearTrend" }, "Model_Performance": { - "AUC": 0.5766, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "S", - "Trend": "S" + "1": { + "AUC": 0.5766, + "DiffSMAPE": 0.1903, + "ErrorMean": -0.3399, + "ErrorStdDev": 0.569, + "KS": 0.2051, + "KendallTau": 0.7354, + "Length": 39, + "LnQ": 2.174, + "MAE": 0.5551, + "MAPE": 0.1764, + "MASE": 0.715, + "MannWhitneyU": 877.0, + "MedAE": 0.5579, + "Pearson": 0.858, + "R2": 0.6264, + "RMSE": 0.6628, + "SMAPE": 0.194, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2854, - "KS": 0.2051, - "KendallTau": 0.7354, - "LnQ": 2.174, - "MAE": 0.5551, - "MAPE": 0.1764, - "MASE": 0.715, - "MannWhitneyU": 877.0, - "MedAE": 0.5579, - "RMSE": 0.6628 - } + "12": { + "AUC": 0.5766, + "DiffSMAPE": 0.1903, + "ErrorMean": -0.3399, + "ErrorStdDev": 0.569, + "KS": 0.2051, + "KendallTau": 0.7354, + "Length": 39, + "LnQ": 2.174, + "MAE": 0.5551, + "MAPE": 0.1764, + "MASE": 0.715, + "MannWhitneyU": 877.0, + "MedAE": 0.5579, + "Pearson": 0.858, + "R2": 0.6264, + "RMSE": 0.6628, + "SMAPE": 0.194, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 21.501 + "Training_Time": 18.811 } diff --git a/tests/references/time_res/test_ozone_Secondly.log b/tests/references/time_res/test_ozone_Secondly.log index 38b9fd827..3f8c54bf0 100644 --- a/tests/references/time_res/test_ozone_Secondly.log +++ b/tests/references/time_res/test_ozone_Secondly.log @@ -6,46 +6,39 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 2 1955-03 3.6 1955-03-01 3 1955-04 5.0 1955-04-01 4 1955-05 6.5 1955-05-01 +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.494, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 7.3, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 8.312, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 10.991, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 11.184, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 7.196, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 8.993, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.383, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.389, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.598, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.098, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.208, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.1, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.486, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.197, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.504, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 13.692, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.41, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.996, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.599, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_1_PerSecond' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-01-01T00:02:32.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -54,13 +47,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 13.692 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 12.599 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.587, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.703, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) Transformation DecompositionType ... Voting Complexity @@ -78,10 +71,10 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], Forecast Columns Index(['Time_1_PerSecond', 'Ozone', 'row_number', 'Time_1_PerSecond_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -122,48 +115,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-01-01 00:03:23" - ], + "TimeDelta": "", + "TimeMax": "2000-01-01 00:03:23", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_1_PerSecond" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 13.692 + "Training_Time": 12.599 } @@ -175,46 +197,39 @@ Forecasts -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.202, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.399, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 6.9, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.299, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 9.584, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.303, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.575, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.581, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.406, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 4.505, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.098, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.202, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.019, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.706, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.115, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.415, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 12.0, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.707, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.432, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.939, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_5_PerSecond' TimeMin=2000-01-01T00:00:00.000000 TimeMax=2000-01-01T00:12:40.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -223,13 +238,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 12.0 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 5.939 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.504, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.25, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) Transformation DecompositionType ... Voting Complexity 0 CumSum_Ozone T+S+R ... 196.9167 MSSSS @@ -245,10 +260,10 @@ INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.504, ('FORECASTING', {'Signals': [' Forecast Columns Index(['Time_5_PerSecond', 'Ozone', 'row_number', 'Time_5_PerSecond_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -289,48 +304,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-01 00:00:00", - "2000-01-01 00:16:55" - ], + "TimeDelta": "", + "TimeMax": "2000-01-01 00:16:55", + "TimeMin": "2000-01-01 00:00:00", "TimeVariable": "Time_5_PerSecond" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 12.0 + "Training_Time": 5.939 } diff --git a/tests/references/time_res/test_ozone_Weekly.log b/tests/references/time_res/test_ozone_Weekly.log index 81897d7a1..463d22588 100644 --- a/tests/references/time_res/test_ozone_Weekly.log +++ b/tests/references/time_res/test_ozone_Weekly.log @@ -6,46 +6,39 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 2 1955-03 3.6 1955-03-01 3 1955-04 5.0 1955-04-01 4 1955-05 6.5 1955-05-01 -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 22.188, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 23.195, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 27.697, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 29.313, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 29.698, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 21.511, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 22.994, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 24.316, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 27.635, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 27.831, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.693, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.595, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.33, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.666, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.61, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.898, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 33.6, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.181, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.178, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 30.09, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_1_Weekly' TimeMin=2000-01-02T00:00:00.000000 TimeMax=2002-12-01T00:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -54,13 +47,13 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 33.6 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 30.09 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.795, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.497, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) Transformation DecompositionType ... Voting Complexity @@ -69,19 +62,19 @@ INFO:pyaf.timing:('OPERATION_START', ('SIGNAL_TRAINING', {'Signals': ['Ozone'], [1 rows x 5 columns] Split Transformation DecompositionType ... ForecastMAPE TestMAPE Voting 0 None CumSum_Ozone T+S+R ... 0.2515 0.1962 662.1667 -1 None _Ozone T+S+R ... 0.3229 0.3112 646.6667 -2 None _Ozone T+S+R ... 0.3198 0.3223 646.6667 -3 None _Ozone T+S+R ... 0.3229 0.3112 646.6667 -4 None _Ozone T+S+R ... 0.3192 0.3198 646.6667 +1 None _Ozone T+S+R ... 0.3192 0.3198 646.6667 +2 None _Ozone T+S+R ... 0.3229 0.3112 646.6667 +3 None _Ozone T+S+R ... 0.3198 0.3223 646.6667 +4 None _Ozone T+S+R ... 0.3229 0.3112 646.6667 [5 rows x 11 columns] Forecast Columns Index(['Time_1_Weekly', 'Ozone', 'row_number', 'Time_1_Weekly_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -122,48 +115,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-02 00:00:00", - "2003-11-23 00:00:00" - ], + "TimeDelta": "", + "TimeMax": "2003-11-23 00:00:00", + "TimeMin": "2000-01-02 00:00:00", "TimeVariable": "Time_1_Weekly" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 33.6 + "Training_Time": 30.09 } @@ -175,46 +197,39 @@ Forecasts -INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 26.804, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 36.298, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 41.901, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 49.102, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 49.409, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) +INFO:pyaf.timing:('OPERATION_START', ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 29.004, ('TRAINING', {'Signal': 'Ozone', 'Transformation': '_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 30.409, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'CumSum_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 31.995, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'Diff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 41.999, ('TRAINING', {'Signal': 'Ozone', 'Transformation': 'RelDiff_Ozone', 'DecompositionType': 'T+S+R'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 42.298, ('SIGNAL_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', 'None', '_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', 'CumSum_', 'T+S+R')], 'Cores': 4})) INFO:pyaf.timing:('OPERATION_START', ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) INFO:pyaf.timing:('OPERATION_START', ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.208, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) -INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.291, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.802, ('MODEL_SELECTION', {'Signal': 'Ozone', 'Transformations': [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')]})) +INFO:pyaf.timing:('OPERATION_START', ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.309, ('UPDATE_BEST_MODEL_PERFS', {'Signal': 'Ozone', 'Model': 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR'})) INFO:pyaf.timing:('OPERATION_START', ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 2.188, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 5.688, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 55.098, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 1.106, ('COMPUTE_PREDICTION_INTERVALS', {'Signal': 'Ozone'})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 3.218, ('FINALIZE_TRAINING', {'Signals': ['Ozone'], 'Transformations': [('Ozone', [('Ozone', 'None', 'CumSum_', 'T+S+R'), ('Ozone', 'None', 'Diff_', 'T+S+R'), ('Ozone', 'None', 'RelDiff_', 'T+S+R'), ('Ozone', 'None', '_', 'T+S+R')])], 'Cores': 1})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 45.517, ('TRAINING', {'Signals': ['Ozone'], 'Horizons': {'Ozone': 12}})) INFO:pyaf.std:TIME_DETAIL TimeVariable='Time_5_Weekly' TimeMin=2000-01-02T00:00:00.000000 TimeMax=2014-07-27T00:00:00.000000 TimeDelta= Horizon=12 INFO:pyaf.std:SIGNAL_DETAIL_ORIG SignalVariable='Ozone' Length=204 Min=1.2 Max=8.7 Mean=3.835784 StdDev=1.491559 INFO:pyaf.std:SIGNAL_DETAIL_TRANSFORMED TransformedSignalVariable='CumSum_Ozone' Min=0.2 Max=71.693333 Mean=41.48183 StdDev=20.294103 INFO:pyaf.std:DECOMPOSITION_TYPE 'T+S+R' INFO:pyaf.std:BEST_TRANSOFORMATION_TYPE 'CumSum_' -INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] +INFO:pyaf.std:BEST_DECOMPOSITION 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [Lag1Trend + Cycle_12 + NoAR] INFO:pyaf.std:TREND_DETAIL 'CumSum_Ozone_Lag1Trend' [Lag1Trend] -INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE' [Cycle_12] -INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR' [NoAR] -INFO:pyaf.std:MODEL_MAPE MAPE_Fit=0.2553 MAPE_Forecast=0.1841 MAPE_Test=0.2466 -INFO:pyaf.std:MODEL_SMAPE SMAPE_Fit=0.2443 SMAPE_Forecast=0.1735 SMAPE_Test=0.2153 -INFO:pyaf.std:MODEL_DiffSMAPE DiffSMAPE_Fit=0.2409 DiffSMAPE_Forecast=0.1703 DiffSMAPE_Test=0.2112 -INFO:pyaf.std:MODEL_MASE MASE_Fit=1.1325 MASE_Forecast=0.6837 MASE_Test=1.3397 -INFO:pyaf.std:MODEL_CRPS CRPS_Fit=0.4065 CRPS_Forecast=0.2837 CRPS_Test=0.3843 -INFO:pyaf.std:MODEL_L1 L1_Fit=0.9954 L1_Forecast=0.5308 L1_Test=0.6333 -INFO:pyaf.std:MODEL_L2 L2_Fit=1.2874 L2_Forecast=0.6803 L2_Test=0.8396 -INFO:pyaf.std:MODEL_LnQ LnQ_Fit=15.1245 LnQ_Forecast=2.0315 LnQ_Test=0.8354 -INFO:pyaf.std:MODEL_MEDIAN_AE MedAE_Fit=0.8 MedAE_Forecast=0.5 MedAE_Test=0.45 -INFO:pyaf.std:MODEL_KENDALL_TAU KENDALL_TAU_Fit=0.4872 KENDALL_TAU_Forecast=0.6882 KENDALL_TAU_Test=0.6769 -INFO:pyaf.std:MODEL_KOLMOGOROV_SMIRNOV KS_Fit=0.0523 KS_Forecast=0.1026 KS_Test=0.3333 -INFO:pyaf.std:MODEL_MANN_WHITNEY_U MWU_Fit=11451.5 MWU_Forecast=733.0 MWU_Test=53.0 -INFO:pyaf.std:MODEL_AUC AUC_Fit=0.4892 AUC_Forecast=0.4819 AUC_Test=0.3681 +INFO:pyaf.std:CYCLE_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12' [Cycle_12] +INFO:pyaf.std:AUTOREG_DETAIL 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR' [NoAR] +INFO:pyaf.std:MODEL_PERFS Fit STEP=1 {'MAPE': 0.2091, 'RMSE': 1.0619, 'MAE': 0.8026, 'MASE': 0.9132} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=1 {'MAPE': 0.2515, 'RMSE': 0.9165, 'MAE': 0.7628, 'MASE': 0.9826} +INFO:pyaf.std:MODEL_PERFS Test STEP=1 {'MAPE': 0.1962, 'RMSE': 0.5458, 'MAE': 0.4417, 'MASE': 0.9343} +INFO:pyaf.std:MODEL_PERFS Fit STEP=12 {'MAPE': 0.2553, 'RMSE': 1.2874, 'MAE': 0.9954, 'MASE': 1.1325} +INFO:pyaf.std:MODEL_PERFS Forecast STEP=12 {'MAPE': 0.1841, 'RMSE': 0.6803, 'MAE': 0.5308, 'MASE': 0.6837} +INFO:pyaf.std:MODEL_PERFS Test STEP=12 {'MAPE': 0.2466, 'RMSE': 0.8396, 'MAE': 0.6333, 'MASE': 1.3397} INFO:pyaf.std:MODEL_COMPLEXITY {'Decomposition': 'S', 'Transformation': 'M', 'Trend': 'S', 'Cycle': 'S', 'AR': 'S'} [MSSSS] INFO:pyaf.std:SIGNAL_TRANSFORMATION_DETAIL_START INFO:pyaf.std:SIGNAL_TRANSFORMATION_MODEL_VALUES Integration None @@ -223,21 +238,21 @@ INFO:pyaf.std:TREND_DETAIL_START INFO:pyaf.std:LAG1_TREND Lag1Trend 0.2 INFO:pyaf.std:TREND_DETAIL_END INFO:pyaf.std:CYCLE_MODEL_DETAIL_START -INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} +INFO:pyaf.std:BEST_CYCLE_LENGTH_VALUES CumSum_Ozone_Lag1Trend_residue_Cycle_12 12 0.386667 {0: 0.12, 1: 0.173333, 2: 0.2, 3: 0.373333, 4: 0.36, 5: 0.453333, 6: 0.573333, 7: 0.52, 8: 0.52, 9: 0.493333, 10: 0.26, 11: 0.18} INFO:pyaf.std:CYCLE_MODEL_DETAIL_END INFO:pyaf.std:AR_MODEL_DETAIL_START INFO:pyaf.std:AR_MODEL_DETAIL_END -INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 55.098 +INFO:pyaf.std:TRAINING_TIME_IN_SECONDS 45.517 INFO:pyaf.timing:('OPERATION_START', ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) -INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.807, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) +INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.611, ('FORECASTING', {'Signals': ['Ozone'], 'Horizon': 12})) Transformation DecompositionType ... Voting Complexity 0 CumSum_Ozone T+S+R ... 846.0 MSSSS [1 rows x 5 columns] Split Transformation DecompositionType ... ForecastMAPE TestMAPE Voting 0 None CumSum_Ozone T+S+R ... 0.2515 0.1962 846.00 -1 None _Ozone T+S+R ... 0.3198 0.3223 824.75 -2 None _Ozone T+S+R ... 0.3192 0.3198 824.75 +1 None _Ozone T+S+R ... 0.3192 0.3198 824.75 +2 None _Ozone T+S+R ... 0.3198 0.3223 824.75 3 None _Ozone T+S+R ... 0.3192 0.3198 824.75 4 None _Ozone T+S+R ... 0.3198 0.3223 824.75 @@ -245,10 +260,10 @@ INFO:pyaf.timing:('OPERATION_END_ELAPSED', 0.807, ('FORECASTING', {'Signals': [' Forecast Columns Index(['Time_5_Weekly', 'Ozone', 'row_number', 'Time_5_Weekly_Normalized', 'CumSum_Ozone', 'CumSum_Ozone_Lag1Trend', 'CumSum_Ozone_Lag1Trend_residue', 'cycle_internal', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR', - 'CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR', + 'CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR_residue', 'Ozone_Transformed', 'CumSum_Ozone_Trend', 'CumSum_Ozone_Trend_residue', 'CumSum_Ozone_Cycle', 'CumSum_Ozone_Cycle_residue', 'CumSum_Ozone_AR', 'CumSum_Ozone_AR_residue', 'CumSum_Ozone_TransformedForecast', @@ -289,48 +304,77 @@ Forecasts { "Ozone": { + "Complexity": { + "AR": "S", + "Cycle": "S", + "Decomposition": "S", + "Transformation": "M", + "Trend": "S" + }, "Dataset": { "Signal": "Ozone", "Time": { "Horizon": 12, - "TimeMinMax": [ - "2000-01-02 00:00:00", - "2019-06-16 00:00:00" - ], + "TimeDelta": "", + "TimeMax": "2019-06-16 00:00:00", + "TimeMin": "2000-01-02 00:00:00", "TimeVariable": "Time_5_Weekly" }, "Training_Signal_Length": 204 }, "Model": { "AR_Model": "NoAR", - "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_bestCycle_byMAPE_residue_NoAR", + "Best_Decomposition": "CumSum_Ozone_Lag1Trend_residue_Cycle_12_residue_NoAR", "Cycle": "Cycle_12", "Signal_Decomposition_Type": "T+S+R", "Signal_Transoformation": "Integration", "Trend": "Lag1Trend" }, "Model_Performance": { - "AUC": 0.4819, - "COMPLEXITY": { - "AR": "S", - "Cycle": "S", - "Decomposition": "S", - "Transformation": "M", - "Trend": "S" + "1": { + "AUC": 0.4944, + "DiffSMAPE": 0.2472, + "ErrorMean": -0.0038, + "ErrorStdDev": 0.9165, + "KS": 0.1538, + "KendallTau": 0.5226, + "Length": 39, + "LnQ": 3.3301, + "MAE": 0.7628, + "MAPE": 0.2515, + "MASE": 0.9826, + "MannWhitneyU": 752.0, + "MedAE": 0.65, + "Pearson": 0.6839, + "R2": 0.2857, + "RMSE": 0.9165, + "SMAPE": 0.2519, + "Signal": "Ozone_Forecast_1" }, - "CRPS": 0.2837, - "KS": 0.1026, - "KendallTau": 0.6882, - "LnQ": 2.0315, - "MAE": 0.5308, - "MAPE": 0.1841, - "MASE": 0.6837, - "MannWhitneyU": 733.0, - "MedAE": 0.5, - "RMSE": 0.6803 - } + "12": { + "AUC": 0.4819, + "DiffSMAPE": 0.1703, + "ErrorMean": 0.0846, + "ErrorStdDev": 0.675, + "KS": 0.1026, + "KendallTau": 0.6882, + "Length": 39, + "LnQ": 2.0315, + "MAE": 0.5308, + "MAPE": 0.1841, + "MASE": 0.6837, + "MannWhitneyU": 733.0, + "MedAE": 0.5, + "Pearson": 0.8112, + "R2": 0.6064, + "RMSE": 0.6803, + "SMAPE": 0.1735, + "Signal": "Ozone_Forecast_12" + } + }, + "Model_Selection_Criterion": "MAPE" }, - "Training_Time": 55.098 + "Training_Time": 45.517 }