HIMFA

HIMFA (Hierarchical Mixture of Facies Classifier) là kiến trúc phân loại facies hai tầng trong wipm-old, đối ứng cho bài toán classification của HIMPE bên regression. Tên HIMFA là naming nội bộ trong code base mà không có paper trùng acronym; khuôn khổ lý thuyết gần nhất là hierarchical classification (Silla & Freitas, 2011) và cascade clustering-then-supervised (Silva et al., 2012).

Hai tầng coarse-to-fine

Tầng 1 — group classifier: gom các facies tương đồng vào “group” do người dùng định nghĩa (ví dụ sand-dominant, shale-dominant, carbonate). Hàm group_data trong clf_helper.py map nhãn facies gốc về chỉ số group, rồi HIMFAClassifier.fit train groups_model trên dữ liệu đã re-label theo group. Đây là bài toán classification dễ hơn vì số class ít và sự khác biệt giữa group lớn.

Tầng 2 — facies classifier theo group: với mỗi group, một classifier con được train chỉ trên các sample thuộc group đó (tham số include=group__init__ của classifier con sẽ lọc dữ liệu). Khi predict, sample được routed qua group classifier trước, sau đó qua đúng facies classifier của group được predict.

Cấu trúc này cài đặt ở HIMFAClassifier trong HIMFAClassifier.py, với groups_model cho tầng 1 và facies_models (list) cho tầng 2.

Plug-and-play backbone

HIMFA không cố định loại classifier. Dict CLASSIFIER ở đầu HIMFAClassifier.py liệt kê các lựa chọn NeuralNetClassifier, DecisionTreeClassifier, KNN, LogisticRegression, RandomForestClassifier, S_SOM. User chỉ định backbone qua tham số groups_model (string) cho tầng 1, và facies_models (list of dict {type, group}) cho tầng 2. Nhờ vậy có thể chọn backbone mạnh khác nhau cho mỗi tầng và cho mỗi group, ví dụ dùng S-SOM cho group facies có topology rõ và RandomForest cho group có biên ngang phức tạp.

Hậu xử lý smoothen theo độ sâu

Predict ở mỗi tầng đều đi qua smoothen (cũng ở clf_helper.py) với bán kính cửa sổ radius. Hàm này tính mode trong cửa sổ trượt để loại các điểm “nhảy đơn lẻ” — một facies có nhãn khác hẳn hàng xóm gần như luôn là noise vì facies thay đổi tự nhiên thành dải liền theo độ sâu. Smoothing áp dụng cả ở pred group lẫn pred facies cuối, nhân đôi hiệu ứng làm mượt.

Tham số threshold được forward xuống groups_model.predict để gán nhãn rỗng cho sample có confidence thấp — kết hợp với hàm judge (clf_helper.py), HIMFA biết “từ chối” predict thay vì ép một nhãn không chắc chắn.

Train/val split giữ thứ tự

HIMFAClassifier.__init__ gọi split_data với proportional=True, keep_order=True để val set giữ tỉ lệ class gốc và thứ tự theo độ sâu. Điều này cần thiết khi đánh giá vì smoothen theo cửa sổ chỉ có nghĩa nếu mẫu liền kề trong val set vẫn liền kề theo độ sâu thật, không bị xáo trộn ngẫu nhiên.

Vì sao hierarchical hợp với facies

Số facies trong một bồn trầm tích thường nhiều (10-20 facies), trong đó một số facies hiếm chỉ chiếm vài phần trăm dataset. Một classifier flat đối mặt class imbalance nặng và phải học decision boundary giữa mọi cặp facies. Tách thành group + facies-in-group làm hai bài toán nhỏ hơn: tầng 1 chỉ phân biệt vài group (mất cân bằng nhẹ hơn), tầng 2 chỉ phân biệt các facies “gần nhau” trong cùng group nên decision boundary đơn giản hơn nhiều. Đây cũng là tinh thần local-expert giống HIMPE, khác ở chỗ HIMPE dùng cluster tự động còn HIMFA dùng group do người dùng định nghĩa theo kiến thức địa chất.

Cập nhật: 2026-05-29