Phân tích độ nhạy được sử dụng để xác định tác động của tập hợp các yếu tố độc lập đến một biến phụ thuộc trong những điều kiện nhất định.
Đó là một cách tiếp cận mạnh mẽ để xác định đầu ra của mô hình bị ảnh hưởng như thế nào bởi các đầu vào của mô hình nói chung. Trong bài đăng này, tôi sẽ trình bày tổng quan nhanh về phân tích độ nhạy bằng cách sử dụng SALib, một gói phân tích độ nhạy Python miễn phí.
Một giá trị số được gọi là chỉ số độ nhạy, thường đại diện cho độ nhạy của mỗi đầu vào. Có nhiều loại chỉ số độ nhạy:
- Chỉ số bậc nhất: tính toán đóng góp của một đầu vào mô hình đơn lẻ vào phương sai đầu ra.
- Chỉ số bậc hai: tính toán sự đóng góp của hai đầu vào của mô hình vào phương sai đầu ra.
- Chỉ số thứ tự tổng: định lượng đóng góp của đầu vào mô hình vào phương sai đầu ra, bao gồm cả hiệu ứng bậc nhất (đầu vào dao động riêng) và bất kỳ tương tác bậc cao nào.
SALib là gì?
SALib dựa trên Python mã nguồn mở bộ công cụ để thực hiện đánh giá độ nhạy. Nó có một quy trình làm việc tách biệt, có nghĩa là nó không tương tác trực tiếp với mô hình toán học hoặc tính toán. Thay vào đó, SALib phụ trách sản xuất các đầu vào của mô hình (thông qua một trong các hàm mẫu) và tính toán các chỉ số độ nhạy (thông qua một trong các hàm phân tích) từ đầu ra của mô hình.
Một phân tích độ nhạy SALib điển hình bao gồm bốn bước:
- Xác định đầu vào của mô hình (tham số) và phạm vi mẫu cho mỗi đầu vào.
- Để tạo đầu vào mô hình, hãy chạy hàm mẫu.
- Đánh giá mô hình bằng cách sử dụng các đầu vào đã tạo và lưu kết quả mô hình.
- Để tính toán các chỉ số độ nhạy, hãy sử dụng chức năng phân tích trên kết quả đầu ra.
Sobol, Morris và FAST chỉ là một vài trong số các phương pháp phân tích độ nhạy được cung cấp bởi SALib. Nhiều yếu tố ảnh hưởng đến cách tiếp cận nào là tốt nhất cho một ứng dụng nhất định, như chúng ta sẽ thấy ở phần sau. Hiện tại, hãy nhớ rằng bạn chỉ cần sử dụng hai chức năng, lấy mẫu và phân tích, bất kể bạn sử dụng bất kỳ kỹ thuật nào. Chúng tôi sẽ hướng dẫn bạn qua một ví dụ cơ bản để minh họa cách sử dụng SALib.
Ví dụ về SALib - Phân tích độ nhạy của Sobol
Trong ví dụ này, chúng ta sẽ kiểm tra độ nhạy Sobol của hàm Ishigami, như hình dưới đây. Do tính phi tuyến tính cao và tính phi đơn điệu của nó, hàm Ishigami được sử dụng rộng rãi để đánh giá các phương pháp phân tích độ không đảm bảo và độ nhạy.
Các bước thực hiện như sau:
1. Nhập SALib
Bước đầu tiên là thêm các thư viện cần thiết. Các chức năng mẫu và phân tích của SALib được giữ riêng biệt trong các mô-đun Python. Ví dụ: nhập mẫu vệ tinh và các chức năng phân tích Sobol được hiển thị bên dưới.
Chúng tôi cũng sử dụng hàm Ishigami, có sẵn như một hàm kiểm tra trong SALib. Cuối cùng, chúng tôi nhập NumPy vì SALib sử dụng nó để lưu trữ các đầu vào và đầu ra của mô hình trong một ma trận.
2. Đầu vào mô hình
Các đầu vào của mô hình sau đó phải được xác định. Hàm Ishigami chấp nhận ba đầu vào: x1, x2 và x3. Trong SALib, chúng tôi xây dựng một lệnh chỉ định số lượng đầu vào, tên của chúng và giới hạn trên mỗi đầu vào, như được thấy bên dưới.
3. Tạo Mẫu và Mô hình
Các mẫu sau đó được tạo ra. Chúng tôi cần tạo mẫu bằng cách sử dụng bộ lấy mẫu Saltelli vì chúng tôi đang thực hiện phân tích độ nhạy Sobol. Trong trường hợp này, các giá trị tham số là một ma trận NumPy. Chúng ta có thể quan sát rằng ma trận là 8000 x 3 bằng cách chạy các giá trị param.shape. 8000 mẫu đã được tạo bằng bộ lấy mẫu Saltelli. Bộ lấy mẫu Saltelli tạo ra các mẫu, trong đó N là 1024 (tham số chúng tôi đã cung cấp) và D là 3 (số lượng đầu vào của mô hình).
Như đã nêu trước đây, SALib không tham gia vào việc đánh giá mô hình toán học hoặc tính toán. Nếu mô hình được viết bằng Python, bạn thường sẽ lặp qua từng đầu vào mẫu và đánh giá mô hình:
Các mẫu có thể được lưu vào tệp văn bản nếu mô hình không được phát triển bằng Python:
Mỗi dòng trong param values.txt đại diện cho một đầu vào mô hình. Đầu ra của mô hình phải được lưu vào một tệp khác theo kiểu tương tự, với một đầu ra trên mỗi dòng. Sau đó, các đầu ra có thể được tải với:
Trong ví dụ này, chúng ta sẽ sử dụng hàm Ishigami từ SALib. Các chức năng kiểm tra này có thể được đánh giá như sau:
4. Thực hiện phân tích
Cuối cùng chúng ta có thể tính toán các chỉ số độ nhạy sau khi tải kết quả mô hình vào Python. Trong ví dụ này, chúng tôi sẽ sử dụng sobol.analyze để tính toán các chỉ số thứ nhất, thứ hai và tổng thứ tự.
Si là một từ điển Python có các khóa “S1,” “S2,” “ST,” “S1 conf”, “S2 conf” và “ST conf.” Các phím _conf giữ khoảng tin cậy liên quan, thường được đặt thành 95 phần trăm. Để xuất, tất cả các chỉ số, hãy sử dụng tham số từ khóa print thành console = True. Ngoài ra, như được minh họa bên dưới, chúng tôi có thể in các giá trị riêng lẻ từ Si.
Chúng ta có thể thấy rằng x1 và x2 có độ nhạy bậc nhất, nhưng x3 dường như không có bất kỳ tác động bậc nhất nào.
Nếu tổng chỉ số thứ tự lớn hơn đáng kể so với chỉ số thứ nhất, thì các tương tác ở bậc cao hơn chắc chắn sẽ diễn ra. Chúng ta có thể thấy các tương tác bậc cao này bằng cách xem xét các chỉ số bậc hai:
Chúng ta có thể quan sát rằng x1 và x3 có tương tác đáng kể. Sau đó, kết quả có thể được chuyển đổi thành Pandas DataFrame để nghiên cứu thêm.
5. Âm mưu
Để thuận tiện cho bạn, các phương tiện biểu đồ cơ bản được cung cấp. Hàm plot () tạo ra các đối tượng trục matplotlib cho các thao tác tiếp theo.
Kết luận
SALib là một bộ công cụ phân tích độ nhạy tinh vi. Các kỹ thuật khác trong SALib bao gồm Kiểm tra độ nhạy biên độ Fourier (FAST), Phương pháp Morris và Phép đo độc lập với khoảnh khắc Delta. Mặc dù nó là một thư viện Python, nó được thiết kế để hoạt động với bất kỳ loại mô hình nào.
SALib cung cấp giao diện dòng lệnh dễ sử dụng để tạo đầu vào mô hình và đánh giá đầu ra mô hình. Thủ tục thanh toán Tài liệu SALib để tìm hiểu thêm.
Bình luận