Прогнозируйте почасовые цены на электроэнергию на сутки вперед после обучения модели с использованием исторических данныPython

Программы на Python
Ответить
Anonymous
 Прогнозируйте почасовые цены на электроэнергию на сутки вперед после обучения модели с использованием исторических данны

Сообщение Anonymous »

Я обучил модель XGboost историческим данным за 2015–2024 годы. Я добавил некоторые функции, такие как данные о погоде, потреблении электроэнергии, выработке электроэнергии из различных источников, таких как ядерная энергия, и других возобновляемых источников. Я поставил целевую цену на электроэнергию. все данные представлены в почасовом формате. Я успешно обучил модель, но теперь у меня возникли проблемы с прогнозированием почасовой цены на электроэнергию на следующий день.
Я не знаю, как использовать обученную модель для прогнозирования цены с помощью набор данных, содержащий данные до 7 декабря 2024 года. Например: как бы я спрогнозировал почасовую цену на 15 января 2025 года после обучения модели до 7 декабря 2024 года?
прямо сейчас код прогнозирования просто принимает последнее значение всех функций и помещает одно и то же значение во все строки, которые он пытается спрогнозировать и запустить модель.
До сих пор я использовал Данные за последние 24 часа (последние 24 строки всех функций) я получил из своего набора данных и использовал модель для прогнозирования цены, но она даже близко не соответствует реальной цене.
# Now add the prediction code
from datetime import datetime, timedelta
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Get the last known data
last_known_data = X_test.copy()
# print(last_known_data.columns)

# Set target date for tomorrow
target_date = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) + timedelta(days=1)

# Create DataFrame with 24 hours
prediction_hours = pd.date_range(target_date, target_date + timedelta(hours=23), freq='H')
future_df = pd.DataFrame(index=prediction_hours)
future_df['Start_date'] = future_df.index

# Convert datetime to unix timestamp (as used in training)
future_df['Start_date'] = future_df['Start_date'].astype(np.int64) // 10**9

# Get the last known values for all features
last_values = last_known_data.iloc[-1].copy()

# Create feature matrix for prediction
for col in X_train.columns:
if col in ['Start_date', 'End_date_x', 'End_date_y', 'End_date', 'dt_iso']:
future_df[col] = future_df['Start_date']
else:
future_df[col] = last_values[col]

# Add time-based features
future_df['hour'] = future_df.index.hour
future_df['day_of_week'] = future_df.index.dayofweek
future_df['month'] = future_df.index.month

# Handle price lag features using last known prices
last_known_prices = merged_data['Germany/Luxembourg [€/MWh]'].iloc[-72:]

future_df['price_lag_24'] = last_known_prices.iloc[-24:].values
future_df['price_lag_48'] = last_known_prices.iloc[-48:-24].values
future_df['price_lag_72'] = last_known_prices.iloc[-72:-48].values

# Calculate rolling temperature features
for window in [24, 48, 72]:
future_df[f'temp_roll_{window}'] = future_df['temp'].rolling(window=window, min_periods=1).mean()

# Ensure columns match training data
prediction_features = future_df[X_train.columns]

# Make predictions
predictions = xgb_model.predict(prediction_features)

# Create results DataFrame
results_df = pd.DataFrame({
'Datetime': prediction_hours,
'Hour': prediction_hours.hour,
'Predicted_Price_EUR_MWh': np.round(predictions, 2)
})

# Print predictions
print("\nPredicted Prices for Next 24 Hours:")
print(results_df.to_string(index=False))


Подробнее здесь: https://stackoverflow.com/questions/793 ... el-using-h
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»