การทดสอบย้อนกลับหรือการตรวจสอบความถูกต้องข้ามเมื่อกระบวนการสร้างแบบจำลองเป็นแบบโต้ตอบ


9

ฉันมีตัวแบบทำนายผลซึ่งฉันต้องการทดสอบกลับ (เช่นนำชุดข้อมูลของฉัน "ย้อนกลับ" ไปยังจุดก่อนหน้าในเวลาและดูว่าตัวแบบนั้นจะทำแบบมุ่งหวังได้อย่างไร)

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

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

ฉันขอขอบคุณคำแนะนำและวิธีแก้ปัญหาทั้งสอง (ก) ถึงปัญหาทั่วไปของการสร้างส่วนโต้ตอบอัตโนมัติของกระบวนการสร้างแบบจำลองหรือ (ข) คำแนะนำเฉพาะสำหรับสองกรณีนี้ ขอบคุณ!

คำตอบ:


4

FYI สิ่งนี้อาจเหมาะสมกว่าสำหรับ SE.DataScience แต่ในขณะนี้ฉันจะตอบคำถามที่นี่

ดูเหมือนว่าฉันจะชอบคุณอาจตกอยู่ในสถานการณ์ที่คุณไม่มีทางเลือกนอกจากเขียนสคริปต์ที่จะใช้งานโซลูชันของคุณ ความรู้ของพวกเขานั้นเป็นทฤษฎีอย่างเคร่งครัดดังนั้นโปรดอดทนกับฉันและแจ้งให้เราทราบหากมีสิ่งใดที่ฉันไม่เห็น

ในวงกว้างพูดว่าคุณมีรายการที่แตกต่างกันสองสามรายการที่คุณจะต้องแก้ไขเพื่อนำไปใช้

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

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

คำถามของคุณเกี่ยวกับการตรวจจับและการจัดการนอกนั้นยังอยู่ภายใต้ข้อกังวลทั้งสองนี้และฉันจะดำเนินการโดยการเขียนลูปที่เล็กลงในลูปโปรแกรมหลักของคุณที่จะ "ทำความสะอาด" ต่อไป มัน (ซึ่งอีกครั้งคุณจะต้องกำหนดตัวเอง)

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

หากสิ่งนี้มีประโยชน์สำหรับคุณและคุณต้องการให้ฉันเพิ่มความคิดเห็นแสดงความคิดเห็นแจ้งให้เราทราบและฉันมีความสุขมากกว่าที่จะทำเช่นนั้น


ฉันไม่ต้องการความช่วยเหลือใด ๆ ในการเขียนโค้ดขอบคุณ - โครงสร้างพื้นฐาน backtesting ของเรามีอยู่แล้วและค่อนข้างแข็งแกร่ง ฉันแค่สนใจว่าจะใช้วิธีการทางสถิติแบบใด เกี่ยวกับการแก้ปัญหาโดยอัตโนมัติในส่วนโต้ตอบของการสร้างแบบจำลอง: มีอะไรที่เขียนเกี่ยวกับเรื่องนี้บ้าง? ฉันไม่เคยเห็นการพูดถึงกระบวนการแบบนี้ในวรรณคดี คุณพูดถึง "คนเขียนไลบรารีซอฟต์แวร์ทั้งหมด" - คุณมีข้อมูลอ้างอิงหรือไม่
Ben Kuhn

@BenKuhn - จากความคิดเห็นของคุณฉันยังไม่ค่อยชัดเจนเกี่ยวกับปัญหาที่แท้จริงที่คุณมี โปรดช่วยฉันให้ชัดเจนยิ่งขึ้น การใช้ฮิวริสติกในการสร้างแบบจำลองอัตโนมัติค่อนข้างแพร่หลาย แอปพลิเคชันพื้นฐานที่สุดที่ฉันนึกได้ตอนนี้คือการถดถอยแบบขั้นตอนต่ำต้อย ไม่มีรายละเอียดที่แน่นอนของแบบจำลองของคุณฉันไม่สามารถชี้ไปที่งานวรรณกรรมที่อาจช่วยคุณได้ แต่การค้นหาโดย Google คร่าวๆนำเสนอหลายบทความที่สำรวจวิธีการเลือกพารามิเตอร์โดยอัตโนมัติ ดูความคิดเห็นต่อไปของฉันสำหรับลิงค์ไม่กี่
habu


@BenKuhn - คุณหมายถึงอะไรโดยเฉพาะเมื่อคุณพูดถึงกระบวนการทางสถิติที่คุณอาจใช้? ในใจของฉัน backtest สามารถจัดการได้ค่อนข้างตรงไปตรงมาโดยใช้การสุ่มตัวอย่างทดสอบรถไฟด้วยการกลิ้งหรือขยายหน้าต่างของการเลือกข้อมูล ข้อมูลทั้งหมดที่คุณได้รับจนถึงจุด backtest จะเป็นชุดการฝึกอบรมของคุณในขณะที่ข้อมูลที่คุณคาดว่าจะเห็นในช่วงเวลาถัดไปก่อนที่คุณจะมีโอกาสปรับรูปแบบของคุณจะเป็นชุดทดสอบของคุณ มาตรการปกติทั้งหมดของประสิทธิภาพการทำนายและความดีของความพอดีสามารถนำมาใช้เพื่อทำการประเมินจริง
habu

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

3

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


ทำไมจะไม่ทำการจูนแบบอัตโนมัติ (ด้วยการปรับจูนแยกที่จุดเวลาย้อนหลังแต่ละช่วง) จะเป็น "สภาพแวดล้อม backtest ที่ซื่อสัตย์อย่างแท้จริง"
Ben Kuhn

การลดความแปรปรวนโดยการปล่อยเส้นโค้งจะนำไปสู่การสูญเสียที่ไม่อาจยอมรับได้ในอำนาจการทำนายโชคไม่ดี นั่นคือสิ่งที่คุณคิดเมื่อคุณแนะนำให้ใช้ผู้เรียนที่มีความแปรปรวนต่ำกว่า ถ้าไม่คุณกำลังคิดอะไรอยู่
Ben Kuhn

@BenKuhn - ฉันแบ่งปันความกังวลของ andrew เกี่ยวกับว่า backtest จะเป็นการทดสอบ "ความซื่อสัตย์" อย่างแท้จริงของรูปแบบการทำนายพลังงานนอกตัวอย่างถ้าไม่มีเหตุผลอื่นนอกเหนือจากข้อเท็จจริงที่ว่าคุณได้พัฒนาพารามิเตอร์การปรับแต่งของคุณบน ชุดข้อมูลทั้งหมดพร้อมให้คุณใช้งาน แม้ว่าคุณจะ "ย้อนเวลากลับไป" และสร้างแบบจำลองของคุณใหม่แบบไดนามิกวิธีการที่คุณจะทำเช่นนั้นจะได้รับการพัฒนาโดยอ้างอิงไปยังชุดข้อมูลทั้งหมดดังนั้นความเสี่ยงที่มีอยู่ว่าตัวแบบจะยังคงพอดีแม้ว่าจะเป็น ได้รับการฝึกอบรมใหม่บนชุดย่อยของข้อมูลที่มีอยู่
habu

1
ในการชี้แจงการปรับอัตโนมัติจะทำให้มันเที่ยงตรงในแง่ที่การคาดการณ์ในเวลานั้น เสื้อ ไม่ต้องพึ่งพาข้อมูลจากเวลาที่มากกว่า เสื้อ. ถึงจุดของ @ habu จะมีอคติในตัวอย่างที่ลดลงจำนวนหนึ่งซึ่งเป็นผลมาจากการปรับปรุงโมเดลของคุณซ้ำ ๆ ตามประสิทธิภาพการทำงานของ backtest และฉันไม่เห็นวิธีที่แน่นอน (ฉันสมมติว่านี่เป็น ใบสมัครทางการเงิน) ประเด็นที่ฉันทำก็คือช่วงความมั่นใจของคุณเกี่ยวกับผลการทดสอบย้อนหลังนั้นเกี่ยวข้องกับความแปรปรวนการสุ่มตัวอย่างของตัวทำนายและกระบวนการปรับที่ด้านบนของมัน
andrew

1
และในโดเมนที่มีเสียงดังเช่นการเงินคุณต้องการให้แน่ใจว่าหากประวัติมีการตีแผ่ไปในทางที่แตกต่างกันเล็กน้อย (แต่ยังคงถูกดึงออกมาจากการแจกจ่ายพื้นฐาน) คุณจะยังคงมีแบบจำลองที่คล้ายกัน หากคุณมั่นใจว่ากระบวนการของคุณมีความทนทานต่อการสุ่มตัวอย่างมากกว่าที่ฉันคิดว่าคุณทำได้ดี แต่ในประสบการณ์ของฉันขั้นตอนการปรับอัตโนมัติอาจมีความไวต่อความแปรปรวนของการสุ่มตัวอย่างมาก
Andrew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.