Prophet ile Zaman Serisi Tahmini: Mevsimsellik, Tatiller ve Değişim Noktaları
Beceri rehberi

Prophet ile Zaman Serisi Tahmini: Mevsimsellik, Tatiller ve Değişim Noktaları

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 6 dk okuma

Prophet, trendi, mevsimsel döngüleri ve tatil etkilerini birlikte modelleyen bir tahmin kütüphanesidir. Veriyi hazırlamayı, ilk tahmini üretmeyi, mevsimsellik ve değişim noktalarını ayarlamayı ve sonucu doğrulamayı gösterir.

Bir bakışta

  1. Prophet iki sütun bekler: ds ve y. ds tarihi, y tahmin edilecek sayısal değeri taşır; geri kalan adımlar fit ve predict ile ilerler.
  2. Seri büyüdükçe dalgalanma büyüyorsa çarpımsal mod seçilir. Varsayılan toplamsal mod, büyüyen mevsimselliği yanlış temsil eder.
  3. Tatil ve dış değişkenler modele açıkça verilir. Dış değişkenin tahmin döneminde de bilinmesi gerekir.
  4. Değişim noktası esnekliği tek ana ayardır. Esnekliği artırmak trendi kıvırır, azaltmak sertleştirir; ayar çapraz doğrulamayla seçilir.
  5. Doğrulama zaman sıralı yapılır. Rastgele bölme gelecekten bilgi sızdırır; hata metrikleri ufka göre okunur.

Prophet nedir, hangi işe yarar

Prophet, zaman serisi tahmini için geliştirilmiş açık kaynaklı bir kütüphanedir. Tarihe bağlı bir değeri, örneğin günlük satış adedini, haftalık ziyaretçi sayısını ya da aylık talebi ileriye taşımak için trendi, mevsimsel döngüleri ve tatil gibi özel günlerin etkisini birlikte modeller. Python ve R için sunulur.

Kütüphaneyi cazip kılan, istatistik uzmanı olmayan bir analistin de makul bir ilk tahmin üretebilmesidir: veriyi iki sütuna indirir, modeli eğitir, geleceğe uzatır ve bileşen grafiğiyle modelin ne öğrendiğine bakarsınız. Belirgin mevsimselliği olan iş verileri için uygun bir başlangıç noktasıdır.

Ama bir araçtır, sihir değildir. Seride yapısal bir kırılma varsa, ilgili dış etkenleri modele vermezseniz ya da doğrulamayı atlarsanız çıktı yanıltıcı olur. Genel bir zaman serisi çerçevesi ya da ARIMA yaklaşımı için zaman serisi analizi sayfasına, tahminin iş yönetimindeki yerine ise yapay zekayla tahminleme sayfasına bakabilirsiniz; bu sayfa yalnız Prophet'in uygulanışını anlatır.

Veriyi hazırlamak ve ilk tahmini üretmek

Prophet iki sütun bekler: ds adlı tarih sütunu ve y adlı, tahmin edilecek sayısal değer. Tarih sütunu pandas'ın anladığı bir biçimde olmalıdır. Kendi verinizdeki sütunları bu adlara dönüştürürsünüz.

import pandas as pd from prophet import Prophet

df = pd.read_csv("satis.csv") df = df.rename(columns={"tarih": "ds", "adet": "y"}) df["ds"] = pd.to_datetime(df["ds"])

m = Prophet() m.fit(df)

gelecek = m.make_future_dataframe(periods=ufuk_gun) tahmin = m.predict(gelecek) tahmin[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail() fig = m.plot(tahmin)

make_future_dataframe, geçmiş tarihleri de içeren, ufkun sonuna kadar uzanan bir tarih tablosu üretir. Burada ufuk_gun, kaç gün ilerisini tahmin ettiğinizi tutan bir değişkendir ve günlük verideki örneğe karşılık gelir. predict çıktısında tahmin yhat sütunundadır; yhat_lower ve yhat_upper belirsizlik aralığını verir. Belirsizlik aralığını rapora mutlaka koyun: tek bir çizgi, kesinlik varmış izlenimi verir.

Mevsimsellik: toplamsal mı, çarpımsal mı

Prophet varsayılan olarak mevsimsel etkiyi trende ekler. Yani bir ayın haftalık dalgalanması, satış seviyesi ne olursa olsun yaklaşık aynı büyüklükte kalır. Eğer seri büyüdükçe mevsimsel dalgalanma da büyüyorsa bu varsayım yanlış olur: erken dönemde mevsimselliği olduğundan fazla, sonra olduğundan az gösterirsiniz.

Belgelerde bu durum havayolu yolcu verisiyle örneklenir; çözüm mevsimsellik modunu çarpımsal yapmaktır:

m = Prophet(seasonality_mode="multiplicative") m.fit(df)

Bu modda mevsimsel etki trendin yüzdesi olarak görünür ve tatil etkileri de çarpımsal olur. Gerekirse tek tek bileşenler için mode seçeneğiyle toplamsal ya da çarpımsal belirleyebilirsiniz; karışık kullanım nadirdir ve belgeler özel bir nedeniniz yoksa kaçınmanızı önerir.

Karar için serinin grafiğine bakın: dalgalanma seviyeyle birlikte genişliyorsa çarpımsal, sabit kalıyorsa toplamsal mod uygundur. Emin değilseniz iki modu da çapraz doğrulamayla karşılaştırın.

Haftalık ve yıllık dışında bir döngü, örneğin aylık, add_seasonality ile eklenir. Fonksiyon bir ad, günlük dönem uzunluğu ve Fourier derecesi alır:

m.add_seasonality(name="aylik", period=ay_gun, fourier_order=fourier_derecesi)

Fourier derecesi arttıkça mevsimsel şekil esner; çok yüksek değer gürültüyü öğrenir.

Şekil 1

Mevsimsel dalgalanmanın seviyeyle ilişkisi modu seçer

Mevsimsellik modu

Seri büyüdükçe mevsimsel dalgalanma da büyüyor mu?
  1. Evet, dalgalanma seviyeyle birlikte genişliyorÇarpımsal modseasonality_mode değeri multiplicative olur.
  2. Hayır, dalgalanma yaklaşık sabit kalıyorToplamsal mod (varsayılan)Ek ayar gerekmez.
  3. Emin değilimİkisini de çapraz doğrulayınHata metriklerini karşılaştırın.
Kaynak: Prophet belgeleri: çarpımsal mevsimsellikMindset Institute

Tatil etkileri ve dış değişkenler

Bayram, kampanya ya da resmî tatil gibi günler seriyi mevsimsel örüntünün dışına çıkarır. Prophet bunları tatil tablosuyla alır. Tablo holiday ve ds adlı iki sütun ister ve her tatilin her tekrarı için bir satır içerir. İsteğe bağlı lower_window ve upper_window sütunları etkiyi tarihin öncesine ve sonrasına yayar; bayram öncesi alışveriş artışı gibi durumlar için işe yarar.

bayramlar = pd.DataFrame({"holiday": "bayram", "ds": bayram_tarihleri}) m = Prophet(holidays=bayramlar)

bayram_tarihleri, kendi tablonuzdaki tarih listesidir. Prophet'in yerleşik ülke tatilleri de vardır; add_country_holidays ülke adıyla çağrılır ve tatilleri Python holidays paketinden alır. Dini bayramlar takvime göre kaydığı için bu tarihlerin çıktısını mutlaka kendi takviminizle karşılaştırın.

Bir de dış değişkenler vardır: kampanya bayrağı, fiyat değişimi, reklam harcaması. add_regressor ile eklenir ve modeli eğitmeden önce çağrılmalıdır. Dış değişken, tahmin döneminde de bilinmiyorsa kullanışsızdır; gelecekteki kampanya takvimi elinizde değilse regresör ekleyemezsiniz.

Trend ve değişim noktaları

Gerçek serilerde trend sabit bir doğru değildir: ürün lansmanı, fiyat artışı ya da pazar değişikliği eğimi kırar. Prophet bu kırılmaları, aday değişim noktaları koyarak yakalar. Varsayılan olarak çok sayıda aday nokta koyulur, ama seyrek öncül nedeniyle çoğu kullanılmaz.

Değişim noktaları serinin yalnızca ilk beşte dördünde aranır; böylece son dönemdeki dalgalanma trendi tahminde yanlış yöne uzatmaz. Bu aralığı changepoint_range ile değiştirebilirsiniz. Asıl ayar düğmesi ise changepoint_prior_scale parametresidir. Değeri artırırsanız trend esner, azaltırsanız sertleşir. Belgeler bu parametreyi aday nokta sayısını değiştirmekten daha iyi bir ayar olarak önerir.

Trend gerçek değişimleri kaçırıyorsa, esneklik yetersizdir; gürültüyü öğrenip tahmini dalgalandırıyorsa esneklik fazladır. Hangisi olduğunu add_changepoints_to_plot ile görebilirsiniz: bulunan noktaları grafiğin üzerine çizer. Çıkan noktaların iş takviminizde bir karşılığı yoksa şüphelenin.

Modeli doğrulamak: çapraz doğrulama ve hata metrikleri

Tahmin güzel görünmesi kadar doğru olmalıdır. Zaman serisinde veriyi rastgele bölmek yanlıştır; gelecekteki bilgi eğitime sızar. Prophet bu nedenle zaman sıralı çapraz doğrulama sağlar: belirli kesme tarihlerinde modeli yeniden eğitir ve sonraki ufuk boyunca tahmin eder.

from prophet.diagnostics import cross_validation, performance_metrics

df_cv = cross_validation(m, initial=baslangic, period=aralik, horizon=ufuk) df_p = performance_metrics(df_cv)

Belgelere göre initial, ilk eğitim döneminin uzunluğudur ve varsayılanı ufkun üç katıdır. period, kesme tarihleri arasındaki aralıktır ve varsayılan olarak ufkun yarısıdır. horizon tahmin ufkunuzdur. Python'da bu değerler pandas'ın anladığı zaman aralığı metinleridir.

performance_metrics, ufka göre mse, rmse, mae, mape, mdape, smape ve aralık kapsama oranını hesaplar. Metriği iş sorunuza göre seçin: sipariş miktarı gibi sıfıra yakın değerlerde yüzde tabanlı metrik yanıltabilir. Mevsimsellik modunu, tatil tablosunu ve değişim noktası esnekliğini bu metriklerle karşılaştırarak seçin.

Şekil 2

Doğrulama döngüsü, ayarın işe yarayıp yaramadığını söyler

Prophet'te zaman sıralı doğrulama

  1. Kesme tarihleri belirlenirinitial, period ve horizon ile pencereler kurulur.
  2. Model her kesmede eğitilirYalnız kesme öncesi veri kullanılır.
  3. Ufuk boyunca tahmin edilirGerçek değerlerle karşılaştırılır.
  4. Metrikler özetlenirperformance_metrics ufka göre hatayı verir.
Kaynak: Prophet belgeleri: tanılamaMindset Institute

Sık yapılan hatalar

İlk hata, doğrulama yapmadan yalnızca görsel uyuma güvenmektir: eğitim verisine çok iyi oturan model geleceği iyi tahmin etmeyebilir. İkinci hata, belirsizlik aralığını göstermemektir; karar veren kişi tek bir çizgiye fazla güvenir.

Üçüncü hata, ayarları körü körüne büyütmektir. Esnekliği artırmak ya da mevsimselliği karmaşıklaştırmak eğitim hatasını azaltır ama tahmini bozar. Dördüncü hata, tahmin döneminde bilinmeyen bir dış değişkeni modele eklemektir. Beşinci hata ise iş bağlamını görmezden gelmektir: pandemi, yangın, fiyat değişimi gibi tek seferlik olayları ayrı işaretlemezseniz model bunları trend sanabilir.

Son olarak, veri kalitesi: tarihlerde boşluk, tekrar eden günler ya da farklı birimlerle toplanmış değerler modelden önce temizlenmelidir.

Bu beceriyi Mindset programlarında nerede çalışırsınız

Zaman serisi tahmini, talep planlama, finans ve operasyon ekiplerinin ortak ihtiyacıdır. Yapay Zeka Destekli İş Analitiği Uzmanlık Programı, yapay zeka ile tahminleme ve stratejik planlama modülüyle tahminleri karar süreçlerine bağlar. Veri Bilimci Programı ise istatistiksel temeller ve makine öğrenmesi algoritmaları modülleriyle bu tür modellerin dayandığı altyapıyı kurar.

İlgili Mindset programı

Yapay Zeka (AI) Destekli İş Analitiği Uzmanlık Programı

Sık sorulanlar

Sık sorulan sorular

Prophet için hangi sütun adları gerekir?

Tarih sütunu ds, tahmin edilecek değer sütunu y adını taşımalıdır. Tarih sütunu pandas'ın tarih olarak anladığı biçimde olmalı, y ise sayısal olmalıdır. Kendi tablonuzdaki sütunları rename ile bu adlara çevirmeniz yeterlidir; ek sütunlar regresör olarak kullanılabilir.

Prophet ARIMA'dan daha mı iyidir?

Genel bir üstünlük söylenemez. Prophet, belirgin mevsimselliği ve tatil etkileri olan iş serilerinde hızlı ve yorumlanabilir bir başlangıç sunar. ARIMA ailesi ise farklı varsayımlarla çalışır. Hangisinin iyi olduğunu kendi verinizde zaman sıralı çapraz doğrulamayla karşılaştırarak görürsünüz.

Türkiye bayramları için ayrı tablo oluşturmak gerekir mi?

Yerleşik ülke tatilleri bir paketten gelir ve dini bayramlar takvime göre kaydığı için çıktıyı kontrol etmeniz gerekir. En güvenli yol, kendi takviminizden bir tatil tablosu hazırlayıp bayramın öncesi ve sonrası etkisini pencere sütunlarıyla tanımlamaktır.

Tahmin ufkunu ne kadar uzun seçmeliyim?

Ufku iş kararının ihtiyacı belirlemeli: tedarik planı kısa, bütçe uzun bir ufuk ister. Ufuk uzadıkça belirsizlik aralığı genişler ve hata artar. Çapraz doğrulamada ufku gerçek kullanım ufkunuza eşitleyin; kısa ufukta iyi çıkan model uzun ufukta aynı başarıyı göstermeyebilir.

Modelin neyi öğrendiğini nasıl görebilirim?

Eğitilmiş modelle bileşen grafiğini çizebilirsiniz; trend, haftalık ve yıllık mevsimsellik ile tatil etkileri ayrı ayrı görünür. Bu grafik, modelin iş bilginizle uyuşup uyuşmadığını kontrol etmenin en kolay yoludur: haftanın hangi günü yükseliyor, yılın hangi dönemi düşüyor?

Prophet ile Zaman Serisi Tahmini: Python Rehberi