用于時間序列概率預(yù)測的分位數(shù)回歸
分位數(shù)回歸滿足這一需求,提供具有量化機會的預(yù)測區(qū)間。它是一種統(tǒng)計技術(shù),用于模擬預(yù)測變量與響應(yīng)變量之間的關(guān)系,特別是當(dāng)響應(yīng)變量的條件分布令人感興趣時。與傳統(tǒng)的回歸方法不同,分位數(shù)回歸側(cè)重于估計響應(yīng)變量的條件量值,而不是條件均值。
圖(A): 分位數(shù)回歸
分位數(shù)回歸概念
分位數(shù)回歸是估計?組回歸變量X與被解釋變量Y的分位數(shù)之間線性關(guān)系的建模?法。
以往的回歸模型實際上是研究被解釋變量的條件期望。??們也關(guān)?解釋變量與被解釋變量分布的 中位數(shù),分位數(shù)呈何種關(guān)系。它最早由Koenker和Bassett(1978)提出。
OLS回歸估計量的計算是基于最?化殘差平?。分位數(shù)回歸估計量的計算也是基于?種?對稱形式 的絕對值殘差最?化。其中,中位數(shù)回歸運?的是最?絕對值離差估計(LAD,least absolute deviations estimator)。
分位數(shù)回歸的優(yōu)點
(1)能夠更加全?的描述被解釋變量條件分布的全貌,?不是僅僅分析被解釋變量的條件期望(均 值),也可以分析解釋變量如何影響被解釋變量的中位數(shù)、分位數(shù)等。不同分位數(shù)下的回歸系數(shù)估 計量常常不同,即解釋變量對不同?平被解釋變量的影響不同。
(2)中位數(shù)回歸的估計?法與最??乘法相?,估計結(jié)果對離群值則表現(xiàn)的更加穩(wěn)健,?且,分位 數(shù)回歸對誤差項并不要求很強的假設(shè)條件,因此對于?正態(tài)分布??,分位數(shù)回歸系數(shù)估計量則更 加穩(wěn)健。
分位數(shù)回歸相對于蒙特卡羅模擬具有哪些優(yōu)勢呢?首先,分位數(shù)回歸直接估計給定預(yù)測因子的響應(yīng)變量的條件量值。這意味著,它不像蒙特卡羅模擬那樣產(chǎn)生大量可能的結(jié)果,而是提供了響應(yīng)變量分布的特定量級的估計值。這對于了解不同層次的預(yù)測不確定性特別有用,例如二分位數(shù)、四分位數(shù)或極端量值。其次,分位數(shù)回歸提供了一種基于模型的預(yù)測不確定性估算方法,利用觀測數(shù)據(jù)來估計變量之間的關(guān)系,并根據(jù)這種關(guān)系進行預(yù)測。相比之下,蒙特卡羅模擬依賴于為輸入變量指定概率分布,并根據(jù)隨機抽樣生成結(jié)果。
NeuralProphet提供兩種統(tǒng)計技術(shù):(1) 分位數(shù)回歸和 (2)保形分位數(shù)回歸。共形分位數(shù)預(yù)測技術(shù)增加了一個校準過程來做分位數(shù)回歸。在本章中,我們將使用 Neural Prophet 的分位數(shù)回歸模塊。
環(huán)境要求
安裝 NeuralProphet。
!pip install neuralprophet
!pip uninstall numpy
!pip install git+https://github.com/ourownstory/neural_prophet.git numpy==1.23.5
導(dǎo)入需要的庫。
%matplotlib inline
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
import logging
import warnings
logging.getLogger('prophet').setLevel(logging.ERROR)
warnings.filterwarnings("ignore")
數(shù)據(jù)集
共享單車數(shù)據(jù)。該數(shù)據(jù)集是一個多變量數(shù)據(jù)集,包含每日租賃需求以及溫度或風(fēng)速等其他天氣領(lǐng)域。
data = pd.read_csv('/bike_sharing_daily.csv')
data.tail()
圖(B): 共享單車
繪制共享單車的數(shù)量圖。我們觀察到,需求量在第二年有所增加,而且有季節(jié)性規(guī)律。
# convert string to datetime64
data["ds"] = pd.to_datetime(data["dteday"])
# create line plot of sales data
plt.plot(data['ds'], data["cnt"])
plt.xlabel("date")
plt.ylabel("Count")
plt.show()
圖 (C):自行車租賃日需求量
為建模做最基本的數(shù)據(jù)準備。NeuralProphet 要求列名為 ds 和 y,這與 Prophet 的要求相同。
df = data[['ds','cnt']]
df.columns = ['ds','y']
構(gòu)建分位數(shù)回歸模型
直接在 NeuralProphet 中構(gòu)建分位數(shù)回歸。假設(shè)我們需要第 5、10、50、90 和 95 個量級的值。我們指定 quantile_list = [0.05,0.1,0.5,0.9,0.95],并打開參數(shù) quantiles = quantile_list。
from neuralprophet import NeuralProphet, set_log_level
quantile_list=[0.05,0.1,0.5,0.9,0.95 ]
# Model and prediction
m = NeuralProphet(
quantiles=quantile_list,
yearly_seasnotallow=True,
weekly_seasnotallow=True,
daily_seasnotallow=False
)
m = m.add_country_holidays("US")
m.set_plotting_backend("matplotlib") # Use matplotlib
df_train, df_test = m.split_df(df, valid_p=0.2)
metrics = m.fit(df_train, validation_df=df_test, progress="bar")
metrics.tail()
分位數(shù)回歸預(yù)測
我們將使用 .make_future_dataframe()為預(yù)測創(chuàng)建新數(shù)據(jù)幀,NeuralProphet 是基于 Prophet 的。參數(shù) n_historic_predictions 為 100,只包含過去的 100 個數(shù)據(jù)點。如果設(shè)置為 True,則包括整個歷史數(shù)據(jù)。我們設(shè)置 period=50 來預(yù)測未來 50 個數(shù)據(jù)點。
future = m.make_future_dataframe(df, periods=50, n_historic_predictinotallow=100) #, n_historic_predictinotallow=1)
# Perform prediction with the trained models
forecast = m.predict(df=future)
forecast.tail(60)
預(yù)測結(jié)果存儲在數(shù)據(jù)框架 predict 中。
圖 (D):預(yù)測
上述數(shù)據(jù)框架包含了繪制地圖所需的所有數(shù)據(jù)元素。
m.plot(
forecast,
plotting_backend="plotly-static"
#plotting_backend = "matplotlib"
)
預(yù)測區(qū)間是由分位數(shù)值提供的!
圖 (E):分位數(shù)預(yù)測
預(yù)測區(qū)間和置信區(qū)間的區(qū)別
預(yù)測區(qū)間和置信區(qū)間在流行趨勢中很有幫助,因為它們可以量化不確定性。它們的目標、計算方法和應(yīng)用是不同的。下面我將用回歸來解釋兩者的區(qū)別。在圖(F)中,我在左邊畫出了線性回歸,在右邊畫出了分位數(shù)回歸。
圖(F):置信區(qū)間與預(yù)測區(qū)間的區(qū)別
首先,它們的目標不同:
- 線性回歸的主要目標是找到一條線,使預(yù)測值盡可能接近給定自變量值時因變量的條件均值。
- 分位數(shù)回歸旨在提供未來觀測值的范圍,在一定的置信度下。它估計自變量與因變量條件分布的不同量化值之間的關(guān)系。
其次,它們的計算方法不同:
- 在線性回歸中,置信區(qū)間是對自變量系數(shù)的區(qū)間估計,通常使用普通最小二乘法 (OLS) 找出數(shù)據(jù)點到直線的最小總距離。系數(shù)的變化會影響預(yù)測的條件均值 Y。
- 在分位數(shù)回歸中,你可以選擇依賴變量的不同量級來估計回歸系數(shù),通常是最小化絕對偏差的加權(quán)和,而不是使用OLS方法。
第三,它們的應(yīng)用不同:
- 在線性回歸中,預(yù)測的條件均值有 95% 的置信區(qū)間。置信區(qū)間較窄,因為它是條件平均值,而不是整個范圍。
- 在分位數(shù)回歸中,預(yù)測值有 95% 的概率落在預(yù)測區(qū)間的范圍內(nèi)。
寫在最后
本文介紹了分位數(shù)回歸預(yù)測區(qū)間的概念,以及如何利用 NeuralProphet 生成預(yù)測區(qū)間。我們還強調(diào)了預(yù)測區(qū)間和置信區(qū)間之間的差異,這在商業(yè)應(yīng)用中經(jīng)常引起混淆。后面將繼續(xù)探討另一項重要的技術(shù),即復(fù)合分位數(shù)回歸(CQR),用于預(yù)測不確定性。