FSLSTM

A Federated Learning Approach to Anomaly Detection in Smart Buildings

Python 3.7+ PyTorch License: MIT Research Paper Publication DOI

A privacy-by-design federated learning framework for anomaly detection in smart buildings using stacked Long Short-Term Memory (LSTM) networks. This repository implements the FSLSTM model that enables IoT sensors to collaboratively learn for anomaly detection while preserving data privacy through secure multi-party computation.

Keywords: federated learning, anomaly detection, smart buildings, IoT sensors, LSTM, privacy preservation, machine learning, deep learning

๐Ÿข Smart Building IoT Architecture

IoT-enabled Smart Building Architecture with Federated Learning for Anomaly Detection

Our framework operates on comprehensive smart building infrastructures equipped with diverse IoT sensor networks including:

๐ŸŽฏ Research Contributions & Key Findings

๐Ÿš€ Superior Performance Achievements

Our federated stacked LSTM approach achieves state-of-the-art performance compared to centralized and federated baselines:

Model Precision Recall F1-Score Balanced Accuracy MAE MSE RMSE
FSLSTM (Ours) 0.89 0.79 0.87 0.90 0.162 0.19 0.435
FGRU 0.84 0.66 0.59 0.80 0.211 0.29 0.538
FLR 0.65 0.71 0.70 0.69 0.339 0.34 0.583
LSTM 0.66 0.61 0.58 0.71 0.243 0.33 0.574
LR 0.57 0.60 0.52 0.72 0.341 0.48 0.692

๐Ÿ“Š Smart Building Sensor Distribution

Distribution of IoT Sensor Categories in Smart Building Research

Our evaluation encompasses 180 IoT sensors across five critical building systems:

๐ŸŽฏ Exceptional Anomaly Detection Performance

ROC Curve Comparison for Smart Building Anomaly Detection Performance

Key Performance Highlights:

Collective & Contextual Anomaly Detection Results

Method Collective Anomalies Contextual Anomalies ย  ย 
ย  Correct (%) False (%) Correct (%) False (%)
FSLSTM 88 9 90 4
FGRU 74 12 82 7
FLR 65 21 78 18
LSTM 66 33 74 29
LR 56 54 63 48

โšก Convergence & Training Efficiency

Federated Learning Training Convergence Comparison for IoT Anomaly Detection

FSLSTM demonstrates remarkable training efficiency:

๐Ÿ“ˆ Scalability Analysis

Convergence Time vs Number of IoT Sensors in Federated Learning

Scalability Performance Insights:

๐Ÿ— Federated Learning Architecture

Federated Learning System Architecture for Smart Building IoT

Privacy-by-Design Implementation:

  1. ๐Ÿ”’ Local Training: Each sensor trains on private data locally
  2. ๐Ÿ“ก Secure Aggregation: Only model parameters are shared via encrypted channels
  3. ๐ŸŽฏ Pattern Recognition: Global model learns from distributed patterns
  4. โš ๏ธ Anomaly Detection: Real-time classification with threshold determination
  5. ๐Ÿข BAS Integration: Seamless integration with Building Automation Systems

๐Ÿ’ฐ Communication Cost Efficiency

Communication Cost Comparison in Federated Learning for IoT

Significant Communication Overhead Reduction:

๐ŸŽฏ Real-World Energy Prediction

Actual vs Predicted Energy Consumption in Smart Buildings using FSLSTM

Outstanding Regression Performance:

๐Ÿšจ Real-Time Anomaly Detection Dashboard

Real-time Anomaly Detection Timeline for Smart Building Lights and HVAC Systems
Real-time Anomaly Detection Timeline for Smart Building Water Management Systems

Advanced Anomaly Detection Capabilities:

๐Ÿ”ฌ Experimental Validation

๐Ÿ“‹ Dataset Characteristics

Our comprehensive evaluation utilizes three real-world datasets from General Electric Current smart building IoT production systems:

Data Processing Pipeline:

๐Ÿ— LSTM Architecture Details

LSTM Block Architecture for Federated Learning in Smart Buildings

Stacked LSTM Configuration:

๐Ÿ”„ Multi-Task Federated Learning

Multi-Task Federated Learning Architecture for IoT Sensor Networks

Federated Learning Process:

  1. ๐ŸŽฏ Client Selection: Random sampling of 36 sensors per round (20% participation)
  2. ๐Ÿ“ฑ Local Training: 5 epochs on private sensor data
  3. ๐Ÿ”’ Secure Aggregation: Encrypted parameter sharing via FedAvg
  4. ๐ŸŒ Global Update: Weighted averaging based on client data sizes
  5. ๐Ÿ”„ Iterative Process: 50 communication rounds for convergence

๐Ÿ† Comparative Analysis Results

Our federated approach significantly outperforms traditional centralized and federated baselines across all evaluation metrics:

๐Ÿ“ˆ Classification Performance Improvements:

๐Ÿ“‰ Regression Performance Superiority:

โฑ๏ธ Training Efficiency Analysis

Convergence Speed Comparison:

๐ŸŒŸ Key Features

๐Ÿš€ Installation

Prerequisites

Install from Source

git clone https://github.com/your-username/FSLSTM.git
cd FSLSTM
pip install -e .

Using pip

pip install fslstm

Dependencies

pip install torch>=1.7.0
pip install numpy>=1.19.0
pip install pandas>=1.2.0
pip install scikit-learn>=0.24.0
pip install matplotlib>=3.3.0
pip install seaborn>=0.11.0
pip install tqdm>=4.60.0
pip install pysyft>=0.5.0
pip install tensorboard>=2.4.0

โšก Quick Start

Basic Usage

from fslstm import FSLSTMTrainer, DataLoader
from fslstm.config import Config

# Load configuration for smart building anomaly detection
config = Config.from_file("configs/smart_building.yaml")

# Prepare IoT sensor data for federated learning
data_loader = DataLoader(config)
train_data, test_data = data_loader.load_sensor_data()

# Initialize federated learning trainer
trainer = FSLSTMTrainer(config)

# Train the FSLSTM model using federated approach
trainer.fit(train_data)

# Evaluate anomaly detection performance
results = trainer.evaluate(test_data)
print(f"Balanced Accuracy: {results['balanced_accuracy']:.4f}")
print(f"F1 Score: {results['f1_score']:.4f}")

Command Line Interface

# Train FSLSTM model for smart building anomaly detection
python scripts/train.py --config configs/smart_building.yaml

# Evaluate trained federated learning model
python scripts/evaluate.py --model_path checkpoints/fslstm_best.pth --data_path data/test/

# Run complete federated learning pipeline
python scripts/run_pipeline.py --config configs/smart_building.yaml

๐Ÿ“Š Data Format

Sensor Event Log Dataset

sensor_data/
โ”œโ”€โ”€ sensor_events.csv
โ”œโ”€โ”€ energy_usage.csv
โ””โ”€โ”€ weather_api.csv

Expected CSV Format

Sensor Events (sensor_events.csv):

timestamp,sensor_id,sensor_type,value,status,zone_id
2019-05-01 08:00:00,S001,occupancy,1,normal,Zone_A
2019-05-01 08:01:00,S002,temperature,22.5,normal,Zone_B

Energy Usage (energy_usage.csv):

timestamp,sensor_id,energy_consumption,appliance_type
2019-05-01 08:00:00,S001,1.25,LED_light
2019-05-01 08:01:00,S002,2.8,HVAC

Data Preprocessing

from fslstm.data import SensorDataProcessor

processor = SensorDataProcessor(
    window_size=600,  # 10 hours in minutes for IoT sensor data
    stride=60,        # 1 hour stride for time series analysis
    normalize=True
)

# Process raw smart building sensor data
processed_data = processor.process_sensor_logs("data/sensor_events.csv")

โš™๏ธ Configuration

Configuration File (configs/smart_building.yaml)

# Model Configuration for Federated LSTM
model:
  name: "FSLSTM"
  lstm_layers: 3
  hidden_size: 128
  dropout: 0.2
  fc_size: 100

# Federated Learning Configuration for IoT Sensors
federated:
  num_clients: 180
  clients_per_round: 36
  num_rounds: 50
  local_epochs: 5
  batch_size: 1024

# Training Configuration for Smart Building Anomaly Detection
training:
  learning_rate: 0.001
  optimizer: "adam"
  loss_function: "cross_entropy"  # or "mse" for regression
  device: "cuda"

# Data Configuration for IoT Sensor Networks
data:
  window_size: 600
  sequence_length: 60
  train_split: 0.8
  val_split: 0.1
  test_split: 0.1

# Sensor Configuration for Smart Buildings
sensors:
  categories: ["lights", "thermostat", "occupancy", "water_leakage", "building_access"]
  num_sensors: 180
  
# Privacy Configuration for Federated Learning
privacy:
  secure_aggregation: true
  differential_privacy: false

Creating Custom Configuration

from fslstm.config import Config

config = Config()
config.model.lstm_layers = 3
config.model.hidden_size = 256
config.federated.num_clients = 100
config.training.learning_rate = 0.0005

# Save configuration for smart building research
config.save("my_config.yaml")

๐ŸŽฏ Training

Federated Training

from fslstm import FSLSTMTrainer, FederatedDataLoader

# Initialize federated data loader for IoT sensors
fed_loader = FederatedDataLoader(
    data_path="data/sensor_events.csv",
    num_clients=180,
    client_split="sensor_type"  # Split by sensor type for federated learning
)

# Create federated datasets for smart building sensors
client_datasets = fed_loader.create_client_datasets()

# Initialize federated learning trainer
trainer = FSLSTMTrainer(config)

# Federated training for anomaly detection
trainer.federated_fit(
    client_datasets=client_datasets,
    num_rounds=50,
    clients_per_round=36
)

Centralized Training (Baseline)

# For comparison with centralized machine learning approach
from fslstm.baselines import CentralizedLSTM

centralized_model = CentralizedLSTM(config)
centralized_model.fit(train_data)
results = centralized_model.evaluate(test_data)

Training Monitoring

# Enable logging and visualization for federated learning
from fslstm.utils import TrainingLogger

logger = TrainingLogger(log_dir="logs/fslstm_experiment")
trainer = FSLSTMTrainer(config, logger=logger)

# Training with monitoring for smart building anomaly detection
trainer.fit(train_data, validation_data=val_data)

# View federated learning training curves
logger.plot_training_curves()
logger.plot_convergence_comparison()

๐Ÿ“ˆ Evaluation

Comprehensive Evaluation

from fslstm.evaluation import Evaluator

evaluator = Evaluator(config)

# Load trained federated learning model
model = trainer.load_model("checkpoints/fslstm_best.pth")

# Evaluate on smart building test data
results = evaluator.evaluate(
    model=model,
    test_data=test_data,
    metrics=["accuracy", "precision", "recall", "f1", "auc", "mae", "mse"]
)

print("Anomaly Detection Classification Results:")
print(f"  Balanced Accuracy: {results['balanced_accuracy']:.4f}")
print(f"  Precision: {results['precision']:.4f}")
print(f"  Recall: {results['recall']:.4f}")
print(f"  F1-Score: {results['f1_score']:.4f}")

print("Energy Prediction Regression Results:")
print(f"  MAE: {results['mae']:.4f}")
print(f"  MSE: {results['mse']:.4f}")
print(f"  RMSE: {results['rmse']:.4f}")

Anomaly Detection Evaluation

from fslstm.evaluation import AnomalyDetector

detector = AnomalyDetector(model, threshold=0.5)

# Detect anomalies in real-time IoT sensor data
anomalies = detector.detect_anomalies(sensor_stream)

# Evaluate collective and contextual anomalies in smart buildings
collective_results = detector.evaluate_collective_anomalies(test_data)
contextual_results = detector.evaluate_contextual_anomalies(test_data)

Baseline Comparison

from fslstm.baselines import run_baseline_comparison

# Compare with baseline machine learning methods
baseline_results = run_baseline_comparison(
    data=test_data,
    methods=["LR", "LSTM", "FLR", "FGRU", "FSLSTM"],
    config=config
)

# Generate comparison plots for research evaluation
evaluator.plot_method_comparison(baseline_results)
evaluator.plot_roc_curves(baseline_results)

๐Ÿ“Š Results

Performance Summary

Our FSLSTM model achieves state-of-the-art performance on smart building anomaly detection:

Model Precision Recall F1-Score Balanced Accuracy MAE MSE RMSE
LR 0.57 0.60 0.52 0.72 0.341 0.48 0.692
LSTM 0.66 0.61 0.58 0.71 0.243 0.33 0.574
FLR 0.65 0.71 0.70 0.69 0.339 0.34 0.583
FGRU 0.84 0.66 0.59 0.80 0.211 0.29 0.538
FSLSTM 0.89 0.79 0.87 0.90 0.162 0.19 0.435

Key Achievements

Visualization

from fslstm.visualization import ResultVisualizer

visualizer = ResultVisualizer()

# Plot federated learning training convergence
visualizer.plot_convergence_comparison(trainer.history)

# Plot ROC curves for anomaly detection
visualizer.plot_roc_curves(results)

# Plot smart building energy consumption prediction
visualizer.plot_energy_prediction(predictions, ground_truth)

# Plot real-time anomaly detection timeline
visualizer.plot_anomaly_timeline(anomalies, timestamps)

๐Ÿ“ Project Structure

FSLSTM/
โ”œโ”€โ”€ fslstm/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ fslstm.py              # Main FSLSTM model
โ”‚   โ”‚   โ”œโ”€โ”€ lstm_layers.py         # LSTM layer implementations
โ”‚   โ”‚   โ””โ”€โ”€ federated_model.py     # Federated learning wrapper
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ data_loader.py         # Data loading utilities
โ”‚   โ”‚   โ”œโ”€โ”€ preprocessing.py       # Data preprocessing
โ”‚   โ”‚   โ””โ”€โ”€ federated_data.py      # Federated data distribution
โ”‚   โ”œโ”€โ”€ training/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ trainer.py             # Main training logic
โ”‚   โ”‚   โ”œโ”€โ”€ federated_trainer.py   # Federated training
โ”‚   โ”‚   โ””โ”€โ”€ aggregation.py         # Federated aggregation algorithms
โ”‚   โ”œโ”€โ”€ evaluation/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ evaluator.py           # Model evaluation
โ”‚   โ”‚   โ”œโ”€โ”€ metrics.py             # Evaluation metrics
โ”‚   โ”‚   โ””โ”€โ”€ anomaly_detection.py   # Anomaly detection evaluation
โ”‚   โ”œโ”€โ”€ baselines/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ centralized_lstm.py    # Centralized LSTM baseline
โ”‚   โ”‚   โ”œโ”€โ”€ federated_lr.py        # Federated Logistic Regression
โ”‚   โ”‚   โ””โ”€โ”€ federated_gru.py       # Federated GRU
โ”‚   โ”œโ”€โ”€ utils/
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ config.py              # Configuration management
โ”‚   โ”‚   โ”œโ”€โ”€ logger.py              # Logging utilities
โ”‚   โ”‚   โ””โ”€โ”€ privacy.py             # Privacy mechanisms
โ”‚   โ””โ”€โ”€ visualization/
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ plots.py               # Plotting functions
โ”‚       โ””โ”€โ”€ dashboard.py           # Interactive dashboard
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ train.py                   # Training script
โ”‚   โ”œโ”€โ”€ evaluate.py                # Evaluation script
โ”‚   โ”œโ”€โ”€ run_pipeline.py            # Complete pipeline
โ”‚   โ””โ”€โ”€ preprocess_data.py         # Data preprocessing script
โ”œโ”€โ”€ configs/
โ”‚   โ”œโ”€โ”€ smart_building.yaml        # Default configuration
โ”‚   โ”œโ”€โ”€ ablation_study.yaml        # Ablation study config
โ”‚   โ””โ”€โ”€ baseline_comparison.yaml   # Baseline comparison config
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ raw/                       # Raw sensor data
โ”‚   โ”œโ”€โ”€ processed/                 # Processed datasets
โ”‚   โ””โ”€โ”€ examples/                  # Example datasets
โ”œโ”€โ”€ notebooks/
โ”‚   โ”œโ”€โ”€ 01_data_exploration.ipynb  # Data exploration
โ”‚   โ”œโ”€โ”€ 02_model_training.ipynb    # Model training tutorial
โ”‚   โ”œโ”€โ”€ 03_evaluation.ipynb        # Evaluation and results
โ”‚   โ””โ”€โ”€ 04_visualization.ipynb     # Result visualization
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ test_models.py
โ”‚   โ”œโ”€โ”€ test_data.py
โ”‚   โ”œโ”€โ”€ test_training.py
โ”‚   โ””โ”€โ”€ test_evaluation.py
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ setup.py
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ LICENSE

๐Ÿ”ฌ Advanced Usage

Custom Sensor Integration

from fslstm.sensors import SensorInterface

class CustomSensor(SensorInterface):
    def __init__(self, sensor_id, sensor_type):
        super().__init__(sensor_id, sensor_type)
    
    def read_data(self):
        # Custom IoT sensor data reading logic
        return sensor_data
    
    def preprocess(self, data):
        # Custom preprocessing for smart building data
        return processed_data

# Register custom IoT sensor for federated learning
trainer.register_sensor_type("custom_sensor", CustomSensor)

Multi-Task Learning Configuration

# Configure different tasks for different IoT sensor types
config.tasks = {
    "occupancy": {"type": "classification", "classes": 2},
    "temperature": {"type": "regression", "target": "energy_consumption"},
    "lighting": {"type": "classification", "classes": 2}
}

Privacy Mechanisms

from fslstm.privacy import DifferentialPrivacy, SecureAggregation

# Enable differential privacy for federated learning
privacy_mechanism = DifferentialPrivacy(epsilon=1.0, delta=1e-5)
trainer.set_privacy_mechanism(privacy_mechanism)

# Enable secure aggregation for IoT sensor networks
secure_agg = SecureAggregation()
trainer.set_aggregation_method(secure_agg)

๐Ÿงช Experiments and Ablation Studies

Ablation Study

from fslstm.experiments import AblationStudy

# Run ablation study on number of LSTM layers for federated learning
ablation = AblationStudy(config)
results = ablation.run_layer_ablation(
    layers=[1, 2, 3, 4],
    dataset=train_data
)

# Analyze results for smart building anomaly detection
ablation.plot_layer_comparison(results)

Convergence Analysis

from fslstm.experiments import ConvergenceAnalysis

# Analyze federated learning convergence with different number of IoT clients
convergence_study = ConvergenceAnalysis(config)
convergence_results = convergence_study.analyze_client_scaling(
    client_counts=[20, 40, 80, 160, 200],
    dataset=train_data
)

๐Ÿ“‹ Citation

If you use this code in your research, please cite:

@article{fslstm2020,
  title={A Federated Learning Approach to Anomaly Detection in Smart Buildings},
  journal={ACM Transactions on Internet of Things},
  volume={2},
  number={4},
  pages={1--23},
  year={2021},
  keywords={federated learning, anomaly detection, smart buildings, IoT sensors, LSTM, privacy preservation}
}

Related Research Publications:

๐Ÿ“„ License

This project is licensed under the MIT License - see the LICENSE.md file for details.


Note: This implementation is based on the federated learning framework for anomaly detection in smart buildings. The model supports both classification tasks (sensor fault detection) and regression tasks (energy consumption prediction) while preserving data privacy through federated learning.