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 z pliku Excel file_path = 'Honda dane w tabeli.xlsx' # Upewnij się, że plik jest w tej samej ścieżce co skrypt lub podaj pełną ścieżkę data = pd.read_excel(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 średnią data.fillna(data.mean(), inplace=True) # 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 dodaniu lag features data.dropna(inplace=True) # Rozdzielenie cech (X) i zmiennej docelowej (y) X = data.drop(columns=['Close', 'Date'], errors='ignore') # Zakładamy, że 'Date' może być w danych y = data['Close'] # Podział na zbiór treningowy (80%) i testowy (20%) 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 (opcjonalne) 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 walid