LGBMClassifier ajout des corrélations / prévisions dérivées
This commit is contained in:
@@ -63,6 +63,7 @@ from sklearn.model_selection import GridSearchCV
|
||||
from sklearn.feature_selection import VarianceThreshold
|
||||
import seaborn as sns
|
||||
from lightgbm import LGBMRegressor
|
||||
import lightgbm as lgb
|
||||
|
||||
# Couleurs ANSI de base
|
||||
RED = "\033[31m"
|
||||
@@ -100,7 +101,8 @@ class Zeus_LGBMRegressor(IStrategy):
|
||||
# 'rsi_1h', 'rsi_deriv1_1h', 'rsi_deriv2_1h', "max_rsi_12_1h",
|
||||
# ]
|
||||
|
||||
model_indicators = ["ms-10", "ms-5", "ms-2", "ms-1", "ms-0"]
|
||||
model = None
|
||||
model_indicators = ["ms-10", "ms-5", "ms-4", "ms-3", "ms-2", "ms-1", "ms-0"]
|
||||
# model_indicators = ['open', 'high', 'close', 'haclose', 'percent', 'sma5', 'sma12', 'sma24', 'sma24_deriv1', 'sma24_deriv2', 'sma48', 'sma48_deriv1', 'sma48_deriv2', 'sma60', 'sma60_dist', 'sma60_deriv1',
|
||||
# 'sma60_deriv2', 'mid_smooth_3_deriv2', 'mid_smooth_12_deriv1', 'mid_smooth_12_deriv2', 'mid_smooth_24', 'mid_smooth_24_deriv1', 'mid_smooth_24_deriv2', 'max_rsi_12', 'max_rsi_24', 'max12',
|
||||
# 'max60', 'min60', 'min_max_60', 'bb_lowerband', 'bb_upperband', 'bb_width', 'macd', 'macdsignal', 'macdhist', 'sma_20', 'sma_100', 'atr', 'atr_norm', 'adx', 'obv', 'vol_24', 'adx_change',
|
||||
@@ -993,12 +995,6 @@ class Zeus_LGBMRegressor(IStrategy):
|
||||
dataframe['mid_smooth_5h']
|
||||
dataframe["mid_smooth_5h_deriv2"] = 100 * dataframe["mid_smooth_5h_deriv1"].diff().rolling(window=60).mean()
|
||||
|
||||
dataframe["ms-10"] = dataframe["mid_smooth_24_deriv1"].shift(10)
|
||||
dataframe["ms-5"] = dataframe["mid_smooth_24_deriv1"].shift(5)
|
||||
dataframe["ms-2"] = dataframe["mid_smooth_24_deriv1"].shift(2)
|
||||
dataframe["ms-1"] = dataframe["mid_smooth_24_deriv1"].shift(1)
|
||||
dataframe["ms-0"] = dataframe["mid_smooth_24_deriv1"]
|
||||
# dataframe["ms+10"] = dataframe["mid_smooth_24"].shift(-11)
|
||||
# ===============================
|
||||
# Lissage des valeurs Journalières
|
||||
horizon_d = 12 * 5 * 24
|
||||
@@ -1114,6 +1110,14 @@ class Zeus_LGBMRegressor(IStrategy):
|
||||
#
|
||||
# self.model_indicators = usable_cols
|
||||
|
||||
dataframe["ms-10"] = dataframe["mid_smooth_24_deriv1"].shift(10)
|
||||
dataframe["ms-5"] = dataframe["mid_smooth_24_deriv1"].shift(5)
|
||||
dataframe["ms-4"] = dataframe["mid_smooth_24_deriv1"].shift(4)
|
||||
dataframe["ms-3"] = dataframe["mid_smooth_24_deriv1"].shift(3)
|
||||
dataframe["ms-2"] = dataframe["mid_smooth_24_deriv1"].shift(2)
|
||||
dataframe["ms-1"] = dataframe["mid_smooth_24_deriv1"].shift(1)
|
||||
dataframe["ms-0"] = dataframe["mid_smooth_24_deriv1"]
|
||||
# dataframe["ms+10"] = dataframe["mid_smooth_24"].shift(-11)
|
||||
df = dataframe[self.model_indicators].copy()
|
||||
|
||||
# Corrélations des colonnes
|
||||
@@ -1572,7 +1576,7 @@ class Zeus_LGBMRegressor(IStrategy):
|
||||
# print(f"✅ Meilleur F1 : {f1s[best_idx]:.3f} au seuil {seuils[best_idx]:.2f}")
|
||||
|
||||
# --- Après l'entraînement du modèle ---
|
||||
preds = self.model.predict(X_test)
|
||||
preds = model.predict(X_test)
|
||||
|
||||
# --- Évaluation ---
|
||||
mse = mean_squared_error(y_test, preds)
|
||||
@@ -1607,6 +1611,53 @@ class Zeus_LGBMRegressor(IStrategy):
|
||||
|
||||
print(f"✅ Graphique sauvegardé : {plot_path}")
|
||||
|
||||
# save_dir = "/home/souti/freqtrade/user_data/plots/"
|
||||
# os.makedirs(save_dir, exist_ok=True)
|
||||
|
||||
ax = lgb.plot_tree(model, tree_index=0, figsize=(30, 20),
|
||||
show_info=["split_gain", "internal_value", "internal_count"])
|
||||
plt.title("Arbre de décision n°0")
|
||||
plt.savefig(os.path.join(plot_dir, "lgbm_tree_0.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
ax = lgb.plot_tree(model, figsize=(40, 20))
|
||||
plt.title("Vue globale du modèle LGBM")
|
||||
plt.savefig(os.path.join(plot_dir, "lgbm_all_trees.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
# X_test = np.linspace(0, 10, 1000).reshape(-1, 1)
|
||||
y_pred = model.predict(X_test)
|
||||
|
||||
plt.figure(figsize=(10, 5))
|
||||
plt.plot(X_test, y_pred, color="red", label="modèle LGBM")
|
||||
plt.title("Fonction apprise par LGBMRegressor")
|
||||
plt.xlabel("x")
|
||||
plt.ylabel("y")
|
||||
plt.legend()
|
||||
plt.savefig(os.path.join(plot_dir, "lgbm_function_curve.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
ax = lgb.plot_importance(model, max_num_features=30, figsize=(12, 6))
|
||||
plt.title("Importance des features - LGBM")
|
||||
plt.savefig(os.path.join(plot_dir, "lgbm_feature_importance.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
|
||||
corr = X_train.corr() * 100 # en pourcentage
|
||||
|
||||
plt.figure(figsize=(20, 16))
|
||||
sns.heatmap(corr, cmap="coolwarm", center=0, annot=False, fmt=".1f", cbar_kws={'label': 'Corrélation (%)'})
|
||||
plt.title("Matrice de corrélation (%)")
|
||||
plt.savefig(os.path.join(plot_dir, "correlation_matrix.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
plt.figure(figsize=(10, 6))
|
||||
plt.scatter(y_test, model.predict(X_test), alpha=0.5)
|
||||
plt.xlabel("Valeurs réelles")
|
||||
plt.ylabel("Prédictions du modèle")
|
||||
plt.title("Comparaison y_test vs y_pred")
|
||||
plt.savefig(os.path.join(plot_dir, "ytest_vs_ypred.png"), bbox_inches="tight")
|
||||
plt.close()
|
||||
|
||||
print("\n===== ✅ FIN DE L’ANALYSE =====")
|
||||
|
||||
def plot_threshold_analysis(self, y_true, y_proba, step=0.05, save_path=None):
|
||||
|
||||
Reference in New Issue
Block a user