
Dự án này làm gì
Dự án cung cấp quy trình đầu-cuối để trích xuất, kiểm tra, hoàn thiện và dự báo dữ liệu tiêm chủng hằng tháng từ DHIS2. Dự án sử dụng dữ liệu về các liều vắc-xin Sởi, BCG và OPV1 do 13 huyện báo cáo trong 60 tháng đã hoàn tất, từ tháng 9 năm 2021 đến tháng 8 năm 2026.
Bộ dữ liệu đi kèm lấy từ phiên bản demo DHIS2 công khai đang chạy phiên bản 2.43.1. Đây là dữ liệu mẫu và không chứa thông tin cá nhân hoặc thông tin nơi làm việc. Vì vậy, kết quả chỉ minh họa các phương pháp phân tích và vấn đề chất lượng dữ liệu; không được diễn giải là các phát hiện về xu hướng sức khỏe thực tế.
Quy trình gồm bốn giai đoạn chính:
- Truy xuất dữ liệu tổng hợp hằng tháng qua API phân tích DHIS2 hoặc tải ảnh chụp CSV đã lưu.
- Kiểm tra tính đầy đủ của báo cáo, sự lặp lại theo năm, các thay đổi lớn và khả năng hoán đổi các tháng liền kề.
- Ước tính các giá trị bị thiếu để huấn luyện mô hình, đồng thời giữ lại các cờ xác định những giá trị ước tính.
- Kiểm tra xem các mô hình dự báo có vượt trội hơn đường cơ sở theo mùa, vốn lặp lại giá trị của năm trước, hay không.
Tính năng chính
- Trích xuất qua API DHIS2: Các hàm trong
pull_dhis2_data.pytìm và truy xuất những chỉ số cần thiết. - Khả năng tái lập ngoại tuyến: Theo mặc định, notebook đọc
dhis2_raw_data.csv, nên có thể chạy mà không cần kết nối internet hoặc đăng nhập. - Kiểm tra tính đầy đủ: Phân tích kiểm tra xem mỗi chỉ số có một giá trị cho từng huyện và từng tháng hay không.
- Phát hiện lặp lại: Đo tần suất giá trị của một huyện khớp chính xác với cùng tháng của một năm trước.
- Phát hiện hoán đổi: Đánh dấu các tháng liền kề có giá trị xuất hiện theo thứ tự ngược với năm trước.
- Bổ sung khoảng trống có cấu trúc: Các giá trị bị thiếu được ước tính từ cùng tháng dương lịch ở những năm khác hoặc từ mức huyện và tính mùa vụ liên huyện.
- Dự báo chống rò rỉ dữ liệu: Tập huấn luyện và tập kiểm tra được tách theo thứ tự thời gian, còn các khoảng trống trong tập huấn luyện chỉ được bổ sung bằng dữ liệu huấn luyện.
- So sánh mô hình: Mô hình ngây thơ theo mùa, SARIMA và gradient boosting được đánh giá bằng MAE và WAPE.
Tìm hiểu các tệp của dự án
DHIS2_Immunisation_Audit_and_Forecast.ipynb: toàn bộ phân tích, bao gồm biểu đồ, logic kiểm tra, bổ sung khoảng trống và dự báo.pull_dhis2_data.py: các hàm định vị chỉ số và lấy dữ liệu từ DHIS2.dhis2_raw_data.csv: ảnh chụp đã lưu, được dùng cho lần chạy ngoại tuyến mặc định.requirements.txt: các gói Python phụ thuộc.README.md: tài liệu dự án và các phát hiện được tóm tắt.
Cài đặt và thiết lập
1. Lấy kho mã nguồn
Sao chép hoặc tải kho mã nguồn, sau đó mở terminal tại thư mục gốc của kho. Nên sử dụng môi trường ảo để các gói của dự án được tách biệt khỏi những dự án Python khác.
python -m venv .venv
Kích hoạt môi trường bằng lệnh phù hợp với hệ điều hành của bạn, sau đó cài đặt các gói bắt buộc:
pip install -r requirements.txt
2. Khởi động Jupyter Notebook
jupyter notebook DHIS2_Immunisation_Audit_and_Forecast.ipynb
Chạy các ô trong notebook từ trên xuống dưới. Theo mặc định, phân tích tải dhis2_raw_data.csv. Đây là cách đơn giản và có khả năng tái lập nhất để khám phá quy trình, vì không yêu cầu kết nối mạng hay thông tin xác thực DHIS2.
3. Tùy chọn cấu hình quyền truy cập DHIS2 trực tiếp
Để lấy dữ liệu mới, đặt REFRESH = True trong ô mã đầu tiên của notebook. Có thể cung cấp địa chỉ máy chủ và thông tin đăng nhập thông qua các biến môi trường DHIS2_URL, DHIS2_USER và DHIS2_PASSWORD.
DHIS2_URL=https://your-dhis2-server.example
DHIS2_USER=your_username
DHIS2_PASSWORD=your_password
Cú pháp chính xác để đặt biến môi trường phụ thuộc vào shell và hệ điều hành của bạn. Lưu thông tin xác thực trong biến môi trường giúp ngăn chúng bị nhúng vào notebook hoặc được commit vào hệ thống quản lý mã nguồn.
Chỉ kết nối với một hệ thống DHIS2 trực tiếp khi được chủ sở hữu dữ liệu chấp thuận. Sử dụng dữ liệu tổng hợp đã khử định danh và tuân thủ các yêu cầu về bảo mật cũng như quản trị của tổ chức.
Chạy quy trình cơ bản
Bước 1: Tải hoặc truy xuất dữ liệu hằng tháng
Mỗi hàng đại diện cho một chỉ số, một huyện và một tháng. Phân tích đầy đủ sử dụng 13 huyện và 60 tháng cho mỗi chỉ số tiêm chủng. Sởi được đưa vào cả giai đoạn kiểm tra và dự báo, trong khi BCG và OPV1 được kiểm tra. Các chỉ số ANC bị loại trừ vì chỉ có 20 tháng dữ liệu, quá ngắn để nghiên cứu các mô hình hằng năm trong quy trình này.
Với REFRESH = False, notebook đọc ảnh chụp đã lưu. Với REFRESH = True, notebook sử dụng các hàm trợ giúp API để lấy kết quả hiện tại từ máy chủ đã cấu hình.
Bước 2: Kiểm tra tính đầy đủ của báo cáo
Đối với mỗi chỉ số, số lượng quan sát kỳ vọng được tính như sau:
13 huyện × 60 tháng = 780 huyện-tháng
Bộ mẫu có 725 giá trị được báo cáo cho mỗi chỉ số tiêm chủng, còn thiếu 55 giá trị, tương đương 7.1%. Dữ liệu thiếu có cấu trúc rõ rệt thay vì ngẫu nhiên:
- Tất cả khoảng trống đều rơi vào tháng 10, tháng 11 hoặc tháng 12.
- Mỗi năm từ 2021 đến 2025 đều thiếu 11 giá trị.
- Các huyện bị ảnh hưởng là Pujehun, Bonthe, Koinadugu, Kono, Bombali và Port Loko.
- Pujehun không có báo cáo từ tháng 10 đến tháng 12 trong bất kỳ năm nào có dữ liệu.
- Không có giá trị nào bị thiếu trong năm 2026.
Điều này quan trọng vì việc chỉ cộng các huyện đã báo cáo khiến tổng số toàn quốc trông thấp một cách giả tạo. Trong 15 tháng bị ảnh hưởng, tổng số chưa hiệu chỉnh trung bình thấp hơn 14,3% và có thể thấp hơn tới 17,1%.
Bước 3: Phát hiện các lần lặp chính xác giữa các năm
Notebook so sánh từng cặp huyện-tháng với cùng tháng đó của 12 tháng trước. Các giá trị trùng khớp hoàn toàn có thể xảy ra tự nhiên, nhưng việc lặp lại trên diện rộng là điều bất thường trong dữ liệu số ca y tế theo tháng thực tế.
Trong dữ liệu minh họa, 65,5% số cặp huyện-tháng của Sởi năm 2024, 92,4% năm 2025 và 71,2% trong giai đoạn từ tháng 1 đến tháng 8 năm 2026 trùng khớp hoàn toàn với năm trước. BCG và OPV1 cũng thể hiện gần như cùng một mô hình.
Mô hình này quan trọng đối với việc diễn giải. Nó giống dữ liệu mẫu được tạo ra hoặc sao chép từ một mẫu có sẵn, đồng thời mang lại lợi thế bất thường cho đường cơ sở dự báo dựa trên các giá trị của năm trước.
Bước 4: Xem xét các thay đổi lớn và khả năng hoán đổi tháng
Những thay đổi lớn giữa các năm là tín hiệu cảnh báo hữu ích, nhưng không tự động có nghĩa là lỗi. Notebook cũng kiểm tra xem hai giá trị liền kề có bị đổi vị trí so với năm trước hay không.
Các khả năng hoán đổi xuất hiện vào tháng 3 và tháng 4 năm 2024, tháng 10 và tháng 11 năm 2024, cũng như tháng 3 và tháng 4 năm 2026. Ví dụ, Port Loko có các giá trị 535 và 313 trong tháng 3 và tháng 4, nhưng thứ tự của chúng thay đổi giữa các năm. Việc hoán đổi như vậy tạo ra hai sai số lớn theo tháng, dù tổng cộng của cả hai tháng vẫn không đổi.
Quy trình đánh dấu các khả năng hoán đổi nhưng không tự động hiệu chỉnh chúng. Chỉ dựa trên dữ liệu thì không thể xác định thứ tự nào là đúng, vì vậy cần kiểm tra các báo cáo gốc trước khi thay đổi.
Bước 5: Điền các giá trị thiếu trong tập huấn luyện
Dự án điền mỗi khoảng trống bằng phương pháp hai giai đoạn:
- Nếu huyện đã báo cáo cùng tháng dương lịch đó trong những năm khác, sử dụng trung bình của các giá trị hiện có.
- Nếu huyện chưa bao giờ báo cáo tháng dương lịch đó, ước tính bằng cách nhân mức trung bình của huyện với mô hình mùa vụ điển hình của tháng đó trên tất cả các huyện.
Phương pháp thứ hai cần thiết cho những trường hợp như Pujehun, nơi dữ liệu từ tháng 10 đến tháng 12 đều thiếu trong mọi năm hiện có.
Để kiểm tra phương pháp, phân tích ẩn 15% các giá trị đã biết trong giai đoạn từ tháng 10 đến tháng 12, điền các giá trị đó rồi so sánh ước tính với quan sát thực tế. Trong 21 giá trị bị ẩn, sai số trung bình là 8,2% và sai số trung vị là 7,9%. Đây chỉ là một mẫu kiểm định nhỏ, vì vậy nên xem các con số này là chỉ dẫn sơ bộ thay vì ước tính độ chính xác mang tính kết luận.
Các giá trị ước tính không được xem là giá trị quan sát. Chúng chỉ được dùng để xây dựng dữ liệu huấn luyện mô hình và các đặc trưng trễ. Các quan sát kiểm tra bị thiếu được bỏ qua khi tính điểm thay vì được điền.
Dự báo liều vắc-xin Sởi
Sử dụng cách chia tập huấn luyện và kiểm tra theo thứ tự thời gian
Câu hỏi dự báo là liệu mô hình có thể dự đoán 12 tháng tiếp theo về số liều Sởi cho từng huyện chính xác hơn so với việc lặp lại các giá trị của năm trước hay không.
- Giai đoạn huấn luyện: từ tháng 9 năm 2021 đến tháng 8 năm 2025, gồm 48 tháng.
- Giai đoạn kiểm tra: từ tháng 9 năm 2025 đến tháng 8 năm 2026, gồm 12 tháng.
- Các quan sát được tính điểm: 145 giá trị kiểm tra đã báo cáo.
Việc chia ngẫu nhiên có thể cho phép các quan sát tương lai ảnh hưởng đến dự đoán của những tháng trước đó. Cách chia dựa trên thời gian ngăn hiện tượng rò rỉ này. Các khoảng trống trong tập huấn luyện được điền chỉ bằng thông tin của giai đoạn huấn luyện, trong khi các giá trị kiểm tra chưa được báo cáo từ tháng 10 đến tháng 12 năm 2025 bị loại khỏi quá trình đánh giá.
So sánh ba mô hình
- Mô hình ngây thơ theo mùa: dự đoán giá trị được quan sát trong cùng tháng của một năm trước.
- SARIMA: khớp mô hình
SARIMA(0,1,1)(0,1,1,12)riêng cho từng huyện. Cấu hình này được chọn trước khi xem kết quả kiểm tra và không được tinh chỉnh. - Gradient boosting: huấn luyện một mô hình dùng chung cho tất cả các huyện, sử dụng các giá trị của 12 và 24 tháng trước, tháng dương lịch và huyện. Các giá trị được chuẩn hóa theo mức trung bình của từng huyện để các huyện có quy mô khác nhau có thể cùng sử dụng một mô hình.
Các đặc trưng gradient boosting chỉ sử dụng những quan sát cách hiện tại ít nhất 12 tháng. Điều này phản ánh lượng thông tin có thể có khi tạo dự báo đầy đủ cho 12 tháng tiếp theo.
Diễn giải MAE và WAPE
Notebook báo cáo hai chỉ số đánh giá:
- MAE: sai số tuyệt đối trung bình tính theo số liều trên mỗi cặp huyện-tháng.
- WAPE: tổng sai số tuyệt đối chia cho tổng số liều thực tế. Ví dụ,
0.036tương ứng với sai số 3,6%.
Mô hình ngây thơ theo mùa đạt MAE là 16,1 và WAPE là 3,6%. SARIMA có MAE là 30,0 và WAPE là 6,6%, trong khi gradient boosting có MAE là 32,9 và WAPE là 7,3%.
Khi loại tháng 3 và tháng 4 năm 2026, WAPE của mô hình ngây thơ theo mùa giảm xuống còn 0,8%. SARIMA đạt 5,4% và gradient boosting đạt 5,7%. Vì vậy, phần lớn sai số của đường cơ sở đến từ khả năng hoán đổi giữa tháng 3 và tháng 4.
Vì sao đường cơ sở đơn giản lại thắng
Phương pháp ngây thơ theo mùa đạt kết quả tốt nhất vì hầu hết các giá trị trong giai đoạn kiểm tra là bản sao chính xác của năm trước. Trong điều kiện đó, một mô hình lặp lại quan sát của năm trước gần như hoàn hảo.
Ngược lại, SARIMA và gradient boosting ước tính các mô hình rộng hơn chỉ từ bốn chu kỳ theo năm. Chúng làm mượt chuỗi dữ liệu và không thể tái tạo các giá trị được sao chép chính xác một cách đáng tin cậy như vậy. Chúng cũng không thể dự đoán việc hoán đổi giữa các tháng liền kề dựa trên những quan sát trước đó.
Kết quả này không chứng minh rằng dự báo ngây thơ theo mùa nhìn chung luôn tốt hơn. Nó phản ánh cấu trúc bất thường của bộ dữ liệu minh họa này. Với dữ liệu thực có biến động thực sự giữa các năm, các mô hình phức tạp hơn sẽ có cơ hội rõ ràng và có ý nghĩa hơn để cải thiện so với đường cơ sở.
Các mẹo nâng cao để điều chỉnh quy trình
Tách riêng giá trị quan sát và giá trị ước tính
Thêm hoặc giữ lại một cờ rõ ràng cho mọi quan sát đã được điền. Sử dụng giá trị ước tính khi về mặt kỹ thuật cần có một chuỗi huấn luyện đầy đủ, nhưng không được ngầm trình bày chúng như các giá trị đã báo cáo. Việc chấm điểm vẫn phải dựa trên những quan sát thực sự đã được báo cáo.
Điều tra các điểm bất thường thay vì tự động sửa
Báo cáo bị thiếu, các giá trị lặp lại, những thay đổi lớn và khả năng bị hoán đổi cần những cách xử lý khác nhau. Một giá trị bị thiếu có thể được ước tính để lập mô hình, nhưng một trường hợp có vẻ như bị hoán đổi tháng cần được đối chiếu với tài liệu nguồn. Việc tự động hiệu chỉnh có thể biến một cảnh báo hiển thị thành một lỗi bị che giấu.
Sử dụng đánh giá theo nguồn gốc trượt
Kho mã sử dụng một cửa sổ kiểm thử 12 tháng. Để đánh giá chắc chắn hơn, hãy lặp lại việc đánh giá trên nhiều cửa sổ theo trình tự thời gian. Mỗi lần chạy chỉ được huấn luyện trên dữ liệu có trước giai đoạn dự báo tương ứng. Cách này cho thấy hiệu suất mô hình có ổn định theo thời gian hay phụ thuộc vào một năm bất thường duy nhất.
Luôn đối chiếu các mô hình phức tạp
Giữ lại dự báo ngây thơ theo mùa ngay cả khi bổ sung các mô hình SARIMA đã tinh chỉnh, các đặc trưng mới hoặc những thuật toán học máy khác. Một phương pháp phức tạp chỉ hữu ích nếu liên tục vượt qua một đường cơ sở đơn giản, có cơ sở vận hành trên các giai đoạn chưa được quan sát.
Bổ sung độ bất định khi làm việc với dữ liệu thực
Các bước tiếp theo được đề xuất bao gồm việc bổ sung khoảng dự báo. Chỉ sử dụng dự báo điểm không thể hiện được độ bất định do biến động thông thường, dữ liệu lịch sử hạn chế hoặc các khoảng trống ước tính trong dữ liệu huấn luyện.
Tự động hóa các đợt kiểm tra định kỳ
Có thể lập lịch để chạy cùng các kiểm tra này sau mỗi chu kỳ báo cáo. Một quy trình định kỳ có thể báo cáo các cặp huyện-tháng mới bị thiếu, những trường hợp lặp lại bất thường so với cùng kỳ năm trước, các thay đổi lớn và những tháng có khả năng bị hoán đổi để xem xét.
Thận trọng khi mở rộng sang các chỉ số khác
Trước khi dự báo một chỉ số khác, hãy xác minh rằng chỉ số đó có đủ lịch sử cho chu kỳ mùa vụ của nó. Các chỉ số ANC hiện có chỉ bao gồm 20 tháng, bắt đầu từ tháng 1 năm 2025, nên dự án này không sử dụng chúng để nghiên cứu các mô hình hằng năm.
Những hạn chế quan trọng
- Nguồn dữ liệu là một máy chủ demo, vì vậy phân tích không phản ánh bất kỳ xu hướng tiêm chủng thực tế nào.
- Việc so sánh dự báo chỉ sử dụng một cửa sổ kiểm thử 12 tháng.
- Chỉ dự báo chỉ số Measles.
- Cấu hình SARIMA được cố định thay vì tinh chỉnh.
- Việc xác thực điền giá trị thiếu chỉ chứa 21 quan sát bị ẩn.
- Các giá trị ước tính từ tháng 10 đến tháng 12 của Pujehun phụ thuộc vào các mô hình mùa vụ từ những huyện khác.
- Các trường hợp nghi ngờ hoán đổi tháng được đánh dấu nhưng không được hiệu chỉnh.
Kết luận
Dự án này cho thấy việc kiểm tra chất lượng dữ liệu nên được thực hiện trước khi dự báo. Các bước kiểm tra phát hiện tình trạng thiếu dữ liệu có cấu trúc, hiện tượng lặp lại rộng rãi so với cùng kỳ năm trước và khả năng cao các tháng liền kề bị hoán đổi, những yếu tố ảnh hưởng đáng kể đến tổng số và việc đánh giá mô hình.
Hãy bắt đầu bằng cách chạy notebook trên bản chụp đã lưu, kiểm tra từng giai đoạn kiểm toán, sau đó chỉ bật làm mới API khi bạn sẵn sàng sử dụng một nguồn DHIS2 đã được phê duyệt. Khi điều chỉnh quy trình, hãy duy trì việc đánh giá theo trình tự thời gian, gắn nhãn cho các giá trị ước tính, xác minh các điểm bất thường với báo cáo nguồn và so sánh mọi mô hình với một đường cơ sở theo mùa đơn giản.
