時間序列

報價數據的邏輯回歸

  • December 6, 2015

我得到了一些數據(它是金融報價數據),我想根據一些觀察到的變數來預測下一步的走勢是向上、向下還是不變。

所以我一直在嘗試使用多項邏輯回歸,這是我第一次進行邏輯回歸,所以我想檢查我是否正確地完成了這項工作,並且我的結果看起來是否合理。

現在我正在做 3 個雙變數邏輯回歸。

所以我對數據進行編碼,使我有三個新的時間序列,分別標記為向上、向下和不變。這些是通過測試在原始系列中向前移動 n 步是向上、向下還是不變,並將 1 添加到適當的數組並使所有其他條目為零而生成的。

然後,我對這些向上、向下和未更改的數組分別針對回歸量進行雙變數邏輯回歸。

然後我可以使用轉換計算每個機率:

$$\textrm{機率} = 1/(1+\exp[-Bx])$$

其中 $\beta$ 是來自雙變數邏輯回歸的 beta。$x$ 是回歸量的值。

這給了我向上、向下和不變的機率。

然後我簡單地比較 $\textrm{向上機率} > \textrm{向下機率}$,如果是,模型預測向上,反之亦然。

Q.1) 我的方法正確嗎?現在我正在對價格系列(而不是回報系列)進行所有計算?

Q.2) 當我在樣本中測試這個準確度時,我得到了 70% 的樣本準確度(向上和向下移動)?這是一個合理的樣本測試分數嗎?

Q.3) 不變的模型機率非常低,通常約為 14%。所以永遠不會選擇不變的(因為向上向下移動的機率總是大得多)。然而不變的是最常觀察到的變化,無條件機率為 91%。有沒有辦法可以糾正模型,以便模型準確預測不變。

更新:不幸的是,這是程式碼,我得到了 2 個變數回歸結果和 3 個變數結果之間的差異!

兩者之間的可能錯誤:使用 mnrfit() 執行 2 變數回歸和資產回報的等效 3 變數版本。回報分為正、負或持平。然後在 rtns 與分類收益上執行邏輯回歸(這是一個簡單的測試,用於檢查回歸功能是否符合預期)。當我為 2 變數版本(即 Up rtns v 其他所有內容)執行此操作時,回歸給出了 0 回報不是 88% 的向上回報的機率的估計。隨著回報大小的增加,它為正的機率最終會增加,最終收斂到 1(如您所料)。此外,隨著越來越多的負 rtn 被放入邏輯回歸模型,rtn 為正的機率變為零。對於 Down return v all else 的 2 變數估計也是如此。

現在當我執行 3 變數版本時。事情最初看起來不錯:當給定回報為零時,它估計為零的機率為 86%,下降機率 =6.4%,上升機率 =7.6%,因此與 2 變數情況非常相似。此外,當輸入越來越大的回報時,正回報的機率會如您預期的那樣收斂到 1,但是當您輸入越來越大的負回報時,回報為負的機率會收斂到零,而機率等於零增加到 1!!!這顯然是錯誤的。

Data1 = LoadMat_SHFE_Range(Contract1, StartDate, EndDate);

rtn=(Data1.Mid(2:end)-Data1.Mid(1:end-1))./(Data1.Mid(1:end-1));

NStep=0;

Up=nan(length(rtn),1);
Down=nan(length(rtn),1);
Flat=nan(length(rtn),1);
RtnClass=nan(length(rtn),1);

for i=1:length(rtn)-NStep

if(rtn(i+NStep)>0)
   Up(i)=2;
   Down(i)=1;
   Flat(i)=1;
elseif(rtn(i+NStep)<0)
   Up(i)=1;
   Down(i)=2;
   Flat(i)=1;
elseif(rtn(i+NStep)==0)
   Up(i)=1;
   Down(i)=1;
   Flat(i)=2;
end

end

[BUp,dev,stats] = mnrfit(rtn,Up);
MatProbUp = mnrval(BUp,0.1);

[BDown,dev,stats] = mnrfit(rtn,Down);
MatProbDown = mnrval(BDown,0.1);


for i=1:length(rtn)

if(rtn(i)>0)
   RtnClass(i)=3;
elseif(rtn(i)<0)
   RtnClass(i)=2;
elseif(rtn(i)==0)
   RtnClass(i)=1;
end

end

[BM,dev,stats] = mnrfit(rtn,RtnClass,'model','ordinal');
[pihat,dlow,hi] = mnrval(BM,0,stats,'model','ordinal');

我同意 Malick 的觀點,即 ARMA-GARCH 是一個更好的模型,但我會通過執行 ARFIMA-FIGARCH 來改進模型,FI 代表分數集成,用於處理 HF 數據等長儲存過程。當試圖擬合 ARMA 時,通常的方法是查看 ACF 和 PACF,這將顯示出很多依賴關係(幾乎所有滯後都是顯著的)並且與 GARCH 模型相同,因此處理的常用方法是FI 模型。

另一方面,不要丟棄邏輯回歸。當然,你會遇到波動性集群的一些問題,但資訊很有用。我建議改為 1,0 模型嘗試執行 Probit 或 Logit 順序,這樣您就可以知道增加幅度的機率,(它是 ARFIMA-FIGARH 模型的一個很好的補充)。在這個模型中,因變數將是一個 1 到 5 的整數形式,可以說每個數字代表價格上漲或下跌的區間。如果價格將在 0 到 5 之間下跌,則假設為 1,如果價格在 0 到 5 之間上漲,則假設為 2,依此類推。

引用自:https://quant.stackexchange.com/questions/21877