import pandas as pd from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_squared_error from xgboost import XGBRegressor import joblib # 1. Wczytanie danych file_path = 'nazwa_pliku.csv' # Zmień na właściwą ścieżkę do pliku data = pd.read_csv(file_path) # 2. Wstępne przetwarzanie danych # Sprawdzenie brakujących wartości print("Missing values per column:") print(data.isnull().sum()) # Uzupełnienie brakujących wartości, np. średnią (lub zastosuj inną metodę według potrzeb) data.fillna(data.mean(), inplace=True) # Tworzenie nowych cech (opcjonalnie) if 'Date' in data.columns: data['Date'] = pd.to_datetime(data['Date']) data['Day'] = data['Date'].dt.day data['Month'] = data['Date'].dt.month data['Year'] = data['Date'].dt.year # Tworzenie opóźnionych wartości data['Close_Lag_1'] = data['Close'].shift(1) data['Close_Lag_2'] = data['Close'].shift(2) # Usunięcie wierszy z brakującymi wartościami po stworzeniu lag features data.dropna(inplace=True) # Rozdzielenie cech i zmiennej docelowej X = data.drop(columns=['Close', 'Date'], errors='ignore') y = data['Close'] # Podział na zbiór treningowy i testowy X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Normalizacja cech scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 3. Trening modelu XGBoost model = XGBRegressor(n_estimators=100, learning_rate=0.1, max_depth=6, random_state=42) model.fit(X_train_scaled, y_train) # 4. Ewaluacja modelu y_pred = model.predict(X_test_scaled) mse = mean_squared_error(y_test, y_pred) print(f"Mean Squared Error (MSE) on test set: {mse}") # 5. Znaczenie cech importance = model.feature_importances_ print("\nFeature Importances:") for i, v in enumerate(importance): print(f"Feature: {X.columns[i]}, Importance: {v}") # 6. Hyperparameter Tuning param_grid = { 'n_estimators': [50, 100, 200], 'max_depth': [3, 5, 7], 'learning_rate': [0.01, 0.1, 0.2] } grid_search = GridSearchCV(XGBRegressor(random_state=42), param_grid, cv=3, scoring='neg_mean_squared_error') grid_search.fit(X_train_scaled, y_train) print("\nBest Parameters from Grid Search:") print(grid_search.best_params_) # 7. Ewaluacja z walidacją krzyżową final_model = grid_search.best_estimator_ scores = cross_val_score(final_model, X_train_scaled, y_train, cv=5, scoring='neg_mean_squared_error') print(f"\nCross-validated Mean Squared Error: {-scores.mean()}") # 8. Zapis modelu joblib.dump(final_model, 'xgboost_close_model.pkl') print("\nModel saved as 'xgboost_close_model.pkl'")