Skip to main content

pyInterDemand - Intermittent Demand Library

Demand forecasting is a critical component of supply chain management and business operations. While traditional demand forecasting methods are geared towards continuous and stable demand patterns, intermittent demand characterized by irregular or sporadic purchase events presents a unique set of challenges. pyInterDemand is a Python library designed to address these challenges by offering a comprehensive suite of algorithms tailored for intermittent demand forecasting.

The supported algorithms are:

Croston - Croston's method separates the intermittent demand data into two separate sequences, one for the non-zero demand and another for the intervals between non-zero demands. The method then applies separate exponential smoothing on both.

SBA (Syntetos & Boylan Approximation) - This approach extends Croston's method by adjusting the smoothing parameter based on the bias in the forecast error.

SBJ (Syntetos, Boylan & Johnston) - An evolution of the SBA method, SBJ introduces an additional parameter to optimize the estimation further.

TSB (Teunter, Syntetos & Babai) - TSB offers a modification of Croston's method to improve forecast accuracy by dynamically updating the smoothing parameter.

HES (Hyperbolic-Exponential Smoothing) - This is a generalized exponential smoothing technique adapted for intermittent demand scenarios.

LES (Linear Exponential Smoothing) - LES employs a linear function to model the demand, smoothing the data points over time.

SES (Simple Exponential Smoothing) - The most straightforward among the techniques, SES applies an exponential decay to past observations.

Usage

  1. Install
pip install pyInterDemand
  1. Import
# Import
from pyInterDemand.algorithm.intermittent import plot_int_demand, classification, mase, rmse
from pyInterDemand.algorithm.intermittent import croston_method

# Load Dataset
data = {
        'DATE': pd.Series(['21/08/2020','22/08/2020', '23/08/2020', '24/08/2020', '25/08/2020', '26/08/2020', '27/08/2020', '28/08/2020', '29/08/2020', '30/08/2020', '31/08/2020', '01/09/2020']),
       'Value': pd.Series([5, 10, 0, 0, 0, 0, 7, 0, 0, 0, 6, 0]),
       }
dataset         = pd.DataFrame(data)
dataset['DATE'] = pd.to_datetime(dataset['DATE'], dayfirst = True).map(lambda x: x.strftime('%d-%m-%Y'))

# Prepare Time Series TS
ts       = dataset['Value'].copy(deep = True)
ts.index = pd.DatetimeIndex(dataset['DATE'], dayfirst = True)
ts       = ts.sort_index()
ts       = ts.reindex(pd.date_range(ts.index.min(), ts.index.max()), fill_value = 0)
ts       = ts.loc[ts[(ts != 0)].first_valid_index():]
print('')
print('Total Number of Observations: ', ts.shape[0])
print('Total Number of Zeros: ', len(ts[ts == 0]))
print('Start Date: ', ts.index[0])
print('End Date: '  , ts.index[-1])
print('')

# Time Series Classification
adi, cv_sq = classification(ts)

# Time Series Plot
plot_int_demand(ts, size_x = 15, size_y = 10, bar_width = 0.3)

# Croston
v, q, forecast = croston_method(ts, alpha = 0.5, n_steps = 4)
plot_int_demand(ts, size_x = 15, size_y = 10, bar_width = 0.3, prediction = forecast)

# Error
print('MASE = ', round(mase(ts, forecast), 3), ', RMSE = ', round(rmse(ts, forecast), 3))
  1. Try it in Colab:

Metadata

Release files for pyInterDemand 1.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyInterDemand 1.4.3
File Size Uploaded
pyInterDemand-1.4.3.tar.gz 5.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyInterDemand 1.4.3
File Interpreter ABI Platform
pyInterDemand-1.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 11.8 kB

Release files / pyInterDemand-1.4.3.tar.gz

Download URL pyInterDemand-1.4.3.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c8740c76b96e1e2861fb7a822c013e289c4a2c4cd3c380ad410c9c26fe5b818a
BLAKE2b-256 checksum
How to use checksums
e15eecd00052f42082d6ef5476124d536dc84672b7c88ff8c8416341f84abbf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.25.11 tqdm/4.64.1 importlib-metadata/4.11.3 keyring/23.4.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.7.6

Release files / pyInterDemand-1.4.3-py3-none-any.whl

Download URL pyInterDemand-1.4.3-py3-none-any.whl
Size 6.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
21f3bb4671659c5063e9548d2b28d51dab104aac554f01bd5096a01456782afd
BLAKE2b-256 checksum
How to use checksums
15a8d378a19fa02b5528dac70e34fef9855cfe60d616c0364245b825f80d23f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.28.1 requests-toolbelt/0.9.1 urllib3/1.25.11 tqdm/4.64.1 importlib-metadata/4.11.3 keyring/23.4.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.7.6

Release history Release notifications | RSS feed

This release

1.4.3 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page