2020-03-14

ML modellemesi ile güneş enerjisi üretim tahmini oluşturmak

Önceki paylaşımlarımın birinde veri analizi,görselleştirme ve temizlenmesi konularına değindim, şimdiki blog paylaşımımda ise biraz ileriye giderek EDA (Explotary Data Analysis) ve ML (tr. Makine Öğrenimi) model kurulumuna başvuracağım.
Bu aşamalara gelmeden önce kullanılacak olan veriyi ve çözüm bulmayı hedeflediğimiz soruna bakalım. Vakamızda iki veriseti kullanıldı, ilki yıllara göre rüzgar ve güneş enerji üretim değerlerini ve benzer bilgiler, diğeri ise hava tahminlerini ve geçmişlerini yansıtmaktadır. Amacımız, hava durumu tahminlerini dikkate alarak güneş enerji tüketimi ve akabinde üretimini öngörmektir.

Öncelikle ilk verisetimizde temizlik yapalım, bu nedenle tüm alanlar incelendiğinde birkaç sütunun tamamında değer gelmediği görülebilir. Fakat ilk verisetimizdeki değerler modellememizin hedef alanları olduğu için ilgili iki sütunu ayrı olara değişkene atadım -senelik güneş ve rüzgar enerji üretimleri.

2016 Almanya - Güneş ve Rüzgar Enerjisi Üretim Değerleri


Sonraki adımda ikinci verisetimizi incelendi, temizlik sonrasında ilk verisetimiz ile zaman dilimi bilgileri bazında birleştirilerek birleşik bir dataframe oluşturuldu. Yeni verisetimiz hem hava tahminlerini (rüzgar hızı, sıcaklık, radyasyon değerleri), hem de rüzgar ve enerji üretimleri değerlerini içermektedir.
Yeni verisetimizdeki hava durumu değerlerini inceleyelim:

2016 senesine ait hava durumu bilgileri
 Görselden şu sonuçları çıkarabiliriz:
  • Kış mevisiminde rüzgar hızı artımı mevcut, bu durum rüzgar enerjisi üretimine müsaittir
  • Kış mevsimi hariç diğer aylarda hava sıcaklığı güneş enerjisi üretimi için uygun koşullar sağlayabilir
  • Radyason değerler hava sıcaklığı ile doğru orantılıdır
Bu bilgiler ML modeli oluşturma aşamasında yardımcı olacak bilgilerdir.
Radyasyon değerlerinin rüzgar ve güneş enerji üretimine nasıl etkilediğini görmek için görseli inceleyelim:



 İki tip radyasyon değerini ele aldık: dağınık ve doğrudan. Radyasyon değlerinin güneş üretimi enerjisini incelediğimizde dağınık olanın herhangi noktalarda daha belirgin toplandığını göremiyoruz, diğer yandan doğrudan radyasyonun sıcaklık ile doğru orantıda güneş enerjisi üretimine pozitif etki sağladığı sonucunu çıkarabiliriz.
Alttaki resimde ise aynı radyasyon değerlerinin rüzgar enerjisi üzerinde etkisini görselleştirdim.


 Görüldüğü üzere her iki tipdeki radyasyonlar orta hızdaki rüzgarla aynı orantıdadır ve enerji üretimini ciddi etkilememiş.

Yalnız, toplanan verileri EDA analizi sonrası yetersiz bulduğum için yeni veri seti kaynağı buldum, eklenen alanlar da hava ısısını etkileyen etkenlerin bilgilerini içermektedir.Aşağıdaki resimde eklenen yeni alanlara göz atalım:

Yeni veri seti

Yeni kaynağı ekledikten sonraki adım önceki tablo ile birleştirme işlemi yapmak, akabinde alanların korelasyon değerlerini ısı haritasında görselleştirmek:

Alanların korelasyon değeri - ısı haritası

Haritadan görüldüğü üzere rüzgar enerji üretiminin rüzgar hızı ile güçlü korelasyonu bulunmaktadır. Diğer yandan, güneş enerjisinin doğrudan radyasyon, sıcaklık, dağınık radyason ve parlaklık yüseyi değerleri ile daha güçlü etkileşimi var. Benzer sonuçları üstteki görsellerden de tespit etmiştik, korelasyon değerleri görsellerdeki tespitlerimizi onaylamış nitelikde de değerlendirilebilir.

ML modelleri oluştururken güneş enerji üretimleri için öngörülerde bulunmayı hedefledim.
R sq., Adjusted R sq., std err, coef v.s. gibi değerleri görmek ve analiz etmek için Statsmodels kütüphanesini kullandım.Denenen birkaç varyasyonlar sonucunda en uygun değerleri çıkardım, bu sonuçlara varmamda R sq ve Cond no gibi değerler önemli rol üstlendi.

Sonuncu çıkarım sonrasında sıradaki işlem sklearn preprocessing işlemleri uygulayarak ML modellerine uygun bir ortam hazırlamaktır. Bunun için StandardScaler ve PolynomialFeatures modülleri kullanılarak sırasıyla Ridge ve Polynomial regresyon modelleri için ön işlemler tamamlandı. Proprocessing aşamaları da tamamlandığı için elimizdeki verisetimizi train, validation ve test isimli üç parçaya ayırabiliriz.
  • Train - ML modelimizin eğitimi için kullanacağımız verileri kapsamaktadır
  • Validation - bir kaç modelle çalıştığımız için aynı verilerle ön test işlemi yaparak kıyaslama yapmamıza ve doğru modeli seçmemize neden olan verilerdir
  • Test - modelimizi test etmek için kullanacağımız veriler
Genellikle bir veriseti %60 - train, %20 - validation, %20 - test veriseti için ayrılır, bu oranlar esnetilebilir.
Üç ayrı model değerlendirdim:
  1. Linear Regression
  2. Ridge Regression
  3. Polynomial Regression
Yaptığım modelleme sonucunda Polynomial Regression daha yüksek R sq. değerine sahip çıktı.
 Veriseti split etme işlemini K-fold CV ile de çalıştırılarak R sq. değerlerini tespit etmeye çalıştım, üstteki değerler ile çok benzer sonuçlar yansıttı.

ML model değerlendirmeleri

Seçeceğimiz modeli belirlediğimiz (Polynomial Regression) ve akabinde modeli eğittiğimiz için nihai olarak öngörü yapılabilir.
Tahminleme sonrasında gerçek değerler ve tahminleme sonuçları karşılaştırıldı.
Kullanmış olduğum bazı scriptlere gözatabilirsiniz:


Özet olarak, veriseti temizliği ve EDA`sı yapıldı, proprocessing işlemleri uygulanarak en uygun model belirlendi ve eğitildi, parametre değişiklikleri ve değerlendirmeleri sonrasında ise tahminleme oluşturularak gerçek değerlerle karşılaştırıldı.

No comments:

Post a Comment