Kategori arşivi: veri analizi

Rowtype kullanımı


Merhabalar, bu yazımda oracle rowtype kullanımı üzerine bilgilerimizi tazelemek istedim. Rowtype bize fonksiyon ve prosedürlerle çok esneklik sağlayan bir referans tip alma yöntemidir. Her hangi bir fonkisyon yada prosedür bir tablo üzerinde kolon veri tipini tekrar tanımlamak yerine o tablonun kolonunun veri tipini referans göstererek de yapabiliriz. Örneğin herhangi bir fonksiyon yada prosedürde muşteri nosu isimli bir değişken tanımlaması yapmak istiyorsak,

mus_no musteri.musteri_no%rowtype;

Yukarıdaki şekilde tanımlayarak kullanacağımız tablodaki tipi referans alırız. Bu durumda referans tablo olan musteri tablosunda musteri_no kolonun tipi değişkene atanacaktır.  Bu şekilde kullanıma gitmemizin nedeni ise üzerinde çalışılacak tablonun kolonun güncellenmesi sonrasında, güncelenen kolonu kullanan fonksiyon ve prosedürler de güncellemeden kurtulmaktadır. Referans verilen fonksiyon ve prosedürlerin içinde declare ile tanımlanmış değişkenler tipi referansından alacağı için sorun olmayacaktır.

Reklamlar

ORACLE ve R


Bu yazımda, açık kaynak kodlu olarak geliştirilen istatistiksel hesaplama dili R ile oracle’a bağlanıp R’ın RODM paketini kullanıp neler yapabildiklerimi kısaca anlatacağım. Öncelikle R açıp RODM paketini yükleyelim.

> library(RODM)

 Yukarıdaki komut R’da RODBC paketi gibi veritabanı ile R bağlantısını (R ile veritabanı konuşturmak için)  yapmak için gerekli olan komutları hafızaya yükler. Paketi yükledikten sonra şimdi R’da veritabanı bağlantısı yapalım.

DB <- RODM_open_dbms_connection(dsn="orcl", uid="ahmet", pwd="sdf")

 Yukarıda DB isimli bir nesne oluşturduk. Bu nesne “ahmet” kullanıcısı bağlantı yaptığımız veritabanı bağlantısını tutmaktadır. Bu paketi kullanmak bize, R’da yaptığımız analizler sonucu elde ettiğimiz R verilerini ( ki burada R verileri nesne,data frame, liste, vektör, ..vs olarak tutmaktadır.) Oracle’nın anlayacağı bir şekilde çevirim yapılmasını sağlamaktadır. Şuana kadar R’da Oracle bağlantısı yaptık, şimdi birkaç küçük analizle veri madenciliğine giriş yapalım. Test verileri üzerinden gidelim. Elimde hangi verilerin olduğu görmek için R konsolunda aşağıdaki komutu girelim.

> data()

Ekranda küçük bir pencere açılacak ve bize hali hazırda olan verileri ve tanımlamalarını verecektir. Örnek verimiz Orange olsun. R Konsoluna şu komutu girelim

> head(Orange)

Yukarıdaki komut veri setinin 5-6 satır verisini getirecektir. Böylece veriseti hakkında bilgimiz olacaktır.

> orange_data=Orange

 Yukarıda komut ile orange nesnesinin verilerini oracle_data adında yeni bir nesneye atadık. Şimdi bu verimizi oracle’ın içerisine alalım. Yani veritabanımızda bir tabloya alalım. Bunun için;

> RODM_create_dbms_table(DB, "orange_data")

Yukarıdaki komut arka planda ODM algoritmalarını ve işlemleri yaparak orange_data nesnesindeki verileri Oracle’da ahmet şemasının altında orange_data isimli bir tabloya aktarır. Burada dikkat edilmesi gereken şey şudur; bir çok R kullanıcı analizlerini yaparken nesnelerinde . kullanarak isimlendirme yapmayı tercih eder. Eğer . içeren bir nesnedeki veriyi Oracle’a aktarmak istersek bize hata verir. Nedeni ise nesne isimindeki noktadan önce gelen kısmı şema ismi olarak algılar ve kullanıcı bulunamadı hatası verir. Böyle bir hata almamak için nesne isimlerine dikkat edilmelidir. Ayrıca R’da kolon isimleri verirken 30 karakteri geçmemeye ve (.) nokta kullanılmaktan kaçınılmalıdır.

Şimdi kolon isimlerini alalım

> sqlColumns(DB, 'orange_data')$COLUMN_NAME

 Yukarıdaki komut ile orange_data tablosundaki kolonları isimlerini aldık. Bazı algoritmalar Case ID bilgisine ihtiyaç duymaktadır. Şimdi bunu nasıl yapacağımızı görelim.

> numrows <- length(orange_data[,1])
> orange_data.rows <- length(orange_data[,1])
> orange_data.id <- matrix(seq(1, orange_data.rows)
,nrow=orange_data.rows, ncol=1, dimnames= list(NULL, c("CASE_ID")))
> orange_data <- cbind(orange_data.id, orange_data)

Yukarıda işlemler aynı zamanda veritabanındaki veri kaynağımız ile eş zamanlı olarak yapılması için veritabanına tekrar yazılmalıdır.. R’da işlemleri bittikten sonra verinin nihai halini veritabanına gönderelim

> RODM_create_dbms_table(DB, "orange_data")

Yukardaki işlemler yapılmış mı kontrol edelim.

> sqlColumns(DB, 'orange_data')$COLUMN_NAME

İşlemlerimizi veritabanında son hali ile tutulmaktadır.

Aşağıdaki listede RODM paketinin, veri madenciliğinde kullanılan algoritmalara karşılık gelen fonksiyonlarını verdim.

  • RODM_create_ai_model
  • RODM_create_assoc_model
  • RODM_create_dt_model
  • RODM_create_glm_model
  • RODM_create_kmeans_model
  • RODM_create_nb_model
  • RODM_create_nmf_model
  • RODM_create_oc_model
  • RODM_create_svm_model

Bu fonksiyonların anlatımlarını uygulamlı olarak bir sonraki yazımda anlatacağım.

Veri Madenciliğinde İstatistiksel Uygulamalar


Devasa büyüklükte veriler ile çalışırırken elimizdeki anlamlı sonuçlar çıkartmak bu verilerden faydalanmanın en iyi yoludur. Elde ettiğimiz sonuçların anlamlı ve yararlı olması için uygulunan tekniklerin bilimsel yöntemlere dayanması şarttır. Aksi takdirde sezgisel olarak bulunan durumların tutarlı olması beklenemez ve bu gibi durumlarda elde edilen sonuçlara güvenilemez.   Veri yığınlarından anlamlı veriler çıkartmak için yapacağımız işlem veri madenciliğidir. Veri madenciliği işlemi, elimizdeki veri kaynaklarına dayanarak daha önce keşfedilmemiş bilgileri ortaya çıkartma, bunlara göre karar verme ve senaryo planlarını  oluşturmaktır. Bunun için ise  istatistiksel yöntemleri uygularız. Veri madenciliğinde en çok uygulanan istatistiksel yöntemler şunlardır;

1) BAĞLANTI : İki durum arasında anlamlı ilişkidir. İstatistik literatüründe korelasyonu yüksek iki yada ikiden fazla değişkenleri bulma işidir. Örneğin bir süper markette süt ürünlerinin yanına peynir ürünlerinin konması satışıları artıyorsa, bu iki değişken olan süt satışları ve peynir satışları arasında yüksek korelasyon olduğunu göstermektedir. Öncelikle süper marketinin satış verileri incelir. Satış verileri içinde korelasyonu yüksek değişkenler bulunur. Bu değişkenlerin ait olduğu ürünler süper markette aynı veya yakın reyonlara yerleştirilir ki herhangi birini alan bir müşteri diğer ürünü de satın alması sağlanır. Düzenleme sonrasında süper marketin satış verileri incelinir ve aradaki artışlar gözlemlenir.

2) SINIFLANDIRMA : Sınıflandırma ile ürünleri satın alan ideal müşterilere ulaşılabilir. Bunun için istatistik literatüründe kümeleme analizi, diskriminant analizi, faktör analizi, temel bileşen analizi,  ..vs gibi sınıflanma ve kümüleme yapan analizler kullanılabilir.  Örnek olarak gençlerin küçük araba aldıkları, orta ileri yaştaki bireylerin ise daha büyük ve lüks arabalar aldıklarını gözlemlemiş olalım. Böyle bir durumda bir banka yada otomobil satıcısı olarak müşterilerimizi yaş ve gelirlerine göre sınıflandırma yaparak müşterilerimizi sekmentasyon yaparız.  Elimizde olan müşteri segmantasyonları için  kampanyalar düzenlenerek araba satışlarını yada otomobil kredilerinin kullanımlarının artırırız.

3) REGRESYON : Elimizde veri kaynakları ile örüntü bir değer elde etmek için kullanılır. Örneğin banka müşterilerinin kredi skorlarını tahmin etme durumu verilibilir. Müşterilerin banka ile olan geçmiş dönem işlemleri göz önüne alınarak her bir müşteri için skorlama yada puanlama tablosu çıkartılabilir. Bu gibi durumda regresyon modellerini kullanmak uygun bir çözüm olacaktır.

4) ZAMAN SERİLERİ :  Elimizdeki verileri kullanarak gelecek öngöründe bulunma işlemidir. Bunun için elimizdeki verinin geçmiş zaman değerleri zaman serileri analiz yöntemleri kullanarak analiz edilir. Verinin karakteristik özellikleri çıkartılır. Gelecek dönemdeki değerleri tahmin edilir ve olası senaryolar simüle edilir. Böylece müşterinin gelecekte nasıl davranacağı veren sağlam bir ön bilgimiz olur.

Lojistik Regresyon


Diskriminant analizi ve çapraz tablolara alternatif olarak en çok kullanılan yöntemlerden birisi olan lojistik regresyon, normal dağılım ve ortak kovaryans varsayımları karşılanmadığı zamanlarda kullanılmaktadır. Lojistik regresyonun bu varsayımları karşılamamasında ki neden analizin yapılacağı veri setindendir. Yani bağımlı değişken sıralayıcı ve sınıflayıcı ölçekte olduğundan dolayıdır, yalnız bağımsız değişkenler sürekli yada kategorik ölçekte de olabilirler. Lojistik regresyon modeline sınırlayıcı yada kategorik ölçekte bir değişken eklenmek istendiğinde değişkenlerin üzerinde bir takım dönüşümler yapılmalıdır. Bu dönüşümler bağımlı değişken ile bağımsız değişken arasında doğrusal bir ilişkiyi verecek bir şekilde link fonksiyon, lojit veya probit dönüşümlerinden birisi olabilir. Örneğin bağımsız değişkenlerde 1 birimlik artışın bu dönüşümler sonucunda elde edilin sonuç ile modeldeki katsayısı çarpımı kadar bağımsız değişkende bir değişliğe neden olduğunu söyleyebiliriz. Şunu da belirtmek gerekir ki; modelde değişkenler üzerinde dönüşümler olduğundan dolayı değişkenlerin katsayılarının tahmininde en çok olabilirlik yöntemi kullanılır.

Elde edilen modelin bir anlam ifade etmesi için modeldeki bağımsız değişkenlerin katsayılarının anlamlılıklarının sınanması gerekmektedir. Sınamalar, en iyi modelin kurulmasını en az değişken ile yapılmasında yön göstericidirler.     Lojistik regresyon modeli, klasik regresyon modeli gibi olmadığı için katsayıların sınanmasında olabilirlik oran testi (likelihood ratio test), Score testi ve Wald testleri kullanılır. Burada asıl sorun; modelin bağımlı değişken hakkında incelenecek değişkenin, incelenen değişken olmayan modelden daha fazla bilgi içerip içermediğidir.

Lojistik regresyon modelindeki katsayılar yorumlanır iken odds (farklılıklardan) ve odds oranı (farklılıklar oranı) dan yararlanılır. Odds lar lojit dönüşümünün doğal logaritmalarının alınmış halidir. Odds oranı ise x=1 için hesaplanan odds un x=0 için hesaplanan odd a oranıdır. Farklılıklar oranının doğal logaritması ise log odds oranını verir. Modele dahil edilecek değişkenlere ise olabilirlik oranlarına ve Wald istatistikleri yorumlanarak karar verilir.

Lojistik regresyona getirilen eleştirilerden birisi de değişken sayısı artıkça model kurmanın zorlaşmasıdır. Yani değişken sayısı artıkça yapılacak işlem artmaktadır. Bu tür işlemleri yapmak ise zannedildiği kadar kolay değildir. Ayrıca değişken sayılarının artması tahmin edilen standart hataların da yüksek çıkmasına neden olmaktadır. Bu da veri setinin ana kütlesine bağımlılığı artırmaktadır.

İlişkisel Veritabanı Yönetim Sistemleri


Günümüzde kullanımı en yaygın veritabanı ilişkisel veritabanı ve en yaygın veri tabanı yönetim sistemleri de ilişkisel veritabanı yönetim sistemleridir. İlişkisel veritabanının en önemli yanı, oluşturulan tabloların birbiri ile ilişkilerinin olmasıdır. Bu nedenle veritabanı yönetim sistemlerine “ilişkisel” denilmektedir.

En basit anlamda bir veritabanından bahsetmek için bir veritabanında en az iki tablo olmalıdır. Ve oluşturulan veritabanı ilişkisel bir veritabanı ise, bu iki tablo birbiri ile bir şekilde ilişkilendirilebilir olması gerektedir. Eğer veritabanımız ilişkisel veri ilişkisel veritabanı mantığı üzerine bina edilecekse, temel olarak tablolar aşağıdaki 3 temel işlevi yerine getirmek zorundadır.

  1. Seçme: Herhangi bir tabloda yer alan bilgilerin tümü yada istenen kriterlere göre sıralı bir şekilde gösterilebilmelidir.
  2. İzdüşürme: Herhangi bir tabloda yer alan bilgilerin belli kolonları görüntülenebilmelidir.
  3. Birleştirme: İki yada fazla tabloda yer alan bilgiler tek bir tablo gibi sunulabilmelidir.

Bir veritabanı yönetim sistemi yukarıdaki 3 temel işlevi yerine getirmek zorundadır. Bu 3 kriterlerden her biri tek tek kullanılabildiği gibi, 3 bir arada kullanılabilir veya ikili kombinasyonlar halinde de kullanılabilir. Burada önemli olan veritabanın bir veritabanı yönetim sistemi tarafından SQL ile yönetilebilir olmasıdır. Böylece kullanıcı veritabanın bilgisayar ortamında fiziksel olarak dosyalama işlemleri bilme zorunluluğundan kurtulmuş olacaktır. Tüm bu süreç SQL ile izole edilmiş olur.

Faktör Analizinin Uygunluğunun Değerlendirilmesi


Faktör analizi yapmadan önce verisetinin korelasyon matrisinde korelasyonları %30’dan küçğk olan değişkenler verisetinden çıkarılmalıdır. Böylece veriseti faktör analizine daha uygun hale gelecektir. bundan sonraki aşamada ise kısmı korelasyon katsayılarına bakılmalıdır. Eğer kısmı korelasyon katsayıları yüksekse, veriseti iyi temsil edilemeyecektir. bu durumda da faktör analizi uygulanmaması gerekmektedir.

Faktör analizinin uygunun araştırması için bir test yaklaşımıda literatürde vardır. bu yaklaşımda korelasyon matrisinin birim matrise eşit olup olmadığı sınanır. Bu yaklaşım, Bartlett küresellik testidir.bu test, verilerin çok değişkenli normal dağılan anakütleden geldiği ve örneklem büyüklüğünün 150’den büyük olduğu örneklerde geçerlidir. Test sonucunda anlamlılık % 5’den (ki % 5 araştırmacının kendi kararına bağlıdır.) büyük çıkarsa faktör analizi uygulanmamalıdır.

Faktör analizinin uygunu değerlendirmek için bir başka test de KMO (Kaiser-Meyer-Olkin) testidir. Aslında KMO bir test değildir. Bir ölçüttür. Hesaplamalar sonucunda KMO değeri 0 ile 1 arasında değişen değerler almaktadır. Bu oran bire ne kadar yaklaşırsa veriseti faktör analizine o kadar uygundur. KMO ölçüsü istatistiksel bir test olmadığından bu oran için bir takım kısıtlamalar getirilmiştir. KMO değeri, örnek birim sayısı, ortalama korelasyonlar, değişeken sayısı artıkça ve faktör sayısı azaldıkça KMO değeri bire yaklaşır. Genelde KMO değeri için 0.80’den büyük veya bazı cevrelerce (yazılımcılar) de 0.60’dan büyük olması yeterli görülmüştür.

Faktör Analizi & Kümeleme Analizi


Bir çok değişkene dayalı kümeleme analizini görselleştirmek ve yorumlamak zordur. Bunun için işlemi kolaylaştırmak adına faktör analizine dayalı bir methot sunulabilir. Faktör analizi bize orjinal değişkenlerdeki bilginin büyük bir kısmı çevirilmiş olan küçük değişkenler kümesi verecektir. Böylelikle, bu yöntem sadece görselleştirmeyi basitleştirmek ve orjinal değişkenlerden elde edilen kümeleride anlaşır hale getirmekle kalmayacak aynı zamanda bu kümelerden bir sonraki analizler için değişkenleri seçmeye de yardımcı olacaktır.

Box- Jenkins İstatistiği


Pratikte, AR ve Ma sürecinideki p ve q ların kaç olduğunu bilmemekteyiz. Box- Jenkings istatistiği bize AR ve MA süreçlerindeki p ve q sayılarını belirlememizi sağlar. Daha sonra AR(p) ve Ma(q) süreçlerinden oluşan modelimizde parametreleri tahmin  ederiz ve modelin atıklarının white noise ( beyaz gürültü) sağlayıp sağlamadığını kontrol ederiz.