File size: 1,639 Bytes
705306c
 
 
1c65d7d
705306c
 
 
525fd54
 
1c65d7d
705306c
1c65d7d
705306c
 
1c65d7d
705306c
1c65d7d
 
 
705306c
 
 
1c65d7d
705306c
 
 
 
1c65d7d
705306c
1c65d7d
705306c
1c65d7d
 
 
 
 
 
 
 
 
 
 
 
 
705306c
 
 
 
 
 
 
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
import pandas as pd
import joblib
import numpy as np
import os
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error, mean_squared_error

df = pd.read_csv('weather.csv')
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.sort_values('datetime').reset_index(drop=True)

# Recreate lag features exactly as train_model.py does
for lag in range(1, 8):
    df[f'temp_lag{lag}'] = df['temp'].shift(lag)
df = df.dropna().reset_index(drop=True)

# Use the exact same feature set as training
FEATURES = ["humidity", "windspeed", "cloudcover"] + [f"temp_lag{i}" for i in range(1, 8)]
X = df[FEATURES]
y = df['temp']

scaler = joblib.load('models/scaler.pkl')
model  = joblib.load('models/xgb_model.pkl')

X_scaled = scaler.transform(X)
pred = model.predict(X_scaled)

mae  = mean_absolute_error(y, pred)
rmse = np.sqrt(mean_squared_error(y, pred))
print(f"MAE: {mae:.4f}, RMSE: {rmse:.4f}")

os.makedirs("results", exist_ok=True)

# Save actual vs predicted CSV for generate_graphs.py
out_df = df[['datetime', 'temp']].copy()
out_df['pred'] = pred
out_df.to_csv("results/actual_vs_pred.csv", index=False)

with open("results/metrics.txt", "w") as f:
    f.write(f"MAE: {mae:.4f}\nRMSE: {rmse:.4f}\n")

plt.figure(figsize=(10, 5))
plt.plot(df['datetime'], y,    label='Actual Temperature',  linewidth=2)
plt.plot(df['datetime'], pred, label='Predicted Temperature', linewidth=2, linestyle='--')
plt.legend()
plt.title("Actual vs Predicted Temperature")
plt.xlabel("Date")
plt.ylabel("Temperature (°C)")
plt.tight_layout()
plt.savefig("results/performance_plot.png")
print("Saved plot to results/performance_plot.png")