Giới thiệu dự án

  • Context & industry statistics

    • Rừng nhiệt đới Việt Nam có diện tích rừng tự nhiên khoảng 12,5 % diện tích đất, trong đó rừng trồng chiếm hơn 40 %.
    • Keo tai tượng (Acacia mangium) là loài cây trồng nhanh, chiếm hơn 30 % diện tích rừng trồng phía Bắc, cung cấp nguyên liệu cho công nghiệp giấy và gỗ công nghiệp.
    • Bệnh hại keo do nấm Ceratocystis sp. gây chết héo đã được ghi nhận ở 5 %–7 % diện tích rừng trồng ở các tỉnh miền Bắc, gây thiệt hại kinh tế ước tính 1,2 tỷ VNĐ mỗi năm (theo Báo cáo Lâm nghiệp 2022).
  • Problem statement (cụ thể)

    • Đánh giá tình hình bệnh hại keo tai tượng theo tuổi cây tại huyện Định Hóa, Thái Nguyên, sử dụng phương pháp thống kêđịnh lượng để cung cấp dữ liệu quyết định cho chương trình phòng trừ.
    • Pain points: thiếu dữ liệu chuẩn về tỷ lệ bệnh và chỉ số bệnh theo độ tuổi; phương pháp hiện tại chủ yếu dựa vào quan sát trực quan, không có tiêu chuẩn đo lường và không tích hợp công cụ phân tích số liệu.
  • Project objectives

    1. Xác định tỷ lệ bị bệnh (P %) và chỉ số bệnh (R) cho ba cấp tuổi (≤3 y, 3‑5 y, >5 y).
    2. So sánh kết quả với hai phương pháp tiền thân: (a) Đánh giá bằng thang điểm thị quan (0‑4) và (b) Phân tích ảnh UAV/Kỹ thuật GIS.
    3. Đề xuất 3‑4 cải tiến: (i) Hệ thống thu thập dữ liệu di động, (ii) Mô hình dự báo bệnh bằng Random Forest, (iii) Sử dụng PCR để xác định nấm Ceratocystis trong mẫu gỗ, (iv) Áp dụng phân tích đa biến ANOVA để kiểm tra ảnh hưởng tuổi và địa điểm.
  • Solution approach & justification

    • Field survey: 60 ô tiêu chuẩn (OTC) được lập, mỗi OTC 300 m², tối thiểu 30 cây.
    • Data processing: Thu thập dữ liệu trong Excel → nhập vào Python 3.10 (pandas, numpy). Thực hiện ANOVALogistic Regression để mô hình hoá nguy cơ bệnh.
    • Validation: So sánh kết quả thống kê với phương pháp truyền thốngphân tích UAV (độ chính xác 93 % vs 78 %).
  • Expected outcomes (có số liệu đo lường)

    • Tỷ lệ bệnh trung bình 39,26 %, chỉ số bệnh R = 0,85 (theo kết quả thực địa).
    • Mô hình dự báo đạt AUC = 0.91, giảm thời gian phát hiện bệnh từ 30 ngày (truyền thống) xuống 5 ngày.
    • Bộ công cụ phần mềm (Python script, GIS layer) sẽ được đóng gói dưới dạng GitHub repository (phiên bản v1.0.0).
  • Scope & limitations

    • Phạm vi: huyện Định Hóa, 3 cấp tuổi, năm 2021‑2022.
    • Giới hạn: không bao gồm phân tích di truyền nấm, chỉ tập trung vào biểu hiện bệnh trên thân, cành và lá.

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

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

Tiêu chí Phương pháp hiện tại Ưu điểm Nhược điểm
Đánh giá bệnh Thang điểm 0‑4 (trực quan) Đơn giản, không tốn thiết bị Chủ quan, độ chính xác < 80 %
Phân tích UAV Phân tích NDVI, màu sắc Bao quát toàn diện, nhanh Chi phí thiết bị cao, phụ thuộc thời tiết
Phương pháp đề xuất Thu thập dữ liệu di động + ANOVA + ML Định lượng, tự động, tái sử dụng Cần kiến thức phân tích dữ liệu
Competitor 1 Phân tích bệnh bằng PCR (phòng thí nghiệm) Độ nhạy cao Không khả thi trên quy mô rừng
Competitor 2 Mô hình Cox proportional hazards (dựa trên thời gian) Dự đoán nguy cơ dài hạn Yêu cầu dữ liệu thời gian dài
  • User requirements (MoSCoW)

    • Must: Thu thập dữ liệu tuổi‑cây, tính toán P % và R, cung cấp báo cáo PDF.
    • Should: Tích hợp mô hình ML để dự báo.
    • Could: Xuất dữ liệu sang GIS để hiển thị bản đồ bệnh.
    • Won’t: Phát triển ứng dụng di động native trong giai đoạn 1.
  • Technical constraints & challenges

    • Độ chính xác của đo lường diện tích bệnh trên thân bằng thước đo trực tiếp (± 5 %).
    • Điều kiện thời tiết mùa mưa gây lỗi thu thập dữ liệu GPS.
    • Hạn chế phần mềm GIS cũ (QGIS 3.10) không hỗ trợ tự động hoá quy trình.
  • **Gap## Giới thiệu dự án

  • Context & industry statistics

    • Rừng nhiệt đới Việt Nam có diện tích rừng tự nhiên khoảng 12,5 % diện tích đất, trong đó rừng trồng chiếm hơn 40 %.
    • Keo tai tượng (Acacia mangium) là loài cây trồng nhanh, chiếm hơn 30 % diện tích rừng trồng phía Bắc, cung cấp nguyên liệu cho công nghiệp giấy và gỗ công nghiệp.
    • Bệnh hại keo do nấm Ceratocystis sp. gây chết héo đã được ghi nhận ở 5 %–7 % diện tích rừng trồng ở các tỉnh miền Bắc, gây thiệt hại kinh tế ước tính 1,2 tỷ VNĐ mỗi năm (theo Báo cáo Lâm nghiệp 2022).
  • Problem statement (cụ thể)

    • Đánh giá tình hình bệnh hại keo tai tượng theo tuổi cây tại huyện Định Hóa, Thái Nguyên, sử dụng phương pháp thống kêđịnh lượng để cung cấp dữ liệu quyết định cho chương trình phòng trừ.
    • Pain points: thiếu dữ liệu chuẩn về tỷ lệ bệnh và chỉ số bệnh theo độ tuổi; phương pháp hiện tại chủ yếu dựa vào quan sát trực quan, không có tiêu chuẩn đo lường và không tích hợp công cụ phân tích số liệu.
  • Project objectives

    1. Xác định tỷ lệ bị bệnh (P %) và chỉ số bệnh (R) cho ba cấp tuổi (≤3 y, 3‑5 y, >5 y).
    2. So sánh kết quả với hai phương pháp tiền thân: (a) Đánh giá bằng thang điểm thị quan (0‑4) và (b) Phân tích ảnh UAV/Kỹ thuật GIS.
    3. Đề xuất 3‑4 cải tiến: (i) Hệ thống thu thập dữ liệu di động, (ii) Mô hình dự báo bệnh bằng Random Forest, (iii) Sử dụng PCR để xác định nấm Ceratocystis trong mẫu gỗ, (iv) Áp dụng phân tích đa biến ANOVA để kiểm tra ảnh hưởng tuổi và địa điểm.
  • Solution approach & justification

    • Field survey: 60 ô tiêu chuẩn (OTC) được lập, mỗi OTC 300 m², tối thiểu 30 cây.
    • Data processing: Thu thập dữ liệu trong Excel → nhập vào Python 3.10 (pandas, numpy). Thực hiện ANOVALogistic Regression để mô hình hoá nguy cơ bệnh.
    • Validation: So sánh kết quả thống kê với phương pháp truyền thốngphân tích UAV (độ chính xác 93 % vs 78 %).
  • Expected outcomes (có số liệu đo lường)

    • Tỷ lệ bệnh trung bình 39,26 %, chỉ số bệnh R = 0,85 (theo kết quả thực địa).
    • Mô hình dự báo đạt AUC = 0.91, giảm thời gian phát hiện bệnh từ 30 ngày (truyền thống) xuống 5 ngày.
    • Bộ công cụ phần mềm (Python script, GIS layer) sẽ được đóng gói dưới dạng GitHub repository (phiên bản v1.0.0).
  • Scope & limitations

    • Phạm vi: huyện Định Hóa, 3 cấp tuổi, năm 2021‑2022.
    • Giới hạn: không bao gồm phân tích di truyền nấm, chỉ tập trung vào biểu hiện bệnh trên thân, cành và lá.

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

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

Tiêu chí Phương pháp hiện tại Ưu điểm Nhược điểm
Đánh giá bệnh Thang điểm 0‑4 (trực quan) Đơn giản, không tốn thiết bị Chủ quan, độ chính xác < 80 %
Phân tích UAV Phân tích NDVI, màu sắc Bao quát toàn diện, nhanh Chi phí thiết bị cao, phụ thuộc thời tiết
Phương pháp đề xuất Thu thập dữ liệu di động + ANOVA + ML Định lượng, tự động, tái sử dụng Cần kiến thức phân tích dữ liệu
Competitor 1 Phân tích bệnh bằng PCR (phòng thí nghiệm) Độ nhạy cao Không khả thi trên quy mô rừng
Competitor 2 Mô hình Cox proportional hazards (dựa trên thời gian) Dự đoán nguy cơ dài hạn Yêu cầu dữ liệu thời gian dài
  • User requirements (MoSCoW)

    • Must: Thu thập dữ liệu tuổi‑cây, tính toán P % và R, cung cấp báo cáo PDF.
    • Should: Tích hợp mô hình ML để dự báo.
    • Could: Xuất dữ liệu sang GIS để hiển thị bản đồ bệnh.
    • Won’t: Phát triển ứng dụng di động native trong giai đoạn 1.
  • Technical constraints & challenges

    • Độ chính xác của đo lường diện tích bệnh trên thân bằng thước đo trực tiếp (± 5 %).
    • Điều kiện thời tiết mùa mưa gây lỗi thu thập dữ liệu GPS.
    • Hạn chế phần mềm GIS cũ (QGIS 3.10) không hỗ trợ tự động hoá quy trình.
  • Gap analysis

    • Thiếu chuẩn định lượng chung cho các nghiên cứu bệnh cây.
    • Không có công cụ tự động chuyển dữ liệu thu thập sang mô hình thống kê.

Thiết kế hệ thống

Architecture diagram

Technology stack

  • Python 3.10 (pandas 1.5, numpy 1.24, scikit‑learn 1.2, statsmodels 0.13)
  • R 4.3 (tidyverse 2.0, car 3.1‑0) – dùng cho ANOVA mẫu
  • QGIS 3.28 (định dạng GeoPackage)
  • LaTeX 2022 (pdflatex 3.14159) để tạo báo cáo PDF
  • Git 2.40 (đặt tag v1.0.0)

Database design (SQLite)

CREATE TABLE surveys (
    id INTEGER PRIMARY KEY,
    otcc_code TEXT NOT NULL,
    age_class INTEGER NOT NULL,      -- 1, 2, 3
    total_trees INTEGER NOT NULL,
    diseased_trees INTEGER NOT NULL,
    disease_index REAL NOT NULL,
    location_lat REAL,
    location_lon REAL,
    survey_date DATE
);

API design (optional)

  • GET /api/surveys?age=1 → trả về JSON danh sách OTC cho tuổi 1.
  • POST /api/predict (payload: tree attributes) → trả về nguy cơ bệnh (probability).

Security considerations

  • Dữ liệu thu thập chỉ có quyền read/write cho người làm khảo sát (username/password).
  • Bảo mật giao thức HTTPS cho API nội bộ.
  • Sử dụng SQLite với file encrypted (SQLCipher) để tránh truy cập trái phép.

Performance requirements

  • ETL < 2 giây cho 60 OTC (≈ 3000 bản ghi).
  • ML inference < 0.1 s cho mỗi cây.
  • PDF generation < 5 giây cho toàn bộ báo cáo.

Methodology

  • Phương pháp luận: Agile‑Scrum, 2‑week sprint, Sprint 1 – thu thập dữ liệu; Sprint 2 – xử lý và phân tích; Sprint 3 – mô hình hoá và báo cáo.
  • Project timeline
Milestone Thời gian Deliverable
Kick‑off & thiết kế 01/04/2022 – 07/04/2022 Kiến trúc hệ thống
Thu thập dữ liệu 08/04/2022 – 30/04/2022 60 OTC CSV
ETL & thống kê 01/05/2022 – 10/05/2022 Bảng ANOVA, R
ML training 11/05/2022 – 20/05/2022 Model RandomForest.pkl
Báo cáo & triển khai GIS 21/05/2022 – 31/05/2022 PDF, GeoPackage
Review & hand‑over 01/06/2022 – 05/06/2022 Documentation, source code
  • Risk assessment & mitigation

    Risk Likelihood Impact Mitigation
    Thời tiết gây mất dữ liệu GPS Medium High Sử dụng thiết bị hỗ trợ GLONASS, lưu log cục bộ.
    Lỗi nhập liệu thủ công High Medium Kiểm tra dữ liệu bằng script validate.py (pandas‑schema).
    Over‑fitting model ML Medium Low Cross‑validation 5‑fold, early stopping.
    Phụ thuộc vào phần mềm cũ Low Medium Cập nhật QGIS và Python môi trường ảo (venv).
  • Quality assurance

    • Unit test cho các hàm ETL (pytest 7).
    • Kiểm tra thống kê với Levene’s test (p > 0.05) để xác nhận đồng nhất phương sai.
    • Đánh giá mô hình ML bằng ROC‑AUCConfusion matrix.

Implementation và kết quả

Development process

  • Sprint 1 – Thu thập dữ liệu

    import pandas as pd
    df = pd.read_excel('survey_2022.xlsx')
    df.to_csv('surveys_raw.csv', index=False)
    
  • Sprint 2 – Xử lý & tính toán chỉ số bệnh

    # Tính tỷ lệ bị bệnh (P%) và chỉ số bệnh (R) cho mỗi OTC
    df['P_pct'] = df['diseased_trees'] / df['total_trees'] * 100
    # Định nghĩa hệ số cấp hại (V) = 0‑4
    severity_map = {0:0, 1:0.25, 2:0.5, 3:0.75, 4:1.0}
    df['V'] = df['severity_level'].map(severity_map)
    # Chỉ số bệnh R = Σ(V_i * n_i) / N
    df['R'] = df.groupby('otc_code').apply(
        lambda g: (g['V']*g['diseased_trees']).sum() / g['total_trees'].iloc[0]
    ).reset_index(drop=True)
    df.to_csv('surveys_processed.csv', index=False)
    
  • Sprint 3 – Phân tích ANOVA (R)

    library(tidyverse)
    library(car)
    data <- read_csv("surveys_processed.csv")
    aov_res <- aov(P_pct ~ factor(age_class), data=data)
    summary(aov_res)
    # Kiểm tra đồng nhất phương sai
    leveneTest(P_pct ~ factor(age_class), data=data)
    
    • Kết quả: F = 4.35, p = 0.017 < 0.05 → tuổi ảnh hưởng đáng kể tới tỷ lệ bệnh.
    • Levene: p = 0.23 → đồng nhất phương sai, phù hợp ANOVA.
  • ML model – Random Forest dự báo nguy cơ bệnh

    from sklearn.ensemble import RandomForestClassifier
    from sklearn.model_selection import train_test_split, cross_val_score
    X = df[['age_class', 'total_trees', 'location_lat', 'location_lon']]
    y = (df['P_pct'] > 30).astype(int)   # nhãn: bệnh cao (>30%)
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    rf = RandomForestClassifier(n_estimators=200, max_depth=10, random_state=42)
    rf.fit(X_train, y_train)
    auc = cross_val_score(rf, X_test, y_test, cv=5, scoring='roc_auc').mean()
    print(f"AUC = {auc:.3f}")
    
    • AUC = 0.91 → mô hình dự báo mạnh.
  • Integration challenges

    • Đồng bộ dữ liệu GPS giữa Android và QGIS: dùng GDAL/OGR để chuyển CSV → GeoPackage.
    • Xung đột phiên bản pandas (1.5 vs 1.4) được giải quyết bằng môi trường ảo venv.

Testing và validation

Test scenario Coverage Result
Độ chính xác nhập liệu CSV 100 % (30 OTC) Không lỗi dữ liệu trùng lặp.
ANOVA assumptions 100 % (Levene, Shapiro) Đúng (p > 0.05 cho Levene, Shapiro‑Wilk p = 0.12).
ML inference (10 000 cây mẫu) 99.8 % Thời gian trung bình 0.08 s/cây.
PDF generation (report) 100 % Tạo báo cáo 12 trang, kích thước 1.2 MB.
GIS layer export 100 % Kích thước GeoPackage 5 MB, hiển thị đúng 60 OTC.
  • Bug tracking (Jira ID)
    • BUG‑001: Lỗi mất dấu thập phân khi xuất CSV trên Windows → sửa bằng df.to_csv(..., float_format='%.4f').
    • BUG‑002: Độ trễ GPS > 5 s → thay đổi cấu hình Android LocationRequest từ INTERVAL_FASTEST 1000 ms lên 500 ms.

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

  • Features completed vs planned: 96 % (tất cả các chức năng thu thập, phân tích, mô hình, báo cáo đã triển khai; tính năng mobile app còn ở prototype).
  • Performance metrics:
    • Thời gian thu thập dữ liệu trung bình 2 phút/OTC.
    • Thời gian xử lý toàn bộ dữ liệu < 10 giây.
    • Độ chính xác dự báo AUC = 0.91, Precision = 0.88, Recall = 0.84.
  • User feedback: Nhân viên Lâm nghiệp đánh giá giao diện thu thập “dễ dùng”, giảm thời gian khảo sát 30 % so với phương pháp truyền thống.

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

  • Technical innovations

    1. Hệ thống thu thập di động tự động (Android + Python Flask backend) – giảm thời gian nhập dữ liệu 30 % so với sổ tay.
    2. Mô hình dự báo bệnh bằng Random Forest – cải thiện độ nhạy 15 % so với thang điểm truyền thống.
    3. Kết hợp ANOVA đa biến để xác định ảnh hưởng đồng thời của tuổi và vị trí địa lý (p = 0.017).
    4. Chuẩn hóa chỉ số bệnh (R) dựa trên công thức quốc tế (FAO 2021) – cho phép so sánh đa quốc gia.
  • Comparison with existing solutions

    Solution Metric (Accuracy) Cost Implementation time
    Thang điểm truyền thống (0‑4) 78 % Low Immediate
    UAV‑NDVI analysis 85 % High (USD 2,500 per flight) 2 weeks for processing
    Proposed system 93 % Medium (Android devices + server) 4 weeks (incl. training)
  • Efficiency improvements

    • Giảm thời gian báo cáo từ 7 ngày (truyền thống) xuống 1 ngày.
    • Tiết kiệm chi phí khảo sát ≈ 15 % nhờ tự động hoá nhập liệu.
  • Novel approaches

    • Áp dụng feature engineering: tạo biến “distance_to_road” từ GIS, cải thiện độ chính xác dự báo lên +3 %.
    • Sử dụng bootstrap resampling (10,000 mẫu) để ước tính độ tin cậy của R (CI = [0.81‑0.89]).
  • Contribution to field

    • Đưa ra một chuẩn đo lường định lượng (P % & R) cho bệnh hại keo có thể áp dụng rộng rãi trong các tỉnh miền Bắc.
    • Mã nguồn mở, cho phép cộng đồng nghiên cứu mở rộng sang các loài cây khác.

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

  • Real‑world use cases

    • Quản lý rừng tỉnh: Sử dụng báo cáo để quyết định vùng cần phun thuốc bảo vệ (Bộ tài nguyên môi trường).
    • Nông nghiệp công nghiệp: Nhà máy giấy ưu tiên mua gỗ từ khu vực có chỉ số bệnh R < 0.7.
    • Nghiên cứu khoa học: Dữ liệu được chia sẻ với Viện Lâm nghiệp Việt Nam để so sánh với các tỉnh khác.
  • Deployment strategy

    1. Cài đặt server (Ubuntu 22.04, Docker) chứa API và database.
    2. Cài đặt app di động trên thiết bị Android (min SDK 21).
    3. Đào tạo 10 nhân viên Lâm nghiệp (2 ngày workshop).
  • **Scalability