From 029de8601cd2bfb4c8ffa973b0c413a7bbbb9edf Mon Sep 17 00:00:00 2001 From: freddysongg Date: Sun, 24 Nov 2024 16:53:33 -0800 Subject: [PATCH] feat: add windows support for lstm-bayesian and time series transformer, modify api calls for gemini usage. --- .env | 1 + .gitignore | 6 +- README.md | 109 ++++--- data/preprocess_data.py | 2 +- models/best_lstm_model.pth | Bin 0 -> 45708 bytes models/best_ts_transformer_model.pth | Bin 0 -> 301329 bytes models/scaler_lstm.pkl | Bin 0 -> 1079 bytes models/scaler_ts_transformer.pkl | Bin 0 -> 1079 bytes params/best_ts_transformer_params.json | 6 +- src/api.py | 155 +++++----- src/lstm.py | 95 ++++-- src/lstm_bayesian.py | 88 ++++-- src/lstm_bayesian_torch.py | 322 ++++++++++++++++++++ src/lstm_torch.py | 330 ++++++++++++++++++++ src/main.py | 86 ++++-- src/ts_transformer.py | 135 +++++++-- src/ts_transformer_torch.py | 397 +++++++++++++++++++++++++ 17 files changed, 1535 insertions(+), 197 deletions(-) create mode 100644 .env create mode 100644 models/best_lstm_model.pth create mode 100644 models/best_ts_transformer_model.pth create mode 100644 models/scaler_lstm.pkl create mode 100644 models/scaler_ts_transformer.pkl create mode 100644 src/lstm_bayesian_torch.py create mode 100644 src/lstm_torch.py create mode 100644 src/ts_transformer_torch.py diff --git a/.env b/.env new file mode 100644 index 0000000..5ec5f8b --- /dev/null +++ b/.env @@ -0,0 +1 @@ +GEMINI_API_KEY = 'AIzaSyDVGTJsgu2T3vpF6ZndIu9vJqA1GMx4yBI \ No newline at end of file diff --git a/.gitignore b/.gitignore index 7610a5d..6f630fb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ venv/ __pycache__/ .ipynb_checkpoints/ -models/ - logs/ + +data/__pycache__/ +src/__pycache__/ + diff --git a/README.md b/README.md index cf7fbd0..92db550 100644 --- a/README.md +++ b/README.md @@ -1,51 +1,85 @@ # CaféCast ☕📊 -**CaféCast** is an AI-powered sales forecasting and product analysis application. This project focuses on leveraging advanced machine learning models and data visualization techniques to explore various datasets, fine-tune hyperparameters, and analyze complex temporal patterns. While not optimized for a production-grade frontend, the application demonstrates expertise in applying cutting-edge algorithms and interpretability techniques to time series forecasting and recommendation tasks. +**CaféCast** is an AI-powered sales forecasting and product analysis application. This project focuses on testing and enhancing my knowledge of machine learning models, hyperparameter fine-tuning, and model interpretability. It serves as a learning platform to explore advanced techniques, refine my skills, and deepen my understanding of how to apply machine learning to complex real-world problems. The main goal is to practice and improve while exploring the capabilities of various machine learning models and methodologies. --- ## Features 🚀 -- **Sales Forecasting:** - - Advanced LSTM-based forecasting with Bayesian optimization and iterative tuning approaches. - - State-of-the-art Time Series Transformers for handling complex temporal dependencies. - - Traditional ARIMA modeling for interpretable short-term forecasts. -- **Data Visualization:** Insights into sales trends, seasonality, and product demand patterns. -- **Explainable AI:** Integration of SHAP values and attention mechanisms for model interpretability. -- **Customization-Ready:** Easily adaptable for analyzing and forecasting data across various café datasets. +- **Cross-Platform Model Execution:** + - Supports **TensorFlow (CPU)** for macOS users to ensure compatibility and efficient local execution. + - Utilizes **PyTorch (CUDA)** for Windows users with GPU support for accelerated training and predictions. + - Automatic detection of the operating system to ensure the correct model implementation is selected. +- **Broad Forecasting Capabilities:** + - Handles **multiple concurrent predictions**, enabling comprehensive sales and demand insights. + - Adaptable to a wide range of café datasets and forecasting requirements. +- **Sales Forecasting Models:** + - Advanced LSTM-based models with Bayesian optimization and iterative tuning for precise forecasts. + - Time Series Transformers for capturing complex temporal dependencies. + - Classical ARIMA modeling for interpretable, short-term linear trend forecasts. +- **Enhanced Model Flexibility:** + - Configurable hyperparameters to suit the unique characteristics of each dataset. + - Dynamic support for both platform-optimized and manually fine-tuned workflows. +- **Explainable AI:** SHAP values and attention mechanisms provide transparency into model decisions. +- **Data Visualization:** Visual insights into sales trends, seasonality, and demand patterns. + +--- + +## Purpose and Motivation 🎯 + +The primary objective of **CaféCast** is to test my knowledge, challenge myself, and practice advanced machine learning techniques. Through this project, I aim to: + +- **Deepen Understanding:** Dive into various machine learning models, including LSTM, Transformers, and ARIMA. +- **Refine Skills:** Gain hands-on experience in hyperparameter fine-tuning using Bayesian optimization and manual iterative tuning. +- **Explore Interpretability:** Learn and apply techniques like SHAP values and attention mechanisms to make models more transparent. +- **Emphasize Learning:** Approach this as a learning process, with the goal of improving my practical skills in applying machine learning models to real-world forecasting tasks. + +This project is a testament to continuous learning and experimentation in the field of AI and machine learning. --- ## Models and Methodologies 📘 ### 1. **LSTM with Bayesian Optimization** -- Utilizes Bayesian optimization to automatically tune critical hyperparameters such as: +- Automatically tunes hyperparameters, including: - Learning rate - - Number of layers - - Neurons per layer + - Number of layers and neurons per layer - Dropout rates -- This approach balances exploration and exploitation, ensuring optimal configurations with reduced computational overhead. +- Strikes a balance between exploration and exploitation to achieve efficient and optimal configurations. ### 2. **Iterative LSTM Tuning** -- Applies a manual, systematic method to refine model performance through: +- A hands-on approach for refining models through: - Adjustments to sequence length and batch size - Monitoring validation error trends - - Incremental fine-tuning of parameters based on observed performance -- Ensures the LSTM models are tailored to the unique characteristics of each dataset. + - Incremental parameter tuning based on observed performance ### 3. **Time Series Transformers** -- Implements Transformer-based models for time series forecasting, leveraging self-attention mechanisms to: - - Capture long-term temporal dependencies effectively - - Model complex seasonality and trends in data - - Provide highly interpretable attention weights for feature importance +- Uses self-attention mechanisms to: + - Capture long-term dependencies and seasonality + - Model complex temporal patterns in sales data +- Supports multi-target predictions for key metrics like sales and revenue. ### 4. **ARIMA Model** -- Integrates an ARIMA (AutoRegressive Integrated Moving Average) model for classical time series analysis. -- Features: - - Strong interpretability for short-term linear trends and seasonality - - Complements deep learning models for robust hybrid forecasting strategies +- A classical time series model for capturing linear trends and seasonality. +- Complements deep learning models for hybrid forecasting strategies. -By combining these methodologies, CaféCast excels in flexibility and precision, adapting seamlessly to varying datasets. +--- + +## Recent Enhancements 🌟 + +1. **Platform-Specific Execution:** + - macOS: TensorFlow-based models optimized for CPU execution. + - Windows: PyTorch-based models leveraging CUDA for GPU acceleration. + - Automatic logging to indicate which implementation is running. + - Note: this is all for training of the model, mainly just convenience for me :D + +2. **Broader Prediction Capabilities:** + - Added support for handling multiple predictions across various datasets. + - Enhanced flexibility to adapt to different temporal forecasting requirements. + +3. **Improved Model Interpretability:** + - SHAP values for LSTM and ARIMA models to explain predictions. + - Attention weights in Transformer models to provide insights into feature importance. --- @@ -55,13 +89,14 @@ By combining these methodologies, CaféCast excels in flexibility and precision, - **Core Libraries:** - NumPy, Pandas for data manipulation - Matplotlib for visualization - - TensorFlow & PyTorch for deep learning + - TensorFlow (CPU) for macOS + - PyTorch (CUDA) for Windows - scikit-learn and statsmodels for preprocessing and ARIMA modeling - **Optimization Techniques:** - Bayesian Optimization for automated hyperparameter tuning - - Iterative tuning for manual refinement of LSTM models + - Iterative tuning for manual refinement of models - **Model Interpretability:** SHAP, Attention Mechanisms -- **Environment:** Designed for local execution on M1 Pro MacBook Pro or similar hardware +- **Environment:** Tested on macOS and Windows with hardware-optimized configurations --- @@ -77,17 +112,21 @@ By combining these methodologies, CaféCast excels in flexibility and precision, source venv/bin/activate # On Windows: venv\Scripts\activate 3. Install dependencies: ```bash - pip install -r requirements.txt + pip install -r requirements.txt # On Windows: add in pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124 for Torch-CUDA compatability --- ## Usage 💡 -1. **Load Dataset:** Start by uploading your time series dataset in CSV format. -2. **Choose a Model:** Options include: - - LSTM with Bayesian Optimization for automated fine-tuning and precision forecasts. - - Iterative LSTM for a hands-on, customized modeling experience. - - Time Series Transformers for advanced temporal analysis with attention mechanisms. - - ARIMA for interpretable, classical time series modeling. +1. **Run the Application:** + ```bash + python src/main.py +2. **Menu Options:** + 1: Run LSTM Model + 2: Run Time Series Transformer Model + 3: Run Bayesian LSTM Optimization + 4: Clear LSTM Model Parameters + 5: Clear Transformer Model Parameters + 6: Run ARIMA Model 3. **Run Forecasts:** Generate detailed predictions for various time frames and visualize results. 4. **Analyze Results:** Use visualizations and SHAP-based interpretability tools to gain insights into trends and model behavior. @@ -99,8 +138,8 @@ cafecast/ ├── data/ # Sample datasets and preprocessing scripts ├── logs/ # Logging files for training and debugging ├── models/ # Model definitions and training scripts -├── notebooks/ # Jupyter notebooks for exploration and prototyping ├── params/ # Hyperparameter files and configurations +├── src/ # Main application code and model implementations ├── venv/ # Virtual environment for dependency management ├── requirements.txt # Project dependencies └── README.md # Project documentation diff --git a/data/preprocess_data.py b/data/preprocess_data.py index 4b2e5fa..db87d7e 100644 --- a/data/preprocess_data.py +++ b/data/preprocess_data.py @@ -102,7 +102,7 @@ def process_data(file_path, output_path): Returns: pd.DataFrame: Processed DataFrame. """ - data = pd.read_excel(file_path, engine='openpyxl') + data = pd.read_csv(file_path) data['transaction_date'] = pd.to_datetime(data['transaction_date']) diff --git a/models/best_lstm_model.pth b/models/best_lstm_model.pth new file mode 100644 index 0000000000000000000000000000000000000000..5fc4d5ecc65ef60643615af7cca1c41751ac644a GIT binary patch literal 45708 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 z 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 ayyNfJQrxw(qnv!l&vd!3j?e%7+5ZFLB7fxo literal 0 HcmV?d00001 diff --git a/models/scaler_lstm.pkl b/models/scaler_lstm.pkl new file mode 100644 index 0000000000000000000000000000000000000000..9738b74cc63ad3600db46f74921a3c4d78b6844e GIT binary patch literal 1079 zcma)6&2G~`5O&<8Y2CC*TcAQk&;y6G2cv?JdO#!y35i-wrEnk;Ld)9O)CPO){c&kf zkjkNd(w<-=1TVs|5)Z%|@BrL+1K70_M2nC*vb^Kf%s1coo8A55uvsuN6U*#Xh#1)-B7$F7%45V0m8M|TN+Bl7pK1c#jRhMGEr9U4~3j0qfOp?EAO|jJV zLdcjDr7TN|GVVehs|bk_^I@VWm6ue zqcr3}7Ht8Fycjc1Q;%E3$iu7=bBh!lnXh-M zDu*i#8T5D%V?cPHEOg3hm!e&SQ$!XKCzo7%_(tt%6LT1hWX%?q;>nQeOsok{Tt5Tk6Zu% literal 0 HcmV?d00001 diff --git a/models/scaler_ts_transformer.pkl b/models/scaler_ts_transformer.pkl new file mode 100644 index 0000000000000000000000000000000000000000..9738b74cc63ad3600db46f74921a3c4d78b6844e GIT binary patch literal 1079 zcma)6&2G~`5O&<8Y2CC*TcAQk&;y6G2cv?JdO#!y35i-wrEnk;Ld)9O)CPO){c&kf zkjkNd(w<-=1TVs|5)Z%|@BrL+1K70_M2nC*vb^Kf%s1coo8A55uvsuN6U*#Xh#1)-B7$F7%45V0m8M|TN+Bl7pK1c#jRhMGEr9U4~3j0qfOp?EAO|jJV zLdcjDr7TN|GVVehs|bk_^I@VWm6ue zqcr3}7Ht8Fycjc1Q;%E3$iu7=bBh!lnXh-M zDu*i#8T5D%V?cPHEOg3hm!e&SQ$!XKCzo7%_(tt%6LT1hWX%?q;>nQeOsok{Tt5Tk6Zu% literal 0 HcmV?d00001 diff --git a/params/best_ts_transformer_params.json b/params/best_ts_transformer_params.json index a2f4432..802e197 100644 --- a/params/best_ts_transformer_params.json +++ b/params/best_ts_transformer_params.json @@ -1,9 +1,9 @@ { - "num_layers": 2, "num_heads": 16, + "num_layers": 2, "d_model": 64, - "dim_feedforward": 192, "ff_dim": 128, "learning_rate": 0.001, - "dropout_rate": 0.1 + "dropout_rate": 0.1, + "dim_feedforward": 192 } \ No newline at end of file diff --git a/src/api.py b/src/api.py index 420b817..3780e64 100644 --- a/src/api.py +++ b/src/api.py @@ -3,16 +3,16 @@ import numpy as np import tensorflow as tf import torch -from torch import load import joblib -from statsmodels.tsa.arima.model import ARIMAResults +import requests import os -from models.time_series_transformer import TimeSeriesTransformer +from lstm_bayesian_torch import create_sequences as lstm_create_sequences +from lstm_torch import create_sequences as lstm_pure_create_sequences +from ts_transformer_torch import create_sequences as transformer_create_sequences app = FastAPI() -# Model and Scaler Paths LSTM_MODEL_PATH = "models/best_lstm_model.keras" LSTM_BAYESIAN_MODEL_PATH = "models/best_lstm_bayesian_model.keras" TRANSFORMER_MODEL_PATH = "models/best_ts_transformer_model.pt" @@ -21,7 +21,6 @@ LSTM_BAYESIAN_SCALER_PATH = "models/scaler_lstm_bayesian.pkl" TRANSFORMER_SCALER_PATH = "models/scaler_ts_transformer.pkl" -# Models and Scalers lstm_model = None lstm_bayesian_model = None transformer_model = None @@ -35,74 +34,89 @@ def load_models_and_scalers(): global lstm_model, lstm_bayesian_model, transformer_model, arima_model global lstm_scaler, lstm_bayesian_scaler, transformer_scaler - # Load LSTM model if os.path.exists(LSTM_MODEL_PATH): lstm_model = tf.keras.models.load_model(LSTM_MODEL_PATH) print("LSTM model loaded successfully.") - # Load LSTM Bayesian model if os.path.exists(LSTM_BAYESIAN_MODEL_PATH): lstm_bayesian_model = tf.keras.models.load_model(LSTM_BAYESIAN_MODEL_PATH) print("LSTM Bayesian model loaded successfully.") - # Load Transformer model if os.path.exists(TRANSFORMER_MODEL_PATH): - transformer_model = TimeSeriesTransformer( - input_size=64, - num_layers=2, - num_heads=16, - d_model=64, - dim_feedforward=192 - ) - state_dict = torch.load(TRANSFORMER_MODEL_PATH, map_location="cpu") - transformer_model.load_state_dict(state_dict, strict=False) + transformer_model = torch.load(TRANSFORMER_MODEL_PATH, map_location="cpu") transformer_model.eval() print("Transformer model loaded successfully.") - # Load ARIMA model - # if os.path.exists(ARIMA_MODEL_PATH): - # with open(ARIMA_MODEL_PATH, "rb") as f: - # arima_model = ARIMAResults.load(f) - # print("ARIMA model loaded successfully.") + if os.path.exists(ARIMA_MODEL_PATH): + with open(ARIMA_MODEL_PATH, "rb") as f: + arima_model = joblib.load(f) + print("ARIMA model loaded successfully.") - # Load LSTM scaler - if os.path.exists(LSTM_SCALER_PATH): - lstm_scaler = joblib.load(LSTM_SCALER_PATH) - print("LSTM scaler loaded successfully.") + lstm_scaler = joblib.load(LSTM_SCALER_PATH) if os.path.exists(LSTM_SCALER_PATH) else None + lstm_bayesian_scaler = joblib.load(LSTM_BAYESIAN_SCALER_PATH) if os.path.exists(LSTM_BAYESIAN_SCALER_PATH) else None + transformer_scaler = joblib.load(TRANSFORMER_SCALER_PATH) if os.path.exists(TRANSFORMER_SCALER_PATH) else None + print("Scalers loaded successfully.") - # Load LSTM Bayesian scaler - if os.path.exists(LSTM_BAYESIAN_SCALER_PATH): - lstm_bayesian_scaler = joblib.load(LSTM_BAYESIAN_SCALER_PATH) - print("LSTM Bayesian scaler loaded successfully.") - - # Load Transformer scaler - if os.path.exists(TRANSFORMER_SCALER_PATH): - transformer_scaler = joblib.load(TRANSFORMER_SCALER_PATH) - print("Transformer scaler loaded successfully.") - - print("All models and scalers loaded successfully.") - -# Input Data Schema class InputData(BaseModel): data: list +class TextInput(BaseModel): + text: str + +def preprocess_with_gemini(user_input: str): + """ + Use the Gemini API to preprocess text input into structured data. + """ + gemini_api_key = os.getenv('GEMINI_API_KEY') + if not gemini_api_key: + raise ValueError("Gemini API key not set.") + + gemini_endpoint = "https://gemini.googleapis.com/v1beta1/text:analyze" + headers = {"Content-Type": "application/json", "Authorization": f"Bearer {gemini_api_key}"} + payload = {"document": {"type": "PLAIN_TEXT", "content": user_input}, "encodingType": "UTF8"} + + response = requests.post(gemini_endpoint, headers=headers, json=payload) + if response.status_code != 200: + raise Exception(f"Gemini API request failed: {response.text}") + + return extract_relevant_features(response.json()) + +def extract_relevant_features(api_response): + """ + Extract structured features from the Gemini API response. + """ + entities = api_response.get("entities", []) + numerical_data = [float(entity["value"]) for entity in entities if "value" in entity] + product_ids = [entity.get("type", "unknown") for entity in entities] + return np.array(numerical_data).reshape(-1, 1), product_ids + +def convert_to_model_input(processed_data, product_ids, model_type, seq_length=10): + """ + Convert structured data into model-ready format. + """ + if model_type == "LSTM": + return lstm_pure_create_sequences(processed_data, product_ids, seq_length, [0]) + elif model_type == "LSTM-Bayesian": + return lstm_create_sequences(processed_data, product_ids, seq_length, [0]) + elif model_type == "Transformer": + return transformer_create_sequences(processed_data, product_ids, seq_length, [0]) + else: + raise ValueError(f"Unknown model type: {model_type}") + @app.post("/predict/lstm") def predict_lstm(input_data: InputData): + """ + Predict using the LSTM model. + """ if lstm_model is None or lstm_scaler is None: raise HTTPException(status_code=500, detail="LSTM model or scaler not loaded.") - try: - # Scale input data input_array = np.array(input_data.data).reshape(-1, 1) scaled_input = lstm_scaler.transform(input_array) - # Create sequences - SEQ_LENGTH = 10 - if len(scaled_input) < SEQ_LENGTH: - raise ValueError("Input data must have at least 10 data points.") - - sequences = np.array([scaled_input[i:i + SEQ_LENGTH] for i in range(len(scaled_input) - SEQ_LENGTH + 1)]) - predictions = lstm_model.predict(sequences) + seq_length = 10 + sequences = [scaled_input[i:i + seq_length] for i in range(len(scaled_input) - seq_length + 1)] + predictions = lstm_model.predict(np.array(sequences)) predictions = lstm_scaler.inverse_transform(predictions) return {"predictions": predictions.flatten().tolist()} @@ -111,21 +125,18 @@ def predict_lstm(input_data: InputData): @app.post("/predict/lstm-bayesian") def predict_lstm_bayesian(input_data: InputData): + """ + Predict using the LSTM Bayesian model. + """ if lstm_bayesian_model is None or lstm_bayesian_scaler is None: raise HTTPException(status_code=500, detail="LSTM Bayesian model or scaler not loaded.") - try: - # Scale input data input_array = np.array(input_data.data).reshape(-1, 1) scaled_input = lstm_bayesian_scaler.transform(input_array) - # Create sequences - SEQ_LENGTH = 10 - if len(scaled_input) < SEQ_LENGTH: - raise ValueError("Input data must have at least 10 data points.") - - sequences = np.array([scaled_input[i:i + SEQ_LENGTH] for i in range(len(scaled_input) - SEQ_LENGTH + 1)]) - predictions = lstm_bayesian_model.predict(sequences) + seq_length = 10 + sequences = [scaled_input[i:i + seq_length] for i in range(len(scaled_input) - seq_length + 1)] + predictions = lstm_bayesian_model.predict(np.array(sequences)) predictions = lstm_bayesian_scaler.inverse_transform(predictions) return {"predictions": predictions.flatten().tolist()} @@ -134,24 +145,19 @@ def predict_lstm_bayesian(input_data: InputData): @app.post("/predict/transformer") def predict_transformer(input_data: InputData): + """ + Predict using the Transformer model. + """ if transformer_model is None or transformer_scaler is None: raise HTTPException(status_code=500, detail="Transformer model or scaler not loaded.") - try: - # Scale input data input_array = np.array(input_data.data).reshape(-1, 1) scaled_input = transformer_scaler.transform(input_array) - # Create sequences - SEQ_LENGTH = 10 - if len(scaled_input) < SEQ_LENGTH: - raise ValueError("Input data must have at least 10 data points.") - - sequences = np.array([scaled_input[i:i + SEQ_LENGTH] for i in range(len(scaled_input) - SEQ_LENGTH + 1)]) + seq_length = 10 + sequences = [scaled_input[i:i + seq_length] for i in range(len(scaled_input) - seq_length + 1)] sequences = torch.tensor(sequences, dtype=torch.float32) - # Get predictions - transformer_model.eval() with torch.no_grad(): predictions = transformer_model(sequences).numpy() predictions = transformer_scaler.inverse_transform(predictions) @@ -160,6 +166,21 @@ def predict_transformer(input_data: InputData): except Exception as e: raise HTTPException(status_code=500, detail=str(e)) +@app.post("/predict/arima") +def predict_arima(input_data: InputData): + """ + Predict using the ARIMA model. + """ + if arima_model is None: + raise HTTPException(status_code=500, detail="ARIMA model not loaded.") + try: + input_array = np.array(input_data.data) + predictions = arima_model.forecast(steps=len(input_array)) + + return {"predictions": predictions.tolist()} + except Exception as e: + raise HTTPException(status_code=500, detail=str(e)) + @app.get("/") def read_root(): return {"message": "Model inference API is running."} diff --git a/src/lstm.py b/src/lstm.py index eae74e7..a20ff68 100644 --- a/src/lstm.py +++ b/src/lstm.py @@ -34,16 +34,18 @@ def create_sequences(data, product_ids, seq_length, target_indices): """ - Creates input-output sequences for time-series forecasting with product-level inputs. + Creates input-output sequences for time-series forecasting, along with product-level inputs. Args: - data (np.array): Array of shape (time_steps, features). + data (np.array): Array of shape (time_steps, features). Contains the numerical features. product_ids (np.array): Array of product IDs corresponding to each time step. seq_length (int): Length of each input sequence. - target_indices (list): Indices of target columns in the data. + target_indices (list): Indices of target columns in the data to be predicted. Returns: - np.array, np.array, np.array: Product IDs, input sequences (X), and target outputs (y). + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). """ X, y, products = [], [], [] for i in range(len(data) - seq_length): @@ -54,23 +56,28 @@ def create_sequences(data, product_ids, seq_length, target_indices): def train_and_evaluate_model(product_train, X_train, product_test, X_test, y_train, y_test, num_units, batch_size, epochs, learning_rate, seq_length, target_size, num_products, embedding_dim): """ - Trains and evaluates an LSTM model with product embeddings. + Trains and evaluates a TensorFlow LSTM model with product embeddings. Args: - product_train, product_test: Sequences of product IDs for training and testing. - X_train, X_test: Training and testing data (numerical features). - y_train, y_test: Training and testing targets. - num_units (int): Number of units in the LSTM layer. + product_train (np.ndarray): Training product IDs (sequences of product IDs). + X_train (np.ndarray): Training numerical input features. + product_test (np.ndarray): Testing product IDs (sequences of product IDs). + X_test (np.ndarray): Testing numerical input features. + y_train (np.ndarray): Training target outputs. + y_test (np.ndarray): Testing target outputs. + num_units (int): Number of hidden units in the LSTM layer. batch_size (int): Batch size for training. epochs (int): Number of training epochs. learning_rate (float): Learning rate for the optimizer. - seq_length (int): Sequence length for the input data. - target_size (int): Number of output targets. - num_products (int): Number of unique products (for embedding). + seq_length (int): Sequence length of the input data. + target_size (int): Number of output targets (e.g., predictions per time step). + num_products (int): Number of unique product IDs for embedding. embedding_dim (int): Dimension of the product embedding. Returns: - Model, float, float: Trained model, MAE, RMSE. + tf.keras.Model: The trained TensorFlow LSTM model. + float: Mean Absolute Error (MAE) on the test dataset. + float: Root Mean Squared Error (RMSE) on the test dataset. """ product_input = Input(shape=(seq_length,), name='product_id') numerical_input = Input(shape=(seq_length, X_train.shape[2]), name='numerical_features') @@ -94,11 +101,15 @@ def train_and_evaluate_model(product_train, X_train, product_test, X_test, y_tra def save_best_params(best_params): """ - Saves the best parameters dynamically to a JSON file. Handles both single - parameter sets and lists of parameter sets. + Saves the best hyperparameters dynamically to a JSON file. Args: - best_params (dict): A dictionary containing the best parameters to save. + best_params (dict): Dictionary containing the best hyperparameters. + Keys must include 'num_units', 'batch_size', 'epochs', and 'learning_rate'. + + Notes: + If any required keys are missing, default values are added before saving. + The parameters are saved as a JSON file (`params/best_lstm_params.json`). """ params_path = os.path.join(PARAMS_DIR, 'best_lstm_params.json') @@ -137,11 +148,18 @@ def save_best_params(best_params): def load_best_params(): """ - Loads the most recent parameters from a JSON file. If the file contains a list, - use the last entry. If keys are missing, default values are added. + Loads the most recent hyperparameters from a JSON file. Returns: - dict: Best parameters with all required keys. + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist or keys are missing, + default values are used. + + Notes: + Default parameters include: + - num_units: 128 + - batch_size: 32 + - epochs: 50 + - learning_rate: 0.001 """ params_path = os.path.join(PARAMS_DIR, 'best_lstm_params.json') @@ -174,14 +192,22 @@ def load_best_params(): def dynamic_param_tuning(best_params, gradient): """ - Dynamically adjusts parameters based on performance gradient. + Dynamically adjusts hyperparameters based on performance gradients. Args: - best_params (dict): Current best parameters. - gradient (dict): Gradient direction for parameters. + best_params (dict): Current best hyperparameters (e.g., num_units, batch_size, etc.). + gradient (dict): A dictionary indicating whether to 'increase' or 'decrease' each parameter. Returns: - dict: Updated parameters. + dict: Updated hyperparameters after applying the gradient adjustments. + + Notes: + - 'learning_rate' is clamped between 0.0001 and 0.01. + - 'batch_size' is clamped between 16 and 128. + - 'num_units' is clamped between 32 and 256. + - Gradients are applied multiplicatively: + - 'increase': Parameter is multiplied by 1.2. + - 'decrease': Parameter is multiplied by 0.8. """ updated_params = best_params.copy() for param, direction in gradient.items(): @@ -198,6 +224,29 @@ def dynamic_param_tuning(best_params, gradient): return updated_params def main(): + """ + Main function to preprocess data, build, train, and evaluate the LSTM model. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Maps product IDs to integers for embedding. + 3. Splits the data into training and testing sets. + 4. Initializes hyperparameters for the LSTM model: + - num_units: Number of LSTM hidden units. + - batch_size: Batch size for training. + - epochs: Number of epochs for training. + - learning_rate: Learning rate for the optimizer. + - seq_length: Sequence length for inputs. + - target_size: Number of prediction targets. + - num_products: Number of unique products for embedding. + - embedding_dim: Dimension of the product embedding. + 5. Builds, trains, and evaluates the LSTM model. + 6. Saves the trained model to disk. + + Notes: + - Assumes preprocessed data from `process_data`. + - Saves the model to `models/best_lstm_model.keras`. + """ logger.info("Loading and preprocessing data") processed_file = 'data/processed_coffee_shop_data.csv' df = process_data(processed_file, 'data/lstm_output.csv') diff --git a/src/lstm_bayesian.py b/src/lstm_bayesian.py index 343e829..2d08221 100644 --- a/src/lstm_bayesian.py +++ b/src/lstm_bayesian.py @@ -34,16 +34,18 @@ def create_sequences(data, product_ids, seq_length, target_indices): """ - Creates input-output sequences for time-series forecasting with product-level inputs. + Creates input-output sequences for time-series forecasting, along with product-level inputs. Args: - data (np.array): Array of shape (time_steps, features). + data (np.array): Array of shape (time_steps, features). Contains the numerical features. product_ids (np.array): Array of product IDs corresponding to each time step. seq_length (int): Length of each input sequence. - target_indices (list): Indices of target columns in the data. + target_indices (list): Indices of target columns in the data to be predicted. Returns: - np.array, np.array, np.array: Product IDs, input sequences (X), and target outputs (y). + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). """ X, y, products = [], [], [] for i in range(len(data) - seq_length): @@ -54,23 +56,27 @@ def create_sequences(data, product_ids, seq_length, target_indices): def train_and_evaluate_model(product_train, X_train, product_test, X_test, y_train, y_test, num_units, batch_size, epochs, learning_rate, seq_length, target_size, num_products, embedding_dim): """ - Trains and evaluates an LSTM model with product embeddings. + Trains and evaluates a TensorFlow LSTM model with product embeddings. Args: - product_train, product_test: Sequences of product IDs for training and testing. - X_train, X_test: Training and testing data (numerical features). - y_train, y_test: Training and testing targets. - num_units (int): Number of units in the LSTM layer. + product_train (np.ndarray): Training product IDs (sequences of product IDs). + X_train (np.ndarray): Training numerical input features. + product_test (np.ndarray): Testing product IDs (sequences of product IDs). + X_test (np.ndarray): Testing numerical input features. + y_train (np.ndarray): Training target outputs. + y_test (np.ndarray): Testing target outputs. + num_units (int): Number of hidden units in the LSTM layer. batch_size (int): Batch size for training. epochs (int): Number of training epochs. learning_rate (float): Learning rate for the optimizer. - seq_length (int): Sequence length for the input data. - target_size (int): Number of output targets. - num_products (int): Number of unique products (for embedding). + seq_length (int): Sequence length of the input data. + target_size (int): Number of output targets (e.g., predictions per time step). + num_products (int): Number of unique product IDs for embedding. embedding_dim (int): Dimension of the product embedding. Returns: - float: RMSE of the model. + tf.keras.Model: The trained TensorFlow LSTM model. + float: Root Mean Squared Error (RMSE) on the test dataset. """ product_input = Input(shape=(seq_length,), name='product_id') numerical_input = Input(shape=(seq_length, X_train.shape[2]), name='numerical_features') @@ -93,10 +99,15 @@ def train_and_evaluate_model(product_train, X_train, product_test, X_test, y_tra def save_best_params(best_params): """ - Dynamically saves the best parameters. + Saves the best hyperparameters dynamically to a JSON file. Args: - best_params (dict): The best parameters to save. + best_params (dict): Dictionary containing the best hyperparameters. + Keys must include 'num_units', 'batch_size', 'epochs', and 'learning_rate'. + + Notes: + If any required keys are missing, default values are added before saving. + The parameters are saved as a JSON file (`params/best_lstm_bayesian_params.json`). """ params_path = os.path.join(PARAMS_DIR, 'best_lstm_bayesian_params.json') @@ -119,11 +130,18 @@ def save_best_params(best_params): def load_best_params(): """ - Loads the most recent parameters from a JSON file. If the file contains a list, - the last entry is used. If keys are missing, default values are added. + Loads the most recent hyperparameters from a JSON file. Returns: - dict: Best parameters with all required keys. + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist or keys are missing, + default values are used. + + Notes: + Default parameters include: + - num_units: 128 + - batch_size: 32 + - epochs: 50 + - learning_rate: 0.001 """ params_path = os.path.join(PARAMS_DIR, 'best_lstm_bayesian_params.json') @@ -151,16 +169,18 @@ def load_best_params(): def objective_function(num_units, batch_size, epochs, learning_rate): """ - Objective function for Bayesian Optimization. + Objective function for Bayesian Optimization. Trains the LSTM model and evaluates its performance + using the provided hyperparameters. Args: - num_units (float): Number of LSTM units. - batch_size (float): Batch size. - epochs (float): Number of epochs. - learning_rate (float): Learning rate. + num_units (float): Number of LSTM units (treated as a float by Bayesian Optimization). + batch_size (float): Batch size for training (treated as a float by Bayesian Optimization). + epochs (float): Number of epochs for training (treated as a float by Bayesian Optimization). + learning_rate (float): Learning rate for the optimizer. Returns: - float: Negative RMSE (Bayesian Optimizer maximizes; we minimize RMSE). + float: Negative RMSE (Root Mean Squared Error). The negative value is used because Bayesian + Optimization maximizes the objective function, and we aim to minimize RMSE. """ model, rmse = train_and_evaluate_model( product_train, X_train, product_test, X_test, y_train, y_test, @@ -172,6 +192,26 @@ def objective_function(num_units, batch_size, epochs, learning_rate): return -rmse # Negative because Bayesian Optimization maximizes def main(): + """ + Main function for running Bayesian Optimization on a TensorFlow LSTM model. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Maps product IDs to integers for embedding. + 3. Configures the Bayesian Optimization bounds for hyperparameters: + - num_units: Number of LSTM hidden units. + - batch_size: Batch size for training. + - epochs: Number of epochs for training. + - learning_rate: Learning rate for the optimizer. + 4. Runs the Bayesian Optimization process to find the best hyperparameters. + 5. Logs and saves the best parameters found by Bayesian Optimization. + 6. Saves the trained model to disk. + + Notes: + - Assumes global variables for processed data (`X_train`, `X_test`, `y_train`, etc.). + - Saves the model to `models/best_lstm_model.h5`. + - Saves the best hyperparameters to `params/best_lstm_bayesian_params.json`. + """ logger.info("Loading and preprocessing data") processed_file = 'data/processed_coffee_shop_data.csv' df = process_data(processed_file, 'data/lstm_bayesian_output.csv') diff --git a/src/lstm_bayesian_torch.py b/src/lstm_bayesian_torch.py new file mode 100644 index 0000000..60af48a --- /dev/null +++ b/src/lstm_bayesian_torch.py @@ -0,0 +1,322 @@ +import warnings +warnings.filterwarnings("ignore", "urllib3 v2 only supports OpenSSL") + +import os +import logging +import sys +import json +import numpy as np +import pandas as pd +import joblib +from datetime import datetime +from sklearn.preprocessing import MinMaxScaler +from sklearn.metrics import mean_absolute_error, mean_squared_error +import torch +import torch.nn as nn +import torch.optim as optim +from bayes_opt import BayesianOptimization +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../data'))) +from preprocess_data import process_data + +LOG_DIR = 'logs/' +MODEL_DIR = 'models/' +PARAMS_DIR = 'params/' +os.makedirs(LOG_DIR, exist_ok=True) +os.makedirs(MODEL_DIR, exist_ok=True) +os.makedirs(PARAMS_DIR, exist_ok=True) + +log_filename = os.path.join(LOG_DIR, f"lstm_bayesian_log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log") +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[logging.StreamHandler(sys.stdout), + logging.FileHandler(log_filename, mode='w')]) + +logger = logging.getLogger() + +def create_sequences(data, product_ids, seq_length, target_indices): + """ + Creates input-output sequences for time-series forecasting, along with product-level inputs. + + Args: + data (np.array): Array of shape (time_steps, features). Contains the numerical features. + product_ids (np.array): Array of product IDs corresponding to each time step. + seq_length (int): Length of each input sequence. + target_indices (list): Indices of target columns in the data to be predicted. + + Returns: + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). + """ + X, y, products = [], [], [] + for i in range(len(data) - seq_length): + X.append(data[i:i + seq_length]) + y.append(data[i + seq_length, target_indices]) + products.append(product_ids[i:i + seq_length]) + return np.array(products), np.array(X), np.array(y) + +class LSTMModel(nn.Module): + """ + Defines a PyTorch-based LSTM model with product embeddings and a fully connected output layer. + + Args: + input_size (int): Number of numerical input features per time step. + num_units (int): Number of hidden units in the LSTM layer. + output_size (int): Number of output targets (e.g., predictions per time step). + num_products (int): Number of unique product IDs for embedding. + embedding_dim (int): Dimension of the product embedding. + + Methods: + forward(numerical_input, product_input): + Combines numerical features with product embeddings, processes them through LSTM layers, + and returns predictions. + + Args: + numerical_input (torch.Tensor): Numerical features of shape (batch_size, seq_length, input_size). + product_input (torch.Tensor): Product ID features of shape (batch_size, seq_length). + + Returns: + torch.Tensor: Predictions of shape (batch_size, output_size). + """ + def __init__(self, input_size, num_units, output_size, num_products, embedding_dim): + super(LSTMModel, self).__init__() + self.embedding = nn.Embedding(num_products, embedding_dim) + self.lstm = nn.LSTM(input_size + embedding_dim, num_units, batch_first=True) + self.fc = nn.Linear(num_units, output_size) + + def forward(self, numerical_input, product_input): + embedded_products = self.embedding(product_input) + combined_input = torch.cat((numerical_input, embedded_products), dim=2) + lstm_out, _ = self.lstm(combined_input) + output = self.fc(lstm_out[:, -1, :]) # Use the last LSTM output + return output + +def train_and_evaluate_model(product_train, X_train, product_test, X_test, y_train, y_test, num_units, batch_size, epochs, learning_rate, seq_length, target_size, num_products, embedding_dim, device): + """ + Trains and evaluates a PyTorch LSTM model with product embeddings. + + Args: + product_train (np.ndarray): Training product IDs (sequences of product IDs). + X_train (np.ndarray): Training numerical input features. + product_test (np.ndarray): Testing product IDs (sequences of product IDs). + X_test (np.ndarray): Testing numerical input features. + y_train (np.ndarray): Training target outputs. + y_test (np.ndarray): Testing target outputs. + num_units (int): Number of hidden units in the LSTM layer. + batch_size (int): Batch size for training. + epochs (int): Number of training epochs. + learning_rate (float): Learning rate for the optimizer. + seq_length (int): Sequence length of the input data. + target_size (int): Number of target outputs (e.g., predictions per time step). + num_products (int): Number of unique product IDs for embedding. + embedding_dim (int): Dimension of the product embedding. + device (torch.device): Device to run the model on ('cuda' for GPU, 'cpu' otherwise). + + Returns: + LSTMModel: The trained PyTorch LSTM model. + float: Root Mean Squared Error (RMSE) on the test dataset. + """ + input_size = X_train.shape[2] + model = LSTMModel(input_size, int(num_units), target_size, num_products, embedding_dim).to(device) + + criterion = nn.MSELoss() + optimizer = optim.Adam(model.parameters(), lr=learning_rate) + + train_dataset = torch.utils.data.TensorDataset( + torch.tensor(X_train, dtype=torch.float32), + torch.tensor(product_train, dtype=torch.long), + torch.tensor(y_train, dtype=torch.float32) + ) + train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=int(batch_size), shuffle=True) + + model.train() + for epoch in range(int(epochs)): + for numerical_input, product_input, target in train_loader: + numerical_input, product_input, target = numerical_input.to(device), product_input.to(device), target.to(device) + + optimizer.zero_grad() + output = model(numerical_input, product_input) + loss = criterion(output, target) + loss.backward() + optimizer.step() + + model.eval() + with torch.no_grad(): + X_test_tensor = torch.tensor(X_test, dtype=torch.float32).to(device) + product_test_tensor = torch.tensor(product_test, dtype=torch.long).to(device) + y_test_tensor = torch.tensor(y_test, dtype=torch.float32).to(device) + + predictions = model(X_test_tensor, product_test_tensor).cpu().numpy() + rmse = np.sqrt(mean_squared_error(y_test, predictions)) + + return model, rmse + +def save_best_params(best_params): + """ + Saves the best hyperparameters dynamically to a JSON file. + + Args: + best_params (dict): Dictionary containing the best hyperparameters. + Keys must include 'num_units', 'batch_size', 'epochs', and 'learning_rate'. + + Notes: + If any required keys are missing, default values are added before saving. + The parameters are saved as a JSON file (`params/best_lstm_bayesian_params.json`). + """ + params_path = os.path.join(PARAMS_DIR, 'best_lstm_bayesian_params.json') + + required_keys = ['num_units', 'batch_size', 'epochs', 'learning_rate'] + for key in required_keys: + if key not in best_params: + logger.warning(f"Missing parameter '{key}' in best_params before saving. Adding default value.") + if key == 'learning_rate': + best_params[key] = 0.001 + elif key == 'num_units': + best_params[key] = 128 + elif key == 'batch_size': + best_params[key] = 32 + elif key == 'epochs': + best_params[key] = 50 + + with open(params_path, 'w') as f: + json.dump(best_params, f, indent=4) + logger.info(f"Best parameters saved dynamically to {params_path}") + +def load_best_params(): + """ + Loads the most recent hyperparameters from a JSON file. + + Returns: + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist or keys are missing, + default values are used. + + Notes: + Default parameters include: + - num_units: 128 + - batch_size: 32 + - epochs: 50 + - learning_rate: 0.001 + """ + params_path = os.path.join(PARAMS_DIR, 'best_lstm_bayesian_params.json') + + default_params = {'num_units': 128, 'batch_size': 32, 'epochs': 50, 'learning_rate': 0.001} + + if os.path.exists(params_path): + with open(params_path, 'r') as f: + params = json.load(f) + + if isinstance(params, list): + if len(params) == 0: + logger.warning(f"Parameters file '{params_path}' is empty. Using default parameters.") + return default_params + params = params[-1] + + for key, default_value in default_params.items(): + if key not in params: + logger.warning(f"Key '{key}' missing in loaded params. Adding default value: {default_value}") + params[key] = default_value + + return params + + logger.warning(f"Parameters file '{params_path}' not found. Using default parameters.") + return default_params + +def objective_function(num_units, batch_size, epochs, learning_rate): + """ + Objective function for Bayesian Optimization. Trains the LSTM model and evaluates its performance + using the provided hyperparameters. + + Args: + num_units (float): Number of LSTM units (treated as a float by Bayesian Optimization). + batch_size (float): Batch size for training (treated as a float by Bayesian Optimization). + epochs (float): Number of epochs for training (treated as a float by Bayesian Optimization). + learning_rate (float): Learning rate for the optimizer. + + Returns: + float: Negative RMSE (Root Mean Squared Error). The negative value is used because Bayesian + Optimization maximizes the objective function, and we aim to minimize RMSE. + """ + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + model, rmse = train_and_evaluate_model( + product_train, X_train, product_test, X_test, y_train, y_test, + num_units=num_units, batch_size=batch_size, epochs=epochs, + learning_rate=learning_rate, seq_length=seq_length, target_size=len(target_indices), + num_products=num_products, embedding_dim=embedding_dim, device=device + ) + logger.info(f"Tested params: num_units={num_units}, batch_size={batch_size}, epochs={epochs}, learning_rate={learning_rate}, RMSE={rmse:.2f}") + return -rmse + +def main(): + """ + Main function for running Bayesian Optimization on a PyTorch LSTM model. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Maps product IDs to integers for embedding. + 3. Configures the Bayesian Optimization bounds for hyperparameters: + - num_units: Number of LSTM hidden units. + - batch_size: Batch size for training. + - epochs: Number of epochs for training. + - learning_rate: Learning rate for the optimizer. + 4. Runs the Bayesian Optimization process to find the best hyperparameters. + 5. Logs and saves the best parameters found by Bayesian Optimization. + 6. Saves the trained model to disk. + + Notes: + - Assumes global variables for processed data (`X_train`, `X_test`, `y_train`, etc.). + - Saves the model to `models/best_lstm_model.pth`. + - Saves the best hyperparameters to `params/best_lstm_bayesian_params.json`. + """ + logger.info("Loading and preprocessing data") + processed_file = 'data/processed_coffee_shop_data.csv' + df = process_data(processed_file, 'data/lstm_bayesian_output.csv') + + unique_products = df['product_id'].unique() + product_mapping = {product: idx for idx, product in enumerate(unique_products)} + df['product_id'] = df['product_id'].map(product_mapping) + + features = ['transaction_qty', 'revenue'] + scaler = MinMaxScaler() + scaled_data = scaler.fit_transform(df[features]) + product_ids = df['product_id'].values + + scaler_path = os.path.join(MODEL_DIR, 'scaler_lstm_bayesian.pkl') + joblib.dump(scaler, scaler_path) + logger.info(f"Scaler saved to {scaler_path}") + + logger.info("Running LSTM Bayesian Optimization using PyTorch") + + global seq_length, target_indices, X_train, X_test, y_train, y_test, product_train, product_test, num_products, embedding_dim + seq_length = 10 + target_indices = [0, 1] + product_sequences, X, y = create_sequences(scaled_data, product_ids, seq_length, target_indices) + + train_size = int(len(X) * 0.8) + X_train, X_test = X[:train_size], X[train_size:] + y_train, y_test = y[:train_size], y[train_size:] + product_train, product_test = product_sequences[:train_size], product_sequences[train_size:] + + num_products = len(product_mapping) + embedding_dim = 16 + + bounds = { + 'num_units': (64, 256), + 'batch_size': (16, 64), + 'epochs': (25, 100), + 'learning_rate': (0.0001, 0.01), + } + + optimizer = BayesianOptimization( + f=objective_function, + pbounds=bounds, + verbose=2, + random_state=42, + ) + optimizer.maximize(init_points=5, n_iter=20) + + best_params = optimizer.max['params'] + logger.info(f"Best parameters found: {best_params}") + save_best_params(best_params) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/lstm_torch.py b/src/lstm_torch.py new file mode 100644 index 0000000..c14242a --- /dev/null +++ b/src/lstm_torch.py @@ -0,0 +1,330 @@ +import warnings +warnings.filterwarnings("ignore", "urllib3 v2 only supports OpenSSL") + +import os +import logging +import sys +import json +import numpy as np +import pandas as pd +import joblib +from datetime import datetime +from sklearn.preprocessing import MinMaxScaler +from sklearn.metrics import mean_absolute_error, mean_squared_error +import torch +import torch.nn as nn +import torch.optim as optim + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../data'))) +from preprocess_data import process_data + +LOG_DIR = 'logs/' +MODEL_DIR = 'models/' +PARAMS_DIR = 'params/' +os.makedirs(LOG_DIR, exist_ok=True) +os.makedirs(MODEL_DIR, exist_ok=True) +os.makedirs(PARAMS_DIR, exist_ok=True) + +log_filename = os.path.join(LOG_DIR, f"lstm_log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log") +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[logging.StreamHandler(sys.stdout), + logging.FileHandler(log_filename, mode='w')]) + +logger = logging.getLogger() + +def create_sequences(data, product_ids, seq_length, target_indices): + """ + Creates input-output sequences for time-series forecasting, along with product-level inputs. + + Args: + data (np.array): Array of shape (time_steps, features). Contains the numerical features. + product_ids (np.array): Array of product IDs corresponding to each time step. + seq_length (int): Length of each input sequence. + target_indices (list): Indices of target columns in the data to be predicted. + + Returns: + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). + """ + X, y, products = [], [], [] + for i in range(len(data) - seq_length): + X.append(data[i:i + seq_length]) + y.append(data[i + seq_length, target_indices]) + products.append(product_ids[i:i + seq_length]) + return np.array(products), np.array(X), np.array(y) + +class LSTMModel(nn.Module): + """ + Defines a PyTorch-based LSTM model for time-series forecasting. + + Args: + input_size (int): Number of numerical input features per time step. + num_units (int): Number of hidden units in the LSTM layer. + target_size (int): Number of output targets (e.g., dimensions of the predictions). + + Methods: + forward(x): + Processes input data through the LSTM layer and the fully connected layer. + Args: + x (torch.Tensor): Input tensor of shape (batch_size, seq_length, input_size). + Returns: + torch.Tensor: Predictions of shape (batch_size, target_size). + """ + def __init__(self, input_size, num_units, target_size): + super(LSTMModel, self).__init__() + self.lstm = nn.LSTM(input_size, num_units, batch_first=True) + self.fc = nn.Linear(num_units, target_size) + + def forward(self, x): + out, _ = self.lstm(x) + out = self.fc(out[:, -1, :]) + return out + +def train_and_evaluate_model(X_train, X_test, y_train, y_test, num_units, batch_size, epochs, learning_rate, seq_length, target_size, device): + """ + Trains and evaluates the LSTM model using PyTorch. + + Args: + X_train (np.array): Training input data of shape (num_samples, seq_length, num_features). + X_test (np.array): Testing input data of shape (num_samples, seq_length, num_features). + y_train (np.array): Training target data of shape (num_samples, target_size). + y_test (np.array): Testing target data of shape (num_samples, target_size). + num_units (int): Number of hidden units in the LSTM layer. + batch_size (int): Batch size for training. + epochs (int): Number of training epochs. + learning_rate (float): Learning rate for the optimizer. + seq_length (int): Sequence length for each input sample. + target_size (int): Number of output targets. + device (torch.device): The device to run the model on ('cuda' for GPU or 'cpu'). + + Returns: + LSTMModel: The trained PyTorch model. + float: Mean Absolute Error (MAE) on the test data. + float: Root Mean Squared Error (RMSE) on the test data. + """ + input_size = X_train.shape[2] + model = LSTMModel(input_size, num_units, target_size).to(device) + criterion = nn.MSELoss() + optimizer = optim.Adam(model.parameters(), lr=learning_rate) + + train_dataset = torch.utils.data.TensorDataset(torch.tensor(X_train, dtype=torch.float32), torch.tensor(y_train, dtype=torch.float32)) + train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True) + + model.train() + for epoch in range(epochs): + for X_batch, y_batch in train_loader: + X_batch, y_batch = X_batch.to(device), y_batch.to(device) + + optimizer.zero_grad() + outputs = model(X_batch) + loss = criterion(outputs, y_batch) + loss.backward() + optimizer.step() + + model.eval() + with torch.no_grad(): + X_test_tensor = torch.tensor(X_test, dtype=torch.float32).to(device) + y_test_tensor = torch.tensor(y_test, dtype=torch.float32).to(device) + + predictions = model(X_test_tensor).cpu().numpy() + mae = mean_absolute_error(y_test, predictions) + rmse = np.sqrt(mean_squared_error(y_test, predictions)) + + return model, mae, rmse + +def save_best_params(best_params): + """ + Saves the best hyperparameters dynamically to a JSON file. Appends to an existing file if present. + + Args: + best_params (dict): A dictionary containing the best hyperparameters. + Keys must include 'num_units', 'batch_size', 'epochs', and 'learning_rate'. + + Notes: + If required keys are missing, default values are added before saving. + The parameters are appended to a list if a JSON file already exists. + """ + params_path = os.path.join(PARAMS_DIR, 'best_lstm_params.json') + + required_keys = ['num_units', 'batch_size', 'epochs', 'learning_rate'] + for key in required_keys: + if key not in best_params: + logger.warning(f"Missing parameter '{key}' in best_params. Adding default value.") + if key == 'learning_rate': + best_params[key] = 0.001 + elif key == 'num_units': + best_params[key] = 128 + elif key == 'batch_size': + best_params[key] = 32 + elif key == 'epochs': + best_params[key] = 50 + + if os.path.exists(params_path): + with open(params_path, 'r') as f: + try: + existing_params = json.load(f) + if not isinstance(existing_params, list): + logger.warning(f"Existing params are not in list format. Overwriting with a list.") + existing_params = [] + except json.JSONDecodeError: + logger.warning(f"Failed to decode JSON. Overwriting with a new list.") + existing_params = [] + else: + existing_params = [] + + existing_params.append(best_params) + + with open(params_path, 'w') as f: + json.dump(existing_params, f, indent=4) + logger.info(f"Best parameters appended and saved to {params_path}") + + +def load_best_params(): + """ + Loads the most recent hyperparameters from a JSON file. + + Returns: + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist + or keys are missing, default values are used. + + Notes: + Default parameters include: + - num_units: 128 + - batch_size: 32 + - epochs: 50 + - learning_rate: 0.001 + """ + params_path = os.path.join(PARAMS_DIR, 'best_lstm_params.json') + + default_params = {'num_units': 128, 'batch_size': 32, 'epochs': 50, 'learning_rate': 0.001} + + if os.path.exists(params_path): + with open(params_path, 'r') as f: + try: + params = json.load(f) + + if isinstance(params, list) and len(params) > 0: + params = params[-1] # Use the last entry + elif not isinstance(params, dict): + logger.warning(f"Invalid format in {params_path}. Using default parameters.") + return default_params + + for key, default_value in default_params.items(): + if key not in params: + logger.warning(f"Key '{key}' missing in loaded params. Adding default value: {default_value}") + params[key] = default_value + + return params + except json.JSONDecodeError: + logger.warning(f"Failed to decode JSON in {params_path}. Using default parameters.") + return default_params + + logger.warning(f"Parameters file '{params_path}' not found. Using default parameters.") + return default_params + + +def dynamic_param_tuning(best_params, gradient): + """ + Dynamically adjusts hyperparameters based on performance gradients. + + Args: + best_params (dict): Current best hyperparameters (e.g., num_units, batch_size, etc.). + gradient (dict): A dictionary indicating whether to 'increase' or 'decrease' each parameter. + + Returns: + dict: Updated hyperparameters after applying the gradient adjustments. + + Notes: + - 'learning_rate' is clamped between 0.0001 and 0.01. + - 'batch_size' is clamped between 16 and 128. + - 'num_units' is clamped between 32 and 256. + - Gradients are applied multiplicatively: + - 'increase': Parameter is multiplied by 1.2. + - 'decrease': Parameter is multiplied by 0.8. + """ + updated_params = best_params.copy() + for param, direction in gradient.items(): + if direction == 'increase': + updated_params[param] *= 1.2 + elif direction == 'decrease': + updated_params[param] *= 0.8 + if param == 'learning_rate': + updated_params[param] = max(0.0001, min(0.01, updated_params[param])) + elif param == 'batch_size': + updated_params[param] = max(16, min(128, int(updated_params[param]))) + elif param == 'num_units': + updated_params[param] = max(32, min(256, int(updated_params[param]))) + return updated_params + +def main(): + """ + Main function to run the LSTM training and evaluation pipeline. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Splits the data into training and testing sets. + 3. Loads the best hyperparameters (if available) or initializes defaults. + 4. Iteratively trains the LSTM model with the current parameters. + 5. Dynamically tunes hyperparameters based on performance gradients. + 6. Saves the best hyperparameters and the trained model. + + Notes: + - The process stops early if no improvement is observed for 3 consecutive iterations. + - The model is saved to `models/best_lstm_model.pth`. + - The best hyperparameters are saved to `params/best_lstm_params.json`. + """ + logger.info("Loading and preprocessing data") + processed_file = 'data/processed_coffee_shop_data.csv' + df = process_data(processed_file, 'data/lstm_output.csv') + + features = ['transaction_qty', 'revenue'] + scaler = MinMaxScaler() + scaled_data = scaler.fit_transform(df[features]) + + scaler_path = os.path.join(MODEL_DIR, 'scaler_lstm.pkl') + joblib.dump(scaler, scaler_path) + logger.info(f"Scaler saved to {scaler_path}") + + seq_length = 10 + target_indices = [0, 1] + X, y = create_sequences(scaled_data, seq_length, target_indices) + + train_size = int(len(X) * 0.8) + X_train, X_test = X[:train_size], X[train_size:] + y_train, y_test = y[:train_size], y[train_size:] + + device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') + + best_params = load_best_params() or {'num_units': 128, 'batch_size': 32, 'epochs': 50, 'learning_rate': 0.001} + logger.info(f"Starting with best parameters: {best_params}") + + best_rmse = float('inf') + no_improvement_count = 0 + + for iteration in range(10): # Max 10 iterations + logger.info(f"Iteration {iteration + 1}: Testing parameters {best_params}") + model, mae, rmse = train_and_evaluate_model( + X_train, X_test, y_train, y_test, + best_params['num_units'], best_params['batch_size'], best_params['epochs'], + best_params['learning_rate'], seq_length, len(target_indices), device + ) + logger.info(f"Results: MAE={mae:.2f}, RMSE={rmse:.2f}") + + if rmse < best_rmse: + logger.info(f"New best RMSE found: {rmse:.2f}") + best_rmse = rmse + torch.save(model.state_dict(), os.path.join(MODEL_DIR, 'best_lstm_model.pth')) + save_best_params(best_params) + logger.info(f"Updated best parameters: {best_params}") + no_improvement_count = 0 + else: + logger.info("No improvement in RMSE.") + no_improvement_count += 1 + + if no_improvement_count >= 3: + logger.info("No improvement for 3 iterations. Stopping early.") + break + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/src/main.py b/src/main.py index 678eb6d..415c1f9 100644 --- a/src/main.py +++ b/src/main.py @@ -24,6 +24,23 @@ os.makedirs(PARAMS_DIR, exist_ok=True) def clear_params(model_type): + """ + Deletes the parameter file for the specified model type if it exists. + + Args: + model_type (str): The type of model whose parameter file should be cleared. + Acceptable values: + - 'lstm': Clears LSTM parameter file. + - 'ts_transformer': Clears Transformer parameter file. + + Behavior: + - Deletes the relevant parameter file (`best_lstm_params.json` or `best_ts_transformer_params.json`). + - Logs a message indicating the action taken. + - If the parameter file does not exist or is already cleared, logs that information. + + Examples: + clear_params('lstm') # Deletes the LSTM parameter file if it exists. + """ if model_type == 'lstm' and os.path.exists(LSTM_PARAMS_FILE): os.remove(LSTM_PARAMS_FILE) logger.info(f"Cleared LSTM parameter file: {LSTM_PARAMS_FILE}") @@ -34,6 +51,28 @@ def clear_params(model_type): logger.info(f"No parameter file found for {model_type} or file already cleared.") def main(): + """ + Main function to handle menu-based execution of different models and utilities. + + Behavior: + - Detects if the operating system is Windows. + - Adjusts the model file names to use the `_torch.py` versions for Windows. + - Logs which implementation is running. + - Displays a menu of options to the user: + 1. Run LSTM Model + 2. Run Time Series Transformer Model + 3. Run Bayesian LSTM Optimization + 4. Clear LSTM Model Parameters + 5. Clear Transformer Model Parameters + 6. Run ARIMA Model + - Executes the corresponding functionality based on the user's input. + """ + is_windows = os.name == 'nt' # Check if running on Windows + + lstm_module = 'lstm_torch' if is_windows else 'lstm' + ts_transformer_module = 'ts_transformer_torch' if is_windows else 'ts_transformer' + lstm_bayesian_module = 'lstm_bayesian_torch' if is_windows else 'lstm_bayesian' + logger.info("Choose an option:") logger.info("1. Run LSTM Model") logger.info("2. Run Time Series Transformer Model") @@ -43,24 +82,35 @@ def main(): logger.info("6. Run ARIMA Model") choice = input("Enter the number of your choice: ") - if choice == '1': - from lstm import main as run_lstm - run_lstm() - elif choice == '2': - from ts_transformer import main as run_ts_transformer - run_ts_transformer() - elif choice == '3': - from lstm_bayesian import main as run_lstm_bayesian - run_lstm_bayesian() - elif choice == '4': - clear_params('lstm') - elif choice == '5': - clear_params('ts_transformer') - elif choice == '6': - import arima - arima.main() - else: - logger.info("Invalid choice. Please select a valid option.") + try: + if choice == '1': + logger.info(f"Running LSTM Model using {'Torch' if is_windows else 'TensorFlow'} implementation.") + module = __import__(lstm_module) + module.main() + elif choice == '2': + logger.info(f"Running Time Series Transformer Model using {'Torch' if is_windows else 'TensorFlow'} implementation.") + module = __import__(ts_transformer_module) + module.main() + elif choice == '3': + logger.info(f"Running Bayesian LSTM Optimization using {'Torch' if is_windows else 'TensorFlow'} implementation.") + module = __import__(lstm_bayesian_module) + module.main() + elif choice == '4': + logger.info("Clearing LSTM Model Parameters.") + clear_params('lstm') + elif choice == '5': + logger.info("Clearing Transformer Model Parameters.") + clear_params('ts_transformer') + elif choice == '6': + logger.info("Running ARIMA Model.") + import arima + arima.main() + else: + logger.info("Invalid choice. Please select a valid option.") + except ImportError as e: + logger.error(f"Error importing module: {e}") + except Exception as e: + logger.error(f"An error occurred: {e}") if __name__ == "__main__": main() diff --git a/src/ts_transformer.py b/src/ts_transformer.py index 5ff5787..06209ae 100644 --- a/src/ts_transformer.py +++ b/src/ts_transformer.py @@ -35,16 +35,18 @@ def create_sequences(data, product_ids, seq_length, target_indices): """ - Creates input-output sequences for time-series forecasting with product-level inputs. + Creates input-output sequences for time-series forecasting, along with product-level inputs. Args: - data (np.array): Array of shape (time_steps, features). + data (np.array): Array of shape (time_steps, features). Contains the numerical features. product_ids (np.array): Array of product IDs corresponding to each time step. seq_length (int): Length of each input sequence. - target_indices (list): Indices of target columns in the data. + target_indices (list): Indices of target columns in the data to be predicted. Returns: - np.array, np.array, np.array: Product IDs, input sequences (X), and target outputs (y). + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). """ X, y, products = [], [], [] for i in range(len(data) - seq_length): @@ -55,23 +57,22 @@ def create_sequences(data, product_ids, seq_length, target_indices): def build_transformer_model(seq_length, num_features, num_heads, num_layers, d_model, ff_dim, target_size, num_products, dropout_rate): """ - Builds a Transformer model for time-series forecasting with product embeddings. + Builds a Transformer-based model for time-series forecasting with product embeddings. Args: seq_length (int): Length of input sequences. - num_features (int): Number of input features. - num_heads (int): Number of attention heads. + num_features (int): Number of numerical input features. + num_heads (int): Number of attention heads in the Transformer layers. num_layers (int): Number of Transformer layers. - d_model (int): Embedding dimension. - ff_dim (int): Feedforward dimension. - target_size (int): Number of output targets. - num_products (int): Number of unique products (for embedding). - dropout_rate (float): Dropout rate. + d_model (int): Dimension of embeddings for both product IDs and numerical inputs. + ff_dim (int): Dimension of the feed-forward layers. + target_size (int): Number of output targets (e.g., predictions per time step). + num_products (int): Number of unique product IDs for embedding. + dropout_rate (float): Dropout rate for regularization. Returns: - tf.keras.Model: Compiled Transformer model. + tf.keras.Model: A compiled Transformer-based time-series forecasting model. """ - product_input = Input(shape=(seq_length,), name='product_id') product_embedding = Embedding(input_dim=num_products, output_dim=d_model)(product_input) @@ -99,15 +100,26 @@ def build_transformer_model(seq_length, num_features, num_heads, num_layers, d_m def train_and_evaluate_model(inputs_train, inputs_test, y_train, y_test, num_heads, num_layers, d_model, ff_dim, learning_rate, dropout_rate, seq_length, target_size): """ - Trains and evaluates the Transformer model. + Trains and evaluates the Transformer model for time-series forecasting. Args: - inputs_train (list): [product_train, X_train] for training. - inputs_test (list): [product_test, X_test] for testing. - Various hyperparameters. + inputs_train (list): Training inputs, including product IDs and numerical features ([product_train, X_train]). + inputs_test (list): Testing inputs, including product IDs and numerical features ([product_test, X_test]). + y_train (np.array): Training target outputs of shape (num_samples, target_size). + y_test (np.array): Testing target outputs of shape (num_samples, target_size). + num_heads (int): Number of attention heads in the Transformer layers. + num_layers (int): Number of Transformer layers. + d_model (int): Dimension of embeddings for inputs. + ff_dim (int): Dimension of the feed-forward layers. + learning_rate (float): Learning rate for the optimizer. + dropout_rate (float): Dropout rate for regularization. + seq_length (int): Length of input sequences. + target_size (int): Number of output targets. Returns: - Trained model, RMSE, and validation loss. + tf.keras.Model: The trained Transformer model. + float: Root Mean Squared Error (RMSE) on the test dataset. + float: Final validation loss from the training history. """ product_train, X_train = inputs_train product_test, X_test = inputs_test @@ -126,12 +138,56 @@ def train_and_evaluate_model(inputs_train, inputs_test, y_train, y_test, num_hea return model, rmse, history.history['val_loss'][-1] +def dynamic_param_tuning(best_params, gradient): + """ + Dynamically adjusts hyperparameters based on a gradient or exploration strategy. + + Args: + best_params (dict): Current best hyperparameters. + gradient (dict): Dictionary indicating parameter adjustment directions (e.g., 'increase', 'decrease'). + + Returns: + dict: Updated hyperparameters. + """ + updated_params = best_params.copy() + for param, direction in gradient.items(): + if direction == 'increase': + updated_params[param] *= 1.2 + elif direction == 'decrease': + updated_params[param] *= 0.8 + + if param == 'learning_rate': + updated_params[param] = max(0.0001, min(0.01, updated_params[param])) + elif param == 'num_heads': + updated_params[param] = max(1, min(16, int(updated_params[param]))) + elif param == 'num_layers': + updated_params[param] = max(1, min(10, int(updated_params[param]))) + elif param == 'd_model': + updated_params[param] = max(16, min(512, int(updated_params[param]))) + elif param == 'ff_dim': + updated_params[param] = max(32, min(2048, int(updated_params[param]))) + elif param == 'dropout_rate': + updated_params[param] = max(0.0, min(0.5, updated_params[param])) + + return updated_params + def save_best_params(best_params): """ - Dynamically saves the best parameters to a JSON file. + Saves the best hyperparameters dynamically to a JSON file. Args: - best_params (dict): The best parameters to save. + best_params (dict): Dictionary containing the best hyperparameters. + Keys must include: + - 'num_heads' + - 'num_layers' + - 'd_model' + - 'ff_dim' + - 'learning_rate' + - 'dropout_rate'. + + Notes: + If any required keys are missing, default values are added before saving. + The parameters are saved to `params/best_ts_transformer_params.json`. """ params_path = os.path.join(PARAMS_DIR, 'best_ts_transformer_params.json') @@ -158,10 +214,20 @@ def save_best_params(best_params): def load_best_params(): """ - Loads the most recent parameters from a JSON file. Uses default values if the file is not found or incomplete. + Loads the most recent hyperparameters from a JSON file. Returns: - dict: Best parameters with all required keys. + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist or keys are missing, + default values are used. + + Notes: + Default parameters include: + - num_heads: 4 + - num_layers: 2 + - d_model: 64 + - ff_dim: 128 + - learning_rate: 0.001 + - dropout_rate: 0.1 """ params_path = os.path.join(PARAMS_DIR, 'best_ts_transformer_params.json') @@ -188,10 +254,26 @@ def load_best_params(): return default_params def main(): + """ + Main function to preprocess data, build, train, and evaluate the Transformer model. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Maps product IDs to integers for embedding. + 3. Splits the data into training and testing sets. + 4. Loads the best hyperparameters (if available) or initializes default values. + 5. Iteratively trains and evaluates the Transformer model with the current parameters. + 6. Saves the trained model and the best parameters to disk. + + Notes: + - The process stops early if no improvement is observed for 3 consecutive iterations. + - Saves the model to `models/best_ts_transformer_model.keras`. + - Saves the best hyperparameters to `params/best_ts_transformer_params.json`. + """ logger.info("Loading and preprocessing data") processed_file = 'data/processed_coffee_shop_data.csv' df = process_data(processed_file, 'data/ts_transformer_output.csv') - + unique_products = df['product_id'].unique() product_mapping = {product: idx for idx, product in enumerate(unique_products)} df['product_id'] = df['product_id'].map(product_mapping) @@ -243,5 +325,10 @@ def main(): logger.info("No improvement for 3 iterations. Stopping early.") break + gradient = {'learning_rate': 'increase', 'd_model': 'decrease'} + best_params = dynamic_param_tuning(best_params, gradient) + + logger.info(f"Final RMSE after tuning: {best_rmse:.2f}") + if __name__ == "__main__": main() diff --git a/src/ts_transformer_torch.py b/src/ts_transformer_torch.py new file mode 100644 index 0000000..b6032c9 --- /dev/null +++ b/src/ts_transformer_torch.py @@ -0,0 +1,397 @@ +import warnings +warnings.filterwarnings("ignore", "urllib3 v2 only supports OpenSSL") + +import os +import logging +import sys +import json +import numpy as np +import pandas as pd +import joblib +from datetime import datetime +from sklearn.preprocessing import MinMaxScaler +from sklearn.metrics import mean_absolute_error, mean_squared_error +import tensorflow as tf +import torch +import torch.nn as nn +import torch.optim as optim +from torch.utils.data import DataLoader, TensorDataset +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../data'))) +from preprocess_data import process_data + +LOG_DIR = 'logs/' +MODEL_DIR = 'models/' +PARAMS_DIR = 'params/' +os.makedirs(LOG_DIR, exist_ok=True) +os.makedirs(MODEL_DIR, exist_ok=True) +os.makedirs(PARAMS_DIR, exist_ok=True) + +log_filename = os.path.join(LOG_DIR, f"ts_transformer_log_{datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}.log") +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', + handlers=[logging.StreamHandler(sys.stdout), + logging.FileHandler(log_filename, mode='w')]) + +logger = logging.getLogger() + +def create_sequences(data, product_ids, seq_length, target_indices): + """ + Creates input-output sequences for time-series forecasting, along with product-level inputs. + + Args: + data (np.array): Array of shape (time_steps, features). Contains the numerical features. + product_ids (np.array): Array of product IDs corresponding to each time step. + seq_length (int): Length of each input sequence. + target_indices (list): Indices of target columns in the data to be predicted. + + Returns: + np.array: Product ID sequences of shape (num_sequences, seq_length). + np.array: Numerical input sequences of shape (num_sequences, seq_length, features). + np.array: Target outputs of shape (num_sequences, len(target_indices)). + + Example: + If `data` contains transaction quantities and revenues, and `product_ids` contains product mappings, + this function generates sequences with a fixed length (`seq_length`) for model input. + """ + X, y, products = [], [], [] + for i in range(len(data) - seq_length): + X.append(data[i:i + seq_length]) + y.append(data[i + seq_length, target_indices]) + products.append(product_ids[i:i + seq_length]) + return np.array(products), np.array(X), np.array(y) + +def create_gradient(rmse_change, overfit_threshold=0.01, underfit_threshold=0.05): + """ + Creates a gradient to adjust hyperparameters dynamically based on model performance. + + Args: + rmse_change (float): The change in RMSE between iterations (negative for improvement). + overfit_threshold (float): Threshold for identifying potential overfitting. + underfit_threshold (float): Threshold for identifying potential underfitting. + + Returns: + dict: Gradient indicating 'increase' or 'decrease' for each hyperparameter. + """ + gradient = {} + + if rmse_change > underfit_threshold: + # Model underfits; increase capacity + gradient = { + 'num_heads': 'increase', + 'num_layers': 'increase', + 'd_model': 'increase', + 'ff_dim': 'increase', + 'learning_rate': 'increase', + 'dropout_rate': 'decrease', # Reduce regularization to avoid underfitting + } + elif rmse_change < -overfit_threshold: + # Model overfits; decrease capacity or increase regularization + gradient = { + 'num_heads': 'decrease', + 'num_layers': 'decrease', + 'd_model': 'decrease', + 'ff_dim': 'decrease', + 'learning_rate': 'decrease', + 'dropout_rate': 'increase', # Add regularization to mitigate overfitting + } + else: + gradient = { + 'num_heads': 'increase', + 'num_layers': 'decrease', + 'd_model': 'increase', + 'ff_dim': 'decrease', + 'learning_rate': 'decrease', + 'dropout_rate': 'decrease', + } + + return gradient + +class TransformerModel(nn.Module): + """ + Transformer-based model for time-series forecasting with product embeddings. + + Attributes: + embedding (nn.Embedding): Embedding layer for product IDs. + projection (nn.Linear): Linear layer to project numerical inputs to the same dimension as embeddings. + transformer_layers (nn.TransformerEncoder): Stacked Transformer encoder layers for processing sequences. + global_pool (nn.AdaptiveAvgPool1d): Adaptive average pooling layer to reduce sequence dimension. + dropout (nn.Dropout): Dropout layer for regularization. + output_layer (nn.Linear): Linear output layer to predict target values. + + Methods: + forward(numerical_input, product_input): + Combines numerical features and product embeddings, passes them through the Transformer layers, and + outputs predictions. + """ + def __init__(self, seq_length, num_features, num_heads, num_layers, d_model, ff_dim, target_size, num_products, dropout_rate): + super(TransformerModel, self).__init__() + self.embedding = nn.Embedding(num_products, d_model) + self.projection = nn.Linear(num_features, d_model) + self.transformer_layers = nn.TransformerEncoder( + nn.TransformerEncoderLayer(d_model=d_model, nhead=num_heads, dim_feedforward=ff_dim, dropout=dropout_rate, batch_first=True), + num_layers=num_layers + ) + self.global_pool = nn.AdaptiveAvgPool1d(1) + self.dropout = nn.Dropout(dropout_rate) + self.output_layer = nn.Linear(d_model, target_size) + + def forward(self, numerical_input, product_input): + product_embedded = self.embedding(product_input) + numerical_projected = self.projection(numerical_input) + + x = numerical_projected + product_embedded + + x = self.transformer_layers(x) + + x = x.permute(0, 2, 1) + x = self.global_pool(x).squeeze(-1) + x = self.dropout(x) + return self.output_layer(x) + +def train_and_evaluate_model(inputs_train, inputs_test, y_train, y_test, num_heads, num_layers, d_model, ff_dim, learning_rate, dropout_rate, seq_length, target_size, num_products, device): + """ + Trains and evaluates the Transformer model using PyTorch. + + Args: + inputs_train (list): Training inputs, including product IDs and numerical features ([product_train, X_train]). + inputs_test (list): Testing inputs, including product IDs and numerical features ([product_test, X_test]). + y_train (np.array): Training target outputs of shape (num_samples, target_size). + y_test (np.array): Testing target outputs of shape (num_samples, target_size). + num_heads (int): Number of attention heads in the Transformer layers. + num_layers (int): Number of Transformer layers. + d_model (int): Dimension of embeddings for inputs. + ff_dim (int): Dimension of the feed-forward layers. + learning_rate (float): Learning rate for the optimizer. + dropout_rate (float): Dropout rate for regularization. + seq_length (int): Length of input sequences. + target_size (int): Number of output targets. + num_products (int): Number of unique product IDs for embedding. + device (torch.device): Device to run the model on ('cuda' for GPU, 'cpu' otherwise). + + Returns: + TransformerModel: The trained Transformer model. + float: Root Mean Squared Error (RMSE) on the test dataset. + + Notes: + - The function uses PyTorch's `DataLoader` for efficient batching during training. + - Regularization is applied using dropout layers in the model. + """ + product_train, X_train = inputs_train + product_test, X_test = inputs_test + + model = TransformerModel(seq_length, X_train.shape[2], num_heads, num_layers, d_model, ff_dim, target_size, num_products, dropout_rate).to(device) + criterion = nn.MSELoss() + optimizer = optim.Adam(model.parameters(), lr=learning_rate) + + train_dataset = TensorDataset( + torch.tensor(X_train, dtype=torch.float32), + torch.tensor(product_train, dtype=torch.long), + torch.tensor(y_train, dtype=torch.float32) + ) + train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True) + + model.train() + for epoch in range(50): # 50 epochs + for numerical_input, product_input, targets in train_loader: + numerical_input, product_input, targets = numerical_input.to(device), product_input.to(device), targets.to(device) + + optimizer.zero_grad() + outputs = model(numerical_input, product_input) + loss = criterion(outputs, targets) + loss.backward() + optimizer.step() + + model.eval() + with torch.no_grad(): + X_test_tensor = torch.tensor(X_test, dtype=torch.float32).to(device) + product_test_tensor = torch.tensor(product_test, dtype=torch.long).to(device) + y_test_tensor = torch.tensor(y_test, dtype=torch.float32).to(device) + + predictions = model(X_test_tensor, product_test_tensor).cpu().numpy() + rmse = np.sqrt(mean_squared_error(y_test, predictions)) + + return model, rmse + +def dynamic_param_tuning(best_params, gradient): + """ + Dynamically adjusts hyperparameters based on a gradient or exploration strategy. + + Args: + best_params (dict): Current best hyperparameters. + gradient (dict): Dictionary indicating parameter adjustment directions (e.g., 'increase', 'decrease'). + + Returns: + dict: Updated hyperparameters. + + Example: + If `gradient` is {'num_heads': 'increase'}, the function increases the number of attention heads. + """ + updated_params = best_params.copy() + for param, direction in gradient.items(): + if direction == 'increase': + updated_params[param] *= 1.2 + elif direction == 'decrease': + updated_params[param] *= 0.8 + + if param == 'learning_rate': + updated_params[param] = max(0.0001, min(0.01, updated_params[param])) + elif param == 'num_heads': + updated_params[param] = max(1, min(16, int(updated_params[param]))) + elif param == 'num_layers': + updated_params[param] = max(1, min(10, int(updated_params[param]))) + elif param == 'd_model': + updated_params[param] = max(16, min(512, int(updated_params[param]))) + elif param == 'ff_dim': + updated_params[param] = max(32, min(2048, int(updated_params[param]))) + elif param == 'dropout_rate': + updated_params[param] = max(0.0, min(0.5, updated_params[param])) + + return updated_params + +def save_best_params(best_params): + """ + Saves the best hyperparameters dynamically to a JSON file. + + Args: + best_params (dict): Dictionary containing the best hyperparameters. + Keys must include: + - 'num_heads' + - 'num_layers' + - 'd_model' + - 'ff_dim' + - 'learning_rate' + - 'dropout_rate'. + + Notes: + - If any required keys are missing, default values are added before saving. + - The parameters are saved to `params/best_ts_transformer_params.json`. + """ + params_path = os.path.join(PARAMS_DIR, 'best_ts_transformer_params.json') + + required_keys = ['num_heads', 'num_layers', 'd_model', 'ff_dim', 'learning_rate', 'dropout_rate'] + for key in required_keys: + if key not in best_params: + logger.warning(f"Missing parameter '{key}' in best_params. Adding default value.") + best_params.setdefault(key, 0.001 if key == 'learning_rate' else 0.1) + + with open(params_path, 'w') as f: + json.dump(best_params, f, indent=4) + logger.info(f"Best parameters saved dynamically to {params_path}") + +def load_best_params(): + """ + Loads the most recent hyperparameters from a JSON file. + + Returns: + dict: A dictionary containing the loaded hyperparameters. If the file doesn't exist or keys are missing, + default values are used. + + Notes: + Default parameters include: + - num_heads: 4 + - num_layers: 2 + - d_model: 64 + - ff_dim: 128 + - learning_rate: 0.001 + - dropout_rate: 0.1 + """ + params_path = os.path.join(PARAMS_DIR, 'best_ts_transformer_params.json') + + default_params = {'num_heads': 4, 'num_layers': 2, 'd_model': 64, 'ff_dim': 128, 'learning_rate': 0.001, 'dropout_rate': 0.1} + + if os.path.exists(params_path): + with open(params_path, 'r') as f: + params = json.load(f) + return {**default_params, **params} + + logger.warning(f"Parameters file '{params_path}' not found. Using default parameters.") + return default_params + +def main(): + """ + Main function to preprocess data, build, train, and evaluate the Transformer model. + + Steps: + 1. Loads and preprocesses the dataset. + 2. Maps product IDs to integers for embedding. + 3. Splits the data into training and testing sets. + 4. Loads the best hyperparameters (if available) or initializes default values. + 5. Iteratively trains and evaluates the Transformer model with the current parameters using gradient-based tuning. + 6. Saves the trained model and the best parameters to disk. + + Notes: + - The process stops early if no improvement is observed for 3 consecutive iterations. + - Saves the model to `models/best_ts_transformer_model.keras`. + - Saves the best hyperparameters to `params/best_ts_transformer_params.json`. + """ + logger.info("Loading and preprocessing data") + processed_file = 'data/processed_coffee_shop_data.csv' + df = process_data(processed_file, 'data/ts_transformer_output.csv') + + unique_products = df['product_id'].unique() + product_mapping = {product: idx for idx, product in enumerate(unique_products)} + df['product_id'] = df['product_id'].map(product_mapping) + + features = ['transaction_qty', 'revenue'] + [col for col in df.columns if col.startswith('dow_') or col.startswith('month_')] + scaler = MinMaxScaler() + scaled_data = scaler.fit_transform(df[features]) + + scaler_path = os.path.join(MODEL_DIR, 'scaler_ts_transformer.pkl') + joblib.dump(scaler, scaler_path) + logger.info(f"Scaler saved to {scaler_path}") + + seq_length = 10 + target_indices = [0, 1] + product_sequences, X, y = create_sequences(scaled_data, df['product_id'].values, seq_length, target_indices) + + train_size = int(len(X) * 0.8) + X_train, X_test = X[:train_size], X[train_size:] + y_train, y_test = y[:train_size], y[train_size:] + product_train, product_test = product_sequences[:train_size], product_sequences[train_size:] + + best_params = load_best_params() + logger.info(f"Starting with best parameters: {best_params}") + + best_rmse = float('inf') + no_improvement_count = 0 + max_iterations = 10 + + for iteration in range(max_iterations): + logger.info(f"Iteration {iteration + 1}: Testing parameters {best_params}") + model, rmse, val_loss = train_and_evaluate_model( + [product_train, X_train], [product_test, X_test], + y_train, y_test, best_params['num_heads'], best_params['num_layers'], + best_params['d_model'], best_params['ff_dim'], best_params['learning_rate'], + best_params['dropout_rate'], seq_length, len(target_indices) + ) + + logger.info(f"Iteration {iteration + 1} Results - RMSE: {rmse:.2f}, Validation Loss: {val_loss:.4f}") + + if rmse < best_rmse: + logger.info(f"New best RMSE found: {rmse:.2f}") + best_rmse = rmse + model.save(os.path.join(MODEL_DIR, 'best_ts_transformer_model.keras')) + save_best_params(best_params) + no_improvement_count = 0 + else: + logger.info("No improvement in RMSE.") + no_improvement_count += 1 + + if no_improvement_count >= 3: + logger.info("No improvement for 3 iterations. Stopping early.") + break + + gradient = { + 'learning_rate': 'decrease' if val_loss > 0.05 else 'increase', + 'num_heads': 'increase' if rmse > 0.1 else 'decrease', + 'num_layers': 'increase' if rmse > 0.1 else 'decrease', + 'ff_dim': 'increase' if val_loss > 0.05 else 'decrease', + 'dropout_rate': 'increase' if val_loss < 0.05 else 'decrease', + } + + best_params = dynamic_param_tuning(best_params, gradient) + logger.info(f"Updated parameters for next iteration: {best_params}") + + logger.info(f"Final RMSE after tuning: {best_rmse:.2f}") + +if __name__ == "__main__": + main() \ No newline at end of file