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()