2019年7月16日 星期二

[資料回歸分析] 比較CNN+RNN預測產品銷售量與XGBoost預測產品銷售量的精確度

參考資料:

極限梯度提升(XGboost, eXtreme Gradient Boosting)被稱為Kaggle競賽神器,在Kaggle上很多比賽的第一名都使用了XGboost,在2015年的競賽中29個Kaggle冠軍隊伍中有17隊使用XGboost在他們的算法之中。XGboost具有訓練速度快且精確度高的特點.以下我們將比較使用XGboost來預測產品銷售量與之前我們用CNN+RNN模型預測的精確度做比較.

我們會延用之前文章用CNN+RNN來預測銷售量的訓練資料並用XGboost model來預測銷售量

使用XGboost來預測

其他設定都與之前文章用CNN+RNN來預測銷售量相同,但需要加入xgboost.XGBRegressor

from xgboost import XGBRegressor
#將training Features轉為2D array shape=(樣本數,# of 特徵值)
trainX_2D=trainX.reshape(trainX.shape[0],trainX.shape[1]*trainX.shape[2])
xgbc = XGBRegressor()
xgbc.fit(trainX_2D,trainY)

# #test Features轉為2D array shape=(樣本數,# of 特徵值)
testX_2D=testX.reshape(testX.shape[0],testX.shape[1]*testX.shape[2])
#預測結果
xgbc_predicY=xgbc.predict(testX_2D)
#轉換scale
xgbc_predicY_origins=scaler.inverse_transform(np.array(xgbc_predicY).reshape(-1, 1))

#畫出預測結果與真實銷售量
plt.plot(test_date[:],xgbc_predicY_origins[:],label='prediction');
plt.plot(test_date[:],answer[:],label='real')


#畫出30天預測結果
plt.plot(test_date[:30],xgbc_predicY_origins[:30],label='prediction');
plt.plot(test_date[:30],answer[:30],label='real')
plt.legend()
plt.show()

#取得XGboost model的accuracy
xgbc.score(testX_2D,testY)

0.49455476732371634
在沒有設定任何XGboost的hyper parameter的狀態下我們可以得到~50%的精確度.

回顧之前CNN+RNN model的預測精確度

model.evaluate(testX,testY) #return loss value & metrics values
[0.013807674573565071, 0.10221999477256428] #紅色數值為精確度

在沒有設定任何hyper parameter的情況下使用XGboost model的準確度為50%,比CNN+RNN方法的精確度提升了五倍,且訓練XGboost時間相當的短,難怪XGboost被稱為Kaggle競賽神器.由於XGboost的威力太強大,我將繼續研究XGboost演算法的基本架構並探討如何設定hyper parameter以得到更佳的預測精確度






三倍槓桿和一倍槓桿的長期定期定額報酬率分析

  以下是中國,美國股票債卷的三倍槓桿和一倍槓桿ETF分析.可以發現,三倍槓桿在下跌時期的跌幅遠比一倍槓桿的多 .且從時間軸來看,三倍槓桿由於下跌力道較強,因此會把之前的漲幅都吃掉,所以對於長期上身的市場,例如美國科技股,由於上升時間遠比下跌時間長,所以持有TQQQ的長期回報率會...