Crates.io | oxidiviner-exponential-smoothing |
lib.rs | oxidiviner-exponential-smoothing |
version | 0.3.3 |
created_at | 2025-05-19 18:55:27.552233+00 |
updated_at | 2025-05-19 20:49:42.873774+00 |
description | Exponential smoothing models for OxiDiviner time series analysis library |
homepage | https://github.com/rustic-ml/OxiDiviner |
repository | https://github.com/rustic-ml/OxiDiviner |
max_upload_size | |
id | 1680259 |
size | 93,620 |
Comprehensive exponential smoothing models for time series forecasting.
This crate provides a family of exponential smoothing models for time series forecasting. Exponential smoothing methods are widely used for modeling and forecasting trends and seasonal patterns in time series data.
Add this to your Cargo.toml
:
[dependencies]
oxidiviner-exponential-smoothing = "0.1.0"
oxidiviner-core = "0.1.0"
use oxidiviner_core::{TimeSeriesData, Forecaster};
use oxidiviner_exponential_smoothing::{SimpleESModel, HoltWintersModel};
use chrono::{Utc, TimeZone};
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create sample time series data with seasonal pattern
let dates = (0..24).map(|i| Utc.timestamp_opt(1609459200 + i * 86400, 0).unwrap()).collect();
let values = vec![
10.0, 12.0, 14.0, 16.0, 13.0, 11.0, 9.0, // Week 1
11.0, 13.0, 15.0, 17.0, 14.0, 12.0, 10.0, // Week 2
12.0, 14.0, 16.0, 18.0, 15.0, 13.0, 11.0, // Week 3
13.0, 15.0, 17.0 // Week 4 (partial)
];
let data = TimeSeriesData::new(dates, values)?;
// Simple exponential smoothing
let mut simple_model = SimpleESModel::new(0.3)?;
simple_model.fit(&data)?;
// Holt-Winters with seasonality
let mut hw_model = HoltWintersModel::new(0.2, 0.1, 0.3, 7, true)?;
hw_model.fit(&data)?;
// Generate forecasts
let simple_forecast = simple_model.forecast(7)?;
let hw_forecast = hw_model.forecast(7)?;
println!("Simple ES Forecast: {:?}", simple_forecast);
println!("Holt-Winters Forecast: {:?}", hw_forecast);
Ok(())
}
Licensed under the MIT License. See LICENSE for details.