Gerçek Hayatta Bir Veri Bilimi Projesi Nasıl İnşaa Edilir?

Gerçek Hayatta Bir Veri Bilimi Projesi Nasıl İnşaa Edilir?

Veri bilimi projelerine dair yazılmış yazılarda, genelde problemin çözülmesi için kullanılacak yaklaşıma uygun model veya algoritmaların inşaasından söz edilir. Örneğin bu problem için gözetimli mi yoksa gözetimsiz öğrenme mi kullanacağız?
Hangi modeli kullanmalıyız?
Bu verileri nasıl sınıflandıracağız? vs. gibi.

Fakat ben bu yazıda, model/yaklaşım geliştirme süreçlerinden değil,
* Bir veri bilimi projesine baştan sona nasıl yaklaşılması gerektiğinden,
* Proje boyunca nelere dikkat edilmesi gerektiğinden,
* Projeyi nasıl “yönetilebilinir” kılacağımızdan adım adım söz edeceğim.

Bu adımların her biri, projenizin fikir aşamasından sunum aşamasına kadar sizin için bir iskelet görevi görecektir. Bu iskelet ile birlikte projenizin hangi aşamasına ne kadar zaman ayıracağınız, hangi soruna nasıl yaklaşacağınız hakkında fikir sahibi olacağınızı umuyorum.

İskeletin dışını, projenize, kurumunuzun kültürüne, önceki alışkanlıklarınız ve tecrübelerinizle harmanlayarak ilaveler veya eksiltmeler yapabilirisiniz. Zira buradaki bilgilerin çoğu gerçek hayat deneyimlerinden, gözlemlerden, yaptığım çeşitli okumalardan ve araştırmalardan ortaya çıkan öznel yaklaşımımdır.

Bir projeye başlamadan önce o projeyle alakalı doğru soruları sormalı, doğru cevaplar almalıyız. Zira projeyi geliştirdikten sonra çıkan ürünü kimlerin ne kadar kullanacağı, sağladığı katma değer, üretim maliyeti, zaman kısıtı vs. gibi etmenlerin her birinin hesaplanması gerekmektedir. Başı sonu iyi hesaplanmamış fakat harika kodlanmış bir model günün sonunda çöpte olabilir.

Bildiğiniz gibi yazılım proje yönetimi ile ilgili belirlenmiş ve hayatımızı kolaylaştıran bir takım methodlar bulunuyor. Fakat veri bilimi projelerinin süreçleri gerçek hayatta klasik yazılım süreçleriyle farklılık gösteriyor. Çünkü veri bilimi projeleri deneysel bir takım çalışmalar sonucu olgunlaşıyor. Bu da zaman planlaması ve projenin yönetilmesi açısından bir takım karmaşalara sebep oluyor.

Bu sebeple bir projeye başlarken bir takım denenmiş yöntemleri kılavuz edinerek ilerlemek, projenin yönetilebilir ve sürdürülebilirliği açısından faydalı olacaktır.

Baştan sona projemizi planlamak için adım adım gidelim;



1- ADIM

Projenin potansiyel değerini ölçün.

Projeye başlamadan önce onun size/kurumunuza/paydaşlarınıza sağlayacağı faydayı hesaplamak için zaman ayırın.
Başlamadan önce böyle bir şeye gerçekten gerek var mı/yok mu kararını iyice netleştirin.
Aşağıdaki sorularla projenin yatırım getirisini (ROI) kabaca ölçmeye başlayabilirsiniz;

  • Bu proje neden diğerinden daha önemli?
  • Sonuçları ne gibi katkı sağlayacak?
  • Proje kimlere fayda sağlayacak?
  • Projenin paydaşları kimler olacak?
  • Alan bilgisini kimlerden alacaksınız?
  • Projenin doğrulamasını kimlerden alacaksınız?
  • Nerelerde, ne için kullanılacak?

Bu ve bunun gibi sorularla kaba taslak yaptığınız ölçülerin %100 gerçek değerler olmasına gerek yok fakat proje ekibinin ve şirketin hedeflerinin eşleşmesi anlamında faydalı olacak ve aynı zamanda süreç boyunca çalışacağınız paydaşlarınızı da netleştirmenizi sağlayacaktır.

Bu adımı atlamak ve ortalama bir katma değer hesabı yapmadan işe başlamak size zaman, para ve efor açısından pahalıya mal olabilir.

Olmayacak bir yaklaşımı modellemiş, geliştirmiş ve bunun için aylar harcamış, sonucunda da gerçek hayatta doğru çalışmayan, sınırlı ve katma değeri olmayan bir projeye imza atmış olabilirisiniz.

Bunun gibi sıkıntıları yaşamamak için zaman, para ve eforun en efektif şekilde kullanılması en büyük öncelikleriniz olmalı ve hesaplamadan bir işe başlamamalısınız.

Yatırım getirinizi hesaplamak için aşağıdaki basit formülü kullanabiliriniz;

(Kullanıcı sayısı * Yeni veya artan kullanım oranı * İş değeri) – Geliştirme maliyeti = Beklenen yatırım getirisi.

Kullanıcı sayısı =  Sistemi kullanacak, sistemin varlığından etkilenecek toplam kişinin kaba tahmini

Yeni veya artan kullanım oranı = Projenin bir sonucu olarak yürütülen temel eylemlerin veya  var olan bir şeyin davranışındaki değişimin tahmini.

İş değeri = Ölçmek istediğiniz nihai sonuçtur. Genelde ortalama veya yüzde şeklinde ölçülür. Dönüşüm oranından, yenilenme oranına kadar herhangi bir şey olabilir.

Geliştirme maliyeti = Sistemin başından sonuna kabaca tüm geliştirme maliyenin hesaplanması.

Daha detaylı öğrenmek için lütfen tıklayın – https://uxdesign.cc/a-simple-way-to-model-roi-of-any-new-feature-a9828fbba27e

Birinci adımda proje hakkında epey geniş çaplı bilgi ve motivasyon kazanmış olacaksınız. Bu aşamadan sonra diğer adımları takip ederek adım adım projenizi gerçeklemeye başlayabilirsiniz.


2. ADIM

Bir yaklaşım belirleyin veya temel bir model oluşturun.

Problemin kapsamı dahilinde bir yaklaşım belirlemek problemin çözüm hedefinin daha iyi tanımlanması için bir referans niteliğinde olacaktır.
Bu yaklaşım mevcut bir yaklaşım da olabilir veya probleminiz için önceden belirlenmiş bir yaklaşım yok ise özel bir model geliştirmeniz gerekebilir.
Ancak bu model ilk etap için çok detaylı bir model olmamalıdır. Yani burada bahsedilen model bir makine öğrenmesi algoritması tasarlamak gibi karmaşık bir iş demek değildir.

Probleminizi tanımlayıcı bir yaklaşım oluşturarak paydaşlarınızla bu durumun detayını paylaşmalı ve geri bildirimlerle hareket etmelisiniz.

Örneğin; “Bakın bizim bu proje için düşündüğümüz yaklaşımda ilk etap için regresif bir model kullanmak, sonrası için de bir optimizasyon modeli kullanmak vardır. Bu modellerin bu proje için kullanım amaçları şu şekildedir….” şeklinde bir tavır ile paydaşlarınıza durumu izah edip durum değerlendirmesi yapın.

Veri bilimi projeleri konusunda deneyiminiz arttıkça model belirleme işini rutin olarak yapmaya başlayacaksınız. Deneyimli veri bilimcileri bu adımda, önce biraz düşünür, çözümü hangi yaklaşımın iyileştireceği konusunda bir takım sezgisel yaklaşım geliştirir. Neyin engel, neyin fayda sağlayacağını hesaplar. Ve bunun sonucunda düşündüğü yaklaşımı paydaşlar ile paylaşır.

Bu aşamada da, şu ana kadar yaptıklarınızın verimini ve başarı oranını belirlemiş, başarılı olması gereken her şeyi önem sırasına göre numaralandırmış olursunuz ve karmaşık bir model yaratmaya değip değmeyeceğini tespit edersiniz.

Bu adımı gerçekleştirmeden hemen kompleks bir modele giriş yapmanız, netlik kazanmamış bir işe başladığınız için sizi faydalı sonuca götürmeyebilir.


3. ADIM

Takımınız ile tüm detayları paylaşın. Tartışın.

Projeyi başarılı bir şekilde geliştirmek için takımınıza kimler dahilse her biriyle konuşun.

  • Hangi aşamada olduğunuzu,
  • Hangi aşamada kimlerle birlikte çalışılacağını,
  • İş bölümünü,
  • Planlamayı,
  • Oluşturduğunuz model yaklaşımınızı,
  • Gerçeklemek için hangi yoldan gideceğinizi,
  • Kodu nasıl yazacağınızı,
  • Hangi platformda yazacağınızı,
  • Hangi veriye ihtiyacınızın olduğunu,
  • Kodu nasıl test edeceğinizi,
  • Performans ölçütlerinizi vs. herşeyi konuşun.

Genelde kendi başımıza tüm bunları bildiğimizi düşünüyoruz, halledebileceğimizi sanıyoruz fakat takım arkadaşlarımızla paylaşarak görmediğimiz noktalar keşfedebiliriz veya kafamıza takılan şeylerin cevaplarını birlikte bulabilir, bölümleme yaparak süreçleri hızlandırabiliriz.
Bu yüzden takım arkadaşlarınızla sürekli aynı gemide olmak için özel çaba gösterin ve rutin toplantılar yaparak hizalanın.

Takım arası iletişimsizlik, geliştirdiğiniz modelde karşılaşacağınız herhangi bir sorunu çözmenizi çok zorlaştırabilir.
Örneğin, modelinizin bir kısmını yazdınız ve lokalinizde düzgün çalıştırdınız. Ancak aynı kod canlıda çalışmaya başladığında sunucuları yoruyor, işlemleri yavaşlatıyor. Bunun tespit etmek, hatayı gidermek ve belki kodu optimize etmek için farklı kişilere ihtiyacınız olacaktır. Bu sebeple takımınız ile dirsek temasında olmanız her zaman lehinize olacaktır.


4. ADIM

Bu adımda modelinizi geliştirmeye başlayabilirisiniz.

Problemi çözmek için geliştirdiğiniz, üzerinde uzunca düşündüğünüz, paydaşlarınızla ve takımınızla paylaştığınız modelinizi geliştirmenin zamanı geldi 🙂

Modelinizi geliştirmek için herşeyin detayına girebilir, amacınız doğrultusunda literatürü tarayabilir ve modelinize uygun makine öğrenmesi algoritmalarını bir bir deneyebilirsiniz. Eğer gerekliyse kendi algoritmanızı bu adımda oluşturabilir ve sonuçlarını deneyebilirsiniz.

Bu adımı gerçekleştirirken dikkat edeceğiniz bazı noktalar var.

Bunlarda ilki, kodunuzun kalitesi.
Bunun için bazı kalite metrikleri bulunuyor.
Öncelikle göze sade görünmesi çok önemli, mümkün olduğunca sade şekilde kod yazmaya önem vermeliyiz.

  • Yorum satırları,
  • Değişken ve method isimlerinin tanımlanması,
  • Bağımlılıklar (dependency) vs. dikkate alınacak kalite metriklerinden bazıları.

Robert Cecil Martin’de Clean Code isimli kitabında, bir kodun nasıl temiz yazılabileceğini veya temiz yazılmaya başlanan bir kodun zaman içinde refactor edilmezse nasıl git gide kirlenebileceğinden ve bunun önüne nasıl geçebileceğimizden bahsediyor. Okumanızı tavsiye ederim.

Kodumuzun temizliği ve sadeliği sadece bizim için önemli değil, bizden sonra o kod ile çalışacaklar için de oldukça önemlidir. Karmaşık kodlama (Spagetti code) yaptığımızda projenin bir şahıs üzerindeki bağımlılığı oldukça artıyor. Bizim bu bağımlılıkları minimuma düşürmek için herkesin anlayabileceği şekilde oluşturmamız gerekiyor.

Kod temizliğinin haricinde, iyi döküman tutmakta büyük önemi olan,
“projenin sürekliliğini” doğrudan etkileyen bir etmen. O yüzden kodunuza sonradan baktığınızda nerede ne yaptığınızı anlamanız veya sizden sonrakilerin kodu rahatça anlaması için dökümantasyon hayati önem taşıyor.

Bir diğer önemli adım ise test etmek. Geliştirme aşamasında isteseniz de istemeseniz de bir çok hata ile karşılaşacaksınız. Hataları gidermek için kodunuzu

  • Unit Testting,
  • System Testing,
  • User Accepting Testing gibi test adımlarından geçirmeniz gerekmektedir. Makine öğrenmesi algoritmalarını nasıl test edeceğinizi küçük bir araştırmayla, yapılmış örneklerini bolca internetten bulabilirsiniz.

Bunun haricinde, takım halinde çalışmak ve kodunuzu üretilebilir hale getirmek için yalıtılmış ortamda çalışmanızı tavsiye ederim. Yalıtılmış ortamdan kastım,
bulut tabanlı sistemler (Microsoft Azure, AWS gibi.) veya kişisel sunucular olabilir ya da Docker gibi bir konteyner teknolojisi ile çalışarak proje için kullandığınız tüm araçları, kütüphaneleri, işletim sistemini vs. herkeste aynı çalışacak şekilde standart hale getirmiş ve takım çalışanlarını platform bağımlılığından kurtarmış olursunuz.

Böylelikle;
“Sen Python’ın hangi sürümü vardı ya? Bende o sürüm yüklü değil.”
“Senin işletim sistemi OSX olduğu için config ayarı daha farklı”,
“Sendeki A dosyasını bana gönderir misin? Bende o yok.” gibi diyalogları ekip içinde yaşamamış olursunuz.

Diğer önemli süreç yönetim adımı ise, GitHub, Bitbucket gibi versiyon kontrol sistemlerinde projenizi versiyonlayarak gitmek. Versiyon kontrol sistemleri (VCS), sizin ve ekibin koordinasyonunun sağlanması, projenin yedeklenmesi ve test aşamasının kolay gerçeklenmesi açısından büyük önem taşır.

Yukarıda saydığım her şey size ekstra zaman kaybı gibi gelebilir. Şunu unutmayın, kısa vadede zaman kaybettiren şey uzun vadede size çok zaman kazandıracaktır.


5. ADIM

Yaptığınız herşeyi görüntüleme ve geri bildirim alma vakti.

Bu adım, projenin doğru çalışıp çalışmadığını görebilmek için yapılır. Problemin çözümünün sürekli kullanılabilir olması için çıktıların istikrarlı, performanslı ve güvenilir olması gerekmektedir.

  • Modelin performansı beklenenden düşük mü?
  • Veriler, doğru veriler mi?
  • Eğitim verilerinden farklı şekilde mi biçimlenmiş,
  • Sonuç bekleneni yansıyor mu?Tüm bunları düzgün görsellerle görmek bize çok zaman kazandırır. Özellikle paydaşlarımıza yaptıklarımızı gösterebilmek ve izah etmek için projeye güzel bir dashboard tasarlamak veya var olan görselleştirme araçları kullanarak ekranlar oluşturup burada sonuçları raporlamak oldukça önemli ve etkilidir. Belki bir tablo yöntemi kullanabilir veya anomali tespiti gibi işler için uyarı e-postaları göndererek sisteminizi kontrol edebilirisiniz.

Bu ekranlar aracılığıyla kullanıcıların geri bilirimini alabilir, ilave değişiklikler, eklemler/eksiltmeler yapabilirsiniz.
Eğer geri bildirimi kullanıcıdan değil de sistemin kendisinin kaydetmesini isterseniz günlük loglar tutabilirisiniz. Böylelikle kullanıcı alışkanlıklarını kimseye sormadan sistemin kendisinden öğrenebilirisiniz.

Neticede son kullanıcı için kullanıcı dostu bir ekran tasarlamak, her proje için gerekli ve önemlidir. Bu adımı da uyguladığınızda projenizin kalitesi ve verimi bir hayli yükselmiş olur. 


 

ÖZET


Yukarıda açıkladığım, veri bilimi projelerinin yaşam döngüsüne ait 5 adımı kısaca özetleyelim;

  • Projenin potansiyel değerini ölçmek.
  • Bir yaklaşım belirlemek veya temel bir model oluşturmak.
  • Takım ile tüm detayları paylaşmak
  • Model Geliştirme
  • Monitör etme / Geri Bildirim Alma

Tüm bu adımları en başta da bahsettiğim gibi projenizin rahat yönetilebilmesi için bir iskelet niteliğindedir. Tecrübe edilmiş bir yoldan geçmek, her zaman yeni bir yol keşfetmekten daha güvenlidir. Siz bu rehberle birlikte keşfedilmiş yolun içindeki size özel yeni yolları ekleyerek ayrıntılandırabilirsiniz.

Okuduğunuz için teşekkür ederim.

“Gerçek Hayatta Bir Veri Bilimi Projesi Nasıl İnşaa Edilir?” için 2 cevap

  1. Mükemmel bir özet. Tebrik ederim. Bir sonraki yazınızda inşa edilmiş bir veri bilim projesi nasıl hayata geçirilir, bunun farklı yolları var mıdır, farklı yolların avantajları nedir, projenin yazıldığı dille şirketin üretim sistemlerinin dili farklıysa projeyi o dilde yeniden kodlamaya mahkum muyuz, herkesin konuştuğu şu mikroservisler nedir; bunları da okumak isteriz.

Bir Cevap Yazın

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