4. Chương 4 - Công nghệ quản trị và kinh doanh ngân hàng.pdf

TrnVit 0 views 130 slides Oct 21, 2025
Slide 1
Slide 1 of 130
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84
Slide 85
85
Slide 86
86
Slide 87
87
Slide 88
88
Slide 89
89
Slide 90
90
Slide 91
91
Slide 92
92
Slide 93
93
Slide 94
94
Slide 95
95
Slide 96
96
Slide 97
97
Slide 98
98
Slide 99
99
Slide 100
100
Slide 101
101
Slide 102
102
Slide 103
103
Slide 104
104
Slide 105
105
Slide 106
106
Slide 107
107
Slide 108
108
Slide 109
109
Slide 110
110
Slide 111
111
Slide 112
112
Slide 113
113
Slide 114
114
Slide 115
115
Slide 116
116
Slide 117
117
Slide 118
118
Slide 119
119
Slide 120
120
Slide 121
121
Slide 122
122
Slide 123
123
Slide 124
124
Slide 125
125
Slide 126
126
Slide 127
127
Slide 128
128
Slide 129
129
Slide 130
130

About This Presentation

Bài giảng Công nghệ và quản trị ngân hàng


Slide Content

1


BUH
TÀI LIỆU PHỤC VỤ KHÓA ĐÀO TẠO

Tháng 10 năm 2021
(Tài liệu lưu hành nội bộ)

2


MỤC LỤC

Chương 1 ................................................................................................................................... 5
TỔNG QUAN VỀ XU HƯỚNG NGÂN HÀNG SỐ, FINTECH VÀ ỨNG DỤNG AI
TRONG HOẠT ĐỘNG KINH DOANH NGÂN TRÊN THÊ GIỚI VÀ VIỆT NAM ..... 5
1.1 Công nghiệp 4.0 .................................................................................................................. 5
1.2 Những yếu tố cốt lõi của kỹ thuật số trong công nghiệp 4.0 .............................................. 7
1.3 Tác động của công nghiệp 4.0 đến lĩnh vực ngân hàng...................................................... 9
1.4 Thực trạng chuyển đổi số tại các ngân hàng thương mại Việt Nam ................................ 10
1.5 Thực trạng chuyển đổi số của Agribank ........................................................................... 13
1.6 Định hướng chính sách phát triển ngân hàng số ............................................................... 13
Chương 2 ................................................................................................................................. 17
FINTECH VÀ ỨNG DỤNG AI TRONG HOẠT ĐỘNG KINH DOANH NGÂN HÀNG 17
2.1 FINTECH ......................................................................................................................... 17
2.2 AI ................................................................................................................................... 19
2.2.1 AI – Trí tuệ nhân tạo ...................................................................................................... 19
2.2.2 AI trong hoạt động kinh doanh ngân hàng ..................................................................... 20
2.3 Machine learnig ................................................................................................................ 22
2.4 Fintech và AI trong thanh toán điện tử ............................................................................. 24
2.4.1 Fintech và thanh toán điện tử ......................................................................................... 24
2.4.2 AI và định danh, xác thực điện tử .................................................................................. 25
Chương 3 ................................................................................................................................. 32
BIG DATA VÀ PHÂN TÍCH DỮ LIỆU MẠNG KHÁCH HÀNG ................................... 32
3.1 Phân tích dữ liệu lớn ......................................................................................................... 32
3.2 Xử lý dữ liệu lớn ............................................................................................................... 33
3.3 Lợi ích của phân tích dữ liệu lớn ..................................................................................... 34
3.4 Các loại phân tích dữ liệu lớn ........................................................................................... 35
3.5 Các công cụ hàng đầu được sử dụng trong phân tích dữ liệu lớn .................................... 36
3.6 Cơ sở dữ liệu và quan hệ liên kết ..................................................................................... 37
3.7 Thống kê mô tả và trực quan hóa ..................................................................................... 38
3.8 Phân tích RFM .................................................................................................................. 40
3.8.1 Khái niệm RFM ......................................................................................................... 40
3.8.2 Qui trình triển khai phân tích rfm ............................................................................ 41
3.8.3 Ví dụ .......................................................................................................................... 42

3

3.8.4 Lợi ích của phân tích rfm ........................................................................................... 44
Chương 4 ................................................................................................................................. 45
MACHINE LEARNING VÀ CÁC ỨNG DỤNG ................................................................ 45
4.1 Machine learning – máy học ............................................................................................ 45
4.1.1 Khái niệm ................................................................................................................... 45
4.1.2 Phân loại Machine learning ....................................................................................... 46
4.1.3 Một số khái niệm cơ bản ............................................................................................ 47
4.1.4 Ứng dụng của Machine learning ................................................................................ 48
4.2 Một số ứng dụng machine learning trong ngân hàng ....................................................... 49
4.2.1 Phân tích và dự báo vỡ nợ bằng machine learning .................................................... 49
4.2.2 Phân tích, nhận diện và cảnh báo gian lận thẻ tín dụng bằng Machine Learning ..... 53
4.2.3 Hệ thống khuyến nghị sản phẩm và dịch vụ .............................................................. 57
4.2.4 Ứng dụng machin learning trong dự báo các chỉ số kinh tế ...................................... 67
4.3 Hướng dẫn sử dụng google colab ..................................................................................... 73
4.3.1 Mở google colab ......................................................................................................... 73
4.3.2 Cài đặt GPU ................................................................................................................ 76
4.3.3 Bắt đầu code ............................................................................................................... 79
4.3.4 Lưu trữ ........................................................................................................................ 81
4.3.5 Mở một sổ tay có sẵn .................................................................................................. 82
Chương 5 ................................................................................................................................. 84
BLOCKCHAIN VÀ CÁC ỨNG DỤNG .............................................................................. 84
5.1 Giới thiệu blockchain ....................................................................................................... 84
5.1.1 Khái niệm ................................................................................................................... 84
5.1.2 Đặc điểm .................................................................................................................... 84
5.2 BITCOIN .......................................................................................................................... 86
5.2.1 Khái niệm ................................................................................................................... 86
5.2.2 Đào bitcoin ................................................................................................................. 87
5.2.3 Tài khoản bitcoin ....................................................................................................... 88
5.2.4 Giao dịch .................................................................................................................... 89
5.3 ETHREUM (ETH) ........................................................................................................... 90
5.3.1 Khái niệm ................................................................................................................... 90
5.3.2 Các điểm khác biệt cơ bản so với Bitcoin ................................................................. 91
5.3.3 Hợp đồng thông minh ................................................................................................ 92
5.3.4 Tài khoản ................................................................................................................... 92
5.4 Tài chính phi tập trung...................................................................................................... 93

4

5.4.1 Token (Stabecoin) ...................................................................................................... 93
5.4.2 Sàn giao dịch .............................................................................................................. 94
5.4.3 Tín dụng ..................................................................................................................... 95
5.5 Soạn thảo hợp đồng thông minh ....................................................................................... 96
5.5.1 Định nghĩa về hợp đồng thông minh ......................................................................... 96
5.5.2 Phân tích cấu trúc dữ liệu trên hợp đồng thông minh ................................................ 96
5.5.3 Ứng dụng trong lĩnh vực tài chính ngân hàng ........................................................... 97
5.6 Xây dựng chuỗi khối trên java ......................................................................................... 98
5.6.1 Chuẩn bị môi trường lập trình ................................................................................... 98
5.6.2 Xây dựng chuỗi khối phiên bản đầu tiên ................................................................... 98
5.1.1.1 Sơ lược về chuỗi khối ................................................................................................ 98
5.1.1.2 Xây dựng chuỗi khối phiên bản 1 – Chuỗi khối đầu tiên .......................................... 99
5.6.3 Xây dựng chuỗi khối phiên bản 2 – Chuỗi khối có khả năng ‘đào” ........................ 105
5.6.4 Xây dựng chuỗi khối phiên bản 3 – Chuỗi khối có ví ............................................. 108
5.6.5 Xây dựng ví trên chuỗi khối .................................................................................... 109
5.6.6 Giao dịch và xác thực giao dịch bằng chữ ký số ..................................................... 110
5.6.7 Xây dựng chuỗi khối phiên bản 4 ............................................................................ 115
5.6.7.1 Lưu trữ và xử lý tiền điện tử .................................................................................... 115
5.6.7.2 Đưa các giao dịch vào khối ..................................................................................... 122
5.6.7.3 Kiểm tra chuỗi khối ................................................................................................. 126

5

Chương 1
TỔNG QUAN VỀ XU HƯỚNG NGÂN HÀNG SỐ, FINTECH
VÀ ỨNG DỤNG AI TRONG HOẠT ĐỘNG KINH DOANH NGÂN HÀNG
TRÊN THẾ GIỚI VÀ VIỆT NAM

1.1 CÔNG NGHIỆP 4.0
Cách mạng công nghiệp lần thứ nhất là cuộc cách mạng trong lĩnh vực sản
xuất; là sự thay đổi cơ bản các điều kiện kinh tế xã hội, văn hóa và kỹ thuật, xuất
phát từ nước Anh sau đó lan tỏa ra toàn thế giới. Trong thời kỳ này, nền kinh tế
giản đơn, quy mô nhỏ, dựa trên lao động chân tay được thay thế bằng công
nghiệp và chế tạo máy móc quy mô lớn. Tên gọi "Cách mạng công nghiệp" thường
dùng để chỉ giai đoạn thứ nhất của nó diễn ra ở cuối thế kỷ 18 và đầu thế kỷ 19.
Cách mạng công nghiệp lần thứ hai bắt đầu vào khoảng thập kỷ 1860, khi các
tiến bộ kinh tế và kỹ thuật có được nhờ phát triển điện tín, điện thoại, đường sắt và
việc áp dụng dây chuyền sản xuất hàng loạt. Đến cuối thế kỷ 19, động lực của Cách
mạng công nghiệp lần 2 chủ yếu là động cơ đốt trong và máy móc sử dụng điện.
Năm 1914, năm bắt đầu Thế chiến thứ nhất, giai đoạn thứ hai này kết thúc.
Cách mạng Công nghiệp lần thứ ba bắt đầu khoảng 1960, khi có các tiến bộ
về hạ tầng điện tử, máy tính và công nghệ kĩ thuật số trên nền tảng là sự phát triển
của chất bán dẫn, siêu máy tính (thập niên 1960), máy tính cá nhân (thập niên 1970
và 1980) và Internet (thập niên 1990). Cho đến cuối thế kỷ 20, quá trình này cơ
bản hoàn thành nhờ những thành tựu khoa học công nghệ cao. Năm 1997, khi
cuộc khủng hoảng tài chính châu Á nổ ra là bước đánh dấu giai đoạn thứ ba kết
thúc.
Cách mạng Công nghiệp lần thứ tư

bắt đầu vào đầu thế kỷ 21, tiếp sau những
thành tựu lớn từ lần thứ 3 để lại, được hình thành trên nền tảng cải tiến của cuộc
cách mạng số, với những công nghệ mới như in 3D, robot, trí tuệ nhân tạo, Internet
of Things, S.M.A.C, công nghệ nano, sinh học, vật liệu mới,... Hiện tại cả thế giới
đang ở trong giai đoạn đầu của cuộc cách mạng này và là chiến lược bản lề cho các
nước đang phát triển tiến đến để theo kịp với xu hướng thế giới và mở ra bước
ngoặt mới cho sự phát triển của con người.

6


Cách mạng công nghiệp lần thứ tư được gọi là Công nghiệp 4.0. Công
nghiệp 4.0 tập trung vào công nghệ kỹ thuật số từ những thập kỷ gần đây lên một
cấp độ hoàn toàn mới với sự trợ giúp của kết nối thông qua Internet vạn vật, truy
cập dữ liệu thời gian thực và giới thiệu các hệ thống vật lý không gian mạng. Công
nghiệp 4.0 cung cấp một cách tiếp cận liên kết và toàn diện hơn cho sản xuất. Nó
kết nối vật lý với kỹ thuật số và cho phép cộng tác và truy cập tốt hơn giữa các bộ
phận, đối tác, nhà cung cấp, sản phẩm và con người. Công nghiệp 4.0 trao quyền
cho các chủ doanh nghiệp kiểm soát và hiểu rõ hơn mọi khía cạnh hoạt động của
họ và cho phép họ tận dụng dữ liệu tức thời để tăng năng suất, cải thiện quy trình
và thúc đẩy tăng trưởng.
Công nghiệp 4.0 cho phép các nhà máy thông minh, sản phẩm thông minh và
chuỗi cung ứng cũng thông minh, và làm cho các hệ thống sản xuất và dịch vụ trở
nên linh hoạt và đáp ứng khách hàng hơn. Các thuộc tính của hệ thống sản xuất và
dịch vụ với Công nghiệp 4.0 đã được nêu bật. Những lợi ích mà Công nghiệp 4.0
mang lại cho các doanh nghiệp đã được thảo luận. Trong tương lai, công nghiệp
4.0 dự kiến sẽ còn phát triển mạnh mẽ hơn nữa và do đó các doanh nghiệp cần sẵn
sàng để chuẩn bị cho một sự đổi mình liên tục thể cập nhật các xu hướng hiện đại
sắp tới...
Kinh doanh 4.0 là môi trường kinh doanh toàn cầu được tạo ra bởi cuộc cách
mạng công nghiệp lần thứ tư và công nghiệp 4.0. Kinh doanh 4.0 vượt ra ngoài các
lĩnh vực công nghiệp và sản xuất để bao gồm và ảnh hưởng đến tất cả các ngành
công nghiệp, từ dịch vụ tài chính và chuyên nghiệp đến chăm sóc sức khỏe và hàng
tiêu dùng. Dưới sự phát triển bùng nổ của thời đại Internet, công nghiệp 4.0 trong

7

thời đại này đã tạo ra những phát minh thay đổi hoàn toàn cách các doanh nghiệp
vận hành thông qua các công nghệ.

1.2 NHỮNG YẾU TỐ CỐT LÕI CỦA KỸ THUẬT SỐ TRONG CÔNG
NGHIỆP 4.0
• Big Data (Dữ liệu lớn) cho phép con người có thể thu thập, chứa đựng được
một lượng dữ liệu khổng lồ. Đối với marketing trong doanh nghiệp, người ta
có thể thu thập được một lượng lớn thông tin bao gồm thông tin cá nhân của
từng khách hàng. Điều này giúp doanh nghiệp nhận ra các xu hướng, nhu cầu,
mong muốn của người tiêu dùng một cách hiệu quả, và từ đó giúp doanh nghiệp
có thể tạo ra những chiến lược đúng đắn và hiệu quả trong mỗi giai đoạn.
• Internet of Things (vạn vật kết nối) là sự kết hợp của internet, công nghệ vi
cơ điện tử và công nghệ không dây. Internet giúp kết nối các thiết bị hỗ trợ từ
công việc tới cuộc sống thường nhật (điện thoại, máy tính, tivi, lò vi sóng thông
minh, xe ô tô tự lái,…) với con người, thu thập và truyền dữ liệu trong thời gian
thực qua một mạng internet duy nhất. Internet vạn vật (IoT) mô tả các đối tượng
vật lý hàng ngày được kết nối với internet và có thể tự nhận dạng chúng với
các thiết bị khác. Theo ước tính sẽ có hơn 24 tỷ thiết bị IoT trên Trái đất vào
năm 2020 (khoảng bốn thiết bị cho mỗi con người trên hành tinh này) và 6 tỷ
đô la sẽ chảy vào các giải pháp IoT.
• Cloud (Điện toán đám mây) cho phép người dùng có thể sử dụng các dịch vụ
lưu trữ thông tin nhờ vào các nhà cung cấp chẳng hạn như Facebook, Office
365, Youtube,… Mọi dữ liệu đề được lưu trữ, tổ chức và sắp xếp trên hệ thống
của các nhà cung cấp dịch vụ. Các doanh nghiệp có thể thực hiện các chiến
lược tiếp thị tự động hóa dựa trên nền tảng công nghệ này nhằm tiết kiệm chi
phí và tối ưu nguồn lực cho doanh nghiệp.
• Trí tuệ nhân tạo (AI) là một lĩnh vực của khoa học máy tính, tạo ra những cỗ
máy thông minh hoạt động và phản ứng như con người, đặc biệt trong các lĩnh
vực nhận dạng giọng nói, học tập, lập kế hoạch và giải quyết vấn đề. Khi AI
trở nên phổ biến hơn, các ứng dụng sử dụng nó phải hoạt động liền mạch với
các ứng dụng khác, vì vậy các nhà lãnh đạo phải sẵn sàng tạo điều kiện tích
hợp sâu hơn với các ứng dụng và dự án IoT hiện có và tương tác hệ sinh thái
phong phú hơn. Đây là công nghệ lập trình cho máy móc với các khả năng như:

8

học tập (tim kiếm, thu thập, áp dụng các quy tắc sử dụng thông tin), khả năng
lập luận (đưa ra các phân tích, dự đoán chính xác hoặc gần chính xác) và khả
năng tự sửa lỗi. Trong marketing, các doanh nghiệp đã sử dụng AI để phần tích
dữ liệu khách hàng được thu thập và lưu trữ bởi Big Data và lên các kế hoạch
kinh doanh. AI cũng phân tích các nhu cầu của khách hàng và đưa ra các gợi ý
về thương hiệu, sản phẩm phù hợp với mong muốn người tiêu dùng. Quan trọng
hơn, AI giúp hoạt động marketing của doanh nghiệp có thể thực hiện tối ưu hóa
cho từng cá nhân, đây là mục tiêu thiết yếu mà các doanh nghiệp đang hướng
đến.
• In 3D còn được gọi là sản xuất phụ gia, cho phép tạo ra các mô hình 3D vật lý
của các đối tượng. Nó được sử dụng trong phát triển sản phẩm để giảm thời
gian tung ra thị trường, rút ngắn chu kỳ phát triển sản phẩm và tạo ra các hệ
thống sản xuất và tồn kho linh hoạt hơn với chi phí thấp hơn.
• Data mining biến dữ liệu thô thành cái nhìn sâu sắc để đưa ra quyết định kinh
doanh tốt hơn. Các công ty tiếp tục đầu tư vào phân tích để tiếp cận gần hơn
với khách hàng của họ và xác định các cơ hội thị trường, nhưng họ vật lộn với
việc mở rộng hoạt động này thành sử dụng hàng ngày trên toàn tổ chức thay vì
chỉ trong một số khu vực chức năng.
• Augmented Reality (AR) là sự kết hợp màn hình, âm thanh, văn bản và hiệu
ứng do máy tính tạo ra với trải nghiệm thế giới thực của người dùng, mang đến
một cái nhìn thống nhất nhưng nâng cao về thế giới.
• Điện toán đám mây (Cloud) là việc sử dụng các dịch vụ như nền tảng phát
triển phần mềm, máy chủ, lưu trữ và phần mềm qua internet, thường được gọi
là đám mây. Chi phí thấp hơn liên quan đến việc áp dụng đám mây không có
máy chủ, xuất phát từ khả năng của nhà cung cấp để tập hợp tài nguyên giữa
các khách hàng, đã dẫn đến một số công ty đóng cửa các trung tâm dữ liệu độc
quyền.
• Tự động quy trình robotic (RPA) là quá trình tự động hóa các hoạt động kinh
doanh thông thường với các robot phần mềm được đào tạo bởi AI, có thể thực
hiện các nhiệm vụ một cách tự động. Những robot này có thể thay thế con
người cho các nhiệm vụ phổ biến như xử lý giao dịch, quản lý công nghệ thông
tin và công việc trợ lý.

9

Nguồn: Wikipedia
1.3 TÁC ĐỘNG CỦA CÔNG NGHIỆP 4.0 ĐẾN LĨNH VỰC NGÂN HÀNG
Tác động của cách mạng công nghiệp là vô cùng sâu rộng. Không chỉ làm
thay đổi đời sống con người, các cuộc cách mạng công nghiệp còn dẫn tới sự thay
đổi toàn diện hình thái kinh tế – xã hội.
Trên thế giới, dưới tác động của công nghệ, nhiều ngân hàng phải đóng cửa
một số chi nhánh và chuyển sang hệ thống sử dụng ít nhân lực hơn. Các ngân hàng
tập trung mạnh vào các sản phẩm và dịch vụ kết hợp kỹ thuật mới như ngân hàng
điện tử (internet banking) và ngân hàng qua điện thoại di động (mobile banking),
những sản phẩm/dịch vụ không đòi hỏi phát triển mạng lưới khách hàng thông qua
các chi nhánh.Sự phát triển của các dịch vụ trực tuyến đang ngày càng phổ biến
khiến nhu cầu nhân lực ngành ngân hàng giảm, và dự báo xu hướng này sẽ còn tiếp
tục tăng tốc trong thời gian tới, đặc biệt là tạo châu Âu.
Ở Việt Nam, theo số liệu của Điều tra Lao động việc làm, số lượng nhân viên
của các ngân hàng Việt Nam vẫn tiếp tục gia tăng trong những năm vừa qua, tuy
có phần chậm lại. Điều này hoàn toàn đi ngược lại xu hướng của thế giới. Tuy một
số ngân hàng đã phải cắt giảm nhân lực, nhưng số người nghỉ việc vẫn chưa đáng
kể. Tuy các sản phẩm ngân hàng kết hợp với kỹ thuật mới đã và đang được đầu tư
triển khai, và dịch vụ ngân hàng điện tử được triển khai ở tất cả các ngân hàng,
nhưng kết quả vẫn còn hạn chế. Lượng khách hàng sử dụng các sản phẩm này vẫn
chiếm phần nhỏ. Thói quen dùng tiền mặt cũng như tâm lý e ngại việc bảo mật
thông tin cá nhân, và lo sợ bị mất cắp thông tin tài khoản khi sử dụng dịch vụ
Internet banking của người dân khiến các loại hình dịch vụ này chưa phát triển
mạnh.
Tuy nhiên, tình hình có thể sẽ thay đổi trong thời gian tới. Một số ngân hàng
thương mại lớn như Vietinbank, VP Bank v.v… đang khuyến khích sử dụng các
dịch vụ của Internet banking bằng việc thưởng thêm lãi suất cho những người gửi
tiết kiệm sử dụng dịch vụ này. Sự nhập cuộc của các ngân hàng có vốn đầu tư nước
ngoài, sự gia tăng nhanh của tầng lớp trung lưu và những người trẻ tuổi dễ dàng
tiếp thu sử dụng công nghệ mới cũng thúc đẩy quá trình này.

10

1.4 THỰC TRẠNG CHUYỂN ĐỔI SỐ TẠI CÁC NGÂN HÀNG THƯƠNG
MẠI VIỆT NAM
Trước bối cảnh CMCN 4.0, xác định chuyển đối số là xu hướng tất yếu, nhiều
ngân hàng đã xem việc phát triển mô hình ngân hàng số là một mục tiêu trong chiến
lược kinh doanh, không đơn thuần là một dự án công nghệ thông tin và xây dựng
chiến lược chuyển đổi số phù hợp với đặc thù đơn vị mình. Theo kết quả khảo sát
vào tháng 9/2020 của NHNN, 95% ngân hàng đã và đang xây dựng hoặc dự tính
sẽ xây dựng chiến lược chuyển đổi số, trong đó 39% ngân hàng đã phê duyệt chiến
lược chuyển đổi số hoặc tích hợp trong chiến lược phát triển kinh doanh/công nghệ
thông tin; 42% ngân hàng đang xây dựng chiến lược chuyển đổi số (Hình 1).

Mỗi một ngân hàng cũng lựa chọn cho mình một mô hình chuyển đổi số riêng
(Hình 2). Trong chiến lược chuyển đổi số, đa số (88%) các ngân hàng đều lựa chọn
chuyển đổi số cả kênh giao tiếp khách hàng (front-end) và nghiệp vụ nội bộ (back-
end) hoặc số hóa toàn bộ; số ít ngân hàng (6%) dự kiến chỉ số hóa kênh giao tiếp
khách hàng (front-end only).
Hầu hết các ngân hàng đều ứng dụng các giải pháp kỹ thuật, công nghệ mới
như điện toán đám mây, phân tích dữ liệu, dữ liệu lớn (Big data), tự động hóa quy
trình bằng robot, trí tuệ nhân tạo (AI)/học máy (ML), Blockchain, nhận biết và định
danh khách hàng bằng eKYC,... trong các hoạt động nghiệp vụ và cung ứng sản
phẩm, dịch vụ để nâng cao hiệu quả hoạt động và tăng trải nghiệm khách hàng.

11

Trong đó, công nghệ dữ liệu, trí tuệ nhân tạo,... được các ngân hàng áp dụng nhiều
nhất và tận dụng triệt để phân tích hành vi, nhu cầu khách hàng giúp tối ưu hóa, cá
nhân hóa việc cung ứng sản phẩm, dịch vụ.


Hệ thống ngân hàng lõi và hạ tầng công nghệ được các ngân hàng chú trọng
đầu tư, nâng cấp nhằm đảm bảo hoạt động ổn định, an toàn dữ liệu, giảm thiểu rủi
ro hệ thống cũng như đáp ứng nhu cầu phát triển của các năm tiếp theo tại đơn vị.
Vấn đề an ninh, bảo mật trong thanh toán đặc biệt được coi trọng và tăng cường để
nâng cao chất lượng dịch vụ, tạo sự yên tâm cho khách hàng khi sử dụng các dịch
vụ ngân hàng điện tử (như thanh toán qua Internet, ví điện tử, điện thoại di động…).
Một số dịch vụ ngân hàng (thanh toán, nhận tiền tiết kiệm) gần như đã được
số hóa 100% cho phép khách hàng thực hiện tất cả các khâu trong quy trình sử
dụng dịch vụ thanh toán (từ mở tài khoản, chuyển tiền, thanh toán hóa đơn, nộp rút
tiền tiết kiệm thông qua tài khoản thanh toán,...), nhiều ngân hàng đã ứng dụng các
công nghệ AI, ML, Big data để đánh giá, phân loại khách hàng và quyết định giải
ngân,... giúp đơn giản hóa thủ tục, rút thời gian giải ngân, cho vay từ nhiều ngày
xuống trong ngày.
Nhiều ngân hàng đã xây dựng kho dữ liệu, hạ tầng số tập trung, chuẩn hóa,
cho phép chia sẻ, tích hợp, tạo hệ sinh thái số trải rộng nhiều ngành, lĩnh vực như:

12

hệ sinh thái Mobile Banking kết nối với dịch vụ công, tài chính, viễn thông, điện
lực, giao thông, y tế... nhờ đó, trên ứng dụng di động của ngân hàng, khách hàng
có thể sử dụng được nhiều tiện ích hơn so với giao dịch trực tiếp tại ngân hàng. Số
lượng, giá trị giao dịch ngân hàng qua kênh số của nhiều ngân hàng Việt Nam có
sự tăng trưởng vượt bậc; một số ngân hàng như TPBank, MB đã ghi nhận tỷ lệ
hơn 80% giao dịch được thực hiện trên nền tảng số. Hàng chục triệu khách hàng
đã trở thành khách hàng số của ngân hàng với việc sử dụng thường xuyên các ứng
dụng ngân hàng số trong mọi giao dịch thường nhật như: Ứng dựng ngân hàng số
VCB Digibank, VietinBank iPay, BIDV Smart Banking, eBank X của TPBank;
Omni-Channel của OCB;... Với tốc độ tăng trưởng qua các năm và xu hướng về sự
dịch chuyển hành vi của khách hàng sang các kênh số, đa số các ngân hàng đều kỳ
vọng tỷ lệ khách hàng sử dụng kênh số sẽ ngày càng gia tăng trong thời gian tới.
Giai đoạn 3 - 5 năm tới, gần 58% các ngân hàng kỳ vọng khách hàng sử dụng kênh
số đạt trên 60%.
Bên cạnh đó, các ngân hàng cũng hợp tác với các công ty Fintech và kết nối
với các hệ sinh thái số của các đơn vị thuộc các ngành, lĩnh vực khác (các công ty
Fintech, các tổ chức cung ứng hàng hóa, dịch vụ (Vingroup, Grab,...), các công ty
thương mại điện tử (Lazada, Shopee,...), các công ty viễn thông (Viettel,
VNPT,...),... để mang tới cho khách hàng những trải nghiệm dịch vụ một cách liền
mạch được cá nhân hóa, từ đó tạo sự gắn kết và đáp ứng ngày càng tốt hơn nhu cầu
của khách hàng.
Kết phát triển ngân hàng số tại Việt Nam

13

1.5 THỰC TRẠNG CHUYỂN ĐỔI SỐ CỦA AGRIBANK

Phát triển ngân hàng số của Agribank

1.6 ĐỊNH HƯỚNG CHÍNH SÁCH PHÁT TRIỂN NGÂN HÀNG SỐ
Ngành Ngân hàng Việt Nam cũng đứng trước những cơ hội và thách thức lớn,
đòi hỏi sự chuyển đổi sang mô hình kinh doanh mới, tích hợp công nghệ trong các
hoạt động và số hóa các quy trình nghiệp vụ theo hướng tự động, thông minh để
giúp các ngân hàng có thể tiến hành kinh doanh, cung ứng sản phẩm, dịch vụ dễ
dàng trên nền tảng số, khai thác dữ liệu hiệu quả để gia tăng trải nghiệm và gắn kết
khách hàng. Theo đó, chuyển đổi số trở thành xu hướng tất yếu giúp các ngân hàng
vượt lên thách thức, tạo lợi thế cạnh tranh, chủ động thích ứng và phát triển bền
vững.
Ngày 27/9/2019, Bộ Chính trị đã ban hành Nghị quyết số 52-NQ/TW về một
số chủ trương, chính sách chủ động tham gia cuộc CMCN 4.0. Căn cứ các quan
điểm, mục tiêu, chủ trương và chính sách tại Nghị quyết này, Chính phủ đã ban
hành Nghị quyết số 50/NQ-CP ngày 17/4/2020 về Chương trình hành động thực
hiện Nghị quyết 52. Thủ tướng Chính phủ cũng ban hành Chỉ thị số 01/CT-TTg
ngày 14/01/2020 về thúc đẩy phát triển doanh nghiệp công nghệ số Việt Nam và
Quyết định số 749/QĐ-TTg ngày 03/6/2020 phê duyệt “Chương trình Chuyển đổi
số quốc gia đến năm 2025, định hướng đến năm 2030”. Triển khai định hướng, chỉ
đạo của Đảng, Chính phủ, Thủ tướng Chính phủ, Thống đốc Ngân hàng Nhà nước
Việt Nam (NHNN) đã chỉ đạo, ban hành Kế hoạch hành động của Ngành triển khai

14

thực hiện các Nghị quyết, Chỉ thị nêu trên, như: Quyết định số 711/QĐ-NHNNngày
15/4/2020; Quyết định số 1238/QĐ-NHNN ngày 8/7/2020, trong đó đề ra các kế
hoạch và nhiệm vụ, giải pháp cụ thể nhằm tạo thuận lợi cho việc ứng dụng công
nghệ CMCN 4.0, thúc đẩy đổi mới sáng tạo và chuyển đổi số trong ngành Ngân
hàng. Kế hoạch, chương trình hành động của ngành Ngân hàng đặt ra yêu cầu mỗi
ngân hàng phải xây dựng và thực hiện chiến lược chuyển đổi số thích ứng với bối
cảnh CMCN 4.0 trong giai đoạn 2020 - 2025. Bên cạnh đó, Chiến lược phát triển
công nghệ thông tin ngành Ngân hàng đến năm 2025, định hướng đến năm 2030
cũng đặt ra mục tiêu cụ thể đối với toàn Ngành: “thực hiện thành công kế hoạch
chuyển đổi số trong ngành Ngân hàng”; các ngân hàng “chuẩn hóa hoạt động,
nghiệp vụ ngân hàng trên nền tảng công nghệ... phát triển các dịch vụ ngân hàng
số trên không gian mạng”.
Khuôn khổ pháp lý đối với hoạt động ngân hàng tiếp tục được xây dựng, hoàn
thiện theo hướng tạo thuận lợi cho các hoạt động chuyển đổi số. NHNN đã nghiên
cứu để sửa đổi, bổ sung hoặc ban hành văn bản pháp lý trong hoạt động ngân hàng
như: (i) Trình Chính phủ ban hành Nghị định số 87/2019/NĐ-CP ngày 14/11/2019
sửa đổi, bổ sung một số điều của Nghị định 116/2013/NĐ-CP ngày 4/10/2013 quy
định chi tiết thi hành một số điều của Luật Phòng, chống rửa tiền, trong đó có quy
định cho phép các tổ chức tài chính xác minh thông tin nhận biết khách hàng không
gặp mặt trực tiếp thông qua phương tiện điện tử (e-KYC); (ii) Ban hành Thông tư
số 16/2020/TT-NHNN ngày 4/12/2020 sửa đổi, bổ sung một số điều của Thông
tư số 23/2014/TT-NHNN ngày 19/8/2014 của Thống đốc NHNN hướng dẫn việc
mở và sử dụng tài khoản thanh toán tại tổ chức cung ứng dịch vụ thanh toán, trong
đó có nội dung hướng dẫn về việc mở tài khoản thanh toán cho khách hàng cá nhân
bằng eKYC; (iii) Ban hành chuẩn QR Code áp dụng trong thanh toán, tiêu chuẩn
thẻ Chip nội địa nhằm tăng cường khả năng kết nối, xử lý liên thông trong thanh
toán cũng như tích hợp với các ngành, lĩnh vực khác; (iv) Ban hành nhiều thông tư
hướng dẫn nghiệp vụ, hoạt động ngân hàng; (v) Nghiên cứu, trình Chính phủ dự
thảo Nghị định thay thế Nghị định số 101/2012/NĐ-CP ngày 22/11/2012 của Chính
phủ về thanh toán không dùng tiền mặt nhằm hỗ trợ, tạo điều kiện cho việc phát
triển thanh toán điện tử và đề xuất xây dựng Nghị định về Cơ chế quản lý thử
nghiệm có kiểm soát (Regulatory Sandbox) hoạt động công nghệ tài chính
(Fintech) trong lĩnh vực ngân hàng;...

15

Hạ tầng kỹ thuật và công nghệ phục vụ chuyển đổi số và đặc biệt là trong
lĩnh vực thanh toán được chú trọng đầu tư, nâng cấp: (i) Hệ thống thanh toán điện
tử liên ngân hàng hoạt động an toàn, hiệu quả, thông suốt, đáp ứng nhu cầu thanh
toán liên ngân hàng trong toàn quốc (10 tháng đầu năm 2020, tổng số lượng giao
dịch đạt 94,2 triệu món, giá trị đạt gần 67,5 triệu tỷ đồng; tăng gần 85,6% về số
lượng và 138,5% về giá trị so với cùng kỳ năm 2016); (ii) Hệ thống thanh toán bù
trừ điện tử tự động phục vụ các giao dịch bán lẻ (ACH) đã chính thức vận hành từ
tháng 7/2020 với khả năng thanh toán thời gian thực, hoạt động liên tục 24/7, xử
lý giao dịch đa kênh có khả năng tích hợp, kết nối với các ngành, lĩnh vực khác để
cung ứng các sản phẩm, dịch vụ ngân hàng trên nền tảng số; (iii) 77 tổ chức đã
triển khai dịch vụ thanh toán qua Internet và 45 tổ chức cung ứng dịch vụ thanh
toán qua điện thoại di động
1
; (iv) Đến cuối tháng 10/2020, mạng lưới ATM, POS
phủ sóng đến tất cả tỉnh, thành trên cả nước với 19.525 ATM và 280.006 POS, 30
ngân hàng và 6 tổ chức cung ứng dịch vụ trung gian thanh toán triển khai dịch vụ
thanh toán qua QR Code với hơn 90.000 điểm chấp nhận trên toàn quốc.
Kết quả phát triển ngân hàng số tài Việt Nam

Bên cạnh đó, với sự xuất hiện của các công ty khởi nghiệp công nghệ (Fintech
startup), NHNN đã kịp thời thành lập Ban Chỉ đạo và Tổ giúp việc về lĩnh vực
Fintech
2
; đồng thời, khuyến khích các ngân hàng hợp tác với các tổ chức cung ứng
dịch vụ trung gian thanh toán, công ty Fintech phát triển các giải pháp, mô hình
kinh doanh mới với sản phẩm, dịch vụ thân thiện, an toàn, tiện lợi và chi phí thấp.

16

NHNN đã thực hiện việc cấp phép cho các công ty Fintech cung ứng dịch vụ trung
gian thanh toán và đến nay đã có 39 tổ chức trung gian thanh toán được cấp phép.
Nguồn: Tạp chí ngân hàng

17

Chương 2
FINTECH VÀ ỨNG DỤNG AI
TRONG HOẠT ĐỘNG KINH DOANH NGÂN HÀNG

2.1 FINTECH
Fintech là viết tắt của từ financial technology (công nghệ tài chính), là một
thuật ngữ rộng được sử dụng chung cho tất cả các công ty sử dụng công nghệ thông
tin và viễn thông để cung cấp dịch vụ tài chính. Fintech là công nghệ mới và đổi
mới nhằm cạnh tranh với các phương pháp tài chính truyền thống trong việc cung
cấp các dịch vụ tài chính. Fintech có thể được xem như là sản phẩm của cuộc
CMCN 4.0 trong hoạt động tài chính - ngân hàng. Việc sử dụng điện thoại thông
minh cho dịch vụ ngân hàng di động, dịch vụ đầu tư và tiền mã hóa là những ví dụ
về công nghệ nhằm làm cho các dịch vụ tài chính dễ tiếp cận hơn với công chúng.
Các công ty công nghệ tài chính bao gồm cả công ty mới thành lập, các công ty tài
chính và công nghệ cố gắng thay thế hoặc tăng cường việc sử dụng các dịch vụ tài
chính do các công ty tài chính hiện có cung cấp.
Fintech là việc tận dụng công nghệ mới, sáng tạo để tạo điều kiện hay tăng
cường các dịch vụ tài chính như thanh toán, chuyển tiền, bảo hiểm, huy động vốn...
Các sản phẩm trong Fintech thường được chia thành 2 nhóm phân theo đối tượng
sử dụng:
Nhóm thứ nhất: Các sản phẩm phục vụ người tiêu dùng, các công cụ kỹ thuật
số và công nghệ khác để cải thiện cách các cá nhân vay mượn, quản lý tiền bạc, tài
trợ vốn cho các startup.
Nhóm thứ hai: Các sản phẩm công nghệ “back-office” nhằm hỗ trợ cho hoạt
động của các Fintech và các định chế tài chính.
Về cơ bản, ngoài những dịch vụ thông thường như thanh toán, cho vay,
chuyển tiền, Fintech còn cung cấp các dịch vụ trải rộng hơn như gọi vốn cộng đồng
(crowd-funding), cho vay ngang cấp (peer to peer lending), tư vấn tài chính cá nhân
(Personal Finance), công nghệ bảo hiểm (Insur-Tech), tiền tệ số (Crypto
Blockchain), quản trị dữ liệu (Data Management),...

18


Theo thống kê của NHNN, 72% công ty Fintech đã cùng liên kết với các ngân
hàng tại Việt Nam để cung cấp các sản phẩm dịch vụ, chỉ có 14% phát triển dịch
vụ mới và 14% sẵn sàng cạnh tranh với ngân hàng (Viện Chiến lược Ngân hàng,
2019). Thực tế tại Việt Nam cho thấy đa số các ngân hàng hiện nay đều ký kết với
một vài công ty Fintech để cung cấp dịch vụ thanh toán, chuyển tiền cho khách
hàng như dịch vụ chuyển tiền trên điện thoại di động (smartphone) do NHTM cổ
phần Quân đội - MB kết hợp với Tập đoàn Viễn thông Quân đội – Viettel triển
khai thực hiện; Vietcombank phối hợp với công ty cổ phần Dịch vụ di động trực
tuyến M-Service thực hiện dịch vụ chuyển tiền giá trị nhỏ dựa trên nền tảng Ví
điện tử MoMo (NHNN, 2015). Hiện nay hầu hết các ngân hàng đều liên kết với ví
Momo để phát triển ví điện tử; VPBank hợp tác với VnPay, Bankplus… để đẩy
mạnh mảng thanh toán và giao dịch ngân hàng trực tuyến; VietinBank hợp tác cùng
bảy công ty Fintech để mang đến cho khách hàng các sản phẩm mang tính công
nghệ tài chính vượt trội.

19

2.2 AI
2.2.1 AI – Trí tuệ nhân tạo
Trí tuệ nhân tạo hay trí
thông minh nhân t ạo
(Artificial intelligence – viết
tắt là AI) là một ngành thuộc
lĩnh vực khoa học máy tính
(Computer science). Là trí
tuệ do con người lập trình tạo nên với mục tiêu giúp máy tính có thể tự động hóa
các hành vi thông minh như con người.
Trí tuệ nhân tạo khác với việc lập trình logic trong các ngôn ngữ lập trình là
ở việc ứng dụng các hệ thống học máy (machine learning) để mô phỏng trí tuệ của
con người trong các xử lý mà con người làm tốt hơn máy tính.
Cụ thể, trí tuệ nhân tạo giúp máy tính có được những trí tuệ của con người
như: biết suy nghĩ và lập luận để giải quyết vấn đề, biết giao tiếp do hiểu ngôn ngữ,
tiếng nói, biết học và tự thích nghi,…
Tuy rằng trí thông minh nhân tạo có nghĩa rộng như là trí thông minh trong
các tác phẩm khoa học viễn tưởng, nó là một trong những ngành trọng yếu của tin
học. Trí thông minh nhân tạo liên quan đến cách cư xử, sự học hỏi và khả năng
thích ứng thông minh của máy móc.
Công nghệ AI được chia làm 4 loại chính:
▪ Loại 1: Công nghệ AI phản ứng.
Công nghệ AI phản ứng có khả năng phân tích những động thái khả thi nhất
của chính mình và của đối thủ, từ đó, đưa ra được giải pháp tối ưu nhất.
Một ví dụ điển hình của công nghệ AI phản ứng là Deep Blue. Đây là một
chương trình chơi cờ vua tự động, được tạo ra bởi IBM, với khả năng xác định các
nước cờ đồng thời dự đoán những bước đi tiếp theo của đối thủ. Thông qua đó,
Deep Blue đưa ra những nước đi thích hợp nhất.

20

▪ Loại 2: Công nghệ AI với bộ nhớ hạn chế
Đặc điểm của công nghệ AI với bộ nhớ hạn chế là khả năng sử dụng những
kinh nghiệm trong quá khứ để đưa ra những quyết định trong tương lai. Công nghệ
AI này thường kết hợp với cảm biến môi trường xung quanh nhằm mục đích dự
đoán những trường hợp có thể xảy ra và đưa ra quyết định tốt nhất cho thiết bị.
Ví dụ như đối với xe không người lái, nhiều cảm biến được trang bị xung
quanh xe và ở đầu xe để tính toán khoảng cách với các xe phía trước, công nghệ
AI sẽ dự đoán khả năng xảy ra va chạm, từ đó điều chỉnh tốc độ xe phù hợp để giữ
an toàn cho xe.
▪ Loại 3: Lý thuyết trí tuệ nhân tạo
Công nghệ AI này có thể học hỏi cũng như tự suy nghĩ, sau đó áp dụng những
gì học được để thực hiện một việc cụ thể. Hiện nay, công nghệ AI này vẫn chưa
trở thành một phương án khả thi.
▪ Loại 4: Tự nhận thức
Công nghệ AI này có khả năng tự nhận thức về bản thân, có ý thức và hành
xử như con người. Thậm chí, chúng còn có thể bộc lộ cảm xúc cũng như hiểu được
những cảm xúc của con người. Đây được xem là bước phát triển cao nhất của công
nghệ AI và đến thời điểm hiện tại, công nghệ này vẫn chưa khả thi.
2.2.2 AI trong hoạt động kinh doanh ngân hàng
Mặc dù bắt đầu chậm chạp nhưng lĩnh vực tài chính đang bắt đầu đón nhận
AI và tự động hóa trong một số lĩnh vực. Theo thời gian, cho dù do sự lựa chọn
hay cần thiết, AI sẽ được ứng dụng trong hầu hết các khía cạnh của lĩnh vực tài
chính.
Việc sử dụng trợ lý ảo là dấu hiệu dễ thấy nhất về việc các ngân hàng và tổ
chức tài chính khác đang áp dụng AI. Những chatbot ngày nay có khả năng xử lý
nhiều công việc thường ngày, cho phép nhân viên tập trung vào những tương tác
đòi hỏi sự đồng cảm và thấu hiểu. Theo thời gian, chatbot mang lại trải nghiệm
khách hàng siêu cá nhân hóa, giúp khách hàng hài lòng hơn.
Ngoài ra, chatbot dựa trên AI tạo ra một lượng lớn dữ liệu khách hàng, có thể
giúp các công ty thực hiện phân tích dự đoán. Máy học đang được sử dụng để tạo

21

ra các công nghệ chống rửa tiền, với đủ dữ liệu và thời gian phân tích, có thể xác
định các điểm bất thường và giúp phát hiện gian lận.
Phần mềm chống rửa tiền được đào tạo với một bộ dữ liệu lớn hiện đang trở
nên khả dụng và cung cấp các phân tích dự đoán tuyệt vời.
Một ví dụ tuyệt vời về cách AI có thể giúp tự động hóa các nhiệm vụ trong
lĩnh vực tài chính là Thuật toán thông minh hợp đồng (COIN) của JP Morgan, có
khả năng đọc và phân tích các văn bản pháp lý phức tạp trong vài giây.
Sau khi tạo các phiên bản kỹ thuật số của tài liệu giấy bằng công cụ quét, phần
mềm đó có thể tóm tắt ngay lập tức văn bản, so sánh tài liệu và thực hiện các tác
vụ phức tạp hơn như kiểm tra độ chính xác và đảm bảo tuân thủ quy định.
Tại Tây Ban Nha, một số công ty bảo hiểm đã và đang tìm cách tự động hóa
quy trình yêu cầu bồi thường bằng cách sử dụng AI. Theo Investopedia, khoảng
75% tất cả các giao dịch chứng khoán ở Mỹ được tự động hóa.
Nhờ tính toán nhận thức, các nhà giao dịch hiện có quyền truy cập vào giao
dịch thuật toán, một công nghệ dựa trên AI có khả năng giao dịch trong một phần
nhỏ của giây. Rõ ràng là do lỗi của con người, người vận hành có thể sử dụng phần
mềm này để hướng dẫn họ hoặc giúp họ đưa ra quyết định.
Quyết định tốt nhất về việc mua hoặc bán cổ phiếu nào thường đến từ sự kết
hợp công cụ AI và chuyên gia về con người. Thuật toán AI tự động đưa ra quyết
định về thời điểm thích hợp để mua hoặc bán một số cổ phiếu nhất định ở mức giá
tốt nhất với độ chính xác cao hơn con người.
Kể từ khi phần mềm giao dịch dựa trên AI thực hiện các giao dịch rất nhanh
chóng và hiệu quả, việc sử dụng nó có khả năng tiếp tục tăng giữa các nhà giao
dịch.
Tất nhiên, việc ứng dụng AI trong lĩnh vực tài chính cũng sẽ mang lại một số
nguy hiểm. Một trong số đó là tính thiên vị. Trong trường hợp các sản phẩm và
dịch vụ tài chính hướng tới khách hàng, vấn đề thiên vị liên quan đến AI là nghiêm
trọng và phức tạp.
Nó thường có thể là vô ý, với hậu quả không lường trước được. Do đó, dữ liệu
được nhập vào các thuật toán phụ trách việc đưa ra quyết định về các khoản vay và

22

thế chấp có thể bị ảnh hưởng bởi những thành kiến cố hữu bắt nguồn từ các xu
hướng lịch sử hợp pháp và càng trở nên trầm trọng hơn do thiếu thông tin đầy đủ.
Ví dụ: nếu một người có tỷ lệ hàng xóm đã vỡ nợ trong quá khứ cao bất
thường, AI có thể đánh dấu đơn đăng ký của người đó là rủi ro cao, bất kể tình
huống cá nhân của bạn.
Một nhược điểm khác là, khi các ngân hàng ngày càng phụ thuộc vào tự động
hóa và công nghệ dựa trên AI và cung cấp nhiều dịch vụ trực tuyến hơn, kết quả là
nhiều chi nhánh phải đóng cửa. Điều đó khiến nhiều khách hàng mất liên lạc với
con người và không thể nói chuyện với người thực khi quản lý các công việc ngân
hàng của họ.
Ngoài việc áp dụng chậm, thiên vị và mất tương tác giữa con người với nhau
trong ngành tài chính, AI còn mang đến những nguy cơ về chênh lệch công nghệ,
vấn đề công bằng và nỗi sợ hãi về quyền riêng tư liên quan đến các công cụ công
nghệ thông tin.
Trước khi tuyên bố rằng AI thực sự có thể thay thế các cố vấn tài chính, tất cả
những vấn đề này cần phải được giải quyết. Khi những tiến bộ thực sự đã đạt được
trong tất cả các lĩnh vực này, lợi ích tiềm năng của AI đối với lĩnh vực tài chính sẽ
hầu như vô hạn.
Nguồn: Công an nhân dân
2.3 MACHINE LEARNIG
2.3.1 Machine learning là gì?
Machine Learning cơ bản là một mô hình có khả năng “học tập” một lượng
lớn dữ liệu, đọc được những khuôn mẫu (pattern) trong dữ liệu và thực hiện một
nhiệm vụ nào đó, có thể là đưa ra những phân loại, dự đoán. Có thể hiểu đơn giản
là giống như cách con người học, “máy học” cũng là quá trình huấn luyện máy tính
dựa trên những dữ liệu, khuôn mẫu đã có nhằm hoàn thành một công việc trong
tương lai một cách tốt hơn mà con người không cần thủ công can thiệp.
Mô hình máy học nào sở hữu lượng dữ liệu lớn hơn để “học” thì sẽ tiên tiến
hơn, độ chính xác khi thực hiện nhiệm vụ sẽ cao hơn. Machine Learning gần như
là cuộc đua về dữ liệu, không phải cuộc đua về thuật toán. Dữ liệu như là một loại

23

“dầu thô” mới trong ngành Machine Learning mà ai cũng muốn sở hữu càng nhiều
càng tốt. Cũng chính vì thế mà một trong những hạn chế lớn nhất để đạt kết quả tốt
nhất trong quá trình “máy học” chính là sự thiếu hụt về dữ liệu đầu vào, đặc biệt là
nếu đó không phải là in-house Machine Learning team. Bởi vì không có toàn quyền
truy cập vào cơ sở dữ liệu, nhất là những dữ liệu mang tính cá nhân, độ bảo mật
cao, các công ty Machine Learning outsourcing sẽ khó có thể dựng mô hình “máy
học” một cách tốt nhất. Bên cạnh đó, không phải dữ liệu nào cũng đủ chất lượng
để đưa vào máy học. Dữ liệu đó phải được qua công đoạn “làm sạch”, dán nhãn để
máy có thể học tốt được.
2.3.2 Mối quan hệ của Data science và AI với Machine learning
AI là “trí tuệ nhân tạo”, nhằm tạo ra những bộ máy có khả năng mô phỏng
khả năng suy nghĩ và hành vi của con người. Một hệ thống sử dụng AI có nghĩa
rằng hệ thống đó không cần phải được lập trình trước mà cần những thuật toán có
thể tự làm việc với nhau.
Những ứng dụng phổ biến của AI mà ta có thể nhận thấy chính là Siri, Google,
AI trong chơi cờ,… Machine Learning chính là cách tiếp cận để đạt được AI.
Machine Learning là một nhánh nhỏ, một tập con của AI và AI cho phép máy móc
học hỏi từ dữ liệu mà không cần được lập trình một cách rõ ràng.
Data Science là một quá trình “khám phá” các khuôn mẫu dữ liệu từ dữ liệu
thô và có nhiệm vụ giải thích, đưa ra dự đoán từ những khuôn mẫu đó. Data Science
gồm nhiều công đoạn và công việc cần phải xử lý, từ việc thu thập dữ liệu, tinh
gọn dữ liệu, lưu trữ dữ liệu,…

Nguồn: blog.insightdatascience.com

24

Machine Learning là giai đoạn sau của Data Science. Sau khi tất cả dữ liệu đã
sẵn sàng để được xử lý thì đưa vào mô hình máy học để đưa ra khuôn mẫu, dự
đoán. Việc thu thập một lượng dữ liệu vừa lớn vừa đủ “sạch” mới là thách thức của
Data Science.
Nhìn chung, Machine Learning – máy học, là sợi dây liên kết giữa Data
Science và AI. Dựa vào những dữ liệu từ Data Science, AI chính là “kết quả” thu
về được, chính là mục đích cho những tập dữ liệu đó và giải quyết được những vấn
đề cụ thể được đặt ra. Và Machine Learning là sự liên kết, “công cụ” để đạt kết quả
đó.
2.3.3 Thực trạng machine learning hiện nay
Một trong những thực trạng AI nói chung, Machine Learning nói riêng, đang
phổ biến trên thế giới hiện nay chính là “Black box AI”. Là người xây dựng thuật
toán, huấn luyện máy, mình kiểm tra kết quả nhưng đôi khi lại không hiểu hết được
điều gì đã xảy ra bên trong quá trình “học” đó. Và đó cũng giống như là “hộp đen”
của giới AI. Và Hiện nay, thế giới đang muốn hướng đến “White box AI”, có nghĩa
là con người sẽ thấu suốt được tất cả những gì đang xảy ra trong lúc máy học.
Xu hướng Machine Learning phát triển ở Việt Nam cũng chưa thật sự rõ ràng.
Machine Learning ở Việt Nam có thể mô tả bằng cụm từ “vừa thừa vừa thiếu”. Bài
toán cần giải rất nhiều, vì Việt Nam đương nhiên cũng sẽ gặp những vấn đề tương
tự như trên thế giới, có thể ở quy mô nhỏ hơn, nhưng lại thiếu khả năng để giải bài
toán.
2.4 FINTECH VÀ AI TRONG THANH TOÁN ĐIỆN TỬ
2.4.1 Fintech và thanh toán điện tử
Ví số, hay ví điện tử, là một thuật ngữ dùng trong giao dịch thương mại điện
tử. Một ví điện tử hoạt động giống như một ví thông thường. Ví điện tử ban đầu
được coi là một phương pháp lưu trữ nhiều dạng tiền điện tử (e-cash) khác nhau,
nhưng không mang lại nhiều thành công, nên nó đã phát triển thành một dạng dịch
vụ cho phép người dùng Internet lưu trữ và sử dụng thông tin trong mua bán.
Thuật ngữ "ví điện tử" ngày càng được sử dụng để miêu tả điện thoại di động,
đặc biệt là điện thoại có hệ điều hành, có thể lưu trữ thông tin bảo mật của người
dùng và sử dụng công nghệ mạng không dây để thực hiện giao dịch.

25

Tài khoản ngân hàng cá nhân thường được kết nối với ví điện tử. Họ cũng có
thể lưu số bằng lái, thẻ y tế, thẻ khách hàng, và các giấp tờ nhận dạng khác trong
điện thoại. Những thông tin bảo mật này sẽ được chuyển đến bên tiếp nhận của cửa
hàng thông qua thiết bị kết nối phạm vi gần NFC. Một số người phỏng đoán rằng
trong tương lai ví điện tử sẽ thay thế những chiếc ví thực. Hệ thống này đã đạt được
những thành công nhất định ở Nhật Bản, nơi mà ví điện tử được gọi là Osaifu-
keitai hoặc "ví di động".
Một ví điện tử bao gồm phần mềm và thiết bị thông tin. Phần mềm cung cấp
chế độ bảo mật và mã hóa cho thông tin cá nhân và giao dịch thực tế. Thông thường,
khách hàng tự giữ và bảo quản ví điện tử và hoàn toàn tương thích với các trang
web thương mại điện tử. Ví điện tử server, cũng được gọi là ví mỏng, là loại ví mà
một tổ chức tạo ra cho khách hàng được lưu trữ trên server của họ. Ví điện tử server
đang được các nhà bán lẻ ưa chuộng vì tính bảo mật, hiệu quả, có thể thêm tiện ích
cho người dùng, làm tăng sự thích thú khi mua bán. Thiết bị thông tin thực chất là
cơ sở dữ liệu thông tin do người dùng tự thêm vào. Các thông tin này bao gồm: địa
chỉ chuyển hàng, địa chỉ hóa đơn, cách thức thanh toán (bao gồm số thẻ tín dụng,
ngày hết hạn, và số bảo mật), và các thông tin khác.

2.4.2 AI và định danh, xác thực điện tử
Định danh và xác thực thuộc về lĩnh vực Quản lý Danh tính, Chứng chỉ
danh tính và Truy nhập (ICAM - Identity, Credential and Access Management)
- nền tảng cần thiết cho phát triển Chính phủ điện tử.

26

Trong thế giới số hiện nay, danh tính đã được phát triển thành “Danh tính
số - Digital Identity”. Cuộc Cách mạng công nghiệp 4.0 nói chung và sự phát triển
của Chính phủ số, Đô thị thông minh, Kinh tế số và Xã hội số không thể thiếu được
danh tính số. Danh tính số là một tập hợp các thuộc tính của một thực thể trong
một ngữ cảnh nhất định. Danh tính số được coi như những bản sao (counterparts)
trong thế giới số của các thực thể vật lý trong thế giới thực. Một thực thể có thể có
nhiều danh tính số. Có 5 loại thực thể cần được quản lý danh tính số:
- Con người (công dân, cán bộ công chức, viên chức, ,…).
- Tổ chức (cơ quan nhà nước, doanh nghiệp,…).
- Thiết bị (máy chủ, camera giám sát, thiết bị cảm biến…).
- Mã lệnh phần mềm.
- Đại lý: người hoặc thứ được thực thể ủy quyền hành động thay cho thực
thể đó.
Đối với con người, một số nước trên thế giới (như Ấn Độ, UAE…) đã hướng
tới quản lý danh tính theo kiến trúc tập trung với một cơ sở dữ liệu quản lý danh
tính chung của toàn bộ công dân và một cơ quan cung cấp danh tính duy nhất cấp
phát Thẻ căn cước điện tử (eID), sử dụng thẻ thông minh không tiếp xúc tích hợp
sinh trắc học và chữ ký số. Thẻ này vừa dùng làm thẻ định danh cá nhân vừa dùng
làm công cụ xác thực để thực hiện các dịch vụ trực tuyến. Tuy nhiên phương án
này sẽ đòi hỏi phải có thời gian thu thập, xử lý dữ liệu và đầu tư lớn để có thể cấp
các thẻ eID bảo mật. Chi phí người dân phải trả để cấp thẻ eID khá cao (ở Châu
Âu tới vài chục Euro, ở Phần Lan là 53 Euro, thẻ eID cho người trưởng thành trên
24 tuổi ở Đức là 58,8 Euro).
Hiện nay trên thế giới đang xuất hiện một xu hướng mới trong Quản lý danh
tính số, chuyển từ kiến trúc tập trung sang kiến trúc phân tán, áp dụng mô
hình Liên hiệp danh tính (Identity Federation). Mô hình này cho phép thiết lập
nên một Hệ sinh thái danh tính số (Digital Identity Ecosystem) theo mô hình phân
tán, trong đó chấp nhận các dịch vụ danh tính số của nhiều “Nhà cung cấp danh
tính” (IdP- Identity provider) bao gồm cả các cơ quan chính phủ và cả các tổ chức,
doanh nghiệp thuộc khối tư nhân. Các nhà cung cấp dịch vụ trực tuyến (SP
– Service Provider) sẽ được kết nối với các IDP thông qua một hoặc nhiều “Sàn

27

giao dịch danh tính” (Identity Exchange) (tương tự như hệ thống France
Connect của Pháp) làm nhiệm vụ môi giới giữa tất cả các bên.
Kể cả nhiều nước tiên tiến cũng đi theo xu hướng này như: Thụy Điển với hệ
thống BankID, Estonia với hệ thống Mobile ID, Vương quốc Anh với Chương
trình GOV.UK Verify, Pháp với hệ thống France Connect, Úc với Khung Danh tính
số tin cậy TDIF (Trusted Digital Identity Framework),….

Để thiết lập, vận hành và quản trị Liên hiệp danh tính cần xây dựng và ban
hành một Khung Danh tính số tin cậy TDIF (Trusted Digital Identity
Framework). TDIF là một bộ các công cụ, quy tắc và tiêu chí chứng nhận để quản
trị liên hiệp danh tính số, cung cấp cấu trúc và các kiểm soát cần thiết để mang lại
niềm tin cho các bên tham gia rằng tất cả các Nhà cung cấp được chứng nhận trong
liên hiệp danh tính đã đáp ứng các nghĩa vụ chứng nhận của họ và vì vậy có thể
được coi là đáng tin cậy. Khung Danh tính số tin cậy TDIF cần được một cơ quan
quản lý nhà nước có thẩm quyền về quản lý danh tính số xây dựng và tiến hành
kiểm định cấp chứng nhận đáp ứng các yêu cầu của Khung TDIF cho các nhà cung
cấp muốn tham gia Liên hiệp danh tính.
Việc quản lý, sử dụng danh tính số được thực hiện trong 3 lĩnh vực chính của
ICAM gồm:
- Quản lý danh tính (Identity Management).
- Quản lý chứng chỉ danh tính (Credential Management).
- Quản lý truy nhập (Access Management), trong đó có Xác thực
(Authentication) và Ủy quyền (Authorization).

28

Trước tiên, các thực thể (công dân, doanh nghiệp…) cần đăng ký danh tính
với một IDP. Để đảm bảo độ tin cậy của danh tính, các thực thể phải trải qua một
thủ tục “Chứng minh danh tính” (Identity Proofing). Chẳng hạn công dân phải
xuất trình các giấy tờ cá nhân như giấy khai sinh, thẻ CCCD, sổ hộ khẩu…. Các
thuộc tính danh tính đã khai báo cần được xác minh. Thông tin trong các giấy tờ
này có thể phải được xác minh với nguồn dữ liệu có thẩm quyền của các cơ quan
cấp các giấy tờ đó. Các IDP có thể áp dụng các quy trình Chứng minh danh tính
với 3 “Mức độ bảo đảm danh tính” (IAL-Identity Assurance Level) khác nhau
từ IAL1 đến IAL3 (yêu cầu sự hiện diện vật lý để chứng minh danh tính).
Để phục vụ quy trình Chứng minh danh tính, một số nước đã phát triển các
dịch vụ xác minh do các cơ quan có thẩm quyền cung cấp như các dịch vụ Xác
minh thông tin Giấy tờ cá nhân DVS (Document Verification Services), Xác minh
ảnh khuôn mặt (FVS - Face Verification Service) của Úc. Các dịch vụ này cũng rất
có ích, giúp loại bỏ thủ tục chứng thực tốn kém khi thực hiện các thủ tục hành
chính trực tuyến.
Khi danh tính số của thực thể được đăng ký, IDP sẽ cấp cho thực thể một
“Chứng chỉ danh tính” (Credential) dùng để xác thực trong các giao dịch trực
tuyến. Chứng chỉ danh tính có thể rất đa dạng, từ mật khẩu tới các thiết bị vật lý
như thẻ SIM điện thoại, thiết bị Token OTP, USB lưu chứng thư số, thẻ eID…
Việc cung cấp và quản lý các chứng chỉ danh tính được thực hiện bởi các “Nhà
cung cấp dịch vụ chứng chỉ danh tính” (CSP- Credential Service Provider). CSP
có thể là một tổ chức thuộc IDP hoặc là một tổ chức độc lập. Các tổ chức CA là
một ví dụ về CSP. Chứng chỉ danh tính ràng buộc thực thể đăng ký danh tính với
một bộ xác thực (Authenticator) dùng để xác thực sau này, thông qua một mã định
danh (identifier). Các bộ xác thực có các “Mức độ đảm bảo của bộ xác thực”
(AAL-Authenticator Assurance Level) khác nhau từ AAL1 (chỉ yêu cầu xác
thực 1 yếu tố) đến AAL3 (yêu cầu xác thực 2 yếu tố dựa trên phần cứng). Mức độ
đảm bảo LoA (Level of Assurance) khi xác thực một thực thể cần phải được tổ hợp
từ 2 mức độ đảm bảo IAL và AAL nói trên. Đối với các hệ thống liên hiệp
(federated systems) mức độ LoA còn phụ thuộc thêm một tham số thứ ba, gọi
là Mức độ đảm bảo Liên hiệp (FAL- Federation Assurance Level) quy định độ

29

mạnh của thôngđiệp xác nhận trong môi trường liên hiệp, được sử dụng để truyền
thông tin xác thực và thông tin thuộc tính tới bên tín nhiệm.
Xác thực (Authentication) thuộc về lĩnh vực Quản lý truy nhập, nhằm xác
định rằng chủ thể cố gắng truy cập một dịch vụ số kiểm soát một hoặc nhiều bộ
xác thực (authenticator) hợp lệ được liên kết với danh tính số của chủ thể đó. Xu
hướng trên thế giới hiện nay là chấm dứt việc xác thực bằng mật khẩu (rất không
bảo mật), chuyển sang dùng các phương thức xác thực mạnh (strong
authentication), xác thực 2 hoặc đa yếu tố (2FA, MFA) và thuận tiện cho người sử
dụng (như xác thực trên thiết bị di động, xác thực sinh trắc học).

Sau khi một thực thể (công dân, doanh nghiệp,…) đã được xác thực, thực thể
đó sẽ được ủy quyền truy nhập tới các tài nguyên số theo chính sách quản lý truy
nhập và thực hiện các giao dịch trực tuyến. Việc này bao gồm cả việc chia sẻ các
dữ liệu thuộc tính danh tính của thực thể đã được xác thực có trong CSDL danh
tính do IDP quản lý hoặc từ các nhà cung cấp dữ liệu tin cậy (Trusted Data Provider
- DP) khác. Như vậy, định danh và xác thực chính là tiền đề để thực hiện chia
Danh tính (Identity) là một hoặc nhiều thuộc tính miêu tả duy nhất một đối tượng/thực thể
trong một ngữ cảnh cụ thể.
Danh tính số (Digital Identity) là danh tính của một thực thể đủ chi tiết để phân biệt thực
thể đó trong một ngữ cảnh số.
Danh tính số của một người có thể bao gồm nhiều thuộc tính: dữ liệu tiểu sử (như: tên, tuổi,
giới tính, địa chỉ,…), dữ liệu sinh trắc học (như: vân tay, mống mắt,…) cũng như các thuộc
tính mở rộng khác liên quan đến những gì người đó làm hoặc điều gì đó mà người khác biết
về cá nhân đó. Khi những dữ liệu này được thu thập và xác minh, chúng có thể được sử dụng
để xác định một người bằng cách trả lời câu hỏi "Bạn là ai?". Các thuộc tính này, cùng với
thông tin xác thực do nhà cung cấp dịch vụ cấp (như: số ID duy nhất, eDocument, eID, mobile
ID) sau đó cũng có thể được sử dụng làm yếu tố xác thực để trả lời câu hỏi "Bạn có phải là
người mà bạn tuyên bố không?". Các thuộc tính và yếu tố xác thực được sử dụng trong danh
tính số có thể thay đổi tùy theo ngữ cảnh hoặc tùy thuộc mỗi hệ thống nhận dạng.
Định danh (Identification) là quá trình thiết lập, xác định hoặc công nhận danh tính của một
đối tượng.
Định danh điện tử (Electronic Identification) là quá trình thiết lập, xác định hoặc công
nhận danh tính số của một đối tượng.
Xác thực điện tử (Authentication) là quá trình xác minh điện tử đối với danh tính một thực
thể. Thực thể có thể người sử dụng máy tính/điện thoại, là chính máy tính/điện thoại hoặc là
một chương trình máy tính/ ứng dụng điện thoại. Xác thực là cách đảm bảo là người sử dụng
đang định thực hiện các chức năng của hệ thống đúng thật là người sử dụng đã được cho
quyền làm điều đó.

30

sẻ dữ liệu - một vấn đề cấp bách khác trong phát triển Chính phủ điện tử hiện nay.
Dựa trên các dịch vụ định danh và xác thực có thể xây dựng dịch vụ Quản lý và
dữ liệu cá nhân trên môi trường mạng tương tự như dịch vụ MyInfo (Thông tin
của tôi) của Singapore. MyInfo là một Data Hub, đóng vai trò như một kho dữ liệu
cá nhân ảo, cung cấp các dữ liệu cá nhân sau khi cá nhân đã được xác thực một
cách bảo mật từ nhiều nguồn dữ liệu có thẩm quyền, giúp cho người dùng không
phải điền thông tin cá nhân nhiều lần trong các biểu mẫu khi thực hiện dịch vụ
công trực tuyến. Hệ thống này cũng cho phép người dân làm chủ dữ liệu danh tính
của mình, kiểm soát việc chia sẻ dữ liệu cá nhân khi có sự đồng ý tường minh của
chủ thể. Các ứng dụng sẽ tích hợp với MyInfo thông qua Cổng API chính
phủ (Government API Gateway) APEX (API Exchange).
Trong các giải pháp về danh tính số, hiện nay nổi bật là Giải pháp định danh
vạn năng Mobile Connect của GSMA. Mobile Connect không dùng mật khẩu, sử
dụng điện thoại di động như thiết bị xác thực, sử dụng các kênh truyền thông (SMS,
USSD, OTA) của nhà mạng di động như một kênh xác thực thứ 2 để xác thực với
CSDL thuê bao của nhà mạng. Mobile Connect sử dụng giao thức liên hiệp danh
tính tiên tiến nhất hiên nay: OpenID Connect, cung cấp các mức độ đảm bảo từ
LoA2 đến LoA4. Mobile Connect đặc trưng bởi tính bảo mật, sự tiện lợi cho người
dùng và khả năng bảo vệ quyền riêng tư. Mobile Connect là một nhóm các dịch vụ
bao gồm:
- Xác thực một cách tin cậy người dùng (User Authentication).
- Ủy quyền (xác nhận quyền) thực hiện các giao dịch (Transaction
Authorization) & chống chối bỏ trong các giao dịch có độ rủi ro cao.
- Cung cấp các thuộc tính cá nhân tin cậy (Attribute services) một cách
bảo mật, có sự đồng ý tường minh của khách hàng cho các nhà cung
cấp dịch vụ.
- Dịch vụ danh tính (Identity Services): Kiểm tra, xác định danh tính
chính thức của một người.

31


Mobile Connect hiện đã được hơn 70 nhà mạng triển khai ở gần 40 nước trên
thế giới, hầu hết các nước ASEAN (trừ 3 nước Đông dương) đều đang triển khai
thử nghiệm Mobile Connect.
Nguồn: Cục TTH – Bộ TT&TT

32

Chương 3
BIG DATA VÀ PHÂN TÍCH DỮ LIỆU MẠNG KHÁCH HÀNG

Big Data (Dữ liệu lớn) cho phép con người có thể thu thập, chứa đựng được
một lượng dữ liệu khổng lồ. Đối với marketing trong doanh nghiệp, người ta có
thể thu thập được một lượng lớn thông tin bao gồm thông tin cá nhân của từng
khách hàng. Điều này giúp doanh nghiệp nhận ra các xu hướng, nhu cầu, mong
muốn.. của người tiêu dùng một cách hiệu quả, và từ đó giúp doanh nghiệp có thể
tạo ra những chiến lược đúng đắn và hiệu quả trong mỗi giai đoạn.
3.1 PHÂN TÍCH DỮ LIỆU LỚN

Phân tích dữ liệu lớn là một quy trình hoàn chỉnh kiểm tra các tập hợp dữ liệu
lớn thông qua các công cụ và quy trình khác nhau để khám phá các mẫu chưa biết,
mối tương quan ẩn, xu hướng có ý nghĩa và các thông tin chi tiết khác để đưa ra
quyết định dựa trên dữ liệu nhằm theo đuổi mục tiêu tốt hơn các kết quả.
Ngày nay, Dữ liệu lớn là một trong những cuộc thảo luận quan trọng nhất giữa
các nhà lãnh đạo doanh nghiệp và những người đứng đầu ngành. Ngày nay, chúng
ta đang sống trong một thế giới được điều khiển bởi kỹ thuật số, do đó mọi doanh
nghiệp đều theo đuổi Dữ liệu lớn để thu được những hiểu biết có giá trị từ lượng
dữ liệu thô khổng lồ. Vì vậy, trong bài đăng trên blog này, chúng ta sẽ tìm hiểu Big
Data Analytics là gì, tại sao nó lại quan trọng như vậy, cũng như các tính năng và
lợi thế khác nhau của nó.
Dữ liệu lớn chủ yếu được đo bằng khối lượng dữ liệu. Nhưng cùng với đó,
Dữ liệu lớn cũng bao gồm dữ liệu đến với tốc độ nhanh và rất lớn. Cơ bản, có ba
loại Dữ liệu lớn, đó là:
• Dữ liệu có cấu trúc
• Dữ liệu phi cấu trúc
• Dữ liệu bán cấu trúc
Phân tích Dữ liệu Thông tin Thu thập
Ra QĐ

33

Dữ liệu lớn có thể được đo bằng terabyte và hơn thế nữa. Đôi khi, Dữ liệu lớn
có thể vượt qua hàng petabyte. Các dữ liệu có cấu trúc bao gồm tất cả các dữ liệu
có thể được lưu trữ trong một cột bảng. Các dữ liệu phi cấu trúc là một trong đó
không thể được lưu trữ trong một bảng tính; và dữ liệu bán cấu trúc là thứ không
phù hợp với mô hình của dữ liệu có cấu trúc. Bạn vẫn có thể tìm kiếm dữ liệu bán
cấu trúc giống như dữ liệu có cấu trúc, nhưng nó không mang lại sự dễ dàng mà
bạn có thể thực hiện trên dữ liệu có cấu trúc.
Dữ liệu có cấu trúc có thể được lưu trữ trong một cột dạng bảng. Cơ sở dữ
liệu quan hệ là ví dụ về dữ liệu có cấu trúc . Rất dễ hiểu về cơ sở dữ liệu quan
hệ. Hầu hết các máy tính hiện đại đều có thể hiểu được dữ liệu có cấu trúc.
Mặt khác, dữ liệu phi cấu trúc là dữ liệu không thể phù hợp với cơ sở dữ liệu
dạng bảng. Ví dụ về dữ liệu phi cấu trúc bao gồm âm thanh , video và các loại
dữ liệu khác bao gồm một phần lớn như vậy của Dữ liệu lớn ngày nay.
Các bán cấu trúc dữ liệu bao gồm cả dữ liệu có cấu trúc và không có cấu
trúc. Loại tập dữ liệu này bao gồm một cấu trúc thích hợp, nhưng vẫn không thể
sắp xếp hoặc xử lý dữ liệu đó do một số ràng buộc. Đây là loại dữ liệu bao
gồm các XML dữ liệu , file JSON , và những người khác.
So sánh Phân tích dữ liệu lớn với Khoa học dữ liệu

3.2 XỬ LÝ DỮ LIỆU LỚN
Để xử lý Dữ liệu lớn, bạn cũng cần có đám mây và máy vật lý. Ngày nay, do
những tiến bộ trong công nghệ, chúng ta có thể bao gồm Điện toán đám mây và
Trí tuệ nhân tạo trong phạm vi xử lý Dữ liệu lớn. Do tất cả những tiến bộ này,
đầu vào thủ công có thể được giảm bớt và tự động hóa có thể tiếp tục.

34

Phân tích dữ liệu đề cập đến tập hợp các phương pháp tiếp cận định lượng và
định tính để thu được thông tin chi tiết có giá trị từ dữ liệu. Nó bao gồm nhiều quy
trình bao gồm trích xuất dữ liệu, phân loại dữ liệu để phân tích các mẫu, quan hệ
và kết nối khác nhau, đồng thời thu thập những thông tin chi tiết có giá trị khác từ
đó.
Ngày nay, hầu hết mọi tổ chức đều đã tự biến mình thành tổ chức theo hướng
dữ liệu và điều này có nghĩa là họ đang triển khai phương pháp tiếp cận theo hướng
dữ liệu để thu thập thêm dữ liệu liên quan đến khách hàng, thị trường và quy trình
kinh doanh. Dữ liệu này sau đó được phân loại, lưu trữ và phân tích để hiểu rõ hơn
và thu được những hiểu biết có giá trị từ nó.
3.3 LỢI ÍCH CỦA PHÂN TÍCH DỮ LIỆU LỚN
Khai thác dữ liệu có thể được sử dụng để giảm chi phí và tăng doanh thu. Khai
thác dữ liệu là một trong những bước cơ bản trong quy trình Phân tích dữ liệu. Đây
là bước trong đó bạn thực hiện Trích xuất, Chuyển đổi và Tải để đưa dữ liệu phù
hợp vào kho dữ liệu. Nó cũng đảm nhận nhiệm vụ lưu trữ và quản lý dữ liệu dựa
trên cơ sở dữ liệu đa chiều. Trong quá trình khai thác dữ liệu, chúng tôi có một số
hiện tượng gần đây dựa trên phân tích ngữ cảnh của các tập dữ liệu lớn để khám
phá mối quan hệ giữa các mục dữ liệu riêng biệt. Mục tiêu là sử dụng một tập dữ
liệu duy nhất cho các mục đích khác nhau của những người dùng khác nhau. Cuối
cùng, khai phá dữ liệu cũng được giao với nhiệm vụ trình bày dữ liệu đã được phân
tích một cách đơn giản nhưng hiệu quả.
Với Phân tích dữ liệu lớn, bạn có thể trả lời một loạt câu hỏi chẩn đoán mới
về nhu cầu kinh doanh của mình. Nó cung cấp nhiều dữ liệu hơn và phân tích phức
tạp để mang lại kết quả có thể hành động cho các nhóm kinh doanh của bạn. Bạn
có thể bắt đầu với một câu hỏi chung chung, một câu hỏi mà phân tích mô tả truyền
thống của bạn đã tiết lộ.
Hơn nữa, Phân tích dữ liệu lớn cho phép bạn khám phá các câu hỏi chẩn đoán
sâu hơn — một số câu hỏi trong số đó có thể bạn chưa từng nghĩ đến — để tiết lộ
một cấp độ thông tin chi tiết mới và xác định các bước cần phải thực hiện để cải
thiện hiệu suất kinh doanh. Nhiều định nghĩa về chủ đề Dữ liệu lớn tập trung vào
quan điểm từ dưới lên, sử dụng ba dữ liệu V – khối lượng , sự đa dạng và tốc độ .

35

Thuật ngữ ‘Phân tích dữ liệu lớn’ có thể trông đơn giản, nhưng có một số
lượng lớn các quy trình được bao gồm trong Phân tích dữ liệu lớn. Chúng ta có thể
coi Dữ liệu lớn là một dữ liệu có khối lượng lớn, tốc độ và sự đa dạng. Các công
cụ Phân tích dữ liệu lớn có thể hiểu được khối lượng dữ liệu khổng lồ và chuyển
nó thành thông tin chi tiết có giá trị về doanh nghiệp.
Mặc dù thuật ngữ ‘Phân tích dữ liệu lớn’ có vẻ đơn giản, nhưng nó thực sự
đơn giản. Phân tích dữ liệu phức tạp nhất khi nó được triển khai cho các ứng dụng
Dữ liệu lớn. Ba thuộc tính quan trọng nhất của Dữ liệu lớn bao gồm khối lượng,
tốc độ và sự đa dạng.
Nhu cầu về Phân tích dữ liệu lớn xuất phát từ thực tế là chúng tôi đang tạo dữ
liệu ở tốc độ cực cao và mọi tổ chức cần hiểu rõ về dữ liệu này. Theo các nguồn đã
xác nhận, vào năm 2020, chúng ta sẽ tạo ra 1,7 MB dữ liệu đáng kinh ngạc mỗi
giây, do mọi cá nhân trên trái đất đóng góp.
Tất cả điều này cho chúng ta biết tầm quan trọng của Phân tích dữ liệu lớn đối
với việc hiểu được tất cả khối lượng dữ liệu khổng lồ. Phân tích dữ liệu lớn giúp
chúng tôi tổ chức, chuyển đổi và lập mô hình dữ liệu dựa trên các yêu cầu của tổ
chức, đồng thời xác định các mẫu và rút ra kết luận từ đó.
Kích thước của dữ liệu càng lớn thì vấn đề càng lớn. Vì vậy, Big Data có thể
được định nghĩa là dữ liệu mà ở đó kích thước của nó tự đặt ra vấn đề và nó cần
những cách thức mới hơn để xử lý tương tự. Việc phân tích dữ liệu có khối lượng,
tốc độ cao và đa dạng có nghĩa là các phương pháp truyền thống làm việc với dữ
liệu sẽ không được áp dụng ở đây.
3.4 CÁC LOẠI PHÂN TÍCH DỮ LIỆU LỚN
• Phân tích mô tả: Đây là loại phân tích nói về một phân tích, dựa trên các quy
tắc và khuyến nghị, để chỉ định một con đường phân tích nhất định cho tổ chức.
Ở cấp độ tiếp theo, phân tích mô tả sẽ tự động hóa các quyết định và hành động
- làm cách nào để tôi có thể biến nó thành hiện thực? Việc xây dựng dựa trên
các phân tích trước đó, mạng nơ-ron và phương pháp phỏng đoán được áp dụng
cho dữ liệu để đề xuất các hành động tốt nhất có thể mang lại kết quả mong
muốn.

36

• Phân tích dự đoán: Loại phân tích này đảm bảo rằng đường dẫn được dự
đoán cho quá trình hành động trong tương lai. Trả lời các câu hỏi như thế nào
và tại sao sẽ tiết lộ các mẫu cụ thể để phát hiện khi nào các kết quả sắp xảy ra.
Phân tích dự đoán được xây dựng dựa trên phân tích chẩn đoán để tìm kiếm
những mẫu này và xem điều gì sẽ xảy ra. Học máy cũng được áp dụng để học
liên tục khi các mẫu mới xuất hiện.
• Phân tích mô tả: Trong loại phân tích này, chúng tôi làm việc dựa trên dữ liệu
đến. Để khai thác dữ liệu này, chúng tôi triển khai phân tích và đưa ra mô tả
dựa trên dữ liệu. Nhiều tổ chức đã dành nhiều năm để tạo ra phân tích mô tả —
trả lời các câu hỏi ‘điều gì đã xảy ra’. Thông tin này có giá trị, nhưng chỉ cung
cấp tầm nhìn cao cấp, bằng gương chiếu hậu về hoạt động kinh doanh. Trong
Phân tích chẩn đoán, hầu hết các tổ chức bắt đầu áp dụng Phân tích dữ liệu lớn
để trả lời các câu hỏi chẩn đoán — như thế nào và tại sao điều gì đó đã xảy ra.
Một số cũng có thể gọi những phân tích hành vi này.
• Phân tích chẩn đoán: Đây là cách nhìn về quá khứ và xác định lý do tại sao
một điều nhất định xảy ra. Loại phân tích này thường xoay quanh việc làm việc
trên trang tổng quan. Phân tích chẩn đoán với Dữ liệu lớn giúp theo hai cách:
(a) dữ liệu bổ sung do thời đại kỹ thuật số mang lại giúp loại bỏ các điểm mù
về phân tích và (b) các câu hỏi về cách thức và lý do cung cấp thông tin chi tiết
giúp xác định các hành động cần thực hiện.
3.5 CÁC CÔNG CỤ HÀNG ĐẦU ĐƯỢC SỬ DỤNG TRONG PHÂN TÍCH
DỮ LIỆU LỚN
• Apache Spark: Spark là một khuôn khổ cho Phân tích dữ liệu thời gian thực,
là một phần của hệ sinh thái Hadoop.
• Python: Đây là một trong những ngôn ngữ lập trình linh hoạt nhất đang nhanh
chóng được triển khai cho các ứng dụng khác nhau bao gồm cả Học máy.
• SAS: SAS là một công cụ phân tích tiên tiến đang được sử dụng để làm việc
với khối lượng dữ liệu khổng lồ và thu được những hiểu biết có giá trị từ nó.
• Hadoop: Đây là khuôn khổ Dữ liệu lớn phổ biến nhất đang được một số tổ
chức trên khắp thế giới triển khai để hiểu về dữ liệu lớn.

37

• SQL: Đây là ngôn ngữ truy vấn có cấu trúc được sử dụng để làm việc với các
hệ quản trị cơ sở dữ liệu quan hệ.
• Tableau: Đây là công cụ Business Intelligence phổ biến nhất được triển khai
cho mục đích trực quan hóa dữ liệu và phân tích kinh doanh.
• Splunk: Splunk là công cụ được lựa chọn để phân tích cú pháp dữ liệu do máy
tạo ra và thu được những hiểu biết kinh doanh có giá trị từ nó.
• Lập trình R: R là ngôn ngữ lập trình Số 1 đang được các Nhà khoa học dữ
liệu sử dụng cho mục đích tính toán thống kê và các ứng dụng đồ họa.
Nguồn: Tecktrend
3.6 CƠ SỞ DỮ LIỆU VÀ QUAN HỆ LIÊN KẾT
• Cơ sở dữ liệu không quan hệ
Cơ sở dữ liệu không quan hệ được sử dụng để làm việc với dữ liệu phi cấu
trúc. Ở đây, dữ liệu không thể được lưu trữ trong cột bảng thông thường. Các tệp
JSON và XML là một số kiểu dữ liệu phi cấu trúc quan trọng nhất. Với JSON, bạn
có thể viết các tác vụ trong lớp ứng dụng và điều này cho phép các chức năng đa
nền tảng nâng cao.
• Cơ sở dữ liệu trong bộ nhớ
Khi nói đến các công cụ xử lý Dữ liệu lớn như Hadoop, tốc độ xử lý diễn ra
cực kỳ thấp, nhờ quyền truy cập đọc và ghi liên tục cần thiết đối với bộ nhớ đĩa.
Nhưng với tốc độ xử lý trong bộ nhớ cao, bạn có thể đọc và ghi với tốc độ cao hơn
nhiều. Đây là lúc các công cụ xử lý trong bộ nhớ như Apache Spark xuất hiện trong
bức tranh.
• Hadoop Hybrid: Lưu trữ và xử lý dữ liệu
Bạn có thể coi Hadoop như một công cụ xử lý hỗn hợp có thể hoạt động cho
cả hệ thống lưu trữ và xử lý dữ liệu. Nhánh lưu trữ của Hadoop là Hệ thống tệp
phân tán Hadoop và nhánh xử lý của Hadoop là MapReduce. Do nhu cầu về các
công cụ xử lý hỗn hợp trong thế giới kỹ thuật số đầy gián đoạn ngày nay, Hadoop
đang ngày càng được nhiều người chấp nhận. Apache Hadoop là một công cụ xử
lý và lưu trữ dữ liệu kết hợp có thể được khai thác ngay cả bởi các tổ chức nhỏ vì
nó là một phần của nền tảng mã nguồn mở.

38

Ví dụ:
Dữ liệu “Khách hàng" và “Đơn hàng" có quan hệ “một-nhiều" :
- 01 khách hàng có thể có nhiều đơn hàng
- 01 đơn hàng chỉ thuộc 01 khách hàng

Thêm cột (thuộc tính) GIỚI TÍNH vào bảng đơn hàng: lấy giá trị các thuộc
tính quan tâm từ bảng khách hàng.


3.7 THỐNG KÊ MÔ TẢ VÀ TRỰC QUAN HÓA
Data visualization tạm được dịch là trực quan hóa dữ liệu, đây là phương pháp
không chỉ là bước quan trọng của bất kỳ quy trình phân tích, hay khai phá dữ liệu
mà nó còn là công cụ được sử dụng phổ biến và rộng rãi ở mọi tổ chức thuộc mọi
lĩnh vực, hay bởi mỗi một ai trong chúng ta, với mục đích đơn giản là truyền đạt,
trình bày một cách hiệu quả, đơn giản, thu hút những thông tin, dữ liệu đến người
đọc, người xem.

39

Data visualization, nói một cách đơn giản, là việc tạo ra các biểu đồ, đồ thị,
v.v. hay sử dụng các phương pháp, công cụ khác nhau để trực quan hóa dữ liệu.
Mục đích là biến các nguồn dữ liệu thành những thông tin được thể hiện một cách
trực quan, dễ quan sát, dễ hiểu, để truyền đạt rõ ràng những hiểu biết đầy đủ
(insights) từ dữ liệu đến người xem, người đọc.
Trực quan hóa dữ liệu là một phần của nghệ thuật và một phần của khoa học
dữ liệu. Thách thức đề ra là làm sao để có được một “tác phẩm” nghệ thuật mà
không thể hiện sai lệch những chỉ dẫn trong khoa học dữ liệu, và ngược lại. Data
visualization đầu tiên và trước hết phải truyền tải đến người xem, người đọc chính
xác không được đánh lạc hướng hoặc bóp méo thông tin, dữ liệu. Tiếp đến, Data
visualization phải được thiết kế sao cho đem lại tính thẩm mỹ (ví dụ việc lựa chọn
chính xác phương pháp trực quan, sự phối hợp hiệu quả màu sắc hay các yếu tố
hình ảnh là cực kỳ quan trọng).
Data visualization thường được sử dụng sau khi có được kết quả phân tích từ
dữ liệu, tức có được thông tin trích xuất từ dữ liệu để trình bày cho người xem,
người đọc. Ngoài ra, Data visualization có thể được sử dụng trước khi dữ liệu được
đưa vào giai đoạn phân tích ví dụ các chuyên gia muốn tìm hiểu trước về các biến
dữ liệu, mối liên hệ giữa chúng là gì để suy nghĩ về các mô hình dự báo, họ có thể
vẽ trước các đồ thị để xem xét. Đây có thể gọi là giai đoạn Data exploration hoặc
phương pháp tóm tắt trình bày dữ liệu trong Statistics.
Ví dụ: Sau khi thống kê số liệu qua bảng, các số liệu được tính toán và biểu diễn
(trực quan hóa) dưới dạng các biểu đồ, đồ thị để phản ánh một cách tổng quát
(thống kê) thông tin cần phân tích.
- Dữ liệu:

- Trực quan hóa

40



3.8 PHÂN TÍCH RFM
3.8.1 Khái niệm RFM
Từ những khách hàng tiêu dùng lớn cho đến những khách hàng rời bỏ doanh
nghiệp, tất cả những khách hàng đều có nhu cầu và mong muốn đa dạng. Doanh
nghiệp muốn khách hàng chi tiêu nhiều hơn từ những chiến dịch tiếp thị chương
trình, sản phẩm mới tới khách hàng theo những cách khác nhau. Tuy nhiên, câu
hỏi đặt ra là làm thế nào để đưa ra được các chiến dịch tiếp thị phù hợp với những
nhóm khách hàng đang có nhu cầu để từ đó tăng tỷ lệ phản hồi từ khách hàng và
từ đó tăng doanh số bán hàng. Bài toán đặt ra là làm thế nào để có thể phân khúc
khách hàng một cách tương đối chính xác dựa trên hành vi giao dịch lịch sử của
khách hàng, thuật toán RFM sẽ giúp chúng ta giải quyết vấn đề này một cách nhanh
chóng và hiệu quả.
Phân tích RFM là một kĩ thuật phân khúc khách hàng dựa trên hành vi giao
dịch của khách hàng trong quá khứ, RFM bao gồm 3 chỉ số chính:
• Recency (R): Thời gian giao dịch cuối cùng.

41

• Frequency (F): Tổng số lần giao dịch chi tiêu.
• Monetary value (M): Tổng số tiền giao dịch chi tiêu.
3.8.2 Qui trình triển khai phân tích RFM
• Bước #1. Xác định nguồn dữ liệu phân tích
• Bước #2. Tính toán các giá trị R, F và M
• Bước #3. Nhóm các khách hàng vào các nhóm theo R, F và M
• Bước #4. Phân tích kết quả và đề xuất chiến lược (hành động) chăm sóc
khách hàng phù hợp với từng nhóm khách hàng.
Để phân loại khách hàng bằng cách sử dụng RFM, hãy chia khách hàng thành
bốn nhóm đồng nhất với nhau hoặc theo nhóm, dựa trên Recency, Frequency và
Monetary. Điều này sẽ dẫn đến 64 (4x4x4) phân khúc khách hàng khác nhau trên
ba biến. Một số nhà phân tích chia khách hàng thành 5 nhóm khác nhau – 125
(5x5x5) phân khúc, nhưng cách tiếp cận này có thể khó khăn hơn.
Để minh họa điều này hơn nữa, chúng ta hãy xem các nhóm.
Recency – R Frequency – F Monetary – M
Phần tư 1 Phần tư 1 Phần tư 1
Phần tư 2 Phần tư 2 Phần tư 2
Phần tư 3 Phần tư 3 Phần tư 3
Phần tư 4 Phần tư 4 Phần tư 4
Chúng ta hãy nhìn vào một khách hàng:
- Ở trong nhóm người mua gần đây nhất (R = 1)
- Ở trong nhóm người mua số lượng nhiều nhất (F = 1)
- Ở trong nhóm người chi tiêu nhiều nhất (M = 1)
Khách hàng này thuộc phân khúc RFM 1-1-1 ( Khách
hàng tốt nhất ), (R = 1, F = 1, M = 1)
Một khách hàng đã mua hàng gần đây sẽ nằm trong nhóm thứ tư đầu tiên
trong R (R = 1). Một khách hàng đã mua số lượng nhỏ nhất sẽ ở nhóm 4 trong F
(F = 4), v.v.

42

Ví dụ: nếu điểm của khách hàng là 444 (R = 4, F = 4, M = 4), điều này có
nghĩa là khách hàng này đã không mua hàng trong một thời gian rất dài, có thể mua
một lần và chi tiêu ít hơn hầu hết khách hàng khác. (Nguồn: bsdinsight.com).
3.8.3 Ví dụ
Để thực hiện phân tích RFM, giả sử chúng ta chia khách hàng thành các nhóm
khác nhau theo phân phối (phân vị) cho tần suất chi tiêu, lần chi tiêu cuối cùng, và
tổng số tiền chi tiêu. Giả sử, mỗi nhóm biến chúng ta chi thành các mức phân vị
khách nhau:

1. Ngày phát sinh giao dịch gần nhất


2. Tần suất mua hàng

43


3. Giá trị trung bình mỗi đơn hàng

➔ Kết hợp R và F

44

3.8.4 Lợi ích của phân tích RFM
• Tăng tỷ lệ giữ chân khách hàng.
• Tăng tốc độ phản hồi từ khách hàng.
• Tăng tỷ doanh thu từ khách hàng.

45

Chương 4
MACHINE LEARNING VÀ CÁC ỨNG DỤNG

4.1 MACHINE LEARNING – MÁY HỌC
4.1.1 Khái niệm
Machine learning (ML) hay máy học là một nhánh của trí tuệ nhân tạo (AI),
nó là một lĩnh vực nghiên cứu cho phép máy tính có khả năng cải thiện chính bản
thân chúng dựa trên dữ liệu mẫu (training data) hoặc dựa vào kinh nghiệm (những
gì đã được học). Machine learning có thể tự dự đoán hoặc đưa ra quyết định mà
không cần được lập trình cụ thể.
Bài toán machine learning thường được chia làm hai loại là dự đoán
(prediction) và phân loại (classification). Các bài toán dự đoán như dự đoán giá
nhà, giá xe… Các bài toán phân loại như nhận diện chữ viết tay, nhận diện đồ vật…
Các bước trong quá trình máy học machine learning workflow như sau như
sau:
1. Data collection – thu thập dữ liệu: để máy tính có thể học được bạn cần
có một bộ dữ liệu (dataset), bạn có thể tự thu thập chúng hoặc lấy các bộ
dữ liệu đã được công bố trước đó. Lưu ý là bạn phải thu thập từ nguồn
chính thống, có như vậy dữ liệu mới chính xác và máy có thể học một
cách đúng đắng và đạt hiệu quả cao hơn.
2. Preprocessing – tiền xử lý: bước này dùng để chuẩn hóa dữ liệu, loại bỏ
các thuộc tính không cần thiết, gán nhãn dữ liệu, mã hóa một số đặc trưng,
trích xuất đặc trưng, rút gọn dữ liệu nhưng vẫn đảm bảo kết quả… Bước
này tốn thời gian nhất tỉ lệ thuận với số lượng dữ liệu bạn có. Bước 1 và
2 thường chiếm hơn 70% tổng thời gian thực hiện.
3. Training model – huấn luyện mô hình: bước này là bước bạn huấn luyện
cho mô hình hay chính là cho nó học trên dữ liệu bạn đã thu thập và xử
lý ở hai bước đầu.
4. Evaluating model – đánh giá mô hình: sau khi đã huấn luyện mô hình
xong, chúng ta cần dùng các độ đo để đánh giá mô hình, tùy vào từng độ

46

đo khác nhau mà mô hình cũng được đánh giá tốt hay không khác nhau.
Độ chính xác của mô hình đạt trên 80% được cho là tốt.
5. Improve – cải thiện: sau khi đã đánh giá mô hình, các mô hình đạt độ
chính xác không tốt thì cần được train lại, chúng ta sẽ lặp lại từ bước 3,
cho đến khi đạt độ chính xác như kỳ vọng. Tổng thời gian của 3 bước
cuối rơi vào khoảng 30% tổng thời gian thực hiện.
4.1.2 Phân loại Machine learning
Có rất nhiều cách phân loại machine learning, thông thường thì machine
learning sẽ được phân làm hai loại chính sau:
• Supervised learning: học có giám sát
• Unsupervised learning: học không giám sát
Ngoài ra, machine learning còn có thể phân làm các loại sau:
• Semi-supervised learning: học bán giám sát
• Deep learning: học sâu (về một vấn đề nào đó)
• Reinforce learning: học củng cố/tăng cường

Cách phân loại phổ biến nhất là phân làm hai nhóm: học có giám sát và học
không giám sát.
▪ Học có giám sát: Supervised learning
Supervised learning là việc cho máy tính học trên dữ liệu đã được gán nhãn
(label), hay nói cách khác, với mỗi đầu vào Xi, chúng ta sẽ có nhãn Yi tương ứng.

47

▪ Học không giám sát: Unsupervised learning
Unsupervised learning là cho máy tính học trên dữ liệu mà không được gán
nhãn, các thuật toán machine learning sẽ tìm ra sự tương quan dữ liệu, mô hình hóa
dữ liệu hay chính là làm cho máy tính có kiến thức, hiểu về dữ liệu, từ đó chúng
có thể phân loại các dữ liệu về sau thành các nhóm, lớp (clustering) giống nhau mà
chúng đã được học hoặc giảm số chiều dữ liệu (dimension reduction).

4.1.3 Môt số khái niệm cơ bản
Dataset (còn gọi là data corpus hay data stock): là tập dữ liệu ở dạng nguyên
thủy chưa qua xử lý mà bạn đã thu thập được ở bước data collection. Một dataset
sẽ bao gồm nhiều data point.
Data point: là điểm dữ liệu, mỗi điểm dữ liệu biểu diễn cho một quan sát.
Mỗi data point có nhiều đặc trưng hay thuộc tính khác nhau, được chia làm hai
loại: dữ liệu số (numerical) và dữ liệu không phải số (ví dụ như chuỗi) (non-
numerical/categorical). Data point được biểu diễn thành dòng tương ứng, mỗi dòng
có thể có 1 hoặc nhiều dữ liệu (chính là các đặc trưng).
Training data và test data: dataset thường sẽ được chia làm 2 tập này,
training data dùng để huấn luyện cho mô hình, test data dùng để dự đoán kết quả
và đánh giá mô hình. Có bài toán người ta sẽ cho sẵn hai tập này thì bạn không cần
phải chia nữa, đối với bài toán chỉ cho mỗi dataset thôi thì phải chia ra. Thường tỷ
lệ giữa tập train và test sẽ là 8/2.
Features vector: là vector đặc trưng, mỗi vector này sẽ biểu diễn cho một
điểm dữ liệu trong dataset. Mỗi vector có n chiều biểu diễn các đặc trưng của điểm

48

dữ liệu, mỗi đặc trưng là một chiều và phải là dữ liệu số. Các mô hình chỉ có thể
huấn luyện được từ các vector đặc trưng này, do đó dataset cần phải chuyển về
dạng một tập các vector đặc trưng (features vectors).
Model: là các mô hình được dùng để training trên một training data theo thuật
toán của mô hình đó. Sau đó mô hình có thể dự đoán hoặc đưa ra các quyết định
dựa trên những gì chúng đã được học.
4.1.4 Ứng dụng của Machine learning
Machine learning được ứng dụng cực kỳ nhiều trong đời sống hiện nay trong
mọi lĩnh vực:
• Tài chính – ngân hàng
• Sinh học
• Nông nghiệp
• Tìm kiếm, trích xuất thông tin
• Tự động hóa
• Robotics
• Hóa học
• Mạng máy tính
• Khoa học vũ trụ
• Quảng cáo
• Xử lý ngôn ngữ tự nhiên
• Thị giác máy tính
Và còn rất rất nhiều lĩnh vực mà machine learning có thể được áp dụng,
machine learning tỏ ra cực kỳ hiệu quả, hơn hẳn con người trong cụ thể các lĩnh
vực mà chúng được áp dụng.
Ví dụ đơn giản như dự báo thời tiết, người ta sẽ dùng các phép tính và những
quan sát, ghi nhận về thời tiết trong quá khứ để dự báo về thời tiết của những ngày
kế tiếp. Tuy nhiên sẽ thế nào nếu như có cực kỳ nhiều quan sát được thực hiện, có
thể lên đến hàng triệu, hàng tỉ quan sát, lúc đó con người không thể nào thực hiện
được việc tính toán trên dữ liệu lớn như vậy. Hơn nữa, việc tính toán với dữ liệu
lớn như vậy có thể gặp sai sót và dẫn đến kết quả dự đoán bị sai.
Khi này, việc áp dụng machine learning vào để cho máy tính học các quan sát
được ghi nhận trong quá khứ, chúng có thể dự đoán được thời tiết trong tương lai
với độ chính xác cao hơn rất nhiều so với con người dự đoán.
Nguồn: topdev.vn

49

4.2 MỘT SỐ ỨNG DỤNG MACHINE LEARNING TRONG NGÂN HÀNG
Sử dụng google colab để thực hành các ứng dụng machine learning
4.2.1 Phân tích và dự báo vỡ nợ bằng machine learning
Hiện nay, việc ứng dụng học máy vào trong lĩnh vực tài chính – kinh tế ngày
càng phổ biến, từ việc đưa ra các dự báo kinh tế cho đến việc dự báo vỡ nợ của
khách hàng. Khác với các kỹ thuật dự báo truyền thống, học máy có khả năng phát
hiện ra các mối liên kết trong dữ liệu, và sử dụng nó để đưa ra các thông tin có ý
nghĩa, hỗ trợ cho quá trình ra quyết định mà không cần có sự can thiệp của con
người. Điểm vượt trội của các kỹ thuật học máy là khả năng học hỏi và cải thiện,
giúp nâng cao độ chính xác trong việc dự báo. Trong lĩnh vực quản lý rủi ro tín
dụng, các thuật toán học máy có thể khai thác thông tin trên tập dữ liệu lớn về
khách hàng, giúp phát hiện ra các yếu tố rủi ro tiềm ẩn trong các sản phẩm tài chính
phức tạp và giúp ngân hàng ra các quyết định chính xác hơn và tiết kiệm chi phí
hơn. Nghiên cứu của Khandani, Kim, và Lo (2010) sử dụng các kỹ thuật học máy
để dự báo khả năng vỡ nợ của các chủ thẻ tín dụng tại Mỹ từ năm 2005 đến 2009,
cho thấy việc sử dụng học máy có thể tiết kiệm được từ 6% đến 23% chi phí tổn
thất, tương đương với hàng trăm triệu đô la cho các ngân hàng. Bên cạnh đó, nghiên
cứu của Barboza, Kimura, và Altman (2017) và Wójcicka (2017) đã cung cấp bằng
chứng cho thấy các phương pháp học máy, cụ thể là máy vector hỗ trợ (SVM) và
mạng nơ tron nhân tạo (ANN) đã mang lại kết quả dự báo vượt trội hơn so với các
phương pháp thống kê truyền thống. Như vậy có thể thấy, học máy là công cụ mang
lại lợi thế cạnh tranh cho các ngân hàng thương mại và các công ty tín dụng tiêu
dùng trong lĩnh vực bán lẻ, và có thể trở thành một xu hướng trong tương lai khi
áp lực cạnh tranh về chi phí và năng lực phục vụ ngày càng tăng cao.
❖ Phân tích và trực quan hóa dữ liệu về khách hàng vay
Trước khi ứng dụng các kỹ thuật dữ báo vào dữ liệu thực tế, nhà phân tích cần
hiểu rõ về cấu trúc dữ liệu mình đang có thông qua quá trình mô tả và trực quan
hóa dữ liệu. Nhờ vào quá trình này, nhà phân tích sẽ biết được dữ liệu đang có sẽ
phù hợp với các kỹ thuật học máy nào và mức độ “sạch”
1
của dữ liệu. Nếu dữ liệu

1
Dữ liệu sạch để chỉ các dữ liệu đã được xử lý, không còn bị các tình trạng như dữ liệu bị thiếu, dữ liệu bị lỗi, dữ
liệu có quan sát bất thường.

50

chưa được làm sạch, họ sẽ phải dùng một số kỹ thuật để làm sạch dữ liệu trước khi
cho máy học.
Một số câu hỏi nhà phân tích cần trả lời ở phần này:
- Tôi đang làm việc với bộ dữ liệu gì?
- Dữ liệu có các đặc trưng (features) nào? (trong mô hình thống kê thường
gọi là các biến)
- Dữ liệu có các giá trị bị thiếu không? (missing values)
- Trạng thái các khoản vay tuân theo phân phối xác suất nào?
- Các đặc trưng có phân phối xác xuất nào?
- Khi nhìn vào các biểu đồ, chúng ta có thể suy ra mối quan hệ giữa các đặc
trưng với khả năng vỡ nợ của khách hàng không?
- Các đặc trưng nào giúp chúng ta mô tả khả năng vỡ nợ của khách hàng?
❖ Một số các đặc trưng thường gặp khi phân tích dữ liệu về vỡ nợ
- Tính chất của khoản vay (Loan characteristics features) như số tiền cho
vay, kỳ hạn vay, mục tiêu vay vốn. Đây là các thông tin chi tiết về khoản
vay.
- Các đặc trưng về nhân chủng học (Demographic features) như tuổi, tình
trạng việc làm, tình trạng hôn nhân. Đây là các thông tin liên quan đến người
đi vay.
- Các đặc trưng về hành vi (Behavioral features) như thời gian thanh toán
hóa đơn, thói quen mua sắm, số tiền gửi tiết kiệm, số lượng thẻ tín dụng.
Đây là các thông tin liên quan đến hành vi, thói quen về tài chính của người
đi vay.
❖ Dưới đây là một số nội dung quan trọng về mô tả và trực quan hóa dữ liệu:
- Mô tả tổng quan về tập dữ liệu (phân phối xác suất của các khoản cho vay)
- Làm sạch dữ liệu (xử lý giá trị bị thiếu, chuẩn hóa dữ liệu, xử lý giá trị ngoại
lai)
- Khởi tạo các ngưỡng để phân tích (chia dữ liệu theo tháng/quý/năm hoặc
theo các mức thu nhập)

51

- Phân tích đơn biến (Phân tích các biến rời rạc và các biến liên tục)
- Phân tích hai biến (Biểu đồ hộp, Biểu đồ Scatter, Biểu đồ Violin)
- Phân tích đa biến (Biểu đồ nhiệt)
❖ Ứng dụng các công cụ học máy cổ điển trong dự báo vỡ nợ
Các thuật toán phân loại được sử dụng trong khóa học này là cây quyết định
(Decision Tree), rừng ngẫu nhiên (Random Forest) và mạng thần kinh nhân tạo
(Artificial Neurol Network).
• Cây quyết định và rừng ngẫu nhiên
Cây quyết định là một phương pháp để giải quyết các vấn đề hồi quy hoặc
phân loại bằng cách vẽ biểu đồ các quy tắc quyết định dưới dạng một cấu trúc
cây. Thuật toán chia một không gian đặc tính, bao gồm sự kết hợp của ?????? biến giải
thích ??????
1,??????
2,…,??????
??????, thành ?????? các miền không chồng chéo ??????
1,??????
2,…,??????
?????? và đưa ra
dự đoán cho các quan sát thuộc cùng một miền. Chỉ số Gini được sử dụng để đo
lường chất lượng phân tách.

??????=∑??????̂
????????????(1−??????̂
????????????)
??????
??????=1

Trong đó ?????? là số trạng thái và ??????̂
???????????? là tỷ trọng của trạng thái ?????? trong miền ??????
??????
(James, Witten, Hastie, & Tibshirani, 2013).
Thuật toán cây quyết định có ưu điểm là mô hình trực quan và dễ diễn giải
kết quả, nhưng hạn chế là dễ xảy ra hiện tượng mô hình quá khớp trong quá trình
phân chia miền đặc trưng hoặc quá trình tạo các nhánh.
Thuật toán rừng ngẫu nhiên (Random Forest) là một thuật toán học máy sử
dụng nhiều cây quyết định. Thuật toán này chọn một số biến giải thích một cách
ngẫu nhiên trong quá trình tạo cây quyết định. Kết quả dự báo của mô hình được
xác định dựa trên kết quả được dự báo phổ biến nhất trên tập hợp các cây quyết
định.
• Mạng thần kinh nhân tạo (ANN)
Mạng thần kinh nhân tạo (còn gọi là mạng nơ-ron thần kinh) là một thuật
toán học máy được thiết kế dựa trên ý tưởng về cách thức hoạt động của bộ não

52

sinh vật. Thuật toán giải quyết các vấn đề phức tạp bằng cách bắt chước cấu trúc
bộ não và các kết nối giữa các nơ-ron thần kinh. Mạng thần kinh nhân tạo bao gồm
các kết nối giữa nhiều lớp nơ-ron nhân tạo và mỗi lớp được chia thành lớp đầu vào
và lớp đầu ra, và một lớp ẩn giữa chúng. Các nơ-ron nhân tạo này mô phỏng lại vai
trò của các nơ-ron thực tế thông qua các mô hình toán học. Mỗi nơ-ron nhân tạo
nhận tín hiệu đầu vào, �
1,�
2,…,�
??????, bao gồm các số 0 và 1, sau đó nó ước tính tổng
trọng số của các tín hiệu mà nó nhận được theo trọng số của chúng, �
1,�
2,…,�
??????.
Một tín hiệu chỉ được truyền đến nơ-ron nhân tạo tiếp theo khi tổng trọng số của
các tín hiệu nhận được vượt một ngưỡng nhất định. Một nơ-ron nhân tạo có thể
được biểu thị như sau:

y
i=output=
{



0 if ∑w
jx
j≤threshold
j
1 if ∑w
jx
j>.threshold
j

Quá trình tối ưu hóa mạng nơ-ron được thực hiện thông qua việc xác định
trọng số và ngưỡng để kích hoạt dựa trên dữ liệu quá khứ.
Ưu điểm của mạng nợ-trong nhân tạo là kết quả dự báo thường mang lại độ
chính xác cao, tuy nhiên kết quả rất khó để diễn giải. Phương pháp này được ví
như một hộp đen (black box) tức nhà phân tích chỉ biết được dữ liệu đầu vào và
kết quả đầu ra, nhưng không thể nào biết được quá trình xử lý của hệ thống.
❖ Quá trình áp dụng kỹ thuật học máy có thể được mô tả qua các bước như sau:
- Bước 1: Phân tách biến giải thích và biến dự báo
- Bước 2: Phân chia dữ liệu thành tập huấn luyện và tập kiểm tra
- Bước 3: Thiết lập mô hình áp dụng
- Bước 4: Thực hiện huấn luyện
- Bước 5: Tiến hành dự báo trên tập dữ liệu kiểm tra
- Bước 6: Đánh giá tính hiệu quả của mô hình
Ví dụ:
Dữ liệu thu thập đối với các khách hàng:

53

- 6.599 mẫu không phá sản
- 220 mẫu phá sản
- Dữ liệu mất cân bằng
Tiền xử lý:
- Dùng google colab Thống kê
mô tả
- Dùng google colab Thu giảm
chiều
Bài toán:
- Phân lớp nhị phân
- Gom cụm
➔ Kết quả tính toán:
Phần thực hành được hướng dẫn trong mục 4.3 Google Colab

4.2.2 Phân tích, nhận diện và cảnh báo gian lận thẻ tín dụng bằng Machine
Learning
Chúng ta sử dụng cơ sở dữ liệu xuyên thời gian để thực hiện phân tích gian
lận thời gian thực cho các giao dịch thanh toán bằng thẻ tín dụng và di động. Mỗi
khi thẻ được quẹt hoặc chèn, hoặc điện thoại bị gõ hoặc quét, sẽ có sự cho phép
hoặc từ chối. Quyết định này được thúc đẩy bởi một mô hình học máy có thể xác
định hành vi gian lận dựa trên thông tin từ dữ liệu gian lận lịch sử. Khóa đào tạo
này diễn ra trong một hệ thống dữ liệu lớn nhận thông tin xuất khẩu từ cơ sở dữ
liệu xuyên bộ nhớ trong bộ nhớ và mô hình sau đó được tải dưới dạng các thủ tục
được lưu trữ hoặc các hàm do người dùng xác định vào cơ sở dữ liệu nhiều lần
trong ngày. Việc thiết kế một hệ thống phát hiện gian lận cơ sở thường bao gồm
các bước chính:
1. Xác định tập huấn luyện (dữ liệu lịch sử) và tập thử nghiệm (dữ liệu mới).
Tập huấn luyện là tập hợp con của các giao dịch được sử dụng để huấn luyện
mô hình dự đoán. Tập kiểm tra là tập hợp con của các giao dịch được sử
dụng để đánh giá hiệu suất của mô hình dự đoán.

54

2. Đào tạo một mô hình dự đoán: Bước này bao gồm việc sử dụng bộ đào tạo
để tìm ra một mô hình dự đoán có thể dự đoán liệu một giao dịch là thật hay
gian lận. Chúng tôi sẽ dựa vào nhiệm vụ này trên sklern thư viện Python,
nơi cung cấp các hàm dễ sử dụng để đào tạo các mô hình dự đoán.
3. Đánh giá hiệu suất của mô hình dự đoán: Hiệu suất của mô hình dự đoán
được đánh giá bằng cách sử dụng bộ thử nghiệm (dữ liệu mới).

Ví dụ:
Dữ liệu được thu thập từ các chủ thẻ ở Châu Âu trong hai ngày vào tháng 09
năm 2013 với kết quả và nhận định như sau:
- 492 giao dịch gian lận
- 284.807 giao dịch bình thường
- Rất mất cân bằng
Bài toán phân tích bằng machine learning:
- Phân lớp nhị phân
- Gom cụm
Tiền xử lý dữ liệu:
- Thống kê mô tả
- Thu giảm chiều

55


Quá trình thực hiện ví dụ trên gồm các công việc như sau:
▪ Dữ liệu đầu vào (Input)
Dữ liệu đầu vào đóng vai trò rất quan trọng trong việc ứng dụng machine
learning trong việc phân tích, nhận diện và cảnh báo gian lận thẻ tín dụng bởi vì nó
tác động đến việc lựa chọn các thuật toán trong học máy và kết quả của mô hình
dự báo. Dữ liệu càng được thu thập một cách chi tiết và cẩn thận thì quá trình học
máy càng diễn ra thuận lợi và đưa đến kết quả tốt. Trong trường hợp này, dữ liệu
đầu vào sẽ là các thông tin liên quan đến người chủ thẻ, giao dịch và địa điểm giao
dịch. Các thông tin cần thu thập liên quan đến người chủ thẻ như: ID, độ tuổi, giới
tính, tần suất sử dụng thẻ, thời gian giữa những lần sử dụng thẻ...Các thông tin giao
dịch cần thu thập như: thời gian giao dịch xảy ra, số tiền, loại thẻ được sử dụng,
email được sử dụng để xác nhận…Các thông tin về địa điểm xảy ra giao dịch như
vị trí, quốc gia…
▪ Thống kê mô tả dữ liệu
Dữ liệu sau khi được thu thập cần phải được phân tích và tìm hiểu. Việc hiểu
được dữ liệu giúp chúng ta đánh giá được chúng ta đang có được những thông tin
gì cho quá trình xây dựng mô hình học máy. Có 2 cách phổ biến để phân tích dữ
liệu đó là: thống kê mô tả và trực quan hóa dữ liệu. Thống kê mô tả là các hệ số
mô tả ngắn gọn hay tóm tắt một tập dữ liệu nhất định, có thể là đại diện cho toàn
bộ hoặc mẫu của một tổng thể. Thống kê mô tả được chia thành đo lường xu hướng
tập trung và đo lường biến động. Đo lường xu hướng tập trung có giá trị trung bình,
trung vị và yếu vị, trong khi các đo lường biến động gồm độ lệch chuẩn, phương
sai, giá trị nhỏ nhất và giá trị lớn nhất, độ nhọn và độ lệch. Trong khi đó, trực quan
hóa dữ liệu là thể hiện dữ liệu thành các dạng đồ họa như là đồ thị, biểu đồ hay sử

56

dụng các phương pháp, công cụ khác nhau để trực quan hóa và minh họa dữ liệu
tốt nhất Mục đích là biến các nguồn dữ liệu thành những thông tin được thể hiện
một cách trực quan, dễ quan sát, dễ hiểu, dễ truyền đạt rõ ràng những hiểu biết đầy
đủ từ dữ liệu đến người nghiên cứu. Tóm lại, dù sử dụng các cách thức nào thì
chúng ta cần cố gắng trả lời những câu hỏi như sau: kích cỡ của dữ liệu, chất lượng
của dữ liệu, phân phối và đặc điểm của các thông tin đầu vào, mức độ thiếu cân
bằng của dữ liệu, mức độ tương quan giữa các thông tin…
▪ Giảm chiều dữ liệu
Giảm chiều dữ liệu là sự biến đổi dữ liệu từ không gian chiều-cao thành không
gian chiều-thấp để biểu diễn ở dạng chiều-thấp đồng thời giữ lại một số thuộc tính
có ý nghĩa của dữ liệu gốc. Giảm chiều dữ liệu giúp cải thiện độ chính xác của mô
hình do giảm thiểu điểm dữ liệu dư thừa, nhiễu; mô hình huấn luyện nhanh hơn và
giảm tài nguyên sử dụng để tính toán; Kết quả của mô hình có thể được phân tích
dễ dàng hơn; Giảm thiểu hiện tượng quá khớp (overfitting) hay các trường hợp đa
cộng tuyến trong bài toán hồi quy…Các phương pháp giảm chiều dữ liệu thông
thường được chia thành cách tiếp cận tuyến tính và phi tuyến tính. Các cách tiếp
cận cũng được chia thành chọn đặc tính (feature selection) và trích chọn đặc
trưng (feature extraction).
▪ Mô hình học máy cổ điển
Các thuật toán học máy được áp dụng trong việc phân tích, nhận diện và cảnh
báo gian lận thẻ tín dụng có thể kể đến như: Mạng thần kinh nhân tạo (Artificial
Neural Network), Cây quyết định (Decision tree), Rừng ngẫu nhiên (Random
forest), Thuật toán Boosting, Hồi quy Logistic, Support Vector Machines, K-
Nearest Neighbour. Các thuật toán ML được chia làm bốn nhóm, bao gồm Học có
giám sát (Supervised Learning), Học không giám sát (Unsupervised Learning),
Học bán giám sát (hay học kết hợp - Semi-supervised Learning) và Học tăng cường
(Reinforcement Learning).
Quá trình áp dụng kỹ thuật học máy có thể được mô tả qua các bước như sau:
Bước 1: Phân tách biến giải thích và biến dự báo
Bước 2: Phân chia dữ liệu thành tập huấn luyện và tập kiểm tra
Bước 3: Thiết lập mô hình áp dụng

57

Bước 4: Thực hiện huấn luyện
Bước 5: Tiến hành dự báo trên tập dữ liệu kiểm tra
Bước 6: Đánh giá tính hiệu quả của mô hình
▪ Đánh giá tính hiệu quả của mô hình
Để đánh giá tính hiệu quả của mô hình học máy, chúng ta sử dụng ma trận
Confusion, đây là một phương pháp đánh giá kết quả của những bài toán phân loại
với việc xem xét cả những chỉ số về độ chính xác và độ bao quát của các dự đoán
cho từng lớp. Một confusion matrix gồm 4 chỉ số sau đối với mỗi lớp phân loại:
- TP (True Positive): Số lượng dự đoán chính xác. Là khi mô hình dự đoán
đúng một giao dịch không gian lận.
- TN (True Negative): Số lương dự đoán chính xác một cách gián tiếp. Là khi
mô hình dự đoán đúng một giao dịch gian lận.
- FP (False Positive - Type 1 Error): Số lượng các dự đoán sai lệch. Là khi mô
hình dự đoán đó là một giao dịch không gian lận nhưng giao dịch đó trong
thực tế là một giao dịch gian lận.
- FN (False Negative - Type 2 Error): Số lượng các dự đoán sai lệch một cách
gián tiếp. Là khi mô hình dự đoán đó là giao dịch gian lận nhưng trong thực
tế đó là một giao dịch không gian lận.

4.2.3 Hệ thống khuyến nghị sản phẩm và dịch vụ
Mỗi khách hàng là duy nhất về đặc điểm và hành vi của họ. Nhưng cũng có
sự hiện diện của những điểm tương đồng nhất định có thể được xác định trong dữ
liệu rộng lớn. Có nhiều yếu tố khác nhau như nhân khẩu học, địa lý, hành vi, dựa
trên nhu cầu và giá trị để đặt tên cho một vài yếu tố sẽ giúp chúng tôi phân khúc
khách hàng. Các phân đoạn này giúp hiểu các mẫu hành vi cụ thể của khách hàng,
từ đó giúp chúng tôi tìm kiếm những phân khúc khách hàng khác nhau, chạy các
chiến dịch được nhắm mục tiêu và cũng cải thiện mức độ tương tác của khách hàng.
Khi chúng ta đi đến một cửa hàng và được hỗ trợ bởi một người bán hàng,
chúng ta không chỉ nhận được những gì chúng ta đang tìm kiếm mà người bán hàng
còn cố gắng bán chéo hoặc bán thêm sản phẩm của họ. Điều này tương tự như

58

những gì hệ thống đề xuất thực hiện khi khách hàng mua hàng trực tuyến. Lợi ích
của công cụ đề xuất nhằm cải thiện khả năng cá nhân hóa, doanh thu và sự hài lòng
của khách hàng. Điều này không chỉ giúp khách hàng khám phá ra những sản phẩm
mới mà còn giúp công ty cải thiện doanh thu.
Một số phương pháp triển khai hệ thống như vậy là thông qua việc tạo ra hệ
thống lọc cộng tác, lọc dựa trên nội dung và hệ thống đề xuất kết hợp sử dụng dữ
liệu hành vi và hành vi mua hàng của khách hàng và xác định những điểm tương
đồng với các giao dịch mua hàng khác của khách hàng.
Hệ thống khuyến nghị bao gồm:

❖ Mạng nơ-ron đồ thị
Graph Neural Network (GNN) gần đây đã nhận được rất nhiều sự quan tâm
do khả năng phân tích dữ liệu cấu trúc đồ thị. Bài viết này giới thiệu nhẹ nhàng về
Graph Neural Network. Nó bao gồm một số lý thuyết đồ thị để dễ hiểu đồ thị và
các vấn đề trong phân tích đồ thị. Sau đó, nó giới thiệu Graph Neural Network ở
các dạng khác nhau và nguyên lý của chúng. Nó cũng bao gồm những gì GNN có
thể làm và một số ứng dụng của GNN.
Đồ thị là một cấu trúc dữ liệu bao gồm hai thành phần: đỉnh và cạnh . Nó được
sử dụng như một cấu trúc toán học để phân tích mối quan hệ theo cặp giữa các đối
tượng và thực thể. Thông thường, một đồ thị được định nghĩa là G = (V, E), trong
đó V là tập hợp các nút và E là các cạnh giữa chúng.

59


Một đồ thị thường được biểu diễn bằng một ma trận kề, A. Nếu một đồ thị
có N nút, thì A có số chiều là ( N x N ). Đôi khi người ta cung cấp một ma trận đặc
trưng khác để mô tả các nút trong đồ thị. Nếu mỗi nút có F số đối tượng, thì ma
trận đối tượng X có số chiều là ( N x F ).
Graph Neural Network, như cách gọi của nó, là một mạng neural có thể được
áp dụng trực tiếp vào đồ thị. Nó cung cấp một cách thuận tiện cho nhiệm vụ dự
đoán mức nút, mức cạnh và mức đồ thị.
Chủ yếu có ba loại mạng nơron đồ thị trong tài liệu:
- Mạng Neural Graph lặp lại
- Mạng lưới hợp pháp không gian
- Mạng lưới phổ biến
▪ Mạng Neural Graph lặp lại
RecGNN được xây dựng với giả định của Định lý Điểm cố định Banach. Định
lý điểm cố định Banach phát biểu rằng: Cho (X, d) là một không gian mêtric đầy
đủ và cho (T: X → X) là một ánh xạ co. Khi đó T có một điểm cố định duy nhất (x
∗) và với x X X bất kỳ thì dãy T_n (x) với n → ∞ hội tụ đến (x ∗). Điều này có nghĩa
là nếu tôi áp dụng ánh xạ T trên x trong k lần, x ^ k gần như bằng x ^ (k-1), tức là:

RecGNN định nghĩa một hàm được tham số hóa f_w:

60

trong đó l_n, l_co, x_ne, l_ne đại diện cho các tính năng của nút hiện tại [ n ] ,
các cạnh của nút [ n ] , trạng thái của các nút lân cận và các tính năng của các nút
lân cận.

Cuối cùng, sau k lần lặp, trạng thái nút cuối cùng được sử dụng để tạo ra một
đầu ra để đưa ra quyết định về mỗi nút. Hàm đầu ra được định nghĩa là:

▪ Mạng lưới hợp pháp không gian
Ý tưởng về tích chập trên một hình ảnh là tính tổng các pixel lân cận xung
quanh một pixel trung tâm, được chỉ định bởi một bộ lọc với kích thước được tham
số hóa và trọng lượng có thể học được. Mạng lưới không gian áp dụng ý tưởng
tương tự bằng cách tổng hợp các tính năng của các nút lân cận vào nút trung tâm.

61

Trái: Chuyển đổi trên đồ thị thông thường chẳng hạn như hình ảnh. Đúng:
Phép biến đổi trên cấu trúc đồ thị tùy ý. Hình từ “Khảo sát toàn diện về mạng thần
kinh biểu đồ”
▪ Mạng lưới phổ biến
So với các dạng GNN khác, dạng mạng chập đồ thị này có nền tảng toán học
rất vững chắc. Mạng lưới phổ biến được xây dựng trên lý thuyết xử lý tín hiệu đồ
thị. Và bằng cách đơn giản hóa Và tính gần đúng của tích chập đồ thị.
Bằng phép gần đúng đa thức Chebyshev (Hammond và cộng sự 2011) , tích
chập đồ thị có thể được đơn giản hóa thành dạng dưới đây:

Sau khi đơn giản hóa hơn nữa, đề xuất cấu trúc mạng nơ-ron 2 lớp, có thể
được mô tả trong một phương trình như sau:

trong đó A_head là Laplacian đã được xử lý trước của ma trận kề đồ thị gốc
A. (Chi tiết về toán học có thể được tìm thấy trong giấy GCN. Sẽ mất nhiều nỗ lực
để giải thích đầy đủ.)
Công thức này trông rất quen thuộc nếu bạn có một số kinh nghiệm về học
máy. Đây không phải là gì ngoài cấu trúc hai lớp được kết nối đầy đủ thường được
sử dụng. Nhưng nó thực sự đóng vai trò là tích chập đồ thị trong trường hợp này.
Tôi sẽ chỉ ra tại sao nó có thể thực hiện tích chập đồ thị bên dưới.

62


Hãy coi chúng ta có một đồ thị đơn giản với 4 nút. Mỗi nút này được gán một
ma trận tính năng như trong hình trên. Có thể dễ dàng đưa ra ma trận kề đồ thị và
ma trận đặc trưng như hình dưới đây:

Lưu ý rằng đường chéo của ma trận kề được chủ ý thay đổi thành '1' để thêm
vòng lặp tự cho mọi nút. Điều này là bao gồm tính năng của chính mỗi nút khi
chúng tôi thực hiện tổng hợp tính năng.
Sau đó, chúng tôi thực hiện A x X ( hãy quên đi Laplacian của A và ma trận
trọng số W trước để đơn giản hóa việc giải thích. )

Kết quả của phép nhân ma trận được hiển thị trong ma trận ngoài cùng bên
phải. Hãy xem tính năng kết quả của nút đầu tiên làm ví dụ. Không khó để nhận
thấy rằng kết quả là tổng tất cả các đặc điểm của [nút 1] bao gồm cả đặc điểm của

63

chính [nút 1] và các đặc điểm trong [nút 4] không được bao gồm vì nó không phải
là hàng xóm của [nút 1] . Về mặt toán học, ma trận kề của đồ thị chỉ có giá trị '1' khi
có một cạnh và '0' nếu không. Điều này làm cho phép nhân ma trận trở thành tổng
các tính năng của các nút được kết nối với nút tham chiếu.
Do đó, Mạng lưới phổ biến và Mạng lưới hợp quy không gian, mặc dù bắt đầu
trên một cơ sở khác nhau, nhưng có chung một quy tắc lan truyền.
Tất cả các mạng nơ ron biểu đồ tích chập hiện có sẵn đều có chung một định
dạng. Tất cả họ đều cố gắng học một hàm để truyền thông tin về nút xung quanh
và cập nhật trạng thái của nút bằng quá trình truyền thông báo này.
Bất kỳ Mạng Neural Đồ thị nào cũng có thể được biểu thị dưới dạng Mạng
Neural Truyền Thông báo (J. Gilmer và cộng sự, 2017) với chức năng truyền thông
báo , chức năng cập nhật nút và chức năng đọc.
▪ GNN có thể làm gì?
Các vấn đề mà GNN giải quyết có thể được phân thành ba loại:
- Phân loại nút
- Dự đoán liên kết
- Phân loại đồ thị
Trong dự đoán liên kết , nhiệm vụ là hiểu mối quan hệ giữa các thực thể trong
đồ thị và dự đoán xem hai thực thể có kết nối ở giữa hay không. Ví dụ: một hệ
thống giới thiệu có thể được coi là bài toán dự đoán liên kết trong đó mô hình được
đưa ra một tập hợp các đánh giá của người dùng về các sản phẩm khác nhau, nhiệm
vụ là dự đoán sở thích của người dùng và điều chỉnh hệ thống giới thiệu để đẩy các
sản phẩm phù hợp hơn theo người dùng ' quan tâm.
Trong phân loại đồ thị , nhiệm vụ là phân loại toàn bộ đồ thị thành các loại
khác nhau. Nó tương tự như phân loại hình ảnh nhưng mục tiêu chuyển thành miền
đồ thị. Có một loạt các vấn đề công nghiệp có thể áp dụng phân loại đồ thị, ví dụ,
trong hóa học, y sinh, vật lý, trong đó mô hình được đưa ra một cấu trúc phân tử
và được yêu cầu phân loại mục tiêu thành các loại có ý nghĩa. Nó tăng tốc độ phân
tích nguyên tử, phân tử hoặc bất kỳ kiểu dữ liệu có cấu trúc nào khác.
❖ Các bài toán cơ bản trên đồ thị

64

Sau khi hiểu những loại phân tích mà GNN có thể thực hiện, bạn phải tự hỏi
những điều thực sự mà tôi có thể làm với đồ thị là gì. Chà, phần này sẽ cung cấp
cho bạn nhiều hiểu biết hơn về các ứng dụng trong thế giới thực của GNN.
GNN trong xử lý ngôn ngữ tự nhiên
GNN được sử dụng rộng rãi trong Xử lý Ngôn ngữ Tự nhiên (NLP). Trên thực
tế, đây cũng là nơi GNN bắt đầu. Nếu một số bạn có kinh nghiệm về NLP, chắc
hẳn bạn đang nghĩ rằng văn bản phải là một loại dữ liệu tuần tự hoặc dữ liệu tạm
thời có thể được mô tả tốt nhất bằng RNN hoặc LTSM. À, GNN tiếp cận vấn đề ở
một góc độ hoàn toàn khác. GNN đã sử dụng quan hệ bên trong của từ ngữ hoặc
văn bản để dự đoán các thể loại. Ví dụ, mạng trích dẫn đang cố gắng dự đoán nhãn
của mỗi bài báo trong mạng được đưa ra bởi mối quan hệ trích dẫn trên giấy và các
từ được trích dẫn trong các bài báo khác. Nó cũng có thể xây dựng một mô hình cú
pháp bằng cách xem các phần khác nhau của câu thay vì hoàn toàn theo trình tự
như trong RNN hoặc LTSM.
GNN trong Thị giác máy tính
Nhiều phương pháp dựa trên CNN đã đạt được hiệu suất tiên tiến trong việc
phát hiện đối tượng trong hình ảnh, nhưng chúng ta vẫn chưa biết mối quan hệ của
các đối tượng. Một công việc thành công của GNN trong CV là sử dụng đồ thị để
mô hình hóa mối quan hệ giữa các đối tượng được phát hiện bởi bộ dò dựa trên
CNN. Sau khi các đối tượng được phát hiện từ hình ảnh, chúng sẽ được đưa vào
một suy luận GNN để dự đoán mối quan hệ. Kết quả của suy luận GNN là một đồ
thị được tạo mô hình hóa các mối quan hệ giữa các đối tượng khác nhau.

Một ứng dụng thú vị khác trong CV là tạo hình ảnh từ mô tả đồ thị. Đây có
thể hiểu là gần như mặt trái của ứng dụng nói trên. Cách tạo hình ảnh truyền thống

65

là tạo văn bản thành hình ảnh sử dụng GAN hoặc tự động mã hóa. Thay vì sử dụng
văn bản để mô tả hình ảnh, tạo biểu đồ thành hình ảnh cung cấp thêm thông tin về
cấu trúc ngữ nghĩa của hình ảnh.
Hình ảnh được tạo từ biểu đồ cảnh. Hình của J. Johnson, A. Gupta và L. Fei-Fei,
“Tạo hình ảnh từ biểu đồ cảnh” trong Proc. của CVPR, 2018
Ứng dụng thú vị nhất là zero-shot learning (ZSL). Bạn có thể tìm thấy bài
đăng này để được giới thiệu toàn diện về ZSL. Nói tóm lại, ZSL đang cố gắng học
cách phân loại một lớp với KHÔNG có mẫu đào tạo nào (của các lớp mục tiêu).
Đó là một thách thức khá lớn vì nếu không có mẫu đào tạo nào được đưa ra, chúng
ta cần để người mẫu “suy nghĩ” một cách logic để nhận ra mục tiêu. Ví dụ, nếu
chúng ta được đưa cho ba hình ảnh (như trong hình bên dưới) và được yêu cầu tìm
“okapi” trong số đó. Có thể chúng ta chưa từng thấy “okapi” trước đây. Nhưng nếu
chúng tôi cũng được cung cấp thông tin rằng “okapi” là một động vật mặt hươu,
có bốn chân và có làn da sọc vằn, thì chúng tôi không khó để tìm ra con nào là
“okapi”. Các phương pháp điển hình là mô phỏng “quá trình tư duy” này bằng cách
chuyển các đặc điểm đã phát hiện thành văn bản. Tuy nhiên, các bảng mã văn bản
là độc lập với nhau. Thật khó để mô hình hóa các mối quan hệ giữa các mô tả văn
bản. Nói cách khác, các biểu diễn đồ thị mô hình hóa tốt các mối quan hệ này, làm
cho cỗ máy suy nghĩ theo cách “giống con người” hơn.

66

Hình từ X. Wang, Y. Ye và A. Gupta, “Nhận dạng ảnh không thông qua nhúng
ngữ nghĩa và biểu đồ tri thức” trong CVPR 2018
GNN trong các miền khác
Các ứng dụng thực tế hơn của GNN bao gồm phát hiện hành vi con người,
kiểm soát giao thông, nghiên cứu cấu trúc phân tử, hệ thống khuyến nghị, xác minh
chương trình, suy luận logic, dự đoán ảnh hưởng xã hội và ngăn chặn tấn công đối
thủ. Dưới đây là biểu đồ mô hình hóa mối quan hệ của mọi người trong mạng xã
hội. GNN có thể được áp dụng để phân cụm mọi người thành các nhóm cộng đồng
khác nhau.

❖ Case study: Ứng dụng khuyến nghị sản phẩm
- Dựa trên dữ liệu thu thập được để xác định các mối quan hệ khách hàng và các
sở thích của khách hàng. Phần học máy sẽ biểu diễn mối quan hệ như sau:

67

- Sau khi đánh giá, xem xét được các mối quan hệ có ảnh hưởng chính và phân
tích đặc điểm nhu cầu của khách hàng, máy tính sẽ đưa ra khuyến nghị các sản
phẩm, dịch vụ nên được giới thiệu cho khách hàng.



4.2.4 Ứng dụng machin learning trong dự báo các chỉ số kinh tế
❖ Những vấn đề cơ bản trong dự báo vĩ mô bằng machine learning
Các mô hình dự báo truyền thống chủ yếu là các mô hình thống kê, bao gồm
các mô hình tự hồi qui (Auto-regressive – AR) và tự hồi qui véc-tơ (Vector Auto-
regressive - VAR). Bên cạnh VAR, các mô hình tự hồi qui truyền thống được sử
dụng rội rãi trong dự báo kinh tế là tự hồi qui, trung bình trượt (Moving Average -
MA), trung bình trượt kết hợp tự hồi qui (ARMA), trung bình trượt tích hợp tự hồi

68

qui (ARIMA). Các phương pháp này có thể dùng trung bình trượt có trọng số
(Weighted Moving Average) và kết hợp với kỹ thuật làm trơn hệ số mũ
(Exponential Smoothing). Hồi qui tuyến tính sử dụng kỹ thuật bình phương tối
thiểu (least square) cũng là mô hình dự báo truyền thống.
Theo Jordan và Mitchell (2015), học máy giải quyết câu hỏi làm thế nào để
phát triển các máy tính cải thiện tự động thông qua kinh nghiệm. Về nền tảng, học
máy nằm trên giao lộ của khoa học máy tính, thống kê và các lĩnh vực khác quan
tâm đến: (i) sự cải thiện tự động qua thời gian, và (ii) suy diễn và ra quyết định
dưới điều kiện không chắc chắn. Một hệ thống học máy thông thường bao gồm các
thành phần sau: (1) bài toán, (2) dữ liệu, (3) mô hình, (4) giải thuật học, và (5) đánh
giá. Phần dữ liệu là rất quan trọng và theo truyền thống thường được chia thành ba
tập là: (i) tập dữ liệu huấn luyện dùng để huấn luyện mô hình, (ii) tập dữ liệu thẩm
tra (validation) dùng để tinh chỉnh các siêu tham số và (iii) tập kiểm thử (testing)
dùng để đánh giá khả năng tổng quát hoá của mô hình (khả năng dự đoán chính
xác với dữ liệu chưa được "nhìn thấy" khi được huấn luyện).
Một nhánh của học máy mới nổi gần đây là học máy (deep learning) cũng đã
có nhiều ứng dụng trong dự báo kinh tế - tài chính. Học máycho phép các mô hình
tính toán gồm nhiều tầng xử lý để học biểu diễn dữ liệu với nhiều mức trừu tượng
khác nhau (LeCun, Bengio và Hinton, 2015). Ưu điểm của học máylà khả năng
học biểu diễn nhằm trích rút tự động véc-tơ đặc trưng của dữ liệu đầu vào. Với ưu
điểm đó học máyđã tạo ra nhiều đột phát trong các lĩnh vực thị giác máy tính
(computer vision)2 và xử lý ngôn ngữ tự nhiên (natural language processing)3
(LeCun, Bengio và Hinton, 2015). Học máycũng đã được ứng dụng vào dự báo dữ
liệu chuỗi thời gian. Các khảo sát của Sezer, Gudelek và Ozbayoglu (2020) và Lim
và Zohren (2020) cho thấy mạng nơ ron tích chập (convolutional neural networks)
và mạng nơ-ron hồi qui (LSTM và GRU) cùng với cơ chế chú ý (attention
machanisms) đã được sử dụng phổ biến cho dự báo chuỗi thời gian.
Gần đây các kỹ thuật học máy đã được áp dụng vào dự đoán một số vấn đề
kinh tế - xã hội và cho kết quả tốt hơn so với các mô hình truyền thống (Taghiyeh,
Lengacher & Handfield, 2020; Chakrabort & Joseph, 2017; Bolhuis & Rayner,

2
https://en.wikipedia.org/wiki/Computer_vision
3
https://en.wikipedia.org/wiki/Natural_language_processing

69

2020; Stevens & cộng sự, 2020; Harutyunyan & cộng sự, 2019). Chakraborty và
Joseph (2017) ứng dụng một số mô hình học cổ điển vào dự đoán bất thường từ đó
cảnh báo qui chế nhằm giám sát các định chế tài chính dựa vào các bảng cân đối
kế toán. Các tác giả cũng cho thấy các mô hình cổ điển có thể áp dụng vào dự đoán
lạm phát chỉ số giá tiêu dùng (CPI). Cho đến nay cũng đã có một số công trình ứng
dụng học máy vào dự báo kinh tế vĩ mô (Coulombe & cộng sự, 2019; Hall, 2018;
Bolhuis & Rayner, 2020; Wochner, 2020; Soybilgen &Yazgan, 2020). Các công
trình này đều cho thấy sự ưu việt của học máy so với các mô hình dự báo truyền
thống.
Dự báo kinh tế vĩ mô là một nhiệm vụ chính yếu trong việc ước đoán triển
vọng kinh tế của một quốc gia, giúp các nhà hoạch định chính sách kinh tế vĩ mô
ra các quyết định về chính sách phát triển kinh tế và quản trị rủi ro ở tầm vĩ mô.
Cho đến nay, các mô hình dự báo kinh tế vĩ mô phổ biến chủ yếu là các mô hình
thống kê truyền thống, ví dụ như mô hình ARIMA, VAR, GARCH, . . ., với các
tham số của mô hình được ước lượng sử dụng các phương pháp bình pháp bình
phương tối thiểu (least square).
❖ Ứng dụng dự báo trong bối cảnh nền kinh tế bị ảnh hưởng bởi dịch bệnh
covid-19
Trong phần này chúng tôi trình bày nhiệm vụ dự báo kinh tế vĩ mô Việt Nam
2021 bằng sử dụng học sâu. Ứng dụng học máyvào dự báo kinh tế vĩ mô cho các
nền kinh tế có nhiều dữ liệu thống kê về kinh tế vĩ mô, ví dụ kinh tế Mỹ, đã là
nhiệm vụ thách thức, dự báo kinh tế vĩ mô Việt Nam còn thách thức hơn. Chúng
tôi đề xuất sử dụng mạng nơ-ron hồi qui mã hoá – giải mã, đặt tên là RNN Encoder-
Decoder và được viết tắt RNN-ED (Cho và cộng sự, 2014; Cho và cộng sự, 2014),
kết hợp với chuẩn hoá dòng (Kobyzev và cộng sự; 2020) và học chuyển giao
(Ruder, 2019) cho dự báo kinh tế vĩ mô Việt Nam.
Chúng tôi tiến hành thu thập dữ liệu kinh tế vĩ mô Việt Nam từ Quỹ tiền tệ
quốc tế (IMF), Ngân hàng thế giới (World Bank – WB), Tổng cục thống kê (GSO)
và Ngân hàng Nhà nước (SBV) Việt Nam. Sau đó chúng tôi tiến hành huấn luyện
và đánh giá khả năng dự báo của mô hình cho GDP (danh nghĩa) của Việt Nam các
năm 2020 và 2021. Kết quả cho thấy rằng học máycó tiềm năng thay thế các mô

70

hình dự báo dựa trên thống kê đang được sử dụng chủ đạo cho dự báo kinh tế vĩ
mô Việt Nam.
Các chỉ số được sử dụng cho dự báo
- GDP danh nghĩa
- Tỉ lệ đầu tư (% GDP)
- Chỉ số giá tiêu dùng
- Cán cân vãng lai
- Xuất khẩu hàng hoá và dịch vụ
- Nhập khẩu hàng hoá và dịch vụ
- Cung tiền mở rộng
- Tỉ lệ lãi suất ngắn hạn
- Tỉ lệ nợ công (% GDP)
- Tổng thu ngân sách
- Chi tiêu của chính phủ
Phát biểu bài toán và mô hình dự báo. Gọi X = (x1, x2, …, xT) là một đa chuỗi
thời gian có chiều dài T. Gọi ??????∈ [1, T] là chỉ số thời gian và xt ∈ R
d
là một giám
sát tại thời điểm t với d là số chỉ số kinh tế vĩ mô được sử dụng. Mỗi chỉ số kinh tế
vĩ mô được xem là một chuỗi thời gian. Gọi ct là hiệp biến (covariate) tại thời gian
t, cung cấp thêm các thông tin tại thời điểm dự báo. Nhiệm vụ dự báo là học một
hàm có khả năng dự báo h giá trị trong tương lai của các chỉ số kinh tế vĩ mô trong
đa chuỗi thời gian X, biết trước các giá trị của chúng trong quá khứ và các hiệp
biến. Hay nói cách khác, mục tiêu dự báo là mô hình phân phối xác suất có điều
kiện P(xT+1:T+h|x1:T,c1:T+h) như sau:
??????(�
??????+1:??????+ℎ|�
1:??????,??????
1:??????+ℎ)= ∏??????(�
??????+??????|�
1:??????,??????
1:??????+??????)

??????=1

Chúng tôi đề xuất sử dụng mạng nơ-ron hồi qui mã hoá – giải mã, đặt tên là
RNN Encoder-Decoder và được viết tắt RNN-ED, kết hợp với chuẩn hoá dòng
(normalizing flows) và học chuyển giao (transfer learning). Một kiến trúc của mạng

71

RNN-ED được trình bày trong Hình 48. RNN-ED bao gồm một bộ mã hoá
(encoder) và một bộ giải mã (decoder). Mỗi bộ mã hoá hoặc giải mã là một mạng
nơ-ron hồi qui (recurrent neuron networks - RNN). Hình 49 trình bày kiến trúc của
một mạng nơ-ron hồi qui, trong đó mỗi hình chữ nhật đại diện cho một mạng nơ-
ron truyền thẳng (feed-forward neural networks) (Goodfellow và cộng sự, 2016)
có một tầng ẩn.

Một trong những vấn đề khó khăn của dự báo kinh tế vĩ mô Việt Nam dùng
học máylà dữ liệu ít. Ví dụ, với chỉ số tổng thu ngân sách, qua các nguồn dữ liệu
chúng tôi thu thập, chúng tôi nhận thấy rằng dữ liệu có thể sử dụng cho mô hình
dự báo của chúng tôi là từ năm 2002, tức là chỉ có 18 mẫu tính từ năm 2002 đến
2020. Để khắc phục được được hạn chế này, chúng tôi tăng cường dữ liệu bằng các
nguồn dữ liệu kinh tế các quốc gia khác, sau đó chúng tôi sử dụng học chuyển giao
để tiền huấn luyện mô hình dự báo. Mô hình thu được chúng tôi tinh chỉnh cho dữ
liệu kinh tế vĩ mô Việt Nam. Tiếp cận này chúng tôi đã ứng dụng để dự báo kinh
tế vĩ mô Mỹ, kết quả cho thấy học chuyển giao kết hợp với chuẩn hoá dòng cải
thiện đáng kể hiệu suất dự báo. Kết quả thí nghiệm trên dữ liệu kinh tế vĩ mô Việt
Nam cho thấy tiếp cận của chúng tôi có thể thay thế các công cụ dự báo truyền
thống.
Chúng tôi sử dụng các phương pháp RealNVP (Dinh, Sohl-Dickstein, và S.
Bengio, 2016) và MAF (Papamakarios, Pavlakou và I. Murray, 2017) cho chuẩn
hoá dòng và quá trình chuẩn hoá dòng có kết hợp chuẩn hoá khối như được trình

72

bày trong Hình 52. Hình 53 trình bày một kiến trúc học chuyển giao chúng tôi sử
dụng để tiền huấn luyện mô hình dự báo.


Dữ liệu và kết quả dự báo: Để tiền huấn luyện mô hình dự báo, chúng tôi sử
dụng tập dữ liệu kính tế vĩ mô từ năm 1870 đến 2016 của 17 nền kinh tế mạnh trên
thế giới (Jorda và cộng sự, 2016). Sau đó chúng tôi tinh chỉnh mô hình đã tiền huấn
luyện trên dữ liệu Việt Nam. Bảng 1 trình bày các kết quả dự báo GDP (danh nghĩa)
của Việt Nam năm 2020 và 2021.
ĐVT: Nghìn tỷ đồng
2020 2021
Thực tế (*) 6213,0348268
Dự đoán (*) 6234,943 6395,8255

73

4.3 HƯỚNG DẪN SỬ DỤNG GOOGLE COLAB
Mục này hướng dẫn cài đặt máy tính để thực hành các ứng dụng machine
learning trong hoạt động ngân hàng. Để thực hành tốt. bạn cần mua Google Colab
Pro, với giá 9,99$/tháng theo hướng dẫn ở mục 4.1.2.
Google Colab là một dạng Jupyter Notebook tùy biến cho phép thực thi
Python trên nền tảng đám mây, được cung cấp bởi Google. Sử dụng Google Colab
có những lợi ích ưu việt như: sẵn sàng chạy Python ở bất kỳ thiết bị nào có kết nối
internet mà không cần cài đặt, chia sẻ và làm việc nhóm dễ dàng, sử dụng miễn phí
GPU cho các dự án về AI.
4.3.1 Mở google colab
- Tạo một thư mục mới với tên gọi bất kỳ. Chẳng hạn “Agribank AI”

74




- Mở thư mục “Agribank AI” vừa tạo


- Mở google colab trong thư mục Agribank AI

75




- Đổi tên cho sổ tay (notebook). Khi bạn tạo sổ tay của riêng mình trên google
Colab, các sổ tay đó sẽ được lưu trữ trong tài khoản Google Drive của bạn. Bạn có
thể dễ dàng chia sẻ sổ tay của mình trên Colab với đồng nghiệp hoặc bạn bè, cho
phép họ nhận xét hoặc thậm chí là chỉnh sửa các sổ tay đó.
- Bạn có thể đổi tên sổ tay theo hướng dẫn bên dưới

76

4.3.2 Cài đặt GPU
Google colab không cần yêu cầu bạn phải cài đặt hay máy tính bạn dùng phải có
cấu hình nhất định. Với google colab, mọi thứ có thể chạy thông qua trình duyệt,
bạn có thể sử dụng tài nguyên máy tính mà google cấp cho bạn bao gồm: CPU
tốc độ cao, GPUs và thậm chí cả TPUs. Do đó, trước khi thực hiện các project
trên google colab, bạn cần cài đặt tài nguyên máy tính cấp sẵn này để có thể sử
dụng được.
Cách thức tiến hành như sau:

77




Mặc dù bạn có thể sử dụng các tài nguyên máy tính miễn phí nhưng để thực hiện
các phân tích phức tạp, bạn vẫn cần sử dụng phiên bản trả phí có tên Google Colab
Pro, với giá 9,99$/tháng. Khi sử dụng, bạn có thể nhận được GPU Tesla T4 hoặc
Tesla P100 và tùy chọn một phiên bản có RAM cao khoảng 27 GB. Ngoài ra, thời
gian sử dụng tối đa của bạn được nhân đôi từ 12 giờ lên 24 giờ.
Để sử dụng Google Colab Pro có thể thực hiện thao tác như sau:

78

79


4.3.3 Bắt đầu code
Sổ tay trên google Colab cho phép bạn kết hợp mã có thể thực thi (code) và văn
bản (text) trong một tài liệu duy nhất, cùng với hình ảnh, HTML, LaTeX và nhiều
nội dung khác.
Để thêm 1 Code cell bạn có thể thực hiện như sau:

Bạn có thể viết mã trên 1 Code cell vừa tạo. Chẳng hạn, tạo một phép toán cho giá
trị x và hiển thị giá trị x đó ra. Bạn có thể viết mã trên Code cell như sau:

80


Để thực thi mã trong ô trên, hãy nhấp để chọn mã đó rồi nhấn nút phát ở bên trái
mã hoặc sử dụng tổ hợp phím tắt "Command/Ctrl+Enter". Để chỉnh sửa mã này,
bạn chỉ cần nhấp vào ô đó và bắt đầu chỉnh sửa.

Để thêm 1 Text cell (văn bản), bạn có thể thực hiện như sau:

Bạn có thể viết các thông tin văn bản trong Text cell

81


Bạn cũng có thể chèn Code cell hoặc Text cell bằng cách di chuyển chuột đến cuối
cell hiện hành và click chọn vào các lựa chọn tương ứng:

4.3.4 Lưu trữ
Để lưu sổ tay, bạn có thể chọn: File/Save hoặc sử dụng tổ hợp phím
"Command/Ctrl+S"

82


4.3.5 Mở một sổ tay có sẵn
Để mở một sổ tay có sẵn, bạn có thể chọn: File/Open notebook hoặc sử dụng tổ
hợp phím "Command/Ctrl+O"

83


Chọn vào Examples để mở các sổ tay ví dụ sẵn có trên google colab
Chọn vào Recent để mở các sổ tay vừa thao tác
Chọn vào Google Drive để mở các sổ tay đã lưu trên Google Drive của bạn
Chọn vào GitHub để mở các sổ tay có trong kho lưu trữ mã nguồn Git dựa trên
nền web cho các dự án phát triển phần mềm. GitHub cung cấp cả phiên bản trả tiền
lẫn miễn phí cho các tài khoản. Các dự án mã nguồn mở sẽ được cung cấp kho lưu
trữ miễn phí.
Chọn vào Upload để mở các sổ tay được lưu trữ trong máy tính của bạn

84

Chương 5
BLOCKCHAIN VÀ CÁC ỨNG DỤNG

5.1 GIỚI THIỆU BLOCKCHAIN
5.1.1 Khái niệm
Blockchain (chuỗi khối), tên ban đầu block chain là một cơ sở dữ liệu phân
cấp lưu trữ thông tin trong các khối thông tin được liên kết với nhau bằng mã hóa
và mở rộng theo thời gian. Mỗi khối thông tin đều chứa thông tin về thời gian khởi
tạo và được liên kết tới khối trước đó, kèm một mã thời gian và dữ liệu giao dịch.
Blockchain được thiết kế để chống lại việc thay đổi của dữ liệu: Một khi dữ liệu đã
được mạng lưới chấp nhận thì sẽ không có cách nào thay đổi được nó.
Blockchain được đảm bảo nhờ cách thiết kế sử dụng hệ thống tính toán phân
cấp với khả năng chịu lỗi byzantine cao. Nhờ thế nên Blockchain có thể đạt được
sự đồng thuận phân cấp. Vì vậy Blockchain phù hợp để ghi lại những sự kiện, hồ
sơ y tế, xử lý giao dịch, công chứng, danh tính và chứng minh nguồn gốc. Việc này
có tiềm năng giúp xóa bỏ các hậu quả lớn khi dữ liệu bị thay đổi trong bối cảnh
thương mại toàn cầu.
Blockchain lần đầu tiên được phát minh và thiết kế bới Satoshi Nakamoto vào
năm 2008 và được hiện thực hóa vào năm sau đó như là một phần cốt lõi
của Bitcoin, khi công nghệ blockchain đóng vai trò như là một cuốn sổ cái cho tất
cả các giao dịch. Qua việc sử dụng mạng lưới ngang hàng và một hệ thống dữ liệu
phân cấp, Bitcoin blockchain được quản lý tự động. Việc phát minh ra blockchain
cho Bitcoin đã làm cho nó trở thành loại tiền tệ kỹ thuật số đầu tiên giải quyết được
vấn đề double spending (chi tiêu gian lận khi 1 lượng tiền được dùng 2 lần). Công
nghệ này của Bitcoin đã trở thành nguồn cảm hứng cho một loạt các ứng dụng
khác.
5.1.2 Đặc điểm
Công nghệ blockchain tương đồng với cơ sở dữ liệu, chỉ khác ở việc tương
tác với cơ sở dữ liệu. Để hiểu blockchain, cần nắm được năm định nghĩa sau: chuỗi
khối (blockchain), cơ chế đồng thuận phân tán đồng đẳng (Distributed), tính toán
tin cậy (trusted computing), hợp đồng thông minh (smart contracts) và bằng chứng

85

công việc (proof of work). Mô hình tính toán này là nền tảng của việc tạo ra các
ứng dụng phân tán.
▪ Cơ chế đồng thuận phân tán đồng đẳng (hay còn gọi là cơ chế đồng thuận
phân quyền) (Distributed)
Cơ chế này ngược lại với mô hình cổ điển về cơ chế đồng thuận tập trung –
nghĩa là khi một cơ sở dữ liệu tập trung được dùng để quản lý việc xác thực giao
dịch. Một sơ đồ phân tán đồng đẳng chuyển giao quyền lực và sự tin tưởng cho
một mạng lưới phân tán đồng đẳng và cho phép các nút của mạng lưới đó liên tục
lưu trữ các giao dịch trên một khối (block) công cộng, tạo nên một chuỗi (chain)
độc nhất: chuỗi khối (blockchain). Mỗi khối kế tiếp chứa một "hash" (một dấu tay
độc nhất) của mã trước đó; vì thế, mã hóa (thông qua hàm hash) được sử dụng để
bảo đảm tính xác thực của nguồn giao dịch và loại bỏ sự cần thiết phải có một trung
gian tập trung. Sự kết hợp của mã hóa và công nghệ blockchain lại đảm bảo rằng
sẽ không bao giờ một giao dịch được lưu trữ lại hai lần.
▪ Chuỗi khối (The blockchain) và dịch vụ chuỗi khối
Một chuỗi khối giống như một nơi để lưu trữ dữ liệu bán công cộng trong một
không gian chứa hẹp (khối). Bất cứ ai cũng có thể xác nhận việc bạn nhập thông
tin vào vì khối chứa có chữ ký của bạn, nhưng chỉ có bạn (hoặc một chương trình)
có thể thay đổi được dữ liệu của khối đó vì chỉ có bạn cầm khóa bí mật cho dữ liệu
đó.
Vì thế chuỗi khối hoạt động gần giống như một cơ sở dữ liệu, ngoại trừ một
phần của thông tin được lưu trữ - header của nó là công khai.
Dữ liệu lưu trữ có thể là một giá trị hoặc một số dư tiền mã hóa. Một chuỗi
khối hoạt động như một hệ thống lưu chuyển giá trị thay thế mà không một cá nhân
hay tổ chức bên thứ ba nào có thể thay đổi được nó (vì quá trình lưu trữ dữ liệu đã
được mã hóa). Nó dựa trên quyền công khai và bí mật, nhìn công khai nhưng kiểm
soát bí mật.
▪ Hợp đồng thông minh (smart contracts) và tài sản thông minh
Hợp đồng thông minh là các khối để xây dựng nên các ứng dụng phi tập trung.
Một hợp đồng thông minh tương đương với một chương trình nhỏ mà bạn có thể
tin tưởng với một đơn vị giá trị và quản lý giá trị đó. Ý tưởng cơ bản đằng sau hợp

86

đồng thông minh là sự quản lý bằng khế ước đối với một giao dịch giữa hai bên
liên quan hay nhiều hơn có thể được xác minh theo thứ tự thông qua chuỗi khối,
thay vì thông qua một trung gian cụ thể. Sao phải dựa vào một cá nhân hay tổ chức
cụ thể trong khi hai hay nhiều bên tham gia có thể đồng thuận lẫn nhau, và khi họ
có thể đưa ra các điều khoản và thực thi sự đồng thuận bằng chương trình và các
điều kiện, tiền sẽ được chuyển tự động khi điều kiện được đáp ứng.
▪ Tính toán tin cậy (trusted computing)
Khi bạn kết hợp các nền tảng đằng sau mỗi chuỗi khối, cơ chế đồng thuận phi
tập trung và hợp đồng thông minh, bạn sẽ nhận ra rằng chúng hỗ trợ cho việc truyền
bá các nguồn lực và giao dịch trên một mặt phẳng theo một cách ngang hàng, và
trong khi làm điều đó, chúng cho phép các máy tính tin tưởng lẫn nhau ở một mức
độ sâu.
Vai trò của chuỗi khối là người xác nhận giao dịch minh bạch, mỗi khối ngang
hàng có thể tiếp tục tin tưởng lẫn nhau tuân theo các quy luật tin tưởng tuyệt đối
của công nghệ.
▪ Bằng chứng công việc (Proof of work)
Tại trung tâm của hoạt động chuỗi khối là khái niệm then chốt của "bằng
chứng công việc", một phần tầm nhìn được tích hợp sẵn của Satoshi Nakamoto cho
vai trò của chuỗi khối trong việc xác thực các giao dịch. Nó được biểu hiện là một
rào cản lớn ngăn cản người dùng thay đổi dữ liệu trên chuỗi khối mà không sửa lại
bằng chứng công việc.
Bằng chứng công việc là khối then chốt xây dựng nên blockchain vì nó không
thể "sửa lại" và được bảo vệ thông qua sức mạnh của hàm hash mã hóa.
5.2 BITCOIN
5.2.1 Khái niệm
Bitcoin (ký hiệu: BTC, XBT, ) là một loại tiền mã hóa, được phát minh
bởi Satoshi Nakamoto dưới dạng phần mềm mã nguồn mở từ năm 2009. Bitcoin
có thể được trao đổi trực tiếp bằng thiết bị kết nối Internet mà không cần thông qua
một tổ chức tài chính trung gian nào.
Bitcoin có cách hoạt động khác hẳn so với các loại tiền tệ điển hình: không

87

có một ngân hàng trung ương nào quản lý nó và hệ thống hoạt động dựa trên một
giao thức mạng ngang hàng trên Internet. Sự cung ứng Bitcoin là tự động, hạn chế,
được phân chia theo lịch trình định sẵn dựa trên các thuật toán. Bitcoin được cấp
tới các máy tính "đào" Bitcoin để trả công cho việc xác minh giao dịch Bitcoin và
ghi chúng vào cuốn sổ cái được phân tán trong mạng ngang hàng, thông qua công
nghệ blockchain. Cuốn sổ cái này sử dụng Bitcoin là đơn vị kế toán. Mỗi bitcoin
có thể được chia nhỏ tới 100 triệu đơn vị nhỏ hơn gọi là satoshi.
5.2.2 Đào bitcoin
Để có thể được cả mạng lưới chấp nhận, khối mới cần phải chứa bằng chứng
công việc (proof-of-work). Proof-of-work yêu cầu thợ đào tìm kiếm một số nonce,
mà khi nội dung của khối được hash (hàm băm mật mã học) cùng nonce, kết quả
tạo ra một số nhỏ hơn số target của mạng lưới (số target càng nhỏ thì độ khó càng
cao). Nói cách khác: Proof-of-work rất dễ cho các máy tính xác nhận, nhưng cực
kỳ mất nhiều thời gian để có thể tạo ra. Thợ đào phải thử rất nhiều giá trị nonce
khác nhau trước khi đạt được độ khó mà mạng lưới yêu cầu.
Cứ mỗi 2016 khối được tạo ra (mất khoảng 14 ngày), độ khó lại được mạng
lưới tự động tinh chỉnh dựa trên khả năng của toàn bộ mạng lưới, với mục đích là
để giữ khoảng thời gian giữa các khối mới được tạo ra là 10 phút. Từ tháng 3 năm
2014 tới tháng 3 năm 2015, số lượng nonce trung bình mà máy đào phải hash thử
trước khi tạo được ra khối mới đã tăng từ 16,4 tỷ tỷ lên 200,5 tỷ tỷ.
Cách hệ thống proof-of-work hoạt động, kèm theo việc xâu chuỗi lại các khối
khi dữ liệu của khối mới bao gồm hash của khối cũ, giúp cho việc thay đổi
blockchain cực kỳ khó, khi mà kẻ tấn công cần phải thay đổi tất cả các khối phía
sau để việc thay đổi một khối được chấp nhận. Điều này đòi hỏi kẻ tấn công cần
có hơn 50% sức mạnh xử lý của toàn mạng Blockchain. Các khối mới liên tục được
tạo ra, và độ khó của việc thay đổi 1 khối tăng dần theo thời gian với số lượng khối
cần thay đổi (còn được gọi là mức xác thực của một khối - confirmations) tăng lên.
Thợ đào (hoặc mỏ đào) Bitcoin tìm được ra khối mới sẽ được thưởng số
bitcoin thưởng trong khối đó cộng toàn bộ phí giao dịch được xử lý trong khối đó.
Tại thời điểm cuối năm 2016, phần thưởng đang là 12,5 bitcoin cho mỗi khối. Để
nhận được phần thưởng này, một giao dịch đặc biệt có tên là coinbase được đưa
vào thanh toán. Tất cả Bitcoin tồn tại được khởi tạo từ những giao dịch nguồn

88

(coinbase) đó. Giao thức Bitcoin quy định rằng phần thưởng sẽ giảm một nửa sau
mỗi 210.000 khối (khoảng 4 năm). Cuối cùng, phần thưởng sẽ tiệm cận tới 0 khi
số bitcoin trên thị trường đạt ngưỡng 21 triệu bitcoin vào năm 2140. Lúc đó, thợ
đào sẽ chỉ có phần thưởng là phí giao dịch. Nói cách khác, Satoshi đã tạo ra
một chính sách tiền tệ dựa trên sự khan hiếm nhân tạo khi sáng tạo ra Bitcoin rằng
sẽ chỉ có tổng cộng 21 triệu bitcoin được lưu hành.
Trong thực tế, các thợ đào thường sẽ tham gia vào các mỏ đào lớn để tập hợp
được khả năng tính toán của máy đào thành viên trong mỏ đó nhằm tăng xác suất
tạo được ra khối mới, và sau đó tiền công sẽ được chia đều theo khối lượng công
việc cho thành viên trong mỏ đào. Việc đào mỏ đã tạo ra một loạt công nghệ chuyên
biệt để đào Bitcoin. Hiện tại, hệ thống đào Bitcoin hiệu quả nhất sử dụng vi mạch
tích hợp chuyên dụng ASIC vì chúng xử lý tính toán số học nhanh hơn bộ vi xử lý
máy tính (kể cả trong bo mạch đồ họa) mà lại khi sử dụng ít điện năng hơn.
Tại Việt Nam, trước năm 2014, các thợ đào tiền mã hóa tại Việt Nam chủ yếu
sử dụng bo mạch đồ họa của AMD để đào Bitcoin vì hiệu suất tính toán cao của
chúng, khiến cho giá các loại bo mạch đồ họa này tăng cao. Tuy nhiên, sau đó họ
chuyển sang đào các loại tiền mã hóa khác như Ethereum, Zcash, Litecoin,... vì
khó cạnh tranh được với các mỏ đào ASIC chuyên nghiệp. Giới đào mỏ trong nước
hoạt động tương đối khép kín vì tính chất nhạy cảm của Bitcoin và một phần trong
số họ sử dụng nguồn điện không hợp pháp và không đóng thuế thu nhập.
5.2.3 Tài khoản bitcoin
Mỗi tài khoản Bitcoin được biểu diễn dưới dạng 1 ví Bitcoin. Mỗi ví Bitcoin
bao gồm địa chỉ Bitcoin công khai (hash của public key) và khóa riêng tư (private
key). Một địa chỉ có 160 bit dữ liệu, vì vậy có thể tạo ra tổng cộng 2
160
địa chỉ
Bitcoin - tương đương 10
48
địa chỉ (để so sánh: có tổng cộng khoảng 10
47
phân
tử nước trên trái đất). Ngoài ra địa chỉ còn bao gồm 4 byte checksum nên xác
suất mạng lưới chấp nhận địa chỉ Bitcoin gõ sai cực kỳ thấp.
Bất kỳ ai cũng có thể gửi Bitcoin đến một chiếc ví bằng địa chỉ công khai, còn
khoá riêng tư phải được nhập khi chủ ví muốn gửi Bitcoin đi. Vì vậy, việc sở hữu
Bitcoin được định nghĩa là sự nắm giữ khoá riêng tư của 1 địa chỉ Bitcoin. Một khi
khoá riêng tư bị mất, mạng lưới Bitcoin sẽ không thể xác nhận được việc sở hữu
số bitcoin đó, và số bitcoin trong địa chỉ đó sẽ vĩnh viễn bị mất. Khoảng 20% số

89

bitcoin đang lưu hành được cho là bị mất vĩnh viễn do người dùng bị mất khóa
riêng tư. Số tiền bị mất có giá trị thị trường khoảng 20 tỷ đô la Mỹ vào tháng 7 năm
2018. Ngoài ra, có khoảng 1 triệu bitcoin đã bị đánh cắp, tương đương 7 tỷ đô la
Mỹ vào tháng 7 năm 2018.
Ví cho phép người dùng
hoàn tất thanh toán giữa các địa
chỉ khác nhau bằng cách cập
nhật vào blockchain. Khi thực
hiện giao dịch bằng thiết bị di
động, người dùng có thể sử
dụng mã QR để đơn giản hoá
quy trình thanh toán.
Có nhiều loại công cụ quản
lý Ví Bitcoin hiện hành. Điển
hình: Ví trên nền tảng Web dễ sử
dụng nhất, bao gồm: Coinbase,
Blockchain.info, BitGo, Xapo; Ví phần mềm: Armory, Bitcoin Core; Ví cho thiết
bị di động: breadwallet, Blockchain.info; Ví phần cứng: Ledger Nano S, Trezor;
Hoặc bạn có thể tự in ví giấy cho mình để cất trong tủ an toàn từ một trong các ví
trên.
5.2.4 Giao dịch

Một giao dịch là một sự dịch chuyển Bitcoin được phát tán tới mạng lưới
Bitcoin và gom vào khối. Mỗi giao dịch đều bao gồm đầu vào (là đầu ra trong giao
dịch cũ của số Bitcoin đó), đầu ra (chứa thông tin giao dịch) và một đoạn script
chứa các điều kiện giao dịch. Đoạn script được viết bằng ngôn ngữ tương tự như

90

ngôn ngữ Forth này được thiết kế một cách tối giản bởi Satoshi, là một chương
trình không Turing-complete để tránh vòng lặp vô hạn. Việc sử dụng script trong
giao dịch giúp tích hợp các tính năng nâng cao như hợp đồng thông minh, chỉ cho
thanh toán nếu 2 trong 3 bên đồng ý. Giao dịch chỉ được mạng lưới chấp nhận cho
vào khối nếu scriptSig kết hợp scriptPubKey trong chương trình đó trả về giá trị
true và tổng giá trị trong đầu ra không cao hơn tổng giá trị đầu vào. Chênh lệch
giữa đầu ra và đầu vào chính là phí giao dịch trả cho mạng lưới.

Phí giao dịch có thể áp dụng cho giao dịch mới tùy thuộc vào nguồn tài
nguyên của mạng. Ngoài phí giao dịch, các thợ đào còn được trả công cho việc tạo
ra các khối (block) chứa nhật ký giao dịch. Cứ mỗi 10 phút, một khối mới được tạo
ra kèm theo một lượng Bitcoin được cấp phát. Số bitcoin được cấp cho mỗi khối
phụ thuộc vào thời gian hoạt động của mạng lưới. Vào tháng 5 năm 2020, 6,25
bitcoin được cấp phát cho mỗi khối mới. Tốc độ lạm phát sẽ giảm một nửa còn
3,125 bitcoin vào khoảng tháng 5 năm 2024 và tiếp tục giảm một nửa sau mỗi chu
kỳ 4 năm cho tới khi có tổng cộng 21 triệu Bitcoin được phát hành vào năm 2140.
Ngoài việc đào Bitcoin, người dùng có thể có Bitcoin bằng cách trao đổi lấy Bitcoin
khi bán tiền tệ, hàng hoá, hoặc dịch vụ khác.
5.3 ETHREUM (ETH)
5.3.1 Khái niệm
Ethereum (ETH) là một nền tảng điện toán có tính chất phân tán, công cộng,
mã nguồn mở dựa trên công nghệ Blockchain. Nó có tính năng hợp đồng thông
minh (kịch bản), tạo thuận lợi cho các thỏa thuận hợp đồng trực tuyến. Nền tảng
này bao gồm một máy ảo hoàn toàn Turing - Ethereum Virtual Machine (EVM),
có thể thực thi các kịch bản bằng cách sử dụng một mạng lưới máy tính
Ethereum. Ethereum cũng cung cấp một loại tiền mã hóa gọi là "Ether", có thể
được chuyển giữa các tài khoản và được sử dụng để trả công cho các thợ đào giúp

91

thực hiện việc tính toán. "Gas" là một cơ chế giá giao dịch nội bộ, được sử dụng
để giảm thiểu giao dịch rác (spam) và phân bổ các nguồn lực trên mạng lưới.
Ethereum đã được đề xuất vào cuối năm 2013 bởi Vitalik Buterin, một
nhà nghiên cứu tiền mã hóa và nhà lập trình. Việc phát triển Ethereum ban đầu
được tài trợ qua hình thức crowd funding (tài trợ đám đông) suốt tháng 7 và tháng
8 năm 2014. Hệ thống này đã được khởi động vào ngày 30 tháng 7 năm 2015, với
11,9 triệu đồng ether đã được đào sẵn (premined) để bán lại cho những người đã
tài trợ. Số tiền này chiếm khoảng 13% tổng số ether được lưu hành.
5.3.2 Các điểm khác biệt cơ bản so với Bitcoin
Về nguồn gốc, Bitcoin được tạo ra như một loại tiền tệ và để lưu trữ giá trị. Còn
Ethereum được tạo ra như một nền tảng giao dịch hợp đồng thông minh phân tán.
Lưu ý rằng Bitcoin cũng có thể xử lý được hợp đồng thông minh, và Ethereum
cũng có thể được sử dụng như một loại tiền tệ. Ngoài ra, giữa Bitcoin và Ethereum
còn có những điểm khác biệt cơ bản sau:
- Bitcoin có thể sử dụng để thanh toán hàng hóa và dịch vụ tại bất cứ nơi nào
đồng tiền này được chấp nhận, còn đồng tiền Ether của mạng lưới Ethereum
không được thiết kế như một giải pháp thanh toán thay thế, mà là để thúc đẩy
các lập trình viên và các tổ chức sáng tạo và vận hành các ứng dụng phi tập
trung trong mạng Ethereum.
- Thời gian tạo khối Ethereum mới là 14 tới 15 giây thay vì 10 phút trong Bitcoin.
- Việc sử dụng giao thức GHOST giúp giao dịch Ether nhanh hơn Bitcoin.
- Số lượng Bitcoin bị giới hạn ở mức 21 triệu với phần thưởng giảm còn một nửa
sau mỗi 4 năm. Còn Ethereum thì không giới hạn số lượng ether. Lượng lạm
phát ether hàng năm không được xác định rõ. Các ngân hàng trung ương thường
thích Ethereum hơn vì cách phát hành tiền này.
- Phí giao dịch của Ethereum được trả bằng Gas (quy đổi được ra ether), được
tính dựa trên khối lượng tính toán, băng thông, lưu trữ. Còn phí giao dịch
Bitcoin bị cạnh tranh trực tiếp với nhau để vào được khối của Bitcoin mà bị
giới hạn.
- Ethereum cho phép chạy mã Turing-complete, cho phép mọi tính toán được

92

thực thi nếu có đủ khả năng tính toán và thời gian. Tuy nhiên điều này cũng
mang lại nhiều rủi ro bị tấn công hơn cho Ethereum so với cấu trúc đơn giản
hơn của Bitcoin.
- Có 13% số ether được bán cho lượng người đã tài trợ dự án ban đầu. Còn những
người đầu tiên đào Bitcoin nắm giữ số lượng lớn lượng Bitcoin đang phát hành.
- Ethereum chống lại việc sử dụng ASIC như Bitcoin. Người đào Ethereum phải
sử dụng card đồ họa vì hàm băm của Ethereum yêu cầu sử dụng bộ nhớ.
- Ethereum chống lại việc đào mỏ tập trung bằng cách sử dụng giao thức Ghost.
- Bitcoin đã có một lịch sử chưa bao giờ can thiệp vào dữ liệu trên sổ cái. Còn
Ethereum đã phải chia nhánh sau khi DAO bị tấn công.
5.3.3 Hợp đồng thông minh
Bình thường, khi ký một hợp đồng để trao đổi giá trị kinh tế, chúng ta cần một
bên thứ 3 có trách nhiệm hòa giải (ví dụ: Nhà môi giới, Tòa án, Sở đất đai,...) Hợp
đồng thông minh là một cơ chế trao đổi xác định, được kiểm soát bởi các phương
tiện kỹ thuật số mà có thể giúp cho việc thực hiện giao dịch trực tiếp giữa các thực
thể mà không cần tin cậy nhau. Các hợp đồng này được định nghĩa bằng cách lập
trình và được chạy chính xác như mong muốn mà không bị kiểm duyệt, lừa đảo
hay sự can thiệp từ bên thứ ba trung gian.
Chúng có thể được sử dụng để tạo điều kiện, xác minh và thực thi việc đàm
phán hoặc thực hiện các hướng dẫn thủ tục kinh tế và có khả năng tránh được sự
kiểm duyệt, thông đồng và rủi ro từ phía đối tác. Trong Ethereum, các hợp đồng
thông minh được coi là các kịch bản tự trị hoặc các ứng dụng phân cấp được lưu
trữ trong chuỗi khối Ethereum để thực hiện sau đó bởi EVM. Các hướng dẫn được
nhúng trong các hợp đồng Ethereum được thanh toán bằng ether và có thể được
thực hiện bằng nhiều ngôn ngữ Turing-complete khác nhau.
5.3.4 Tài khoản
Mỗi tài khoản Ethereum được đại diện bởi 20 ký tự. Các thông số sau được
lưu trong dữ liệu trạng thái (state) của Ethereum cho mỗi tài khoản:
• Số nonce, để đảm bảo mỗi giao dịch chỉ được xử lý một lần.
• Số dư tài khoản

93

• Mã nguồn hợp đồng (nếu có)
• Phần lưu trữ của tài khoản (mặc định là trống)
Các giao dịch giữa các tài khoản được trả tiền bằng Ether. Có hai loại tài
khoản: Tài khoản ngoại vi được quản lý bởi khóa riêng tư, và tài khoản hợp đồng
được quản lý bởi mã hợp đồng. Tài khoản ngoại vi không chứa mã hợp đồng, có
thể gửi thông điệp đi bằng cách tạo và ký kết một giao dịch, giống như tài khoản
Bitcoin. Về phía tài khoản hợp đồng, mỗi khi nó nhận được 1 thông điệp, mã hợp
đồng sẽ chạy và cho phép đọc và ghi vào phần lưu trữ của nó, kèm theo việc gửi
thông điệp đi và tạo ra hợp đồng khác lần lượt.
Lưu ý rằng "hợp đồng" trong Ethereum không phải là một cái gì đó phải "hoàn
thành" hoặc "tuân thủ". Thay vào đó, nó giống như các "thực thể tự trị" sống bên
trong môi trường Ethereum, luôn thực hiện một đoạn mã cụ thể khi được tác động
bởi một thông điệp hoặc giao dịch, và có quyền kiểm soát trực số Ether và dữ liệu
trong phần lưu trữ của nó.
5.4 TÀI CHÍNH PHI TẬP TRUNG
5.4.1 Token (Stabecoin)
Stablecoin còn được gọi là đồng tiền ổn định. Đây là một loại tiền kỹ thuật
số được phát triển trên Blockchain và có giá trị ổn định. giá của Stablecoin được
neo vào một tài sản ổn định khác như vàng hoặc tiền pháp định (USD, EUR, VNĐ).

Bitcoin, Ethereum thường có biến động giá lớn nên khó có thể được sử dụng
như đơn vị đo giá trị => Cần có những token có giá trị ổn định (stablecoin).

94


5.4.2 Sàn giao dịch
Trên sàn giao dịch, các đồng tiền điện tử được niêm yết với thông tin cụ thể
về giá cả, biến động giá và biểu đồ thị trường. Đây là nơi diễn ra các cuộc giao
dịch, mua/bán giữa các nhà đầu tư. Những nhà đầu tư này thường có mục tiêu
chung là tạo ra lợi nhuận.
▪ Một số các sàn giao dịch lớn:



▪ Kỹ thật xử lý giao dịch trên sàn: Sàn giao giao cho phép trao đổi các token
với nhau. Mỗi sàn sẽ là các HĐTM cho từng cặp token.

95

5.4.3 Tín dụng
Phần lớn mô hình vay trong DEFI là vay có thế chấp: “Vay token, thế chấp
bằng token".


Ví dụ: AAVE cho vay không cần thế chấp lên đến 1.000.000 USD với lãi suất
0.09%, thời hạn “1 nốt nhạc”.

96


5.5 SOẠN THẢO HỢP ĐỒNG THÔNG MINH
5.5.1 Định nghĩa về hợp đồng thông minh
Hợp đồng thông minh (Smart Contract) là một thuật ngữ mô tả bộ giao thức
đặc biệt có khả năng tự động thực hiện các điều khoản hay thỏa thuận giữa các bên
(hệ thống máy tính) nhờ vào công nghệ Blockchain. Các điều khoản được quy định
trong hợp đồng thông minh tương đương với hợp đồng pháp lý truyền thống
Nó sẽ tự động hoá hợp đồng mà không cần sự can thiệp từ bên ngoài. Điều
này giúp người dùng tiện lợi và đảm bảo tính chính xác, minh bạch rất cao vì không
có sự can thiệp lẫn đảo chiều. Ngoài ra nó cũng dễ dàng truy xuất khi cần thiết.
Các điều khoản này sẽ được viết bằng ngôn ngữ lập trình. Sau đó được mã
hóa chuyên biệt và chuyển vào block thuộc Blockchain. Kế đến, sẽ được phân phối,
sao chép bằng các node có trên nền tảng.
Khi có lệnh triển khai, hợp đồng sẽ tự động thực thi đúng như các điều khoản
đã lập trình. Điểm đặc biệt là Smart Contract sẽ luôn kiểm tra xuyên suốt quá trình
thực hiện, đảm bảo trùng khớp với những điều khoản trong hợp đồng. Chính vì
vậy, khi sử dụng Smart Contract, bạn hoàn toàn yên tâm về tính chính xác của hợp
đồng.
Ví dụ: Bạn dự định thuê căn phòng, bạn đã trả tiền thuê qua Blockchain. Biên
nhận trả tiền sẽ được ghi nhận vào hợp đồng thông minh. Trong hợp đồng quy định
đầu tháng sau bạn sẽ nhận mật mã căn hộ. Tuy nhiên nếu đến thời điểm đó, bạn
vẫn chưa nhận được. Hợp đồng thông minh sẽ tự động hoàn tiền lại cho bạn, bạn
không cần liên lạc bên thuê nhà để lấy tiền thuê. Mọi thứ sẽ được diễn ra theo đúng
quy trình, quy định của hợp đồng.
5.5.2 Phân tích cấu trúc dữ liệu trên hợp đồng thông minh
Để tạo nên một Smart Contract, bạn cần phải có những yếu cầu sau đây:
• Chủ thể hợp đồng: Smart Contract phải được cấp khả năng truy cập đến
sản phẩm/dịch vụ liệt kê trong hợp đồng để có thể tự động khóa hay mở khóa
chúng.
• Chữ kí điện tử: Tất cả các bên tham gia vào Smart Contract đều phải đồng

97

ý triển khai thỏa thuận bằng các khóa cá nhân (chữ kí điện tử) của họ.
• Điều khoản hợp đồng: Điều khoản trong Smart Contract có dạng là một
chuỗi các hoạt động. Và các bên tham gia hợp đồng đều phải ký chấp nhận
nó.
• Nền tảng phân quyền: Smart Contract sau khi hoàn tất sẽ được tải lên
Blockchain của nền tảng phân quyền tương ứng và được phân phối về cho
các node của nền tảng ấy.
Về bản chất kỹ thuật, hợp đồng thông minh có thể xem như chứa một đoạn
lệnh điều kiện dạng If-Else. Nghĩa là, các bên liên quan có thể mở hợp đồng thông
minh, chạy đoạn lệnh đó, xem là hiện tại đầu vào đã đúng điều kiện hợp đồng chưa.
Đầu vào ở đây có thể là bất cứ thứ gì, phụ thuộc vào mục địch thiết kế của hợp
đồng thông minh (các ứng dụng). Ví dụ, trường hợp triển khai nghiệp vụ về thực
hiện thủ tục hành chính theo hình thức hợp đồng thông minh: đầu tiên, ứng dụng
thực hiện thủ tục hành chính sẽ kiểm tra các điều kiện về đối tượng và yêu cầu thực
hiện thủ tục hành chính. Đầu vào sẽ là đơn, tờ khai và các giấy tờ đi kèm. Tiếp đó
nếu đáp ứng đủ điều kiện thực hiện thủ tục hành chính (kiểm tra đoạn lệnh If-Else),
sẽ tự động được cơ quan có thẩm quyền cấp giấy phép.
5.5.3 Ứng dụng trong lĩnh vực tài chính ngân hàng
Công nghệ lưu trữ dữ liệu Blockchain có lẽ không còn xa lạ với ngành tài
chính ngân hàng. Ngày nay những nền tảng điện toán lớn như Ethereum đã tích
hợp sẵn hợp đồng thông minh khởi chạy trên chính mạng Blockchain. Không chỉ
trong thị trường tài chính phi tập trung mà các tổ chức tài chính tập trung cũng đã
và đang ứng dụng rộng rãi công nghệ Blockchain.

98

Khi áp dụng hợp đồng Smart Contract và Blockchain, các ngân hàng đã thực
hiện số hóa, chuyển đổi cách thức bảo lãnh. Đồng thời, phía ngân hàng sẽ không
còn bị phụ thuộc vào một bộ phận hay cá nhân nào đó. Vì tính chất phân quyền đến
toàn bộ các node cho phép đội ngũ nhân viên tham gia có thể nhanh chóng cập nhật
dữ liệu.
5.6 XÂY DỰNG CHUỖI KHỐI TRÊN JAVA
5.6.1 Chuẩn bị môi trường lập trình
Để xây dựng blockchain theo hướng dẫn này, máy tính của người dùng cần
cài một IDE để soạn thảo câu lệnh và trình biên dịch để biên dịch lệnh.
Trong hướng dẫn này, blockchain được xây dựng trên ngôn ngữ java sử dụng
IDE Visual Studio Code có hỗ trợ JAVA (link tải). Ngoài ra bạn có thể sử dụng
bất cứ trình soạn thảo văn bản nào để viết các câu lệnh, sau đó sử dụng JAVA
Compiler (javac) để biên dịch chương trình.
5.6.2 Xây dựng chuỗi khối phiên bản đầu tiên
5.1.1.1 Sơ lược về chuỗi khối
Một blockchain chỉ là một chuỗi (chain) các khối (block). Mỗi khối trong
blockchain sẽ lưu trữ các thông tin sau: dữ liệu riêng của khối (dữ liệu, thông tin
giao dịch hoặc thông tin khác tùy thuộc vào thiết kế của nhà lập trình nên chuỗi
Lợi ích của hợp đồng thông minh
• Tự động hóa: tự động hóa quá trình thực thi các điều khoản trong hợp đồng thông minh.
• Không bị thất lạc: thông tin được mã hóa và lưu trên một cuốn sổ cái chung.
• Tốc độ xử lý: cải thiện tốc độ xử lý giao dịch so với các hệ thống như hiện nay.
• Tiết kiệm: không có sự can thiệp của bên thứ ba, giúp giảm chi phí.
• Chính xác: hợp đồng thông minh được xây dựng bằng ngôn ngữ lập trình nên có tính
chính xác cao.
• Không thể sửa đổi: hợp đồng thông minh được lưu giữ trên chuỗi khối, không thể xóa
hoặc sửa đổi, tạo ra tính bất biến và an toàn. Các hợp đồng được xác thực bằng các thuật
toán mã hóa giúp ngăn chặn việc giả mạo hợp đồng.
• Không cần dựa trên sự tin tưởng: giao thức sử dụng trong chuỗi khối giúp các bên
tham gia hợp đồng có thể tạo ra các giao dịch mà không cần biết về bên còn lại.

99

khối); mã băm (hash) của khối liền trước nó; mã băm của chính khối hiện tại; mốc
thời gian tạo khối (timestamp); và một số thông tin khác.

Các khối liên kết với nhau dựa trên hash của khối liền trước như hình bên dưới.

Theo hình 2, mỗi khối chứa hash của khối phía trước của nó, và hash của khối
liền trước đó còn được tính toán từ hash của khối phía trước. Nếu dữ liệu của khối
phía trước bị thay đổi thì hash của chính khối đó cũng cũng sẽ thay đổi (vì nó được
tính toán dựa trên dữ liệu của khối), và dẫn tới hash của các khối sau cũng thay đổi
theo.
Để tránh tình trạng các khối đã được xây dung (“đào”) thành công và sau đó
bị thay đổi dữ liệu làm sai lệch hash, chuỗi khối sẽ tiến hành so sánh hash của các
khối trên chuỗi với dữ liệu tính toán được để đảm bảo tất cả các khối đều hợp lệ.
5.1.1.2 Xây dựng chuỗi khối phiên bản 1 – Chuỗi khối đầu tiên

100

Theo phân tích ở bên trên, một chuỗi khối là tập hợp các khối. Mỗi khối lưu
trữ các thông tin: hash của chính khối đó, hash của khối liền trước, dữ liệu của
khối, mốc thời gian tạo khối.
Để xây dựng chuỗi khối phiên bản 1, trước tiên cần tạo một thư mục chứa mã
nguồn của chuỗi khối, tên thư mục BlockchainExample (có thể đặt tên tùy ý bằng
tiếng Việt không dấu). Sau đó trên VS Code chọn File – Open folder: chọn thư mục
vừa tạo.
Thêm một file mới trong thư mục vừa tạo như hình bên dưới. Tên file
Block.java (Chú ý: tên file phải TRÙNG với tên của Class tạo bên trong).



Tạo Class Block để khai báo các thông tin của khối.
import java.util.Date; // để sử dụng các hàm ngày tháng

public class Block {
public String hash; // mã băm của khối hiện tại
public String previousHash; // mã băm của khối liền kề phía trước
private String data; // dữ liệu của khối. Trong ví dụ này chỉ sử dụng một chuỗi đơn giản
private long timeStamp; // mốc thời gian sinh ra khối, tính bằng mili giây từ 01/01/1970

// Hàm tạo với hai thông số đầu vào
// data: dữ liệu của khối
// previousHash: mã băm của khối liền kề phía trước
public Block(String data, String previousHash) {
this.data = data;
this.previousHash = previousHash;
this.timeStamp = new Date().getTime(); //lấy mốc thời gian tạo khối
}
}

101

Thêm một file mới trong thư mục với tên file StringUtil.java (Chú ý: tên file
phải TRÙNG với tên của Class tạo bên trong).
Tạo Class StringUtil để khai báo các hàm băm dữ liệu (hash function). Trong
ví dụ này, chúng ta sử dụng hàm băm SHA256. Hàm này nhận đầu vào là
import java.security.MessageDigest; // để sử dụng các hàm băm
public class StringUtil {
// Hàm băm dữ liệu từ chuỗi input sử dụng thuật toán SHA256
// đầu vào: chuỗi dữ liệu input
// đầu ra: mã băm của chuỗi dữ liệu input
public static String applySha256(String input) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256"); // sử dụng thuật toán SHA256
byte[] hash = digest.digest(input.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer(); // lưu hash dưới dạng Hex
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Quay lại file Block.java, chúng ta tạo thêm một hàm để tính hash cho khối
calculateHash và lưu hash đó vào trong khối. File Block.java sau khi thêm
hàm trên như sau:
import java.util.Date; // để sử dụng các hàm ngày tháng

public class Block {
public String hash; // mã băm của khối hiện tại
public String previousHash; // mã băm của khối liền kề phía trước
private String data; // dữ liệu của khối. Trong ví dụ này chỉ sử dụng một chuỗi đơn giản
private long timeStamp; // mốc thời gian sinh ra khối, tính bằng mili giây từ 01/01/1970

// Hàm tạo với hai thông số đầu vào
// data: dữ liệu của khối
// previousHash: mã băm của khối liền kề phía trước
public Block(String data, String previousHash) {
this.data = data;
this.previousHash = previousHash;
this.timeStamp = new Date().getTime(); // lấy mốc thời gian tạo khối
this.hash = calculateHash(); // câu lệnh này phải nằm cuối cùng để có được các thông số đầu vào

102

}

// Hàm tính hash cho khối
public String calculateHash() {
String calculatedhash = StringUtil.applySha256(previousHash + Long.toString(timeStamp) + data);
return calculatedhash;
}
}
Đến đây, chúng ta cơ bản đã xây dựng xong phần quản lý các khối, chúng ta
thực hiện test các khối trong chuỗi bằng cách tạo các khối và “kết nối” các khối đó
thành chuỗi. Trong đoạn code sau, chúng ta tạo ra 3 khối. Khối đầu tiên là khối
“nguyên thủy” genesisBlock.
public class Blockchain {
public static void main(String[] args) {
Block genesisBlock = new Block("Đây là khối nguyên thủy", "0");
System.out.println("Hash for block 1 : " + genesisBlock.hash);
Block secondBlock = new Block("Đây là khối thứ 2", genesisBlock.hash);
System.out.println("Hash for block 2 : " + secondBlock.hash);
Block thirdBlock = new Block("Đây là khối thứ 3", secondBlock.hash);
System.out.println("Hash for block 3 : " + thirdBlock.hash);
}
}
Trong đoạn chương trình trên, chú ý với khối genesis, hash của khối liền trước
nó là 0 vì đây là khối đầu tiên. Trong các blockchain hiện nay, khối genesis chứa
thông tin cấu hình của mạng blockchain.
Để kiểm tra blockchain vừa xây dựng xong, chúng ta bấm F5 để Debug
chương trình. Kết quả nhận được là 3 chuỗi khối được tạo với các hash như bên
dưới:


Bước tiếp theo, chúng ta sẽ điều chỉnh trong hàm main để lưu chuỗi khối vào
trong một ArrayList và thêm JSONBuilder để duyệt chuỗi khối dưới dạng JSON.

103

Tải JSONBuilder bản 2.8.2 tại đây. Sau đó add file vừa tải vào project blockchain
như hình bên dưới và chọn Clean workspace.

Điều chỉnh lại hàm main để sử dụng ArrayList:
import java.util.ArrayList;
import com.google.gson.GsonBuilder;
public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static void main(String[] args) {
blockchain.add(new Block("Đây là khối nguyên thủy", "0"));
blockchain.add(new Block("Đây là khối thứ 2", blockchain.get(blockchain.size() - 1).hash));
blockchain.add(new Block("Đây là khối thứ 3", blockchain.get(blockchain.size() - 1).hash));
String blockchainJson = new GsonBuilder().setPrettyPrinting().create().toJson(blockchain);
System.out.println(blockchainJson);
}
}
Nhấn F5 để Debug chương trình:

104

Kết quả trả về là chuỗi khối gồm 3 khối với dữ liệu mỗi khối bên trong được
hiển thị dưới dạng JSON.
Kiểm tra tính toàn vẹn của chuỗi khối: như bên trên đã trình bày, chuỗi khối
được quản lý toàn vẹn dữ liệu bằng hash. Bước tiếp theo chúng ta sẽ duyệt chuỗi
khối để kiểm tra xem dữ liệu chuỗi khối có bị thay đổi hay không dựa trên hash
lưu trên khối và hash tính toán được. Trong file Blockchain.java, chúng ta thêm
một hàm kiểm tra isChainValid như sau:
import java.util.ArrayList;
import com.google.gson.GsonBuilder;

public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static void main(String[] args) {
blockchain.add(new Block("Đây là khối nguyên thủy", "0"));
blockchain.add(new Block("Đây là khối thứ 2", blockchain.get(blockchain.size() - 1).hash));
blockchain.add(new Block("Đây là khối thứ 3", blockchain.get(blockchain.size() - 1).hash));
String blockchainJson = new GsonBuilder().setPrettyPrinting().create().toJson(blockchain);
// kiểm tra tính hợp lệ của chuỗi khối
System.out.println("\nChuỗi khối hợp lệ? " + isChainValid());
System.out.println(blockchainJson);
}

public static Boolean isChainValid() {
Block currentBlock;
Block previousBlock;

for (int i = 1; i < blockchain.size(); i++) {
currentBlock = blockchain.get(i);
previousBlock = blockchain.get(i - 1);
// so sánh hash lưu trong khối hiện tại và hash tính được
if (!currentBlock.hash.equals(currentBlock.calculateHash())) {
System.out.println("hash của khối hiện tại không chính xác ");
return false;
}
// kiểm tra hash của khối trước và hash được lưu trong previous hash của khối hiện tại
if (!previousBlock.hash.equals(currentBlock.previousHash)) {
System.out.println("hash của khối liền trước không chính xác ");
return false;
}
}
return true;
}

105

}


5.6.3 Xây dựng chuỗi khối phiên bản 2 – Chuỗi khối có khả năng ‘đào”
Trong phần tiếp theo, chúng ta sẽ nâng cấp blockchain phiên bản 1 để thêm
chức năng “đào” (mining) các khối. Lưu ý: trong phần này chúng ta chỉ giả lập việc
“đào” để nắm được nguyên tắc xác thực khối. Trong thực tế, các máy đào (miners)
sẽ cạnh tranh nhau để thực hiện việc xác thực các khối dựa trên giao thức đồng
thuận (consensus) như Proof of Work, Proof of Stake,…
Để thực hiện việc mining, chúng ta sẽ bổ sung một tham số nonce vào trong
thuộc tính của khối. Số này được tăng dần từ 0 để thực hiện việc tính toán hash của
khối. Hash này sẽ được dùng để kiểm tra quyền được xác thực và gắn block vào
blockchain.
Các máy đào sẽ tranh nhau quyền xác thực khối, để quyết định tốc độ mining,
chúng ta sẽ thêm một thành phần difficulty. Giá trị này càng cao thì việc đào càng
khó. Quá trình đào diễn ra như sau:
Các máy đào sẽ chọn một số nonce bất kỳ và tính hash của khối theo số vừa
chọn. Nếu sau khi băm khối và nhận được hash có số lượng số 0 đầu chuỗi hash
lớn hơn hoặc bằng difficulty thì được xem là đào thành công. Ngược lại, máy đào
sẽ chọn một số nonce mới và lặp lại quá trình trên.
Trong thực tế, mạng blockchain sẽ cập nhật lại độ khó sau mỗi chu kỳ để đảm
bảo tốc độ sinh khối mới luôn luôn cố định. Nếu nhiều máy tham gia đào, đồng
nghĩa với việc tìm ra số nonce sẽ nhanh hơn thì difficulty sẽ tăng lên và ngược lại.
Quay lại chương trình, chúng ta bổ sung nonce và hàm thực hiện việc đào
mineBlock. Chú ý hàm calculateHash đã được bổ sung thêm nonce vào phần đầu
vào của hàm băm.

import java.util.Date; // để sử dụng các hàm ngày tháng

public class Block {
public String hash; // mã băm của khối hiện tại
public String previousHash; // mã băm của khối liền kề phía trước
private String data; // dữ liệu của khối. Trong ví dụ này chỉ sử dụng một chuỗi đơn giản

106

private long timeStamp; // mốc thời gian sinh ra khối, tính bằng mili giây từ 01/01/1970
private int nonce; // dùng cho việc đào

// Hàm tạo với hai thông số đầu vào
// data: dữ liệu của khối
// previousHash: mã băm của khối liền kề phía trước
public Block(String data, String previousHash) {
this.data = data;
this.previousHash = previousHash;
this.timeStamp = new Date().getTime(); // lấy mốc thời gian tạo khối
this.hash = calculateHash(); // câu lệnh này phải nằm cuối cùng để có được các thông số đầu vào
}

// Hàm tính hash cho khối, có bổ sung nonce
public String calculateHash() {
String calculatedhash = StringUtil.applySha256(previousHash + Long.toString(timeStamp)
+ Integer.toString(nonce) + data);
return calculatedhash;
}

// Hàm đào
// Đầu vào: độ khó của việc đào
public void mineBlock(int difficulty) {
//Tạo một String với các số 0, số lượng 0 = difficulty
String target = new String(new char[difficulty]).replace('\0', '0');
while(!hash.substring( 0, difficulty).equals(target)) {
nonce ++;
hash = calculateHash();
}
System.out.println("Đã đào thành công!!! : " + hash);
}
}

Sau khi đã điều chỉnh Class Block (file Block.java), chúng ta chỉnh lại mã
chương trình trong file Blockchain (file Blockchain.java) để kiểm tra hoạt động
của blockchain vừa điều chỉnh.
import java.util.ArrayList;
import com.google.gson.GsonBuilder;

public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static int difficulty = 5;
public static void main(String[] args) {
blockchain.add(new Block("Đây là khối nguyên thủy", "0"));
System.out.println("Đang đào khối nguyên thủy... ");
blockchain.get(0).mineBlock(difficulty);

107


blockchain.add(new Block("Đây là khối thứ 2", blockchain.get(blockchain.size() - 1).hash));
System.out.println("Đang đào khối thứ 2... ");
blockchain.get(1).mineBlock(difficulty);

blockchain.add(new Block("Đây là khối thứ 3", blockchain.get(blockchain.size() - 1).hash));
System.out.println("Đang đào khối thứ 3... ");
blockchain.get(2).mineBlock(difficulty);

String blockchainJson = new GsonBuilder().setPrettyPrinting().create().toJson(blockchain);
System.out.println("\nChuỗi khối hợp lệ? " + isChainValid());
System.out.println("\nChuỗi khối: ");
System.out.println(blockchainJson);
}

public static Boolean isChainValid() {
Block currentBlock;
Block previousBlock;
String hashTarget = new String(new char[difficulty]).replace('\0', '0');

for (int i = 1; i < blockchain.size(); i++) {
currentBlock = blockchain.get(i);
previousBlock = blockchain.get(i - 1);
// compare registered hash and calculated hash:
if (!currentBlock.hash.equals(currentBlock.calculateHash())) {
System.out.println("Hash của khối hiện tại không chính xác");
return false;
}
// compare previous hash and registered previous hash
if (!previousBlock.hash.equals(currentBlock.previousHash)) {
System.out.println("Hash của khối liền trước không chính xác");
return false;
}
//check if hash is solved
if(!currentBlock.hash.substring( 0, difficulty).equals(hashTarget)) {
System.out.println("Khối chưa được đào thành công");
return false;
}
}
return true;
}
}

Tới đây chúng ta đã xây dựng xong blockchain hỗ trợ tính năng “đào” các
khối mới. Kết quả chạy chương trình như sau:

108



Một vấn đề với chuỗi khối vừa xây dựng: các khối được gắn vào trong
ArrayList trước khi thật sự được “đào”. Phần tự thực hành: điều chỉnh lại hàm main
để thực hiện việc tạo khối, xác thực khối bằng việc đào và cuối cùng là thêm vào
chuỗi khối. Điều chỉnh hàm mineBlock để thực hiện việc đào và trả về kết quả đào
nếu cần.
5.6.4 Xây dựng chuỗi khối phiên bản 3 – Chuỗi khối có ví
Trong phần tiếp theo, chúng ta sẽ nâng cấp blockchain phiên bản 2 với các bổ
sung sau: chuỗi khối có ví và các giao dịch chuyển tiền trên chuỗi khối.
Trong phần này có sử dụng thư viện Bouncy Castle (tải Bouncy Castle tại
đây). Bouncy Castle là thư viện mã nguồn mở hỗ trợ các hàm mã hóa và giải mã.
Để import thư viện Bouncy Castle, vui lòng xem lại hướng dẫn import
JSONBuilder bên trên.
Mô hình blockchain sẽ xây dựng trong phần này được trình bày bên dưới. Mỗi
ví sẽ khởi tạo các giao dịch, sau đó các giao dịch đó sẽ được đưa vào danh sách
giao dịch trong các khối.

109



5.6.5 Xây dựng ví trên chuỗi khối
Các ví trên chuỗi khối chứa các thông tin: khóa bí mật (private key), khóa
công khai (public key), số dư tiền điện tử (funds), hash map danh sách các giao
dịch đầu ra UTXO (sẽ nói rõ hơn trong phần sau).
Trước tiên, chúng ta cần tạo Class Wallet (vui lòng xem lại phần tạo file *.java
và Class bên trên). Class Wallet trong phiên bản này chứa hai thuộc tính: Private
Key và Public Key. Khi một ví được tạo, blockchain sẽ tự sinh ra cặp khóa trên
cho ví bằng hàm generateKeyPair.
import java.security.*; // Thư viện mã hóa của Java
import java.security.spec.ECGenParameterSpec;

public class Wallet {
public PrivateKey privateKey; // khóa bí mật
public PublicKey publicKey; // khóa công khai

public Wallet() {
generateKeyPair(); //sinh cặp khóa ngẫu nhiên
}

//Hàm sinh cặp khóa ngẫu nhiên cho ví
public void generateKeyPair() {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "BC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");
// Khởi tạo bộ sinh khóa và sinh cặp khóa
keyGen.initialize(ecSpec, random);
KeyPair keyPair = keyGen.generateKeyPair();
// Gán cặp khóa của ví bằng cặp khóa vừa sinh
privateKey = keyPair.getPrivate();
publicKey = keyPair.getPublic();
} catch (Exception e) {
throw new RuntimeException(e);

110

}
}
}
5.6.6 Giao dịch và xác thực giao dịch bằng chữ ký số
Các giao dịch trên chuỗi khối gồm các thông tin:
- Khóa công khai của ví gửi tiền;
- Khóa công khai của ví nhận tiền;
- Số tiền cần chuyển;
- Chữ ký số xác thực giao dịch chuyển tiền của ví gửi, chữ ký này được tạo
từ dữ liệu giao dịch và khóa bí mật của ví gửi;
- Input: danh sách các giao dịch đầu vào trước đó để xác nhận ví gửi đủ số
dư để thực hiện giao dịch;
- Output: Thông tin về số tiền các ví nhận nhận được (chi tiết ở phần sau tài
liệu). Output này được tham chiếu cho các Input của giao dịch về sau.
Để tiếp tục, chúng ta tạo 2 file và 2 Class rỗng (không chứa code) có tên
TransactionInput và TransactionOutput. Đồng thời tạo file và Class
Transaction để xử lý giao dịch như sau:
import java.security.*;
import java.util.ArrayList;

public class Transaction {
public String transactionId; // mã giao dịch, ở đây là hash của GD
public PublicKey sender; // khóa công khai của ví gửi
public PublicKey recipient; // khóa công khai của ví nhận
public float value; // số tiền chuyển
public byte[] signature; // chữ ký để xác thực giao dịch

public ArrayList<TransactionInput> inputs = new ArrayList<TransactionInput>();
public ArrayList<TransactionOutput> outputs = new ArrayList<TransactionOutput>();

private static int sequence = 0; // dùng để đến số lượng giao dịch đã được tạo

// Hàm tạo giao dịch
// Tham số đầu vào:
// 1. khóa công khai của ví gửi

111

// 2. Khóa công khai của ví nhận
// 3. Số tiền chuyển
// 4. Danh sách đầu vào
public Transaction(PublicKey from, PublicKey to, float value, ArrayList<TransactionInput> inputs) {
this.sender = from;
this.recipient = to;
this.value = value;
this.inputs = inputs;
}
// Hàm băm giao dịch để xác định mã giao dịch (hash)
private String calulateHash() {
// tăng sequence lên 1 đơn vị để tránh vị trùng mã giao dịch sau khi băm
sequence++;
return StringUtil.applySha256(StringUtil.getStringFromKey(sender) +
StringUtil.getStringFromKey(recipient) +
Float.toString(value) + sequence);
}
}

Chúng ta có thể thấy trong đoạn code trên bị thiếu mất hàm
StringUtil.getStringFromKey. Để tạo và xác thực chữ ký điện tử cho giao
dịch, Class StringUtil được bổ sung 3 hàm như sau:
import java.security.MessageDigest; // để sử dụng các hàm băm
import java.security.Key; // Các thư viện hỗ trợ thao tác với mã hóa bất đối xứng
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64; //Thư viện thao tác với Base64

public class StringUtil {
// Hàm băm dữ liệu từ chuỗi input sử dụng thuật toán SHA256
// đầu vào: chuỗi dữ liệu input
// đầu ra: mã băm của chuỗi dữ liệu input
public static String applySha256(String input) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256"); // sử dụng thuật toán SHA256
byte[] hash = digest.digest(input.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer(); // lưu hash dưới dạng Hex
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
return hexString.toString();

112

} catch (Exception e) {
throw new RuntimeException(e);
}
}

// Tạo chữ ký điện tử
public static byte[] applyECDSASig(PrivateKey privateKey, String input) {
Signature dsa;
byte[] output = new byte[0];
try {
dsa = Signature.getInstance("ECDSA", "BC");
dsa.initSign(privateKey);
byte[] strByte = input.getBytes();
dsa.update(strByte);
byte[] realSig = dsa.sign();
output = realSig;
} catch (Exception e) {
throw new RuntimeException(e);
}
return output;
}

// Xác thực chữ ký điện tử
public static boolean verifyECDSASig(PublicKey publicKey, String data, byte[] signature) {
try {
Signature ecdsaVerify = Signature.getInstance("ECDSA", "BC");
ecdsaVerify.initVerify(publicKey);
ecdsaVerify.update(data.getBytes());
return ecdsaVerify.verify(signature);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

//Hàm chuyển key sang dạng Base64
public static String getStringFromKey(Key key) {
return Base64.getEncoder().encodeToString(key.getEncoded());
}
}

Hàm applyECDSASig được ví gửi dùng để tạo chữ ký điện tử từ chuỗi
input.
Hàm verifyECDSASig dùng để xác thực chữ ký điện tử của ví gửi sử dụng
khóa công khai của chính nó.

113

Hàm getStringFromKey dùng để chuyển mã của khóa sang Base64.
Hai hàm applyECDSASig và verifyECDSASig giữ vai trò đặc biệt quan
trọng trong xác thực giao dịch trên blockchain, giúp đảm bảo chỉ có chủ ví với khóa
bí mật mới có thể thực hiện được giao dịch chuyển tiền khỏi ví. Với mạng Ethereum
và Bitcoin, khái niệm “mất ví” ở đây chính là bị mất thông tin về khóa bí mật nên
chủ ví không thể xác thực được các giao dịch trên ví của mình.
Để tiếp tục thêm các giao dịch vào khối, chúng ta bổ sung hai hàm tạo chữ ký
generateSignature và xác thực chữ ký verifiySignature. Class
Transaction sau khi thêm các hàm như sau:
import java.security.*;
import java.util.ArrayList;

public class Transaction {
public String transactionId; // mã giao dịch, ở đây là hash của GD
public PublicKey sender; // khóa công khai của ví gửi
public PublicKey recipient; // khóa công khai của ví nhận
public float value; // số tiền chuyển
public byte[] signature; // chữ ký để xác thực giao dịch
public ArrayList<TransactionInput> inputs = new ArrayList<TransactionInput>();
public ArrayList<TransactionOutput> outputs = new ArrayList<TransactionOutput>();
private static int sequence = 0; // dùng để đến số lượng giao dịch đã được tạo

// Hàm tạo giao dịch
// Tham số đầu vào:
// 1. khóa công khai của ví gửi
// 2. Khóa công khai của ví nhận
// 3. Số tiền chuyển
// 4. Danh sách đầu vào
public Transaction(PublicKey from, PublicKey to, float value, ArrayList<TransactionInput> inputs) {
this.sender = from;
this.recipient = to;
this.value = value;
this.inputs = inputs;
}

// Hàm băm giao dịch để xác định mã giao dịch (hash)
private String calulateHash() {
// tăng sequence lên 1 đơn vị để tránh vị trùng mã giao dịch sau khi băm
sequence++;
return StringUtil.applySha256(StringUtil.getStringFromKey(sender) +
StringUtil.getStringFromKey(recipient) +
Float.toString(value) + sequence);
}

114


// Ký lên các dữ liệu giao dịch
public void generateSignature(PrivateKey privateKey) {
String data = StringUtil.getStringFromKey(sender) + StringUtil.getStringFromKey(recipient) +
Float.toString(value);
signature = StringUtil.applyECDSASig(privateKey, data);
}

// Xác thực chữ ký điện tử
public boolean verifiySignature() {
String data = StringUtil.getStringFromKey(sender) + StringUtil.getStringFromKey(recipient) +
Float.toString(value);
return StringUtil.verifyECDSASig(sender, data, signature);
}
}

Đến đây, chúng ta thử kiểm tra lại các hàm vừa tạo để đảm bảo không có lỗi
xảy ra. Để kiểm tra việc sinh cặp khóa của ví, chúng ta thay đổi hàm main trong
file Blockchain.java như sau:
import java.security.Security;
import java.util.ArrayList;
import com.google.gson.GsonBuilder;

public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static int difficulty = 5;

//khai báo hai ví
public static Wallet walletA;
public static Wallet walletB;
public static void main(String[] args) {
// Sử dụng thư viện mã hóa Bouncy Castle
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

// tạo hai ví walletA và walletB
walletA = new Wallet();
walletB = new Wallet();

// Kiểm tra cặp khóa của ví A
System.out.println("Khóa bí mật của ví A:");
System.out.println(StringUtil.getStringFromKey(walletA.privateKey));
System.out.println("Khóa công khai của ví A:");
System.out.println(StringUtil.getStringFromKey(walletA.publicKey));

// Tạo một giao dịch test chuyển tiền từ ví A sang ví B với số tiền 5 coins
Transaction transaction = new Transaction(walletA.publicKey, walletB.publicKey, 5, null);

115

transaction.generateSignature(walletA.privateKey);

// Xác thực chữ ký điện tử của giao dịch
System.out.println("Xác thực chữ ký thành công? ");
System.out.println(transaction.verifiySignature());
}
}

Kết quả khi chạy chương trình như sau:

Trên cửa sổ Terminal, chúng ta thấy chương trình đã xuất ra màn hình khóa
bí mật và khóa công khai của ví A, đồng thời xuất ra kết quả xác thực giao dịch
chuyển 5 coins từ ví A sang ví B.
5.6.7 Xây dựng chuỗi khối phiên bản 4
5.6.7.1 Lưu trữ và xử lý tiền điện tử
Trong các phần trên, chúng ta đã đi qua toàn bộ luồng xử lý cơ bản của chuỗi
khối. Một vấn đề xuất hiện ở đây: khi ví A chuyển tiền cho ví B thì tiền điện tử sẽ
lưu chuyển như thế nào? Làm sao xác định ví A có đủ tiền hay không? Làm sao
xác định được số tiền chuyển có phải của ví A hay không?
Trong phần tiếp theo, chúng ta sẽ xử lý việc lưu trữ tiền điện tử theo cơ chế
của Bitcoin. Vậy, với mạng Bitcoin, làm sao biết được chúng ta đang sở hữu 1
bitcoin? Sổ cái (ledger) của mạng Bitcoin không thực hiện ghi nợ đi 1 bitcoin của
ví gửi và ghi có 1 bitcoin vào ví của chúng ta. Để thực hiện được giao dịch này,
người gửi phải chứng minh được bằng cách tham chiếu đến một (hoặc nhiều) giao
dịch cho thấy trước đây họ đã nhận được 1 bitcoin, và sau đó người gửi tạo một
giao dịch chuyển 1 bitcoin đến ví của chúng ta. Lúc này, chúng ta xem như đã nhận
được 1 bitcoin.

116

Để đơn giản hơn, chúng ta hiểu là số dư của ví chính là tổng của tất cả các
giao dịch chưa được chi tiêu được gửi đến ví của chúng ta. Chúng ta quy ước đầu
ra giao dịch chưa được chi tiêu là UTXO (Unspent Transaction Outputs).
Chúng ta viết thêm vào lớp TransactionInput (được tạo bên trên) để tham
chiếu đến các UTXO như sau:
public class TransactionInput {
public String transactionOutputId; // Tham chiếu đến TransactionOutputs -> transactionId
public TransactionOutput UTXO; // Chứa giao dịch đầu ra chưa chi tiêu
public TransactionInput(String transactionOutputId) {
this.transactionOutputId = transactionOutputId;
}
}
Chúng ta viết thêm vào lớp TransactionOutput như sau:
import java.security.PublicKey;

public class TransactionOutput {
public String id;
public PublicKey recipient; // khóa công khai của người nhận
public float value; // số tiền chuyển
public String parentTransactionId; // mã giao dịch của giao dịch gốc được tham chiếu

// Hàm tạo đầu ra
public TransactionOutput(PublicKey recipient, float value, String parentTransactionId) {
this.recipient = recipient;
this.value = value;
this.parentTransactionId = parentTransactionId;
this.id = StringUtil.applySha256(StringUtil.getStringFromKey(recipient) +
Float.toString(value) + parentTransactionId);
}

// Kiểm tra coin có được sở hữu hay không bằng cách kiểm tra public key
public boolean isMine(PublicKey publicKey) {
return (publicKey == recipient);
}
}

Tới đây, chúng ta thấy rằng để thực hiện giao dịch trên blockchain, chúng ta
cần tham chiếu đến các giao dịch đã nhận coin trước đó. Nếu blockchain có kích
thước lớn, số lượng block khổng lồ, việc xử lý giao dịch sẽ mất rất nhiều thời gian
để duyệt các giao dịch trước đây. Để giải quyết vấn đề trên, chúng ta sẽ bổ sung

117

thông tin lưu trữ các đầu ra giao dịch chưa được chi tiêu (UTXO) bằng HashMap.
Chương trình trong file Blockchain.java được điều chỉnh như sau:
import java.security.Security;
import java.util.ArrayList;
import com.google.gson.GsonBuilder;
import java.util.HashMap; // thêm thư viện HashMap

public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static int difficulty = 5;
// số tiền chuyển nhỏ nhất
public static float minimumTransaction = 0.1f;
// Danh sách các đầu ra giao dịch chưa được chi tiêu
public static HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();

//khai báo hai ví
public static Wallet walletA;
public static Wallet walletB;
public static void main(String[] args) {
// Sử dụng thư viện mã hóa Bouncy Castle
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

// tạo hai ví walletA và walletB
walletA = new Wallet();
walletB = new Wallet();

// Kiểm tra cặp khóa của ví A
System.out.println("Khóa bí mật của ví A:");
System.out.println(StringUtil.getStringFromKey(walletA.privateKey));
System.out.println("Khóa công khai của ví A:");
System.out.println(StringUtil.getStringFromKey(walletA.publicKey));

// Tạo một giao dịch test chuyển tiền từ ví A sang ví B với số tiền 5 coins
Transaction transaction = new Transaction(walletA.publicKey, walletB.publicKey, 5, null);
transaction.generateSignature(walletA.privateKey);

// Xác thực chữ ký điện tử của giao dịch
System.out.println("Xác thực chữ ký thành công? ");
System.out.println(transaction.verifiySignature());
}
}

Tiếp theo, trong file Transaction.java, chúng ta bổ sung hàm xử lý giao dịch
processTransaction, hàm lấy tổng số coin input và output như sau:

118

import java.security.*;
import java.util.ArrayList;

public class Transaction {
public String transactionId; // mã giao dịch, ở đây là hash của GD
public PublicKey sender; // khóa công khai của ví gửi
public PublicKey recipient; // khóa công khai của ví nhận
public float value; // số tiền chuyển
public byte[] signature; // chữ ký để xác thực giao dịch
public ArrayList<TransactionInput> inputs = new ArrayList<TransactionInput>();
public ArrayList<TransactionOutput> outputs = new ArrayList<TransactionOutput>();
private static int sequence = 0; // dùng để đến số lượng giao dịch đã được tạo

// Hàm tạo giao dịch
// Tham số đầu vào:
// 1. khóa công khai của ví gửi
// 2. Khóa công khai của ví nhận
// 3. Số tiền chuyển
// 4. Danh sách đầu vào
public Transaction(PublicKey from, PublicKey to, float value, ArrayList<TransactionInput> inputs) {
this.sender = from;
this.recipient = to;
this.value = value;
this.inputs = inputs;
}

// Hàm băm giao dịch để xác định mã giao dịch (hash)
private String calulateHash() {
// tăng sequence lên 1 đơn vị để tránh vị trùng mã giao dịch sau khi băm
sequence++;
return StringUtil.applySha256(StringUtil.getStringFromKey(sender) +
StringUtil.getStringFromKey(recipient) +
Float.toString(value) + sequence);
}

// Ký lên các dữ liệu giao dịch
public void generateSignature(PrivateKey privateKey) {
String data = StringUtil.getStringFromKey(sender) + StringUtil.getStringFromKey(recipient)
+ Float.toString(value);
signature = StringUtil.applyECDSASig(privateKey, data);
}

// Verifies the data we signed hasnt been tampered with
public boolean verifiySignature() {
String data = StringUtil.getStringFromKey(sender) + StringUtil.getStringFromKey(recipient)
+ Float.toString(value);
return StringUtil.verifyECDSASig(sender, data, signature);
}

119


// Trả về TRUE nếu GD được xác thực thành công
public boolean processTransaction() {

if (verifiySignature() == false) {
System.out.println("Không thể xác thực được giao dịch");
return false;
}

// Lấy các input để đảm bảo coin chưa được sử dụng
for (TransactionInput i : inputs) {
i.UTXO = Blockchain.UTXOs.get(i.transactionOutputId);
}

// Kiểm tra tính hợp lệ của GD
if (getInputsValue() < Blockchain.minimumTransaction) {
System.out.println("Số tiền GD nhỏ hơn mức quy định tối thiểu: " + getInputsValue());
return false;
}

// Tạo output cho giao dịch
float leftOver = getInputsValue() - value; // get value of inputs then the left over change:
transactionId = calulateHash();
// Chuyển tiền cho ví nhận
outputs.add(new TransactionOutput(this.recipient, value, transactionId));
// Lấy phần chưa chuyển để chuyển ngược lại vào ví gửi
outputs.add(new TransactionOutput(this.sender, leftOver, transactionId));

// Lưu output vào UTXO
for (TransactionOutput o : outputs) {
Blockchain.UTXOs.put(o.id, o);
}

// Xóa các input khỏi UTXO vì đã sử dụng
for (TransactionInput i : inputs) {
if (i.UTXO == null)
continue; // nếu không tìm thấy giao dịch thì continue
Blockchain.UTXOs.remove(i.UTXO.id);
}

return true;
}

// Hàm lấy tổng số coin của các input từ UTXO
public float getInputsValue() {
float total = 0;
for (TransactionInput i : inputs) {
if (i.UTXO == null)

120

continue; // nếu không tìm thấy giao dịch thì continue
total += i.UTXO.value;
}
return total;
}

// Hàm lấy tổng số coin của các output
public float getOutputsValue() {
float total = 0;
for (TransactionOutput o : outputs) {
total += o.value;
}
return total;
}
}

Hàm xử lý giao dịch processTransaction sẽ tiến hành kiểm tra tính hợp
lệ của giao dịch: kiểm tra chữ ký điện tử, các input chưa được sử dụng, số tiền giao
dịch tối thiểu. Sau đó sẽ tiến hành tạo ra các output mới và cập nhật các input đã
sử dụng. Hình bên dưới mô tả rõ hơn về cách sử dụng của input và output.

Trong hình trên, đầu tiên Bob chuyển 5 coins cho Sally. Lúc này Bob tạo giao
dịch với value là 5 coins, đồng thời input sẽ tham chiếu đến giao dịch trước đó
(Kass chuyển 5 coins cho Bob) để xác nhận sở hữu của 5 coins sẽ chuyển, output
lúc này sẽ được lưu lại để xác nhận Sally nhận được 5 coins từ Bob.
Sau đó Sally chuyển 2 coins cho Josh. Tương tự như trên, Sally sẽ tạo giao
dịch với value là 2 coins, input tham chiếu đến giao dịch nhận 5 coins từ Bob trước
đó, output sẽ gồm 2 thông tin:
- Output 2 coins chuyển cho Josh;
- Output 3 coins chuyển ngược lại cho Sally.

121

Tiếp theo, chúng ta cập nhật lại Class Wallet để lấy được số dư ví và tạo giao
dịch xuất phát từ ví.
import java.security.*; // Thư viện mã hóa của Java
import java.security.spec.ECGenParameterSpec;
import java.util.ArrayList; // Bổ sung các thư viện mới cần sử dụng
import java.util.HashMap;
import java.util.Map;

public class Wallet {
public PrivateKey privateKey; // khóa bí mật
public PublicKey publicKey; // khóa công khai

// HashMap lưu thông tin UTXO của ví
public HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();

public Wallet() {
generateKeyPair(); //sinh cặp khóa ngẫu nhiên
}

//Hàm sinh cặp khóa ngẫu nhiên cho ví
public void generateKeyPair() {
try {
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "BC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("prime192v1");
// Khởi tạo bộ sinh khóa và sinh cặp khóa
keyGen.initialize(ecSpec, random);
KeyPair keyPair = keyGen.generateKeyPair();
// Gán cặp khóa của ví bằng cặp khóa vừa sinh
privateKey = keyPair.getPrivate();
publicKey = keyPair.getPublic();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

// Hàm trả về số dư và lưu UTXO của ví
public float getBalance() {
float total = 0;
for (Map.Entry<String, TransactionOutput> item : Blockchain.UTXOs.entrySet()) {
TransactionOutput UTXO = item.getValue();
// chỉ lấy các output của ví hiện tại (coin của ví hiện tại)
if (UTXO.isMine(publicKey)) {
// lưu vào trong UTXO của ví hiện tại
UTXOs.put(UTXO.id, UTXO);
total += UTXO.value;
}

122

}
// trả về số dư ví
return total;
}

// Hàm tạo giao dịch mới xuất phát từ ví hiện tại
public Transaction sendFunds(PublicKey _recipient, float value) {
// kiểm tra số tiền chuyển so với số dư ví
if (getBalance() < value) {
System.out.println("Giao dịch thất bại. Số tiền giao dịch lớn hơn số dư ví.");
return null;
}
// Tạo danh sách các input
ArrayList<TransactionInput> inputs = new ArrayList<TransactionInput>();
float total = 0;
for (Map.Entry<String, TransactionOutput> item : UTXOs.entrySet()) {
TransactionOutput UTXO = item.getValue();
total += UTXO.value;
inputs.add(new TransactionInput(UTXO.id));
if (total > value)
break;
}

// Tạo giao dịch với các thông tin bên trên
Transaction newTransaction = new Transaction(publicKey, _recipient, value, inputs);
// Tạo chữ ký điện tử cho giao dịch
newTransaction.generateSignature(privateKey);

//xóa input đã sử dụng
for (TransactionInput input : inputs) {
UTXOs.remove(input.transactionOutputId);
}
return newTransaction;
}
}


5.6.7.2 Đưa các giao dịch vào khối
Trong phần này, chúng ta sẽ thay thế chuỗi data trong Block thành danh sách
các giao dịch sử dụng ArrayList. Để làm việc này, trước tiên bổ sung thêm hàm
getMerkleRoot để duyệt danh sách giao dịch để lấy được root của cây Merkle.
Đọc thêm về cây Merkle tại đây.

123

import java.security.MessageDigest; // để sử dụng các hàm băm
import java.security.Key; // Các thư viện hỗ trợ thao tác với mã hóa bất đối xứng
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.util.Base64; //Thư viện thao tác với Base64
import java.util.ArrayList;

public class StringUtil {
// Hàm băm dữ liệu từ chuỗi input sử dụng thuật toán SHA256
// đầu vào: chuỗi dữ liệu input
// đầu ra: mã băm của chuỗi dữ liệu input
public static String applySha256(String input) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256"); // sử dụng thuật toán SHA256
byte[] hash = digest.digest(input.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer(); // lưu hash dưới dạng Hex
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
}

// Tạo chữ ký điện tử
public static byte[] applyECDSASig(PrivateKey privateKey, String input) {
Signature dsa;
byte[] output = new byte[0];
try {
dsa = Signature.getInstance("ECDSA", "BC");
dsa.initSign(privateKey);
byte[] strByte = input.getBytes();
dsa.update(strByte);
byte[] realSig = dsa.sign();
output = realSig;
} catch (Exception e) {
throw new RuntimeException(e);
}
return output;
}

// Xác thực chữ ký điện tử
public static boolean verifyECDSASig(PublicKey publicKey, String data, byte[] signature) {

124

try {
Signature ecdsaVerify = Signature.getInstance("ECDSA", "BC");
ecdsaVerify.initVerify(publicKey);
ecdsaVerify.update(data.getBytes());
return ecdsaVerify.verify(signature);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

//Hàm chuyển key sang dạng Base64
public static String getStringFromKey(Key key) {
return Base64.getEncoder().encodeToString(key.getEncoded());
}

// Duyệt danh sách giao dịch để lấy được root của cây Merkle
public static String getMerkleRoot(ArrayList<Transaction> transactions) {
int count = transactions.size();
ArrayList<String> previousTreeLayer = new ArrayList<String>();
for (Transaction transaction : transactions) {
previousTreeLayer.add(transaction.transactionId);
}
ArrayList<String> treeLayer = previousTreeLayer;
while (count > 1) {
treeLayer = new ArrayList<String>();
for (int i = 1; i < previousTreeLayer.size(); i++) {
treeLayer.add(applySha256(previousTreeLayer.get(i - 1) + previousTreeLayer.get(i)));
}
count = treeLayer.size();
previousTreeLayer = treeLayer;
}
String merkleRoot = (treeLayer.size() == 1) ? treeLayer.get(0) : "";
return merkleRoot;
}
}

Sau đó, chúng ta điều chỉnh Class Block (file Block.java) để thay thế chuỗi
data bằng danh sách giao dịch như sau:
import java.util.Date; // để sử dụng các hàm ngày tháng
import java.util.ArrayList;

public class Block {
public String hash; // mã băm của khối hiện tại
public String previousHash; // mã băm của khối liền kề phía trước
public String merkleRoot;

125

// Danh sách các giao dịch trong khối
public ArrayList<Transaction> transactions = new ArrayList<Transaction>();
private long timeStamp; // mốc thời gian sinh ra khối, tính bằng mili giây từ 01/01/1970
private int nonce; // dùng cho việc đào

// Hàm tạo với hai thông số đầu vào
// data: dữ liệu của khối
// previousHash: mã băm của khối liền kề phía trước
public Block(String data, String previousHash) {
this.previousHash = previousHash;
this.timeStamp = new Date().getTime(); // lấy mốc thời gian tạo khối
this.hash = calculateHash(); // câu lệnh này phải nằm cuối cùng để có được các thông số đầu vào
}

// Hàm tính hash cho khối, có bổ sung nonce
public String calculateHash() {
String calculatedhash = StringUtil.applySha256(previousHash + Long.toString(timeStamp) +
Integer.toString(nonce) + merkleRoot);
return calculatedhash;
}
// Hàm đào
// Đầu vào: độ khó của việc đào
public void mineBlock(int difficulty) {
//lấy root của cây Merkle
merkleRoot = StringUtil.getMerkleRoot(transactions);
//Tạo một String với các số 0, số lượng 0 = difficulty
String target = new String(new char[difficulty]).replace('\0', '0');
while(!hash.substring( 0, difficulty).equals(target)) {
nonce ++;
hash = calculateHash();
}
System.out.println("Đã đào thành công!!! : " + hash);
}

// Thêm gioao dịch vào khối
public boolean addTransaction(Transaction transaction) {
// Kiểm tra và xử lý giao dịch
if(transaction == null) return false;
// Nếu khối là khối nguyên thủy thì bỏ qua kiểm tra
if((previousHash != "0")) {
if((transaction.processTransaction() != true)) {
System.out.println("Giao dịch không thể thực hiện được.");
return false;
}
}
// Thêm giao dịch vào danh sách giao dịch của khối
transactions.add(transaction);
System.out.println("Giao dịch đã được thêm thành công vào khối.");

126

return true;
}
}

5.6.7.3 Kiểm tra chuỗi khối
Tới đây, chúng ta đã hoàn thành việc xây dựng chuỗi khối phiên bản 4. Để
kiểm tra hoạt động của chuỗi khối vừa tạo, chúng ta sẽ viết lại hàm main trong
Blockchain.java như sau:
import java.security.Security;
import java.util.ArrayList;
import java.util.HashMap; // thêm thư viện HashMap

public class Blockchain {
public static ArrayList<Block> blockchain = new ArrayList<Block>();
public static HashMap<String,TransactionOutput> UTXOs = new HashMap<String,TransactionOutput>();
public static int difficulty = 5;
public static float minimumTransaction = 0.1f;
public static Wallet walletA;
public static Wallet walletB;
public static Transaction genesisTransaction;

public static void main(String[] args) {
// Sử dụng thư viện Bouncy Castle
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

// Tạo ví A và B
walletA = new Wallet();
walletB = new Wallet();
// ví ban đầu của blockchain
Wallet coinbase = new Wallet();

// Tạo giao dịch đầu tiên, chuyển 100 coins từ ví coinbase vào ví A
genesisTransaction = new Transaction(coinbase.publicKey, walletA.publicKey, 100f, null);
// Ký chữ ký điện tử cho giao dịch
genesisTransaction.generateSignature(coinbase.privateKey);
// Gán mã cho giao dịch
genesisTransaction.transactionId = "0";
// Thêm output
genesisTransaction.outputs.add(new TransactionOutput(genesisTransaction.recipient, genesisTransaction.value, ge
nesisTransaction.transactionId));
// Lưu giao dịch vào UTXO
UTXOs.put(genesisTransaction.outputs.get(0).id, genesisTransaction.outputs.get(0));

System.out.println("Đang khởi tạo và đào khối nguyên thủy");

127

// Tạo khối genesis
Block genesis = new Block("0");
// Thêm giao dịch vào khối
genesis.addTransaction(genesisTransaction);
// Gắn khối vào chuỗi khối
addBlock(genesis);

// Kiểm tra hoạt động của blockchain
// Tạo khối thứ nhất
Block block1 = new Block(genesis.hash);
System.out.println("\nSố dư của ví A : " + walletA.getBalance());
System.out.println("\nĐang chuyển 40 coins từ ví A sang ví B...");

// Chuyển 40 coins từ ví A sang ví B
block1.addTransaction(walletA.sendFunds(walletB.publicKey, 40f));
addBlock(block1);
System.out.println("\nSố dư ví A: " + walletA.getBalance());
System.out.println("\nSố dư ví B: " + walletB.getBalance());

// Chuyển tiền vượt quá số dư ví
Block block2 = new Block(block1.hash);
System.out.println("\nĐang chuyển 1000 coins từ ví A sang ví B...");
block2.addTransaction(walletA.sendFunds(walletB.publicKey, 1000f));
addBlock(block2);
System.out.println("\nSố dư ví A: " + walletA.getBalance());
System.out.println("\nSố dư ví B: " + walletB.getBalance());

// Chuyển 20 coins từ ví B sang ví A
Block block3 = new Block(block2.hash);
System.out.println("\nĐang chuyển 20 coins từ ví B sang ví A...");
block3.addTransaction(walletB.sendFunds( walletA.publicKey, 20));
System.out.println("\nSố dư ví A: " + walletA.getBalance());
System.out.println("\nSố dư ví B: " + walletB.getBalance());

isChainValid();

}

public static Boolean isChainValid() {
Block currentBlock;
Block previousBlock;
String hashTarget = new String(new char[difficulty]).replace('\0', '0');
HashMap<String,TransactionOutput> tempUTXOs = new HashMap<String,TransactionOutput>();
tempUTXOs.put(genesisTransaction.outputs.get(0).id, genesisTransaction.outputs.get(0));

//loop through blockchain to check hashes:
for(int i=1; i < blockchain.size(); i++) {

128

currentBlock = blockchain.get(i);
previousBlock = blockchain.get(i-1);

if(!currentBlock.hash.equals(currentBlock.calculateHash()) ){
System.out.println("Hash của khối hiện tại không hợp lệ");
return false;
}

if(!previousBlock.hash.equals(currentBlock.previousHash) ) {
System.out.println("Hash của khối liền kế phía trước không hợp lệ");
return false;
}

if(!currentBlock.hash.substring( 0, difficulty).equals(hashTarget)) {
System.out.println("Khối chưa được đào thành công");
return false;
}

TransactionOutput tempOutput;
for(int t=0; t <currentBlock.transactions.size(); t++) {
Transaction currentTransaction = currentBlock.transactions.get(t);

if(!currentTransaction.verifiySignature()) {
System.out.println("Chữ ký điện tử của giao dich(" + t + ") hợp lệ");
return false;
}
if(currentTransaction.getInputsValue() != currentTransaction.getOutputsValue()) {
System.out.println("Tổng giá trị input và output của giao dịch (" + t + ") không bằng nhau");
return false;
}

for(TransactionInput input: currentTransaction.inputs) {
tempOutput = tempUTXOs.get(input.transactionOutputId);

if(tempOutput == null) {
System.out.println("Không tìm thấy tham chiếu input của giao dịch (" + t + ")");
return false;
}

if(input.UTXO.value != tempOutput.value) {
System.out.println("Giá trị của tham chiếu input của giao dịch (" + t + ") không hợp lệ");
return false;
}

tempUTXOs.remove(input.transactionOutputId);
}

for(TransactionOutput output: currentTransaction.outputs) {

129

tempUTXOs.put(output.id, output);
}

if( currentTransaction.outputs.get(0).recipient != currentTransaction.recipient) {
System.out.println("Người nhận của giao dịch (" + t + ") không hợp lệ");
return false;
}
if( currentTransaction.outputs.get(1).recipient != currentTransaction.sender) {
System.out.println("Người nhận phần dư của giao dịch (" + t + ") không hợp lệ");
return false;
}

}

}
System.out.println("Chuỗi khối hợp lệ");
return true;
}

public static void addBlock(Block newBlock) {
newBlock.mineBlock(difficulty);
blockchain.add(newBlock);
}
}

Kết quả chạy chương trình như sau:

130

Đến đây, chúng ta đã hoàn thành xây dựng một chuỗi khối trên java. Mã nguồn
của chương trình có thể tại tại đây.
Tags