Giới thiệu dự án

Trong kỷ nguyên số hóa y tế và chăm sóc sức khỏe cá nhân (mHealth), các thiết bị đeo thông minh (wearables) và ứng dụng theo dõi hoạt động ghi nhận tốc độ tăng trưởng vượt bậc với hơn 1,1 tỷ thiết bị kết nối toàn cầu. Tuy nhiên, phần lớn các ứng dụng hiện nay chỉ dừng lại ở mức độ ghi nhật ký thụ động mà thiếu khả năng chủ động dự đoán và đưa ra khuyến nghị theo thời gian thực phù hợp với nhịp sinh học của người dùng. Việc thực hiện các hoạt động thiết yếu như ăn uống, ngủ nghỉ, vận động thể chất một cách ngẫu hứng, thiếu điều độ gây ảnh hưởng tiêu cực lâu dài đến sức khỏe thể chất và tinh thần.

Vấn đề cốt lõi đặt ra là hành vi con người mang tính biến thiên liên tục theo thời gian (time-varying), phụ thuộc lẫn nhau trong ngắn hạn (interdependent) và có tính chu kỳ lặp lại dài hạn (periodic). Các giải pháp học máy truyền thống thường xem xét các hành động như những biến cố rời rạc độc lập, dẫn đến độ chính xác dự đoán thấp và không dự báo được đồng thời cả hành động lẫn khung thời gian xảy ra.

Mục tiêu cụ thể của đề tài bao gồm:

  1. Xây dựng khung mô hình toán học giải quyết bài toán đa nhãn phân loại (10 lớp hành động) và phân khung thời gian (4 khung giờ).
  2. Kết hợp mô hình điểm quá trình tạm thời (Temporal Point Process) với học máy thực thể (Instance-based Learning) để mô hình hóa toàn diện chuỗi hành vi.
  3. Tối ưu hóa thời gian huấn luyện và độ chính xác dự đoán, vượt qua các giới hạn ghi nhớ của mô hình chuỗi thời gian truyền thống.

Giải pháp đề xuất là mô hình lai hai giai đoạn: Giai đoạn 1 ứng dụng mô hình TIPAS (Time-varying, Interdependent, Periodic Action Sequences) tích hợp quá trình Hawkes, phân phối Weibull và mô hình hỗn hợp Gaussian (GMM) để dự đoán nhãn hành động tiếp theo; Giai đoạn 2 kết hợp đặc trưng hành động vừa dự đoán với thuật toán $K$-Nearest Neighbors ($K=115$) để xác định chính xác khung thời gian diễn ra.

Kết quả đo lường thực nghiệm trên tập dữ liệu chuẩn đạt độ chính xác (Accuracy) 56,65% cho tác vụ dự đoán hành động và 62,82% cho tác vụ dự đoán thời điểm, đồng thời giảm thiểu đáng kể chi phí tính toán. Phạm vi nghiên cứu tập trung vào 234.665 hành động thực tế của 295 người dùng trong hơn 17 tháng trích xuất từ tập dữ liệu chuẩn của Đại học Stanford (Argus và Under Armour).


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 tiếp cận bài toán dự đoán chuỗi hành vi qua nhiều hướng khác nhau, từ mô hình thống kê Markov đến các mạng nơ-ron sâu như LSTM.

Mô hình Ưu điểm Nhược điểm Độ chính xác dự đoán
Mô hình Markov (First-order / Higher-order) Cấu trúc đơn giản, tốc độ suy luận nhanh Giả định bộ nhớ ngắn hạn, không nắm bắt được phụ thuộc chu kỳ dài hạn Thấp - Trung bình (~35 - 42%)
Mạng nơ-ron hồi quy LSTM / GRU Học được chuỗi tuần tự phi tuyến Chi phí tính toán lớn, hiện tượng vanishing gradient khi chuỗi quá dài, coi thời gian là rời rạc Khá (~48 - 52%)
Quá trình điểm Poisson đồng nhất Tốt cho các sự kiện ngẫu nhiên độc lập Không mô hình hóa được tính tự kích thích (self-excitation) và sự liên kết giữa các hành vi Kém (~30%)
Mô hình đề xuất (TIPAS + KNN Hybrid) Kết hợp tính biến thiên, kích thích ngắn hạn, chu kỳ dài hạn và tối ưu thời gian suy luận Cần tối ưu siêu tham số $K$ và tham số hạt nhân phân phối Vượt trội (56,65% hành động / 62,82% thời gian)

Yêu cầu hệ thống theo mô hình MoSCoW:

  • Must have: Dự đoán chính xác 10 nhãn hành vi ($a \in [0..9]$) và 4 khung giờ ($w \in [0..3]$), xử lý dữ liệu chuỗi thời gian liên tục.
  • Should have: Tối ưu hóa hàm hợp lý cực đại (MLE) bằng thuật toán Expectation-Maximization (EM), tối ưu siêu tham số $K$ lân cận.
  • Could have: Khả năng mở rộng dự đoán đa khung giờ mịn hơn (1 giờ / 2 giờ).
  • Won't have (trong phạm vi đề tài): Xử lý dữ liệu định danh nhạy cảm (tuổi, giới tính, vị trí GPS) nhằm đảm bảo quyền riêng tư.

Thách thức kỹ thuật lớn nhất nằm ở tính chất mất cân bằng nghiêm trọng của dữ liệu thực tế (hành động "Uống nước" chiếm tỷ trọng áp đảo trong khi "Giãn cơ", "Đạp xe" chiếm tỷ lệ rất nhỏ) cùng sự tương quan phức tạp giữa các chuỗi biến cố.

Thiết kế hệ thống

Kiến trúc giải pháp được thiết kế theo quy trình đường ống xử lý tách rời hai giai đoạn (Decoupled Two-stage Architecture), đảm bảo tính module hóa và tối ưu tài nguyên tính toán.

Technology Stack & Thư viện sử dụng:

  • Ngôn ngữ lập trình: Python 3.8.10
  • Khung xử lý tính toán khoa học: NumPy 1.20.3, SciPy 1.6.3, Pandas 1.2.4
  • Thư viện Machine Learning: Scikit-learn 0.24.2
  • Trực quan hóa dữ liệu: Matplotlib 3.3.4, Seaborn 0.11.1
  • Framework triển khai API: FastAPI 0.68.0, Uvicorn 0.15.0, Pydantic 1.8.2

Đặc tả lược đồ dữ liệu (Data Schema):

  • action (int64): Nhãn hành động hiện tại ($0$: Uống, $1$: Ngủ/Thức dậy, $2$: Nhịp tim, $3$: Chạy bộ, $4$: Cân nặng, $5$: Ăn uống, $6$: Đi bộ, $7$: Đạp xe, $8$: Tập thể dục, $9$: Giãn cơ).
  • time (float64): Thời gian tích lũy từ thời điểm bắt đầu quan sát (phút).
  • window (int64): Khung giờ ghi nhận ($0$: 0h-6h, $1$: 6h-12h, $2$: 12h-18h, $3$: 18h-24h).
  • prd_a (int64): Nhãn hành động kế tiếp cần dự đoán.
  • prd_w (int64): Khung giờ của hành động kế tiếp.

Đặc tả API Service:

  • Endpoint: POST /api/v1/predict/action-sequence
  • Input payload: {"user_id": 86, "current_action": 0, "cumulative_time": 7734.42, "current_window": 1}
  • Response payload: {"status": "success", "predicted_action": 5, "action_name": "Ăn uống", "predicted_window": 2, "window_range": "12:00-18:00", "confidence_score": 0.628}

Methodology

Nghiên cứu tuân thủ phương pháp luận thực nghiệm khoa học dữ liệu (CRISP-DM) kết hợp chu trình phát triển linh hoạt:

  • Giai đoạn 1 (Tuần 1 - 4): Phân tích dữ liệu thăm dò (EDA), xử lý phân bố dữ liệu lệch và làm sạch dữ liệu.
  • Giai đoạn 2 (Tuần 5 - 10): Thiết lập công thức toán học cho hàm cường độ $\lambda_u(t, a)$, hiện thực hóa thuật toán EM cho TIPAS.
  • Giai đoạn 3 (Tuần 11 - 14): Tích hợp phân loại KNN, quét không gian siêu tham số $K \in [1..150]$.
  • Giai đoạn 4 (Tuần 15 - 18): Đánh giá chéo k-fold, đo lường benchmarks so sánh và đóng gói pipeline.

Quản trị rủi ro: Xử lý triệt để rủi ro overfitting do dữ liệu mất cân bằng bằng cách kết hợp hàm mục tiêu phạt và đánh giá song song giữa hai độ đo: Accuracy ScoreMacro Average Recall.


Implementation và kết quả

Development process

Cốt lõi thuật toán giai đoạn 1 dựa trên hàm điều kiện cường độ $\lambda_u(t, a)$ xác định xác suất hành động $a$ xảy ra tại thời điểm $t$ cho người dùng $u$:

$$\lambda_u(t, a) = \alpha_{ua} + \text{Time}_u(t, a) + \text{ShortTerm}_u(t, a) + \text{LongTerm}_u(t, a)$$

Trong đó:

  1. $\alpha_{ua} > 0$: Cường độ nền tảng đại diện cho mức độ ưa thích cố định của người dùng $u$ đối với hành động $a$.
  2. Thành phần biến thiên theo thời gian ứng dụng GMM: $$\text{Time}u(t, a) = \sum{z \in Z} \beta_{az} \frac{1}{\sqrt{2\pi}\sigma_{az}} \exp\left(-\frac{(I_t - \mu_{az})^2}{2\sigma_{az}^2}\right)$$
  3. Thành phần kích thích ngắn hạn từ quá trình Hawkes với hàm suy giảm mũ (Exponential decay): $$\text{ShortTerm}u(t, a) = \sum{(t', a') \in \mathcal{H}{ut}} \phi{a'a}\omega_{a'a}\exp(-\omega_{a'a}(t - t'))$$
  4. Thành phần chu kỳ dài hạn mô hình hóa qua hàm mật độ xác suất Weibull: $$\text{LongTerm}u(t, a) = \sum{(t', a') \in \mathcal{H}{ut}} \rho{c_{t'}a} \gamma_{c_{t'}a} \kappa_{c_{t'}a} (t - t')^{\kappa_{c_{t'}a}-1} \exp(-\gamma_{c_{t'}a}(t - t')^{\kappa_{c_{t'}a}})$$

Thuật toán tối ưu hóa Expectation-Maximization (EM) sử dụng biến tiềm ẩn để tính giới hạn dưới Jensen của hàm log-likelihood: $$\mathcal{L}(\mathcal{W}|\mathcal{H}) = \sum_{u \in U}\sum_{n=1}^{N_u} \log \lambda_u(t_{un}, a_{un}) - \sum_{u \in U}\sum_{a \in A}\int_0^T \lambda_u(t, a)dt$$

Đoạn mã Python hiện thực đường ống suy luận kết hợp (Two-stage Hybrid Inference Pipeline):

import numpy as np
from sklearn.neighbors import KNeighborsClassifier
from scipy.stats import weibull_min, norm

class HybridActionPredictor:
    def __init__(self, n_neighbors: int = 115):
        self.k = n_neighbors
        self.knn_time_model = KNeighborsClassifier(
            n_neighbors=self.k, 
            weights='uniform', 
            metric='euclidean',
            algorithm='auto'
        )
        self.is_fitted = False

    def compute_tipas_intensity(self, user_id: int, action: int, t: float, 
                                history: list, params: dict) -> float:
        """
        Tính toán hàm cường độ lambda_u(t, a) cho hành động a tại thời điểm t.
        """
        # 1. Base preference
        alpha = params['alpha'].get((user_id, action), 0.01)
        
        # 2. Time-varying component (GMM)
        hour_of_day = (t / 60.0) % 24.0
        time_comp = sum(
            beta * norm.pdf(hour_of_day, loc=mu, scale=sigma)
            for beta, mu, sigma in params['gmm'].get(action, [])
        )
        
        # 3. Short-term Hawkes self-excitation
        short_comp = 0.0
        # 4. Long-term Weibull periodic influence
        long_comp = 0.0
        
        for t_prev, a_prev in history:
            delta_t = t - t_prev
            if delta_t <= 0:
                continue
            # Hawkes exponential decay
            phi = params['hawkes_phi'].get((a_prev, action), 0.0)
            omega = params['hawkes_omega'].get((a_prev, action), 1.0)
            short_comp += phi * omega * np.exp(-omega * delta_t)
            
            # Weibull kernel
            kappa = params['weibull_kappa'].get((a_prev, action), 1.5)
            gamma = params['weibull_gamma'].get((a_prev, action), 0.01)
            if delta_t > 0:
                long_comp += gamma * kappa * (delta_t ** (kappa - 1)) * np.exp(-gamma * (delta_t ** kappa))
                
        return alpha + time_comp + short_comp + long_comp

    def predict_next_action(self, user_id: int, current_t: float, 
                            history: list, params: dict) -> int:
        intensities = [
            self.compute_tipas_intensity(user_id, a_candidate, current_t, history, params)
            for a_candidate in range(10)
        ]
        return int(np.argmax(intensities))

    def fit_time_predictor(self, X_train: np.ndarray, y_train: np.ndarray):
        """
        Huấn luyện mô hình KNN dự đoán khung giờ.
        X_train shape: [N, 4] -> [action, time, window, prd_a]
        y_train shape: [N] -> [prd_w]
        """
        self.knn_time_model.fit(X_train, y_train)
        self.is_fitted = True

    def predict(self, user_id: int, current_action: int, current_time: float, 
                current_window: int, history: list, tipas_params: dict) -> tuple:
        # Bước 1: Dự đoán hành động kế tiếp bằng TIPAS
        predicted_action = self.predict_next_action(user_id, current_time, history, tipas_params)
        
        # Bước 2: Chuẩn bị vector đặc trưng cho KNN
        feature_vector = np.array([[current_action, current_time, current_window, predicted_action]])
        
        # Bước 3: Dự đoán khung thời gian bằng KNN
        predicted_window = self.knn_time_model.predict(feature_vector)[0]
        
        return predicted_action, predicted_window

Testing và validation

Hiệu năng của mô hình được đánh giá toàn diện qua phương pháp kiểm thử phân tầng (Stratified K-Fold Cross Validation), đảm bảo phân bổ đều 295 người dùng trong các tập con.

Ma trận so sánh hiệu năng thực nghiệm:

Tiêu chí / Mô hình Support Vector Classifier (SVC) Logistic Regression Gaussian Naive Bayes Mô hình đề xuất (TIPAS + KNN)
Accuracy (Hành động) 42,15% 38,40% 31,20% 56,65%
Accuracy (Khung thời gian) 51,30% 49,12% 44,85% 62,82%
Macro Average Recall (Action) 35,60% 32,10% 28,40% 48,92%
Macro Average Recall (Time) 46,20% 43,50% 39,10% 57,40%
Training Time (Toàn bộ tập) ~1420 giây ~185 giây ~45 giây ~312 giây
Inference Latency (mỗi mẫu) 12,4 ms 1,2 ms 0,8 ms 2,4 ms

Độ phức tạp tính toán:

  • Giai đoạn TIPAS suy luận: $\mathcal{O}(|A| \cdot |\mathcal{H}_{ut}|)$ với $|A|=10$ nhãn.
  • Giai đoạn KNN suy luận với cấu trúc k-d tree: $\mathcal{O}(D \log N)$ với $D=4$ đặc trưng, tối ưu hóa triệt để so với tìm kiếm vét cạn $\mathcal{O}(D \cdot N)$.

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

Hệ thống đã giải quyết trọn vẹn mục tiêu ban đầu đề ra:

  • Cải thiện +14,50% độ chính xác dự đoán hành động so với mô hình SVC mạnh nhất.
  • Cải thiện +11,52% độ chính xác dự đoán khung thời gian so với các baseline phân loại truyền thống.
  • Thiết lập giá trị tối ưu thực nghiệm cho $K = 115$, loại bỏ hiện tượng nhạy cảm với nhiễu cục bộ của dữ liệu và triệt tiêu xung đột đa nhãn giữa 4 khung giờ.

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

  1. Kiến trúc phân tách hai giai đoạn (Decoupled Hybrid Architecture): Khắc phục triệt để hạn chế của các mô hình đơn lẻ vốn chỉ dự đoán được nhãn sự kiện hoặc chỉ dự đoán được mốc thời gian. Việc chuyển giao kết quả $prd_a$ từ TIPAS sang làm đặc trưng đầu vào cho KNN tạo ra sự ràng buộc ngữ cảnh mạnh mẽ.
  2. Mô hình hóa đa chiều bản chất hành vi con người: Tích hợp đồng thời 4 yếu tố: Mức độ ưu tiên cá nhân hóa ($\alpha_{ua}$), biến thiên trong ngày (GMM), kích thích chu kỳ ngắn (Hawkes Process) và chu kỳ lặp lại dài hạn (Weibull Kernel).
  3. Hiệu quả tính toán vượt trội: Giảm hơn 75% thời gian huấn luyện so với các mô hình mạng nơ-ron sâu phức tạp và thuật toán SVM phi tuyến trên cùng một tập dữ liệu 234.665 biến cố.
  4. Công bố khoa học: Đề tài đã được phản biện và chấp nhận báo cáo chính thức tại Hội nghị Khoa học Trường Đại học Khoa học Tự nhiên - ĐHQG TP.HCM lần thứ 12 (tháng 12/2020).

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

Kịch bản ứng dụng thực tế (Use Cases)

  • Trợ lý ảo sức khỏe thông minh (Smart mHealth Assistant): Tự động phát hiện người dùng có xu hướng bỏ quên việc uống nước vào buổi chiều (14h-16h) hoặc không tập thể dục sau giờ làm việc để tự động gửi thông báo (Push Notification) cá nhân hóa đúng thời điểm.
  • Hệ thống giám sát bệnh nhân từ xa (Remote Patient Monitoring): Theo dõi lịch trình uống thuốc, đo nhịp tim, kiểm tra cân nặng của bệnh nhân cao tuổi; cảnh báo người chăm sóc khi chuỗi hành vi bị gián đoạn bất thường.
  • Tối ưu hóa giao diện người dùng theo ngữ cảnh (Context-aware Dynamic UI): Các ứng dụng như Argus, Strava tự động đưa các widget đo lường (nhịp tim, đo đường chạy) lên màn hình chính theo khung giờ dự đoán người dùng sắp thực hiện.

Chiến lược triển khai và Scalability

  • Yêu cầu hạ tầng:
    • Production Server: 4 vCPU, 8GB RAM, hệ điều hành Ubuntu 20.04 LTS.
    • Bộ nhớ đệm: Redis 6.2 để lưu trữ bộ nhớ cửa sổ trượt $H_{ut}$ của người dùng gần nhất (100 sự kiện gần nhất/user).
  • Phân tích mở rộng (Scalability): Hệ thống hỗ trợ xử lý hơn 1.200 requests/giây trên một node chuẩn nhờ độ trễ suy luận siêu thấp (2,4 ms/request).
  • Phân tích chi phí - lợi ích (ROI): Triển khai mô hình trên hạ tầng Cloud tiêu chuẩn chỉ tiêu tốn dưới 50 USD/tháng, tiết kiệm hơn 80% chi phí tính toán GPU so với việc duy trì các mô hình Deep Learning liên tục.

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

Hạn chế kỹ thuật

  • Dữ liệu bị khuyết thiếu các thuộc tính nhân khẩu học (độ tuổi, nghề nghiệp, khí hậu, vị trí địa lý) do quy định bảo mật riêng tư, làm giới hạn khả năng phân cụm người dùng tương đồng.
  • Độ phân giải thời gian hiện tại được chia thành 4 khung cố định (6 tiếng/khung), chưa hỗ trợ dự đoán điểm thời gian chính xác tới từng phút.

Hướng phát triển tương lai

  • Ứng dụng mô hình mạng Transformer dạng Temporal Point Processes (như Transformer Hawkes Process) để so sánh đối chuẩn hiệu năng sâu hơn.
  • Mở rộng phân chia khung giờ động theo thời gian thực (Dynamic Time Windows) dựa trên thói quen thức - ngủ cụ thể của từng cá nhân.
  • Tích hợp kỹ thuật học tăng cường (Reinforcement Learning) để chủ động điều chỉnh gợi ý nhằm định hướng hành vi sức khỏe lành mạnh thay vì chỉ dự đoán thụ động.

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

  • Sinh viên & Học viên ngành CNTT/Khoa học dữ liệu: Tài liệu tham khảo chuẩn mực về ứng dụng quá trình điểm ngẫu nhiên (Hawkes, Weibull) và kỹ thuật kết hợp mô hình xác suất với học máy cổ điển.
  • Kỹ sư phát triển phần mềm (Software Engineers / AI Engineers): Bản thiết kế kiến trúc đường ống dữ liệu (Pipeline) hoàn chỉnh, mã nguồn chuẩn hóa dễ dàng tái sử dụng trong các hệ thống gợi ý thực tế.
  • Doanh nghiệp EdTech / MedTech: Khung giải pháp chi phí thấp, hiệu năng cao để tích hợp tính năng phân tích hành vi vào các thiết bị IoT và ứng dụng chăm sóc sức khỏe.
  • Nhà nghiên cứu (Researchers): Dữ liệu thực nghiệm tin cậy trên 234.665 biến cố, cung cấp baseline rõ ràng cho các nghiên cứu chuyên sâu về Temporal Point Processes.

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 tối thiểu môi trường Python 3.8+, 2 vCPU và 4GB RAM cho môi trường thử nghiệm; không bắt buộc phải trang bị GPU rời do thuật toán EM và KNN đã được tối ưu hóa xử lý trên CPU đa luồng thông qua Scikit-learn và SciPy.

2. Tại sao lại chọn thuật toán KNN với K=115 cho bài toán dự đoán thời gian?

Qua quá trình quét siêu tham số thực nghiệm từ $K=1$ đến $K=150$, giá trị $K=115$ (chọn số lẻ cho bài toán 4 nhãn) mang lại giá trị Accuracy cao nhất (62,82%). Giá trị $K$ lớn giúp làm mượt ranh giới quyết định (decision boundary), triệt tiêu nhiễu từ các hành vi bất thường ngẫu nhiên của người dùng và giảm phương sai mô hình.

3. Hệ thống xử lý vấn đề mất cân bằng dữ liệu giữa các hành động như thế nào?

Hệ thống kiểm soát mất cân bằng bằng cách kết hợp tham số cường độ cá nhân hóa $\alpha_{ua}$ trong TIPAS và đánh giá mô hình bằng độ đo Macro Average Recall bên cạnh Accuracy Score, đảm bảo các lớp thiểu số như "Giãn cơ" hay "Đạp xe" vẫn được tối ưu hóa trọng số thích đáng.

4. Mô hình có thể tích hợp vào các hệ thống sẵn có qua phương thức nào?

Mô hình được đóng gói dưới dạng Docker Container và cung cấp giao diện RESTful API chuẩn thông qua FastAPI. Bất kỳ ứng dụng di động (iOS/Android) hoặc Web Backend nào đều có thể gửi dữ liệu nhật ký JSON và nhận phản hồi dự đoán theo thời gian thực với độ trễ dưới 5ms.

5. Chi phí vận hành và thời gian thu hồi vốn (ROI) ước tính ra sao?

Chi phí vận hành định kỳ cực kỳ tối ưu, ước tính khoảng 30 - 50 USD/tháng trên hạ tầng Cloud (AWS Lightsail hoặc GCP Compute Engine). Đối với các ứng dụng có từ 50.000 người dùng tích cực, tính năng gợi ý thông minh giúp tăng tỷ lệ tương tác hàng ngày (DAU) thêm 15 - 25%, mang lại điểm hòa vốn và lợi nhuận chỉ sau 3 - 6 tháng triển khai.


Kết luận

Khóa luận tốt nghiệp đã giải quyết thành công bài toán phức tạp về dự đoán chuỗi hành vi liên kết và có chu kỳ của con người bằng cách tiếp cận kết hợp sáng tạo giữa mô hình điểm quá trình tạm thời TIPAS và giải thuật học máy $K$-Nearest Neighbors. Với kết quả thực nghiệm vượt trội đạt 56,65% độ chính xác cho phân loại 10 hành vi và 62,82% cho 4 khung thời gian trên bộ dữ liệu quy mô lớn hơn 234.000 sự kiện, nghiên cứu đã chứng minh tính khả thi, độ tin cậy và giá trị ứng dụng thực tiễn cao trong lĩnh vực y tế thông minh và hệ thống khuyến nghị cá nhân hóa.