File size: 2,205 Bytes
5af0e36 61d3474 5af0e36 3191db2 5af0e36 3191db2 5af0e36 61d3474 3191db2 5af0e36 61d3474 5af0e36 3191db2 5af0e36 3191db2 61d3474 3191db2 5af0e36 3191db2 5af0e36 3191db2 5af0e36 |
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 53 54 55 56 57 58 59 60 61 |
import pandas as pd
import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt
import gradio as gr
from xgboost import XGBRegressor
from sklearn.model_selection import train_test_split
def simulate_factory_data(days=7, freq='H'):
date_rng = pd.date_range(end=datetime.now(), periods=24 * days, freq=freq)
df = pd.DataFrame(date_rng, columns=['ds'])
df['temperature'] = np.random.normal(loc=70, scale=4, size=(len(date_rng)))
anomaly_indices = np.random.choice(len(df), size=8, replace=False)
df.loc[anomaly_indices, 'temperature'] += np.random.uniform(10, 20, size=8)
return df
def create_lag_features(df, lags=6):
for i in range(1, lags + 1):
df[f'lag_{i}'] = df['temperature'].shift(i)
df = df.dropna().reset_index(drop=True)
return df
def forecast_temperature(hours):
df = simulate_factory_data()
df = create_lag_features(df)
X = df[[f'lag_{i}' for i in range(1, 7)]]
y = df['temperature']
model = XGBRegressor(n_estimators=100, learning_rate=0.1)
model.fit(X, y)
last_row = df.iloc[-1][[f'lag_{i}' for i in range(1, 7)]].values
preds = []
for _ in range(int(hours)):
pred = model.predict([last_row])[0]
preds.append(pred)
last_row = np.roll(last_row, -1)
last_row[-1] = pred
future_dates = pd.date_range(start=df['ds'].iloc[-1], periods=int(hours)+1, freq='H')[1:]
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(df['ds'], df['temperature'], label='Actual')
ax.plot(future_dates, preds, label='Forecast', color='orange')
ax.axhspan(85, 100, color='red', alpha=0.1, label='Danger Zone')
ax.set_title("Machine Temperature Forecast (XGBoost)")
ax.set_xlabel("Time")
ax.set_ylabel("Temperature (°C)")
ax.legend()
plt.tight_layout()
return fig
demo = gr.Interface(
fn=forecast_temperature,
inputs=gr.Slider(6, 48, value=24, step=1, label="Forecast Hours"),
outputs=gr.Plot(label="Forecasted Temperature Chart"),
title="Smart Factory AI Pipeline (XGBoost)",
description="Forecast machine temperature using XGBoost. Red zone shows potential overheating."
)
if __name__ == "__main__":
demo.launch()
|