Vertex AI ve BigQuery ML ile Zaman Serisi Tahmini

1. Genel Bakış

Bu laboratuvarda, TensorFlow ile bir zaman serisi tahmin modeli oluşturmayı ve ardından bu modelleri Vertex AI ile dağıtmayı öğreneceksiniz.

Öğrenecekleriniz

Öğrenecekleriniz:

  • Verileri makine öğrenimi modelinde kullanılabilecek şekilde dönüştürme
  • Verileri görselleştirme ve keşfetme
  • Zaman serisi tahmini modeli oluşturmak için BigQuery ML kullanma
  • LSTM ve CNN mimarilerini kullanarak TensorFlow ile zaman serisi tahmini modeli oluşturma

2. Zaman Serisi Tahminine Giriş

Bu codelab'in odak noktası, Google Cloud Platform'u kullanarak zaman serisi tahmin tekniklerini nasıl uygulayacağınızdır. Bu kurs, genel bir zaman serisi tahmini kursu değildir ancak kavramlara kısa bir bakış, kullanıcılarımız için faydalı olabilir.

Zaman Serisi Verileri

Öncelikle, zaman serisi nedir? Düzenli zaman aralıklarında kaydedilen verileri içeren bir veri kümesidir. Zaman serisi veri kümesi hem zamanı hem de zamana bağlı en az bir değişkeni içerir.

85af6a1ff05c69f2.png

Bileşenler

Bir zaman serisi şu bileşenlere ayrılabilir:

  • Trend: Makul ölçüde tahmin edilebilir bir kalıpla yukarı veya aşağı hareket eder.
  • Sezonluk: Belirli bir dönemde (ör. gün, hafta, ay, sezon vb.) yinelenir.
  • Rastgele: kalıntı dalgalanmaları

Mevsimsellik birden fazla katmana sahip olabilir. Örneğin, bir çağrı merkezi, haftanın belirli günlerinde ve belirli aylarda çağrı hacminde bir örüntü görebilir. Kalan, zaman dışındaki diğer değişkenlerle açıklanabilir.

6e8d45bbbbc388ec.png

Durağanlık (Stationarity)

Tahminlerde en iyi sonuçları elde etmek için zaman serisi verileri durağan hale getirilmelidir. Bu durumda, ortalama ve varyans gibi istatistiksel özellikler zaman içinde sabit kalır. Fark alma ve trendden arındırma gibi teknikler, ham verileri daha durağan hale getirmek için uygulanabilir.

Örneğin, aşağıdaki CO2 konsantrasyonu grafiğinde yukarı yönlü bir trendle tekrarlanan yıllık bir kalıp gösterilmektedir. ( Kaynak)

ab82857e2e7d0b89.png

Doğrusal trend kaldırıldıktan sonra veriler artık sabit bir ortalamaya sahip olduğundan tahmin için daha uygundur.

c936381ab1095528.png

Makine Öğrenimi İçin Zaman Serisi Verilerini Kullanma

Zaman serisi verilerini makine öğrenimi sorunlarında kullanmak için, önceki değerlerin gelecekteki değerleri tahmin etmek amacıyla kullanılabileceği şekilde dönüştürülmesi gerekir. Bu tabloda, hedefin tahmin edilmesine yardımcı olmak için gecikmeli değişkenlerin nasıl oluşturulduğuna dair bir örnek gösterilmektedir.

d667a941dbd470f5.png

Temel bilgilerden bahsettiğimize göre artık verileri keşfetmeye ve tahmin yapmaya başlayabiliriz.

3. Not defteri ortamınızı ayarlama

Verilere kısa bir giriş yaptığımıza göre şimdi model geliştirme ortamımızı ayarlayalım.

1. adım: API'leri etkinleştirin

BigQuery bağlayıcısı, BigQuery Storage API'yi kullanır. Konsolda BigQuery Storage API'yi arayın ve şu anda devre dışıysa API'yi etkinleştirin.

9895a2fd3cdf8f8c.png

2. adım: Vertex AI Workbench not defteri oluşturun

Cloud Console'unuzun Vertex AI Workbench bölümüne gidin ve Yeni Not Defteri'ni tıklayın. Ardından, en son TensorFlow Enterprise 2.x not defteri türünü GPU'suz olarak seçin:

4e7b73eabf2bc061.png

Varsayılan seçenekleri kullanıp Oluştur'u tıklayın. Örnek oluşturulduktan sonra Open JupyterLab'i (JupyterLab'i aç) seçin:

18c9f3c462aafaee.png

Ardından, JupyterLab'den bir Python 3 not defteri oluşturun:

58523671a252b95a.png

3. adım: Laboratuvar materyallerini indirin

JupyterLab arayüzünden yeni bir terminal penceresi oluşturun: Dosya -> Yeni -> Terminal.

Ardından, şu komutla kaynak materyali klonlayın:

git clone https://github.com/GoogleCloudPlatform/training-data-analyst

4. Verileri Keşfetme ve Görselleştirme

Bu bölümde şunları yapacaksınız:

  • Verileri zaman serisi halinde gruplandıran bir sorgu oluşturma
  • Eksik değerleri doldurma
  • Verileri görselleştirme
  • Zaman serilerini trend ve mevsimsel bileşenlere ayırma

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks simgesine gidin ve 01-explore.ipynb dosyasını açın.

2. adım

Not defterindeki tüm hücreleri temizleyin (Düzenle > Tüm Çıkışları Temizle), ilk birkaç hücreden birinde bölge, proje ve paket ayarlarını değiştirin, ardından hücreleri tek tek çalıştırın.

3. adım

Bu bölümde verileri içe aktardınız ve çeşitli boyutlarını görselleştirdiniz. Veriler hakkında daha net bir fikriniz olduğuna göre, bu verileri kullanarak makine öğrenimi modellemesine geçebilirsiniz.

55839e7bc0427915.png

5. BigQuery Zaman Serisi Tahmini ile Model Oluşturma

Bu bölümde şunları yapacaksınız:

  • Zaman serisi giriş verilerinizi bir BigQuery tablosuna aktarma
  • BQML söz dizimini kullanarak zaman serisi modeli oluşturma
  • Model parametrelerinizi ve doğruluğunuzu nasıl değerlendireceğinizi öğrenin.
  • Modelinizi kullanarak tahmin yapma

1. adım

Şimdi, incelediğimiz CSV'deki ham verileri içeren bir BigQuery tablosu oluşturacağız. Öncelikle CSV dosyasını not defteri ortamından indirerek başlayalım.

training-data-analyst/courses/ai-for-time-series/notebooks/data dizininde cta_ridership.csv dosyasını sağ tıklayın ve yerel ortamınıza indirin.

2. adım

Ardından, bu verileri bir BigQuery tablosuna yükleyeceğiz.

Konsolda BigQuery'ye gidin (arama yaparak veya bu bağlantıyı kullanarak):

649e7ab1c44b75e8.png

Tabloyu, ilgili tabloları gruplandıran yeni veya mevcut bir veri kümesine ekleyebilirsiniz. Henüz bir veri kümesi oluşturmadıysanız sol alt köşedeki projenizi tıklayıp sağ alt köşeden Veri Kümesi Oluştur'u seçebilirsiniz.

281b97020cd52f29.png

demo gibi istediğiniz bir adı seçin, varsayılanları kabul edin ve devam edin.

Bu veri kümesi seçiliyken yeni bir tablo oluşturmak için sağ alt köşedeki Tablo Oluştur'u seçin.

ad47810d44cfb289.png

Tablo oluşturma seçenekleri için şunları belirleyin:

  • Şu kaynaktan tablo oluşturun: Yükle
  • Dosya seçin: cta_ridership.csv
  • Tablo adı: cta_ridership
  • Şema: Şema ve giriş parametrelerini otomatik olarak algılamak için kutuyu işaretleyin.

213e4177e9e79544.png

3. adım

Şimdi modelimizi oluşturma zamanı. BigQuery ML, SQL'e benzer basit bir söz dizimi sunar. Bu sayede çok çeşitli model türleri oluşturabilirsiniz.

Sorgu düzenleyicide bu sorguyu yapıştırın/yazın. Gerekirse her iki yerde de demo yerine veri kümenizin adını girin:

CREATE OR REPLACE MODEL
  `demo.cta_ridership_model` OPTIONS(MODEL_TYPE='ARIMA',
    TIME_SERIES_TIMESTAMP_COL='service_date',
    TIME_SERIES_DATA_COL='total_rides',
    HOLIDAY_REGION='us') AS
SELECT
  service_date, total_rides
FROM
  `demo.cta_ridership`

Anlamak için söz diziminin temel öğelerini inceleyelim:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Bu ifade modeli oluşturur. Bu ifadenin CREATE MODEL gibi varyantları var ancak burada aynı ada sahip mevcut bir modeli değiştirmeyi tercih ettik.

OPTIONS(MODEL_TYPE=‘ARIMA' ... )

Burada model seçeneklerini tanımlıyoruz. İlk seçenek model türüdür. ARIMA'yı seçtiğinizde zaman serisi tahmini modeli oluşturulur.

TIME_SERIES_TIMESTAMP_COL=‘service_date'

Tarih/saat bilgilerinin bulunduğu sütun

TIME_SERIES_DATA_COL=‘total_rides'

Veri sütunu

HOLIDAY_REGION=‘us'

Bu isteğe bağlı parametre, modele tatil günlerini dahil etmemize olanak tanır. Önceki adımda yaptığımız veri keşfi, yolcu sayısının tatil günlerinde daha düşük olduğunu gösterdiğinden ve veriler Chicago, IL, ABD'den geldiğinden ABD'deki tatil günlerini modele dahil ediyoruz.

AS SELECT ... FROM ...

Bu bölümde, modeli eğitmek için kullanacağımız giriş verileri seçilir.

Sorguya ekleyebileceğiniz başka seçenekler de vardır. Örneğin, birden fazla zaman seriniz varsa bir sütun tanımlayabilir veya ARIMA modeli parametrelerinin otomatik olarak keşfedilip keşfedilmeyeceğini seçebilirsiniz. Daha fazla bilgiyi Zaman serisi modelleri için CREATE MODEL ifadesi söz dizimi referansında bulabilirsiniz.

4. Adım

Modelimiz hakkında daha fazla bilgi edinelim. Eğitim tamamlandıktan sonra başka bir sorgu çalıştıralım. Gerekirse demo değerini tekrar değiştirin:

SELECT
  *
FROM
  ML.EVALUATE(MODEL `demo.cta_ridership_model`)

Sonuçları yorumlayalım. Her satırda, parametreleri ve değerlendirme istatistikleriyle birlikte bir aday model görürsünüz. Sonuçlar, model kalitesinin göreli bir göstergesini sağlayan Akaike bilgi ölçütü (AIC) değerine göre artan sırada döndürülür. Bu nedenle, ilk satırdaki modelin AIC değeri en düşüktür ve bu model en iyi model olarak kabul edilir.

ARIMA modelinin p, d ve q parametrelerinin yanı sıra modelde keşfedilen mevsimselliği görebilirsiniz. Bu durumda, en iyi model hem haftalık hem de yıllık sezonluk etkileri içerir.

5b5b1e129c70a340.png

5. adım

Artık ML.FORECAST işleviyle tahmin yapmaya hazırız.

Aşağıdakileri yapıştırın/yazın (gerekirse demo yerine kendi adınızı yazın):

SELECT
  *
FROM
  ML.FORECAST(MODEL `demo.cta_ridership_model`,
    STRUCT(7 AS horizon))

Bu sorgu, modelimizi kullanarak 7 gün sonrasını tahmin eder. Döndürülen yedi satırı aşağıda görebilirsiniz. Tahmin, varsayılan olarak 0,95 olan ancak sorguda yapılandırılabilen bir güven aralığını da içerir.

b8a7f22657dc2d27.png

Harika bir iş çıkardık. Yalnızca birkaç BQML sorgusuyla zaman serisi modeli oluşturduk.

6. Özel Tahmin Modeli Oluşturma

Bu bölümde şunları yapacaksınız:

  • Aykırı değerleri verilerden kaldırma
  • Çok adımlı öngörme gerçekleştirme
  • Bir zaman serisi modeline ek özellikler dahil etme
  • Zaman serisi tahmini için nöral ağ mimarileri hakkında bilgi edinin: LSTM ve CNN
  • Holt-Winters Üstel Düzleştirme dahil olmak üzere istatistiksel modeller hakkında bilgi
  • Topluluk modelleri

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks simgesine gidin ve 02-model.ipynb dosyasını açın.

2. adım

Not defterindeki tüm hücreleri temizleyin (Düzenle > Tüm Çıkışları Temizle), ilk birkaç hücreden birinde bölge, proje ve paket ayarlarını değiştirin, ardından hücreleri tek tek çalıştırın.

3. adım

Not defterinde artık LSTM, CNN ve istatistiksel modeller gibi birden fazla model mimarisini incelediniz. Her model için, modelin test verilerine kıyasla nasıl performans gösterdiğini görebilirsiniz:

a528df58f4e6d372.png

7. Bulutta Eğitme ve Tahmin Etme

Bu bölümde şunları yapacaksınız:

  • Bulutta eğitim için veri ve model hazırlama
  • Modelinizi eğitme ve AI Platform Training ile işin ilerleme durumunu izleme
  • AI Platform Predictions ile modeli kullanarak tahmin etme

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks simgesine gidin ve 03-cloud-training.ipynb dosyasını açın.

2. adım

Not defterindeki tüm hücreleri temizleyin (Düzenle > Tüm Çıkışları Temizle), ilk birkaç hücreden birinde bölge, proje ve paket ayarlarını değiştirin, ardından hücreleri tek tek çalıştırın.

3. adım

Önceki bölümde, bir Workbench not defterinde model eğitip bu modelle tahminler yaptık. Bu bölümde, eğitim ve dağıtım için Vertex AI hizmetlerini kullanmak üzere not defterinizden Vertex AI için Python SDK'sını nasıl kullanacağımızı gösterdik.

a3f6b5dc895a24fb.png

8. Zorluk

Bu bölümde, öğrendiğiniz kavramları yeni bir veri kümesine uygulamayı deneyeceksiniz.

Ayrıntılı talimatlar vermeyeceğiz, sadece isterseniz bazı ipuçları paylaşacağız.

Amaç, New York Belediyesi'nden gelen 311 hizmet taleplerini tahmin etmektir. Bu acil olmayan talepler arasında gürültü şikayetleri, sokak lambası sorunları vb. yer alır.

1. adım

Veri kümesini anlayarak başlayalım.

Öncelikle City of New York 311 Service Requests veri kümesine erişin.

Verileri daha iyi tanımak için veri kümesi açıklamasında listelenen örnek sorgulardan birkaçını deneyin:

  • Dondurma kamyonlarıyla ilgili 311 talebinin sayısı nedir?
  • Partilerle ilgili en fazla 311 isteği hangi günler alıyor?

Veri kümesine nasıl erişileceğini görmek için BigQuery kullanıcı arayüzünde Sorgu Oluştur'u seçin. Select ifadesinin bigquery-public-data.new_york_311.311_service_requests sorgusu yaptığını unutmayın.

2. adım

Başlamaya hazırız. Bu bölümde, bu verilerle çalışmak için Keşfet ve Görselleştir not defterinde değişiklikler yapın.

İpuçları

  • 01-explore.ipynb not defterini kopyalayın ve kopyayı kullanarak çalışmaya başlayın.
  • Verileri keşfetmek için şu sorguyu deneyin:
from google.cloud import bigquery as bq

sql = """
SELECT * FROM `bigquery-public-data.new_york_311.311_service_requests` LIMIT 5
"""

client = bq.Client(project=PROJECT)
df = client.query(sql).to_dataframe()

df.head()
  • Olayların aylık sayılarını almak için şu sorguyu kullanın:
SELECT
  COUNT(unique_key) as y,
  DATE_TRUNC(DATE(created_date), month) as ds  
FROM `bigquery-public-data.new_york_311.311_service_requests`
GROUP by ds ORDER BY ds asc
  • Sabitler bölümündeki sütun değişkenlerini güncelleyin. Yukarıdaki sorguda hedef sütun y, tarih sütunu ise ds'dir. Ek özellik yoktur.
  • Bir sonraki laboratuvar için verileri dışa aktardığınız dosyanın adını değiştirebilirsiniz.
  • Verileri dışa aktarmak için: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

3. adım

Şimdi aylık verilerle bir zaman serisi modeli oluşturalım.

İpuçları:

  • 02-model.ipynb not defterini kopyalayın ve kopyayı kullanarak çalışmaya başlayın.
  • Veri kümesi parametrelerini güncelleyin:
  • target_col ve ts_col parametrelerini yeni veri kümenizle eşleşecek şekilde güncelleyin.
  • Model parametrelerini güncelleyin:
  • Sıklık aylık olarak değiştirildi (ayın başlangıcı için kod "MS"dir)
  • Giriş adımları: 12 (yeniden inceleme aralığı 12 aydır)
  • Çıkış adımları: 3 (3 ay ileriye dönük tahmin)
  • Sezonlar: 12 (Sezonlukluk 12 aydır)
  • Önceki not defterinde değiştirdiyseniz giriş dosyasının adını değiştirin.
  • Sorguyu ay ortasında çalıştırırsanız son aya ait aylık toplam, beklenenden çok daha düşük olur. Bu nedenle, bu laboratuvarın amaçları doğrultusunda, aşağıdaki kodu kullanarak veri kümesinden son ayı kaldıralım: df = df[:-1]
  • Verilerde belirgin aykırı değerler yok. Bu nedenle, bu hücreleri atlayın veya yorum satırı yapın.
  • Bu yeni model için LSTM birimlerini, CNN filtrelerini ve çekirdek boyutunu ayarlayın.

9. Temizleme

Bu not defterini kullanmaya devam etmek istiyorsanız kullanmadığınız zamanlarda kapatmanız önerilir. Cloud Console'unuzdaki Workbench kullanıcı arayüzünde not defterini ve ardından Durdur'u seçin:

57213ef2edad9257.png

Bu laboratuvarda oluşturduğunuz tüm kaynakları silmek istiyorsanız çalışma tezgahı not defterini durdurmak yerine silmeniz yeterlidir.

Cloud Console'unuzdaki gezinme menüsünü kullanarak Storage'a gidin ve model öğelerinizi depolamak için oluşturduğunuz her iki paketi de silin (UYARI: Bunu yalnızca bu laboratuvar için yeni paketler oluşturduysanız yapın).