Phân Tích Chuỗi Thời Gian — Ví Dụ Thật Với Giá Cổ Phiếu Apple

Tóm tắt nhanh: Chuỗi thời gian (time series) là dữ liệu có mốc thời gian — giá cổ phiếu, doanh số theo tháng, lượng truy cập web. Kỹ thuật quan trọng nhất là ‘trung bình động’ (rolling window) — giúp lọc bỏ nhiễu ngắn hạn để thấy rõ xu hướng dài hạn, minh họa bằng dữ liệu giá thật của Apple.
Ví dụ thật: AAPL, MSFT, XOMKỹ thuật: rolling windowỨng dụng trực tiếp cho đầu tư

Bài trước bạn học groupby — nhóm theo giá trị (vùng, loại…). Chuỗi thời gian là 1 dạng đặc biệt: nhóm/phân tích theo mốc thời gian. Đây là kỹ năng liên quan trực tiếp nhất đến phân tích đầu tư/tài chính trong toàn lộ trình.

Vấn đề: giá cổ phiếu nhảy lên xuống liên tục, khó thấy xu hướng

Nhìn biểu đồ giá cổ phiếu hàng ngày, bạn sẽ thấy đường giá “nhảy” lên xuống liên tục — rất khó nhận ra xu hướng dài hạn nếu chỉ nhìn giá thô từng ngày. Đây là lúc dùng trung bình động (rolling/moving average): tính trung bình giá trong 1 khung thời gian trượt dần (ví dụ 250 ngày gần nhất), giúp làm mượt các biến động ngắn hạn.

Đường xanh đậm (trung bình động 250 ngày) — bỏ qua “nhiễu”, giữ lại XU HƯỚNG
Ví dụ thật từ dữ liệu giá cổ phiếu Apple: đường giá thô (xám) rất nhiễu, đường trung bình động 250 ngày (xanh đậm) cho thấy rõ xu hướng.

Code thật — dùng ngay được với dữ liệu chứng khoán

close_px[“AAPL”].rolling(250).mean().plot()# Trung bình động 250 ngày (khoảng 1 năm giao dịch)returns[“AAPL”].rolling(125).corr(returns[“MSFT”])# Tương quan 2 cổ phiếu, tính lại mỗi 125 ngàyVí dụ thật từ dữ liệu giá thật: AAPL, MSFT, XOM
Ví dụ thật từ dữ liệu giá 3 cổ phiếu (AAPL, MSFT, XOM): tính trung bình động 250 ngày, và tính tương quan giữa 2 cổ phiếu theo từng khung 125 ngày trượt dần.

.rolling(N) hoạt động giống groupby đã học ở bài trước, nhưng nhóm theo “N mốc thời gian gần nhất” thay vì theo giá trị cố định. Có thể áp bất kỳ hàm tính toán nào sau đó: trung bình (.mean()), độ lệch chuẩn — đo độ biến động/rủi ro (.std()), hay tương quan giữa 2 chuỗi (.corr()) — rất hữu ích khi so sánh mức độ “đi cùng nhau” của 2 cổ phiếu theo thời gian.

Xem thêm

Video này (tiếng Anh) thực hành trực tiếp tính trung bình động trên dữ liệu chứng khoán thật, đúng kỹ thuật vừa học ở trên.

Checklist tự kiểm tra sau bài này
  • Bạn giải thích được vì sao cần trung bình động khi phân tích dữ liệu giá cổ phiếu theo ngày.
  • Bạn viết được code .rolling(N).mean() để tính trung bình động.
  • Bạn biết thêm ít nhất 1 hàm khác có thể dùng sau .rolling() ngoài .mean() (.std(), .corr()…).
Cần nhớ

Dữ liệu theo thời gian LUÔN có nhiễu ngắn hạn — đừng vội kết luận xu hướng chỉ từ vài điểm dữ liệu gần nhất. Trung bình động là công cụ đơn giản nhưng hiệu quả để tách “nhiễu ngắn hạn” khỏi “xu hướng thật dài hạn”, cực kỳ phổ biến trong phân tích tài chính thực tế.

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

Nên chọn khung thời gian (window) bao nhiêu ngày cho trung bình động?

Không có số chuẩn chung — phụ thuộc mục đích: khung ngắn (vd 20 ngày) phản ứng nhanh với biến động gần, khung dài (vd 250 ngày ~ 1 năm) cho thấy xu hướng dài hạn ổn định hơn.

rolling() có tính được cho dữ liệu bị thiếu (missing) không?

Có, pandas tự động loại bỏ giá trị thiếu khi tính, và có tham số min_periods để quyết định cần tối thiểu bao nhiêu điểm dữ liệu hợp lệ mới tính ra kết quả.

Kỹ thuật này có phải là “dự đoán” giá cổ phiếu tương lai không?

Không — trung bình động chỉ tổng hợp lại dữ liệu ĐÃ CÓ để dễ nhìn xu hướng, không tự dự đoán tương lai. Dự đoán thật cần các mô hình phức tạp hơn, nằm ngoài phạm vi bài này.

Nguồn: Wes McKinney, Python for Data Analysis (3rd ed.), Chương 11 “Time Series”, phần “Moving Window Functions” (O’Reilly, 2022) — ví dụ dùng dữ liệu giá cổ phiếu thật AAPL/MSFT/XOM từ sách. Nội dung diễn giải lại bằng lời riêng, không sao chép nguyên văn.