-
Notifications
You must be signed in to change notification settings - Fork 1
/
execute_models.py
156 lines (116 loc) · 9.92 KB
/
execute_models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
import pandas as pd
import numpy as np
import datetime as dt
import os
import warnings
from models import (HeterocedasticQuantileRegression,
QuantileRegressionAveraging,
ConformalizedQuantileRegression,
AdaptiveConformalInference,
WidthAdaptiveConformalInference,
WidthAdaptiveConformalInference_2)
warnings.filterwarnings(action='ignore')
np.random.seed(123)
df = pd.read_csv("Data//df.csv")
df['full_date'] = pd.to_datetime(df.full_date)
df['mean_pred'] = df[['pred1', 'pred2', 'pred3', 'pred4']].mean(axis=1)
df['std_pred'] = df[['pred1', 'pred2', 'pred3', 'pred4']].std(axis=1, ddof=0)
date_test = dt.datetime(2022, 10, 5)
idx_date_test = df[pd.to_datetime(df.date) == date_test].head(1).index.values[0]
idx_first_date_qr = idx_date_test - 6*30*24
m = 4
alphas = [0.01, 0.05, 0.1, 0.2]
for alpha in alphas:
if not os.path.isfile(f"Data//df_quantile_regression_alpha_{alpha}.csv"):
# Heterocedastic Quantile Regression
preds_inf_hqr, preds_sup_hqr = HeterocedasticQuantileRegression(idx_first_date_qr, df, alpha, by_hour=False, save_coefs=True)
df.loc[df.tail(len(preds_inf_hqr)).index, 'preds_inf_hqr'] = preds_inf_hqr
df.loc[df.tail(len(preds_sup_hqr)).index, 'preds_sup_hqr'] = preds_sup_hqr
# Heterocedastic Quantile Regression by hour
preds_inf_hqr_by_hour, preds_sup_hqr_by_hour = HeterocedasticQuantileRegression(idx_first_date_qr, df, alpha, by_hour=True)
df.loc[df.tail(len(preds_inf_hqr_by_hour)).index, 'preds_inf_hqr_by_hour'] = preds_inf_hqr_by_hour
df.loc[df.tail(len(preds_sup_hqr_by_hour)).index, 'preds_sup_hqr_by_hour'] = preds_sup_hqr_by_hour
# Quantile Regression Averaging
preds_inf_qra, preds_sup_qra = QuantileRegressionAveraging(idx_first_date_qr, df, alpha, m=m, by_hour=False)
df.loc[df.tail(len(preds_inf_qra)).index, 'preds_inf_qra'] = preds_inf_qra
df.loc[df.tail(len(preds_sup_qra)).index, 'preds_sup_qra'] = preds_sup_qra
# Quantile Regression Averaging by hour
preds_inf_qra_by_hour, preds_sup_qra_by_hour = QuantileRegressionAveraging(idx_first_date_qr, df, alpha, m=m, by_hour=True)
df.loc[df.tail(len(preds_inf_qra_by_hour)).index, 'preds_inf_qra_by_hour'] = preds_inf_qra_by_hour
df.loc[df.tail(len(preds_sup_qra_by_hour)).index, 'preds_sup_qra_by_hour'] = preds_sup_qra_by_hour
# Save the dataframe (just in case)
df.to_csv(f"Data//df_quantile_regression_alpha_{alpha}.csv", index=False)
else:
df = pd.read_csv(f"Data//df_quantile_regression_alpha_{alpha}.csv")
# df = pd.read_csv(f"Data//df_final_alpha_{alpha}.csv")
df['full_date'] = pd.to_datetime(df.full_date)
df['length_hqr'] = df['preds_sup_hqr'] - df['preds_inf_hqr']
df['length_hqr_by_hour'] = df['preds_sup_hqr_by_hour'] - df['preds_inf_hqr_by_hour']
df['length_qra'] = df['preds_sup_qra'] - df['preds_inf_qra']
df['length_qra_by_hour'] = df['preds_sup_qra_by_hour'] - df['preds_inf_qra_by_hour']
# Conformalized Quantile Regression over HQR
preds_inf_cqr_hqr, preds_sup_cqr_hqr = ConformalizedQuantileRegression(idx_date_test, df, alpha, method='hqr', by_hour=False)
df.loc[df.tail(len(preds_inf_cqr_hqr)).index, 'preds_inf_cqr_hqr'] = preds_inf_cqr_hqr
df.loc[df.tail(len(preds_sup_cqr_hqr)).index, 'preds_sup_cqr_hqr'] = preds_sup_cqr_hqr
# Conformalized Quantile Regression over HQR by hour
preds_inf_cqr_hqr_by_hour, preds_sup_cqr_hqr_by_hour = ConformalizedQuantileRegression(idx_date_test, df, alpha, method='hqr', by_hour=True)
df.loc[df.tail(len(preds_inf_cqr_hqr_by_hour)).index, 'preds_inf_cqr_hqr_by_hour'] = preds_inf_cqr_hqr_by_hour
df.loc[df.tail(len(preds_sup_cqr_hqr_by_hour)).index, 'preds_sup_cqr_hqr_by_hour'] = preds_sup_cqr_hqr_by_hour
# Conformalized Quantile Regression over QRA
preds_inf_cqr_qra, preds_sup_cqr_qra = ConformalizedQuantileRegression(idx_date_test, df, alpha, method='qra', by_hour=False)
df.loc[df.tail(len(preds_inf_cqr_qra)).index, 'preds_inf_cqr_qra'] = preds_inf_cqr_qra
df.loc[df.tail(len(preds_sup_cqr_qra)).index, 'preds_sup_cqr_qra'] = preds_sup_cqr_qra
# Conformalized Quantile Regression over QRA by hour
preds_inf_cqr_qra_by_hour, preds_sup_cqr_qra_by_hour = ConformalizedQuantileRegression(idx_date_test, df, alpha, method='qra', by_hour=True)
df.loc[df.tail(len(preds_inf_cqr_qra_by_hour)).index, 'preds_inf_cqr_qra_by_hour'] = preds_inf_cqr_qra_by_hour
df.loc[df.tail(len(preds_sup_cqr_qra_by_hour)).index, 'preds_sup_cqr_qra_by_hour'] = preds_sup_cqr_qra_by_hour
# Adaptive Conformal Inference over HQR
preds_inf_aci_hqr, preds_sup_aci_hqr = AdaptiveConformalInference(idx_date_test, df, alpha, gamma=0.02, method='hqr', by_hour=False, save_alphas=True)
df.loc[df.tail(len(preds_inf_aci_hqr)).index, 'preds_inf_aci_hqr'] = preds_inf_aci_hqr
df.loc[df.tail(len(preds_sup_aci_hqr)).index, 'preds_sup_aci_hqr'] = preds_sup_aci_hqr
# Adaptive Conformal Inference over HQR by hour
preds_inf_aci_hqr_by_hour, preds_sup_aci_hqr_by_hour = AdaptiveConformalInference(idx_date_test, df, alpha, gamma=0.02, method='hqr', by_hour=True)
df.loc[df.tail(len(preds_inf_aci_hqr_by_hour)).index, 'preds_inf_aci_hqr_by_hour'] = preds_inf_aci_hqr_by_hour
df.loc[df.tail(len(preds_sup_aci_hqr_by_hour)).index, 'preds_sup_aci_hqr_by_hour'] = preds_sup_aci_hqr_by_hour
# Adaptive Conformal Inference over QRA
preds_inf_aci_qra, preds_sup_aci_qra = AdaptiveConformalInference(idx_date_test, df, alpha, gamma=0.02, method='qra', by_hour=False)
df.loc[df.tail(len(preds_inf_aci_qra)).index, 'preds_inf_aci_qra'] = preds_inf_aci_qra
df.loc[df.tail(len(preds_sup_aci_qra)).index, 'preds_sup_aci_qra'] = preds_sup_aci_qra
# Adaptive Conformal Inference over QRA by hour
preds_inf_aci_qra_by_hour, preds_sup_aci_qra_by_hour = AdaptiveConformalInference(idx_date_test, df, alpha, gamma=0.02, method='qra', by_hour=True)
df.loc[df.tail(len(preds_inf_aci_qra_by_hour)).index, 'preds_inf_aci_qra_by_hour'] = preds_inf_aci_qra_by_hour
df.loc[df.tail(len(preds_sup_aci_qra_by_hour)).index, 'preds_sup_aci_qra_by_hour'] = preds_sup_aci_qra_by_hour
# Width Adaptive Conformal Inference over HQR
preds_inf_waci_hqr, preds_sup_waci_hqr = WidthAdaptiveConformalInference(idx_date_test, df, alpha, gamma = 0.02, sigma=3, method='hqr', by_hour=False, save_alphas=True)
df.loc[df.tail(len(preds_inf_waci_hqr)).index, 'preds_inf_waci_hqr'] = preds_inf_waci_hqr
df.loc[df.tail(len(preds_sup_waci_hqr)).index, 'preds_sup_waci_hqr'] = preds_sup_waci_hqr
# Width Adaptive Conformal Inference over HQR by hour
preds_inf_waci_hqr_by_hour, preds_sup_waci_hqr_by_hour = WidthAdaptiveConformalInference(idx_date_test, df, alpha, gamma = 0.02, sigma=3, method='hqr', by_hour=True)
df.loc[df.tail(len(preds_inf_waci_hqr_by_hour)).index, 'preds_inf_waci_hqr_by_hour'] = preds_inf_waci_hqr_by_hour
df.loc[df.tail(len(preds_sup_waci_hqr_by_hour)).index, 'preds_sup_waci_hqr_by_hour'] = preds_sup_waci_hqr_by_hour
# Width Adaptive Conformal Inference over QRA
preds_inf_waci_qra, preds_sup_waci_qra = WidthAdaptiveConformalInference(idx_date_test, df, alpha, gamma = 0.02, sigma=3, method='qra', by_hour=False)
df.loc[df.tail(len(preds_inf_waci_qra)).index, 'preds_inf_waci_qra'] = preds_inf_waci_qra
df.loc[df.tail(len(preds_sup_waci_qra)).index, 'preds_sup_waci_qra'] = preds_sup_waci_qra
# Width Adaptive Conformal Inference over QRA by hour
preds_inf_waci_qra_by_hour, preds_sup_waci_qra_by_hour = WidthAdaptiveConformalInference(idx_date_test, df, alpha, gamma = 0.02, sigma=3, method='qra', by_hour=True)
df.loc[df.tail(len(preds_inf_waci_qra_by_hour)).index, 'preds_inf_waci_qra_by_hour'] = preds_inf_waci_qra_by_hour
df.loc[df.tail(len(preds_sup_waci_qra_by_hour)).index, 'preds_sup_waci_qra_by_hour'] = preds_sup_waci_qra_by_hour
# # Width Adaptive Conformal Inference 2 over HQR
# preds_inf_waci_2_hqr, preds_sup_waci_2_hqr = WidthAdaptiveConformalInference_2(idx_date_test, df, alpha, gamma=0.02, method='hqr', by_hour=False, save_alphas=True, rate=1.02)
# df.loc[df.tail(len(preds_inf_waci_2_hqr)).index, 'preds_inf_waci_2_hqr'] = preds_inf_waci_2_hqr
# df.loc[df.tail(len(preds_sup_waci_2_hqr)).index, 'preds_sup_waci_2_hqr'] = preds_sup_waci_2_hqr
# # Width Adaptive Conformal Inference 2 over HQR by hour
# preds_inf_waci_2_hqr_by_hour, preds_sup_waci_2_hqr_by_hour = WidthAdaptiveConformalInference_2(idx_date_test, df, alpha, gamma=0.02, method='hqr', by_hour=True, rate=1.02)
# df.loc[df.tail(len(preds_inf_waci_2_hqr_by_hour)).index, 'preds_inf_waci_2_hqr_by_hour'] = preds_inf_waci_2_hqr_by_hour
# df.loc[df.tail(len(preds_sup_waci_2_hqr_by_hour)).index, 'preds_sup_waci_2_hqr_by_hour'] = preds_sup_waci_2_hqr_by_hour
# # Width Adaptive Conformal Inference 2 over QRA
# preds_inf_waci_2_qra, preds_sup_waci_2_qra = WidthAdaptiveConformalInference_2(idx_date_test, df, alpha, gamma=0.02, method='qra', by_hour=False, rate=1.02)
# df.loc[df.tail(len(preds_inf_waci_2_qra)).index, 'preds_inf_waci_2_qra'] = preds_inf_waci_2_qra
# df.loc[df.tail(len(preds_sup_waci_2_qra)).index, 'preds_sup_waci_2_qra'] = preds_sup_waci_2_qra
# # Width Adaptive Conformal Inference 2 over QRA by hour
# preds_inf_waci_2_qra_by_hour, preds_sup_waci_2_qra_by_hour = WidthAdaptiveConformalInference_2(idx_date_test, df, alpha, gamma=0.02, method='qra', by_hour=True, rate=1.02)
# df.loc[df.tail(len(preds_inf_waci_2_qra_by_hour)).index, 'preds_inf_waci_2_qra_by_hour'] = preds_inf_waci_2_qra_by_hour
# df.loc[df.tail(len(preds_sup_waci_2_qra_by_hour)).index, 'preds_sup_waci_2_qra_by_hour'] = preds_sup_waci_2_qra_by_hour
# Save dataframe
df.to_csv(f"Data//df_final_alpha_{alpha}.csv", index=False)