Yarın Türkiye Ne Kadar Elektrik Tüketecek? Gün Öncesi Talep TahminiHow Much Electricity Will Turkey Use Tomorrow? Day-Ahead Demand Forecasting

Dokuz yıllık saatlik tüketim verisiyle ertesi günün 24 saatini tahmin eden bir model kurdum, 57 ay boyunca geriye dönük sınadım ve resmi gün öncesi tahminle karşılaştırdım.I built a model that forecasts the next day's 24 hours from nine years of hourly consumption data, backtested it over 57 months and compared it with the official day-ahead forecast.

  • Python
  • Scikit-learn
  • Time Series
  • Backtesting

Elektrik depolanamıyor; her saat tüketildiği kadar üretilmesi gerekiyor. Bu yüzden ertesi günün tüketimi bir gün önceden, saat saat tahmin edilir. Bu çalışmada Türkiye'nin 85.584 saatlik tüketim verisiyle böyle bir tahmin modeli kurdum ve onu gerçek hayattaki gibi, her gün yalnızca o güne kadar bilinenlerle sınadım.

Geçen haftayı kopyalamak%5,2saatlik ortalama hata
Model%2,1sıcaklık bilgisi olmadan
Model, sıcaklıkla%1,7hava tahmini kusursuz olsaydı

Soru ve kural

Tahmin edilen şey, yarının (D günü) 24 saatinin her biri için Türkiye'nin toplam elektrik tüketimi. Kural şu: model, D günü için tahmin yaparken en geç D−2 gününün sonuna kadar gerçekleşen tüketimi görebilir. Aradaki bir gün, tahminin bir gün önceden verilmesi gerektiği için boş kalıyor.

Hata ölçüsü olarak ortalama mutlak yüzde hatayı (MAPE) kullandım: her saat için tahminin gerçekleşenden yüzde kaç saptığının ortalaması.

Veri

Çalışmanın adımları
  1. Veriyi
    topla
  2. Tüketimi
    tanı
  3. Özellik
    üret
  4. Geriye dönük
    sına
  5. Resmi tahminle
    kıyasla
  • Tüketim: EPİAŞ Şeffaflık Platformu'ndaki gerçek zamanlı tüketim serisi, 1 Ocak 2017 – 6 Ekim 2026. 85.584 saat, tek bir eksik ya da tekrarlı saat yok. Türkiye 2016'dan beri yaz saati uygulamadığı için saat kayması sorunu da yok.
  • Sıcaklık: Open-Meteo arşivinden İstanbul, Ankara, İzmir, Adana ve Erzurum'un saatlik sıcaklığı.
  • Takvim: Resmi tatiller ve dini bayramlar; arife, bayram ertesi, köprü günleri ve Ramazan ayını bunlardan türettim.
  • Resmi tahmin: Aynı platformda yayımlanan Yük Tahmin Planı, yani bir sonraki gün için yapılan resmi saatlik tahmin. Kıyas için kullandım.

Tüketimi ne belirliyor?

Modelden önce seriye baktım; iyi bir tahmin modeli, tüketimi oynatan şeyleri bilmek zorunda.

Günün saati ve haftanın günü

Günün saatlerine göre tüketim (genel ortalamaya oran)
0,80,91,01,11,2
00:0006:0012:0018:0023:00

İş günlerinde tüketim sabah 05:00'te dibe iniyor, 08:00'den sonra hızla yükselip 11:00'de en yüksek noktasına çıkıyor. Hafta sonu sabah yükselişi daha yavaş ve tepe akşam 20:00'de. Pazar günleri tüketim ortalamanın %12 altında.

Sıcaklık

Günlük ortalama sıcaklığa göre tüketim (°C; o yılın iş günü ortalamasından fark)
−%10%0+%10+%20
<22–66–1010–1414–1818–2222–2626+

Tatil olmayan iş günleri. Sıcaklık beş şehrin ortalaması.

Eğri U biçiminde. Tüketim 14–18 °C arasında en düşük (−%8); hava ısındıkça klima yükü geliyor ve 26 °C'nin üstünde tüketim yıl ortalamasının %16 üzerine çıkıyor. Soğukta artış çok daha küçük (+%3), çünkü ısınmanın büyük kısmı elektrikle değil doğal gazla yapılıyor. Serinin rekoru da bir yaz öğleden sonrası: 28 Temmuz 2025, saat 14:00, 59.504 MW.

Tatiller

Tatil günlerinde tüketim, çevresindeki normal günlere göre
  • Dini bayram günleri70 gün−%28
  • Arife20 gün−%19
  • Yılbaşı10 gün−%18
  • Diğer resmi tatiller58 gün−%8

Her gün, üç hafta öncesi ve sonrasındaki aynı haftanın günlerinin medyanıyla karşılaştırıldı.

Dini bayramlarda tüketim normal bir güne göre %28 düşüyor; ilk gün %30,1, dördüncü gün %23,5. Arife günü bile %19 düşük. Bayramların tarihi her yıl yaklaşık 11 gün geriye kaydığı için bu etki mevsimsellikle yakalanamıyor; takvimin modele açıkça verilmesi gerekiyor.

Seride bir de pandemi izi var: Nisan 2020'de tüketim bir önceki yılın aynı ayına göre %15, Mayıs 2020'de %17 düşük.

Model

Gradyan artırmalı karar ağaçları (scikit-learn, HistGradientBoostingRegressor) kullandım. Modele verdiğim bilgiler:

  • Geçmiş tüketim: Aynı saatin 2, 3, 7 ve 14 gün önceki değeri, son haftanın seviyesi ve eğilimi.
  • Takvim: Saat, haftanın günü, yılın günü, tatil türü, bayramın kaçıncı günü, arife, köprü günü, Ramazan.
  • Geçmişteki tatiller: Kıyas alınan günlerden kaçı tatildi? Bu olmadan model, bayramdan sonraki haftada bayramın düşük tüketimini “normal” sanıyor.
  • Sıcaklık (ikinci modelde): Tahmin gününün sıcaklığı ve son haftaya göre farkı.
Hedefi neden oran olarak kurdum? Tüketim yıldan yıla artıyor ve ağaç modelleri eğitimde görmediği seviyeleri tahmin edemiyor. Bu yüzden model megavatı değil, “bu saat, son bir haftanın aynı saatlerinin ortalamasına göre yüzde kaç farklı olacak” sorusunu öğreniyor. Böylece 2025'teki rekor seviyeler de modelin bildiği aralıkta kalıyor.

Geriye dönük test

Modeli tek bir eğitim ve test bölmesiyle sınamadım. Ocak 2022'den Eylül 2026'ya kadar her ayın başında, o güne kadar bilinen veriyle yeniden eğittim ve yalnızca o ayı tahmin ettirdim: 57 ay, 1.734 gün, 41.616 saat. Model ayarlarını test sonuçlarına bakarak değiştirmedim.

Sonuçlar

YöntemSaatlik hata (MAPE)Ortalama hata (MW)Günün tepe saatiGünlük toplam
İki gün öncesinin aynı saati%8,03.008%7,7%7,3
Geçen haftanın aynı saati%5,21.921%5,1%4,9
Model, sıcaklık bilgisi olmadan%2,1816%2,2%1,8
Model, sıcaklıklakusursuz hava tahmini varsayımı%1,7642%1,6%1,3
  • Basit taban zor geçilen bir çıta değil ama gerekli. “Geçen haftanın aynı saati” %5,2 hata veriyor. Model bunu %2,1'e indiriyor.
  • Günlerin %77'sinde günlük hata %2'nin altında. Medyan gün hatası %1,27; ortalamayı az sayıda kötü gün yukarı çekiyor.
  • Sıcaklık bilgisi hatayı beşte bir azaltıyor, ama bu rakam tahmin gününün gerçekleşen sıcaklığıyla hesaplandı. Aşağıda bunun ne kadar iyimser olduğuna bakıyorum.

Asıl fark tatillerde

Gün tipine göre saatlik hata (MAPE): taban ve sıcaklıksız model
  • İş günügeçen haftanın aynı saati · 1.185 gün%4,2
  • İş günümodel%2,0
  • Hafta sonugeçen haftanın aynı saati · 472 gün%4,3
  • Hafta sonumodel%2,0
  • Resmi tatilgeçen haftanın aynı saati · 32 gün%10,5
  • Resmi tatilmodel%3,0
  • Arifegeçen haftanın aynı saati · 10 gün%23,0
  • Arifemodel%5,3
  • Dini bayramgeçen haftanın aynı saati · 35 gün%37,7
  • Dini bayrammodel%3,8

Normal günlerde model tabanın hatasını yarıya indiriyor. Dini bayramlarda taban %38 yanılıyor, çünkü bayram gününe geçen haftanın normal gününü kopyalıyor; model %4'te kalıyor. En zor gün arife: yarım gün çalışılıyor ve yılda yalnızca iki kez yaşanıyor.

Kurban Bayramı 2026 çevresinde iki hafta: gerçekleşen tüketim ve tahminler
20 GW30 GW40 GW
22 May24 May26 May28 May30 May1 Haz3 Haz

Gölgeli bant modelin tahmin aralığı. Bayram 27–30 Mayıs.

Grafikte iki şey görülüyor. Taban bayramda çok yüksek, bayramdan sonraki hafta ise çok düşük kalıyor, çünkü bu kez bayram haftasını kopyalıyor. Model ikisinde de gerçekleşeni izliyor; ama bayramdan önceki iki günde (25–26 Mayıs) o da yüksek kalıyor. Nedeni aşağıda.

Sıcaklık bilgisi ne kadar işe yarıyor?

Aylara göre model hatası (MAPE)
%0%1%2%3
OcaŞubMarNisMayHazTemAğuEylEkiKasAra

Sıcaklık en çok haziran ve temmuzda işe yarıyor: klima yükü havaya çok duyarlı. Mayıs ve ekim gibi ılıman aylarda iki model birbirine yakın.

Dikkat: Sıcaklıklı model, tahmin gününün gerçekleşen sıcaklığını kullandı. Gerçekte elde yalnızca hava tahmini olur. Bu yüzden %1,7 bir alt sınır; gerçekçi sonuç iki modelin arasında bir yerde.

Ne kadar arasında olduğunu görmek için sıcaklığa bilerek hata ekledim: her güne rastgele, o gün boyunca sabit bir sapma. 2025 öncesiyle eğitilen model, 2025–2026'da şu sonuçları verdi:

Hava tahmininin günlük hatasıModelin hatası (MAPE)
Hata yok (gerçekleşen sıcaklık)%1,67
±1 °C%1,81
±2 °C%2,07
±3 °C%2,33
Sıcaklığı hiç kullanmayan model%2,16

Hava tahmini günde ortalama 2 °C şaşsa bile sıcaklığı kullanmak, hiç kullanmamaktan iyi. 3 °C'de avantaj kayboluyor. Ertesi gün için hava tahminleri genellikle bundan isabetli olduğundan, sıcaklık modelde tutulmaya değer.

Resmi tahminle karşılaştırma

EPİAŞ'ta her gün, ertesi gün için resmi bir saatlik tahmin yayımlanıyor: Yük Tahmin Planı. Aynı 41.592 saatte, aynı gerçekleşen değerlere karşı ikisini yan yana koydum.

Resmi planModel, sıcaklıksızModel, sıcaklıkla
Bütün saatler (MAPE)%3,03%2,10%1,68
Medyan saatlik hata%2,24%1,53%1,16
Planın bozuk göründüğü 11 gün hariç%2,90%2,07%1,65
2022%2,81%2,16%1,76
2023%2,85%1,99%1,66
2024%3,52%2,10%1,64
2025%3,07%1,98%1,57
2026%2,82%2,31%1,82

Bu veride model, sıcaklık bilgisi olmadan bile resmi plandan düşük hata verdi ve günlerin %71'inde daha isabetliydi. Sonuç beş yılın her birinde aynı yönde.

Bu kıyası nasıl okumalı? “Model resmi tahminden iyi” demek için yeterli değil; üç nedenle temkinli olmak gerekiyor. Birincisi, ben verinin bugünkü halini kullandım; tahmin yapılırken eldeki ilk değerler sonradan düzeltilmiş olabilir. İkincisi, resmi planın hangi saatte, hangi bilgilerle hazırlandığını bilmiyorum. Üçüncüsü, plan yalnızca hatayı küçültmek için değil, sistemi işletmek için yapılıyor; hedefi benimkiyle aynı olmayabilir. Söylenebilecek olan şu: herkese açık veriyle ve basit bir modelle, aynı ölçüte göre benzer ya da daha iyi bir isabet mümkün.

Tahmin ne kadar emin?

Tek bir sayı yerine bir aralık vermek çoğu zaman daha kullanışlı: “yarın saat 14:00'te tüketim yüzde 80 olasılıkla şu iki değer arasında.” Bunun için aynı modeli %10 ve %90 dilimlerini tahmin edecek biçimde iki kez daha eğittim. İyi bir aralığın, gerçekleşen değerlerin %80'ini içermesi gerekir.

Gün tipiHam aralıkGeçmiş hatalarla ayarlanmış
İş günü%64,5%80,7
Hafta sonu%67,9%81,4
Resmi tatil%69,5%77,3
Arife%52,1%58,8
Dini bayram%66,9%72,5
Hepsi%65,5%80,6

Ham aralık fazla dar çıktı: gerçekleşen değerlerin yalnızca %65'i içinde kaldı. Model, kendinden olması gerekenden emin. Bunu düzeltmek için her ay, aralığı önceki on iki ayın test hatalarına bakarak genişlettim (conformal yöntem). Kapsama %81'e çıktı; aralığın ortalama genişliği tüketimin %5,6'sı.

Düzeltme ortalamayı tutturuyor ama her gün tipini değil: arife günlerinde kapsama %59. Modelin en çok yanıldığı günler, yanılabileceğini en az bildiği günler.

Modelin en çok yanıldığı günler

GünGünün hatası (MAPE)Tahmin gerçekleşendenNe oldu?
26 Oca 2022%15,4%15 yüksekSanayiye planlı elektrik kesintisi
25 Oca 2022%14,6%15 yüksekSanayiye planlı elektrik kesintisi
1 May 2022%14,2%14 yüksekRamazan Bayramı arifesi ve 1 Mayıs aynı gün
7 Şub 2023%12,4%12 yüksekKahramanmaraş depremleri
5 May 2022%11,6%11 yüksekBayramı hafta sonuna bağlayan iş günü
26 May 2026%10,9%11 yüksekBayram öncesi idari izin (arife)
6 Şub 2023%10,5%11 yüksekKahramanmaraş depremleri
24 Oca 2022%9,9%10 yüksekSanayiye planlı elektrik kesintisi
25 May 2026%9,6%10 yüksekBayram öncesi idari izin

En kötü dokuz günün hepsinde model tüketimi olduğundan yüksek tahmin etti ve bunlar üç gruba ayrılıyor:

  • Öngörülemeyen olaylar. Ocak 2022'de doğal gaz sıkıntısı nedeniyle sanayiye uygulanan planlı elektrik kesintisi ve Şubat 2023'teki depremler. Geçmiş tüketime bakan hiçbir model bunları önceden bilemez.
  • Takvimde olmayan tatiller. Bayram tatili idari izinle dokuz güne uzatıldığında, aradaki iş günleri fiilen tatil oluyor. Kullandığım takvimde bu günler yok.
  • Üst üste binen tatiller. 1 Mayıs 2022 hem arife hem resmi tatildi; veride böyle bir gün daha önce hiç yoktu.

İkinci grup düzeltilebilir: idari izinler genellikle haftalar önceden açıklanıyor ve takvime elle eklenebilir. Bu, modelde yapılacak ilk iyileştirme.

Sınırlar

Kusursuz hava tahminiSıcaklıklı sonuç gerçekleşen sıcaklıkla hesaplandı; gerçek hava tahminiyle hata bir miktar artar.
Verinin bugünkü haliSeri sonradan düzeltilmiş olabilir. Tahmin günü eldeki ilk değerlerle sonuç farklı çıkabilir.
Kaba sıcaklık ölçüsüBeş şehrin düz ortalaması. Nem, bulutluluk ve güneş enerjisi üretimi modelde yok.
İdari izinler yokTakvim yalnızca resmi tatilleri içeriyor.
Ayar araması yapılmadıModel tek bir ayar takımıyla çalıştırıldı; daha iyi ayarlar olabilir.
Yalnızca gün öncesiSaatlik güncellenen kısa vadeli tahmin ya da haftalık ve aylık ufuklar bu çalışmanın dışında.

Sonuç

İyi bir talep tahmininin büyük kısmı model seçiminden değil, üç şeyden geldi: hedefi doğru kurmak (megavat yerine son haftaya oran), takvimi modele açıkça vermek ve modeli gerçekte kullanılacağı gibi, her gün yalnızca o güne kadar bilinenlerle sınamak.

Ortalama hata iyi bir özet değil. Model günlerin çoğunda %2'nin altında yanılıyor; asıl risk yılda birkaç günde toplanıyor ve o günlerin çoğu takvimle ilgili. Tahmini kullanan biri için “ortalama hata kaç” sorusundan daha yararlı soru, “hangi günlerde güvenmemeliyim” sorusu.

Veri: EPİAŞ Şeffaflık Platformu (gerçek zamanlı tüketim ve yük tahmin planı), Open-Meteo (sıcaklık). Test dönemi 1 Ocak 2022 – 30 Eylül 2026.

Electricity cannot be stored; every hour, as much has to be generated as is consumed. That is why the next day's consumption is forecast a day ahead, hour by hour. In this study I built such a forecasting model from 85,584 hours of Turkey's consumption data and tested it the way it would be used in real life, each day with only what was known up to that day.

Copying last week5.2%mean hourly error
Model2.1%without temperature
Model with temperature1.7%if the weather forecast were perfect

The question and the rule

The target is Turkey's total electricity consumption for each of the 24 hours of tomorrow (day D). The rule: when forecasting day D, the model may see consumption only up to the end of day D−2. The day in between is left out because the forecast has to be delivered a day in advance.

As the error measure I used the mean absolute percentage error (MAPE): the average, over hours, of how far the forecast is from the actual value in percent.

Data

Steps of the study
  1. Collect
    the data
  2. Understand
    consumption
  3. Build
    features
  4. Backtest
  5. Compare with the
    official forecast
  • Consumption: The real-time consumption series on the EPİAŞ Transparency Platform, January 1, 2017 – October 6, 2026. 85,584 hours with no missing or duplicated hour. Turkey has not used daylight saving time since 2016, so there is no clock-shift problem either.
  • Temperature: Hourly temperature for Istanbul, Ankara, Izmir, Adana and Erzurum from the Open-Meteo archive.
  • Calendar: Public and religious holidays; from these I derived holiday eves, the day after, bridge days and the month of Ramadan.
  • Official forecast: The Load Forecast Plan published on the same platform, the official hourly forecast for the next day. I used it as a benchmark.

What drives consumption?

I looked at the series before modelling; a good forecasting model has to know what moves consumption.

Hour of the day and day of the week

Consumption by hour of the day (ratio to the overall mean)
0.80.91.01.11.2
00:0006:0012:0018:0023:00

On working days consumption bottoms out at 05:00, climbs quickly after 08:00 and peaks at 11:00. On weekends the morning rise is slower and the peak comes at 20:00. On Sundays consumption is 12% below average.

Temperature

Consumption by daily mean temperature (°C; difference from that year's working-day mean)
−10%0%+10%+20%
<22–66–1010–1414–1818–2222–2626+

Working days that are not holidays. Temperature is the mean of five cities.

The curve is U-shaped. Consumption is lowest between 14 and 18 °C (−8%); as it gets hotter the air-conditioning load arrives, and above 26 °C consumption is 16% above the yearly mean. The rise in the cold is much smaller (+3%), because most heating runs on natural gas, not electricity. The record in the series is also a summer afternoon: July 28, 2025, at 14:00, 59,504 MW.

Holidays

Consumption on holidays compared with the normal days around them
  • Religious holiday days70 days−28%
  • Eve of a religious holiday20 days−19%
  • New Year's Day10 days−18%
  • Other public holidays58 days−8%

Each day is compared with the median of the same weekdays in the three weeks before and after.

On religious holidays consumption is 28% lower than on a normal day; 30.1% on the first day and 23.5% on the fourth. Even the eve is 19% lower. Because these holidays move about 11 days earlier every year, seasonality cannot capture the effect; the calendar has to be given to the model explicitly.

The series also carries a trace of the pandemic: consumption in April 2020 was 15% lower than in the same month a year earlier, and 17% lower in May 2020.

Model

I used gradient-boosted decision trees (scikit-learn, HistGradientBoostingRegressor). What the model is given:

  • Past consumption: The same hour 2, 3, 7 and 14 days earlier, plus the level and trend of the last week.
  • Calendar: Hour, day of week, day of year, holiday type, which day of the religious holiday, eve, bridge day, Ramadan.
  • Holidays in the past: How many of the reference days were holidays? Without this, in the week after a holiday the model takes the holiday's low consumption for “normal”.
  • Temperature (in the second model): The temperature of the forecast day and its difference from the last week.
Why is the target a ratio? Consumption grows year after year, and tree models cannot predict levels they never saw in training. So the model does not learn megawatts; it learns “by what percentage will this hour differ from the mean of the same hours over the last week”. That keeps the record levels of 2025 inside the range the model knows.

Backtest

I did not test the model with a single train and test split. From January 2022 to September 2026, at the start of every month I retrained it on the data known up to that day and had it forecast only that month: 57 months, 1,734 days, 41,616 hours. I did not change the model settings after looking at test results.

Results

MethodHourly error (MAPE)Mean error (MW)Daily peak hourDaily total
Same hour two days earlier8.0%3,0087.7%7.3%
Same hour last week5.2%1,9215.1%4.9%
Model without temperature2.1%8162.2%1.8%
Model with temperatureassumes a perfect weather forecast1.7%6421.6%1.3%
  • The simple baseline is not a hard bar to clear, but it is a necessary one. “The same hour last week” gives an error of 5.2%. The model brings that down to 2.1%.
  • On 77% of days the daily error is below 2%. The median daily error is 1.27%; a small number of bad days pull the mean up.
  • Temperature cuts the error by a fifth, but that figure was computed with the actual temperature of the forecast day. Below I look at how optimistic that is.

The real difference is on holidays

Hourly error (MAPE) by day type: baseline and model without temperature
  • Working daysame hour last week · 1,185 days4.2%
  • Working daymodel2.0%
  • Weekendsame hour last week · 472 days4.3%
  • Weekendmodel2.0%
  • Public holidaysame hour last week · 32 days10.5%
  • Public holidaymodel3.0%
  • Eve of a religious holidaysame hour last week · 10 days23.0%
  • Eve of a religious holidaymodel5.3%
  • Religious holidaysame hour last week · 35 days37.7%
  • Religious holidaymodel3.8%

On normal days the model halves the baseline's error. On religious holidays the baseline is off by 38%, because it copies last week's normal day onto the holiday; the model stays at 4%. The hardest day is the eve: people work half a day, and it happens only twice a year.

Two weeks around the 2026 Feast of Sacrifice: actual consumption and forecasts
20 GW30 GW40 GW
22 May24 May26 May28 May30 May1 Jun3 Jun

The shaded band is the model's prediction interval. The holiday ran from May 27 to 30.

The chart shows two things. The baseline is far too high during the holiday and far too low in the week after, because then it copies the holiday week. The model follows the actual values in both; but on the two days before the holiday (May 25–26) it, too, stays high. The reason is below.

How much does temperature help?

Model error (MAPE) by month
0%1%2%3%
JanFebMarAprMayJunJulAugSepOctNovDec

Temperature helps most in June and July: the air-conditioning load is very sensitive to the weather. In mild months such as May and October the two models are close.

Note: The model with temperature used the actual temperature of the forecast day. In reality only a weather forecast is available. So 1.7% is a lower bound; the realistic result lies somewhere between the two models.

To see where in between, I deliberately added error to the temperature: a random offset for each day, constant through that day. A model trained on data before 2025 gave these results for 2025–2026:

Daily error of the weather forecastModel error (MAPE)
No error (actual temperature)1.67%
±1 °C1.81%
±2 °C2.07%
±3 °C2.33%
Model that does not use temperature2.16%

Even if the weather forecast is off by 2 °C a day on average, using temperature beats not using it. At 3 °C the advantage is gone. Next-day weather forecasts are usually more accurate than that, so temperature is worth keeping in the model.

Comparison with the official forecast

EPİAŞ publishes an official hourly forecast for the next day, every day: the Load Forecast Plan. I put the two side by side over the same 41,592 hours, against the same actual values.

Official planModel, no temperatureModel, with temperature
All hours (MAPE)3.03%2.10%1.68%
Median hourly error2.24%1.53%1.16%
Excluding 11 days where the plan looks broken2.90%2.07%1.65%
20222.81%2.16%1.76%
20232.85%1.99%1.66%
20243.52%2.10%1.64%
20253.07%1.98%1.57%
20262.82%2.31%1.82%

On this data the model had a lower error than the official plan even without temperature, and was more accurate on 71% of days. The result points the same way in each of the five years.

How to read this comparison? It is not enough to say “the model is better than the official forecast”; there are three reasons for caution. First, I used the data as it stands today; the first values available when the forecast was made may have been revised since. Second, I do not know at what time and with what information the official plan is prepared. Third, the plan is made to operate the system, not only to minimise error; its objective may differ from mine. What can be said is this: with public data and a simple model, similar or better accuracy on the same measure is achievable.

How sure is the forecast?

An interval is often more useful than a single number: “tomorrow at 14:00, consumption will be between these two values with 80 percent probability.” For this I trained the same model twice more, to predict the 10% and 90% quantiles. A good interval should contain 80% of the actual values.

Day typeRaw intervalAdjusted with past errors
Working day64.5%80.7%
Weekend67.9%81.4%
Public holiday69.5%77.3%
Eve of a religious holiday52.1%58.8%
Religious holiday66.9%72.5%
All65.5%80.6%

The raw interval came out too narrow: only 65% of the actual values fell inside. The model is more confident than it should be. To correct this, each month I widened the interval using the test errors of the previous twelve months (a conformal method). Coverage rose to 81%; the mean width of the interval is 5.6% of consumption.

The correction fixes the average but not every day type: on holiday eves coverage is 59%. The days on which the model is most wrong are the days on which it knows least that it might be.

The days the model got most wrong

DayDay's error (MAPE)Forecast vs actualWhat happened?
26 Jan 202215.4%15% higherPlanned power cuts to industry
25 Jan 202214.6%15% higherPlanned power cuts to industry
1 May 202214.2%14% higherEve of Ramadan Feast and May 1 on the same day
7 Feb 202312.4%12% higherKahramanmaraş earthquakes
5 May 202211.6%11% higherWorking day bridging the holiday to the weekend
26 May 202610.9%11% higherAdministrative leave before the holiday (eve)
6 Feb 202310.5%11% higherKahramanmaraş earthquakes
24 Jan 20229.9%10% higherPlanned power cuts to industry
25 May 20269.6%10% higherAdministrative leave before the holiday

On all nine of the worst days the model forecast consumption too high, and they fall into three groups:

  • Unforeseeable events. The planned power cuts to industry during the natural gas shortage of January 2022, and the earthquakes of February 2023. No model that looks at past consumption can know these in advance.
  • Holidays that are not in the calendar. When a religious holiday is extended to nine days by administrative leave, the working days in between become holidays in practice. The calendar I used does not contain them.
  • Overlapping holidays. May 1, 2022 was both a holiday eve and a public holiday; the data had never contained such a day before.

The second group can be fixed: administrative leave is usually announced weeks ahead and can be added to the calendar by hand. That is the first improvement to make.

Limitations

Perfect weather forecastThe result with temperature uses actual temperatures; with a real weather forecast the error rises somewhat.
Data as it stands todayThe series may have been revised. With the first values available on the forecast day the result could differ.
A coarse temperature measureA plain mean of five cities. Humidity, cloud cover and solar generation are not in the model.
No administrative leaveThe calendar contains only official holidays.
No tuningThe model ran with a single set of settings; better ones may exist.
Day-ahead onlyShort-term forecasts updated hourly, or weekly and monthly horizons, are outside this study.

Conclusion

Most of a good demand forecast came not from the choice of model but from three things: setting the target correctly (a ratio to the last week instead of megawatts), giving the calendar to the model explicitly, and testing the model the way it will be used, each day with only what was known up to that day.

The mean error is not a good summary. The model is off by less than 2% on most days; the real risk is concentrated in a few days a year, and most of those are about the calendar. For someone using the forecast, a more useful question than “what is the average error” is “on which days should I not trust it”.

Data: EPİAŞ Transparency Platform (real-time consumption and load forecast plan), Open-Meteo (temperature). Test period January 1, 2022 – September 30, 2026.