首頁 >科技週邊 >人工智慧 >Croston方法在預測間歇性需求的應用方法

Croston方法在預測間歇性需求的應用方法

王林
王林轉載
2024-01-23 14:21:12845瀏覽

Croston方法在預測間歇性需求的應用方法

Croston方法是用來預測間歇性需求的統計方法。它適用於需求不穩定、不規則的產品或服務,如備件、諮詢服務、醫療用品等,這些需求具有高度的不確定性。此方法的優點在於簡單易用、計算速度快,適用範圍廣,同時能夠避免傳統預測方法中的一些缺陷。透過分析間歇性需求的歷史數據,Croston方法能夠有效地捕捉需求的變化趨勢和間隔,並根據這些資訊進行準確的需求預測。因此,Croston方法在管理和規劃間歇性需求方面具有重要的應用價值。

Croston方法的基本原理是將間歇性需求序列分解為兩個部分:需求發生的時間間隔和需求量。這個分解過程是基於兩個基本假設:第一,需求發生的時間間隔和需求量是相互獨立的;第二,需求量的分佈可以近似為二項分佈。透過對這兩個部分進行分析和預測,可以更好地理解和預測間歇性需求的特徵和變化。

Croston方法使用兩個指數平滑模型來預測時間間隔和需求量。時間間隔的預測值稱為間隔預測值,需求量的預測值稱為需求量預測值。然後,透過將兩個預測值相乘,得到總體預測值。確定兩個指數平滑模型的參數是Croston方法的關鍵。

在實際應用中,Croston方法可以透過以下步驟進行:

首先,我們需要計算間隔預測值和需求量預測值。可以使用簡單指數平滑法計算間隔預測值,而需求量預測值則可以使用Croston方法中的公式計算。

第二步,計算整體預測值。將間隔預測值和需求量預測值相乘,得到整體預測值。

第三步,評估預測結果的準確度。可以使用平均絕對誤差(MAE)或均方根誤差(RMSE)來評估預測結果的準確性。同時也可以進行誤差分析,找出預測結果中的偏差和異常。

需要注意的是,Croston方法對於需求量較小或需求間隔較長的產品或服務可能不適用,因為這些情況下,需求量和時間間隔的變化可能會受到較大的隨機性影響。此外,Croston方法也需要根據實際情況進行參數調整,以提高預測準確度。

Croston方法的核心思想是透過對兩個序列的平均值進行平滑,來預測未來的需求量和需求發生時間。具體來說,該方法將需求時間序列和需求量序列分別表示為以下形式:

y_t=\begin{cases}
1&\text{if demand occurs at time}t\
0&\text{otherwise}
\end{cases}
p_t=\begin{cases}
d_t&\text{if demand occurs at time}t\
0&\text{otherwise}
\end{cases}

其中y_t表示在時間t是否有需求發生,p_t表示在時間t的需求量(如果有需求發生的話)。接下來,該方法透過計算y_t和p_t的平均值來進行平滑。具體來說,平均值計算公式如下:

\begin{aligned}
\bar{y}_t&=\alpha y_t+(1-\alpha)\bar{y}_{t-1}\
\bar{p}_t&=\alpha p_t+(1-\alpha)\bar{p}_{t-1}
\end{aligned}

其中\alpha是平滑係數,通常取值在0.1到0.3之間。然後,該方法使用平滑後的平均值來進行需求預測。具體來說,該方法預測下一個需求發生的時間和需求量的公式如下:

\begin{aligned}
\hat{y}_{t+1}&=\frac{1}{\bar{y}_t+\frac{1}{1-\alpha}}\
\hat{p}_{t+1}&=\frac{\bar{p}_t}{\bar{y}_t+\frac{1}{1-\alpha}}
\end{aligned}

Croston方法還包括一些修正項,以減少對需求預測的偏差。具體來說,此方法包括對需求時間序列和需求量序列的修正,以及平滑係數的修正。

以下是使用Croston方法進行間歇性需求預測的Python程式碼範例:

import pandas as pd
import numpy as np

def croston(y, forecast_len, alpha=0.2, init=None):
    """
    Croston方法预测间歇性需求

    参数:
    y:需求数据
    forecast_len:预测长度
    alpha:平滑系数,默认为0.2
    init:初始值,默认为None

    返回:
    预测结果
    """
    # 初始化
    y = np.asarray(y)
    n = len(y)
    if init is None:
        # 如果没有指定初始值,则使用第一个非零值作为初始值
        init = np.nonzero(y)[0][0]
    p = np.zeros(n)
    y_hat = np.zeros(n+forecast_len)
    p_hat = np.zeros(n+forecast_len)
    y_hat[init] = y[init]
    p_hat[init] = y[init]
    # 平滑
    for i in range(init+1, n):
        if y[i] > 0:
            # 如果有需求发生
            y_hat[i] = alpha + (1 - alpha)*y[i-1]
            p_hat[i] = alpha*y[i] + (1 -alpha)*p[i-1]
        else:
            # 如果没有需求发生
            y_hat[i] = (1 - alpha)*y_hat[i-1]
            p_hat[i] = (1 - alpha)*p_hat[i-1]
    # 预测
    for i in range(n, n+forecast_len):
        y_hat[i] = (1 - alpha)*y_hat[i-1]
        p_hat[i] = (1 - alpha)*p_hat[i-1]
    return p_hat[-forecast_len:]

# 示例
demand = [0, 0, 5, 0, 0, 7, 0, 0, 9, 0, 0, 6, 0]
forecast_len = 5
result = croston(demand, forecast_len)
print(result)

以上程式碼中,我們使用了Croston方法對一個間歇性需求的數據進行了預測。此數據包含了13個時間點的需求情況,其中有5個時間點有需求發生,其餘時間點需求量為0。預測結果包括了未來5個時間點的需求量。在程式碼中,我們設定了一個平滑係數為0.2,並使用第一個非零值作為初始值。預測結果為 [1.677, 1.342, 1.074, 0.859, 0.684],表示未來5個時間點的需求量分別為1.677、1.342、1.074、0.859和0.684。

以上是Croston方法在預測間歇性需求的應用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:163.com。如有侵權,請聯絡admin@php.cn刪除