You are on page 1of 29

Chuyên Đề Công Nghệ Phần Mềm

Tên đề tài:
TÌM HIỂU VÀ THỬ NGHIỆM THUẬT TOÁN KHAI
PHÁ DỮ LIỆU GSP

Giảng viên hướng dẫn: Nguyễn Mạnh Sơn


Họ và tên sinh viên: Lại Thế Quyền
Quách Văn Phong
Cấn Quang Hưng
Lớp : L14CNPM
MỤC LỤC
1.Khai phá dữ liệu............................................................................................................................4

1.1Tại sao lại khai phá dữ liệu?...............................................................................4


1.2 Định nghĩa khai phá dữ liệu...............................................................................5
1.3 Các bước chính trong khám phá tri thức...........................................................6
2. Các hướng tiếp cận và các kỹ thuật áp dụng trong Khai phá dữ liệu.........................................7

2.1 Các hướng tiếp cận và các kỹ thuật chính trong khai phá dữ liệu....................7
2.1 Các dạng dữ liệu có thể khai phá.......................................................................8
3. Ứng dụng của Khai phá dữ liệu..................................................................................................8

1. Giới thiệu chung về luật kết hợp.................................................................................................9

1.1 Khái niệm luật kết hợp.......................................................................................9


1.2 Các ứng dụng điển hình của luật kết hợp........................................................10
2.Luật dãy.......................................................................................................................................11

2.1 Khái niệm luật dãy và ví dụ............................................................................11


2.2 Một số ứng dụng...............................................................................................13
Chương III: CÁC PHƯƠNG PHÁP KHAI PHÁ LUẬT DÃY................................16
1.Khái quát về khai phá luật dãy...................................................................................................16

2.Thuật toán GSP (Generalized Sequential Patterns)...................................................................18

2
Giới thiệu đề tài
Khai phá mẫu dãy là một nội dung quan trọng trong khai phá dữ liệu với nhiều ứng dụng
rộng rãi như phân tích thị trường, phân tích mẫu truy cập web, phát hiện xâm nhập trong
môi trường mạng, trong nghiên cứu DNA, dự doán nhu cầu mua sắm của khách hàng…
Khai phá mẫu dãy là việc phát hiện các dãy con phổ biến trong cơ sở dữ liệu dãy. Theo
các nghiên cứu, các thuật toán, khai phá mẫu dãy chủ yếu tập chung vào hai nội dung là
cách thức mà dãy ứng viên được sinh ra và lưu trữ, cách mà độ hỗ trợ được tính và tần
suất dãy ứng viên được kiểm tra. Dựa vào các tiêu chí trên, thuật toán khai phá mẫu dãy
có thể được nhóm thành hai hướng tiếp cận chính: thuật toán dựa trên Aproori, thuật
toán pháy triển mẫu. Có một số thuật toán theo phương pháp tiếp cận dựa trên Apriori
như AprioriAll, GSP, Spade, Spam… và các biến thể của chúng.

3
Chương I: TỔNG QUAN VỀ KHAI PHÁ DỮ LIỆU

1. Khai phá dữ liệu


1.1 Tại sao lại khai phá dữ liệu?
Hơn một thập niên trở lại đây, lượng thông tin được lưu trữ trên các thiết bị điện
tử (đĩa cứng, CD-ROM, băng từ, .v.v.) không ngừng tăng lên. Sự tích lũy dữ liệu này
xảy ra với một tốc độ bùng nổ. Người ta ước đoán rằng, lượng thông tin trên toàn cầu
tăng gấp đôi sau khoảng hai năm và theo đó số lượng cũng như kích cỡ của các CSDL
cũng tăng lên một cách nhanh chóng [AR95].

Hình 1 - Lượng dữ liệu được tích lũy tăng mạnh theo thời gian

Chúng ta quả thực đang “ngập” trong dữ liệu, nhưng lại cảm thấy “đói” tri
thức và thông tin hữu ích. Lượng dữ liệu khổng lồ này thực sự là một nguồn “tài
nguyên” rất giá trị bởi thông tin là yếu tố then chốt trong hoạt động kinh doanh vì nó
giúp những người điều hành và quản lý có một cái nhìn sâu sắc, chính xác, khách
quan vào tiến trình kinh doanh trước khi ra quyết định. KPDL – khai thác những
thông tin tiềm ẩn có tính dự đoán từ những CSDL lớn – là một hướng tiếp cận mới
với khả năng giúp các công ty chú trọng vào những thông tin có nhiều ý nghĩa từ
những tập hợp dữ liệu lớn (databases, data warehouses, data repositories) mang tính
lịch sử. Những công cụ KPDL có thể dự đoán những xu hướng trong tương lai và
do đó cho phép doanh nghiệp ra những quyết định kịp thời được định hướng bởi tri
thức mà KPDL đem lại. Sự phân tích dữ liệu một cách tự động và mang tính dự báo
của KPDL có ưu thế hơn hẳn so với sự phân tích thông thường dựa trên những sự
kiện trong quá khứ của các hệ hỗ trợ ra quyết định (decision support systems -
DSSs) truyền thống trước đây. Công cụ KPDL cũng có thể trả lời những câu hỏi
trong lĩnh vực kinh doanh mà trước đây được xem là tốn nhiều thời gian để xử lý.
Với tất cả những ưu thế trên, KPDL đã chứng tỏ được tính hữu dụng của nó trong môi
4
trường kinh doanh đầy tính cạnh tranh ngày nay. Giờ đây, KPDL đã và đang trở
thành một trong những hướng nghiên cứu chính của lĩnh vực khoa học máy tính và
công nghệ tri thức.
Phạm vi ứng dụng ban đầu của KPDL chỉ là trong lĩnh vực thương mại (bán lẻ)
và tài chính (thị trường chứng khoán). Nhưng ngày nay, KPDL đã được ứng dụng
rộng rãi trong các lĩnh vực khác như tin-sinh (bio-informatics), điều trị y học (medical
treatment), viễn thông (telecommunication), giáo dục (education), .v.v.
1.2 Định nghĩa khai phá dữ liệu
Chúng ta có thể hiểu một cách sơ lược rằng KPDL là quá trình tìm kiếm những
thông tin (tri thức) hữu ích, tiềm ẩn và mang tính dự báo trong các tập dữ liệu lớn.
Như vậy, chúng ta nên gọi quá trình này là khám phá tri thức (Knowledge
Discovery in Databases – KDD) thay vì là KPDL. Tuy nhiên các nhà khoa học
trong lĩnh vực này đồng ý với nhau rằng hai thuật ngữ trên là tương đương và có thể
thay thế cho nhau. Họ lý giải rằng, mục đích chính của quá trình khám phá tri thức là
thông tin và tri thức có ích, nhưng đối tượng mà chúng ta phải xử lý rất nhiều trong
suốt quá trình đó lại chính là dữ liệu.
Mặt khác, khi chia các bước trong quá trình khám phá tri thức, một số nhà
nghiên cứu lại cho rằng, KPDL chỉ là một bước trong quá trình khám phá tri thức
[FSSU96].
Như vậy, khi xét ở mức tổng quan thì hai thuật ngữ này là tương đương nhau,
nhưng khi xét cụ thể thì KPDL được xem là một bước trong quá trình khám phá tri
thức.
Có rất nhiều định nghĩa về KPDL, các định nghĩa này đều là những định nghĩa
mang tính mô tả. Xin trích một vài định nghĩa ở nguyên bản tiếng Anh nhằm chuyển
tải được y nguyên ý của tác giả và tránh được những sai sót chủ quan:

Định nghĩa 1. William J Frawley, Gregory Piatetsky-Shapiro, và Christopher J


Matheus 1991 [FSSU96]:
“Knowledge discovery in databases, also known Data mining, is the non-
trivial process of identifying valid, novel, potentially useful, and ultimately
understandable patterns in data.”

Định nghĩa 2. Marcel Holshemier và Arno Siebes (1994):

5
“Data Mining is the search for relationships and global patterns that exist in
large databases but are ‘hidden’ among the vast amount of data, such as a
relationship between patient data and their medical diagnosis. These relationships
represent valuable knowledge about the database and the objects in the database
and, if the database is a faithful mirror, of the real world registered by the
database.”

1.3 Các bước chính trong khám phá tri thức


Người ta thường chia quá trình khám phá tri thức thành các bước sau [AR95]
[MM00] [HK02]:

• Trích chọn dữ liệu (data selection): là bước trích chọn những tập dữ liệu cần
được khai phá từ các tập dữ liệu lớn (databases, data warehouses, data
repositories) ban đầu theo một số tiêu chí nhất định.

• Tiền xử lý dữ liệu (data preprocessing): là bước làm sạch dữ liệu (xử lý với dữ
liệu không đầy đủ, dữ liệu nhiễu, dữ liệu không nhất quán, .v.v.), rút gọn dữ
liệu (sử dụng hàm nhóm và tính tổng, các phương pháp nén dữ liệu, sử dụng
histograms, lấy mẫu, .v.v.), rời rạc hóa dữ liệu (rời rạc hóa dựa vào
histograms, dựa vào entropy, dựa vào phân khoảng, .v.v.). Sau bước này, dữ
liệu sẽ nhất quán, đầy đủ, được rút gọn, và được rời rạc hóa.

• Biến đổi dữ liệu (data transformation): đây là bước chuẩn hóa và làm mịn dữ
liệu để đưa dữ liệu về dạng thuận lợi nhất nhằm phục vụ cho các kỹ thuật
khai phá ở bước sau.

• KPDL (data mining): đây là bước áp dụng những kỹ thuật khai phá (phần nhiều
là các kỹ thuật của machine learning) để khai phá, trích chọn được những
mẫu (patterns) thông tin, những mối liên hệ (relationships) đặc biệt trong dữ
liệu. Đây được xem là bước quan trọng và tốn nhiều thời gian nhất của toàn
quá trình KDD.
• Biểu diễn và đánh giá tri thức (knowledge representation & evaluation):
những mẫu thông tin và mối liên hệ trong dữ liệu đã được khai phá ở bước
trên được chuyển dạng và biểu diễn ở một dạng gần gũi với người sử dụng
như đồ thị, cây, bảng biểu, luật, .v.v. Đồng thời bước này cũng đánh giá
những tri thức khám phá được theo những tiêu chí nhất định.

6
Hình 2 - Các bước trong quá trình khám phá tri thức (KDD)

2. Các hướng tiếp cận và các kỹ thuật áp dụng trong Khai phá dữ liệu
2.1 Các hướng tiếp cận và các kỹ thuật chính trong khai phá dữ liệu
Các hướng tiếp cận của KPDL có thể được phân chia theo chức năng hay lớp các
bài toán khác nhau. Sau đây là một số hướng tiếp cận chính [HK02].

• Phân lớp và dự đoán (classification & prediction): xếp một đối tượng vào
một trong những lớp đã biết trước. Ví dụ: phân lớp vùng địa lý theo dữ liệu
thời tiết. Hướng tiếp cận này thường sử dụng một số kỹ thuật của machine
learning như cây quyết định (decision tree), mạng nơ ron nhân tạo (neural
network), .v.v. Phân lớp còn được gọi là học có giám sát (học có thầy –
supervised learning).

• Luật kết hợp (association rules): là dạng luật biểu diễn tri thứ ở dạng khá
đơn giản. Ví dụ: “60 % nam giới vào siêu thị nếu mua bia thì có tới 80%
trong số họ sẽ mua thêm thịt bò khô”. Luật kết hợp được ứng dụng nhiều
trong lĩnh vực kinh doanh, y học, tin-sinh, tài chính & thị trường chứng
khoán, .v.v.

• Khai phá chuỗi theo thời gian (sequential/temporal patterns): tương tự như
khai phá luật kết hợp nhưng có thêm tính thứ tự và tính thời gian. Hướng
tiếp cận này được ứng dụng nhiều trong lĩnh vực tài chính và thị trường
chứng khoán vì nó có tính dự báo cao.

• Phân cụm (clustering/segmentation): xếp các đối tượng theo từng cụm (số
lượng cũng như tên của cụm chưa được biết trước. Phân cụm còn được gọi
là học không giám sát (học không có thầy – unsupervised learning).

• Mô tả khái niệm (concept description & summarization): thiên về mô tả,


7
tổng hợp và tóm tắt khái niệm. Ví dụ: tóm tắt văn bản.

2.1 Các dạng dữ liệu có thể khai phá

Do KPDL được ứng dụng rộng rãi nên nó có thể làm việc với rất nhiều kiểu dữ
liệu khác nhau [HK02]. Sau đây là một số kiểu dữ liệu điển hình.
• CSDL quan hệ (relational databases)
• CSDL quan hệ - hướng đối tượng (object-relational databases)
• CSDL đa phương tiện (multimedia databases) như âm thanh (audio), hình
ảnh (image), phim ảnh (video), .v.v.
• Dữ liệu Text và Web (text database & www)
• ……

3. Ứng dụng của Khai phá dữ liệu

KPDL tuy là một lĩnh vực mới nhưng thu hút được rất nhiều sự quan tâm của các
nhà nghiên cứu nhờ vào những ứng dụng thực tiễn của nó. Chúng ta có thể liệt kê ra
đây một số ứng dụng điển hình:

• Phân tích dữ liệu và hỗ trợ ra quyết định (data analysis & decision support)

• Điều trị y học (medical treatment): mối liên hệ giữa triệu chứng, chẩn đoán và
phương pháp điều trị (chế độ dinh dưỡng, thuốc men, phẩu thuật, …).

• Text mining & Web mining: phân lớp văn bản và các trang web, tóm tắt văn
bản, .v.v.

• Tin-sinh (bio-informatics): tìm kiếm, đối sánh các hệ gene và thông tin di
truyền, mối liên hệ giữa một số hệ gene và một số bệnh di truyền, .v.v.

• Tài chính và thị trường chứng khoán (finance & stock market): phân tích
tình hình tài chính và dự báo giá của các loại cổ phiếu trong thị trường
chứng khoán, .v.v.

• Bảo hiểm (insurance)


 .v.v.

8
Chương II: KHÁI QUÁT CHUNG VỀ LUẬT KẾT HỢP, LUẬT
DÃY VÀ KHAI PHÁ LUẬT DÃY
Khai phá luật dãy là một chủ đề thiết thực và quan trọng trong khai phá dữ liệu
với nhiều ứng dụng như là trong phân tích giao dịch mua hàng của khách hàng, khai
thác weblogs, khai thác các dãy ADN, nghiên cứu dữ liệu trong các bài toán khí tượng
- thủy văn như dự báo thời tiết, các thảm họa tự nhiên như động đất, sóng thần...
Các thuật toán khai phá luật dãy kế thừa nhiều từ các thuật toán khai phá luật kết
hợp, và nhiều thuật toán trong số đó là mở rộng của các thuật toán khởi thủy, ở đó sự
khác biệt chính là trong khai phá luật dãy đưa ra các phân tích liên giao dịch (inter-
transaction), trong khi đó khai phá luật kết hợp là tìm luật về mối liên quan giữa các
phần tử trong cùng một giao dịch (intra- transaction). Trước tiên, ta cần tìm hiểu một
số vấn đề của luật kết hợp.

1. Giới thiệu chung về luật kết hợp


1.1 Khái niệm luật kết hợp
Trong lĩnh vực Data Mining, mục đích của luật kết hợp (Association Rule - AR) là
tìm ra các mối quan hệ giữa các đối tượng trong khối lượng lớn dữ liệu. Nội dung cơ bản
của luật kết hợp được tóm tắt như dưới đây.
Cho cơ sở dữ liệu gồm các giao dịch T là tập các giao dịch t1, t2, …, tn.
T = {t1, t2, …, tn}. T gọi là cơ sở dữ liệu giao dịch (Transaction Database). Mỗi giao
dịch ti bao gồm tập các đối tượng I (gọi là itemset)
I = {i1, i2, …, im}. Một itemset gồm k items gọi là k-itemset
Mục đích của luật kết hợp là tìm ra sự kết hợp (association) hay tương quan
(correlation) giữa các items. Những luật kết hợp này có dạng X =>Y
Trong Basket Analysis, luật kết hợp X =>Y có thể hiểu rằng những người mua các
mặt hàng trong tập X cũng thường mua các mặt hàng trong tập Y. (X và Y gọi là itemset).
Ví dụ, nếu X = {Apple, Banana} và Y = {Cherry, Durian} và ta có luật kết hợp X
=>Y thì chúng ta có thể nói rằng những người mua Apple và Banana thì cũng thường
mua Cherry và Durian.
Theo quan điểm thống kê, X được xem là biến độc lập (Independent variable) còn Y
được xem là biến phụ thuộc (Dependent variable)
Độ hỗ trợ (Support) và độ tin cây (Confidence) là 2 tham số dùng để đo lường luật kết
hợp.
Độ hỗ trợ (Support) của luật kết hợp X =>Y là tần suất của giao dịch chứa tất cả các
items trong cả hai tập X và Y. Ví dụ, support của luật X =>Y là 5% có nghĩa là 5% các
giao dịch X và Y được mua cùng nhau.
Độ tin cậy (Confidence) của luật kết hợp X =>Y là xác suất xảy ra Y khi đã biết X. Ví
dụ độ tin cậy của luật kết hợp {Apple} =>Banana} là 80% có nghĩa là 80% khách hàng
mua Apple cũng mua Banana.

9
Để thu được các luật kết hợp, ta thường áp dụng 2 tiêu chí: minimum support
(min_sup) và minimum confidence (min_conf)
Các luật thỏa mãn có support và confidence thỏa mãn (lớn hơn hoặc bằng) cả
Minimum support và Minimum confidence gọi là các luật mạnh (Strong Rle)
Minimum support và Minimum confidence gọi là các giá trị ngưỡng (threshold) và
phải xác định trước khi sinh các luật kết hợp.
Một itemsets mà tần suất xuất hiện của nó >= min_sup goi là frequent itemsets
Một số loại luật kết hợp
Binary association rules (luật kết hợp nhị phân): Apple => Banana
Quantitative association rules (luật kết hợp định lượng):
weight in [70kg – 90kg] => height in [170cm – 190cm]
Fuzzy association rules (Luật kết hợp mờ): weight in HEAVY => height in TALL
Thuật toán phổ biến nhất tìm các luật kết hợp là Apriori sử dụng Binary association rules.
1.2 Các ứng dụng điển hình của luật kết hợp
Một số ứng dụng điển hình như: phân tích giỏ hàng (market basket analysis), đưa
ra chiến lược tiếp thị, thiết kế bài trí gian hàng, chiến lược bán hàng khuyến mại, các
bài toán phân lớp, phân cụm, ...
Market basket analysis: Chẳng hạn, một người quản lý một chi nhánh bán hàng,
họ muốn biết thêm về thói quen mua sắm của khách hàng. Cụ thể như họ muốn biết
rằng “Trong mỗi lần mua sắm, khách hàng thường mua các nhóm mặt hàng nào cùng
nhau?”. Để trả lời câu hỏi này, việc phân tích giỏ khách hàng sẽ được thực hiện trên
dữ liệu mua bán lẻ của khách hàng đã được lưu trữ. Sau đó có thể sử dụng kết quả đó
để lên kế hoạch tiếp thị, chiến lược quảng cáo hoặc dự định bổ sung các danh mục
hàng hóa mới. Việc phân tích giỏ hàng có thể giúp bạn thiết kế gian hàng với các cách
bài trí hàng hóa khác nhau. Các mặt hàng thường xuyên được mua với nhau có thể
được đặt ở gần nhau để thúc đẩy việc bán hàng. Nếu khách hàng mua máy tính cũng
có xu hướng mua phần mềm diệt virus cùng lúc, cũng thế, đặt màn hình gần với các
phần mềm hiển thị có thể giúp tăng doanh số bán hàng của cả hai. Trong một chiến
lược khác, bố trí phần cứng và phần mềm ở hai đầu của cửa hàng có thể lôi kéo khách
hàng mua những mặt hàng khác trên đường di chuyển giữa hai vị trí. Ví dụ, sau khi
quyết định mua một máy tính đắt tiền, trong khi đến mua phần mềm diệt virus, khách
hàng quan sát thấy hệ thống an ninh gia đình được trưng bày và có thể quyết định
mua. Việc phân tích giỏ hàng cũng có thể giúp các nhà bán lẻ đưa ra các kế hoạch bán
hàng giảm giá. Thông thường, khách hàng có xu hướng mua máy tính và máy in với
nhau, khi đó có thể bán giảm giá máy in nếu khách hàng mua máy tính.
Trong gian hàng, mỗi mặt hàng gắn với một biến Boolean biểu thị sự có mặt
hay vắng mặt của mặt hàng đó. Tiếp đến, mỗi giỏ hàng có thể được thể hiện bởi một
vector Boolean các giá trị được gán cho các biến đó. Các vector Boolean biểu thị
10
các mẫu mua hàng mà ở đó các mặt hàng được kết hợp một cách thường xuyên hoặc
được mua với nhau. Các mẫu này có thể được biểu thị ở dạng các luật kết hợp. Ví dụ,
khách hàng mua máy tính cũng có xu hướng mua phần mềm diệt virus cùng lúc, có
thể được biểu diễn với luật kết hợp như sau:
computer ⇒ antivirus_software [support = 2%, confidence = 60%]

support = 2% nghĩa là có 2% trong tất cả các giao dịch được phân tích cho thấy
máy tính và phần mềm diệt virus được mua cùng lúc. confidence = 60% nghĩa là có
60% số lượng khách hàng đã mua máy tính thì cũng mua phần mềm. Thông
thường, các luật kết hợp được quan tâm nếu chúng đáp ứng được cả ngưỡng hỗ trợ
tối thiểu và ngưỡng tin cậy tối thiểu. Các ngưỡng này có thể được thiết lập bởi
người dùng.

2. Luật dãy

2.1 Khái niệm luật dãy và ví dụ


Ta giới thiệu vấn đề dựa trên quá trình mua bán hàng và một CSDL lưu trữ thông
tin giao dịch mua bán hàng bao gồm các thông tin về mã khách hàng (customer-id),
thời gian giao dịch (transaction-time) và các mặt hàng trong giao dịch.
 Các khái niệm
Một itemset là một tập không rỗng các phần tử (item).

Một dãy (sequence) là một danh sách có thứ tự các itemset.

Không mất tính tổng quát, chúng ta giả sử rằng một tập các phần tử được ánh xạ
tới một tập các số nguyên liền kề. Ta biểu thị itemset i bởi (i1i2...im), trong đó ij là một
phần tử. Ta biểu thị dãy s bởi (s1s2...sn), trong đó sj là một itemset.
Dãy (a1a2...an) được chứa trong dãy (b1b2...bn) nếu ở đó tồn tại các số nguyên
i1 < i2 < ... < in sao cho a1 ⊆ bi1 , a2 ⊆ bi2 , ..., an ⊆ bin. Ta sử dụng ký
hiệu  để biểu thị quan hệ “được chứa trong”. Ví dụ, dãy <(3) (4,5) (8)>
<(7) (3 8) (9) (4 5 6) (8)>, vì
((3) ⊆ (3 8), (4 5) ⊆ (4 5 6) và (8) ⊆ (8). Tuy nhiên, dãy <(3) (5)>
không được chứa trong <(3 5)> và ngược lại. Phần tử 3 và 5 trong dãy <(3) (5)>
mô tả chúng không nằm trong cùng một lần giao dịch, trong khi phần tử 3 và 5
trong dãy <(3 5)> mô tả chúng nằm trong một lần giao dịch. Trong một tập các
dãy, một dãy s là lớn nhất hay tối đa (maximal) nếu s không được chứa trong bất
kỳ dãy nào khác.
Tất cả các giao dịch của cùng một khách hàng có thể được xem như là một dãy.
Trong đó, mỗi giao dịch được xem như một tập các phần tử, và danh sách các giao
11
dịch theo thứ tự tăng dần về thời gian giao dịch tương ứng với một dãy. Chúng ta gọi
đó là một dãy khách hàng (customer-sequence). Ta biểu thị các giao dịch của một
khách hàng được sắp xếp thứ tự tăng dần theo thời gian là (T1, T2, ..., Tn). Tập các
phần tử (item) trong Ti được biểu thị bởi itemset(Ti). Dãy customer-sequence của một
khách hàng là một dãy <itemset(T1) itemset(T2) ... itemset(Tn)>.
Một khách hàng hỗ trợ một dãy s nếu s được chứa trong dãy customer-sequence
đối với khách hàng đó. Độ hỗ trợ của một dãy được định nghĩa là số khách hàng hỗ trợ
dãy đó.

Các dãy tối đa trong số tất cả các dãy phổ biến đáp ứng mức hỗ trợ tối thiểu cụ
thể nào đó được gọi là luật dãy hay mẫu dãy (sequential patterns).
Ta gọi dãy đáp ứng độ hỗ trợ tối thiểu là dãy phổ biến (large sequence)
 Ví dụ
Cho CSDL mua bán hàng thể hiện trong hình 1.1.

Transaction Time Customer Id Items Bought


June 10 '93 2 10, 20
June 12 '93 5 90
June 15 '93 2 30
June 20 '93 2 40, 60, 70
June 25 '93 4 30
June 25 '93 3 30, 50, 70
June 25 '93 1 30
June 30 '93 1 90
June 30 '93 4 40, 70
July 25 '93 4 90
Hình 1.1: CSDL gốc

CSDL trong hình 1.2 đã được sắp xếp theo mã khách hàng (customer-id) và thời gian
giao dịch.

Customer Id Transaction Time Items Bought


1 June 25 '93 30
1 June 30 '93 90
2 June 10 '93 10, 20
2 June 15 '93 30
2 June 20 '93 40, 60, 70
3 June 25 '93 30, 50, 70
4 June 25 '93 30
4 June 30 '93 40, 70

12
4 July 25 '93 90
5 June 12 '93 90
Hình 1.2: CSDL được sắp xếp theo
Khách hàng ID và thời gian giao dịch
CSDL hình 1.3 thể hiện như là một tập các dãy khách hàng (customer-sequence).

Customer Id Customer Sequence


1 <(30) (90)>
2 <(10 20) (30) (40 60 70)>
3 <(30 50 70)>
4 <(30) (40 70) (90)>
5 <(90)>
Hình 1.3: CSDL theo dãy khách hàng
(customer-sequence)
Với mức hỗ trợ tối thiểu là 25%, tức là xuất hiện tối thiểu 2 trong tổng số 5
khách hàng, hai dãy <(30) (90)> và <(30) (40 70)> là lớn nhất trong số các dãy đáp
ứng điều kiện giàng buộc hỗ trợ, và là các mẫu dãy mong muốn. Mẫu dãy <(30) (90)>
xuất hiện trong các giao dịch của khách hàng 1 và 4. Mẫu dãy <(30) (40 70)> xuất
hiện trong giao dịch của khách hàng 2 và 4.(Vì (40 70) là tập con của (40 60 70) nên
cũng được tính cho khách hàng 2).
Ví dụ về một dãy mà không có hỗ trợ tối thiểu là dãy <(10 20) (30)>, dãy này chỉ
xuất hiện trong giao dịch của khách hàng 2. Các dãy <(30)>, <(40)>, <(70)>,
<(90)>, <(30) (40)>, <(30) (70)>, <(40 70)> mặc dù thỏa mãn hỗ trợ tối thiểu, nhưng
chúng không phải dãy tối đa nên không phải là kết quả cần tìm.

Sequential Patterns with support > 25%


<(30) (90)>
<(30) (40 70)>
Hình 1.4: Tập kết quả

2.2 Một số ứng dụng


 Khai phá dãy cho các mẫu hành vi người dùng trong lĩnh vực thương mại điện
thoại di động
Sự phát triển của máy tính và các công nghệ truyền thông gần đây giúp cho các
hệ thống liên lạc cá nhân (Personal Communication Systems - PCSs) ngày càng trở
nên phổ biến, đặt ra vấn đề về quản lý thông tin di động.
Mô hình hóa một cách hiệu quả các mẫu hành vi của người sử dụng trong các hệ
thống điện thoại di động đem lại lợi ích không chỉ cho người sử dụng trong những truy
cập thông minh, mà còn đem lại lợi nhuận tài chính cho các nhà cung cấp dịch vụ di
động như quảng cáo. Trong môi trường web, người sử dụng di động có thể yêu cầu
các loại hình dịch vụ khác nhau và ứng dụng của điện thoại di động, PDA hay máy
13
tính xách tay từ bất cứ đâu tại bất kỳ thời gian nào thông qua GSM, GPRS hoặc
mạng không dây. Rõ ràng là những hành vi của người sử dụng điện thoại di động
(trong đó vị trí và dịch vụ vốn đã cùng tồn tại) trở nên phức tạp hơn so với các hệ
thống web truyền thống. Để giúp người sử dụng thu nhận được thông tin mong muốn
trong một thời gian ngắn là một trong những ứng dụng nhiều hứa hẹn, đặc biệt khi
mà người dùng không có nhiều thời gian để lướt nhiều trang web.
Hệ thống quản lý thông tin di động lưu trữ và cập nhật các thông tin vị trí của
người sử dụng điện thoại di động, những người được phục vụ bởi hệ thống. Một chủ
đề nóng trong lĩnh vực nghiên cứu quản lý thông tin di động là dự đoán di động. Dự
đoán di động có thể được định nghĩa là dự đoán vị trí di chuyển tiếp theo của người sử
dụng di động giữa các vùng trong hệ thống liên lạc cá nhân PCS hoặc mạng GSM. Dự
đoán đó có thể được sử dụng để tăng hiệu quả của PCSs. Sử dụng dự đoán di chuyển,
hệ thống có thể phân bổ nguồn tài nguyên một cách hiệu quả khả năng di chuyển đến
các vùng thay vì phân bổ nguồn tài nguyên một cách không có định hướng trong các
vùng lân cận của người sử dụng điện thoại di động. Hiệu quả phân bổ nguồn tài
nguyên cho người dùng di động sẽ cải thiện việc sử dụng tài nguyên và giảm độ trễ
trong việc tiếp cận các nguồn tài nguyên. Dự báo chính xác thông tin vị trí cũng rất
quan trọng trong xử lý các truy vấn phụ thuộc vào vị trí của người dùng di động. Khi
người dùng đưa ra một truy vấn liên quan đến vị trí, câu trả lời cho truy vấn sẽ phụ
thuộc vào vị trí hiện tại của người dùng. Nhiều phạm vi ứng dụng bao gồm cả lĩnh vực
chăm sóc sức khỏe, khoa học sinh học, quản lý khách sạn, và lợi ích quân sự từ hiệu
quả xử lý các truy vấn phụ thuộc vào vị trí. Với hiệu quả dự đoán về vị trí, có thể thể
trả lời các truy vấn liên quan đến vị trí di chuyển tiếp theo của người sử dụng.
So với số lượng công việc thực hiện cho việc cập nhật vị trí, một số ít đã được
thực hiện trong lĩnh vực dự báo di chuyển. Những công việc này có một số hạn chế,
được giải thích như sau:
• Một số trong đó là sự không nỗ lực tìm kiếm các mẫu thông tin di động.
Thay vào đó, các mẫu này được giả định là có sẵn. Những mẫu này sau đó
được sử dụng để dự báo di chuyển.
• Việc dự đoán được dựa trên khả năng phân bố của tốc độ và hướng của
người sử dụng điện thoại di động. Để thu thập những thông tin như vậy, cần
thiết phải có những công cụ rất tinh vi và tốn kém như hệ thống định vị toàn
cầu (Global Positioning System - GPS).
Nhằm khắc phục những hạn chế trên, người ta đã phát triển một thuật toán dự
đoán di động hiệu quả. Những qui luật này được gọi là các mẫu di động. Sau đó, các
luật di động này được trích xuất ra từ các mẫu di động. Các quy tắc di động được gắn
với quỹ đạo hiện tại của một người sử dụng điện thoại di động, và được sử dụng cho
các dự đoán hướng di chuyển tiếp theo của người dùng. Thuật toán dự đoán này là
khai phá các mẫu di động của người dùng và sinh ra các luật di động, được thực hiện
14
offline bởi hệ thống. Tuy nhiên, dự báo di chuyển được thực hiện online. Điều đó có
nghĩa là bất cứ khi nào người dùng có ý định thực hiện một di chuyển trong một khu
vực nhất định, một yêu cầu dự đoán sẽ được gửi đến hệ thống và dự đoán được thực
hiện bởi hệ thống bằng cách sử dụng các luật di động dựa trên thuật toán dự đoán.

Hình 1.5: Kiến trúc tổng thể của hệ thống quản lý thông tin di động

15
Chương III: CÁC PHƯƠNG PHÁP KHAI PHÁ LUẬT DÃY
1. Khái quát về khai phá luật dãy
Khai phá luật dãy xử lý dữ liệu điển hình là các dãy là một tập hợp các phần tử
được sắp thứ tự. So với vấn đề luật kết hợp, luật dãy nghiên cứu dữ liệu đưa ra các
phân tích “liên giao dịch” (inter-transaction). Có rất nhiều ứng dụng về khai phá mẫu
dãy và vấn đề cũng được định nghĩa theo những cách khác nhau với mức độ thay đổi
không đáng kể. Kết hợp với các giải pháp hiệu quả, những vấn đề này có thể phù
hợp với dữ liệu thực tế có mốc thời gian (timestamp) (khi mà luật kết hợp đã không
giải quyết được) và cung cấp những kết quả hữu ích.
Ta sử dụng CSDL giao dịch mua bán hàng làm ví dụ, với các thông tin về: định
danh của dãy hoặc định danh khách hàng (sequence-id or customer-id), thời gian giao
dịch (transaction-time) và mặt hàng liên quan trong giao dịch (item). Một CSDL như
vậy được gọi là CSDL dãy. Chính xác hơn, mỗi giao dịch là một tập hợp các mặt hàng
(itemset) và mỗi dãy là một danh sách các giao dịch được sắp xếp theo thời gian giao
dịch. Đối với hiệu quả của việc trợ giúp ra quyết định, mục đích là để tìm ra những
thói quen tiêu biểu của người dùng. Để làm được việc đó, đòi hỏi phải có một CSDL
dãy và đưa ra giá trị hỗ trợ tức là số lần xuất hiện trong CSDL. Một mẫu dãy phổ biến
là một dãy mà tần xuất xuất hiện trong CSDL vượt ngưỡng quy định. Vấn đề tìm kiếm
tất cả các mẫu thường xuyên từ lượng dữ liệu khổng lồ đòi hỏi chi phí về mặt thời gian
là rất lớn. Thông thường, việc kiểm tra của tất cả các kết hợp có thể trong dữ liệu là
vấn đề khó và những thuật toán mới tập trung vào dữ liệu dãy được coi là quan trọng
đối với một tổ chức.
Khai phá luật dãy có thể được áp dụng rộng rãi trên các ứng dụng từ nhiều loại
dữ liệu có thời gian liên quan. Ví dụ, từ một CSDL mua bán hàng, một mẫu dãy có thể
được dùng để phát triển các chiến lược tiếp thị và sản phẩm; Bằng cách phân tích
weblog, các mẫu dãy rất hữu ích cho việc xây dựng website công ty giúp khách hàng
truy cập một cách dễ dàng các liên kết phổ biến nhất (Kosala và Blockeel, 2000); Ta
cũng có thể thấy CSDL báo động mạng viễn thông, phát hiện xâm nhập (Hu và Panda,
2004), các dãy ADN (Zaki, 2003), …
Chúng ta chia vấn đề khai phá luật dãy thành các giai đoạn sau đây:
 Giai đoạn sắp xếp (Sort Phase): CSDL (D) được sắp xếp, với mã khách hàng
(custorm-id) là khóa chính và thời gian giao dịch (transaction-time) là khóa phụ. Bước
này chuyển đổi ngầm cơ sơ dữ liệu giao dịch gốc thành CSDL dãy khách hàng.
 Giai đoạn Litemset (Litemset Phase): Trong giai đoạn này, chúng ta tìm tập
tất cả litemsets L, đồng thời cũng tìm kiếm tập tất cả các dãy phổ biến 1-sequence,
vì tập này cũng là {<l> | l ∈ L}.

16
Với giao dịch của một khách hàng, độ hỗ trợ được tính tăng lên chỉ một lần ngay
cả khi khách hàng mua cùng một tập các sản phẩm trong hai hay nhiều giao dịch khác
nhau.
Tập hợp các litemsets được ánh xạ tới một tập hợp các số nguyên liên tiếp. Sau
bước xử lý litemsets để có được các thực thể duy nhất, việc ánh xạ này giúp ta có thể
so sánh hai litemsets có bằng nhau hay không trong thời gian cố định, và giảm số lần
cần thiết để kiểm tra nếu một dãy được chứa trong dãy khách hàng.
 Giai đoạn chuyển đổi (Transformation Phase): Như chúng ta sẽ thấy trong giai
đoạn dãy (Sequence Phase), cần phải xác định lặp đi lặp lại nhiều lần để đưa ra một
tập các dãy phổ biến (large sequences) được chứa trong một dãy khách hàng. Để thực
hiện điều này một cách nhanh chóng, ta chuyển đổi mỗi dãy khách hàng thành một đại
diện thay thế.
Trong một dãy khách hàng được chuyển đổi, mỗi giao dịch được thay thế bằng
tập tất cả các litemsets được chứa trong giao dịch đó. Nếu một giao dịch không chứa
bất kỳ litemset nào, nó không được giữ lại trong dãy chuyển đổi. Nếu một dãy khách
hàng không chứa bất kỳ litemset nào thì dãy này bị loại bỏ trong CSDL chuyển
đổi. Tuy nhiên, nó vẫn góp phần vào việc tính tổng số lượng khách hàng. Một dãy các
khách hàng khi đó được thể hiện bởi một danh sách tập các litemsets. Mỗi tập
litemsets được biểu diễn bởi {l1, l2, ..., ln}, trong đó li là một litemset.
CSDL chuyển đổi này gọi là DT. Tiếp tục sử dụng CSDL trong phần 1.2 làm ví
dụ, việc chuyển đổi CSDL Hình 1.3 được thể hiện trong Hình 2.1. Ví dụ, trong trong
việc chuyển đổi dãy khách hàng với Id 2, giao dịch (10 20) bị loại bỏ vì nó không chứa
bất kỳ litemset nào và giao dịch (40 60 70) được thay thế bằng tập litemsets {(40),(70),
(40 70)}.

Customer Original Transformed After Mapping


Id Customer Sequence Customer Sequence
1 < (30) (90)> < {(30)} {(90)}> <{1} {5}>
2 < (10 20) (30) < {(30)} {(40), (70), <{1} {2,3,4}>
(40 60 70) > (40 70)}>
3 < (30 50 70)> < {(30), (70)}> <{1,3}>
4 < (30) (40 70) (90)> < {(30)} {(40), (70), (40 70)} <{1} {2,3,4}
{(90)}> {5}>
5 < (90)> < {(90)}> <{5}>
Hình 2.1: CSDL đã được chuyển đổi từ Hình 1.3
 Giai đoạn dãy (Sequence Phase): Ta sử dụng tập các litemsets để tìm các dãy ứng
viên. Cấu trúc chung là thực hiện các quá trình duyệt lặp đi lặp lại trên dữ liệu. Trong
mỗi lần duyệt, ta bắt đầu với một tập khởi tạo các dãy phổ biến. Ta sử dụng tập khởi
tạo này để sinh ra các dãy phổ biến mới, tiềm năng, gọi là các dãy ứng viên (candidate
sequences). Tìm độ hỗ trợ cho các dãy ứng viên này trong suốt quá trình duyệt dữ liệu.
Tại lần duyệt cuối cùng của mỗi bước, xác định dãy nào trong các dãy ứng viên là dãy
phổ biến thực sự. Các dãy ứng viên phổ biến trở thành khởi tạo cho lần duyệt tiếp
theo. Trong lần duyệt đầu tiên, tất cả các 1-sequences với độ hỗ trợ tối thiểu, được
chứa trong giai đoạn litemset, tạo nên tập khởi tạo.
 Giai đoạn tìm dãy tối đa (Maximal Phase): Tìm các dãy tối đa trong tập các
dãy phổ biến (large sequences). Giai đoạn này được kết hợp với giai đoạn dãy
(Sequence Phase) để giảm chi phí thời gian trong việc tính các dãy không tối đa.
Tập tất cả các dãy phổ biến S được tìm thấy trong giai đoạn dãy, thuật toán tiếp
theo đây có thể được sử dụng để tìm các dãy tối đa. Với n là độ dài của dãy dài nhất.

for ( k = n; k > 1; k – – ) do
foreach k-sequence sk
do

Delete from S all subsequences of sk


2. Thuật toán GSP (Generalized Sequential Patterns)
Cấu trúc cơ bản của thuật toán GSP tìm kiếm mẫu dãy là thuật toán duyệt dữ liệu nhiều
lần, lần duyệt đầu tiên xác định độ hỗ trợ của từng phần tử, tức là số lượng dữ liệu dãy
có chứa các phần tử. Kết thúc lần duyệt đầu tiên, thuật toán đưa ra được các phần tử
thường xuyên, nghĩa là thỏa mãn độ hỗ trợ tối thiểu. Mỗi phần tử như vậy tiết lộ một
dãy phổ biến 1-element chứa phần tử đó. Mỗi dãy con bắt đầu duyệt với tập khởi đầu
là các dãy phổ biến được tìm thấy trong lần duyệt trước đó. Tập khởi đầu được sử
dụng để sinh ra các dãy phổ biến tiềm năng mới, gọi là các dãy ứng viên. Mỗi dãy ứng
viên có ít nhất một phần tử thuộc dãy khởi đầu, vì thế tất cả các dãy ứng viên trong một
lần duyệt sẽ có cùng số phần tử. Độ hỗ trợ cho các dãy ứng viên này được tìm thấy
trong qúa trình duyệt dữ liệu. Kết thúc lần duyệt, thuật toán xác định các dãy ứng viên
thường xuyên thực sự. Những ứng viên thường xuyên này trở thành tập khởi đầu cho lần
duyệt tiếp theo. Thuật toán kết thúc khi không tìm được dãy phổ biến nào ở cuối lần
duyệt, hoặc khi không có dãy ứng viên nào được sinh ra.
Ta cần chỉ rõ hai điểm mấu chốt của thuật toán là cách sinh các dãy ứng viên
(Candidate generation) và cách tính độ hỗ trợ để xác định dãy ứng viên (Counting
candidates).
 Sinh dãy ứng viên (Candidate Generation)
Xét một dãy có k phần tử, gọi là k-sequence (nếu một phần tử xuất hiện nhiều lần
trong các thành phần khác nhau của một dãy, mỗi lần xuất hiện được tính vào giá trị
của k.). Gọi Lk biểu thị tập tất cả các dãy phổ biến k-sequence và Ck biểu thị tập các
dãy ứng viên k-sequence.
Cho Lk-1 là tập tất cả các dãy phổ biến (k-1)-sequence, ta cần tạo ra tập cha
(superset) của tập tất cả các dãy phổ biến k-sequence. Đầu tiên, ta định nghĩa khái
niệm về một dãy con liên tục.

Định nghĩa: Cho dãy s = <s1 s2 … sn> và một dãy con c, c là dãy con liên tục của
s nếu thỏa mãn bất kỳ điều kiện nào sau đây:
1. c nhận được từ s bằng cách lược bỏ phần tử s1 hoặc sn.
2. c nhận được từ s bằng cách lược bỏ một phần tử từ thành phần si mà si có ít
nhất hai phần tử.
3. c là dãy con liên tục của c‟, và c‟ là dãy con liên tục của s.
Ví dụ: Giả sử có dãy s = <(1,2) (3,4) (5) (6)>. Khi đó, các dãy con liên tục của s
là <(2) (3,4) (5)>; <(1,2) (3) (5) (6)>; <(3) (5)>. Các dãy không phải là dãy con liên
tục của s như: <(1,2) (3,4) (6)>; <(1,2) (5) (6)>
Dữ liệu dãy có chứa dãy s cũng sẽ chứa bất kỳ dãy con liên tục nào của s. Nếu
không có ràng buộc về khoảng thời gian tối đa max-gap, dữ liệu dãy sẽ chứa tất cả
các dãy con của s (bao gồm cả các dãy con không liên tục). Đặc tính này cung cấp cơ
sở cho thủ tục sinh dãy ứng viên.
Thực hiện sinh các dãy ứng viên qua hai bước:
a. Giai đoạn nối (Join Phase): Thực hiện sinh các dãy ứng viên bằng phép nối Lk- 1
với Lk-1. Một dãy s1 nối với s2 nếu dãy con thu được bằng cách loại bỏ phần tử
đầu tiên của s1 và dãy thu được bằng cách loại bỏ phần tử cuối cùng của s2 là
giống nhau. Dãy ứng viên được sinh bằng phép nối s1 với s2 là dãy s1 được mở
rộng với phần tử cuối cùng trong s2. Phần tử được thêm trở nên thành phần
riêng biệt nếu đó là một thành phần riêng biệt trong s2, và một phần của thành
phần cuối cùng của s1 khác. Khi thực hiện nối L1 với L1, ta cần thêm vào phần
tử trong s2 một phần của itemset cũng như một thành phần riêng biệt, vì cả hai
<(x) (y)> và <(x y)> đều cho cùng một dãy <(y)> khi loại bỏ phần tử đầu tiên.
(Ta thấy rằng s1 và s2 là các dãy con liên tục của các dãy ứng viên mới
b. Giai đoạn thanh loại (Prune Phase): Ta loại bỏ các dãy ứng viên có dãy con liên
tục (k-1)-subsequence mà có độ hỗ trợ nhỏ hơn độ hỗ trợ tối thiểu. Nếu không
tính ràng buộc thời gian max-gap, ta cũng loại bỏ các dãy ứng viên mà có bất kỳ
dãy con nào không thỏa mãn độ hỗ trợ tối thiểu.

Ví dụ: Hình 1 cho thấy L3, và C4 sau khi thực hiện giai đoạn nối và thanh loại.
Trong giai đoạn nối, dãy <(1, 2) (3)> nối với <(2) (3, 4)> để sinh ra dãy <(1, 2) (3, 4)>
và nối với <(2) (3) (5)> để sinh ra dãy <(1, 2) (3) (5)>. Các dãy còn lại không được nối
với bất kỳ dãy nào trong L3. Chẳng hạn, dãy <(1, 2) (4)> không được nối với bất kỳ
dãy nào vì không có dãy nào có dạng <(2) (4 x)> hoặc <(2) (4) (x)>. Trong giai đoạn
thanh loại, dãy <(1, 2) (3) (5)> bị loại bỏ vì dãy con liên tục của nó là <(1) (3) (5)>
không thuộc L3.

Frequent Candidate 4-Sequences


3-Sequences after join after pruning
<(1, 2) (3)> <(1, 2) (3, 4)> <(1, 2) (3, 4)>
<(1, 2) (4)> <(1, 2) (3) (5)>
<(1) (3, 4)>
<(1, 3) (5)>
<(2) (3, 4)>
<(2) (3) (5)>
Hình 1: Ví dụ sinh dãy ứng viên
 Tính độ hỗ trợ các ứng viên (Counting Candidates)
Trong quá trình duyệt dữ liệu, ta đọc mỗi dữ liệu dãy tại một thời điểm và tăng
độ hỗ trợ của các ứng viên có trong dữ liệu dãy. Như vậy, với một tập các dãy ứng
viên C và một dữ liệu dãy d, ta cần tìm tất cả các dãy trong C có chứa d. Ta sử dụng
hai kỹ thuật sau để giải quyết vấn đề này:
1. Sử dụng cấu trúc dữ liệu hash-tree để giảm số lượng các ứng viên trong C đã
được kiểm tra cho một dữ liệu dãy.
2. Biến đổi đại diện của dữ liệu dãy d để có thể tìm kiếm ứng viên là dãy con
của d một cách hiệu quả.
Giảm số lượ ng các ứng viên cần kiể m tra:

a. Thêm các dãy ứng viên vào hash-tree: Khi thêm một dãy s, ta bắt đầu đi từ
nút gốc cho tới khi tìm được một nút lá. Tại nút trung gian có độ sâu p, ta lựa
chọn nhánh tiếp theo bằng cách áp dụng một hàm băm cho phần tử thứ p của dãy.
Lưu ý là ta áp dụng hàm băm đến phần tử thứ p, không phải là thành phần thứ
p. Tất cả các nút được khởi tạo bước đầu là các nút lá. Khi số lượng các dãy trong
một nút lá vượt quá một ngưỡng, nút lá khi đó được chuyển đến nút trung gian.

b. Tìm các dãy ứng viên được chứa trong dữ liệu dãy: Bắt đầu từ nút gốc, ta tìm
tất các các ứng viên được chứa trong dữ liệu dãy d. Áp dụng thủ tục sau, dựa trên
các loại nút bao gồm:
 Nút trung gian là nút gốc: Áp dụng hàm băm cho mỗi phần tử trong d, và
áp dụng đệ quy thủ tục này tới nút nằm trong bucket tương ứng. Với bất
kỳ dãy s được chứa trong dữ liệu dãy d, phần tử đầu tiên của s phải nằm
trong d. Thực hiện băm trên mọi phần tử trong d, ta đảm bảo rằng chỉ bỏ
qua các dãy bắt đầu với một phần tử không nằm trong d.
 Nút trung gian không phải là nút gốc: Giả sử ta đến nút này bằng việc
thực hiện băm phần tử x có thời gian giao dịch (transaction-time) là t. Áp
dụng hàm băm tới mỗi phần tử trong d có thời gian giao dịch trong
khoảng [t – window-size, t + max(window-size, max-gap)] và áp dụng đệ
quy thủ tục này tới các nút trong bucket tương ứng.
Để thấy tại sao kết quả trả về là tập các ứng viên, xét một dãy ứng viên s
với hai phần tử liên tục là x và y. Cho x là phần tử được chứa trong giao
dịch d với thời gian giao dịch là t. Vì d chứa s nên thời gian giao dịch
tương ứng với y cần phải trong khoảng [t – window-size, t + window-size]
nếu y là một phần của cùng thành phần chứa x, hoặc trong khoảng thời
gian (t, t + max-gap] nếu y là một phần của thành phần kế tiếp. Do đó nếu
chúng ta đạt đến nút này bằng thực hiện băm trên một phần tử x với thời
gian giao dịch t, y phải được chứa trong một giao dịch có thời gian giao
dịch ở trong khoảng [t – window-size, t + max (window-size, max-gap)]
cho dữ liệu dãy để hỗ trợ các dãy. Như vậy chúng ta chỉ cần áp dụng hàm
băm tới các phần tử trong d có thời gian giao dịch nằm trong khoảng thời
gian trên, và kiểm tra các nút tương ứng.
 Nút lá: Đối với mỗi dãy s là nút lá, ta kiểm tra xem d có chứa s, và thêm s
vào tập kết quả nếu cần thiết. (Chúng ta sẽ thảo luận dưới đây cách chính
xác để tìm d chứa một dãy ứng viên cụ thể.) Từ đó ta kiểm tra mỗi dãy
được chứa trong nút này, và không bỏ qua bất kỳ dãy nào.
Kiểm tra dữ liệu dãy chứa một dãy cho trướ c:

Cho dữ liệu dãy d, và một dãy ứng viên s = <s1 … sn> . Trước tiên ta mô tả thuật
toán để kiểm tra nếu d chứa s, giả sử tồn tại một thủ tục tìm kiếm sự xuất hiện
đầu tiên của một thành phần của s ở d sau một thời gian nhất định, và sau đó mô
tả thủ tục này. Thuật toán này kiểm tra nếu dữ liệu dãy d chứa một dãy ứng viên
s luân phiên giữa hai giai đoạn. Thuật toán bắt đầu với giai đoạn duyệt xuôi từ
phần tử đầu tiên.
 Giai đoạn duyệt xuôi (forward phase): Thuật toán tìm thành phần kế tiếp
của s trong d miễn là hiệu số giữa thời gian kết thúc của thành phần đã
được tìm thấy và thời gian bắt đầu của thành phần trước đó là ít hơn
khoảng max-gap. (Nhắc lại rằng đối với mỗi thành phần si, thời gian bắt
đầu start-time(si) và thời gian kết thúc end-time(si) tương ứng với thời
gian giao dịch đầu tiên và cuối cùng của tập các giao dịch có chứa si). Nếu
hiệu số này nhiều hơn max-gap, thuật toán sẽ chuyển sang giai đoạn duyệt
ngược. Nếu một thành phần không được tìm thấy tức là dữ liệu dãy không
chứa s.
 Giai đoạn duyệt ngược (backward phase): Thuật toán thực hiện quay lui
và xét (kéo lên) các thành phần liền trước. Nếu si là thành phần hiện tại và
thời gian kết thúc end-time(si) = t, thuật toán tìm tập các giao dịch đầu
tiên có chứa si mà có thời gian giao dịch sau (t – max-gap). Thời gian bắt
đầu đối với si–1 (sau khi si–1 được xét đến) có thể sau thời gian kết thúc
end-time của si. Trong khi xét si–1 có thể đòi hỏi phải xét cả si–2 bởi vì ràng
buộc max-gap giữa si–1 và si–2 có thể không còn được thỏa mãn. Thuật
toán thực hiện quay lui cho đến khi hoặc là ràng buộc max-gap giữa thành
phần vừa xét và thành phần liền trước thỏa mãn, hoặc là thành phần đầu
tiên được lấy lên. Sau đó thuật toán chuyển sang giai đoạn duyệt xuôi để
tìm các thành phần của s trong d bắt đầu từ thành phần liền sau của thành
phần cuối cùng được lấy lên của giai đoạn duyệt ngược. Nếu không có bất
kỳ thành phần nào được lấy lên (nghĩa là không có tập dãy con của các
giao dịch có chứa thành phần) khi đó dữ liệu dãy không chứa s.
Thủ tục thực hiện lặp đi lặp lại, hoán đổi giữa giai đoạn duyệt xuôi và duyệt
ngược cho tới khi tất cả các thành phần được tìm thấy.

Ví dụ: Cho dữ liệu dãy trong Hình 2. Xét trường hợp max-gap là 30, min-gap là 5
và window-size là 0. Với dãy ứng viên <(1, 2) (3) (4)>, (forward phase) trước tiên ta
cần tìm (1, 2) tại thời gian giao dịch 10, tiếp theo tìm thành phần (3) tại thời gian
giao dịch 45. Khi đó khoảng thời gian giữa hai thành phần (35 ngày) lớn hơn max-gap,
(backward phase) lấy lên thành phần (1, 2). Tìm lần xuất hiện đầu tiên của (1, 2) sau
thời gian 15, bởi vì thời gian kết thúc end-time((3)) = 45 và max-gap là 30, và vì vậy
thậm chí nếu (1, 2) xảy ra tại một số thời điểm trước 15, nó vẫn sẽ không thỏa mãn
ràng buộc max-gap. Ta tìm (1, 2) tại thời gian 50. Vì đây là thành phần đầu tiên nên
không phải kiểm tra xem liệu ràng buộc max-gap có nằm giữa (1, 2) và thành phần
trước đó có thỏa mãn không. Ta chuyển sang bước tiếp theo. Vì (3) không còn xảy ra
lớn hơn 5 ngày sau (1, 2), cần tìm sự xuất hiện tiếp theo của (3) sau thời gian 55. Ta
tìm thấy (3) tại thời gian 65. Khi ràng buộc giữa (3) và (1, 2) thõa mãn, ta tiếp tục di
chuyển tiếp và tìm thấy (4) tại thời gian 90. Ràng buộc max-gap giữa (4) và (3) được
thỏa mãn.

Item Times
10 1, 2
1 → 10 → 50 → NULL
25 4, 6
45 3 2 → 10 → 50 → 90 → NULL
50 1, 2
65 3 3 → 45 → 65 → NULL
90 2, 4
95 6 4 → 25 → 90 → NULL

Hình 2: Dữ liệu dãy Hình 3: Item xuất hiện theo thời gian
Để tìm kiếm một cách hiệu quả một phần tử đơn lẻ (item), ta sử dụng mảng để
lưu trữ tất cả các phần tử có trong dữ liệu dãy và thời gian giao dịch, dữ liệu dãy trong
Hình 2 được biến đổi như Hình 3, nhằm hỗ trợ cho việc tìm kiếm lần xuất hiện đầu
tiên của một thành phần trong dữ liệu dãy sau thời gian t. Thuật toán duyệt một lần tất
cả các phần tử trong thành phần và tìm thời gian giao dịch đầu tiên của mỗi phần tử
lớn hơn t. Nếu hiệu số giữa thời gian bắt đầu và thời gian kết thúc nhỏ hơn hoặc bằng
với window-size thì chấp nhận. Nếu không, t được lấy là hiệu số giữa thời gian kết
thúc và window-size, thủ tục tiếp tục được lặp lại.
Ví dụ: Cho dữ liệu dãy trong Hình 2, giả sử window-size = 7 ngày, ta phải tìm
lần xuất hiện đầu tiên của thành phần (2, 6) sau thời gian t = 20. Ta tìm phần tử 2 tại
thời gian 50, phần tử 6 tại thời gian 25. Vì end-time((2,6)) – start-time((2,6)) > 7 nên
ta đặt t là 43 (= end-time((2,6)) – window-size) và thử lại. Phần tử 2 còn lại tại thời
gian 90, trong khi phần tử 6 tiếp theo tại thời gian 95. Vì khoảng thời gian giữa 90 và
95 nhỏ hơn window-size nên ta bỏ qua.
 Phân loại
Cách tiếp cận cơ bản là thay thế mỗi dữ liệu dãy d với một dãy mở rộng d’, trong
đó, mỗi giao dịch d’i của d’ chứa các phần tử trong giao dịch di của d tương ứng, cũng
như tất cả các “ancestor” (tổ tiên) của mỗi phần tử trong di. Ví dụ, một dữ liệu dãy
<(1, 2) (3)> có thể được thay thế với dãy mở rộng <(1, 2, 4, 5, 6) (3, 4, 6)> . Sau đó, ta
thực GSP trên các dãy mở rộng này.
Có hai cách tối ưu hóa để cải thiện đáng kể hiệu suất thực hiện. Cách thứ nhất là
tính toán trước các “ancestor” của mỗi phần tử và loại bỏ các “ancestor” không có
trong bất kỳ dãy ứng viên nào được tính trước khi thực hiện duyệt dữ liệu. Ví dụ, nếu
(2), (3) và (4) không nằm trong bất kỳ dãy ứng viên nào được tính trong lần duyệt hiện
tại, ta sẽ thay thế dãy <(1, 2) (3)> với dãy mở rộng <(1, 5, 6) (5, 6)> (thay vì dãy mở
rộng <(1, 2, 4, 5, 6) (3, 5, 6)>). Cách tối ưu hóa thứ hai là không tính các mẫu dãy với
một thành phần có chứa cả phần tử x và phần tử y là ancestor của x, vì độ hỗ trợ của
các dãy này sẽ luôn giống độ hỗ trợ cho các mẫu dãy không có y. (Bất kỳ giao dịch
nào chứa x cũng sẽ chứa y.)
3. Ví dụ thuật toán GSP

Cho dữ liệu:
Seq. ID Sequence
10 <(b,d)cb(a,c)>
20 <(b,f)(c,e)b(f,g)>
30 <(a,h)(b,f)abf>
40 <(b,e)(c,e)d>
50 <a(b,d)bcb(a,d,e)>

Minsupp=2
C Sup
Các ứng viên đầu tiên C1:
<a>, <b>, <c>, <d>, <e>, <f>, <g>, <h> <a> 3

•Duyệt CSDL để tính độ phổ biến của từng ứng viên và tìm F1 <b> 5

-> F1 = <a>, <b>, <c>, <d>, <e>, <f> <c> 4

<g>,<f> có minsupp nhỏ hơn 2 nên bị loại. <d> 3


<e> 3
<f> 2
<g> 1

<h> 1

Tạo các ứng viên C2:


Tạo các chuỗi có chiều dài 2, có 2 phần tử từ các ứng viên của F1
<a> <b> <c> <d> <e> <f>
<a> <aa> <ab> <ac> <ad> <ae> <af>
<b> <ba> <bb> <bc> <bd> <be> <bf>
<c> <ca> <cb> <cc> <cd> <ce> <cf>
<d> <da> <db> <dc> <dd> <de> <df>
<e> <ea> <eb> <ec> <ed> <ee> <ef>
<f> <fa> <fb> <fc> <fd> <fe> <ff>

Tạo các chuỗi chiều dài 2 có 1 phần tử


<a> <b> <c> <d> <e> <f>
<a> <(a,b)> <(a,c)> <(a,d)> <(a,e)> <(a,f)>

<b> <(b,c)> <(b,d)> <(b,e)> <(b,f)>

<c> <(c,d)> <(c,e)> <(c,f)>


<d> <(d,e)> <(d,f)>
<e> <(e,f)>
<f>

Vậy tổng cộng có 51 chuỗi ứng viên có chiều dài 2


Xác định tập chuỗi phổ biến F2:
Duyệt cơ sở dữ liệu và xác định độ phổ biến của từng chuỗi ứng viên ta được 19
ứng viên có độ phổ biến >= minsupp (=2)

<a> <b> <c> <d> <e> <f>

<aa> <ab> <ac> <ad> <ae> <af>


<a>
Supp=2 Supp=2 Supp=1 Supp=1 Supp=1 Supp=1

<ba> <bb> <bc> <bd> <be> <bf>


<b>
Supp=3 Supp=4 Supp=4 Supp=2 Supp=3 Supp=2

<ca>
<cb> <cc> <cd> <ce> <cf>
<c> Supp=3 Supp=1 Supp=2 Supp=1 Supp=1
Supp=2

<da>
<db> <dc> <dd> <de> <df>
<d> Supp=2 Supp=2 Supp=1 Supp=1 Supp=0
Supp=2
<ea>
<eb> <ec> <ed> <ee> <ef>
<e> Supp=0 Supp=1 Supp=0 Supp=1 Supp=1 Supp=1
<fa>
<fb> <fc> <fd> <fe> <ff>
<f> Supp=2 Supp=1 Supp=0 Supp=1 Supp=2
Supp=1

<a> <b> <c> <d> <e> <f>

<a> <(a,b)> <(a,c)> <(a,d)> <(a,e)> <(a,f)>


Supp=0 Supp=1 Supp=1 Supp=1 Supp=0
<b> <(b,c)> <(b,d)> <(b,e)> <(b,f)>
Supp=0 Supp=2 Supp=1 Supp=2
<c> <(c,d)> <(c,e)> <(c,f)>
Supp=0 Supp=2 Supp=0
<d> <(d,e)> <(d,f)>
Supp=1 Supp=0
<e> <(e,f)>
Supp=0
<f>

Tập chuỗi phổ biến F2 gồm 19 chuỗi:


<aa>, <ab>, <ba>, <bb>, <bc>, <bd>, <be>, <bf>, <ca>, <cb>, <cd>, <da>, <db>,
<dc>, <fb>, <ff>, <b,d>, <b,f>, <c,e>
Kết Luận
GSP, một thuật toán mới khai thác những mẫu tuần tự tổng quát. Đánh giá thực
nghiệm sử dụng tổng hợp dữ liệu thực tế cho thấy GSP nhanh hơn nhiều thuật toán
AprioriAll.Thuật toán GSP tỷ lệ tuyến tính với số lượng của dữ liệu tuần tự, và có tỷ lệ
tăng nhiều với số lượng trung bình của dữ liệu tuần tự.
Thuật toán GSP đã thực hiện như một phần của sự tìm kiếm dữ liệu nguyên mẫu
ở khu nghiên cứu của IBM, vầ đã được hợp nhất trong sản phẩm tìm kiếm dữ liệu
IBM. Nó chạy trên nhiều nền tảng, bao gồm AIX và MVS. Nó cũng được dùng kết nối
song song cho các hệ thống cơ sở dữ liệu.
Thuật toán GSP tồn tại hạn chế khi sử dụng với số lượng lớn tập chuỗi ứng viên,
không hiệu quả khi khai thác các chuỗi dài.
Tài liệu tham khảo
1. Nguyễn Hoàng Tú Anh, Bài giảng khai thác dữ liệu và ứng dụng.
2. Ramakrishnan Srikant and Rakesh Agrawal, Mining Sequential Patterns:
Generalizations and Performance Improvements
3. Manan Parikh, Bharat Chaudhari and Chetna Chand, A comparative of Senquential
Pattern Mining Algorithm, 2013
4. Đỗ Phúc, Giáo trình Khai thác dữ liệu, NXB ĐHQG TP. HCM, 2005

You might also like