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