Xác định mối quan hệ giữa các dịch vụ gia tăng

Một phần của tài liệu Ứng dụng một số kỹ thuật khai phá dữ liệu để phân tích dữ liệu viễn thông nhằm tăng cường chất lượng dịch vụ khách hàng (Trang 59)

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. (adsbygoogle = window.adsbygoogle || []).push({});

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 .... (adsbygoogle = window.adsbygoogle || []).push({});

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 (adsbygoogle = window.adsbygoogle || []).push({});

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; (adsbygoogle = window.adsbygoogle || []).push({});

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; (adsbygoogle = window.adsbygoogle || []).push({});

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; (adsbygoogle = window.adsbygoogle || []).push({});

--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

Một phần của tài liệu Ứng dụng một số kỹ thuật khai phá dữ liệu để phân tích dữ liệu viễn thông nhằm tăng cường chất lượng dịch vụ khách hàng (Trang 59)