การวิเคราะห์ข้ามอนุกรมเวลาที่ผ่านการตรวจสอบความถูกต้อง


37

ฉันใช้ชุดคาเร็ตใน R เพื่อสร้างแบบจำลองการทำนายสำหรับการจำแนกและการถดถอย คาเร็ตมีอินเทอร์เฟซแบบรวมเพื่อปรับแต่งพารามิเตอร์ไฮเปอร์โมเดลโดยการตรวจสอบข้ามหรือการรัดสาย ตัวอย่างเช่นหากคุณกำลังสร้างแบบจำลอง 'เพื่อนบ้านที่ใกล้ที่สุด' อย่างง่ายสำหรับการจำแนกคุณควรใช้เพื่อนบ้านกี่คน 2? 10? 100? คาเร็ตช่วยให้คุณตอบคำถามนี้โดยการสุ่มตัวอย่างข้อมูลของคุณใหม่ลองใช้พารามิเตอร์ที่แตกต่างกันจากนั้นรวบรวมผลลัพธ์เพื่อตัดสินใจว่าผลลัพธ์ใดที่มีความแม่นยำในการทำนายที่ดีที่สุด

ฉันชอบวิธีการนี้เนื่องจากเป็นวิธีการที่มีประสิทธิภาพสำหรับการเลือกพารามิเตอร์ไฮเปอร์โมเดลและเมื่อคุณเลือกพารามิเตอร์ไฮเปอร์สุดท้ายแล้วจะมีการประเมินที่ผ่านการตรวจสอบความถูกต้องของวิธีการ 'ดี' โดยใช้ความแม่นยำสำหรับโมเดลการจำแนกประเภท และ RMSE สำหรับตัวแบบการถดถอย

ตอนนี้ฉันมีข้อมูลอนุกรมเวลาที่ฉันต้องการสร้างแบบจำลองการถดถอยสำหรับอาจใช้ฟอเรสต์แบบสุ่ม เทคนิคที่ดีในการประเมินความถูกต้องทำนายของแบบจำลองของฉันคืออะไรโดยธรรมชาติของข้อมูล หากป่าสุ่มไม่ได้ใช้กับข้อมูลอนุกรมเวลาวิธีที่ดีที่สุดในการสร้างแบบจำลองวงดนตรีที่ถูกต้องสำหรับการวิเคราะห์อนุกรมเวลาคืออะไร


ฉันพบคำถามที่น่าสนใจจริงๆ มีวิธีที่ฉันสามารถทำเครื่องหมายคำถามเพื่อติดตามหรือไม่
mariana soffer

1
@mariana soffer คลิกที่ไอคอน 'Star' ใต้ลูกศรขึ้น / ลง
Zach

4
Caret สนับสนุนการตรวจสอบข้ามเวลาตามซีรี่ส์ - r-bloggers.com/time-series-cross-validation-5
captain_ahab

1
@Zach นี่คือโพสต์เก่า แต่ฉันสงสัยว่าคุณมีความคิดใหม่หรือไม่? คุณรู้หรือไม่ว่างานล่าสุดเกี่ยวกับการตรวจสอบรูปแบบตามลำดับ
horaceT

คำตอบ:


10

เทคนิคการตรวจสอบความถูกต้องข้าม "คลาสสิค" k-times ขึ้นอยู่กับข้อเท็จจริงที่ว่าแต่ละตัวอย่างในชุดข้อมูลที่มีอยู่ถูกใช้ (k-1) - เวลาในการฝึกอบรมแบบจำลองและ 1 ครั้งเพื่อทดสอบ เนื่องจากเป็นสิ่งสำคัญมากในการตรวจสอบความถูกต้องของตัวแบบอนุกรมเวลากับข้อมูล "อนาคต" วิธีนี้จะไม่ส่งผลต่อเสถียรภาพของตัวแบบ

คุณสมบัติที่สำคัญอย่างหนึ่งของอนุกรมเวลา (ส่วนใหญ่?) คือความสัมพันธ์ระหว่างค่าที่อยู่ติดกัน IrishStat ชี้ให้เห็นว่าหากคุณใช้การอ่านก่อนหน้านี้เป็นตัวแปรอิสระของผู้สมัครแบบจำลองความสัมพันธ์นี้ (หรือขาดความเป็นอิสระ) มีบทบาทสำคัญและเป็นอีกเหตุผลหนึ่งที่การตรวจสอบข้าม k-times ไม่ใช่ความคิดที่ดี

วิธีหนึ่งที่จะเอาชนะปัญหานี้ได้คือ "สุ่มตัวอย่าง" ข้อมูลและเชื่อมโยงกับข้อมูล หากกระบวนการความสัมพันธ์ตกแต่งประสบความสำเร็จการใช้การตรวจสอบความถูกต้องแบบข้ามเวลาเป็นปัญหาน้อยกว่า อย่างไรก็ตามจะไม่แก้ปัญหาการตรวจสอบความถูกต้องของโมเดลโดยใช้ข้อมูลในอนาคต

ชี้แจง

โดยการตรวจสอบรูปแบบเกี่ยวกับข้อมูลในอนาคตฉันหมายถึงการสร้างแบบจำลองกำลังรอข้อมูลใหม่ที่ไม่สามารถใช้ได้ในระหว่างการสร้างแบบจำลองการทดสอบการปรับแต่งแบบละเอียดและการตรวจสอบความถูกต้องของข้อมูลใหม่นั้น

โดยการสุ่มตัวอย่างข้อมูลฉันหมายถึงการรวบรวมข้อมูลอนุกรมเวลาที่ความถี่สูงกว่าที่จำเป็นจริงๆ ตัวอย่างเช่น: สุ่มตัวอย่างราคาหุ้นทุก 5 วินาทีเมื่อคุณสนใจการเปลี่ยนแปลงรายชั่วโมงจริงๆ ที่นี่เมื่อฉันพูดว่า "การสุ่มตัวอย่าง" ฉันไม่ได้หมายถึง "การสอดแทรก", "การประมาณค่า" ฯลฯ หากข้อมูลไม่สามารถวัดได้ที่ความถี่สูงกว่าเทคนิคนี้จะไม่มีความหมาย


วิธี 'คลาสสิค' ในการตรวจสอบแบบจำลองกับข้อมูลในอนาคตคืออะไร 'การสุ่มตัวอย่างมากเกินไป' หมายความว่าอย่างไร ขอขอบคุณ!
Zach

ควรสังเกตว่าคุณสมบัติทางสถิติของข้อมูลอนุกรมเวลาจริง (โดยเฉพาะข้อมูลทางการเงิน) อาจแตกต่างกันไปขึ้นอยู่กับความถี่การสุ่มตัวอย่าง สำหรับอนุกรมเวลาทางการเงินจำนวนมากไม่มีตรงไปตรงมาความสัมพันธ์ระหว่างค่าเบี่ยงเบนมาตรฐานตัวอย่างกับช่วงเวลาและมีระยะเวลาPTในความเป็นจริงค่าเบี่ยงเบนมาตรฐานมีแนวโน้มเพิ่มขึ้นเมื่อความถี่การสุ่มตัวอย่างเพิ่มขึ้น ความสัมพันธ์ลดลงในทำนองเดียวกันเมื่อความถี่การสุ่มตัวอย่างเพิ่มขึ้น (ซึ่งโดยทั่วไปจะรู้ว่าเป็นเอฟเฟกต์ Epps ) ppTTppT
Chris Taylor

@bgbg ฉันพบปัญหาที่คล้ายกันมากและเพิ่งพบโพสต์ของคุณ คุณสามารถอ้างอิงบางส่วนเกี่ยวกับข้อมูลอนุกรมเวลาที่มีการสุ่มตัวอย่างมากเกินไปและการตกแต่งได้อย่างไร ฉันคิดว่าถ้าหน่วยความจำในอนุกรมเวลาสั้นพอ (อาจแสดงให้เห็นว่าเหมาะสมกับ arima) ใครจะเอาตัวอย่าง "ไม่ทับซ้อน" และทำการตรวจสอบตามปกติ ความคิดใด ๆ ชื่นชม
horaceT

9

http://robjhyndman.com/researchtips/crossvalidation/มีเคล็ดลับสั้น ๆ สำหรับการตรวจสอบความถูกต้องของอนุกรมเวลา เกี่ยวกับการใช้ฟอเรสต์แบบสุ่มสำหรับข้อมูลอนุกรมเวลา .... ไม่แน่ใจแม้ว่ามันจะเป็นตัวเลือกที่แปลกเนื่องจากรูปแบบนั้นติดตั้งโดยใช้ตัวอย่างบูตสแตรป แน่นอนว่ามีวิธีการอนุกรมเวลาแบบคลาสสิก (เช่น ARIMA) ที่สามารถใช้ได้เช่นเดียวกับเทคนิค ML เช่น Neural Nets (ตัวอย่างเช่น pdf ) บางทีผู้เชี่ยวชาญด้านอนุกรมเวลาบางคนสามารถแสดงความคิดเห็นว่าเทคนิค ML ทำงานได้ดีอย่างไรเมื่อเทียบกับอัลกอริทึมเฉพาะของอนุกรมเวลา


2
นี่สวยมากตอกตะปูบนหัว ฉันพยายามหาวิธีใช้เทคนิคการเรียนรู้ของเครื่องกับการวิเคราะห์อนุกรมเวลา
Zach

ฉันเคยประสบความสำเร็จในการใช้ฟอเรสต์แบบสุ่มเพื่อการคาดการณ์มาก่อน ตรวจสอบ: biomedcentral.com/1471-2105/15/276
captain_ahab

6

นี่คือตัวอย่างโค้ดบางส่วนสำหรับรุ่นอนุกรมเวลาที่ตรวจสอบได้ ฉันขยายโค้ดนี้ในบล็อกของฉันโดยรวมแพคเกจ foreachเพื่อเร่งความเร็วของสิ่งต่าง ๆ และอนุญาตให้มีคำ xreg ที่เป็นไปได้ในการตรวจสอบข้าม

นี่คือสำเนาของรหัสจากบล็อกของ Rob Hyndman:

library(fpp) # To load the data set a10
plot(a10, ylab="$ million", xlab="Year", main="Antidiabetic drug sales")
plot(log(a10), ylab="", xlab="Year", main="Log Antidiabetic drug sales")

k <- 60 # minimum data length for fitting a model
n <- length(a10)
mae1 <- mae2 <- mae3 <- matrix(NA,n-k,12)
st <- tsp(a10)[1]+(k-2)/12

for(i in 1:(n-k))
{
  xshort <- window(a10, end=st + i/12)
  xnext <- window(a10, start=st + (i+1)/12, end=st + (i+12)/12)
  fit1 <- tslm(xshort ~ trend + season, lambda=0)
  fcast1 <- forecast(fit1, h=12)
  fit2 <- Arima(xshort, order=c(3,0,1), seasonal=list(order=c(0,1,1), period=12), 
      include.drift=TRUE, lambda=0, method="ML")
  fcast2 <- forecast(fit2, h=12)
  fit3 <- ets(xshort,model="MMM",damped=TRUE)
  fcast3 <- forecast(fit3, h=12)
  mae1[i,1:length(xnext)] <- abs(fcast1[['mean']]-xnext)
  mae2[i,1:length(xnext)] <- abs(fcast2[['mean']]-xnext)
  mae3[i,1:length(xnext)] <- abs(fcast3[['mean']]-xnext)
}

plot(1:12, colMeans(mae1,na.rm=TRUE), type="l", col=2, xlab="horizon", ylab="MAE",
     ylim=c(0.65,1.05))
lines(1:12, colMeans(mae2,na.rm=TRUE), type="l",col=3)
lines(1:12, colMeans(mae3,na.rm=TRUE), type="l",col=4)
legend("topleft",legend=c("LM","ARIMA","ETS"),col=2:4,lty=1)

ผล


สวัสดีซัค ฉันใช้รหัสของ Hyndman รุ่นที่แตกต่างกันเล็กน้อยเพื่อตรวจสอบจำนวนคำศัพท์ที่เหมาะสมสำหรับตัวแบบการถดถอยกับอนุกรมเวลา น่าเสียดายที่พล็อตข้อผิดพลาด CV พบว่ามีจำนวนท้องถิ่นน้อยที่สุดซึ่งทำให้ฉันถามถึงวิธีการเลือกจำนวนคำที่ถูกต้อง ปัญหาที่เกิดขึ้นอย่างเต็มรูปแบบที่อธิบายไว้ที่นี่ คุณเคยเจอสิ่งที่คล้ายกันมาก่อนหรือไม่?
jroberayalas

5

หากคุณมีข้อมูลอนุกรมเวลาคุณอาจมี "องศาอิสระปัญหา" ตัวอย่างเช่นหากคุณมีการสังเกต 4 ครั้งในแต่ละชั่วโมงและตัดสินใจที่จะใช้การสังเกต 241 ครั้งในช่วงเวลา 1 นาทีคุณจะมีการสังเกต 241 ครั้ง แต่มันไม่จำเป็นต้องเป็นอิสระ เมื่อคุณส่งค่า / การวัด 241 เหล่านี้ไปยังแพ็คเกจการวิเคราะห์แพคเกจอาจคาดหวังว่าสิ่งเหล่านี้เป็นค่าที่เป็นอิสระ 241 เมื่อมันดำเนินการเพื่อให้มันเป็นเวทมนตร์โดยเฉพาะ หากคุณมีข้อมูลอนุกรมเวลาคุณอาจต้องอัพเกรดการวิเคราะห์ของคุณ ฉันไม่รู้โปรแกรมที่คุณอ้างถึง แต่เป็นการเดาที่สมเหตุสมผลในส่วนของฉัน (ฉันอาจผิด!) ว่าเป็นแบบทดสอบ (การทดสอบ F / การทดสอบ T ... ฯลฯ ) อาจไม่ใช้กับชุดปัญหาของคุณ


1

ฉันขอแนะนำให้คุณอ่านบทความที่น่าสนใจ 2 เรื่องที่ออนไลน์ 1. การเรียนรู้ที่ได้รับ: SVM แบบ One-Pass โดย Piyush Rai, Hal Daum´e III, Suresh Venkatasubramanian 2. การประมาณค่า k-mean โดย Nir Ailon

หวังว่ามันจะชี้แจงความคิดของคุณเล็กน้อย


คุณสามารถให้ลิงค์ไปยังเอกสารเหล่านั้นได้หรือไม่? ขอบคุณ
Zach

ซัคที่นี่เป็นครั้งแรกที่snowbird.djvuzone.org/2008/abstracts/180.pdfและอื่น ๆ เป็นwww1.cs.columbia.edu/~rjaiswal/ajmNIPS09.pdf หวังว่ามันจะช่วยได้
mariana soffer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.