Portable waste-prediction model V2 + Federated Learning adapter with S3 support
Project description
Waste Forecasting Model
Production-ready waste prediction model for solar salt production facilities.
Features
- 🎯 14 waste output predictions - Total waste, solid components, bittern volume & ion concentrations
- 🚀 High-performance ensemble - Gradient Boosting + Stacked Models + Neural Network (R² = 0.863)
- 🔄 Federated Learning ready - Built-in FL adapter for distributed training
- ☁️ S3 model management - Download and hot-reload models from cloud storage
- 🧵 Thread-safe - Lazy loading with proper locking for multi-threaded servers
- 📦 Type-safe API - Fully typed with dataclass inputs/outputs
Quick Start
Installation
# Basic installation
pip install waste-forecasting-model
# With S3 support
pip install waste-forecasting-model[sqs]
Simple Usage
from model_lib import predict_waste
# Single prediction
result = predict_waste(
production_volume=50000, # kg
rain_sum=200, # mm
temperature_mean=28, # °C
humidity_mean=85, # %
wind_speed_mean=15, # km/h
month=6,
year=2026
)
print(f"Total Waste: {result['Total_Waste_kg']:.2f} kg")
print(f"Gypsum: {result['Solid_Waste_Gypsum_kg']:.2f} kg")
print(f"Bittern: {result['Liquid_Waste_Bittern_Liters']:.2f} L")
Advanced Usage
from model_lib import WastePredictor
# Create predictor (loads model once)
predictor = WastePredictor()
# Single prediction with typed result
result = predictor.predict(
production_volume=50000,
rain_sum=200,
temperature_mean=28,
humidity_mean=85,
wind_speed_mean=15,
month=6
)
# Access typed fields
print(f"Total Waste: {result.total_waste_kg:.2f} kg")
print(f"Gypsum: {result.solid_waste_gypsum_kg:.2f} kg")
print(f"Mg Concentration: {result.bittern_mg_concentration_gl:.2f} g/L")
# Batch predictions
import pandas as pd
df = pd.DataFrame([...]) # Your input data
predictions = predictor.predict_batch(df)
Model Outputs
The model predicts 14 waste composition metrics:
Solid Waste
- Total Waste (kg)
- Gypsum (kg)
- Limestone (kg)
- Industrial Salt (kg)
- Total Solid Waste (kg)
Liquid Waste (Bittern)
- Bittern Volume (Liters)
- Mg Concentration (g/L)
- K Concentration (g/L)
- SO₄ Concentration (g/L)
- Ca Concentration (g/L)
- Magnesium Mass (kg)
- Potassium Mass (kg)
- Sulfate Mass (kg)
- Calcium Mass (kg)
API Integration Examples
Flask
from flask import Flask, request, jsonify
from model_lib import WastePredictor
app = Flask(__name__)
predictor = WastePredictor()
@app.route('/predict', methods=['POST'])
def predict():
result = predictor.predict_dict(request.json)
return jsonify({"success": True, "prediction": result})
FastAPI
from fastapi import FastAPI
from model_lib import WastePredictor, PredictionInput
app = FastAPI()
predictor = WastePredictor()
@app.post("/predict")
async def predict(req: PredictionInput):
result = predictor.predict_typed(req)
return result.to_dict()
AWS Lambda
from model_lib import WastePredictor
predictor = WastePredictor()
def lambda_handler(event, context):
result = predictor.predict_dict(event)
return {'statusCode': 200, 'body': result}
Model Management
Model File Location
The package searches for waste_predictor_v1.pkl in:
$WASTE_PREDICTOR_MODEL_PATH(environment variable)~/.model_lib/waste_predictor_v1.pkl- Package artifacts (bundled with installation)
- Current working directory
S3 Model Download
from model_lib import WastePredictor
predictor = WastePredictor()
# Download and hot-reload new model
info = predictor.download_and_update_model(
"s3://my-bucket/models/waste_predictor_v1.pkl"
)
print(f"Updated to version: {info['version']}")
Federated Learning
Built-in adapter for distributed training via SQS:
from model_lib.fl_adapter import WastePredictorFLAdapter
adapter = WastePredictorFLAdapter()
# Local training
params = adapter.local_train(train_df, epochs=50)
# Server-side aggregation
aggregated = WastePredictorFLAdapter.aggregate(
params_list=[client1_params, client2_params],
weights=[100, 150] # num_samples
)
Model Architecture
V2 Ensemble Model:
- Gradient Boosting (XGBoost) - Weight: 0.336
- Stacked Ensemble (XGB + LightGBM + RF + GBR) - Weight: 0.338
- Deep Neural Network (PyTorch) - Weight: 0.326
Performance:
- Overall R²: 0.863
- Solid waste predictions: R² > 0.97
- Bittern volume: R² = 0.975
- Ion concentrations: R² > 0.66
Requirements
- Python 3.10+
- PyTorch 2.0+
- scikit-learn 1.3+
- XGBoost 2.0+
- LightGBM 4.0+
- pandas 2.0+
Development
# Install in editable mode with dev dependencies
pip install -e .[dev,sqs]
# Run tests
pytest
# Format code
black model_lib/
ruff check model_lib/
License
MIT License - See LICENSE file for details
Citation
@software{waste_forecasting_model_2026,
title={Waste Forecasting Model for Solar Salt Production},
author={Research Project Team},
year={2026},
version={2.2.0}
}
Support
For issues, questions, or contributions, please open an issue on GitHub.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file waste_forecasting_model-3.0.0.tar.gz.
File metadata
- Download URL: waste_forecasting_model-3.0.0.tar.gz
- Upload date:
- Size: 6.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0627ee771108ce6f5ad42edb03e6ba330744b70ab2f08ef53a51e5c449073075
|
|
| MD5 |
df0b38354ff5fb90e4b47242fef66650
|
|
| BLAKE2b-256 |
c9d0620987fc6ec71a51857cd36e8d317af62cf46ad9c860f5d6e60c3c353d28
|
File details
Details for the file waste_forecasting_model-3.0.0-py3-none-any.whl.
File metadata
- Download URL: waste_forecasting_model-3.0.0-py3-none-any.whl
- Upload date:
- Size: 6.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26252ea40e5fff2f3e84279b5da0ed65be724f6e6ab59e90757802fb5a20b5eb
|
|
| MD5 |
e2a34906b9809c6e4da44046fdaf54d9
|
|
| BLAKE2b-256 |
49e4a9963c6c9f63ae648c9987a45023376a7cb7ddb542cb3cc0677319895797
|