Eksik verilerle iş akışının neresinde ilgilenmeliyiz?


16

Çok büyük bir veritabanından (burada, SQL ve Vertica aracılığıyla Vertica) alınan verilerden makine öğrenme modelleri (benim durumumda, Python pandasve sklearnpaketleri kullanarak) oluşturmak için bir iş akışı oluşturuyorum pyodbcve bu süreçte kritik bir adım eksik öngörücülerin değerleri. Bu, tek bir analiz veya istatistik platformu içinde basittir - Python, R, Stata, vb. Olsun. - Ama bu adımı çok platformlu bir iş akışında en iyi nerede bulacağımı merak ediyorum.

Bunu Python'da, sklearn.preprocessing.Imputersınıfla, pandas.DataFrame.fillnayöntemi kullanarak veya elle (kullanılan impütasyon yönteminin karmaşıklığına bağlı olarak) yapmak yeterince basittir . Ama bunu yüz milyonlarca kayıt boyunca düzinelerce veya yüzlerce sütun için kullanacağım için, bunu doğrudan SQL üzerinden yapmanın daha etkili bir yolu olup olmadığını merak ediyorum. Bunu Vertica gibi dağıtılmış bir platformda yapmanın potansiyel verimliliklerinin yanı sıra, bu, tabloların "tam" sürümlerini oluşturmak için otomatik bir boru hattı oluşturmamıza olanak tanıyacak ve böylece yeni bir set doldurmamız gerekmeyecek. her model çalıştırmak istediğimizde eksik değerlerin sıfırdan

Bununla ilgili çok fazla rehberlik bulamadım, ancak hayal edebileceğimizi düşünüyorum:

  1. tamamlanmamış her sütun için bir ikame değerleri tablosu oluşturun (örneğin, ortalama / medyan / mod, genel veya grup olarak)
  2. her satır ve tamamlanmamış sütun için bir yedek değer atamak üzere yedek değer tablosunu orijinal tabloyla birleştirin
  3. Varsa orijinal değeri ve yerine başka değeri almak için bir dizi vaka ifadesi kullanın

Bu Vertica / SQL'de yapmak için makul bir şey mi, yoksa rahatsız etmemek ve sadece Python'da işlememek için iyi bir neden var mı? Ve eğer ikincisi, bunu sklearn veya tam tersi yerine pandalarda yapmak için güçlü bir durum var mı? Teşekkürler!

Yanıtlar:


14

Emputasyon gibi otomatik görevlerle ilgili güçlü fikrim (ancak burada ölçekleme, merkezleme, özellik seçimi, vb. De içerebilir) verilerinizi dikkatlice incelemeden bu tür şeylerden herhangi bir şekilde kaçınmaktır.

Tabii ki, ne tür bir ithalatın uygulanacağına karar verdikten sonra otomatikleştirilebilir (yeni verilerin aynı şekle / sorunlara sahip olduğu varsayımı altında).

Yani, her şeyden önce, akıllıca bir karar verin. Sık sık bu şeyleri otomatikleştirmek için zamanımı boşa harcadım, verilerimi yok ettim. Size bazı örnekler vereceğim: - N / A olarak kodlanan ve Kuzey / Amerika olarak değerlendirdiğim bir pazar yeri - -999.0 gibi sayılar, çünkü veri üreticisi eksik veriler için daha iyi bir yedek bulamadı - Kan basıncı veya vücut sıcaklığı, eksik veri yerine (0 kan basıncı olan canlı bir insanı hayal etmek zordur) - verilerin çeşitli kaynaklardan toplanması nedeniyle eksik veri için birden fazla yer tutucu

Bundan sonra, belirli bir görev için verilerinizden hangi bilgilerin daha iyi bir şekilde benzeyeceğini anlamanız gerekir. Bunu yapmak, göründüğünden çok daha zordur.

Tüm bunlardan sonra, tavsiyem, itme görevinizi yeni veriler üzerinde çoğaltma araçlarına sahip olduğunuz bir üst katmana ertelemek ve yeni veriler için varsayımların ihlal edilip edilmediğini (mümkünse) kontrol etmektir.


1
+1 otomasyonu işleri daha iyi hale getirmez, sadece daha tutarlı ve sıklıkla daha hızlı hale getirir!
James

4

Therriault, Vertica kullandığınızı duyduğum için çok mutluyum! Tam açıklama, ben orada baş veri bilimciyim :). Açıkladığınız iş akışı tam olarak sık sık karşılaştığım şeydir ve herhangi bir pyODBC ve panda çalışması öncesinde veritabanındaki bu çok büyük veri kümelerini ön işleme konusunda gerçek bir inancım. Ben sadece tekrarlanabilir çalışma sağlamak için bir dosya tabanlı sorgu yoluyla bir görünüm veya tablo oluşturmayı öneririm. İyi şanslar

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.