Với dữ liệu gốc ban đầu đã có, chương trình phần mềm đề tài phát triển sẽ giúp phát hiện các luật kết hợp. Với những tiêu chí khác nhau sẽ có các luật kết hợp khác nhau, phần tiếp theo của luận văn sẽ đi vào phân tích cụ thể một số luật kết hợp nàỵ
Chạy chương trình trên tập dữ liệu phục vụ phát hiện luật kết hợp với việc lựa chọn độ hỗ trợ cực tiểu minSup = 0,01 (hay 1%) và độ tin cậy cực tiểu minConf = 0,8 (80%), đã nhận được 177 luật kết hợp (chi tiết xem Phụ lục, mục 5, kết quả phát hiện luật kết hợp), trong đó 5 luật có độ hỗ trợ cao nhất được trình bầy ở dưới :
Luật 1: Local Incoming VC; SMS MO Beeline to SC Local Outgoing VC to Other Mobile Với độ tin cậy và độ hỗ trợ là (98.55%, 2.01%)
Luật này chỉ ra rằng 2.01% những thuê bao sử dụng dịch vụ giá trị gia tăng gọi nội mạng, nhắn tin đa phương tiện và gọi ngoại mạng trong tổng số các giao dịch. Nếu thuê bao sử dụng dịch vụ giá trị gia tăng gọi nội mạng, nhắn tin đa phương tiện thì sẽ gọi ngoại mạng với độ tin cậy là 98.55%.
Luật 2: Local Outgoing VC to PSTN; Local Incoming VC Local Outgoing VC to Other Mobile Với độ tin cậy và độ hỗ trợ là (99.27%, 6.04%)
Luật này chỉ ra rằng 6.04% những thuê bao sử dụng dịch vụ giá trị gia tăng gọi đến số cố định, gọi nội mạng và gọi ngoại mạng trong tổng số các giao dịch. Nếu thuê bao sử dụng dịch vụ giá trị gia tăng gọi đến số cố định, gọi nội mạng thì sẽ gọi ngoại mạng với độ tin cậy là 98.55%.
Luật 3 : Local Outgoing VC to PSTN; Local SMS to Other Mobile Local Outgoing VC to Other Mobile
Với độ tin cậy và độ hỗ trợ là (99.18%, 5.24%)
Luật này chỉ ra rằng 5.24% những thuê bao sử dụng dịch vụ giá trị gia tăng gọi đến số cố định, nhắn tin ngoại mạng và gọi ngoại mạng trong tổng số các giao dịch. Nếu thuê bao sử dụng dịch vụ giá trị gia tăng gọi đến số cố định, nhắn tin ngoại mạng thì sẽ gọi
63
ngoại mạng với độ tin cậy là 99.18%. Như vậy cũng là điều dễ hiểu vì một thuê bao có thể nhắn tin ngoại mạng thì khả năng gọi đến số ngoại mạng sẽ caọ
Luật 4 : Local SMS to Other Mobile
Local Outgoing VC to Other Mobile Với độ tin cậy và độ hỗ trợ là (95.25%, 10.64%)
Luật này chỉ ra rằng 10.64% những thuê bao sử dụng dịch vụ giá trị gia nhắn tin ngoại mạng và gọi ngoại mạng trong tổng số các giao dịch. Nếu thuê bao sử dụng dịch vụ giá trị gia tăng nhắn tin ngoại mạng thì sẽ gọi ngoại mạng với độ tin cậy là 95.25%. Như vậy cũng là điều dễ hiểu vì một thuê bao có thể nhắn tin ngoại mạng thì khả năng gọi đến số ngoại mạng sẽ caọ
Luật 5: Local SMS to Other Mobile; GPRS Internet Local Outgoing VC to Other Mobile Với độ tin cậy và độ hỗ trợ là (96.94%, 2.66%)
Luật này chỉ ra rằng 2.66% những thuê bao sử dụng dịch vụ giá trị gia nhắn tin ngoại mạng, sử dụng dịch vụ GPRS và gọi ngoại mạng trong tổng số các giao dịch. Nếu thuê bao sử dụng dịch vụ giá trị gia nhắn tin ngoại mạng và sử dụng dịch vụ GPRS thì khả năng sẽ gọi ngoại mạng với độ tin cậy là 98.94%. Như vậy cũng là điều dễ hiểu vì một thuê bao có thể nhắn tin ngoại mạng và sử dụng dịch vụ CPRS để vào mạng thì khả năng gọi đến số ngoại mạng sẽ caọ
64
Kết luận
Có thể nói rằng, KPDL là một trong những kỹ thuật quan trọng, mang tính thời sự không chỉ đối với Việt Nam mà còn của cả nền CNTT thế giới hiện naỵ Sự bùng nổ thông tin, dữ liệu toàn cầu, trên mọi mặt của đời sống xã hội cùng với sự phát triển và ứng dụng ngày càng rộng rãi của công nghệ thông tin trong mọi lĩnh vực đã khiến cho nhu cầu xử lý những khối dữ liệu khổng lồ để kết xuất ra những thông tin, tri thức hữu ích cho người sử dụng một cách tự động, nhanh chóng và chính xác trở thành nhân tố quan trọng hàng đầu cho mọi thành công của các cơ quan, tổ chức và cá nhân trên thế giớị KPDL đang được áp dụng một cách rộng rãi trong nhiều lĩnh vực kinh doanh và đời sống khác nhau: marketing, tài chính, ngân hàng và bảo hiểm, khoa học, y tế, an ninh, internet… Rất nhiều tổ chức và công ty lớn trên thế giới đã áp dụng kỹ thuật KPDL vào các hoạt động sản xuất kinh doanh của mình và thu được những lợi ích to lớn.
Một trong những phương pháp quan trọng và cơ bản nhất của kỹ thuật KPDL mà đề tài đi sâu tìm hiểu là khai phá luật kết hợp. Mục tiêu của phương pháp này là phát hiện và đưa ra các mối liên hệ giữa các giá trị dữ liệu trong cơ sở dữ liệụ Mẫu đầu ra của giải thuật KPDL là luật kết hợp tìm được. Phương pháp này được sử dụng rất hiệu quả trong các lĩnh vực như maketing có chủ đích, phân tích quyết định, quản lý kinh doanh, phân tích giá thị trường …
Luận văn tìm hiểu về kỹ thuật phân tích luật kết hợp. Tìm hiểu và tìm cách áp dụng kỹ thuật này dựa trên hệ quản trị CSDL Oracle, nhằm tăng cường hiệu năng của thật toán trong việc xử lý số liệu lớn.
Tác giả đã cài đặt thử nghiệm thuật toán này sử dụng SQL nhằm phân tích dữ liệu giao dịch viễn thông. Các kết quả thực nghiệm cho thấy hệ thống đã có thể thực hiện phân tích dữ liệu khá lớn với thời gian chấp nhận được. So với một số kỹ thuật truyền thống cụ thể là WEKA và Dbminer, phương pháp này cho thấy hiệu năng được cải thiện một cách rõ rệt.
65
Tài liệu tham khảo
Tiếng Việt:
1. Hà Quang Thụy, “Bài giảng cao học môn học Khai phá web”, Trường Đại học Công nghệ, 2007.
2. Trần Văn Thiện, “Ứng dụng các kỹ thuật khai phá dữ liệu vào lĩnh vực viễn thông”. Học viện bưu chính viễn thông, 2006.
http://www.uit.edụvn/forum/index.php?act=Attach&type=post&id=22124 3. Hoàng Hải Xanh, Các kỹ thuật phân cụm trong Data Mining, Luận văn, Đại
Học Công Nghệ - Đại học Quốc Gia Hà Nộị
Tiếng Anh:
4. Agrawal R., Mannila H., Srikant R., Toivonen H.; Fast Discovery of Association Rules. Advances in Knowledge discovery and DataMining, edited by ỤM. fayyad, G.Platstsky-Shapiro, P.Smyth, and Uthurusamy, AAAI Press/The MIT Press,1996, pp.306-328.
5. Jiawei Han and Micheline Kamber (2001), Data Mining: Concepts and Techniques, Hacours Science and Technology Company, USẠ
6. Antonic M., Zaiane Ọ R.; Mining Positive and Negative Rules: An Approach for Confined Rules, Proc. Intl.Conf on Principles and Practice of Knowledge Discovery in Database, 2004, pp 27-38.
7. Cai C.H.; Mining Association Rules with Weighted Items, Thesis, Chinese University of Hongkong, 8/1998.
8. Cornelis C., Yan P., Kang X., Chen G.; Mining Positive and Negative Association Rules from Large Databases, 14244-023-6/06, 2006 IEEẸ
9. Han J., and Fu Ỵ; Discovery of Multiple Level Association Rules from Large Databases; Proc. of Inter. Conference on very large databases; Zurich, Swizerland, pp 420-431, Sep. 1995.
10. Kryszkiewicz M., Cichon K.; Support Oriented Discovery of Generalized Disjunction-Free Representation of Frequent Patterns with Negation; PAKĐ 2005, LNAI 3518, pp 672-682, 2005.
66
11. Pasquier N., Bastide Ỵ, Taouil R., and Lakhal L.; Efficient Mining of Association Rules Using Closed Itemset Latics. Information Systems, Vol 24, Nọ 1, pp. 20-46, 1999.
12. Wang W., Yang J., Yu P.S.; Efficient Mining of Weighted Association Rules, IBM Research Report RC 21692 (97734), March, 2000
13. GARY M. WEISS. Data mining in telecommunicaton. Department of computer and information science, Fordham university
14. SEYYED JAMALEĐIN PISHVAYỊ Customer Relationship Management.
Tehran University
15. Thomas S., Architectures and Optimizations for Integrating Data Mining Algorithms with Database Systems, Ph.D. dissertation, University of Florida,
Gainesville, 1998.
16. Frank Wang, Na Helian, A scanonce algorithm for large database mining implemented in sql, London Metropolitan University, 166-220 Holloway Road,
67
Phụ lục
Phụ lục A: Danh sách các thủ tục, hàm của ứng dụng Mục 1: Tìm tập mục phổ biến có độ dài k (Fk).
PROCEDURE create_f_table(new_table_num number, original_table VARCHAR2) IS query_str VARCHAR2(10000); q_select VARCHAR2(10000); q_from VARCHAR2(10000); q_where_item VARCHAR2(10000); q_where_tid VARCHAR2(10000); is_exist number := 0; BEGIN query_str := ''; q_select := ''; q_from := ''; q_where_item := ''; q_where_tid := ''; if new_table_num = 1 then
query_str := 'create table F' || new_table_num || ' as' || ' select item item1, count(*) count' || ' from ' || original_table || ' group by item having count(*) >1'; else
for i in 1 .. new_table_num loop --select ....
if trim(q_select) is null then q_select := q_select || 'item' || i; else
q_select := q_select || ', item' || i; end if;
--from ....
if trim(q_from) is null then
q_from := q_from || original_table || ' T' || i; else
q_from := q_from || ',' || original_table || ' T' || i; end if;
--where item ....
if trim(q_where_item) is null then
q_where_item := q_where_item || ' T' || i || '.item = ' || 'C' || new_table_num || '.item' || i;
else
q_where_item := q_where_item || ' and T' || i || '.item = ' || 'C' || new_table_num || '.item' || i;
end if;
--where tid ....
if i < new_table_num then if trim(q_where_tid) is null then
q_where_tid := q_where_tid || ' T' || i || '.tid = T' || to_char(i + 1) || '.tid';
else
q_where_tid := q_where_tid || ' and T' || i || '.tid = T' || to_char(i + 1) || '.tid';
end if; end if; end loop;
query_str := 'create table F' || new_table_num || ' as' || ' select ' || q_select || ', count(*) count' || ' from C' ||
68
q_where_item || ' and ' || q_where_tid || ' having count(*) >1' || ' group by ' || q_select;
end if; is_exist := 0;
SELECT check_exists('f' || new_table_num) INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table f' || new_table_num; END IF;
dbms_output.put_line(query_str); EXECUTE IMMEDIATE query_str; END create_f_table;
Mục 2: Tìm tập các ứng viên có độ dài k (Ck).
PROCEDURE create_c_table(new_table_num number) IS query_str VARCHAR2(10000); q_select VARCHAR2(10000); q_from VARCHAR2(10000); q_where_item VARCHAR2(10000); is_exist number := 0; BEGIN query_str := ''; q_select := ''; q_from := ''; q_where_item := ''; if new_table_num >= 2 then for i in 1 .. new_table_num - 1 loop --select ....
if trim(q_select) is null then
q_select := q_select || ' i1.item' || i; else
q_select := q_select || ' ,i1.item' || i; end if;
--from ....
q_from := ' f' || to_char(new_table_num - 1) || ' i1, f' || to_char(new_table_num - 1) || ' i2';
--where item ....
if i < new_table_num - 1 then if trim(q_where_item) is null then
q_where_item := q_where_item || ' i1.item' || i || ' = i2.item' || i; else
q_where_item := q_where_item || ' and i1.item' || i || ' = i2.item' || to_char(i + 1); end if; end if; end loop;
if trim(q_where_item) is not null then q_where_item := q_where_item || ' and '; end if;
is_exist := 0;
SELECT check_exists('c' || new_table_num) INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table C' || new_table_num; END IF;
query_str := 'create table C' || new_table_num || ' as' || ' select ' || q_select || ', ' || 'i2.item' ||
to_char(new_table_num - 1) || ' as item' || new_table_num || ' from ' || q_from || ' where ' ||
q_where_item || 'i1.item' || to_char(new_table_num - 1) || ' < i2.item' || to_char(new_table_num - 1);
69
EXECUTE IMMEDIATE query_str; end if;
END create_c_table;
Mục 3: Hàm fisets_table_creation
Sau đó kết hợp 3 bảng F1, …, Fk để được bảng FISETS chứa tập mục phổ biến cuối cùng
PROCEDURE create_fisets_table(table_num number) IS query_str VARCHAR2(2000);
q_select VARCHAR2(2000); is_exist number := 0; BEGIN
if table_num < 2 then
query_str := 'select item1, 2 nullm, count, 1 table_num from F' || table_num;
else
for i in 1 .. table_num loop q_select := '';
for j in 1 .. table_num loop if j <= i then
if trim(q_select) is null then q_select := 'item' || j; else
q_select := q_select || ', item' || j; end if;
else
q_select := q_select || ', 0 item' || j; end if;
end loop;
q_select := 'select ' || q_select || ', ' || to_char(i + 1) || ' nullm, count, ' || i || ' table_num from F' || i; if trim(query_str) is null then
query_str := q_select; else
query_str := query_str || ' union all ' || q_select; end if;
end loop; end if; is_exist := 0;
SELECT check_exists('fisets_temp') INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table fisets_temp'; END IF;
EXECUTE IMMEDIATE 'Create table fisets_temp as ' || query_str;
is_exist := 0;
SELECT check_exists('fisets') INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table fisets'; END IF;
EXECUTE IMMEDIATE 'Create table fisets as select fisets_temp.*, rownum rn, ' || table_num || ' as MAXTABLÉ || ' from fisets_temp';
END create_fisets_table;
Mục 4: Tìm tất cả tập con của tập mục phổ biến.
PROCEDURE create_subsets_table IS type r_fisets is REF CURSOR; c_fisets r_fisets;
is_exist number := 0; l_rn number; l_table_number number;
70
l_maxtable number; BEGIN
is_exist := 0;
SELECT check_exists('subsets') INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table subsets'; END IF;
EXECUTE IMMEDIATE 'create table subsets as select * from fisets where 1 = 2'; EXECUTE IMMEDIATE 'alter table subsets ađ trulem number';
OPEN c_fisets for 'SELECT rn, table_num, maxtable FROM fisets where table_num > 1'; loop
fetch c_fisets
into l_rn, l_table_number, l_maxtable; exit when c_fisets%notfound;
--Se lay to hop chap k cua table_num (1 < k < table_num)
for i in 1 .. l_table_number - 1 loop
Gensubs_combination(l_table_number, i, l_rn, l_maxtable); commit; end loop; END LOOP; CLOSE c_fisets; END create_subsets_table;
Procedure Gensubs_combination(n IN number, k IN number, element IN number, startIdx number, p_rownum number, p_maxtable number) IS l_header varchar2(5000); l_body varchar2(5000); l_sql varchar2(5000); l_sql_null varchar(5000); BEGIN if element - 1 = k then --printSelected(); l_header := ''; l_body := ''; l_sql_null := ''; l_sql := 'select '; for i in 1 .. n loop if nvl(selected(i), 0) = 1 then if trim(l_header) is null then
l_header := l_header || 'item' || to_char(i); else
l_header := l_header || ', item' || to_char(i); end if;
else
l_body := l_body || ', item' || to_char(i); end if;
end loop;
for j in n + 1 .. p_maxtable loop
l_sql_null := l_sql_null || ', item' || to_char(j); end loop;
l_sql := l_sql || l_header || l_body || l_sql_null ||
',nullm, count, table_num, rn, maxtable, ' || to_char(k + 1) || ' as trulem from fisets where rn=' || to_char(p_rownum); --dbms_output.put_line(l_sql);
EXECUTE IMMEDIATE 'insert into subsets ' || l_sql; else
for i in startIdx .. n loop if nvl(selected(i), 0) = 0 then
71 selected(i) := 1; Gensubs_combination(n, k, element + 1, i + 1, p_rownum, p_maxtable); selected(i) := 0; end if; end loop; end if; END Gensubs_combination;
procedure Gensubs_combination(n IN number, k IN number, p_rownum number, p_maxtable number) IS BEGIN selected.delete(); selected.extend(99);
Gensubs_combination(n, k, 1, 1, p_rownum, p_maxtable); END Gensubs_combination;
Mục 5: Tìm các luật kết hợp mạnh
PROCEDURE create_rules_table(table_num number, CountTID number) IS l_sql varchar2(5000);
l_select varchar2(5000); l_where varchar2(5000); is_exist number;
BEGIN
l_sql := 'Create table Rules as Select '; l_select := '';
l_where := '';
for i in 1 .. table_num loop if trim(l_select) is null then l_select := l_select || 's.item' || i; else
l_select := l_select || ', s.item' || i; end if;
if trim(l_where) is null then
l_where := l_where || '(s.item' || i || ' = f.item' || i || ' or s.trulem <=' || i || ')';
else
l_where := l_where || ' and (s.item' || i || ' = f.item' || i || ' or s.trulem <=' || i || ')';
end if; end loop;
l_select := l_select ||
' ,s.nullm tnullm,s.trulem, s.count, s.count*100/f.count confidence, s.count*100/' || to_char(CountTID) || ' support';
l_where := l_where || ' and s.trulem = f.nullm';
l_sql := l_sql || l_select || ' from subsets s, fisets f where ' || l_where;
--dbms_output.put_line(l_sql); is_exist := 0;
SELECT check_exists('Rules') INTO is_exist FROM DUAL; IF (is_exist = 1) THEN
EXECUTE IMMEDIATE 'drop table Rules'; END IF;
EXECUTE IMMEDIATE l_sql; END create_rules_table;
72
Mục 1: Bảng dữ liệu CDR CDR_DATA_FULL là bảng dữ liệu CDR có hàng triệu bản nghi, và các thuộc tính chính như bên dưới :
Hình 2.1: Cấu trúc các thuộc tính của CDR
Mục 2: ACCOUNT_SUBSCRIBER là bảng dữ liệu chứa thông tin tài khoản khách hàng như gói dịch vụ hiện tại khách hàng đang dùng và được kích hoạt vào khi nào, các thuộc tính chính như bên dưới :
STT Tên Cột Kiểu Dữ Liệu Diễn giải 1 ACCOUNT_NO NUMBER(10) Mã tài khoản 2 MSISDN VARCHAR2(270) Số thuê bao
3 OFFER_ID NUMBER(10) Mã gói dịch vụ đăng ký thuê bao 4 DISPLAY_VALUE VARCHAR2(2160) Tên gói dịch vụ đăng ký thuê bao 5 SIM_TYPE VARCHAR2(180)
6 DATE_ENTER_ACTIVE DATE Ngày kích hoạt