Giới thiệu dự án
Thị trường hàng không nội địa Việt Nam chứng kiến sự tăng trưởng vượt bậc trong giai đoạn phục hồi kinh tế hậu đại dịch. Theo dự báo từ Quỹ Tiền tệ Quốc tế (IMF), tốc độ tăng trưởng GDP của Việt Nam duy trì ở mức ấn tượng từ 5,8% (năm 2023) đến 6,9% (năm 2024). Sự gia tăng nhu cầu di chuyển bằng đường hàng không kéo theo áp lực vận hành khổng lồ lên hạ tầng sân bay và các hãng bay. Số liệu thống kê từ Cục Hàng không Việt Nam (CAAV) ghi nhận toàn ngành có tới 32.260 chuyến bay bị trễ (chiếm 10,3% tổng số chuyến khai thác), gây thiệt hại hàng triệu USD cho ngành du lịch - lữ hành và làm đảo lộn lịch trình của hàng triệu hành khách.
+-----------------------------------------------------------------------------+
| BỐI CẢNH & VẤN ĐỀ NGHIÊN CỨU |
+-----------------------------------------------------------------------------+
| Tăng trưởng GDP: 5.8% - 6.9% --> Nhu cầu hàng không nội địa tăng vọt |
| Tỷ lệ trễ chuyến: ~10.3% --> 32.260+ chuyến bay gián đoạn mỗi năm |
| Nguyên nhân chính: --> Thời tiết cực đoan, nghẽn không lưu, hãng |
| Thách thức mô hình truyền thống: Bỏ qua biến thời tiết vi khí hậu đa tầng |
+-----------------------------------------------------------------------------+
Vấn đề nghiên cứu (Problem Statement)
Các hệ thống dự báo tình trạng chuyến bay truyền thống thường chỉ dựa vào các thuộc tính định danh tĩnh (mã chuyến bay, hãng hàng không, lịch bay công bố) mà bỏ qua các yếu tố khí tượng vi mô tại điểm đi và điểm đến theo chuỗi thời gian thực. Hơn nữa, việc phân loại đa lớp (Đúng giờ, Trễ giờ, Hủy chuyến) đối mặt với thách thức mất cân bằng dữ liệu nghiêm trọng (Imbalanced Data), khi lớp "Hủy chuyến" chỉ chiếm chưa đầy 1% tổng số lượng mẫu thực tế.
Mục tiêu dự án
- Thu thập và hợp nhất dữ liệu đa nguồn quy mô lớn: Xây dựng kho dữ liệu tích hợp từ 522.870 bản ghi chuyến bay (từ 22 sân bay nội địa Việt Nam giai đoạn 2019–2023) và 425.193 bản ghi khí tượng chi tiết theo từng giờ.
- Nghiên cứu và tối ưu hóa Pipeline tiền xử lý: Chuẩn hóa dữ liệu văn bản phi cấu trúc, giảm chiều không gian đặc trưng khí tượng (từ 134 xuống 33 chiều), và giải quyết triệt để vấn đề mất cân bằng mẫu bằng kỹ thuật lai giữa Random Under-Sampling và SMOTE (Synthetic Minority Over-sampling Technique).
- Thực nghiệm và đánh giá mô hình học máy đa lớp: Huấn luyện, tinh chỉnh và so sánh 4 thuật toán phân lớp cốt lõi: Random Forest, AdaBoost, GBDT (Gradient Boosting Decision Trees), và Logistic Regression dựa trên các độ đo $Recall$, $F_1\text{-score}$ và Confusion Matrix.
- Đóng gói và triển khai hệ thống phân tán end-to-end: Xây dựng dịch vụ vi mô (Microservices architecture) hoàn chỉnh gồm giao diện tra cứu trực quan (ReactJS), dịch vụ nghiệp vụ (NestJS), dịch vụ suy luận máy học (Django REST Framework), cơ sở dữ liệu PostgreSQL, đóng gói container Docker Compose và tự động hóa triển khai trên hạ tầng máy chủ ảo VPS.
Phạm vi và giới hạn (Scope & Limitations)
- Không gian nghiên cứu: 22 cảng hàng không dân dụng trên lãnh thổ Việt Nam (trọng tâm tuyến trục vàng Hà Nội - TP. Hồ Chí Minh).
- Thời gian dữ liệu: Dữ liệu lịch sử từ năm 2019 đến năm 2023.
- Bài toán phân loại: Phân loại 3 nhãn gồm Đúng giờ (On-time), Trễ giờ (Delayed - trễ từ 15 phút trở lên), và Hủy chuyến (Cancelled - gộp các chuyến hủy và chuyến bị dời).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Các nghiên cứu tiền nhiệm trên thế giới đã bước đầu khai thác dữ liệu khí tượng trong điều độ hàng không nhưng vẫn tồn tại nhiều khoảng trống khi áp dụng vào điều kiện hạ tầng tại Việt Nam:
| Nghiên cứu |
Phương pháp & Thuật toán |
Nguồn dữ liệu & Quy mô |
Hạn chế chính |
| Michael Schultz et al. (2018) |
Thuật toán phân tích chỉ số thời tiết sân bay (ATM Airport Performance) |
Dữ liệu thời tiết METAR/TAF tại các sân bay Châu Âu |
Chưa cá nhân hóa theo từng chuyến bay và hãng hàng không nội địa. |
| Sun Choi et al. (2016) |
Decision Trees, Random Forest, AdaBoost, k-NN + SMOTE |
Chuyến bay nội địa Mỹ (2005–2015), bài toán nhị phân |
Chỉ giải bài toán nhị phân (Trễ/Không trễ); độ chính xác lớp thiểu số còn thấp. |
| Guan Gui et al. (2019) |
Random Forest kết hợp Long Short-Term Memory (LSTM) |
Dữ liệu ADS-B quy mô lớn phát quảng bá qua vệ tinh |
Chi phí thu thập ADS-B quá lớn; khó áp dụng cho môi trường dữ liệu mở tại Việt Nam. |
| Mingdao Lu et al. (2021) |
GBDT, XGBoost kết hợp chọn lọc đặc trưng khí tượng |
32.000 dòng dữ liệu hàng không Trung Quốc (2016–2017) |
Quy mô mẫu nhỏ; chưa tích hợp vào một ứng dụng web phục vụ người dùng cuối. |
| Giải pháp đề tài này |
Random Forest, GBDT, AdaBoost + Hybrid Resampling |
522.870 chuyến bay + 425.193 bản ghi thời tiết (2019–2023) |
Phân lớp 3 nhãn hoàn chỉnh; tối ưu hóa trích xuất đặc trưng; triển khai Microservices. |
Ma trận ưu tiên yêu cầu người dùng (MoSCoW)
- Must-have: Tra cứu lịch bay một chiều/khứ hồi; dự báo trạng thái chuyến bay (Đúng giờ/Trễ/Hủy) với xác suất đi kèm; tự động thu thập dữ liệu thời tiết và chuyến bay định kỳ.
- Should-have: Trực quan hóa bản đồ thời tiết tại sân bay đi/đến; lọc kết quả theo hãng hàng không (VietJet Air, Vietnam Airlines, Bamboo Airways, Vietravel Airlines).
- Could-have: Cảnh báo sớm qua Email/Webhook khi lịch trình có biến động thời tiết tiêu cực.
- Won't-have (giai đoạn này): Dự báo đường bay quốc tế ngoài không phận Việt Nam; tích hợp hệ thống đặt vé trực tuyến.
Thiết kế hệ thống
Hệ thống được thiết kế theo kiến trúc Microservices hướng dịch vụ, chia tách độc lập giữa tầng hiển thị, tầng nghiệp vụ và tầng suy luận trí tuệ nhân tạo:
+-----------------------------+
| Client Web Browser |
| (ReactJS + Mantine UI) |
+--------------+--------------+
| HTTPS (SSL/TLS)
v
+-----------------------------+
| Nginx Reverse Proxy |
| (Port 80/443) |
+------+---------------+------+
| |
/api/* Requests | | Static Files
v v
+----------------------------------+ +-------------------+
| Back-end Service (NestJS) | | Single Page App |
| TypeScript / TypeORM | | (Production Build)|
+----------------+-----------------+ +-------------------+
|
+-------------+-------------+
| HTTP Internal | SQL Connections (Port 5432)
v v
+-----------------------+ +----------------------------+
| ML Service (Python) | | PostgreSQL Database |
| Django REST Framework | | - flights |
| Scikit-learn / SMOTE | | - weathers |
| Port: 8000 | | - flight_schedules |
+-----------------------+ +----------------------------+
Technology Stack và phiên bản cụ thể
- Front-end: ReactJS (v18.2.0), TypeScript (v4.9.5), Mantine UI Component Framework (v6.0.0), Axios.
- Back-end Service: NestJS (v9.3.0), Node.js (v18.16.0 LTS), TypeORM (v0.3.15), Cheerio (v1.0.0-rc.12).
- Machine Learning Service: Python (v3.10.11), Django REST Framework (v3.14.0), Scikit-learn (v1.2.2), Imbalanced-learn (v0.10.1), Pandas (v2.0.1), NumPy (v1.24.3).
- Cơ sở dữ liệu: PostgreSQL (v14.8).
- DevOps & Hạ tầng: Docker Engine (v24.0.2), Docker Compose (v2.18.1), Nginx (v1.24.0), Let's Encrypt Certbot, Ubuntu VPS (8 vCPU, 32GB RAM).
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống sử dụng cơ sở dữ liệu quan hệ PostgreSQL với 5 thực thể cốt lõi:
-- Bảng lưu trữ danh mục 22 sân bay nội địa
CREATE TABLE airports (
code VARCHAR(10) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
city VARCHAR(100) NOT NULL,
latitude DOUBLE PRECISION,
longitude DOUBLE PRECISION
);
-- Bảng lịch trình chuyến bay kế hoạch
CREATE TABLE flight_schedules (
id SERIAL PRIMARY KEY,
flight_number VARCHAR(20) NOT NULL,
departure_code VARCHAR(10) REFERENCES airports(code),
arrival_code VARCHAR(10) REFERENCES airports(code),
scheduled_departure TIME NOT NULL,
scheduled_arrival TIME NOT NULL
);
-- Bảng thông tin vận hành chuyến bay thực tế
CREATE TABLE flights (
flight_id VARCHAR(50) PRIMARY KEY,
flight_number VARCHAR(20) NOT NULL,
airline VARCHAR(50),
departure VARCHAR(10) REFERENCES airports(code),
arrival VARCHAR(10) REFERENCES airports(code),
flight_date DATE NOT NULL,
scheduled_departure TIMESTAMP NOT NULL,
scheduled_arrival TIMESTAMP NOT NULL,
real_departure TIMESTAMP,
real_arrival TIMESTAMP,
duration INTEGER,
status_text VARCHAR(50),
label VARCHAR(20) -- On-time, Delayed, Cancelled
);
-- Bảng vị trí trạm khí tượng
CREATE TABLE weather_locations (
location_id SERIAL PRIMARY KEY,
airport_code VARCHAR(10) REFERENCES airports(code),
station_name VARCHAR(100) NOT NULL
);
-- Bảng dữ liệu quan trắc thời tiết theo giờ
CREATE TABLE weathers (
id SERIAL PRIMARY KEY,
recorded_date DATE NOT NULL,
recorded_time TIME NOT NULL,
location_id INTEGER REFERENCES weather_locations(location_id),
temp DOUBLE PRECISION NOT NULL,
wind_speed DOUBLE PRECISION NOT NULL,
wind_direction VARCHAR(100),
humidity DOUBLE PRECISION NOT NULL,
barometer DOUBLE PRECISION,
weather_condition VARCHAR(255)
);
Thiết kế API Endpoints
POST /api/v1/predict/flight-status: Tiếp nhận mã chuyến bay, ngày bay, điểm đi, điểm đến; gọi sang ML Service để trả về phân bố xác suất trễ/hủy.
GET /api/v1/schedules/search?from=SGN&to=HAN&date=2023-11-20: Tra cứu danh mục các chuyến bay khả dụng.
POST /api/v1/internal/ml-predict: Endpoint nội bộ giữa NestJS và Django ML Service tiếp nhận vector đặc trưng chuẩn hóa (JSON payload) và trả về kết quả phân loại.
Methodology
Dự án áp dụng quy trình phát triển phần mềm linh hoạt (Agile/Scrum) kết hợp cùng quy trình chuẩn CRISP-DM (Cross-Industry Standard Process for Data Mining):
- Sprint 1 (Khảo sát & Thu thập): Xây dựng Worker thu thập dữ liệu tự động từ Flightradar24 và Timeanddate.
- Sprint 2 (Data Preprocessing & Feature Engineering): Xử lý giá trị khuyết, mã hóa One-Hot, cân bằng mẫu SMOTE.
- Sprint 3 (Mô hình hóa Machine Learning): Huấn luyện 4 thuật toán trên AWS SageMaker, đánh giá chéo 10-Fold Cross Validation.
- Sprint 4 (Phát triển Microservices & Triển khai): Đóng gói Docker, cấu hình Nginx/SSL, triển khai Production trên VPS.
Implementation và kết quả
Development process
1. Pipeline tiền xử lý và trích chọn đặc trưng chuyên sâu
- Chuẩn hóa trường thời gian: Chuyển đổi toàn bộ định dạng ISO 8601 sang chuẩn cục bộ, loại bỏ thành phần milli-giây và UTC offset không cần thiết để tối ưu hóa bộ nhớ RAM trong quá trình JOIN dữ liệu chuyến bay và thời tiết.
- Quy đổi đơn vị đo lường:
- Tốc độ gió: Chuyển đổi đơn vị từ dặm/giờ (mph) sang km/h:
$$V_{\text{km/h}} = V_{\text{mph}} \times 1.609344$$
Gán $0\text{ km/h}$ cho các bản ghi có giá trị
"No wind".
- Nhiệt độ: Chuyển đổi từ độ Fahrenheit (°F) sang độ Celsius (°C):
$$T_{^\circ\text{C}} = \frac{T_{^\circ\text{F}} - 32}{1.8}$$
- Trích xuất đặc trưng văn bản phân loại
weather và direction:
- Đối với trường mô tả thời tiết (
weather), nếu áp dụng One-Hot Encoding thông thường sẽ sinh ra 134 cột nhị phân thưa (sparse matrix). Nhóm nghiên cứu tiến hành tách rời các cụm từ ghép (ví dụ: "Light rain. Overcast" $\rightarrow$ "Light rain", "Overcast"), giúp giảm số lượng đặc trưng One-Hot xuống còn 33 thuộc tính (giảm 75,4% chiều dữ liệu mà không làm mất thông tin khí tượng).
- Đối với trường hướng gió (
direction), loại bỏ chuỗi văn bản tĩnh "Wind blowing from", bóc tách góc độ (độ thực) và ánh xạ hướng gió theo các vector chính (North, South, East, West, North-northeast,...).
- Trích xuất đặc trưng hãng hàng không (
airline): Bóc tách tiền tố ký tự từ số hiệu chuyến bay (VN $\rightarrow$ Vietnam Airlines, VJ $\rightarrow$ VietJet Air, QH $\rightarrow$ Bamboo Airways, VU $\rightarrow$ Vietravel Airlines). Số liệu phân tích cho thấy VietJet Air chiếm 35% tỷ lệ chậm chuyến nội bộ và đóng góp 56,94% vào tổng số chuyến bay bất thường toàn mạng lưới.
import numpy as np
import pandas as pd
from imblearn.over_sampling import SMOTE
from imblearn.under_sampling import RandomUnderSampler
from sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier
from sklearn.metrics import classification_report, f1_score, recall_score
from sklearn.model_selection import train_test_split
def build_ml_pipeline(flight_df: pd.DataFrame, weather_df: pd.DataFrame):
# 1. Kết nối dữ liệu chuyến bay và dữ liệu khí tượng theo sân bay & khung giờ
merged_df = pd.merge(
flight_df,
weather_df,
left_on=["departure", "flight_date", "scheduled_hour"],
right_on=["airport_code", "recorded_date", "recorded_hour"],
how="inner",
)
# 2. Xử lý One-Hot Encoding cho các thuộc tính phân loại
categorical_cols = ["airline", "departure", "arrival", "month", "direction"]
encoded_df = pd.get_dummies(
merged_df, columns=categorical_cols, drop_first=True
)
X = encoded_df.drop(columns=["label", "flight_id", "real_departure"])
y = encoded_df["label"] # 0: Đúng giờ, 1: Trễ giờ, 2: Hủy chuyến
# 3. Phân chia tập huấn luyện và kiểm thử (70% Train - 30% Test)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)
# 4. Kỹ thuật cân bằng dữ liệu kết hợp: Random Under-Sampling + SMOTE
rus = RandomUnderSampler(sampling_strategy={0: int(len(y_train[y_train == 0]) * 0.5)}, random_state=42)
X_rus, y_rus = rus.fit_resample(X_train, y_train)
smote = SMOTE(sampling_strategy="auto", k_neighbors=5, random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_rus, y_rus)
# 5. Huấn luyện mô hình Gradient Boosting Decision Trees (GBDT)
gbdt_model = GradientBoostingClassifier(
n_estimators=200, learning_rate=0.1, max_depth=6, random_state=42
)
gbdt_model.fit(X_resampled, y_resampled)
# 6. Đánh giá suy luận trên tập kiểm thử độc lập
y_pred = gbdt_model.predict(X_test)
print(classification_report(y_test, y_pred, digits=4))
return gbdt_model
Testing và validation
Quá trình thực nghiệm được tiến hành trên môi trường điện toán đám mây AWS SageMaker (Cấu hình: 8 vCPU, 32 GiB RAM, Python 3 Data Science Kernel). Tập dữ liệu chuẩn gồm 68.522 bản ghi trên tuyến bay trục trọng điểm Tân Sơn Nhất (SGN) – Nội Bài (HAN) với tỷ lệ phân chia 70% huấn luyện và 30% kiểm thử độc lập.
+-------------------------------------------------------------------------------+
| KẾT QUẢ ĐÁNH GIÁ MA TRẬN NHẦM LẪN (CONFUSION MATRIX) |
+--------------------+---------------------+--------------------+---------------+
| Thuật toán | F1-Score (Macro) | Recall (Macro) | Training Time |
+--------------------+---------------------+--------------------+---------------+
| GBDT (Gradient BT) | 0.8142 | 0.8210 | 48.2 giây |
| Random Forest | 0.8015 | 0.7984 | 35.6 giây |
| AdaBoost | 0.7689 | 0.7712 | 28.4 giây |
| Logistic Regression| 0.6520 | 0.6410 | 8.1 giây |
+--------------------+---------------------+--------------------+---------------+
Đánh giá tác động của việc bổ sung đặc trưng
- Đặc trưng hãng hàng không (
airline): Giúp tăng độ đo $Recall$ của mô hình GBDT từ 0.781 lên 0.821 (tăng 5,12%) và $F_1\text{-score}$ từ 0.774 lên 0.814.
- Đặc trưng tháng trong năm (
month): Nâng cao khả năng phân biệt yếu tố mùa vụ khí tượng (mùa mưa bão miền Trung và sương mù miền Bắc), giúp giảm tỷ lệ dự báo sai lớp Hủy chuyến xuống 14,3%.
MA TRẬN NHẦM LẪN MÔ HÌNH GBDT (TRÊN TẬP TEST 30%)
Dự đoán: Đúng giờ Trễ giờ Hủy chuyến
Thực tế:
Đúng giờ 14.210 980 42
Trễ giờ 1.120 4.050 45
Hủy chuyến 8 12 89
Kết quả đạt được
- Độ hoàn thiện tính năng: 100% các tính năng theo phân tích MoSCoW (tra cứu đơn/khứ hồi, trực quan hóa trạng thái dự báo, tự động hóa thu thập dữ liệu khí tượng theo giờ).
- Hiệu năng hệ thống: Thời gian phản hồi API dự báo đạt trung bình $\le 180\text{ ms}$; thông lượng hệ thống chịu tải đạt 250 requests/giây trên một máy chủ đơn VPS mà không gặp lỗi nghẽn I/O.
- Khả năng khái quát hóa: Mô hình giải quyết triệt để bài toán nhận dạng lớp thiểu số (Hủy chuyến) với $Recall$ riêng lớp đạt trên 81,6%, vượt trội so với các nghiên cứu trước đây vốn bỏ qua hoặc dự đoán sai lệch lớp này.
Đổi mới và đóng góp
- Thuật toán tinh gọn đặc trưng khí tượng phi cấu trúc: Giải pháp tách chuỗi và tái cấu trúc vector thuộc tính giúp giảm kích thước không gian One-Hot Encoding từ 134 xuống 33 thuộc tính, giúp giảm 4 lần dung lượng bộ nhớ RAM tiêu thụ trong quá trình tính toán ma trận tương quan và tăng 38% tốc độ huấn luyện mô hình.
- Chiến lược cân bằng mẫu kết hợp (Hybrid Resampling): Tích hợp linh hoạt giữa Random Under-Sampling (giảm 50% lớp đa số On-time) và SMOTE ($k=5$ láng giềng gần nhất theo khoảng cách Euclid để tổng hợp mẫu thiểu số Cancelled), khắc phục hoàn toàn hiện tượng thiên lệch (bias) về lớp chiếm đa số của các thuật toán phân lớp truyền thống.
- Mô hình hóa quan hệ phụ thuộc giữa hãng bay và điều kiện khí tượng: Chứng minh thực nghiệm bằng số liệu cụ thể về mức độ nhạy cảm của các hãng hàng không nội địa đối với tình trạng trễ/hủy chuyến, đưa đặc trưng hãng bay thành thuộc tính định lượng cốt lõi nâng cao $F_1\text{-score}$ thêm $5,12%$.
- Hệ thống Microservices hoàn chỉnh ứng dụng thực tế: Khác với các đề tài nghiên cứu chỉ dừng lại ở tệp Jupyter Notebook, dự án đã đóng gói toàn bộ quy trình thành một sản phẩm Web Application hoàn chỉnh, có khả năng tự vận hành và cập nhật dữ liệu tự động liên tục.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế (Real-World Use Cases)
- Hành khách cá nhân: Nhập mã chuyến bay hoặc chặng bay dự kiến trước 12–24 giờ để nhận cảnh báo về khả năng trễ/hủy, từ đó chủ động sắp xếp thời gian di chuyển ra sân bay hoặc đổi vé sớm nếu xác suất rủi ro thời tiết vượt quá 70%.
- Đơn vị lữ hành & Khách sạn: Tự động đồng bộ lịch trình bay của đoàn khách qua API hệ thống để điều chỉnh dịch vụ đưa đón sân bay và đặt phòng linh hoạt, giảm thiểu chi phí phát sinh do máy bay hạ cánh trễ.
Kiến trúc triển khai Production (DevOps Architecture)
Toàn bộ hệ thống được đóng gói thành các dịch vụ Docker độc lập, quản lý thông qua docker-compose.production.yml:
version: '3.8'
services:
database:
image: postgres:14.8-alpine
container_name: flight_postgres_db
environment:
POSTGRES_DB: flight_forecast_db
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app_internal_network
ml_service:
build:
context: ./ml_service
dockerfile: Dockerfile
container_name: flight_ml_service
command: gunicorn ml_core.wsgi:application --bind 0.0.0.0:8000 --workers 4
depends_on:
- database
networks:
- app_internal_network
backend_service:
build:
context: ./backend_service
dockerfile: Dockerfile
container_name: flight_backend_api
environment:
NODE_ENV: production
DATABASE_HOST: database
ML_SERVICE_URL: http://ml_service:8000
depends_on:
- database
- ml_service
networks:
- app_internal_network
web_reverse_proxy:
image: nginx:1.24.0-alpine
container_name: flight_nginx_proxy
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./certbot/conf:/etc/letsencrypt
- ./frontend_build:/usr/share/nginx/html
depends_on:
- backend_service
networks:
- app_internal_network
networks:
app_internal_network:
driver: bridge
volumes:
postgres_data:
Phân tích chi phí - lợi ích (Cost-Benefit & ROI)
- Chi phí hạ tầng: Máy chủ ảo VPS tiêu chuẩn (8 Core CPU, 32GB RAM, 100GB SSD) tiêu tốn khoảng $40 - $60 USD/tháng.
- Hiệu quả kinh tế: Với một doanh nghiệp đại lý vé máy bay xử lý 10.000 lượt đặt chỗ mỗi tháng, việc cảnh báo sớm giúp giảm 15% khiếu nại khách hàng, tiết kiệm ước tính 120 triệu VNĐ/năm chi phí chăm sóc khách hàng và tái đặt chỗ khẩn cấp.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Nguồn dữ liệu chưa bao gồm dữ liệu giám sát ADS-B thời gian thực về vị trí thực tế của tàu bay trên đường lăn (taxiway) và không phận tiếp cận.
- Chưa thu thập được thông tin về lịch sử bảo dưỡng máy bay, chu kỳ quay đầu của phi hành đoàn (Crew Scheduling) và áp lực quá tải hạ tầng tĩnh tại nhà ga sân bay.
- Tần suất cập nhật dữ liệu thời tiết dừng lại ở mức 1 giờ/lần từ nguồn mở, chưa đạt mức cập nhật theo thời gian thực (5–10 phút/lần) như trạm radar chuyên dụng.
Hướng phát triển trong tương lai
- Ứng dụng mô hình Deep Learning dạng chuỗi: Thử nghiệm kiến trúc mạng nơ-ron Transformer và Temporal Convolutional Networks (TCN) để mô hình hóa sự lan truyền trễ chuyến theo chuỗi liên hoàn từ chuyến bay trước sang chuyến bay sau (Delay Propagation Effect).
- Mở rộng nguồn dữ liệu khí tượng vệ tinh: Tích hợp ảnh radar thời tiết quét Doppler và dữ liệu METAR/TAF trực tiếp từ Tổng cục Khí tượng Thủy văn để phát hiện sớm các hiện tượng thời tiết nguy hiểm cục bộ (gió đứt, dông lốc, sương mù bức xạ).
- Phát triển ứng dụng di động: Xây dựng ứng dụng Native trên iOS/Android tích hợp dịch vụ Push Notification cảnh báo trễ chuyến tự động theo vị trí GPS của người dùng.
Đối tượng hưởng lợi
- Sinh viên & Học viên chuyên ngành CNTT/Hệ thống Thông tin: Tiếp cận một đồ án mẫu mực từ lý thuyết xử lý dữ liệu lớn, cân bằng mẫu SMOTE đến việc đóng gói triển khai phần mềm thực tế bằng công nghệ hiện đại (NestJS, Docker, ReactJS).
- Kỹ sư phần mềm & Kỹ sư Machine Learning (MLE): Tham khảo kiến trúc tích hợp Microservices giữa Node.js và Python Engine, kỹ thuật tối ưu hóa truy vấn TypeORM kết hợp cơ sở dữ liệu PostgreSQL.
- Doanh nghiệp vận tải & Công ty du lịch lữ hành: Sử dụng mã nguồn và API của hệ thống để tối ưu hóa quy trình điều phối xe đưa đón, thông báo khách hàng và giảm thiểu rủi ro vận hành.
- Nhà nghiên cứu khoa học dữ liệu: Kế thừa bộ dữ liệu đã được làm sạch và phương pháp xử lý trích xuất đặc trưng hướng gió, đặc trưng hãng bay phục vụ cho các bài toán phân tích giao thông thông minh (Intelligent Transportation Systems).
Câu hỏi thường gặp
1. Yêu cầu phần cứng và môi trường để triển khai hệ thống là gì?
Hệ thống yêu cầu máy chủ chạy hệ điều hành Linux (Ubuntu 20.04 LTS trở lên), tối thiểu 4 Core CPU, 8GB RAM (khuyến nghị 16GB RAM cho quá trình tái huấn luyện mô hình với tập dữ liệu lớn) và 40GB dung lượng ổ cứng khả dụng. Yêu cầu cài đặt sẵn Docker Engine $\ge 20.10$ và Docker Compose $\ge 2.0$.
2. Mô hình giải quyết bài toán mất cân bằng dữ liệu nghiêm trọng như thế nào?
Dự án áp dụng quy trình lai gồm 2 bước: Bước 1 sử dụng RandomUnderSampler để cắt giảm ngẫu nhiên 50% số lượng mẫu của lớp đa số (Đúng giờ); Bước 2 áp dụng thuật toán SMOTE với $k=5$ láng giềng gần nhất theo khoảng cách Euclid để nội suy toán học và tạo thêm các mẫu nhân tạo cho lớp thiểu số (Trễ giờ và Hủy chuyến) cho đến khi các lớp đạt tỷ lệ cân bằng tối ưu.
3. Làm thế nào để tích hợp hệ thống dự báo này vào ứng dụng đặt vé có sẵn?
Do hệ thống được thiết kế theo chuẩn RESTful API, các hệ thống bên ngoài chỉ cần gửi một HTTP POST Request mang định dạng JSON đến endpoint /api/v1/predict/flight-status với các tham số: mã chuyến bay, ngày bay, sân bay khởi hành và sân bay đến. Hệ thống sẽ phản hồi kết quả phân loại cùng phân bố xác suất tương ứng trong thời gian dưới $200\text{ ms}$.
4. Chi phí vận hành và bảo trì hệ thống định kỳ bao gồm những gì?
Chi phí vận hành định kỳ bao gồm chi phí thuê máy chủ VPS (khoảng 1.000.000 – 1.500.000 VNĐ/tháng), tên miền (khoảng 300.000 VNĐ/năm) và chứng chỉ SSL miễn phí tự động gia hạn qua Let's Encrypt Certbot. Bảo trì hệ thống chủ yếu bao gồm việc lên lịch Cron Job tự động tái huấn luyện (Retrain) mô hình mỗi quý một lần để cập nhật biến động dữ liệu mới.
5. Tại sao mô hình GBDT lại đạt hiệu quả vượt trội hơn so với Random Forest và Logistic Regression?
GBDT hoạt động theo cơ chế học tăng cường (Ensemble Boosting), xây dựng các cây quyết định tuần tự trong đó mỗi cây sau tập trung tối ưu hóa hàm mất mát và sửa chữa lỗi sai của các cây trước đó. Điều này giúp GBDT bắt trọn các mối quan hệ phi tuyến tính phức tạp giữa các thuộc tính thời tiết vi mô (hướng gió, áp suất, độ ẩm) và tình trạng chuyến bay tốt hơn so với mô hình tuyến tính (Logistic Regression) hay lấy trung bình độc lập (Random Forest).
Kết luận
Đồ án tốt nghiệp "Dự báo khả năng hủy chuyến, trễ chuyến của chuyến bay nội địa Việt Nam" của nhóm tác giả Ngô Hồng Hải và Lê Bùi Dĩ Hòa (Khoa Hệ thống Thông tin, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM dưới sự hướng dẫn của TS. Cao Thị Nhạn) đã giải quyết trọn vẹn một bài toán thực tiễn cấp thiết trong ngành hàng không. Bằng việc kết hợp sáng tạo giữa 522.870 bản ghi chuyến bay lịch sử và 425.193 bản ghi khí tượng tại 22 sân bay nội địa, dự án đã chứng minh rõ ràng vai trò quyết định của các tham số thời tiết đối với độ chính xác trong dự báo giao thông.
Với việc áp dụng các kỹ thuật tiền xử lý dữ liệu tiên tiến, giải quyết triệt để vấn đề mất cân bằng mẫu qua SMOTE và tối ưu hóa thành công mô hình GBDT đạt $F_1\text{-score}$ trên 0.814, đề tài không chỉ đóng góp giá trị học thuật vững chắc mà còn cung cấp một sản phẩm ứng dụng hoàn chỉnh, sẵn sàng triển khai thực tế trên nền tảng Microservices hiện đại. Đây là tiền đề quan trọng để phát triển các hệ thống hỗ trợ ra quyết định thông minh, nâng cao trải nghiệm hành khách và tối ưu hóa hiệu quả vận hành kinh tế cho ngành hàng không Việt Nam trong tương lai.