Oracle Data Miner ile Birliktelik Analizi

Herkese Selam,

Bu yazıda Oracle Data Mining ile bir birliktelik  (Association Rules – Market Basket Analysis ) analizi yapacağım. Umarım farkındalık anlamında faydalı bir yazı olur.

Veri Bilimi ve Makine Öğrenmesi gibi konular günümüzde hakkında çokça söz ettiren başlıkların başında gelmekte. Öğrenmesi ve uygulaması uzmanlık gerektiren bu başlıklar için adreslenen problemleri ve yöntemleri günümüzde bir çok ürün veya yazılım ile gerçekleyebilmekteyiz. Oracle’da bu başlıklar altındaki problemlerin çözümüne ilişkin yöntem ve algoritmaları DBMS_DATA_MINING paketi ile desteklemekte.

DBMS_DATA_MINING paketi ile Custering, Classification, Regression, Anomaly Detection, Feature Extraction ve Assosication gibi modeller kurup, verimizi bu modellerden geçirip yorumlayabiliyoruz. Bu modellerden elde ettiğimiz sonuçları ise business kurgularımızda input olarak kullanabilmekteyiz.

DBMS_DATA_MINING paketi Oracle veritabanı üzerinde default kurulu olarak gelmiyor. Bu nedenle bu destekten faydalanabilmek için öncelikle bu paketi kurmak gerekiyor. Aşağıdaki linki takip ederek veritabanınıza Oracle Data Mining’ı kurabilirsiniz.

https://docs.oracle.com/cd/E11882_01/datamine.112/e16807/install_odm.htm#DMADM117

Oracle Data Mining paketi kurulumu ile beraber gelen 3 yeni dictionary tablomuz bulunmakta.

SELECT * FROM  ALL_MINING_MODELS;

SELECT * FROM ALL_MINING_MODEL_SETTINGS;

SELECT * FROM ALL_MINING_MODEL_ATTRIBUTES;

ALL_MINING_MODELS tablosunda Oracle’ın bu alt yapı ile bize sunmuş olduğu tüm modeller listesi ve modeller hakkında bilgiler bulunuyor.

ALL_MINING_MODEL_SETTINGS ve ALL_MINING_MODEL_ATTRIBUTES tablolarında ise bu modeller ile ilgili parametreler ve spesifik detaylar bulunmakta.

Şimdi bu alt yapının nasıl kullanıldığını görmek için bir örnek yapalım.

Örneği yapabilmek için bir veri setine ihtiyaç duyuyorum. Örneği uygulayacağım veri setini UCI üzerinde bulunan veri setlerinden Online Retail Data Set üzerinden yapacağım.

Öncelikle Online Retail Data Set i tanıyalım.

Online Retail veri seti 8 (3 numeric, 5 string) kolondan oluşan ve içerisinde 541909 kayıt bulunduran bir veri seti. Online Retail veri setinde bulunan her bir kolonun açıklaması aşağıda verilmiştir.

Column Name Description Data Type
InvoiceNo Invoice number. Nominal, a 6-digit integral number uniquely assigned to each transaction. If this code starts with letter ‘c’, it indicates a cancellation. String
StockCode Product (item) code. Nominal, a 5-digit integral number uniquely assigned to each distinct product. String
Description Product (item) name. Nominal. String
Quantity The quantities of each product (item) per transaction. Numeric. Numeric
InvoiceDate Invice Date and time. Numeric, the day and time when each transaction was generated. Date
UnitPrice Unit price. Numeric, Product price per unit in sterling. Numeric
CustomerID Customer number. Nominal, a 5-digit integral number uniquely assigned to each customer. Numeric
Country Country name. Nominal, the name of the country where each customer resides. String

Evet veri setimiz ile ile ilgili detaylara baktıktan sonra indirdiğimiz veri setini Oracle veritabanımıza yükleyelim.

Öncelikle indirdiğimiz veri setini (.xls) yükleyeceğimiz Oracle tablosunu yaratalım.

CREATE TABLE ONLINE_RETAIL
(
  INVOICENO    VARCHAR2(100 BYTE),
  STOCKCODE    VARCHAR2(100 BYTE),
  DESCRIPTION  VARCHAR2(200 BYTE),
  QUANTITY     NUMBER,
  INVOICEDATE  DATE,
  UNITPRICE    NUMBER,
  CUSTOMERID   NUMBER,
  COUNTRY      VARCHAR2(100 BYTE)
);

Tablomuzu yarattık, şimdi .xls olarak indirdiğimiz veri setimizi içeriye yükleyeceğiz, bunu yapmak için birden çok yöntemimiz bulunuyor. Bunlardan bazıları;

  • Oracle External Table yardımı ile yüklemek.
  • Oracle SQL Loader kullanarak yüklemek.
  • Kullandığımız editörlerden faydalanarak yüklemek.

Ben veri setini kullandığım editör yardımı ile yükleyeceğim. Editör olarak Toad kullanmaktayım. Toad ile aşağıdaki yolu takip ederek yükleme işlemini gerçekleştirebilirsiniz.

Database –> Import –> Import Table Data 

Toad ürünü ücretli olduğu için bu editörü kullanıyor olabilirsiniz. Ancak diğer editörlerin de bu özelliği mevcut, diğer editörlerle de bu işlemi kolaylıkla yapabilirsiniz. Örneğin ücretsiz olan Oracle SQL Developer ile veri yüklemesini aşağıdaki gibi yapabilirsiniz.

SELECT * FROM ONLINE_RETAIL;

Evet veri seti yükleme işlemini tamamladık.

Veriyi gözlemlediğimizde müşterilerin yaptığı alış verişlere ait detayları görmekteyiz. Her bir satırda hangi üründen alındığı,  ne kadar alındığı, bu ürünün kim tarafından aldığı, hangi tarihte aldığı, fiyatının ne kadar olduğu ve hangi ülkeden yapıldığına ait bilgiler bulunuyor. Ayrıca her bir satırda bulunan InvoiceNo bilgisi de o ürünün hangi fatura ile satıldığını göstermekte.  Veriyi detaylı incelediğimizde aynı InvoiceNo ya ait bir veya birden çok kayıt olduğunu da gözlemliyoruz. Müşterinin herhangi bir alış verişine ait satın almış olduğu tüm ürünleri InvoiceNo üzerinden görüntüleyebiliriz. Yani InvoiceNo bilgisini ilgili alış verişe ait bir sepet gibi düşünebiliriz.

Şimdi örnek bir alış verişe ait sepeti görüntüleyelim.

SELECT * FROM ONLINE_RETAIL WHERE INVOICENO = '536368';

Evet örnek bir alış veriş sepetimizi gördük. Şimdi bu veriden birliktelik analizi yaparak birlikte en çok satılan ürünleri tespit edelim.

Birliktelik analizine başlamadan önce konunun daha iyi anlaşılması için kullanılan algoritma hakkında biraz bilgi vereceğim.

DBMS_DATA_MINING paketi birliktelik analizini APRIORI algoritması ile gerçeklemekte.  Bu algoritmayı kullanmak içinse bizim bazı parametreleri tanımlamamız gerekiyor. Bu parametreler ve parametrelere ait default değerler aşağıdaki gibidir;

 Algoritma parametrelerini ve ne anlama geldiklerini daha detaylı anlayabilmek için linkteki makale incelenebilir.

Şimdi model ayarlarını okuyacağımız tabloyu oluşturalım ve içerisine algoritma parametrelerini insert edelim.

CREATE TABLE SETTINGS_ASSOCIATION_RULES
AS
   SELECT *
     FROM TABLE (DBMS_DATA_MINING.GET_DEFAULT_SETTINGS)
    WHERE SETTING_NAME LIKE 'ASSO_%';


BEGIN
   UPDATE SETTINGS_ASSOCIATION_RULES
      SET SETTING_VALUE = 3
    WHERE SETTING_NAME = DBMS_DATA_MINING.ASSO_MAX_RULE_LENGTH;
    
   UPDATE SETTINGS_ASSOCIATION_RULES
      SET SETTING_VALUE = 0.03
    WHERE SETTING_NAME = DBMS_DATA_MINING.ASSO_MIN_SUPPORT;
    
       UPDATE SETTINGS_ASSOCIATION_RULES
      SET SETTING_VALUE = 0.03
    WHERE SETTING_NAME = dbms_data_mining.asso_min_confidence;

   INSERT INTO SETTINGS_ASSOCIATION_RULES
        VALUES (DBMS_DATA_MINING.ODMS_ITEM_ID_COLUMN_NAME, 'STOCKCODE');

   COMMIT;
END;

Evet algoritma parametrelerimizi okuyacağımız tabloyu oluşturduk. Şimdi modelimizi oluşturma adımına geçebiliriz.

CREATE VIEW VW_ONLINE_RETAIL AS SELECT INVOICENO,STOCKCODE FROM ONLINE_RETAIL;

BEGIN 
   DBMS_DATA_MINING.CREATE_MODEL(
      model_name            => 'MD_ASSOC_ANLYSIS',
      mining_function       =>  DBMS_DATA_MINING.ASSOCIATION,
      data_table_name       => 'VW_ONLINE_RETAIL',
      case_id_column_name   => 'INVOICENO',
      target_column_name    =>  NULL,
      settings_table_name   => 'SETTINGS_ASSOCIATION_RULES');
END;

Modelimiz oluştu, şimdi modelimiz ile ilgili oluşan detaylara dictionary’den bakalım.

SELECT MODEL_NAME,
       ALGORITHM,
       COMMENTS,
       CREATION_DATE,
       MINING_FUNCTION,
       MODEL_SIZE
  FROM ALL_MINING_MODELS
 WHERE MODEL_NAME = 'MD_ASSOC_ANLYSIS';

SELECT SETTING_NAME, SETTING_VALUE
FROM ALL_MINING_MODEL_SETTINGS
WHERE MODEL_NAME = 'MD_ASSOC_ANLYSIS';

Şimdi analizim sonucunda oluşan çıktılara bakalım.

SELECT RULE_ID,
       B.ATTRIBUTE_SUBNAME ANTECEDENT_STOCKCODE,
       C.ATTRIBUTE_SUBNAME CONSEQUENT_STOCKCODE,
       RULE_SUPPORT,
       RULE_CONFIDENCE
  FROM TABLE (DBMS_DATA_MINING.GET_ASSOCIATION_RULES ('MD_ASSOC_ANLYSIS')) A,
       TABLE (A.ANTECEDENT) B,
       TABLE (A.CONSEQUENT) C;


Algoritmaya verdiğimiz parametreler ile oluşturduğumuz model sonucunda beraber satılma oranı yüksek olan ürünlere ulaştık ve görüntüledik.
Algoritma parametrelerinde değişiklik yapılarak daha farklı analizlerde yapmak mümkün.

Advertisements

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Oracle, Root, Uncategorized and tagged , , , , , , , , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s