1. Trang chủ
  2. » Giáo Dục - Đào Tạo

DỰ ĐOÁN XU HƯỚNG GIÁ CỔ PHIẾU CÔNG TY VINAMILK

52 1 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Trang 1

Giảng viên giảng dạy: Đặng Nhân Cách

Nhóm sinh viên thực hiện:

Trang 2

1.2.1 Xác định mục tiêu và phạm vi nghiên cứu: 7

1.2.2 Mô hình bài toán 7

1.2.3 Dữ liệu cổ phiếu của Vinamilk 7

1.2.4 Thu thập dữ liệu: 8

1.3 Ngôn ngữ và thư viện ứng dụng 8

CHƯƠNG II CƠ SỞ LÝ THUYẾT 9

2.1 Thư viện Pandas 9

2.2 Thư viện Numpy 9

2.3 Thư viện Keras.Layers LSTM 10

2.4 Kỹ thuật Dropout 11

2.5 Thư viện keras.layers.Dense 11

2.6 Mô hình LSTM 12

2.7 Các phương pháp đánh giá hiệu suất mô hình 14

CHƯƠNG III BỘ DỮ LIỆU ĐỀ XUẤT 17

3.1 Thông tin dữ liệu 17

3.2 Mô tả dữ liệu 17

CHƯƠNG IV THỰC NGHIỆM VÀ PHÂN TÍCH 22

4.1 Tiền xử lý dữ liệu 22

4.2 Trực quan hóa dữ liệu 22

4.2.1 Biểu đồ giá cổ phiếu khi kết phiên của Vinamilk qua các năm 23

4.2.2 Biểu đồ thể hiện mối tương quan giữa các biến 25

Trang 3

Tài liệu tham khảo 55

DANH MỤC HÌNH ẢNHHình 1: Mô tả bài toán 6

Hình 2: Mô hình LSTM 11

Hình 3: Code hiển thị 5 dòng dữ liệu 17

Hình 4: 5 dòng dữ liệu đầu tiên của dataset 17

Hình 5: Code xác định các kiểu dữ liệu của dataset 17

Hình 6: Kết quả kiểm tra kiểu dữ liệu của thuộc tính trong dataset 18

Hình 7: Code kiểm tra mức độ hoàn thiện của dataset 19

Hình 8: Mô tả dataset 19

Hình 9: Code tiền xử lý dữ liệu 21

Hình 10: Code tạo biểu đồ giá kết phiên của Vinamilk qua các năm 22

Hình 11: Biểu đồ giá kết phiên của Vinamilk qua các năm 23

Hình 12: : Code vẽ biểu đồ Scatter matrix 24

Hình 13: Biểu đồ Scatter Matrix thể hiện mối tương quan giữa các biến 25

Hình 14: Code tạo biểu đồ Boxplot 26

Hình 15: Biểu đồ Boxplot 27

Hình 16: Code vẽ biểu đồ ViolinPlot 28

Hình 17: Biểu đồ ViolinPlot 29

Hình 18: Code vẽ biểu đồ giá cao nhất và giá thấp nhất qua các ngày 31

Hình 19: Code vẽ biểu đồ giá cao nhất và giá thấp nhất qua các ngày 31

Hình 20: Code biểu đồ đường thể hiện giá đóng cửa và giá mở cửa qua các ngày 33

Hình 21: Biểu đồ giá đóng cửa và giá mở cửa của cổ phiếu Vinamilk 33

Hình 22: Code tạo biểu đồ giá kết phiên theo trung bình qua các năm 35

Hình 23: Biểu đồ giá đóng cửa trung bình qua các năm 36

Hình 24: Code vẽ biểu đồ giá kết phiên trung bình qua các quý năm 2021 37

Hình 25: Biểu đồ giá cổ phiếu kết phiên trong các quý năm 2021 38

Hình 26: Code top 5 ngày có giá cổ phiếu kết phiên cao nhất 39

Hình 27: Top 5 ngày có giá cổ phiếu đạt đỉnh 39

Hình 28: Code top 5 ngày có giá cổ phiếu chạm đáy 40

Hình 29: Top 5 ngày có giá cổ phiếu đạt đáy 40

Hình 30: Code tạo Data frame mới 41

Hình 31: Data frame mới 41

Hình 32: Code chia tập dữ liệu thành 2 tập 42

Hình 33: Code chuẩn hóa dữ liệu 42

Hình 34: Code tạo vòng lặp 43

Hình 35: Kết quả biến X 43

Hình 36: Kết quả biến Y 44

Hình 37: Code chia dữ liệu thành các mảng 44

Hình 38: Code xây dựng mô hình 45

Hình 39: : Code huấn luyện mô hình 45

Hình 40: Kết quả huấn luyện 46

Trang 4

Hình 41: Code dữ liệu train 47

Hình 42: Code xử lý dữ liệu test 47

Hình 43: Code biểu đồ so sánh giá trị dự đoán 48

Hình 44: Biểu đồ so sánh giá dự báo và giá thực tế 48

Hình 45: Code đo lường sai số trên tập train 49

Hình 46: Code đo lường sai số trên tập test 49

Hình 47: Kết quả đo lường của tập train 50

Hình 48: Kết quả đo lường của tập test 50

Hình 49: Code dự báo giá cổ phiếu tương lai 51

Hình 50: Code vẽ biểu đồ mới với dự đoán cho ngày tiếp theo 51

Hình 51: Biểu đồ giá dự báo 52

Hình 52: Code in ra giá trị dự báo 52

Hình 53: Giá cổ phiếu dự đoán 52

Trang 5

LỜI CẢM ƠN

Chúng em xin chân thành cảm ơn thầy đã tận tình hướng dẫn chúng em trong suốt quátrình học tập môn Big Data, đặc biệt là trong việc thực hiện báo cáo cuối kỳ về chủ đề "Dự đoán xu hướng giá cổ phiếu công ty Vinamilk".

Nhờ sự hướng dẫn tận tình và chu đáo của thầy, chúng em đã có thể hoàn thành báo cáo một cách tốt nhất Báo cáo đã giúp chúng em hiểu rõ hơn về ứng dụng của Big Data tronglĩnh vực tài chính, đặc biệt là trong việc dự đoán xu hướng giá cổ phiếu Qua quá trình thực hiện báo cáo, chúng em đã được rèn luyện nhiều kỹ năng quan trọng như thu thập và phân tích dữ liệu, lập mô hình dự đoán, trình bày kết quả nghiên cứu.

Chúng em xin ghi nhận những đóng góp quan trọng của thầy trong việc giúp đỡ chúng em hoàn thành báo cáo Chúng em cũng xin hứa sẽ tiếp tục cố gắng học tập và rèn luyện để đạt được kết quả tốt hơn trong tương lai.

Trang 6

CHƯƠNG 1: TỔNG QUAN1.1 Lý do chọn đề tài

Thị trường tài chính ngày càng sôi động với sự tham gia của đông đảo nhà đầu tư Nhu cầu dự đoán xu hướng giá cổ phiếu để đưa ra quyết định đầu tư sáng suốt ngày càng tăngcao Trong bối cảnh đó, "Dự đoán xu hướng giá cổ phiếu công ty Vinamilk" sẽ đầy tiềm năng, ứng dụng công nghệ Big Data tiên tiến để giải mã thị trường tài chính phức tạp.

Vinamilk, với vị thế "Ông vua sữa Việt Nam", sở hữu thị phần áp đảo, thương hiệu uytín và sản phẩm được tin dùng rộng rãi Cổ phiếu VNM của Vinamilk luôn nằm trong top thanh khoản cao nhất thị trường chứng khoán, thu hút sự quan tâm của đông đảo nhà đầu tư Do đó, dự đoán xu hướng giá cổ phiếu VNM trở thành vấn đề then chốt, ảnh hưởng trực tiếp đến quyết định đầu tư của nhiều người.

Tuy nhiên, dự đoán giá cổ phiếu là bài toán khó, chịu ảnh hưởng bởi nhiều yếu tố nội tại và ngoại vi của công ty, cũng như biến động thị trường chung Việc xây dựng mô hình dự đoán chính xác đòi hỏi kiến thức chuyên môn về tài chính, thống kê, học máy và khả năng phân tích dữ liệu chuyên sâu Big Data mang đến giải pháp đột phá, giúp thu thập và phân tích lượng lớn dữ liệu một cách nhanh chóng và hiệu quả Nhờ Big Data, chúng ta có thể:● Tiếp cận dữ liệu đa dạng: thu thập dữ liệu lịch sử giá cổ phiếu VNM, dữ liệu tài chính của

công ty, dữ liệu kinh tế vĩ mô, tâm lý thị trường,

● Xử lý dữ liệu phức tạp: làm sạch, chuẩn hóa, và tổng hợp dữ liệu từ nhiều nguồn khác nhau.

● Xây dựng mô hình dự đoán chính xác: áp dụng các thuật toán học máy tiên tiến như mạngnơ-ron nhân tạo, học sâu, để dự đoán xu hướng giá cổ phiếu VNM với độ chính xác cao.

Dự án "Dự đoán xu hướng giá cổ phiếu công ty Vinamilk" có thể mang lại nhiều lợi ích thiết thực:

● Hỗ trợ nhà đầu tư: cung cấp công cụ hỗ trợ nhà đầu tư đưa ra quyết định đầu tư sáng suốt về cổ phiếu Vinamilk, giảm thiểu rủi ro và tối ưu hóa lợi nhuận.

● Nâng cao hiệu quả thị trường: góp phần tạo ra thị trường chứng khoán minh bạch, hiệu quả và sôi động hơn.

● Thúc đẩy ứng dụng Big Data: mở ra tiềm năng ứng dụng Big Data vào lĩnh vực tài chính, hỗ trợ các hoạt động đầu tư, phân tích thị trường và quản lý rủi ro.

1.2 Hướng tiếp cận

1.2.1 Xác định mục tiêu và phạm vi nghiên cứu:

● Mục tiêu: Xây dựng mô hình dự đoán xu hướng giá cổ phiếu Vinamilk với độ chính xác

cao, hỗ trợ nhà đầu tư đưa ra quyết định đầu tư sáng suốt.

Trang 7

● Phạm vi: Phân tích dữ liệu lịch sử giá cổ phiếu VNM, dữ liệu tài chính của công ty, dữ

liệu kinh tế vĩ mô và các yếu tố thị trường liên quan.

1.2.2 Mô hình bài toán

Hình 1: Mô tả bài toán

1.2.3 Dữ liệu cổ phiếu của Vinamilk

Dữ liệu cổ phiếu Vinamilk (VNM) từ 2013-2023 là một tập dữ liệu bao gồm thông

tin lịch sử về giá cổ phiếu VNM, khối lượng giao dịch, giá trị giao dịch và các yếu tố thị trường liên quan trong giai đoạn từ năm 2013 đến năm 2023 Dữ liệu này được thu thập từ SởGiao dịch Chứng khoán TP.HCM (HOSE) và các nguồn uy tín khác.

Nội dung:

● Giá Mở: Giá mà cổ phiếu VNM bắt đầu giao dịch trong một phiên giao dịch.● Giá Cao: Mức giá cao nhất mà cổ phiếu VNM đạt được trong một phiên giao dịch.● Giá Thấp: Mức giá thấp nhất mà cổ phiếu VNM đạt được trong một phiên giao dịch.● Giá Đóng: Giá mà cổ phiếu VNM kết thúc giao dịch trong một phiên giao dịch.

● Giá Đóng Điều chỉnh: Giá đóng sau khi điều chỉnh cho các sự kiện như chia cổ tức, chia

cổ phiếu và phát hành cổ phiếu mới.

● Khối lượng: Tổng số cổ phiếu VNM được giao dịch trong một phiên giao dịch.● Ngày: Thời gian giao dịch cổ phiếu

1.2.4 Thu thập dữ liệu:Nguồn dữ liệu:

● Trang web của Vinamilk (https://www.vinamilk.com.vn/)

● Dữ liệu từ: https://vn.investing.com/equities/vietnam-dairy-products-jsc

1.3 Ngôn ngữ và thư viện ứng dụng Ngôn ngữ lập trình: Python

Trang 8

Thư viện:

● pandas: Dùng để đọc và thao tác dữ liệu dạng bảng.● numpy: Dùng để xử lý dữ liệu số và ma trận.● matplotlib.pyplot: Dùng để vẽ biểu đồ và đồ thị.

● sklearn.preprocessing.MinMaxScaler: Dùng để chuẩn hóa dữ liệu vào khoảng [0, 1].● tensorflow.keras.models: Dùng để xây dựng và huấn luyện mô hình học sâu.

● tensorflow.keras.callbacks.ModelCheckpoint: Dùng để lưu lại mô hình có hiệu suất tốt

nhất trong quá trình huấn luyện.

● keras.layers.LSTM: Dùng để xây dựng mô hình mạng nơ-ron nhân tạo kiểu LSTM

(Long Short-Term Memory) - phù hợp cho các bài toán dự đoán chuỗi thời gian.

● keras.layers.Dropout: Dùng để áp dụng kỹ thuật Dropout nhằm tránh học tủ trong mô

● keras.layers.Dense: Dùng để xây dựng lớp đầu ra của mô hình.

● sklearn.metrics.r2_score: Dùng để tính toán hệ số xác định R^2, đánh giá mức độ phù

hợp của mô hình.

● sklearn.metrics.mean_absolute_error: Dùng để tính toán sai số tuyệt đối trung bình

● sklearn.metrics.mean_absolute_percentage_error: Dùng để tính toán sai số tuyệt đối

phần trăm trung bình (MAPE)

Trang 9

CHƯƠNG II CƠ SỞ LÝ THUYẾT 2.1 Thư viện Pandas

Pandas là thư viện Python mã nguồn mở được ưa chuộng trong lĩnh vực khoa học dữ liệu Nhờ khả năng xử lý và phân tích dữ liệu dạng bảng hiệu quả, Pandas được sử dụng rộng rãi trong cả nghiên cứu lẫn phát triển ứng dụng Pandas là cấu trúc dữ liệu DataFrame linh hoạt, cung cấp nhiều chức năng thao tác và xử lý dữ liệu mạnh mẽ Nhờ vậy, Pandas giúp người dùng dễ dàng khai thác thông tin từ các tập dữ liệu lớn.

Khả năng đọc và thao tác dữ liệu:

Pandas cung cấp nhiều hàm và phương thức để đọc dữ liệu từ các nguồn khác nhau, bao gồm: Tệp tin văn bản (CSV, Excel, JSON), Cổng dữ liệu SQL, Cấu trúc dữ liệu Python

Sau khi đọc dữ liệu, Pandas cho phép người dùng thực hiện nhiều thao tác trên dữ liệu, chẳng hạn như:

● Lọc dữ liệu theo điều kiện● Sắp xếp dữ liệu

● Thực hiện phép tính trên dữ liệu● Ghép nối dữ liệu từ nhiều nguồn● Thay đổi cấu trúc dữ liệu

Phân tích dữ liệu:

Pandas tích hợp nhiều hàm và phương thức để phân tích dữ liệu, bao gồm:● Tính toán thống kê mô tả (tâm trung bình, trung vị, độ lệch chuẩn, v.v.)● Phân tích thống kê nâng cao (phân phối t-test, hồi quy tuyến tính, v.v.)● Hình dung dữ liệu (biểu đồ, đồ thị, v.v.)

2.2 Thư viện Numpy

NumPy (viết tắt của Numerical Python) là thư viện Python mã nguồn mở, chuyên

dụng cho việc xử lý dữ liệu số và ma trận Nó cung cấp nhiều tính năng mạnh mẽ, giúp ngườidùng thao tác với dữ liệu hiệu quả một cách dễ dàng.

Khả năng chính của NumPy:

● Tạo và thao tác với mảng đa chiều● Thực hiện các phép toán toán học● Tối ưu hóa hiệu suất

● Tích hợp với các thư viện khoa học dữ liệu khác

Ứng dụng của NumPy:

Trang 10

● Xử lý ảnh (lọc ảnh, biến đổi ảnh, phân tích ảnh)

● Học máy (tính toán và thao tác dữ liệu huấn luyện/thử nghiệm)● Phân tích dữ liệu khoa học (vật lý, hóa học, kỹ thuật, tài chính)● Phát triển trò chơi (mô phỏng chuyển động, xử lý va chạm)

2.3 Thư viện Keras.Layers LSTM

Lớp Keras.Layers LSTM được sử dụng để xây dựng mô hình mạng nơ-ron nhân tạo

kiểu LSTM (Long Short-Term Memory) trong TensorFlow/Keras Mạng LSTM là một loại mạng nơ-ron tuần hoàn (RNN) được thiết kế để xử lý các chuỗi dữ liệu phụ thuộc theo thời gian, đặc biệt hiệu quả cho các bài toán dự đoán chuỗi thời gian.

Kỹ thuật Dropout là một phương pháp chính quy hóa trong học máy nhằm giảm

thiểu tình trạng học tủ (overfitting) trong mô hình mạng nơ-ron nhân tạo Dropout hoạt động bằng cách ngẫu nhiên loại bỏ một tỷ lệ phần trăm các nơ-ron trong mỗi lớp trong quá trình huấn luyện, buộc mô hình phải học tập dựa vào nhiều nơ-ron khác nhau thay vì phụ thuộc vào một vài nơ-ron cụ thể.

Lớp keras.layers.Dropout được sử dụng để áp dụng kỹ thuật Dropout trong

TensorFlow/Keras Nó cho phép bạn xác định tỷ lệ phần trăm nơ-ron sẽ bị loại bỏ trong mỗi lớp.

Trang 11

Cách sử dụng:

from tensorflow import keras

from tensorflow.keras.layers import Dropoutdropout_layer = Dropout(rate=0.5)

● rate: Tỷ lệ phần trăm nơ-ron sẽ bị loại bỏ (thông thường từ 0.2 đến 0.5).

Lợi ích:

● Giảm thiểu học tủ

● Cải thiện khả năng khái quát hóa của mô hình● Tăng cường khả năng chống nhiễu

2.5 Thư viện keras.layers.Dense

Lớp keras.layers.Dense được sử dụng để xây dựng lớp đầu ra của mô hình mạng

nơ-ron nhân tạo trong TensorFlow/Keras Lớp này thực hiện phép nhân ma trận giữa đầu vào và ma trận trọng số, sau đó áp dụng hàm kích hoạt để tạo ra đầu ra.

Cách sử dụng:

from tensorflow import keras

from tensorflow.keras.layers import Dense

dense_layer = Dense(units=10, activation='softmax')● units: Số lượng nơ-ron trong lớp Dense.

● activation: Hàm kích hoạt được áp dụng cho đầu ra của lớp (ví dụ: 'relu', 'sigmoid', 'softmax').

Lớp Dense thường được sử dụng như lớp đầu ra cuối cùng của mô hình để:

● Phân loại đa lớp: (ví dụ: phân loại ảnh thành 10 lớp khác nhau)● Hồi quy tuyến tính: (ví dụ: dự đoán giá trị liên tục)

Trang 12

2.6 Mô hình LSTM

Hình 2: Mô hình LSTM

Mô hình LSTM (Long Short-Term Memory) hay còn gọi là mạng nơ-ron ngắn hạn dài hạn là một loại mạng nơ-ron tuần hoàn (RNN) được phát triển để giải quyết vấn đề biến mất gradient (vanishing gradient problem) trong các mạng RNN thông thường Vấn đề biến mất gradient hạn chế khả năng học tập các phụ thuộc dài hạn trong dữ liệu tuần tự LSTM sử dụng cơ chế tế bào nhớ với các đơn vị gating để điều khiển lưu lượng thông tin, giúp mạng cóthể học tập và lưu giữ thông tin trong thời gian dài.

Cấu trúc của một tế bào LSTM:

3 Trạng thái tế bào (Cell State): Lưu trữ bộ nhớ dài hạn của mạng.

4 Cổng ra (Output Gate): Xác định thông tin từ trạng thái tế bào được truyền đến tế bào

tiếp theo và lớp đầu ra.

Hoạt động của các đơn vị LSTM:

Hoạt động bên trong một đơn vị LSTM liên quan đến việc cập nhật cổng quên (f_t), cổng vào(i_t), trạng thái tế bào (C_t) và cổng ra (o_t) tại mỗi bước thời gian (t):

Trang 13

Dự báo chuỗi thời gian: Dự đoán các giá trị trong tương lai của dữ liệu chuỗi thời gian,

chẳng hạn như giá cổ phiếu, kiểu thời tiết hoặc số liệu bán hàng.

Xử lý ngôn ngữ tự nhiên (NLP): Dịch máy, tóm tắt văn bản, phân tích tình cảm và trả

lời câu hỏi.

Nhận dạng giọng nói: Chuyển đổi ngôn ngữ nói thành văn bản.

Tạo nhạc: Sáng tác các tác phẩm âm nhạc mới hoặc tạo nhạc dựa trên phong cách hoặc

thể loại cụ thể.

2.7 Các phương pháp đánh giá hiệu suất mô hình

Có nhiều phương pháp khác nhau để đánh giá hiệu suất mô hình dự đoán giá cổ phiếu.Một số phương pháp phổ biến bao gồm:

● R-squared (R^2): Đây là một chỉ số thống kê đo lường mối quan hệ tuyến tính giữa giá

trị dự đoán và giá trị thực tế Giá trị R^2 càng cao, mô hình dự đoán càng chính xác.

● Mean absolute error (MAE): Đây là sai số trung bình tuyệt đối giữa giá trị dự đoán và

giá trị thực tế MAE càng nhỏ, mô hình dự đoán càng chính xác.

● Mean absolute percentage error (MAPE): Đây là sai số phần trăm trung bình tuyệt đối

giữa giá trị dự đoán và giá trị thực tế MAPE được sử dụng khi giá trị thực tế có thể có giátrị lớn, giúp so sánh hiệu suất mô hình trên các tập dữ liệu có mức giá khác nhau.

● Root mean squared error (RMSE): Đây là sai số bình phương trung bình giữa giá trị dự

đoán và giá trị thực tế RMSE nhạy cảm với các sai số lớn hơn, giúp đánh giá mức độ ảnhhưởng của các sai số lớn đối với hiệu suất mô hình.

Cách sử dụng các phương pháp đánh giá:

Trang 14

● R-squared: Tính toán R^2 bằng cách sử dụng công thức sau:

R^2 = 1 - (sum((y_true - y_pred)^2) / sum((y_true - mean(y_true))^2))

Trong đó:

 y_true là giá trị thực tế. y_pred là giá trị dự đoán.

 mean(y_true) là giá trị trung bình của giá trị thực tế.

 Giá trị R^2 nằm trong khoảng [0, 1] Giá trị R^2 càng gần 1, mô hình dự đoán càng chính xác.

● MAE: Tính toán MAE bằng cách sử dụng công thức sau:

MAE = mean(abs(y_true - y_pred))

Trong đó:

 y_true là giá trị thực tế. y_pred là giá trị dự đoán. abs() là hàm giá trị tuyệt đối.

 Giá trị MAE càng nhỏ, mô hình dự đoán càng chính xác.

● MAPE: Tính toán MAPE bằng cách sử dụng công thức sau:

MAPE = mean(abs((y_true - y_pred) / y_true)) * 100

Trong đó:

 y_true là giá trị thực tế. y_pred là giá trị dự đoán. abs() là hàm giá trị tuyệt đối.

 Giá trị MAPE càng nhỏ, mô hình dự đoán càng chính xác.

● RMSE: Tính toán RMSE bằng cách sử dụng công thức sau:

RMSE = sqrt(mean((y_true - y_pred)^2))

Trong đó:

 y_true là giá trị thực tế. y_pred là giá trị dự đoán. sqrt() là hàm căn bậc hai.

 Giá trị RMSE càng nhỏ, mô hình dự đoán càng chính xác.

Lựa chọn phương pháp đánh giá:

Trang 15

Việc lựa chọn phương pháp đánh giá phù hợp phụ thuộc vào mục đích đánh giávà đặc điểm của tập dữ liệu.

● R-squared: Thích hợp khi ta muốn đánh giá mối quan hệ tuyến tính giữa giá trị dự đoán

và giá trị thực tế.

● MAE: Thích hợp khi ta muốn đánh giá mức độ sai số trung bình giữa giá trị dự đoán và

giá trị thực tế.

● MAPE: Thích hợp khi ta muốn đánh giá mức độ sai số phần trăm trung bình giữa giá trị

dự đoán và giá trị thực tế, đặc biệt khi giá trị thực tế có thể có giá trị lớn

Trang 16

CHƯƠNG III BỘ DỮ LIỆU ĐỀ XUẤT 3.1 Thông tin dữ liệu

Nguồn dữ liệu được lấy từ trang web Investing ( https://vn.investing.com/) Đây là mộttrang web cung cấp thông tin và công cụ đầu tư hàng đầu cho nhà đầu tư toàn cầu Trang webcung cấp dữ liệu thị trường theo thời gian thực, tin tức và phân tích, công cụ biểu đồ, lịchkinh tế và diễn đàn Website được coi là nguồn tài nguyên hữu ích giúp người dùng đưa raquyết định đầu tư sáng suốt

Địa chỉ dữ liệu: https://vn.investing.com/equities/vietnam-dairy-products-jsc

Đây là dữ liệu lịch sử giá cổ phiếu của công ty Cổ phần sữa Việt Nam (VNM) lấy trongkhoảng thời gian từ 10-07-2013 tới 21-07-2023.

Dựa trên những thông tin này, nhà đầu tư có thể phân tích xu hướng tăng/giảm giáhoặc sự đi ngang của cổ phiếu thông qua sự thay đổi của giá và khối lượng giao dịch Họcũng có thể so sánh hiệu suất của nhiều cổ phiếu khác nhau dựa trên % thay đổi giá Từnhững phân tích này, nhà đầu tư có thể đưa ra các quyết định giao dịch như mua, bán haynắm giữ cổ phiếu một cách khoa học và hiệu quả hơn Đây là công cụ quan trọng giúp nhàđầu tư đưa ra các quyết định giao dịch chứng khoán một cách khoa học và hiệu quả hơn.Test thử 5 dòng dữ liệu đầu tiên

Để kiểm tra xem dữ liệu có chạy không thì chúng ta sử dụng đoạn code như sau

Hình 3: Code hiển thị 5 dòng dữ liệu

Và kết quả như sau:

Trang 17

Hình 4: 5 dòng dữ liệu đầu tiên của dataset

Các kiểu dữ liệu của thuộc tính trong dataset

Để kiểm tra các kiểu sử liệu của thuộc tính trong dataset, đoạn code sau đây sẽ được sử dụng:

Hình 5: Code xác định các kiểu dữ liệu của dataset

Và kết quả:

Trang 18

Hình 6: Kết quả kiểm tra kiểu dữ liệu của thuộc tính trong dataset

Kết quả kiểm tra cho thấy bộ dữ liệu lịch sử giá cổ phiếu của VNM có các đặc điểm sau:

Số lượng mẫu dữ liệu: Bộ dữ liệu chứa 2505 mẫu, được đánh chỉ số từ 0 đến 2504.

Số lượng cột: Có tổng cộng 5 cột dữ liệu.

Tên và kiểu dữ liệu các cột:

Ngày: Kiểu dữ liệu datetime64[ns], có nghĩa là lưu trữ thông tin về ngày tháng.

Đóng cửa, Mở cửa, Cao nhất, Thấp nhất: Các cột này đều có kiểu dữ liệu object Điều

này cho thấy các giá trị trong các cột này không phải là số thực (float) mà có thể là chuỗi

(string) chứa các ký tự đặc biệt hoặc có định dạng không chuẩn.

Dữ liệu không bị thiếu: Tất cả các cột đều có 2505 giá trị không null, nghĩa là không có

giá trị nào bị thiếu trong bộ dữ liệu.

Bộ nhớ sử dụng: Bộ dữ liệu sử dụng khoảng 98.0+ KB bộ nhớ.

Kiểm tra mức độ hoàn thiện của dataset

Đoạn code được sử dụng để kiểm tra mức độ hoàn thiện của dataset như sau:

Hình 7: Code kiểm tra mức độ hoàn thiện của dataset

Trang 19

Và kết quả:

Hình 8: Mô tả dataset

Bảng mô tả trên cung cấp thông tin về cột dữ liệu Ngày trong dataset lịch sử giá cổ

phiếu của VNM Cột này chứa thông tin về thời gian, cụ thể là ngày giao dịch chứng khoán.Dưới đây là mô tả chi tiết về các thuộc tính của cột dữ liệu này:

● Số lượng mẫu (count): Có tổng cộng 2505 ngày giao dịch trong dataset.

● Giá trị trung bình (mean): Ngày trung bình là 17-07-2018, lúc 16:17:14 Tuy nhiên, giá

trị này không mang nhiều ý nghĩa thực tiễn vì ngày tháng không thể tính trung bình theocách thông thường.

● Giá trị nhỏ nhất (min): Ngày giao dịch sớm nhất trong dataset là 10-07 -2013.

● Trung vị (50%): 50% số ngày giao dịch nằm trước ngày 19-07-2018, và 50% nằm sau

ngày này.

Trang 20

● Các điểm phân vị (25% và 75%): 25% số ngày giao dịch nằm trước ngày 13-01-2016

và 75% số ngày giao dịch nằm trước ngày 14-01-2021 Điều này cho thấy dữ liệu có sựphân bố không đều, với mật độ ngày giao dịch tăng dần theo thời gian.

● Giá trị lớn nhất (max): Ngày giao dịch gần đây nhất trong dataset là 21 -07-2023.

=> Dữ liệu trong cột Ngày cho thấy dữ liệu lịch sử giá cổ phiếu của VNM bao gồm các ngày

giao dịch từ 10-07-2013 đến 21-07-2023, với mật độ ngày giao dịch tăng dần theo thời gian.

Trang 21

CHƯƠNG IV THỰC NGHIỆM VÀ PHÂN TÍCH4.1 Tiền xử lý dữ liệu

Bước này sẽ giúp bộ dữ liệu của chúng ta được chuẩn hóa định dạng Bộ dữ liệu hiệntại còn tồn tại ở nhiều định dạng khác nhau như chuỗi, số nguyên, số thực, v.v Tiền xử lý dữliệu giúp đảm bảo rằng tất cả các dữ liệu được đưa về định dạng thích hợp cho việc phân tíchvà xử lý tiếp theo.

Hình 9: Code tiền xử lý dữ liệu

Nhóm thực hiện các bước sau:

● Chuyển đổi cột "Ngày" sang dạng datetime: Sử dụng phương thức `pd.to_datetime()` từthư viện Pandas để chuyển đổi dữ liệu trong cột "Ngày" từ chuỗi sang định dạngdatetime Định dạng datetime này sẽ giúp làm việc với dữ liệu thời gian một cách hiệuquả hơn.

● Sắp xếp lại dữ liệu theo thứ tự thời gian: Sử dụng phương thức `sort_values()` từ thư việnPandas để sắp xếp lại DataFrame theo cột "Ngày" Điều này giúp có được dữ liệu đượcsắp xếp theo thứ tự thời gian từ trước đến sau.

● Chuyển đổi định dạng các cột giá thành số thực: Sử dụng phương thức `str.replace()` đểloại bỏ dấu phẩy trong các giá trị trong cột "Đóng cửa", "Mở cửa", "Cao nhất", "Thấpnhất", sau đó sử dụng `astype(float)` để chuyển đổi các giá trị sang dạng số thực (float).Điều này cần thiết để có thể thực hiện các phép tính toán hoặc vẽ biểu đồ dựa trên các giátrị này một cách chính xác.

4.2 Trực quan hóa dữ liệu

Trực quan hóa dữ liệu là một bước rất quan trọng trong quá trình phân tích và hiểu dữliệu Trực quan hóa dữ liệu giúp chúng ta nhìn vào dữ liệu một cách trực quan và dễ hiểuhơn Thay vì phải đọc hàng loạt các con số, chúng ta có thể nhìn vào biểu đồ để nắm bắt

Trang 22

thông tin một cách nhanh chóng Biểu đồ cho phép chúng ta nhận ra các xu hướng, mô hìnhvà biến động trong dữ liệu một cách trực quan Điều này giúp chúng ta hiểu rõ hơn về cáchmà dữ liệu thay đổi theo thời gian hoặc các yếu tố khác Trực quan hóa dữ liệu còn cho phépchúng ta so sánh và phân tích các quan hệ giữa các biến một cách dễ dàng Bằng cách đặt cácbiến lên cùng một biểu đồ, chúng ta có thể thấy được mối tương quan hoặc khác biệt giữachúng Biểu đồ giúp chúng ta trình bày thông tin một cách rõ ràng và hấp dẫn hơn Điều nàylàm cho dữ liệu dễ hiểu hơn cho người đọc và người xem Trực quan hóa dữ liệu giúp chúngta đưa ra quyết định dựa trên thông tin số liệu một cách chính xác và đáng tin cậy hơn Việcthấy được dữ liệu trên biểu đồ giúp chúng ta đưa ra những quyết định thông minh và hợp lýhơn.

4.2.1 Biểu đồ giá cổ phiếu khi kết phiên của Vinamilk qua các năm

Hình 10: Code tạo biểu đồ giá kết phiên của Vinamilk qua các năm

Nhóm sử dụng phương thức `dt.year` của đối tượng datetime trong Pandas để tríchxuất thông tin về năm từ cột "Ngày" Thông tin về năm được lưu vào một cột mới có tên là"Năm" trong DataFrame `df` Tạo một figure với kích thước 10x5 inches bằng`plt.figure(figsize=(10, 5))` Sử dụng `plt.plot()` để vẽ biểu đồ giá đóng cửa theo thời gian,với trục x là cột "Ngày" và trục y là cột "Đóng cửa" Đặt nhãn cho trục x là "Năm" và trục ylà "Giá đóng cửa" bằng `plt.xlabel()` và `plt.ylabel()` Đặt tiêu đề cho biểu đồ bằng`plt.title()` Thêm chú thích cho đường vẽ bằng `plt.legend()` để biểu thị là "Giá đóng cửa".

Trang 23

Sử dụng `YearLocator` để chỉ định vị trí của các năm trên trục x Sử dụng `DateFormatter` đểđịnh dạng hiển thị của các năm là chuỗi năm Thêm `MonthLocator` để xác định vị trí củacác tháng trên trục x Sử dụng các phương thức `set_major_locator()` và`set_major_formatter()` để áp dụng các định dạng và vị trí này cho trục x của biểu đồ Sửdụng `plt.tight_layout()` để loại bỏ các thành phần trùng lặp và tạo biểu đồ sao cho hợp lý.Cuối cùng, sử dụng `plt.show()` để hiển thị biểu đồ ra màn hình.

Hình 11: Biểu đồ giá kết phiên của Vinamilk qua các năm

Xu hướng chung:

Giá cổ phiếu VNM có xu hướng tăng trong giai đoạn này.

Giá cổ phiếu có biến động mạnh trong từng năm, đặc biệt là trong giai đoạn 2017 - 2020.

Giá cổ phiếu đạt đỉnh vào năm 2018 với mức giá hơn 149.000 đồng/cổ phiếu và đạt đáy

vào năm 2012 với mức giá hơn 32.000 đồng/cổ phiếu.

Phân tích theo từng giai đoạn:

Giai đoạn 2014 - 2016: Giá cổ phiếu VNM có xu hướng tăng nhẹ, với mức tăng trưởng

trung bình khoảng 10% mỗi năm.

Giai đoạn 2017 - 2020: Giá cổ phiếu VNM có biến động mạnh, với mức tăng trưởng

cao nhất vào năm 2017 (hơn 70%) và mức giảm mạnh nhất vào năm 2020 (hơn 30%)

Trang 24

Biến động này chủ yếu do ảnh hưởng của các yếu tố kinh tế vĩ mô, như chiến tranh thương mại Mỹ - Trung Quốc và đại dịch COVID-19.

Giai đoạn 2021 - 2024: Giá cổ phiếu VNM có xu hướng tăng ổn định, với mức tăng

trưởng trung bình khoảng 15% mỗi năm.

4.2.2 Biểu đồ thể hiện mối tương quan giữa các biến

Hình 12: : Code vẽ biểu đồ Scatter matrix

Nhóm sử dụng biểu đồ scatter matrix - một công cụ hữu ích để hiểu mối quan hệ giữacác cặp biến trong bộ dữ liệu Mỗi điểm trên biểu đồ thể hiện một cặp giá trị từ hai biến khácnhau, và việc phân tán của các điểm có thể giúp phát hiện các mô hình, xu hướng hoặc sựtương quan giữa chúng `pd.plotting.scatter_matrix()` được nhóm sử dụng để vẽ biểu đồscatter matrix từ DataFrame `df` với kích thước 12x8 inches Mỗi ô trong ma trận sẽ chứamột biểu đồ scatter plot cho mỗi cặp biến trong DataFrame Cuối cùng, `plt.show()` được sửdụng để hiển thị biểu đồ scatter matrix ra màn hình Điều này sẽ hiển thị một ma trận các biểuđồ scatter plot, mỗi cặp biến sẽ có một biểu đồ riêng, và các trục của các biểu đồ sẽ hiển thịcác giá trị của các biến tương ứng.

Trang 25

Hình 13: Biểu đồ Scatter Matrix thể hiện mối tương quan giữa các biến

● Mức cao nhất và mức thấp nhất: Có mối tương quan dương mạnh Điều này có nghĩa làkhi mức cao nhất tăng, mức thấp nhất cũng có xu hướng tăng và ngược lại.

● Mức cao nhất và mở cửa: Có mối tương quan dương trung bình Điều này có nghĩa là khimức cao nhất tăng, giá mở cửa cũng có xu hướng tăng, nhưng mức độ tăng không mạnhbằng mức thấp nhất.

● Mức thấp nhất và mở cửa: Có mối tương quan dương trung bình Điều này có nghĩa là khimức thấp nhất tăng, giá mở cửa cũng có xu hướng tăng, nhưng mức độ tăng không mạnhbằng mức cao nhất.

● Thời gian (năm) và mức cao nhất: Có mối tương quan dương yếu Điều này có nghĩa làtheo thời gian, mức cao nhất có xu hướng tăng, nhưng mức độ tăng không mạnh.

● Thời gian (năm) và mức thấp nhất: Có mối tương quan dương yếu Điều này có nghĩa làtheo thời gian, mức thấp nhất có xu hướng tăng, nhưng mức độ tăng không mạnh.

● Thời gian (năm) và mở cửa: Có mối tương quan dương yếu Điều này có nghĩa là theothời gian, giá mở cửa có xu hướng tăng, nhưng mức độ tăng không mạnh.

Biểu đồ Scatter Matrix cho thấy mối quan hệ tương quan dương mạnh giữa giá đóngcửa, mức cao nhất và mức thấp nhất Điều này cho thấy rằng ba biến này có ảnh hưởng lẫnnhau và có thể được sử dụng để dự đoán giá trị của nhau Mối quan hệ giữa giá đóng cửa vàgiá mở cửa cũng tương quan dương, nhưng mức độ tương quan yếu hơn Mối quan hệ giữagiá đóng cửa và thời gian (năm) cũng tương quan dương, nhưng mức độ tương quan yếu nhất.

Trang 26

4.2.3 Biểu đồ Boxplot

Nhóm sử dụng biểu đồ boxplot để có một cái nhìn tổng quan về phân phối của dữliệu Chúng ta có thể xem được phần lớn dữ liệu tập trung ở đâu và phạm vi của dữ liệu lànhư thế nào.

Hình 14: Code tạo biểu đồ Boxplot

Đầu tiên, thư viện seaborn được nhóm import để sử dụng chức năng vẽ biểu đồBoxplot DataFrame `df_boxplot` được tạo bằng cách chọn các cột "Đóng cửa", "Mở cửa","Cao nhất", "Thấp nhất" từ DataFrame gốc `df` Bằng cách sử dụng phương thức`astype(float)`, các giá trị trong DataFrame `df_boxplot` được chuyển đổi thành dạng số thực.Sử dụng `sns.boxplot()` để vẽ biểu đồ Boxplot từ DataFrame `df_boxplot` Đặt kích thướccủa biểu đồ bằng `plt.figure(figsize=(10, 6))` Đặt tiêu đề cho biểu đồ bằng `plt.title()` Đặtnhãn cho trục x và trục y bằng `plt.xlabel()` và `plt.ylabel()` Sử dụng`plt.xticks(rotation=45)` để xoay nhãn trục x 45 độ để dễ đọc hơn Sử dụng `plt.show()` đểhiển thị biểu đồ Boxplot ra màn hình.

Ngày đăng: 28/05/2024, 12:07

Xem thêm:

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w