Hazar Ekin Uçan

Seçilmiş projeler

İzmir Reservoir and Water Consumption Forecasting

Bir şehrin on yıllık su verisini tek bir aylık tabloya toplayan ve bu tablodan baraj doluluk oranını tahmin eden, dört kişilik bir ekip projesi.

Rol
Veri hazırlama, modelleme ve değerlendirme
Proje türü
Ekip projesi · staj
Dönem
Ağu 2025
Stack
Python · pandas · scikit-learn · Meteostat · Jupyter

Nedir On yıllık kamuya açık belediye ve meteoroloji verisinden kurulmuş, İzmir baraj doluluk oranı ve su tüketimi için aylık bir model.

Ne yaptım Verileri hazırlayıp birleştirdim, feature engineering ve model karşılaştırması yaptım. Eksik meteoroloji verilerini tamamlayarak tabloyu kullanılabilir hale getirdim.

Benim rolüm

Projeyi dört kişilik bir ekiple yaptık. Ortak yaptığımız işleri anlatırken "biz" diyorum. Ben veri hazırlama ve modelleme tarafında çalıştım: ham serileri temizlemek ve hazırlamak, ayrı veri setlerini tek bir aylık tabloda birleştirmek, feature engineering, modelleri eğitmek, karşılaştırmak ve değerlendirmek, bir de görselleştirme. Eksik aylardaki meteoroloji verilerini gerçek istasyon gözlemleriyle tamamlayan Meteostat kodunu ben yazdım. Final sunumunu da ben hazırladım ve projeyi ben sundum.

01

Bir şehrin on yıllık su verisi, her ay için bir satır

İzmir’in su verileri yayımlanıyor ama kaynaklar, biçimler ve yayımlanma aralıkları farklı.

İzmir’in barajlarına, su tüketimine ve bunları etkileyen hava koşullarına ilişkin veriler kamuya açık. Farklı kurumlar tarafından, farklı formatlarda, farklı aralıklarla yayımlanıyorlar ve bir kısmı veri olarak değil, yıllık raporların içindeki tablolar olarak geliyor.

Bunun on yıllık kısmını tek bir aylık tabloya koymayı ve baraj doluluk oranının buradan ne kadar iyi tahmin edilebildiğini görmeyi hedefledik. Doluluk oranı, su idaresinin karar verirken kullanabileceği bir gösterge. Anlamlı biçimde raporlayabileceğimiz kadar düşük bir hata ve sonucu kullanacak kişiye açıklayabileceğimiz kadar basit bir model istiyorduk.

Ortaya çıkan kapsam bilerek dar tutuldu. Tek şehir, on yıllık dönem, her ay için tek satır.

  • Dönem 2015-01 ile 2024-12 arası, 120 aylık satır
  • Hedefler Baraj doluluk oranı (%) ve depolanan hacim (m³)
  • Girdiler Tüketim, üretim, nüfus, sıcaklık, yağış, nem, basınç, rüzgâr
  • Tüketim kaynakları İZSU abone ve tüketim kayıtları, 2014 ile 2024 arası
  • Hava durumu kaynakları Meteoroloji Genel Müdürlüğü istatistikleri, Meteostat istasyonlarından tamamlandı

Birleştirilen aylık tablo kamuya açık. Ekipten biri tarafından Kaggle’da yayımlandı ve bu sayfadaki sayılar da aynı tablodan üretildi.

Veri setini Kaggle’da görüntüle

Tahtalı Barajı'nın havadan görünümü. Beton gövdesinde DSİ yazısı, arkasında ormanlık tepelerle çevrili baraj gölü var.
İzmir'e su sağlayan Tahtalı Barajı'nın 2008'de çekilmiş fotoğrafı. Konuyu göstermek için kullanılıyor; proje çıktısı değil ve modellediğimiz dönemin su seviyesini göstermiyor.

Fotoğraf: Andyduffraine / Wikimedia Commons, CC BY-SA 4.0

Bir baraj duvarının arkasındaki rezervuarı besleyen yeşil bir havzaya yağan yağmurun illüstrasyonu.
Modeldeki ilişkiyi anlatan konsept çizim: havzaya düşen yağmur barajda birikiyor, şehir de bu suyu kullanıyor. Bu bir fotoğraf değil. Tahtalı'nın arazisini göstermiyor ve ölçüm verisi içermiyor.

02

Sayılar nereden geldi, nereden gelmedi

Her sütunun hangi kaynaktan geldiği belli. Tabloyu hazırlarken temel hedefimiz buydu.

Farklı kaynaklardaki serileri birleştirirken asıl mesele, hangi verinin nereden geldiğini takip etmek. Bu yapılmazsa tahmin edilen, enterpolasyonla tamamlanan ve gerçekten ölçülen değerler aynı sütunda ayırt edilemez hale geliyor. Kaynak bilgisini bu yüzden doğrudan veriye ekledik. Tüketim satırlarına ilgili İZSU raporunu, meteoroloji satırlarına istasyonu yazdık. Eksik ayları tamamlarken de kullanılan servisi ve tarih aralığını kaydettik.

Tahminin dayandığı iki seri, doğrudan projenin CSV dosyalarından: üstte baraj doluluk oranı, altta aylık yağış, boşluksuz 120 ay. Buradaki hiçbir şey düzleştirilmedi, doldurulmadı veya tahmin edilmedi. Yağış sütunu kaynakta MGM_İstatistik_Normaller olarak etiketli, dolayısıyla bunu projenin hava durumu serisi olarak görün; bağımsız doğrulanmış istasyon gözlemleri olarak değil. Doluluk oranı, yalnızca Tahtalı değil, birleştirilmiş baraj değeri.

Meteoroloji serisinde eksik aylar vardı. Bunları enterpolasyonla tamamlamak, araya tahmini değerler ekleyip bu farkı görünmez kılacaktı; ben de eksik ayları bunun yerine Meteostat’ın İzmir istasyon kayıtlarından çektim. Önce Çiğli istasyonu geliyor, yedek olarak Adnan Menderes var. Bağıl nemin eksik olduğu ama sıcaklık ile çiy noktasının bulunduğu yerlerde nem boş bırakılmak yerine Magnus formülüyle türetiliyor.

Bu kodda iki kuralı korudum. Yalnızca eksik değerleri tamamlıyor; mevcut bir ölçümün üzerine başka bir değer yazmıyor. Çıktıya kaynak notunu da ekliyor. Böylece dosyayı sonradan açan kişi, eksik ayların nereden tamamlandığını kimseye sormadan görebiliyor.

fill_izmir_real_meteostat.py

for target in [col_prcp, col_nem, col_pres, col_wspd]:
  source = target + '_ms'
    # Fill ONLY the gaps. Never overwrite a real observation.
  mask = df[target].isna() & df[source].notna()
  df.loc[mask, target] = df.loc[mask, source]

df['Kaynak_Notu'] = (
  "Real monthly values. Source: Meteostat monthly/hourly dumps. "
  "Station priority: Çiğli (17218) -> Adnan Menderes (17219). "
  "Coverage: 2015-01 .. 2024-12."
)

Yalnızca NaN değerler tamamlanıyor. Yapılan işlem ve kaynak bilgisi dosyaya kaydediliyor.

Dört kamuya açık kaynaktan tahmine uzanan iş akışının şeması. Çalıştırılmış bir eğitim sürecinin grafiği değil. Gösterilen özellik grupları hazırlanan veri setlerinde yer alıyor, ancak her model bunların tamamını kullanmıyor.

Tablodaki her sütun ölçüme dayanmıyor. Evsel, endüstriyel ve tarımsal tüketim dağılımı ile aylık toplam tüketim de tabloda var. İkisi de türetilmiş: ayrım her aya uygulanan tek bir sabit oran, aylık toplam ise günlük değerin otuzla çarpımı. Modeli oluştururken kullanılabiliyorlar ama ölçüm değiller. Bu yüzden bunları ne burada ne de sunumda birer bulgu olarak aktarıyoruz.

03

Basit model neden daha iyi sonuç verdi

120 satır, belirgin mevsimsellik ve büyük ölçüde bir önceki ayın değerine bağlı bir tahmin hedefi.

En çok fark yaratan özellikler zamanla ilgiliydi. Ayı tek bir sayı yerine döngüsel bir çift değerle temsil ettik. Böylece aralık ve ocak, aralarında on bir ay varmış gibi değil, birbirine komşu aylar olarak değerlendiriliyor. Önceki ayın değeri ve üç aylık hareketli ortalama, gecikmeli özellikler olarak eklendi. Mevsimleri one-hot kodladık. Nüfusu kişi başına değerler ve yıllık değişim üzerinden kullandık. Yaz ziyaretçilerinin, takvimin açıklamadığı bir etkiyi açıklayıp açıklamadığını görmek için turist sayısını da denedik.

Linear, ridge ve lasso regresyonu random forest ve gradient boosted tree modelleriyle karşılaştırdık. Bu veri setinde düzenlileştirilmiş doğrusal modeller her iki tahmin hedefinde de daha iyi sonuç verdi.

Üç doğrusal modelin iki tahmin hedefi için raporlanan hata değerleri. Her iki metrikte de düşük değer daha iyi. Grafikler, projenin değerlendirmesindeki yuvarlanmış sayılarla yeniden çizildi; modeller yeniden çalıştırılmadı. Ensemble modelleri farklı eğitim ve test ayrımlarıyla değerlendirildiğinden bunların puanlarıyla doğrudan karşılaştırılamaz.

Projenin final sunumunda raporlandığı haliyle, iki tahmin hedefi üzerinde üç doğrusal modelin hata metrikleri.

ModelHedefRMSEMAEMAPE
LinearDoluluk %2.932.406.74%0.913
LassoDoluluk %3.002.466.87%0.909
RidgeDoluluk %3.653.219.14%0.866
RidgeHacim m³11.02M7.48M2.58%0.938
LinearHacim m³13.47M8.85M3.01%0.908
LassoHacim m³13.47M8.85M3.01%0.908

Bu sonuç, ağaç modellerinin genel olarak daha kötü olduğu anlamına gelmiyor. 120 aylık gözlem oldukça az veri. Tahmin edilen değeri büyük ölçüde mevsimsellik ve önceki ayın değeri belirliyor. Döngüsel ve gecikmeli özellikleri kullanan doğrusal model bu yapıyı doğrudan temsil ediyor. Ensemble modelininse aynı ilişkiyi veriden öğrenmesi gerekiyor; buradaki veri miktarı bunu güvenilir biçimde öğrenmesine yetmiyor.

Burada önemli bir kısıt var. Doğrusal modeller ve ensemble modelleri için eğitim ve test verilerini farklı ayırdık. Dolayısıyla hata değerleri, aynı koşullarda yapılmış bir karşılaştırma değil. Bu veri setinde aldığımız kararı destekliyorlar. İki model ailesinden herhangi biri hakkında genel bir iddiayı desteklemiyorlar.

Cevabı neyin değiştireceğini de yazdık. Aylık yerine haftalık ya da günlük veri, zamanla değişen tahmin hataları, modelin açıklayamadığı doğrusal olmayan bir örüntü ya da buharlaşma ve giriş debisi gibi gerçekten yeni girdiler; ensemble modellerini yeniden denemek için gerekçe olurdu.

04

Gelecek yılı tahmin etmek

Modelin işe yaraması için geleceğe dönük tahminlerde de kullanılabilmesi gerekiyor.

2025 projeksiyonu için ridge regresyonu on yılın tamamı üzerinde eğittik, sonra modeli ay ay ileriye taşıdık. 2025’in her ayına ait lag ve hareketli öznitelikler 2024’ün sonundan hesaplanıyor. Önceden bilinemeyecek girdiler sıcaklık, yağış ve nüfus; bunlar 2024 ortalamalarıyla dolduruluyor.

Bu ortalamalar gerçek bir hava tahmini değil, geçici bir varsayım. Modelin bir yıl boyunca nasıl davranacağını göstermeye yarıyor ama projeksiyonu 2024 yılının hava koşullarına bağlıyor. Sahada kullanılacak bir sürümde bu girdileri meteorolojik tahminlerden alırdım. Sonraki adımda bunu yapmak ve elle topladığımız baraj verilerini otomatik alacak bir süreç kurmak isterdim.

Projenin laboratuvarda sunumu; tezgâhta dizüstü bilgisayarla oturulmuş, sunum slaytı üstteki duvara monte ekrana yansıtılmış.
Stajın sonunda çalışmanın sunumu. Bu sunumu hazırlamak ve yapmak, dört kişilik projedeki kendi payımın bir parçasıydı.

Tamamlanan çalışma ne yapıyor

  1. İzmir için beş kamuya açık aylık seriyi 2015 ile 2024 arasında tek bir tabloda birleştiriyor
  2. Her sütunun kaynağını, hangi ayların nereden doldurulduğu dahil, kaydediyor
  3. Eksik hava durumu aylarını gerçek istasyon gözlemlerinden dolduruyor, ölçülmüş bir değerin üzerine asla yazmıyor
  4. Ay döngüsü, gecikmeli değerler, hareketli ortalama, kişi başına değerler ve yıllık değişim için özellikler oluşturuyor
  5. Linear, ridge ve lasso regresyonu her iki hedefte random forest ve gradient boosting ile karşılaştırıyor
  6. Her model ve hedef için MAE, RMSE, MAPE ve R² raporluyor
  7. Tüm dönemle eğitilmiş ridge modeli kullanarak 2025 yılı için baraj doluluğu tahmini yapıyor

Sınırlar ve kısıtlar

Birleştirilen tablodaki iki sütun ölçüm değil, türetilmiş değer ve bu sayfada hiçbiri bulgu gibi ele alınmıyor. Tüketimin evsel, endüstriyel ve tarımsal kullanıma ayrılması her aya uygulanan sabit bir oran, ölçülmüş bir dağılım değil; aylık tüketim de bağımsız olarak sayaçla ölçülmüş bir aylık toplam değil, günlük değerin otuzla çarpımı. Model karşılaştırmasında da önemli bir kısıt var: doğrusal modelleri ve ensemble modellerini farklı eğitim ve test ayrımlarıyla değerlendirdik. Aradaki fark, bu veri setinde basit modeli tercih etmemizi destekliyor ama aynı koşullarda birinin diğerinden daha iyi olduğunu gösteren bir ölçüm değil. 120 satırla ayrı bir doğrulama seti için yer yoktu ve 2025 tahmini, hava durumu ile nüfus girdilerini 2024 ortalamalarıyla dolduruyor. Bu değerler makul bir geçici varsayım; hava tahmini değil.

Projeyi destekleyen materyaller: Herkese açık veri seti · Kaynak kodu · Üretilen çıktı

Robotik, otomasyon ve fiziksel sistemlerde kullanılan yazılımlar üzerine konuşmaktan memnuniyet duyarım.