Yazan : Şadi Evren ŞEKER

Bu yazının amacı, bilgisayar bilimlerinde özellikle veri madenciliği (data mining) konularında eksik verilerle karşılaşılması halinde bir çözüm olarak bu eksik verilerin töhmet edilmesi (yerine uygun verilerin üretilmesi, imputation) yöntemini açıklamaktır.

Töhmet, sözlükte olmayan birşeyin yüklenmesi anlamındadır. Örneğin olmayan bir suçun birisine yüklenmesine töhmet altında bırakmak denilebilir. Bu anlamda vir veri kümesi (data set) üzerinde çalışılırken bazı sebeplerden dolayı verilerin eksik olması halinde bu verilerin uygun başka sayılarla tamamlanması sağlanabilir.

Genelde verinin hatalı okunması, veri kaynağında yaşanan bozulma gibi sorunlar veya bazı verilere erişim zorluğu eksik verilere sebep olabilmektedir.

Bu verilerin eksik olması durumu genelde sorunlara sebep olur. Örneğin çoğu hazır istatistik paketleri (SAS, SPSS, Weka veya r-project gibi) bu tip durumlarda sorunlar yaşamaktadır. Gerçi bu paketlerin ücretli ve gelişmiş olanlarının çoğunda (SAS veya SPSS gibi) töhmet modülleri (imputation) bulunmakta ve bu işi otomatik olarak yapabilmektedirler ancak bu yazı kapsamında gerek bu modüllerin nasıl çalıştığını anlamaya çalışacağız gerekse bu işlemi elle yapmak istediğimizde nasıl müdahale etmemiz gerektiğini açıklamaya çalışacağız.

Töhmet yöntemleri duruma ve beklentilerimize göre çeşitlilik arz eder ve halen üzerinde çalışılmaktadır. Bunlardan çok bilinen bazılarını saymamız gerekirse:

  • Sıcak deste (hot deck)

  • Soğuk deste (cold deck)

  • Liste boyunca silme (listwise deletion)

  • Eşlerin silinmesi (pairwise deletion)

  • Ortalama töhmet (mean imputation)

  • İlkelleme töhmedi (regression imputation)

  • Son gözlemin taşınması (last observation carried forward)

  • Olasılıksal töhmet (stochastic imputation)

  • Çoklu Töhmet (Multiple imputation)

Yukarıdaki bu kavramları kısaca açıklamaya çalışalım. Öncelikle sıcak deste ve soğuk deste (hot deck , cold deck) algoritmaları için ne yazık ki tam bir mutabakat olmadığını ve çeşitli versiyonları bulunduğunu belirtmek isterim ( bkz. http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3130338/) Bu yüzden bu iki algoritmayı atlayacağım ancak hot deck (sıcak deste) için kısaca rast gele bir verinin seçilerek eksik olan veri yerine töhmet edildiğini söylememiz yeterli olacaktır. Bu rast gele seçim ise oldukça tartışmalı bir konu. ve diğer metotları kısaca açıklayacağım.

Liste boyunca silme (listwise deletion)

Örneğin bir veri tabanından okunan tabloda bazı değerlerin eksik olduğunu düşünelim:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
—- Muhasebe
Veli Demir 43 Yönetim

Yukarıdaki tabloda sondan ikinci ve üçüncü satırlarda kayıp bilgi bulunmaktadır. Bu durumda, örneğin çalışanların yaş ortalamalarının alınması istendiğinde hata ile karşılaşılacaktır.

Liste boyunca silme yaklaşımında (listwise deletion) bu kayıp veri içeren satırların tamamı tablodan temizlenir ve tablo aşağıdaki hale getirilerek işlem sonuçlandırılır.

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Veli Demir 43 Yönetim

Artık bu tablo üzerinde istenilen işlemler yapılabilir.

Eşlerin silinmesi (Pairwise deletion)

Bu yöntemde bütün tablonun temizlenmesi yerine gerekli olan işlem sırasındaki eksik veriler temizlenir. Örneğin bir önceki tabloya geri dönecek olursak:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
—- Muhasebe
Veli Demir 43 Yönetim

Ve bu tablo üzerinde çalışanların yaşının ortalaması istenmişti. Bu durumda, bu soruya özel olarak sadece sondan ikinci satırın silinmesi yeterlidir:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
Veli Demir 43 Yönetim

Artık istenen işlem yani yaşların ortalaması çalıştırılabilir.

Bu yöntemde farklı bir işlem yapılmak istendiğinde, örneğin çalışanların kısımlara göre dağılım grafiği istendiğinde ise işlem yapacağımız tablo aşağıdaki şekilde olacaktır:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
—- Muhasebe
Veli Demir 43 Yönetim

Görüldüğü üzere sadece o işlem için problem çıkaran satır silinmiş diğer satırlar farklı kolonlarında eksik veri bulunmasına rağmen saklanmıştır.

Bu yöntemin menfi yanı, her işlem için farklı veri kümesi üretiliyor olması ve hatta her işlem sonucunda farklı sayıda veri ele alınıyor olmasıdır. İşlemler sonucunda verilerin karşılaştırılma güçlüğü ortaya çıkabilir.

Ortalama Töhmet (Mean imputation)

Bu yöntemde, bir eksik verinin töhmeti sırasında ortalama değer hesaplanır. Örneğin yine aynı tablo üzerinden töhmet yaklaşımını izah edelim:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
—- Muhasebe
Veli Demir 43 Yönetim

Şayet bu tablodaki ortalama yaş için eksik olan satırların töhmeti söz konusuysa bu durumda satırların silinmesi yerine veri üretilir. Örneğimizdeki yaşların ortalaması:

olarak bulunur. Yaşın ondalıklı sayı olması mümkün olmadığı için 32 olarak yuvarlanarak kabul edilebilir ve veri kümemiz aşağıdaki şeklini alır:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
—- 32 Muhasebe
Veli Demir 43 Yönetim

Bu işlemin ardından artık istenen veri madenciliği yöntemleri uygulanabilir.

Bu yöntemin dez avantajı ise, çok büyük veriler de uygulanma zorluğudur (örneğin güncel problemlerin artık haritalama-indirgeme (map reduce) ortamlarında işlendiği düşünülürse, böyle bir ortamda kullanılamaz). Ayrıca işlenmesi için bütün verinin hafızaya yüklenip hesaplama yapılması zorluğu da bulunmaktadır.

Son olarak veri eksikliğinin çok fazla olduğu durumlarda üretilen verilerin sağlığı problem çıkarmaktadır.

İlkelleme Töhmeti (Regression Imputation):

Bu yöntemde, mevcut veriler üzerinden fonksiyonel bir ilkelleme yapılır (örneğin doğrusal ilkelleme (linear regression) ) ve ardından ilkellenen fonksiyondan üretim yapılarak eksik veri doldurulur.

Son Gözlemin Taşınması (Last Observation Carried Forward):

Bu yöntemde, veri kümesindeki eksik veriler, kendilerinden bir önceki veri kopyalanmak marifetiyle töhmet edilirler. Örneğimize geri dönecek olursak:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 ——
—- Muhasebe
Veli Demir 43 Yönetim

Veri kümesindeki verilerin son gözlemin taşınması yöntemiyle töhmet edilmiş hali aşağıdaki şekildedir:

İsim Yaş Kısım
Şadi Evren ŞEKER 33 Bilgisayar
Ali Demir 23 Muhasebe
Cem Yıldız 26 Bilgisayar
Ahmet Yılmaz 33 Bilgisayar
Ahmet Yılmaz 33 Muhasebe
Veli Demir 43 Yönetim

Artık bu veri kümesi üzerinde veri madenciliği yöntemleri uygulanabilir.

Bu yöntemin dez avantajı ise bazı marjinal noktaların çoğaltılması olarak görülebilir. Örneğin Yaş sütununda marjinal olarak 70 yaşında bir çalışan varsa bu kişinin kopyalanması, veri madenciliği sonuçlarını menfi etkileyebilir.

Son iki yöntemimiz olan istatistiksel töhmet (stochastic imputation) ve çoklu töhmet (multiple imputation) için şunları söylememiz yeterli olacaktır.

Öncelikle mevcut veri kümesi üzerinden bir istatistiksel dağılım elde edilir (örneğin ilkelleme (regression) burada kullanılabilir) ardından bu dağılım sayesinde eksik verileri dolduran bir bağlantı kullanılır. Çoklu töhmette ise bu işlem birden fazla kere yapılarak her bir veri kümesi daha sonra kullanılmak üzere saklanır. Ayrıca her veri kümesinin hata miktarı hesaplanır. Ardından bu veri kümelerinin ortalama değerleri alınarak nihai veri kümesi elde edilir. Buradaki tek ayrınta standart hatanın (standard error) hesaplanması sırasında iki veri kümesinin birleştirilmesi için iki standart hata miktarı toplanıp karekökleri alınır.

Kısacası çoklu töhmet, daha iyi sonuç elde etmek için istatistiksel töhmetin birden fazla kere çalıştırılması olarak düşünülebilir.

 

Yorumlar

  1. beyza

    merhaba; öncelikle weka ile yayınlanmış gördüğüm en ayrıntılı site. bilgileriniz için teşekkür ederim.
    benim sorunum elimde laboratuvar verileri var. bu verilerde her bir hasta için değişin tetkik değerleri (mcv, mchc,rbw…. gibi)bulunuyor. örneğin bir hastada bulunan tetkik değeri diğer hastada olmayabilir. dolayısıyla eksik değerler ortaya çıkıyor. elle veri giremem ortalama değer veremem çünkü sağlıkta 0, ‘den sonraki değer bile hayati önem taşıyabilir. ve değerlerin çoğu virgüllü (0,05 yada 5,5 gibi). bir sorunda 105 tane özellik (attribute) var. hangileri önemli belki göz ardı edeceğim değer hayati öneme sahip bilemiyorum uzman doktor madem gizli örüntü arıyorsun tüm parametreleri kullanmalısın dedi. ayrıca wekada bazı algoritmalar boş değerlerle çalışmıyor. nereden nasıl başlamalıyım yardımcı olursanız çok sevinirim.

    1. Şadi Evren ŞEKER

      Merhaba Beyza Hanım,

      Şayet kirli verileri tamamen sistem dışı bırakmak istiyorsanız (güvenmiyorsanız) en güvenilir imputation yöntemi liste boyunca silme olacaktır.

      Weka veya diğer makine öğrenme algoritmaları kullanan programlar sizin verilerinizin hassasiyet derecesinin (virgüllü sayılar için virgülden sonraki hanelerin tamamını) dikkate alacak şekilde tasarlanır bu konuda bir sorun yaşamazsınız (siz aksini özel olarak belirtip yuvarlama yapmasını istemedikçe)

      Bazı özellikler diğer özelliklerden çıkarılabilir. Bu yüzden bazı makine öğrenme algoritmaları kullanarak baskın özellikler dışındaki özelliklerin elenmesi mümkündür. Ancak bunu da sizin özel olarak yapmanız gerekir. Normalde probleminiz için seçeceğiniz çoğu algoritma bu şekilde bir uygulama yapmaz.

      Boş değer ile neyi kast ettiğinizi anlayamadım. Ancak sizin durumunuzda sanıyorum doğru yaklaşım, konu ile uğraşmış birilerini bulup, verinizi gösterip, probleminizi anlatarak sizin durumunuz için en uygun algoritmaların ve bu algoritmaların kullanım yöntemlerinin ne olacağı hakkında bir görüş almanız olacaktır. Kısacası mükemmel bir algoritma yok ve hemen hepsinin iyi çalıştığı farklı durumlar var. Ayrıca probleminiz el veriyorsa birden fazla yöntemi kullanıp başarılarını da karşılaştırabilirsiniz.

      Başarılar

  2. beyza

    hocam merhaba;
    veriler 12.5 şeklinde ondalıklı dolayısıyla wekada tipini real olarak tanımladım fakat sutunlarda >15 veya 2400,23.8,,28.6,32.8,87.2,0.42,6.2,7,4.69,68.7,,,0.228,15.3,13.2,326,,,,,5.39,11.5,37.7,,,,,,,,,,,,,,7,
    12,Kadin,,,,,,10,,,,,23,0.04,0.5,,,,,,,,,,,,,0.18,2.5,,,,,,,,,,,,37.3,,13.5,,,,,,,0.36,,,,,2.3,32.5,,29.2,36.2,80.6,0.66,9.4,7.4,3.89,55.1,,,0.233,15.9,17,315,,,,,4.63,10.8,33,,,,,,,,,,,,,,7.07,
    60,Kadin,,,,,,13,,,,,15,0.01,0.1,,,,,,,,,,,84,362,0.14,1.9,,,,,,,,,,,104,38.2,81,12.3,,,,,<295,,0.64,,191,,,1.93,26.8,,25.1,32.2,78,0.48,6.6,8,4.64,64.6,,,0.284,15.7,21.8,355,,,,,4.9,13.3,39.7,,,,,,,,103,,40.8,,243,20.6,7.2,
    69,Erkek,,,2.8,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,0.73,,,,,,,,,,,,,,,,,,,,,,4.07,,,,,,,,,,133,,,,,,39.1,,,,,
    72,Kadin,,,,,,13,,,,,15,0.01,0.1,,,0.18,,,,,79,28,,,,0.09,1.3,,,,,,,,,,,198,49.9,,16.4,0.48,,9.1,100.8,,,0.64,,,,,1.08,14.9,,29.2,32.9,88.8,0.29,4,7.7,5.81,79.7,,,0.147,16.3,21.9,191,3.38,,,,5.62,11.7,39.4,,,,140,0.66,,,,,35.5,,,,7.28,
    67,Kadin,,,,,,7,,,,,14,0,0,,,0.16,,,,,46,,,,,0.08,1.3,,,,,,,,,,121,162,34.5,,11.2,0.18,,7.9,100,,,3.81,,,,,1.83,29.2,,24.8,32.5,76.3,0.78,12.4,7.6,3.59,57.1,,,0.147,15.8,20.3,194,3.36,,,,4.52,16.6,48.1,,,,138,0.34,,,,,100.5,,,,6.28

    şeklinde arff dosyasını kaydettiğimde;
    nominal value not declared in header,read token….
    şeklinde hata mesajı alıyorum

    1. Şadi Evren ŞEKER

      Beyza Hanım,

      Weka yeni sürümü ile doğrudan CSV dosyasında yükleme yapabiliyor, isterseniz ARFF dosyasına çevirmek yerine CSV dosyası üzerinden verilerinizi yüklemeyi deneyebilirsiniz.

      ARFF dosyası için de, üst başlıkta yazdığınız kolon ismi ve tipi önemli. Aldığınız hata bunun ile ilgili, çözüm olarak doğru sayıda kolon başlığı olduğundan emin olun (satırdaki virgül sayısı + 1 adet kolon başlığı olmalı) ve bunların tiplerinin doğru sıra ile tanımlandığından emin olun.
      ancak yine de size tavsiyem CSV yüklemeniz olacaktır.

      Başarılar

  3. gülşah

    Hocam iyi akşamlar. 45.000 adet verim var ve bunlar ile ilgili 14 grubum var. Fakat içlerinde kayıp verilerim mevcut soru işareti ile gösterilmekte. Kayıp verileri silerek mi analizlerime devam etmeliyim yoksa farklı bir işlem mi uygulamam gerekiyor ?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir