Luận văn Một số thuật toán khai phá luật dãy và ứng dụng thử nghiệm vào hệ thống quản lý khách hàng và tính hóa đơn nước

Luận văn trình bày sơ bộ về Hệ thống Quản lý khách hàng và tính hóa đơn nước. Phân tích và chỉra dữliệu dãy của bài toán trong quá trình xử lý thông tin (Chương 3, mục 3.3) để từ đó đưa ra mô hình thử nghiệm quá trình khai phá luật dãy nhằm mong muốnphát hiện một số luật dãy giúp cho ban lãnh đạo có được những thông tin cần thiết phục vụ công tác quản lý, đưa ra các chính sách kinh doanh, sản xuất hiệu quả.

pdf60 trang | Chia sẻ: lylyngoc | Lượt xem: 2824 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Một số thuật toán khai phá luật dãy và ứng dụng thử nghiệm vào hệ thống quản lý khách hàng và tính hóa đơn nước, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
buộc phải tính tập các ứng viên cuối cùng được tạo ra. Điều này làm giảm độ chênh lệch giữa hai tập ứng viên thực sự được tính, và khi đó AprioriSome sẽ tương tự như AprioriAll. So sánh hiệu suất thực hiện giữa hai thuật toán AprioriSome và AprioriAll cho thấy AprioriSome hiện tốt hơn khi độ hỗ trợ ở các mức thấp hơn, vì có nhiều dãy phổ biến hơn, và do đó có nhiều dãy không tối đa hơn. 2.2.3 Thuật toán GSP (Generalized Sequential Patterns) Thuật toán GSP khai phá mẫu dãy tổng quát. Theo đánh giá dựa trên thực nghiệm sử dụng dữ liệu mô phỏng và dữ liệu thực tế cho thấy GSP là nhanh hơn nhiều lần so với thuật toán AprioriAll đã được giới thiệu ở trên. Có hai lý do chính [2]: - Thuật toán GSP tính số lượng ứng viên ít hơn so với AprioriAll - Thuật toán AprioriAll phải tìm kiếm lần đầu tập các phần tử phổ biến xuất hiện trong mỗi thành phần của một dãy trong thời gian chuyển đổi dữ liệu, và sau đó tìm trong dữ liệu chuyển đổi các dãy ứng viên tồn tại trong đó. Điều này thường dẫn đến chậm hơn so với tìm kiếm trực tiếp các dãy ứng viên. 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 - 31 - Khai phá luật dãy Nguyễn Đình Vă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 = 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 [2]: 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 = . Khi đó, các dãy con liên tục của s là ; ; . Các dãy không phải là dãy con liên tục của s như: ; Trong [1] cho thấy rằng, 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: 1. 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 - 32 - Khai phá luật dãy Nguyễn Đình Văn 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 và đều cho cùng một dã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.) 2. 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 2.16 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 nối với để sinh ra dãy và nối với để sinh ra dãy . 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 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 hoặc . Trong giai đoạn thanh loại, dãy bị loại bỏ vì dãy con liên tục của nó là không thuộc L3. Candidate 4-Sequences Frequent 3-Sequences after join after pruning Hình 2.16: 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 - 33 - Khai phá luật dãy Nguyễn Đình Văn 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 = . 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. - 34 - Khai phá luật dãy Nguyễn Đình Văn 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.17. 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 , (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 - 35 - Khai phá luật dãy Nguyễn Đình Văn 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. Transaction-Time Items Item Times 10 25 45 50 65 90 95 1, 2 4, 6 3 1, 2 3 2, 4 6 1 2 3 4 5 6 7 → 10 → 50 → NULL → 10 → 50 → 90 → NULL → 45 → 65 → NULL → 25 → 90 → NULL → NULL → 25 → 95 → NULL → NULL Hình 2.17: Dữ liệu dãy Hình 2.18: 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.17 được biến đổi như Hình 2.18, 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.17, 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 có thể được thay thế với dãy mở rộng . 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 với dãy mở rộng (thay vì dãy mở rộng ). 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 - 36 - Khai phá luật dãy Nguyễn Đình Văn 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.) 2.3 Hai phương pháp khai phá luật dãy 2.3.1 Khai phá dãy sử dụng kỹ thuật phân vùng (thuật toán Dynamic DISC-all) Thuật toán Dynamic DISC-all bao gồm hai giai đoạn, phân vùng (partitioning) và so sánh [10]. Ban đầu, một lược đồ phân vùng được sử dụng để sinh một cách đệ quy các phân vùng cấp k, ở đó có thể khai phá được các dãy k thường xuyên. Phép đo về cách phân vùng sẽ giúp ích cho nhiệm vụ khai phá trên mỗi phân vùng như thế nào sẽ được tính toán để quyết định liệu có nên chuyển sang giai đoạn so sánh hay không. Ví dụ, như trong hình 2.19, một giai đoạn chuyển đổi xuất hiện sau các dãy-3 thường xuyên, trong phân vùng một, mức 3 được khai phá. Trong giai đoạn phân vùng, chúng ta có thể áp dụng bất kỳ chiến lược DP nào như lược đồ phân vùng đa cấp trong [Chiu, D.Y., Wu, Y.H., Chen, A.L.P. (2004)] và lược đồ quy chiếu CSDL trong [Pei, J.,Han, J.W., Mortazavi-Asl,B., Pinto, H.,Chen, Q.,Dayal,U., Hsu, M.C. (2001)]. Trong giai đoạn so sánh, chúng ta áp dụng lược đồ Khám phá dãy-k thường xuyên [Chiu, D.Y., Wu, Y.H., Chen, A.L.P. (2004)], là lược đồ kết hợp chiến lược DISC với chiến lược CP để đạt được hiệu suất tốt hơn. Trong phần này, chúng ta giới thiệu phương pháp tiếp cận cho việc chuyển tiếp giai đoạn động và cây-AVL cách vị trí (locative AVL-tree) hỗ trợ chiến lược DISC. Hình 2.19: Thuật toán Dynamic DISC-all  Sự chuyển tiếp giai đoạn động Các chiến lược DP [Ho, C.C., Li, H.F., Kuo, F.F., Lee, S.Y. (2006)] giảm chi phí cho việc liệt kê các dãy con nhưng phải chịu các chi phí chung cho việc phân vùng. Việc sử dụng chiến lược DP đơn lẻ không áp dụng cho các trường hợp có nhiều phân - 37 - Khai phá luật dãy Nguyễn Đình Văn vùng gần giống như là phân vùng cha mẹ của chúng. Trong những trường hợp này, Dynamic DISC-all nên chuyển sang giai đoạn so sánh. Do đó, việc có một chỉ dẫn tốt để có thể kích hoạt sự chuyển tiếp giai đoạn đúng thời điểm là rất cần thiết. Cho tổng số dãy khách hàng trong phân vùng P được ký hiệu là Size(P). Để quyết định xem việc phân vùng sẽ mang lại lợi ích nhiều hơn chi phí, một ý tưởng cơ bản là xem xét tỷ lệ của Size(P) với Size(Q), trong đó Q là phân vùng cha của P. Vì tổng số hỗ trợ đếm được của một phần tử trong Q có nghĩa là số lượng các dãy khách hàng hỗ trợ phần tử đó, Size(P) có thể thu được ngay lập tức khi tổng số hỗ trợ đếm được của các phần tử trong Q được tính toán. Hơn nữa, vì chiến lược DP thao tác trên phân vùng cha Q và sau đó tạo ra các phân vùng con, nên có thể thu được Size(P) mà không cần quá nhiều chi phí. Bây giờ hãy xem xét tỷ lệ của Size(P) với Size(Q). Tỷ lệ càng cao, thì phân vùng Q sẽ mang lại càng ít lợi ích. Trường hợp xấu nhất là khi tỷ lệ này bằng 1. Dựa trên ý tưởng này, có ba thước đo có thể được xem như là định hướng cho giai đoạn chuyển tiếp. Chúng ta lấy hình 2.20 như một minh hoạ, nơi mà tất cả các phân vùng cấp-k đã được tạo ra. Hình 2.20: Ba thước đo kích hoạt sự chuyển tiếp giai đoạn Tiếp theo, chúng ta lần lượt thảo luận về những hạn chế của thước đo dựa trên phân vùng con (child-based measure) và thước đo dựa trên phân vùng anh em (sibling- based measure). Trước tiên, child-based measure tạo ra quyết định riêng lẻ cho mỗi phân vùng con. Việc tạo ra quyết định cho một phân vùng cần quét toàn bộ phân vùng cha của nó. Một cách tương phản, child-based measure phải quét phân vùng cha nhiều lần, trong khi parent-based measure tạo ra tất cả các phân vùng con bằng cách quét các phân vùng cha chỉ một lần. Thứ hai, khi các sibling-based measure được lựa chọn, hai phân vùng anh em Q1 và Q2 có thể thích hợp với các chiến lược khác nhau. Giả sử rằng chỉ có hai phân vùng con, P11 và P12, chúng có các kích thước gần với Size(Q1). Điều đó ngụ ý rằng Q1 sẽ không phù hợp với chiến lược DP. Mặt khác, Q2 có thể thích hợp với chiến lược DP. Kết quả là, sibling-based measure cần dàn xếp mâu thuẫn giữa Q1 và Q2. So sánh với các thước đo khác, parent-based measure chỉ xem xét tỷ lệ giữa các phân vùng cha và các phân vùng con của nó. Do vậy, trong - 38 - Khai phá luật dãy Nguyễn Đình Văn Dynamic DISC-all chúng ta áp dụng tiêu chuẩn thước đo parent-based measure, biện pháp dựa vào cha, được gọi là tỷ lệ rút gọn, như một chỉ dẫn cho việc chuyển tiếp giai đoạn. Tỷ lệ rút gọn (Reduction rate): Cho một phân vùng Q, tổng số phân vùng con của nó được biểu diễn là NQ. Tỷ lệ rút gọn của Q (viết tắt là RRQ) có nghĩa là tỷ số của sự khác biệt trung bình giữa Size(Q) và kích thước của phân vùng con của nó với Size(Q), được tính toán theo công thức sau: Cho một ngưỡng γ , nếu RRQ cao hơn γ , giai đoạn phân vùng sẽ được tiếp tục; nếu không thì một sự chuyển đổi giai đoạn sẽ xuất hiện. Ta gọi γ là tỷ lệ rút gọn tối thiểu. Hình 2.21 là thuật toán chính của Dynamic DISC-all, bao gồm các phép tính của tỷ lệ rút gọn (bước 2) và giai đoạn so sánh (các bước 3–5). Tại bước 2, tỷ lệ rút gọn của một phân vùng P(S) được tính bởi công thức (2), sử dụng tổng số hỗ trợ đếm được, thu được trong bước 1. Tại bước 4, ta áp dụng phương pháp tiếp cận từ dưới lên và gọi lược đồ khai phá dãy k thường xuyên để tìm các dãy phổ biến còn lại với tiền tố S. Lưu ý rằng trong các bước ban đầu, P(S) là CSDL ban đầu và k = 0. Có nghĩa là thuật toán Dynamic DISC-all luôn quét các CSDL ban đầu một lần để tìm tất cả các dãy 1 thường xuyên. Sau đó, nó tính toán tỷ lệ rút gọn để quyết định liệu có nên tiếp tục giai đoạn phân vùng hay chuyển sang giai đoạn so sánh. Hình 2.21: Giải thuật chính của Dynamic DISC-all 2.3.2 Khai phá luật dãy bằng mã hóa khối cơ bản với thuật toán PRISM Có 3 khía cạnh của thuật toán PRISM cần giải thích rõ (i): Chiến lược không gian kiến trúc nhánh ngang; (ii) Cấu trúc dữ liệu thường được sử dụng thể hiện CSDL và thông tin ứng viên trung gian; (iii) Làm thế nào để tính toán độ hỗ trợ cho ứng viên; Khối cơ bản sẽ xác định dãy phổ biến của mỗi ứng viên. Cụ thể như sau:  Không gian tìm kiếm - 39 - Khai phá luật dãy Nguyễn Đình Văn Dãy thứ tự từng phần được tạo bởi dãy con liên quan được biểu diễn như một cây tìm kiếm. Cây tìm kiếm dãy được định nghĩa đệ qui như sau: Gốc của cây tìm kiếm ở mức 0 và gán nhãn với dãy null . Một nút mức k được gán nhãn với dãy S, nghĩa là một dãy k được mở rộng lặp đi lặp lại bằng cách thêm một phần tử (item) từ I tạo ra một nút con ở mức (k+1) nghĩa là dãy (k+1). Có hai cách để mở rộng dãy bởi cùng một phần tử: mở rộng dãy và mở rộng tập phần tử. Trong một dãy mở rộng, một phần tử được nối thêm lặp đi lặp lại một cách tuần tự vào cuối mỗi mẫu như một tập phần tử mới. Trong một tập phần tử mở rộng, một phần tử được thêm vào tập phần tử cuối cùng trong một mẫu. Tập phần tử mở rộng với điều kiện phần tử thêm vào đã sắp xếp theo thứ tự từ điển lớn hơn tất cả các phần tử trong tập phần tử cuối cùng. Vì thế, với cách mở rộng dãy thì kích thước của dãy luôn luôn tăng lên trong khi đó với cách mở rộng tập phần tử thì không. Ví dụ nếu chúng ta có một nút S=ab→a và một phần tử b để mở rộng S và như vậy dãy mở rộng là ab→a→b còn tập phần tử mở rộng sẽ là ab →ab. Hình 2.22 biểu diễn một ví dụ của cây tìm kiếm dãy thành phần với 2 phần tử a và b. Ví dụ chỉ ra rằng dãy tăng kích thước lên 3 (chỉ những nhánh con dưới phần tử a được hiển thị). Hình 2.22: Cây tìm kiếm dãy thành phần: mũi tên nét liền biểu thị các dãy mở rộng, mũi tên nét đứt biểu thị tập phần tử mở rộng Về bản chất thì tất cả các phương thức khai phá dãy theo cách mở rộng dãy hoặc mở rộng tập các phần tử đều sử dụng đến cây tìm kiếm. Sự khác biệt chính nằm ở chỗ độ hỗ trợ cho các mẫu ứng viên được quyết định như thế nào. Dưới đây mô tả thuật toán PRISM tính toán tần suất cho mỗi cách mở rộng.  Mã hóa khối cơ bản - 40 - Khai phá luật dãy Nguyễn Đình Văn Ví dụ trong hình 2.23(a) gồm 5 dãy có độ dài khác nhau với các phần tử I ={a,b, c}; Với G ={2,3,5,7} là tập sinh đầu tiên, chúng ta sẽ xem xét việc cấu trúc PRISM mã hóa khối cơ bản cho phần tử a như thế nào. Tại bước đầu tiên, cấu trúc PRISM sẽ mã hóa khối cơ bản về vị trí trong mỗi dãy. Ví dụ khi a xuất hiện ở vị trí 1, 4 và 6 trong dãy 1 (với giả thiết rằng vị trí đầu tiên xác định là 1) chúng ta có bit được mã hóa (bit-encoding) tương ứng là 100101, chuyển dãy sang dạng véctơ với độ dài là bội số của |G|= 4, ta có A = 10010100, hai bit được in đậm là hai bít thêm vào. Khi đó ta có ν(A)=ν(1001)ν(0100) ={14,3}. Vị trí được mã hóa của a cho tất cả các dãy được mô tả trong hình 2.23(b). Việc tiếp theo là mã hóa khối cơ bản cho dãy. Khi a xuất hiện trong tất cả các dãy trừ vị trí thứ tư khi đó chúng ta biểu diễn dãy véc tơ dãy sẽ là 11101000 sau khi thêm các bít vào cuối. Khi đó khối mã hóa cơ bản được biểu diễn trong hình 2.23(c), ν(A) = ν(1110)ν(1000)={30,2}. Việc mã hóa cho phần tử a về vị trí ở tất cả các dãy và khối cơ bản được mô tả trong hình 2.23(d). Một khối Ai = 0000 = 0 với ν(Ai) = {1} = 1 được coi là một khối rỗng. Lưu ý rằng việc mã hóa đầy đủ cho tất cả các vị trí khối rỗng còn lại, ví dụ a không xuất hiện tại khối thứ 2 tại vị trí thứ 5, khi đó dãy dãy véctơ là 0000 và mã cơ bản là {1}. Để loại trừ những khối rỗng, PRISM chỉ giữ lại những khối không rỗng khi mã hóa cơ bản. Cần giữ vị trí của mỗi khối trong dãy đáp ứng được yêu cầu. Hình 3e chỉ ra việc mã hóa khối cơ bản của phần tử a khi loại bỏ những khối rỗng. Khối của dãy đầu tiên là 30, ||30||G = 3, vậy có 3 dãy hợp lệ trong khối . Với mỗi dãy, chúng ta lưu vị trị vào khối các vị trí. Ví dụ, nếu vị trí của dãy {1} là 1 và hai phần tử đầu tiên trong khối vị trí là của dãy này thì vị trí khối tương ứng với dãy thứ 2 là 3 và vị trí trong khối tương ứng với dãy thứ 3 là 4 nếu dãy 2 và 3 chỉ cần một phần tử trong khối vị trí. Với cách biểu diễn này, mọi việc trở nên rất rõ ràng khi mã hóa cơ bản cho c. Với việc mã hóa đầy đủ sẽ chứa nhiều thông tin dư thừa, bằng cách khử đi các thông tin này trong mã hóa khối cơ bản, chúng ta có ví dụ nêu trong hình 2.23(e). (a) - 41 - Khai phá luật dãy Nguyễn Đình Văn (b) (c) (d) (e) Hình 2.23: Ví dụ mã hóa khối cơ bản: (a) CSDL; (b) Mã hóa vị trí của a; (c) Mã hóa dãy của a; (d) Khối cơ bản của a, b,c; (e) Mã hóa khối cơ bản của a, b, c Độ hỗ trợ của dãy S được xác định ngay từ khối của dãy trong mã hóa khối cơ bản. Đặt ε(S) = (SS ,PS ) thể hiện việc mã hóa khối cơ bản cho dãy S với SS là tập tất cả các khối của dãy được mã hóa, PS là tập tất cả các khối vị trí được mã hóa của S  Tính toán độ hỗ trợ thông qua phép nối (join) khối cơ bản Sau đây chúng ta sẽ chỉ ra rằng độ hỗ trợ của tập phần tử và dãy mở rộng được thực hiện thông qua kết hợp khối cơ bản. Giả sử rằng chúng ta có một số nút của S trong cây tìm kiếm dãy với S là mức k, đặt P là nút cha của S có mức k-1. Giả sử chúng ta có mã hóa khối cơ bản cho P là ε(P). Như minh họa trong hình 2, S được mở rộng bởi một nút nào đó cùng cấp dưới nút cha P. Ví dụ nếu P = ab, và S = ab →a, có - 42 - Khai phá luật dãy Nguyễn Đình Văn thể tạo ra sự mở rộng khác của S bằng sự mở rộng của P tạo ra nút anh em T = S = ab →b Các phần tử a và b có thể được sử dụng để mở rộng S = ab → a. Có hai dãy mở rộng, cụ thể là ab → a → a và ab → a → b, và một tập được suy ra bởi ab → ab. Trong thực tế, độ hỗ trợ cho bất kỳ sự mở rộng luôn luôn là kết quả của việc kết hợp khối mã hóa căn bản 2 nút (có thể giống nhau) ở bên dưới tiền tố P. Ví dụ, ε(ab → a → b) là thu được kết quả của một dãy khối cơ bản ε(ab → a) và ε(ab → b), nhưng ngược lại ε(ab → ab) được sử dụng như kết quả tập phần tử khối cơ bản ε(ab → a) và ε(ab→ b). Quá trình liệt kê dãy phổ biến được bắt đầu với gốc của cây tìm kiếm như nút gốc P =  và PRISM giả sử rằng ban đầu chúng ta đã biết mã hóa khối cơ bản cho tất cả các phần tử đơn lẻ. PRISM sau đó thực hiện đệ quy cho mỗi nút trong cây tìm kiếm, tính toán độ hỗ trợ thông qua việc kết hợp các khối cơ bản, và các khối mới được giữ lại khi chúng được sử dụng thường xuyên. Tìm kiếm thực chất là đệ quy, sự khác biệt chủ yếu là cho một nút S bất kỳ, tất cả các phần mở rộng của nó được đánh giá trước khi gọi đệ quy. Khi gọi đệ quy không tìm thấy dãy phổ biến mới thì quá trình tìm kiếm được dừng lại. Ví dụ minh họa như hình 2.23(e). - 43 - Khai phá luật dãy Nguyễn Đình Văn CHƯƠNG 3 – ĐỀ XUẤT ỨNG DỤNG KHAI PHÁ LUẬT DÃY TRONG HỆ THỐNG QUẢN LÝ KHÁCH HÀNG VÀ TÍNH HÓA ĐƠN NƯỚC 3.1 Tổng quan về hệ thống quản lý khách hàng và tính hóa đơn nước Hệ thống Quản lý khách hàng và tính hóa đơn nước là hệ thống thông tin chính của Công ty Kinh doanh Nước sạch Hà Nội (từ nay được gọi tắt là hệ thống) để đảm bảo hoạt động sản xuất kinh doanh của công ty. Hình 3.1: Mô hình triển khai hệ thống cấp nước Hà Nội Hệ thống có một kho dữ liệu lớn với quy mô gần 500 000 khách hàng và các dữ liệu được cập nhật hàng ngày. Hệ thống bao gồm các phân hệ sau:  Quản lý thông tin Khách hàng  Lập và In Hóa đơn  Thanh toán Hóa đơn và Quản lý nợ  Báo cáo thống kê - 44 - Khai phá luật dãy Nguyễn Đình Văn Mỗi phân hệ được chia thành nhiều chức năng năng đáp ứng đầy đủ các yêu cầu nghiệp vụ quản lý khách hàng và hóa đơn. 3.1.1 Phân hệ quản lý khách hàng Thông tin khách hàng sử dụng nước được quản lý trong hệ thống bao gồm từ khi nhập mới thông tin khách hàng, thay đổi thông tin (nếu có yêu cầu) trong suốt quá trình phát sinh hóa đơn đến khi có yêu cầu cắt nước (hủy mã khách hàng). Hình 3.2: Sơ đồ quy trình phát sinh khách hàng mới Khách hàng mới sau khi khai báo sẽ được hệ thống tự động sinh ra một mã số duy nhất gọi là mã khách hàng có độ dài 9 chữ số theo quy tắc: XX-XXXXXX-X. Hai chữ số đầu bao gồm: chữ số thứ nhất là mã của đơn vị trực tiếp quản lý khách hàng, chữ số thứ hai là mã của đối tượng sử dụng nước mà khách hàng thuộc vào. Sáu chữ số tiếp theo là số tăng dần trong dãy số tự nhiên bắt đầu từ 1 đến 999999. Chữ số cuối cùng là mã kiểm tra tính hợp lệ của cả dãy số mã khách hàng (mã check), mã này được sinh theo một quy tắc nhất định trong quá tình xây dựng phần mềm để đảm bảo tính duy nhất của mã khách hàng. - 45 - Khai phá luật dãy Nguyễn Đình Văn Theo quy tắc trên, chỉ cần nhìn vào thông tin mã khách hàng cũng nhận biết được khách hàng thuộc phạm vi quản lý của đơn vị nào, thuộc đối tượng sử dụng nào và khoảng thời gian được khai báo vào hệ thống. Khách hàng mới luôn phải thuộc về một trong hai đối tượng sử dụng Tư nhân hoặc Cơ quan. Mỗi đối tượng sử dụng lại có mục đích sử dụng nước (để áp giá) ngầm định khác nhau: đối tượng Tư nhân có mục đích sử dụng ngầm định là Sinh hoạt, đối tượng Cơ quan có mục đích ngầm định là Sản xuất. Khi khai báo thông tin khách hàng mới hệ thống tự động gán mục đích sử dụng nước cho khách hàng nếu mục đích sử dụng không có gì khác so với ngầm định. Thông tin khách hàng mới gồm: thông tin về nhân thân như họ tên, địa chỉ, số điện thoại, mã số thuế…Với khách hàng Tư nhân, nếu một mã khách hàng có trên một hộ sử dụng nước thì ngoài thông tin khách hàng chính sẽ có phần khai báo thông tin hộ khách hàng cùng sử dụng (họ tên, địa chỉ, số hộ khẩu). Phần lớn khách hàng phát sinh mới hiện nay đều sử dụng đồng hồ, chỉ một số rất ít khách hàng vì lý do đặc biệt nào đó sử dụng nước khoán theo tháng. Nếu khách hàng dùng đồng hồ thì thông tin khách hàng bao gồm cả thông tin về đồng hồ đang sử dụng. Một số khách hàng thay vì trả tiền lắp đồng hồ một lần cho công ty Nước sạch thì sẽ trả dần hàng tháng gọi là trả tiền thuê bao đồng hồ. Tiền thuê bao này được tính kèm trên hóa đơn tiền nước. Đối với khách hàng trả tiền thuê bao khi khai báo thông tin khách hàng mới phải khai báo thông tin này gồm số tiền phải trả mỗi tháng và số tháng cần phải trả. Khách hàng mới khi khai báo thông tin vào hệ thống được được xếp luôn vào sổ đọc và có trạng thái là Đang sử dụng nước, được đưa ngay vào quy trình ghi đọc đồng hồ phát sinh hóa đơn ở kỳ gần nhất. Có thể tìm kiếm thông tin khách hàng theo tên và địa chỉ (số nhà, đường phố). Có thể sửa đổi thông tin khách hàng gồm: họ tên, địa chỉ, mã số thuế, số tài khoản…, thông tin đồng hồ, mục đích sử dụng, danh sách hộ dùng chung đầu máy, quá trình gán sổ đọc. Có thể sửa thông tin đồng hồ cho khách hàng nếu cần. Trong quá trình ghi thu, thông tin chỉ số đồng hồ trên hệ thống có thể sai khác với thông tin chỉ số đồng hồ thực tế do nhiều nguyên nhân như nhân viên đọc chỉ số tự bịa số không đi đọc đồng hồ…, hệ thống cho phép chốt lại chỉ số đồng hồ của khách hàng, chỉ số chốt sẽ được dùng làm chỉ số cũ của kỳ ghi đọc gần nhất tiếp theo. Một số trường hợp khai báo nhầm tiền thuê bao hoặc đang trả thuê bao mà khách hàng muốn trả luôn một lần bằng hóa đơn tài chính thì hệ thống cho phép xóa thuê bao. - 46 - Khai phá luật dãy Nguyễn Đình Văn Khách hàng không còn nhu cầu sử dụng nước hoặc bị trùng mã (một khách hàng được khai báo nhiều lần vào hệ thống) hoặc thuộc khu vực bị giải tỏa… nếu có yêu cầu sẽ được cắt nước (hủy mã) trên hệ thống để loại khách hàng ra khỏi danh sách khách hàng Đang sử dụng nước và không phát sinh hóa đơn. Những khách hàng này sẽ được chuyển sang trạng thái Cắt nước và được cập nhật thông tin ngày cắt nước. Khách hàng có trạng thái là Cắt nước sẽ không tham gia vào bất cứ quy trình nghiệp vụ nào của hệ thống mà chỉ để phục vụ công tác tra cứu. 3.1.2 Phân hệ lập và in hóa đơn Hiện mỗi kỳ hoá đơn tương đương với một tháng. Trong mỗi tháng, hoá đơn được tính vào khoảng từ ngày 1 đến ngày 15 và được chia làm nhiều đợt đối với từng đối tượng khách hàng (Tư nhân, Cơ quan). Mỗi đợt hoá đơn lại được chia làm nhiều Khối hóa đơn, mỗi Khối gồm nhiều Sổ đọc, mỗi Sổ đọc gồm nhiều khách hàng. Số đọc còn được gán vào ô, cụm cấp nước phục vụ yêu cầu quản lý phân cấp. Hệ thống cho phép sắp xếp lại khách hàng trong sổ đọc: chuyển khách hàng từ sổ đọc này sang số đọc khác hoặc đảo vị trí trong cùng một sổ đọc, vị trí khách hàng trong sổ đọc được lưu để in hóa đơn theo thứ tự sổ đọc. Tại một thời điểm khách hàng chỉ thuộc vào một quyển sổ đọc. Có thể tra cứu lịch sử gán sổ đọc của khách hàng. Sổ đọc được gán cho nhân viên ghi đọc đồng hồ và nhân viên thu và có thể tra cứu lịch sử gán nhân viên này. Sổ đọc sau khi được sắp xếp lại khách hàng và gán nhân viên ghi, thu sẽ được in theo khối để nhân viên ghi chỉ số đem đi đọc đồng hồ. Trường hợp in giữa chừng bị lỗi có thể in lại tiếp tục từ đoạn bị lỗi. Thông tin chỉ số đồng hồ được nhập vào hệ thống theo sổ đọc để tính hóa đơn, sổ đọc nhập xong chỉ số được đánh dấu là Nhập đọc số trong bảng Theo dõi tiến độ công việc. Mục đích sử dụng nước của khách hàng được thay đổi hoặc bổ sung nếu có yêu cầu từ phía nhân viên ghi đọc. Các điều chỉnh tăng giảm đặc biệt như thu thêm nước tiêu thụ của đồng hồ cũ (trường hợp khách hàng thay đồng hồ giữa kỳ), trừ phần trăm nước thất thoát, trừ nhờ thu… cho khách hàng cũng được khai báo vào hệ thống trước khi tính hóa đơn Việc tính hóa đơn được thực hiện theo khối, một khối đủ điều kiện tính hóa đơn khi toàn bộ sổ đọc của một khối đó được nhập chỉ số đồng hồ đầy đủ (bước làm việc của số đọc trong bảng Theo dõi tiến độ công việc là Nhập đọc số). Tất cả khách hàng có tiêu thụ hoặc không có tiêu thụ nhưng đang phải trả thuê bao sẽ được tính hoá đơn.. Những thông tin liên quan đến việc tính hóa đơn phải được thực hiện trước khi tính hóa đơn, khi sổ đọc đã được khóa số. Trong quá trình tính hóa đơn, trường hợp nào bị - 47 - Khai phá luật dãy Nguyễn Đình Văn lỗi sẽ được thông báo sau khi tính xong cả khối, khi đó chỉ cần tính lại sổ đọc hoặc hóa đơn lỗi. Hóa đơn đã tính được in ra bảng kê (sổ soát) để nhân viên ghi đọc rà soát lại, nếu phát hiện sai sót, nhầm lẫn thì hệ thống cho phép sửa bảng kê. Việc in bảng kê có thể lựa chọn in bảng kê đầy đủ hoặc in bảng kê biến động đặc biệt hoặc in bảng kê rút gọn. Trường hợp in giữa chừng bị lỗi có thể in lại tiếp tục từ đoạn bị lỗi. Hóa đơn đã soát bảng kê được phát hành theo khối để sẵn sàng cho việc in hóa đơn. Hóa đơn được in hàng loạt theo khối hoặc đơn lẻ đối với các trường hợp sửa, bổ sung. Thao tác in hàng loạt nếu gặp lỗi bị ngừng giữa chừng có thể in tiếp từ đoạn bị ngừng. Trường hợp phần chi tiết các khoản áp giá trên hóa đơn dài quá số dòng có thể in trên hóa đơn (6 dòng) có thể in Phụ lục kèm theo hóa đơn Hệ thống cho phép quản lý số seri tài chính trên mỗi hóa đơn được in, có thể tìm kiếm, tra cứu hóa đơn dựa vào số seri này: hóa đơn sau khi in được đánh số seri tự động theo khối hoặc nhập đơn lẻ từng hóa đơn, trong một khối hoặc số đọc có thể đánh số seri từ hóa đơn này đến hóa đơn khác, ngược lại có thể hủy đánh số hóa đơn để làm lại nếu nhầm lẫn. Hóa đơn đã in nếu có sai sót được nhập danh sách yêu cầu sửa để xử lý, hóa đơn quá kỳ phát sinh nếu có yêu cầu sẽ được bổ sung. Trong một tháng làm việc có thể sửa hoặc bổ sung ngay hóa đơn tháng đó hoặc hóa đơn các tháng đã qua nếu hóa đơn cần sửa chưa được thanh toán. - 48 - Khai phá luật dãy Nguyễn Đình Văn Bắt đầu Kết thúc Điều chỉnh mục đích sử dụng nước Điều chỉnh tăng giảm đặc biệt Gán sổ đọc vào ô/ cụm cấp nước Tính hóa đơn Sắp xếp khách hàng vào sổ đọc DS ô/cụm cấp nước DS khách hàng Gán sổ đọc cho nhân viên Danh sách nhân viên Mục đích sử dụng nước Nhập đọc số In bảng kê Sửa bảng kê Phát hành hóa đơn In hóa đơn Hình 3.3: Sơ đồ quy trình lập và in hóa đơn 3.1.3 Phân hệ thanh toán hóa đơn và quản lý nợ Thông thường hóa đơn được thanh toán bằng hình thức trả tiền một lần. Do có nhiều hình thức thanh toán khác nhau như nhờ thu, chuyển khoản, séc… nên một hoá đơn có thể được chia ra trả tiền nhiều lần, một hoá đơn còn có thể được - 49 - Khai phá luật dãy Nguyễn Đình Văn trả thừa tiền để dành cho những lần thanh toán tiếp theo của chính khách hàng đó hoặc khách hàng liên quan (khách hàng mẹ-con, “mẹ” trả tiền cho “con”). Đối với những hoá đơn trả tiền nhiều lần, số tiền cùng ngày thu, nhân viên thu của mỗi lần được nhập vào hệ thống, khi hoá đơn đã được trả đủ tiền và có cuống thì hóa đơn sẽ được thanh toán. Hệ thống cho phép nhập và tính vào doanh thu cả những khoản tiền được cắt về từ ngân hàng mà chưa biết là của khách hàng nào, với những khoản như vậy, số tiền ngày nhận và nhân viên thu sẽ được nhập vào hệ thống. Số tiền này sẽ được chia vào hóa đơn khi đã xác định được nguồn gốc. Sau khi kết thúc thu một tháng, hệ thống cho phép in các báo cáo theo dõi nợ theo từng đơn vị, từng năm, từng tháng, từng khối., sổ đọc, ô, cụm. Thời điểm để in báo cáo nợ là kết thúc tháng thu và trước khi sửa hoá đơn tháng kế tiếp. Các hoá đơn nợ sẽ được theo dõi vô thời hạn cho đến khi thu được hoặc bị cắt góc (một hình thức huỷ nợ những hoá đơn không thu được tiền). 3.1.4 Phân hệ báo cáo thống kê Hệ thống báo cáo đươc phân chia tương ứng với các quy trình quản lý khách hàng, đồng hồ, hóa đơn ghi, thu Các báo cáo cũng chia ra theo thời gian lấy số liệu là hàng ngày, hàng tuần hay hàng tháng Hệ thống cung cấp những báo cáo tổng hợp số liệu và các báo cáo danh sách chi tiết để đối chiếu, kiểm tra. Có nhiều mức độ báo cáo tổng hợp như tổng hợp toàn công ty, toàn xí nghiệp, tổng hợp theo các ô, cụm, tổng hợp theo nhân viên ghi, tổng hợp theo năm, tháng hóa đơn Các báo cáo có thể lấy dữ liệu trực tiếp khi thực hiện hoặc lấy dữ liệu đã được tổng hợp từ trước (bằng chức năng Tổng hợp số liệu báo cáo). Ví dụ một trong các báo cáo quan trọng của hệ thống là báo cáo tình hình phát sinh hóa đơn. - 50 - Khai phá luật dãy Nguyễn Đình Văn Hình 3.4: Kết quả báo cáo Tình hình phát sinh hóa đơn 3.2 Phát biểu bài toán Như đã trình bày tổng quan hệ thống ở trên, bài toán đặt ra là ứng dụng khai phá luật dãy trong hệ thống quản lý khách hàng và tính hóa đơn nước, tìm ra khoảng thời gian trong năm mà trên 60% khách hàng có lượng nước tiêu thụ nhiều nhất trong năm. Thông tin hoá đơn của một khách hàng trong một kỳ (tháng) được lưu trữ trong bảng dữ liệu có cấu trúc cơ bản như sau: STT Tên trường Kiểu dữ liệu Mô tả 1 YEAR NUMBER(4) Năm hóa đơn 2 PERIOD NUMBER(2) Kỳ (tháng) hóa đơn trong năm 3 BILL_NO VARCHAR2(16) Số hóa đơn 4 CUST_ID NUMBER(10) Mã khách hàng 5 CUST_NAME VARCHAR2(90) Tên khách hàng 6 CONSUMPTION NUMBER(12) Lượng nước tiêu thụ trong kỳ 7 LAST_READING NUMBER(12) Chỉ số đồng hồ lần đọc trước 8 THIS_READING NUMBER(12) Chỉ số đồng hồ lần đọc hiện tại 9 AMOUNT NUMBER(15) Tiền nước 10 … - 51 - Khai phá luật dãy Nguyễn Đình Văn Hình 3.5: Cấu trúc bảng dữ liệu BILLS Trong bảng thông tin hóa đơn, ta chọn ra các thuộc tính bao gồm mã khách hàng, thời gian phát sinh hóa đơn, lượng nước tiêu thụ là những thông tin đặc thù, cần thiết cho quá trình khai phá luật dãy trong bài toán này. Ví dụ dữ liệu mô phỏng năm 2010 của Xí nghiệp kinh doanh nước sạnh Hoàn Kiếm như sau: Mã khách hàng Tên khách hàng Tháng Năm Lượng nước tiêu thụ (m3) 210004040 Phạm Văn Bá 1 2010 17 210004040 Phạm Văn Bá 2 2010 14 210004040 Phạm Văn Bá 3 2010 12 210004040 Phạm Văn Bá 4 2010 17 210004040 Phạm Văn Bá 5 2010 21 210004040 Phạm Văn Bá 6 2010 22 210004040 Phạm Văn Bá 7 2010 21 210004040 Phạm Văn Bá 8 2010 22 210004040 Phạm Văn Bá 9 2010 13 210004040 Phạm Văn Bá 10 2010 14 210004040 Phạm Văn Bá 11 2010 19 210004040 Phạm Văn Bá 12 2010 18 210004115 Chùa Thái Cam (Che) 1 2010 22 210004115 Chùa Thái Cam (Che) 2 2010 20 210004115 Chùa Thái Cam (Che) 3 2010 12 210004115 Chùa Thái Cam (Che) 4 2010 29 210004115 Chùa Thái Cam (Che) 5 2010 30 210004115 Chùa Thái Cam (Che) 6 2010 33 210004115 Chùa Thái Cam (Che) 7 2010 32 210004115 Chùa Thái Cam (Che) 8 2010 33 210004115 Chùa Thái Cam (Che) 9 2010 25 210004115 Chùa Thái Cam (Che) 10 2010 24 210004115 Chùa Thái Cam (Che) 11 2010 23 210004115 Chùa Thái Cam (Che) 12 2010 24 210007634 Ngô Quang Tú 1 2010 5 210007634 Ngô Quang Tú 2 2010 5 210007634 Ngô Quang Tú 3 2010 3 - 52 - Khai phá luật dãy Nguyễn Đình Văn 210007634 Ngô Quang Tú 4 2010 22 210007634 Ngô Quang Tú 5 2010 30 210007634 Ngô Quang Tú 6 2010 29 210007634 Ngô Quang Tú 7 2010 31 210007634 Ngô Quang Tú 8 2010 30 210007634 Ngô Quang Tú 9 2010 16 210007634 Ngô Quang Tú 10 2010 17 210007634 Ngô Quang Tú 11 2010 18 210007634 Ngô Quang Tú 12 2010 27 210007689 Đinh Thị Bảo 1 2010 14 210007689 Đinh Thị Bảo 2 2010 13 210007689 Đinh Thị Bảo 3 2010 21 210007689 Đinh Thị Bảo 4 2010 19 210007689 Đinh Thị Bảo 5 2010 23 210007689 Đinh Thị Bảo 6 2010 23 210007689 Đinh Thị Bảo 7 2010 26 210007689 Đinh Thị Bảo 8 2010 26 210007689 Đinh Thị Bảo 9 2010 18 210007689 Đinh Thị Bảo 10 2010 16 210007689 Đinh Thị Bảo 11 2010 22 210007689 Đinh Thị Bảo 12 2010 21 … Hình 3.6: Dữ liệu mô phỏng bảng hóa đơn BILLS 3.3 Mô hình giái quyết CSDL thông tin tiêu thụ nước trong năm của khách hàng trong hình 3.6 đã được sắp xếp theo thứ tự Mã khách hàng, Kỳ (tháng) hóa đơn, ta cần thực hiện biến đổi sang CSDL dãy. Các giá trị tính lượng nước tiêu thụ được quy đổi thành các loại <Không giảm, Tháng>, , trong đó: “Không giảm”, “Giảm” là lượng nước (m3) tháng đang xét , so với tháng ngay trước đó. “Tháng” là số hiệu các tháng trong năm: 1-12. Với mỗi khách hàng, dãy thông tin tiêu thụ nước theo chu kỳ hóa đơn được biểu diễn: . Trong đó, T thể hiện giá trị Không giảm, G thể hiện giá trị Giảm so với tháng trước đó. - 53 - Khai phá luật dãy Nguyễn Đình Văn Để thuận tiện cho việc biểu diễn thông tin và xử lý dữ liệu, ta có thể viết thu gọn dãy trên thành: Khi tính độ hỗ trợ s của một ứng viên bất kỳ (có độ tối đa là độ dài của dãy, = 12), mỗi một dãy khách hàng sẽ có 12 lần so sánh, tương ứng với các dãy như sau: ……………………….. Biến đổi về dạng rút gọn ta được 12 dãy tương ứng: ………….. . Dấu cách được sử dụng để phân biệt vị trí của tháng 1 và 12. Từ vị trí của dấu cách trong dãy, ta có thể dịch được dãy rút gọn thành dãy đầy đủ thông tin. VD: Tính độ hỗ trợ s của dãy trong C3. Với dãy khách hàng , ta lần lượt thực hiện 12 lần so sánh: , , , , …, , . Kết quả khớp một lần với dãy bắt đầu từ tháng 4 . Lúc đó, độ hỗ trợ s của dãy sẽ được tính tăng thêm 1 lần. Độ hỗ trợ của dãy s tính trong toàn bộ dữ liệu là giá trị lớn nhất của một trong 12 lần tính. Lần 1 so sánh dãy ứng viên với tất cả các dãy khách hàng có phần tử bắt đầu là tháng 1, được kết quả s1. Lần 2 so sánh dãy ứng viên với tất cả các dãy khách hàng có phần tử bắt đầu là tháng 2, được kết quả s2. Tương tự thực hiện đến s12. Độ hỗ trợ s = max(s1, s2, …, s12). Khi có kết quả khai phá luật dãy thu được trong Lk ở lần duyệt cuối cùng, căn cứ vào dãy kết quả, độ hỗ trợ để tìm khoảng thời gian thỏa mãn yêu cầu của đề bài. - 54 - Khai phá luật dãy Nguyễn Đình Văn Sử dụng thuật toán AprioriAll đã nêu trong phần 2.2.1 để giải quyết bài toán. Duyệt CSDL để tính độ hỗ trợ S cho mỗi dãy ứng viên S >= min_sup Xóa các dãy c trong Ck nếu dãy con (k-1)-subsequence của c  Lk-1 Bổ sung vào Lk Sinh tập = Null Maximal Sequences in k Lk Bắt đầu Duyệt CSDL để lấy tất cả các phần tử và độ hỗ trợ S của mỗi phần tử S >= min_sup Bổ sung vào L1 Lk-1 join Lk-1 để sinh tập ứng viên Ck Đúng Đúng Đúng Sai - 55 - Khai phá luật dãy Nguyễn Đình Văn 3.4 Thực nghiệm và đánh giá 3.4.1 Giới thiệu thực nghiệm Sử dụng 6672 bản ghi dữ liệu thực tế của Xí nghiệp kinh doanh nước sạch Hoàn Kiếm làm dữ liệu thử nghiệm. Bước 1: Từ CSDL gốc, thực hiện chuyển đổi sang CSDL dãy (Hình 4.2) Hình 4.1: CSDL gốc - 56 - Khai phá luật dãy Nguyễn Đình Văn Hình 4.2: CSDL dãy sau khi chuyển đổi Bước 2: Nhập ngưỡng min_sup, thực hiện thuật toán AprioriAll Hình 4.3: Kết quả khai phá luật dãy áp dụng AprioriAll - 57 - Khai phá luật dãy Nguyễn Đình Văn Tại C5, không có dãy nào có độ hỗ trợ thỏa mãn độ hỗ trợ tối thiểu. Vì vậy, kết quả thu được là L4. Hình 4.4: Dữ liệu kết quả 3.4.2 Kết quả thực nghiệm và nhận xét Có 65% (độ hỗ trợ của dãy ‘TTTT’) khách hàng tiêu thụ nước thỏa mãn dãy ... Kết quả quá trình thực hiện áp dụng thuật toán AprioriAll cho thấy đa số khách hàng sử dụng nước nhiều nhất trong năm là từ tháng 5 đến tháng 8. Điều này cho thấy thuật toán khai phá dãy đã nghiên cứu là khả thi và có thể ứng dụng trong thực tế. Từ đó mở ra một hướng khai phá dữ liệu để có thể trả lời các yêu cầu của ban lãnh đạo công ty về phân tích thông tin như khu vực nào có xu hướng tăng hoặc giảm tiêu thụ nước (so với cùng khoảng thời gian trong năm). Mức nước tiêu thụ thông dụng của các khách hàng theo từng nhóm đối tượng. - 58 - Khai phá luật dãy Nguyễn Đình Văn KẾT LUẬN Thông qua việc tìm hiểu nghiên cứu một số tài liệu khoa học về khai phá luật dãy, luận văn với đề tài “Một số thuật toán khai phá luật dãy và ứng dụng thử nghiệm vào hệ thống quản lý khách hàng và tính hóa đơn nước” tập trung nghiên cứu về các phương pháp khai phá luật dãy, các thuật toán khai phá luật dãy phổ biến hiện nay và ứng dụng vào Hệ thống Quản lý khách hàng và tính hóa đơn nước. Luận văn đã thực hiện được những kết quả sau đây: - Trình bày một cách tổng quan lý thuyết cơ bản về khai phá luật dãy, các bước cơ bản trong quá trình khai phá luật dãy, những ứng dụng trong thực tế. - Luận văn trình bày sơ bộ về Hệ thống Quản lý khách hàng và tính hóa đơn nước. Phân tích và chỉ ra dữ liệu dãy của bài toán trong quá trình xử lý thông tin (Chương 3, mục 3.3) để từ đó đưa ra mô hình thử nghiệm quá trình khai phá luật dãy nhằm mong muốn phát hiện một số luật dãy giúp cho ban lãnh đạo có được những thông tin cần thiết phục vụ công tác quản lý, đưa ra các chính sách kinh doanh, sản xuất hiệu quả. Lĩnh vực khai phá luật dãy trong các CSDL lớn hiện đang được ứng dụng rộng rãi và là một trong những nội dung trọng tâm của khai phá dữ liệu. Khai phá luật dãy áp dụng cho bài toán này mở ra những định hướng nghiên cứu mới. Tuy nhiên, trong khuôn khổ thời gian và kinh nghiệm có hạn, luận văn mới chỉ dừng lại ở việc nghiên cứu thuật toán và áp dụng cho một phạm vi hẹp, chưa mở rộng giải quyết được nhiều vấn đề cấp thiết của hệ thống. Trong thời gian tới, hướng mở rộng này sẽ được tiếp tục phát triển để có thể hoàn thiện hơn. - 59 - Khai phá luật dãy Nguyễn Đình Văn TÀI LIỆU THAM KHẢO [1]. Agrawal R., Srikant R. (1995), Mining sequential patterns. In Proceedings of the International Conference on Data Engineering (ICDE): 3–14, IEEE Computer Society. [2]. Srikant R., Agrawal R. (1996), Mining sequential patterns: generalizations and performance improvements. Proceedings of the International Conference on Extending Data Base Technology (EDBT), Lecture Notes in Computer Science, 1057: 3–17. [3]. Masseglia F., Teisseire M., Poncelet P. (2005), Sequential pattern mining: A survey on issues and approaches. doi=10.1.1.106.5130. [4]. Jiawei Han and Micheline Kamber, (2006), Data Mining: Concepts and Techniques 2nd ed, University of Illinois at Urbana-Champaign [5]. Zhuo Zhang, Lu Zhang, Shaochun Zhong, Jiwen Guan (2008), A New Algorithm for Mining Sequential Patterns, FSKD (2) 2008: 625-629. [6]. Floriana Esposito, Nicola Di Mauro, Teresa Maria Altomare Basile, Stefano Ferilli (2008), Multi-Dimensional Relational Sequence Mining, Fundam. Inform., 89(1): 23-43. [7]. Yu Ning, Hongbin Yang (2008), Sequence Mining for User Behavior Patterns in Mobile Commerce, CMECG '08 Proceedings of the 2008 International Conference on Management of e-Commerce and e-Government: 61-64. [8]. Chun-Sheng Wang, Anthony J.T. Lee (2009), Mining inter-sequence patterns, Expert Systems with Applications, 36 (2009): 8649–8658. [9]. D. Vasumathi, Dr. A. Govardhan, K.Venkateswara Rao (2009), Performance improvement and efficient approach for mining periodic sequential acess patterns, International Journal of Computer Science and Security (IJCSS),2009, 3 (5):358-370. [10]. Ding-Ying Chiu, Yi-Hung Wu, Arbee L. P. Chen (2009), Efficient frequent sequence mining by a dynamic strategy switching algorithm, VLDB J. , 18(1): 303-327. [11]. Karine Zeitouni (2009), From Sequence Mining to Multidimensional Sequence Mining, Mining Complex Data 2009: 133-152. [12]. Ming-Yen Lin, Sue-Chen Hsueh, Ming-Hong Chen, Hong-Yang Hsu (2009), Mining Sequential Patterns for Image Classification in Ubiquitous Multimedia Systems, Intelligent Information Hiding and Multimedia Signal Processing 2009(IIH-MSP '09): 303-306. [13]. Manish Gupta, Jiawei Han (2010), Pattern Discovery Using Sequence Data Mining: Applications and Studies, _mining.doc. [14]. M. Gholizadeh, M. M. Pedram, J. Shanbehzadeh (2010), Sequence Mining for Similar Mental Concepts, IMECS 2010: 518-521. - 60 - Khai phá luật dãy Nguyễn Đình Văn [15]. Marc Plantevit, Anne Laurent, Dominique Laurent, Maguelonne Teisseire, Yeow Wei Choong (2010), Mining multidimensional and multilevel sequential patterns, TKDD (2010), 4(1). [16]. Karam Gouda, Mosab Hassaan, Mohammed J. Zaki (2010), Prism: An effective approach for frequent sequence mining via prime-block encoding, J. Comput. Syst. Sci. 76(1): 88-102.

Các file đính kèm theo tài liệu này:

  • pdfLUẬN VĂN- MỘT SỐ THUẬT TOÁN KHAI PHÁ LUẬT DÃY VÀ ỨNG DỤNG THỬ NGHIỆM VÀO HỆ THỐNG QUẢN LÝ KHÁCH HÀNG VÀ TÍNH HÓA ĐƠN NƯỚC.pdf