การวิเคราะห์ความไวใช้เพื่อกำหนดผลกระทบของการรวบรวมปัจจัยอิสระต่อตัวแปรตามภายใต้เงื่อนไขบางประการ
เป็นแนวทางที่ชัดเจนในการพิจารณาว่าเอาต์พุตของโมเดลได้รับผลกระทบจากอินพุตของโมเดลอย่างไรในแง่ทั่วไป ในโพสต์นี้ ฉันจะให้ภาพรวมโดยย่อของการวิเคราะห์ความไวโดยใช้ SALib ซึ่งเป็นแพ็คเกจการวิเคราะห์ความไวของ Python ฟรี
ค่าตัวเลขที่เรียกว่าดัชนีความไว มักแสดงถึงความไวของอินพุตแต่ละรายการ ดัชนีความไวมีหลายประเภท:
- ดัชนีอันดับที่หนึ่ง: คำนวณการมีส่วนร่วมของโมเดลตัวเดียวอินพุตกับความแปรปรวนของเอาต์พุต
- ดัชนีอันดับสอง: คำนวณการมีส่วนร่วมของอินพุตโมเดลสองรายการกับความแปรปรวนเอาต์พุต
- ดัชนีลำดับทั้งหมด: หาปริมาณการมีส่วนร่วมของโมเดลอินพุตต่อความแปรปรวนของเอาต์พุต ครอบคลุมทั้งผลกระทบลำดับแรก (อินพุตผันผวนเพียงอย่างเดียว) และการโต้ตอบที่มีลำดับสูงกว่าใดๆ
SALib คืออะไร?
สาลิบ เป็น Python-based โอเพนซอร์ส ชุดเครื่องมือสำหรับทำการประเมินความไว มีเวิร์กโฟลว์แยก ซึ่งหมายความว่าไม่มีปฏิสัมพันธ์โดยตรงกับแบบจำลองทางคณิตศาสตร์หรือการคำนวณ แต่ SALib รับผิดชอบในการผลิตอินพุตของโมเดล (ผ่านฟังก์ชันตัวอย่างอย่างใดอย่างหนึ่ง) และคำนวณดัชนีความไว (ผ่านฟังก์ชันการวิเคราะห์อันใดอันหนึ่ง) จากเอาต์พุตของโมเดล
การวิเคราะห์ความไวของ SALib โดยทั่วไปประกอบด้วยสี่ขั้นตอน:
- กำหนดอินพุตของโมเดล (พารามิเตอร์) และช่วงตัวอย่างสำหรับแต่ละรายการ
- ในการสร้างอินพุตโมเดล ให้รันฟังก์ชันตัวอย่าง
- ประเมินแบบจำลองโดยใช้อินพุตที่สร้างขึ้นและบันทึกผลลัพธ์ของแบบจำลอง
- ในการคำนวณดัชนีความไว ให้ใช้ฟังก์ชันวิเคราะห์ที่เอาต์พุต
Sobol, Morris และ FAST เป็นเพียงวิธีการวิเคราะห์ความอ่อนไหวเพียงไม่กี่วิธีที่ให้บริการโดย SALib หลายปัจจัยมีอิทธิพลต่อแนวทางปฏิบัติที่ดีที่สุดสำหรับแอปพลิเคชันนั้นๆ ดังที่เราจะเห็นในภายหลัง ในระหว่างนี้ โปรดทราบว่าคุณจำเป็นต้องใช้สองฟังก์ชันเท่านั้น สุ่มตัวอย่างและวิเคราะห์ ไม่ว่าคุณจะใช้เทคนิคใดก็ตาม เราจะแนะนำคุณผ่านตัวอย่างพื้นฐานเพื่อแสดงวิธีใช้ SALib
ตัวอย่าง SALib – การวิเคราะห์ความไวของ Sobol
ในตัวอย่างนี้ เราจะตรวจสอบความไวของ Sobol ของฟังก์ชัน Ishigami ดังที่แสดงด้านล่าง เนื่องจากมีความไม่เชิงเส้นและความไม่ต่อเนื่องกันสูง ฟังก์ชัน Ishigami จึงถูกใช้อย่างกว้างขวางในการประเมินความไม่แน่นอนและวิธีการวิเคราะห์ความไว
ขั้นตอนดำเนินการดังนี้:
1. การนำเข้า SALib
ขั้นตอนแรกคือการเพิ่มไลบรารีที่จำเป็น ฟังก์ชันตัวอย่างและวิเคราะห์ของ SALib นั้นแตกต่างกันในโมดูล Python การนำเข้าตัวอย่างดาวเทียมและฟังก์ชันการวิเคราะห์ Sobol ดังแสดงด้านล่าง
เรายังใช้ฟังก์ชัน Ishigami ซึ่งมีให้ใช้งานเป็นฟังก์ชันทดสอบใน SALib สุดท้าย เรานำเข้า NumPy เนื่องจาก SALib ใช้เพื่อจัดเก็บอินพุตและเอาต์พุตของโมเดลในเมทริกซ์
2. อินพุตโมเดล
จากนั้นจะต้องกำหนดอินพุตของโมเดล ฟังก์ชัน Ishigami รับอินพุตสามตัว: x1, x2 และ x3 ใน SALib เราสร้าง dict ที่ระบุจำนวนอินพุต ชื่อ และขีดจำกัดของอินพุตแต่ละรายการ ดังที่แสดงด้านล่าง
3. สร้างตัวอย่างและแบบจำลอง
จากนั้นจึงสร้างตัวอย่าง เราจำเป็นต้องสร้างตัวอย่างโดยใช้ตัวเก็บตัวอย่าง Saltelli เนื่องจากเรากำลังทำการวิเคราะห์ความไวของ Sobol ในกรณีนี้ ค่าพารามิเตอร์จะเป็นเมทริกซ์ NumPy เราสามารถสังเกตได้ว่าเมทริกซ์คือ 8000 คูณ 3 โดยเรียกใช้ค่าพารามิเตอร์. สร้างตัวอย่าง 8000 ตัวอย่างด้วยเครื่องเก็บตัวอย่าง Saltelli เครื่องเก็บตัวอย่าง Saltelli สร้างตัวอย่าง โดยที่ N คือ 1024 (พารามิเตอร์ที่เราให้ไว้) และ D คือ 3 (จำนวนอินพุตของแบบจำลอง)
ตามที่ระบุไว้ก่อนหน้านี้ SALib ไม่ได้มีส่วนร่วมในการประเมินแบบจำลองทางคณิตศาสตร์หรือการคำนวณ หากโมเดลเขียนด้วย Python โดยทั่วไปคุณจะวนลูปผ่านแต่ละตัวอย่างอินพุตและประเมินโมเดล:
ตัวอย่างสามารถบันทึกลงในไฟล์ข้อความได้หากโมเดลไม่ได้รับการพัฒนาใน Python:
แต่ละบรรทัดใน param values.txt แสดงถึงอินพุตโมเดลหนึ่งรายการ เอาต์พุตของโมเดลควรถูกบันทึกลงในไฟล์อื่นในสไตล์ที่คล้ายคลึงกัน โดยมีหนึ่งเอาต์พุตในแต่ละบรรทัด หลังจากนั้น เอาต์พุตอาจโหลดด้วย:
ในตัวอย่างนี้ เราจะใช้ฟังก์ชัน Ishigami จาก SALib ฟังก์ชันการทดสอบเหล่านี้สามารถประเมินได้ดังนี้:
4. ทำการวิเคราะห์
ในที่สุด เราสามารถคำนวณดัชนีความไวหลังจากโหลดผลลัพธ์ของโมเดลลงใน Python ในตัวอย่างนี้ เราจะใช้ sobol.analyze เพื่อคำนวณดัชนีลำดับที่หนึ่ง สอง และยอดรวม
Si คือพจนานุกรม Python ที่มีคีย์ "S1" "S2" "ST" "S1 conf" "S2 conf" และ "ST conf" คีย์ _conf เก็บช่วงความเชื่อมั่นที่เกี่ยวข้อง ซึ่งโดยทั่วไปกำหนดไว้ที่ 95 เปอร์เซ็นต์ หากต้องการส่งออก ดัชนีทั้งหมด ใช้พารามิเตอร์คีย์เวิร์ด print to console=True หรือตามภาพประกอบด้านล่าง เราอาจพิมพ์ค่าแต่ละค่าจาก Si
เราจะเห็นได้ว่า x1 และ x2 มีความไวในลำดับแรก แต่ x3 ดูเหมือนจะไม่มีผลกระทบต่อลำดับที่หนึ่ง
หากดัชนีอันดับรวมมีขนาดใหญ่กว่าดัชนีอันดับแรกอย่างมาก การโต้ตอบในลำดับที่สูงกว่าจะเกิดขึ้นอย่างแน่นอนที่สุด เราสามารถเห็นการโต้ตอบที่มีลำดับสูงกว่าเหล่านี้โดยดูที่ดัชนีอันดับสอง:
เราสามารถสังเกตได้ว่า x1 และ x3 มีปฏิสัมพันธ์ที่สำคัญ หลังจากนั้น ผลลัพธ์อาจถูกแปลงเป็น Pandas DataFrame เพื่อการศึกษาต่อไป
5. พล็อต
เพื่อความสะดวกของคุณ มีสิ่งอำนวยความสะดวกในการสร้างแผนภูมิพื้นฐาน ฟังก์ชัน plot() สร้างวัตถุแกน matplotlib สำหรับการจัดการในภายหลัง
สรุป
SALib เป็นเครื่องมือวิเคราะห์ความอ่อนไหวที่ซับซ้อน เทคนิคอื่นๆ ใน SALib ได้แก่ Fourier Amplitude Sensitivity Test (FAST), Morris Method และ Delta-Moment Independent Measure แม้ว่าจะเป็นไลบรารี Python แต่ก็มีจุดมุ่งหมายเพื่อใช้งานกับโมเดลต่างๆ
SALib นำเสนออินเทอร์เฟซบรรทัดคำสั่งที่ใช้งานง่ายสำหรับการสร้างอินพุตโมเดลและประเมินเอาต์พุตของโมเดล เช็คเอาท์ เอกสาร SAlib เพื่อเรียนรู้เพิ่มเติม
เขียนความเห็น