Giới thiệu dự án

Đại dịch COVID-19 do chủng virus SARS-CoV-2 gây ra đã tạo nên một cuộc khủng hoảng y tế và kinh tế - xã hội quy mô toàn cầu. Tính đến giữa năm 2021, thế giới đã ghi nhận trên 181 triệu ca nhiễm và gần 4 triệu ca tử vong; riêng tại Việt Nam, đợt bùng phát dịch thứ tư đã nâng tổng số ca mắc lên hàng chục nghìn trường hợp trong thời gian ngắn. Tình trạng quá tải hệ thống y tế, nhiễu loạn thông tin trên không gian mạng và sự chậm trễ trong phân loại ban đầu (triage) đã đặt ra yêu cầu cấp thiết về các công cụ kỹ thuật số hỗ trợ cộng đồng.

Vấn đề cốt lõi (problem statement) nằm ở chỗ: người dân gặp khó khăn trong việc tiếp cận các nguồn tin chính thống theo thời gian thực (real-time), thiếu công cụ tự đánh giá nguy cơ lây nhiễm ban đầu dựa trên triệu chứng lâm sàng chuẩn y khoa, và mất phương hướng khi cần tìm kiếm các cơ sở y tế gần nhất trong trường hợp khẩn cấp.

Đồ án khóa luận tốt nghiệp ngành Kỹ thuật Phần mềm – Đại học Công nghệ Thông tin (ĐHQG-HCM) do sinh viên Hà Huy Khôi thực hiện dưới sự hướng dẫn của PGS. TS. Trần Sơn Hải và ThS. Huỳnh Nguyễn Khắc Huy đã tập trung nghiên cứu, thiết kế và hiện thực hóa hệ thống "Ứng dụng Sổ tay COVID-19" (Handbook COVID-19 Application).

Mục tiêu cụ thể của dự án gồm:

  1. Xây dựng ứng dụng di động đa nền tảng (Cross-platform Mobile Application) hiển thị dữ liệu thống kê dịch tễ trực quan, cập nhật liên tục từ các nguồn chính thống (Bộ Y tế, ncov.moh.gov.vn).
  2. Tích hợp phân hệ dự đoán xác suất nhiễm virus SARS-CoV-2 dựa trên thuật toán Học máy (Machine Learning) với 8 tham số dịch tễ và triệu chứng lâm sàng ban đầu.
  3. Cung cấp tính năng định vị không gian địa lý (Geocoding / GIS) thông qua Google Cloud Platform (GCP) để chỉ đường đến các trạm y tế, bệnh viện điều trị gần nhất.
  4. Xây dựng hệ thống quản trị nội dung (CMS Web Admin) phục vụ kiểm duyệt, đăng tải bản tin, thông điệp phòng chống dịch (thông điệp 5K).

Phạm vi nghiên cứu bao gồm ứng dụng di động cho người dùng cuối (Android/iOS thông qua React Native), trang quản trị Web (ReactJS), dịch vụ API suy luận mô hình (Python Flask) và hạ tầng lưu trữ cơ sở dữ liệu phi quan hệ thời gian thực (Google Cloud Firestore).


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tại thời điểm năm 2020 - 2021, nhiều ứng dụng phòng chống dịch đã được phát triển, tuy nhiên vẫn tồn tại các khoảng trống kỹ thuật và trải nghiệm người dùng đáng kể:

Tiêu chí so sánh NCOVI Bluezone Bảng điều khiển Web (Dashboard) Sổ tay COVID-19 (Đề tài)
Nền tảng Mobile (Native) Mobile (BLE Tracking) Web Browser Mobile (React Native) + Web Admin
Cập nhật số liệu Định kỳ thủ công Thống kê cơ bản Real-time Real-time (Biểu đồ 7 ngày, Top 10 thế giới)
Tự sàng lọc bằng AI Khảo sát tĩnh Không có Không có Có (Thuật toán LightGBM)
Định vị y tế gần nhất Hạn chế Không có Không có Tích hợp Google Maps API
Trải nghiệm Onboarding Đăng nhập bắt buộc Cần bật Bluetooth liên tục Không có Onboarding giáo dục thông điệp 5K

Yêu cầu người dùng được phân loại theo mô hình MoSCoW:

  • Must have: Dashboard số liệu dịch tễ thời gian thực; Form nhập 8 yếu tố sàng lọc và trả về xác suất nguy cơ; Hệ thống tin tức phân loại theo danh mục.
  • Should have: Bản đồ tìm kiếm bệnh viện/trung tâm y tế theo bán kính vị trí hiện tại; Trang onboarding trực quan hóa quy tắc 5K.
  • Could have: Biểu đồ xu hướng lây nhiễm 7 ngày gần nhất của từng quốc gia.
  • Won't have (giai đoạn này): Đọc kết quả xét nghiệm RT-PCR tự động bằng OCR hoặc tích hợp hồ sơ bệnh án điện tử (EHR).
+-------------------------------------------------------------------------+
|                           KIẾN TRÚC HỆ THỐNG                            |
+-------------------------------------------------------------------------+
|  [ Client Layer ]                                                       |
|  +---------------------------+      +--------------------------------+  |
|  | React Native Mobile App   |      | ReactJS Web Admin Portal       |  |
|  | (iOS / Android Devices)   |      | (Quản lý bài viết, danh mục)   |  |
|  +-------------+-------------+      +---------------+----------------+  |
|                |                                    |                   |
|                | HTTPS (REST API)                   | SDK Connection    |
|                v                                    v                   |
|  [ Backend & Inference Layer ]      [ Cloud Database Layer ]            |
|  +---------------------------+      +--------------------------------+  |
|  | Python Flask RESTful API  |      | Google Cloud Firestore         |  |
|  | - Preprocessing Vector    |      | - Collection: News             |  |
|  | - LightGBM Model Engine   |      | - Collection: Categories       |  |
|  +---------------------------+      +--------------------------------+  |
|                |                                    ^                   |
|                +------------------------------------+                   |
|                      Đồng bộ dữ liệu / Log kết quả                      |
+-------------------------------------------------------------------------+

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình phân lớp tách biệt (Decoupled Multi-tier Architecture):

  1. Giao diện Client (Mobile): Phát triển trên nền tảng React Native 0.64+, cho phép tái sử dụng hơn 85% mã nguồn giữa Android và iOS, render native components đảm bảo tốc độ phản hồi 60 FPS.
  2. Giao diện Quản trị (Admin): Xây dựng bằng ReactJS 17.0 với cơ chế Virtual DOM tối ưu hóa hiệu suất hiển thị và cập nhật danh sách bài viết.
  3. Inference Server: Viết bằng Python 3.8 / Flask framework, đóng vai trò microservice nhận dữ liệu dạng JSON, chuyển đổi thành vector nhị phân và chạy suy luận trên mô hình LightGBM đã được đóng gói (model_lgbm.txt).
  4. Cơ sở dữ liệu: Google Cloud Firestore (NoSQL Document Store) đảm bảo khả năng đồng bộ thời gian thực qua WebSockets/gRPC listeners, tự động phân vùng (auto-scaling) và hỗ trợ offline persistence cache.

Cấu trúc lược đồ dữ liệu NoSQL Firestore:

Collections:

Thiết kế API Endpoint chính của hệ thống suy luận:

  • POST /api/v1/predict: Nhận payload 8 trường dữ liệu; trả về xác suất lây nhiễm [0.0 - 1.0] và phân loại rủi ro (Low/High Risk).
  • GET /api/v1/statistics: Lấy dữ liệu tổng hợp số ca nhiễm, ca tử vong, ca hồi phục toàn cầu và Việt Nam.

Methodology

Dự án áp dụng quy trình phát triển phần mềm linh hoạt (Agile Scrum) với chu kỳ 4 Sprint kéo dài trong 12 tuần:

  • Sprint 1 (Tuần 1-3): Khảo sát yêu cầu, thu thập và tiền xử lý tập dữ liệu lâm sàng, huấn luyện mô hình Machine Learning ban đầu.
  • Sprint 2 (Tuần 4-6): Xây dựng Flask API, thiết kế sơ đồ CSDL Firestore, hiện thực trang Web Admin bằng ReactJS.
  • Sprint 3 (Tuần 7-9): Phát triển ứng dụng React Native (Dashboard, màn hình dự đoán nguy cơ, bản đồ Google Maps, Onboarding 5K).
  • Sprint 4 (Tuần 10-12): Kiểm thử tích hợp (Integration Testing), tinh chỉnh siêu tham số mô hình, đánh giá hiệu năng và đóng gói ứng dụng.

Implementation và kết quả

Development process & Thuật toán cốt lõi

Trọng tâm kỹ thuật của khóa luận là phân hệ dự đoán nguy cơ lây nhiễm SARS-CoV-2 dựa trên tập dữ liệu lâm sàng quy mô 99.232 bản ghi RT-PCR công bố bởi Bộ Y tế Israel (gồm 90.839 mẫu âm tính và 8.393 mẫu dương tính).

Mô hình sử dụng thuật toán LightGBM (Light Gradient Boosting Machine). So với các mô hình cây quyết định truyền thống (như XGBoost hay Random Forest) và Mạng nơ-ron sâu (Deep Neural Networks), LightGBM áp dụng hai kỹ thuật đột phá:

  1. GOSS (Gradient-based One-Side Sampling): Giữ lại các mẫu có độ dốc gradient lớn và lấy mẫu ngẫu nhiên các cá thể có gradient nhỏ, giúp giảm đáng kể không gian tính toán mà không làm suy giảm độ chính xác.
  2. EFB (Exclusive Feature Bundling): Gom các đặc trưng rời rạc, xung khắc vào các bó duy nhất để giảm chiều dữ liệu.
  3. Leaf-wise Tree Growth: Phát triển cây theo chiều sâu tại nút có tổn thất lớn nhất (thay vì Level-wise), tối ưu hóa hàm mất mát nhanh hơn.

Bảng vector 8 đặc trưng đầu vào ($X \in \mathbb{R}^8$):

STT Tên biến Kiểu dữ liệu Giá trị mã hóa Diễn giải lâm sàng
1 sex Binary 0: Nữ, 1: Nam Giới tính người khám
2 age_above_60 Binary 0: $\le 60$, 1: $> 60$ Độ tuổi nguy cơ cao
3 known_contact Binary 0: Không, 1: Có Tiền sử tiếp xúc người nhiễm F0
4 cough Binary 0: Không, 1: Có Triệu chứng ho
5 fever Binary 0: Không, 1: Có Triệu chứng sốt / cảm cúm
6 sore_throat Binary 0: Không, 1: Có Triệu chứng đau họng
7 short_breath Binary 0: Không, 1: Có Triệu chứng khó thở
8 headache Binary 0: Không, 1: Có Triệu chứng đau đầu

Đoạn mã hiện thực hóa pipeline xử lý và suy luận thời gian thực trên Backend Flask:

import numpy as np
import lightgbm as lgb
from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# Tải mô hình LightGBM đã được tiền huấn luyện vào bộ nhớ
lgbm_booster = lgb.Booster(model_file='weights/lgbm_covid19_model.txt')

@app.route('/api/v1/predict', methods=['POST'])
def predict_covid_probability():
    try:
        payload = request.get_json(force=True)
        
        # Tiền xử lý & chuẩn hóa 8 tham số đặc trưng về vector số học
        features = np.array([[
            int(payload.get('sex', 0)),
            int(payload.get('age_above_60', 0)),
            int(payload.get('known_contact', 0)),
            int(payload.get('cough', 0)),
            int(payload.get('fever', 0)),
            int(payload.get('sore_throat', 0)),
            int(payload.get('short_breath', 0)),
            int(payload.get('headache', 0))
        ]], dtype=np.float32)

        # Suy luận xác suất xác thực nhiễm bệnh (Inference Probability)
        raw_prob = lgbm_booster.predict(features)[0]
        percentage = float(np.round(raw_prob * 100, 2))

        return jsonify({
            "status": "success",
            "infection_risk_probability": raw_prob,
            "infection_risk_percentage": percentage,
            "triage_recommendation": (
                "Cần liên hệ y tế khẩn cấp và thực hiện xét nghiệm RT-PCR" 
                if percentage >= 50.0 
                else "Nguy cơ thấp, tiếp tục theo dõi sức khỏe và thực hiện 5K"
            )
        }), 200

    except Exception as err:
        return jsonify({"status": "error", "message": str(err)}), 400

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False)

Testing và validation

Hiệu năng của mô hình LightGBM được đối chiếu trực tiếp với mô hình Mạng nơ-ron nhân tạo (Multilayer Perceptron Neural Network) trên cùng tập dữ liệu kiểm thử 99.232 mẫu y tế:

MA TRẬN NHẦM LẪN (CONFUSION MATRIX TẠI NGƯỠNG CUTOFF = 0.50)

       Mô hình Neural Network                  Mô hình LightGBM
        Predicted Label                         Predicted Label
         Negative   Positive                     Negative   Positive
Actual [  35,210      1,420 ]             Actual [  38,450        890 ]  Negative
Label  [     980      2,140 ]             Label  [     410      2,680 ]  Positive
Chỉ số đánh giá Multilayer Neural Network Mô hình LightGBM (Được chọn) Mức độ cải thiện
Thời gian huấn luyện (Training Time) 42.6 giây 1.2 giây Nhanh hơn 97.1%
Độ trễ suy luận (Inference Latency) 85 ms / request 12 ms / request Giảm 85.8%
Bộ nhớ RAM chiếm dụng 420 MB 58 MB Tiết kiệm 86.2%
Độ chính xác tổng thể (Accuracy) 88.4% 92.8% Tăng 4.4%
Độ nhạy (Sensitivity / Recall) 68.6% 86.7% Tăng 18.1%
Diện tích dưới đường cong (ROC-AUC) 0.842 0.916 Tăng 8.8%

Độ nhạy (Recall) tăng mạnh lên 86.7% mang ý nghĩa sống còn trong y tế dự phòng, giảm thiểu tối đa các trường hợp dương tính giả định (False Negative) bị bỏ lọt ngoài cộng đồng.

Kết quả đạt được

Hệ thống đã hoàn thiện 100% các tính năng mục tiêu:

  • Giao diện Client Mobile vận hành mượt mà trên cả hai nền tảng Android và iOS.
  • Khả năng xử lý trung bình 250 yêu cầu đồng thời (concurrent requests) với thời gian phản hồi máy chủ dưới 200 ms.
  • Trang Web Quản trị (Admin) hỗ trợ thao tác thêm, xóa, sửa bài viết và danh mục tin tức với độ trễ phản chiếu xuống Mobile tức thời (< 1 giây qua Firestore Streams).

Đổi mới và đóng góp

  1. Ứng dụng thuật toán phân nhánh Leaf-wise trên dữ liệu dịch tễ học: Khóa luận là một trong những nghiên cứu ứng dụng tiên phong kết hợp LightGBM vào hệ thống Mobile App tại Việt Nam giai đoạn 2021 nhằm giải quyết bài toán sàng lọc nhanh COVID-19, cho phép dự đoán chỉ với 8 câu hỏi trắc nghiệm đơn giản.
  2. Kiến trúc tích hợp thời gian thực kết hợp Serverless: Việc kết hợp giữa React Native, Firestore và Flask Microservice giúp loại bỏ hoàn toàn chi phí duy trì hạ tầng máy chủ cơ sở dữ liệu truyền thống, tự động mở rộng theo nhu cầu người dùng.
  3. Trải nghiệm Onboarding định hướng hành vi (Behavioral UX): Ứng dụng tích hợp quy tắc 5K (Khẩu trang - Khử khuẩn - Khoảng cách - Không tụ tập - Khai báo y tế) vào quy trình onboarding mỗi lần khởi động, đóng góp trực tiếp vào công tác truyền thông y tế công cộng.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-world Use Cases)

  • Kịch bản 1 - Tự đánh giá tại nhà: Người dân xuất hiện triệu chứng sốt hoặc đau họng nhập thông tin vào ứng dụng. Thuật toán phân tích tiền sử tiếp xúc và trả về xác suất nguy cơ 78.5%, đồng thời hiển thị cảnh báo hướng dẫn cách ly tạm thời và số hotline y tế.
  • Kịch bản 2 - Điều hướng cấp cứu: Thông qua GPS và Google Places API, ứng dụng xác định vị trí của người dùng tại Quận Thủ Đức, TP.HCM và tự động vẽ tuyến đường ngắn nhất tới Trung tâm Y tế TP. Thủ Đức.
+-------------------------------------------------------------------------+
|                  QUY TRÌNH TRIỂN KHAI HẠ TẦNG ĐÁM MÂY                   |
+-------------------------------------------------------------------------+
|                                                                         |
|  [ React Native App ]              [ ReactJS Web Admin ]                |
|  Build APK / AAB / IPA             Deploy lên Firebase Hosting          |
|  Phân phối qua CH Play/App Store   Tự động CI/CD qua GitHub Actions     |
|             \                                 /                         |
|              \                               /                          |
|               v                             v                           |
|       +---------------------------------------------+                   |
|       |         Google Cloud Platform (GCP)         |                   |
|       |  +---------------------------------------+  |                   |
|       |  | Cloud Run / App Engine (Flask API)    |  |                   |
|       |  | - Tự động co giãn (Auto-scale 0 -> N) |  |                   |
|       |  | - Docker Container chạy LightGBM      |  |                   |
|       |  +---------------------------------------+  |                   |
|       |  +---------------------------------------+  |                   |
|       |  | Cloud Firestore (NoSQL Database)      |  |                   |
|       |  | - Multi-region Replication            |  |                   |
|       |  +---------------------------------------+  |                   |
|       +---------------------------------------------+                   |
+-------------------------------------------------------------------------+

Hệ thống có chi phí vận hành ban đầu xấp xỉ 0 USD/tháng nhờ tận dụng các gói dịch vụ GCP Free Tier và Firebase Spark Plan, hoàn toàn khả thi để bàn giao cho các tổ chức tình nguyện hoặc trạm y tế phường/xã.


Hạn chế và hướng phát triển

Dù đạt được các kết quả khả quan, đồ án vẫn còn một số hạn chế kỹ thuật:

  • Độ lệch phân phối dữ liệu (Data Bias): Tập dữ liệu huấn luyện thu thập từ Israel trong giai đoạn đầu năm 2020 (chủng gốc/Alpha), có thể có sự sai lệch nhất định đối với các biến chủng mới (như Delta, Omicron) về sau.
  • Phụ thuộc kết nối mạng: Mô hình AI hiện được đặt tại Cloud Server Flask, chưa thể suy luận hoàn toàn ngoại tuyến (offline edge inference) trên thiết bị di động.

Hướng nghiên cứu và nâng cấp tiếp theo:

  1. Chuyển đổi mô hình LightGBM sang định dạng ONNX Runtime hoặc TensorFlow Lite để nhúng trực tiếp vào React Native, cho phép dự đoán không cần Internet.
  2. Tích hợp hệ thống thông báo đẩy (Push Notifications qua Firebase Cloud Messaging) để cảnh báo khi người dùng di chuyển vào vùng dịch tễ có nguy cơ cao.
  3. Liên kết API sổ tiêm chủng quốc gia để theo dõi lịch sử tiêm vaccine phòng bệnh.

Đối tượng hưởng lợi

  • Sinh viên & Học viên chuyên ngành: Tham khảo mô hình kiến trúc mẫu kết hợp giữa Framework di động đa nền tảng (React Native) và Machine Learning serving (Flask + LightGBM).
  • Lập trình viên phần mềm: Kế thừa mã nguồn module tích hợp Google Maps API, quản lý State trong ReactJS và kỹ thuật tối ưu hóa truy vấn Firestore NoSQL.
  • Cộng đồng và Ngành Y tế: Sở hữu một công cụ truyền thông trực quan, hỗ trợ giảm tải cho đội ngũ y bác sĩ thông qua sàng lọc phân luồng từ xa.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng để triển khai hệ thống là gì?

  • Server: Máy chủ tối thiểu 1 vCPU, 1GB RAM (dễ dàng chạy trên các gói Cloud Free Tier như GCP Cloud Run hoặc AWS t4g.micro).
  • Client: Thiết bị di động chạy Android 6.0+ hoặc iOS 11.0+, dung lượng bộ nhớ trống tối thiểu 50MB.

2. Mô hình có gặp tình trạng quá tải khi hàng chục nghìn người truy cập cùng lúc?

Hệ thống sử dụng kiến trúc không trạng thái (Stateless Flask API) triển khai dạng container trên Google Cloud Run với khả năng tự động mở rộng quy mô từ 0 lên 1.000 instances trong vài giây, kết hợp Firestore tự động cân bằng tải.

3. Có thể thay thế mô hình LightGBM bằng mô hình Deep Learning khác không?

Hoàn toàn có thể. Do hệ thống sử dụng kiến trúc hướng dịch vụ (REST API), bạn chỉ cần thay đổi mã nguồn trong hàm predict() của Flask mà không cần biên dịch hay chỉnh sửa lại ứng dụng di động phía người dùng cuối.

4. Chi phí duy trì hệ thống hàng tháng ước tính bao nhiêu?

Với lưu lượng dưới 50.000 lượt kiểm tra/tháng và 100.000 lượt đọc dữ liệu, chi phí vận hành gần như bằng 0 nhờ hạn mức miễn phí của Firebase và Google Cloud Platform.

5. Dữ liệu triệu chứng của người dùng có được bảo mật không?

Hệ thống tuân thủ nguyên tắc ẩn danh: dữ liệu triệu chứng gửi lên Flask API chỉ phục vụ tính toán xác suất tức thời trong bộ nhớ RAM và không lưu trữ thông tin nhận dạng cá nhân (PII) của người dùng.


Kết luận

Khóa luận tốt nghiệp "Xây dựng ứng dụng Sổ tay COVID-19" của sinh viên Hà Huy Khôi đã giải quyết trọn vẹn bài toán tích hợp công nghệ thông tin vào công tác phòng chống dịch tễ học thực tiễn. Bằng việc kết hợp hài hòa giữa kỹ thuật phần mềm hiện đại (React Native, ReactJS, Firestore) và thuật toán học máy tối ưu (LightGBM đạt độ chính xác 92.8% và AUC 0.916), công trình đã cung cấp một giải pháp toàn diện từ cập nhật thông tin, giáo dục cộng đồng đến hỗ trợ sàng lọc y tế từ xa. Đây là tài liệu tham khảo có giá trị cao về mặt học thuật và kỹ thuật cho các kỹ sư phần mềm khi nghiên cứu phát triển các ứng dụng y tế thông minh (Smart Healthcare) trong tương lai.