中獲得實際的庫存預測我正在學習R和Quantmod,並構建了一個非常簡單的庫存模型預測。我同時擁有xgboost和尖模型,這裏是整個例如:如何從xgboost,caret和Quantmod(R)
library(quantmod)
library(xts)
# get market data
Nasdaq100_Symbols <- c("AAPL", "ADBE", "ADI", "ADP", "ADSK", "AKAM")
getSymbols(Nasdaq100_Symbols)
# merge them all together
nasdaq100 <- data.frame(as.xts(merge(AAPL, ADBE, ADI, ADP, ADSK, AKAM)))
# set outcome variable
outcomeSymbol <- 'ADP.Volume'
# shift outcome value to be on same line as predictors
nasdaq100 <- xts(nasdaq100,order.by=as.Date(rownames(nasdaq100)))
nasdaq100 <- as.data.frame(merge(nasdaq100, lm1=lag(nasdaq100[,outcomeSymbol],-1)))
nasdaq100$outcome <- ifelse(nasdaq100[,paste0(outcomeSymbol,'.1')] > nasdaq100[,outcomeSymbol], 1, 0)
# remove shifted down volume field
nasdaq100 <- nasdaq100[,!names(nasdaq100) %in% c(paste0(outcomeSymbol,'.1'))]
# cast date to true date and order in decreasing order
nasdaq100$date <- as.Date(row.names(nasdaq100))
nasdaq100 <- nasdaq100[order(as.Date(nasdaq100$date, "%m/%d/%Y"), decreasing = TRUE),]
# calculate all day differences and populate them on same row
GetDiffDays <- function(objDF,days=c(10), offLimitsSymbols=c('outcome'), roundByScaler=3) {
# needs to be sorted by date in decreasing order
ind <- sapply(objDF, is.numeric)
for (sym in names(objDF)[ind]) {
if (!sym %in% offLimitsSymbols) {
print(paste('*********', sym))
objDF[,sym] <- round(scale(objDF[,sym]),roundByScaler)
print(paste('theColName', sym))
for (day in days) {
objDF[paste0(sym,'_',day)] <- c(diff(objDF[,sym],lag = day),rep(x=0,day)) * -1
}
}
}
return (objDF)
}
# call the function with the following differences
nasdaq100 <- GetDiffDays(nasdaq100, days=c(1,2,3,4,5,10,20), offLimitsSymbols=c('outcome'), roundByScaler=2)
# drop most recent entry as we don't have an outcome
nasdaq100 <- nasdaq100[2:nrow(nasdaq100),]
# use POSIXlt to add day of the week, day of the month, day of the year
nasdaq100$wday <- as.POSIXlt(nasdaq100$date)$wday
nasdaq100$yday <- as.POSIXlt(nasdaq100$date)$mday
nasdaq100$mon<- as.POSIXlt(nasdaq100$date)$mon
# remove date field and shuffle data frame
nasdaq100 <- subset(nasdaq100, select=-c(date))
nasdaq100 <- nasdaq100[sample(nrow(nasdaq100)),]
# xgboost Modeling
library(xgboost)
predictorNames <- names(nasdaq100)[names(nasdaq100) != 'outcome']
set.seed(1234)
split <- sample(nrow(nasdaq100), floor(0.7*nrow(nasdaq100)))
train <-nasdaq100[split,]
test <- nasdaq100[-split,]
bst <- xgboost(data = as.matrix(train[,predictorNames]),
label = train$outcome,
verbose=0,
eta = 0.1,
gamma = 50,
missing = NaN,
nround = 150,
colsample_bytree = 0.1,
subsample = 1,
nthread = 4,
objective="binary:logistic")
predictions <- predict(bst, as.matrix(test[,predictorNames]), missing = NaN, outputmargin=TRUE)
library(pROC)
auc <- roc(test$outcome, predictions)
print(paste('AUC score:', auc$auc))
問題1:
現在它訓練的70%,預計在30%以上,我可以在最後打印出的AUC得分。假設我訓練100%並且想要預測明天會發生什麼?即得到明天模型將會考慮的數量的符號。
問題2:
理想我想繼續增加一天的數據今天的一端插入模型,然後把它預測明天的符號。現在看來我不得不使用getSymbols()
再次拉動整個歷史。任何方式來拉今天的數據,並將其附加到該符號的xts對象?
對於問題一,假設情景是明天音量是否會上升。所以訓練模型是白天,每個有音量的符號第二天都會得到一個1,否則它會得到0.剛編輯的問題包含方程。所以,現在我不想進行培訓,我想根據所有數據知道哪些符號明天會得到1(即模型認爲它們的音量會增加) – Alteredorange
對於問題2,我知道我可以指定getSymbols的日期,但它只是在前面的xts上寫的,我不得不考慮將它與'end'結合起來,所以它只是增加它。 – Alteredorange
@Alteredorange你對問題1的要求是微不足道的,或者我不明白你的意思。您的預測表明明天哪些股票可能會有更高的成交量 對於問題2,當然您需要將您的新數據附加到舊數據中,舊數據存儲在具有不同名稱和/或理想值的變量中在一個不同的環境中,你並沒有真正地在你的問題中表達清楚,你應該如何做到這一點,只要'rbind(old_OHLC_xts_data,new_data)'。 – FXQuantTrader