Vertex AI ve BigQuery ML ile Zaman Serisi Tahmini

1. Genel Bakış

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

Öğrendikleriniz

Öğrenecekleriniz:

  • Verileri, ML modelinde kullanılabilecek şekilde dönüştürme
  • Verileri görselleştirin ve keşfedin
  • Zaman serisi tahmin modeli oluşturmak için BigQuery ML'yi kullanma
  • LSTM ve CNN mimarilerini kullanarak TensorFlow ile zaman serisi tahmin modeli oluşturma

2. Zaman Serisi Tahminine Giriş

Bu codelab'de, Google Cloud Platform'u kullanarak zaman serisi tahmin tekniklerinin nasıl uygulanacağı ele alınmaktadır. Genel bir zaman serisi tahmin kursu değildir ancak kavramlara dair kısa bir tur kullanıcılarımız için faydalı olabilir.

Zaman Serisi Verileri

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

85af6a1ff05c69f2.png

Bileşenler

Zaman serisi, bileşenlere ayrılabilir:

  • Trend: makul ölçüde öngörülebilir bir düzende yukarı veya aşağı hareket eder
  • Sezonluk: Gün, hafta, ay, mevsim gibi belirli bir dönem boyunca tekrarlanır.
  • Rastgele: Kalan dalgalanmalar

Birden fazla mevsimsellik katmanı olabilir. Örneğin, bir çağrı merkezi, haftanın belirli günlerinde ve belirli aylarda arama hacminde bir kalıp görebilir. Artık, süre dışındaki diğer değişkenlerle de açıklanabilir.

6e8d45bbbbc388ec.png

İstasyon

Öngörmede en iyi sonuçları elde etmek için zaman serisi verilerinin, ortalama ve varyans gibi istatistiksel özelliklerin zaman içinde sabit olduğu durağan hale getirilmesi gerekir. Ham verileri daha sabit hale getirmek için farklılaştırma ve azalan gibi teknikler ham verilere uygulanabilir.

Örneğin, CO2 konsantrasyonunun altındaki grafikte, yükselen bir trendle tekrarlanan bir yıllık model 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 uygun hale gelir.

c936381ab1095528.png

Makine Öğrenimi İçin Zaman Serisi Verilerini Kullanma

Bir makine öğrenimi probleminde zaman serisi verilerini kullanmak için, gelecekteki değerleri tahmin etmek üzere önceki değerlerin kullanılabilmesini sağlayacak şekilde dönüştürülmesi gerekir. Bu tabloda, hedefi tahmin etmeye yardımcı olması için gecikmeli değişkenlerin nasıl oluşturulduğuna dair bir örnek gösterilmektedir.

d667a941dbd470f5.png

Bazı temel bilgileri öğrendiğimize göre verileri ve öngörmeyi keşfetmeye 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ı oluşturalı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 devre dışıysa API'yi etkinleştirin.

9895a2fd3cdf8f8c.png

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

Cloud Console'un Vertex AI Workbench bölümüne gidip New Notebook'u (Yeni Not Defteri) tıklayın. Ardından, GPU'suz en son TensorFlow Enterprise 2.x not defteri türünü seçin:

4e7b73eabf2bc061.png

Varsayılan seçenekleri kullanın ve ardından Oluştur'u tıklayın. Örnek oluşturulduktan sonra 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ünde yeni bir Terminal penceresi oluşturun: Dosya -> Yeni -> Terminal'e gidin.

Ardından şu komutla kaynak malzemeyi 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 bir zaman serisi halinde gruplandıran bir sorgu oluşturma
  • Eksik değerleri doldurun
  • Verileri görselleştirme
  • Zaman serilerini trendlere ve dönemlik bileşenlere ayırma

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks bölümüne gidip 01-explore.ipynb uygulaması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. Verileri daha net bir şekilde anladığınıza göre, bu verileri kullanarak makine öğrenimi modellemesine geçmeye hazırsınız demektir.

55839e7bc0427915.png

5. BigQuery Zaman Serisi Tahmini ile Model Oluşturma

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

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

1. adım

Az önce incelediğimiz CSV'deki ham verileri içeren bir BigQuery tablosu oluşturacağız. 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 öğesini sağ tıklayın ve yerel ortamınıza İndir'i seçin.

2. adım

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

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

649e7ab1c44b75e8.png

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

281b97020cd52f29.png

Tercih ettiğiniz bir ad (ör. demo) seçin, varsayılanları kabul edin ve devam edin.

Söz konusu 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 aşağıdakileri belirleyin:

  • Şu kaynaktan tablo oluşturun: Yükleme
  • Dosya seçin: cta_ridership.csv
  • Tablo adı: cta_ridership
  • Şema: Şema ve giriş parametreleri'nin otomatik olarak algılanması 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 sunarak çok çeşitli model türleri oluşturabilmenizi sağlar.

Sorgu düzenleyicide, bu sorguyu yapıştırın/yazın. Gerekiyorsa demo kısmını her iki yerde de veri kümenizin adıyla değiştirin:

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 gözden geçirelim:

CREATE OR REPLACE MODEL
demo.cta_ridership_model

Bu ifade, modeli oluşturur. Bu ifadenin farklı çeşitleri vardır, ör. CREATE MODEL var, ancak biz 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ü olacak. ARIMA seçildiğinde zaman serisi öngörme 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'

İsteğe bağlı bu parametre, modele tatilleri dahil etmemize olanak tanır. Bir önceki adımdaki veri keşfimiz tatil günlerinde yolcu sayısının daha düşük olduğunu gösterdiğinden ve veriler Chicago, IL, ABD'den geldiğinden modele ABD'deki tatilleri dahil ettik.

AS SELECT ... FROM ...

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

Sorguya, birden fazla zaman seriniz varsa bir sütun tanımlama veya ARIMA model parametrelerinin otomatik olarak keşfedilip keşfedilmeyeceğini seçme gibi ekleyebileceğiniz başka seçenekler de vardır. Daha fazla ayrıntıyı Zaman serisi modelleri için CREATE MODEL ifadesi söz dizimi referansında bulabilirsiniz.

4. Adım

Şimdi modelimiz hakkında daha fazla bilgi edinelim. Eğitim tamamlandıktan sonra başka bir sorgu çalıştıralım. Gerekirse demo bölümünü bu sorguyla 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österilir. Sonuçlar, AIC'ye veya Akaike bilgi ölçütüne göre artan düzende döndürülür. Bu ölçütler, model kalitesinin göreli bir göstergesidir. Dolayısıyla, ilk satırdaki model en düşük AIC'ye sahiptir ve en iyi model olarak kabul edilir.

ARIMA modelinin p, d ve q parametrelerini ve modelde bulunan sezonu görebilirsiniz. Bu durumda, en üst model hem haftalık hem de yıllık mevsimselliği içerir.

5b5b1e129c70a340.png

5. adım

Artık ML.FORECAST işleviyle tahminde bulunmaya hazırız.

Aşağıdakini yapıştırın/yazın (gerekirse demo kısmını değiştirin):

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

Bu sorgu, modelimizi kullanarak 7 günlük dönemi tahmin ediyor. Aşağıda döndürülen yedi satırı görebiliriz. Tahmin, varsayılan olarak 0,95'e ayarlanmış ancak sorguda yapılandırılabilir bir güven aralığı da içerir.

b8a7f22657dc2d27.png

Tebrikler: Sadece birkaç BQML sorgusu içeren bir zaman serisi modeli oluşturduk.

6. Özel Tahmin Modeli Oluşturma

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

  • Aykırı değerleri verilerden çıkarın
  • Çok adımlı öngörme gerçekleştirme
  • 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 Üssel Yumuşatma dahil olmak üzere istatistiksel modeller hakkında bilgi edinin
  • Topluluk modelleri

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks bölümüne gidip 02-model.ipynb uygulaması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 pek çok model mimarisini keşfettiniz: LSTM, CNN ve istatistiksel modeller. Her model için modelin test verilerine göre nasıl performans gösterdiğini görebilirsiniz:

a528df58f4e6d372.png

7. Bulutta Eğitim ve Tahmin

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

  • Verileri ve modelleri bulutta eğitim için hazırlama
  • AI Platform Training ile modelinizi eğitin ve işin ilerlemesini izleyin
  • AI Platform Predictions ile modeli kullanarak tahmin yapma

1. adım

Vertex AI Workbench'te training-data-analyst/courses/ai-for-time-series/notebooks bölümüne gidip 03-cloud-training.ipynb uygulaması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 bir model eğitip bu modelle tahminde bulunduk. Bu bölümde, eğitim ve dağıtım amacıyla Vertex AI hizmetlerinden yararlanmak üzere not defterinizdeki Vertex AI için Python SDK'sının nasıl kullanılacağını gösterdik.

a3f6b5dc895a24fb.png

8. Zorluk

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

Size ayrıntılı talimatlar yerine yalnızca bazı ipuçları vereceğiz (isterseniz).

Hedef, New York şehrinden 311 hizmet isteğini tahmin etmektir. Acil olmayan bu istekler arasında gürültü şikayetleri, sokak lambası sorunları vb. yer alır.

1. adım

Öncelikle veri kümesini anlayarak başlayalım.

Önce New York Belediyesi 311 Hizmet İstekleri veri kümesine erişin.

Verileri daha iyi anlamak için veri kümesi açıklamasında listelenen birkaç örnek sorguyu deneyin:

  • Dondurma kamyonlarıyla ilgili 311 talebin sayısı kaçtır?
  • Taraflarla ilgili en çok 311 talep hangi günlerde alınıyor?

BigQuery kullanıcı arayüzünde, veri kümesine nasıl erişeceğinizi görmek için Sorgu Oluştur'u seçin. Select deyiminin bigquery-public-data.new_york_311.311_service_requests öğesinden sorgu 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 üzerinde çalışmaya başlayın.
  • Verileri incelemek 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()
  • Aylık olay 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
  • Sabit değerler 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 dosya adını değiştirmeyi düşünün.
  • Verileri şununla dışa aktarın: df.to_csv(YOUR-EXPORT-FILENAME, index=False)

3. adım

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

İpuçları:

  • 02-model.ipynb not defterini kopyalayın ve üzerinde ç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:
  • Aylık sıklık (ay başlangıcı için kod "MS" şeklindedir)
  • Giriş adımları: 12 (yeniden inceleme aralığı 12 aydır)
  • Çıkış adımları: 3 (3 ay sonrası için tahmin)
  • Sezonlar: 12 (Sezon 12 aydır)
  • Önceki not defterinde değiştirdiyseniz girilen dosya adını değiştirin.
  • Sorguyu ay ortasında çalıştırırsanız son ayın aylık toplamı beklenenden çok daha düşük olur. Bu laboratuvara uygun şekilde, son ayı veri kümesinden kaldırmak için: df = df[:-1]
  • Verilerde belirgin aykırı değerler gözükmüyor. Bu nedenle, bu hücreleri atlayın veya yorumlayın.
  • Bu yeni model için LSTM birimleri, CNN filtreleri ve çekirdek boyutunu ayarlayın.

9. Temizleme

Bu not defterini kullanmaya devam etmek istiyorsanız, kullanılmadığında devre dışı bırakmanız önerilir. Cloud Console'unuzdaki Workbench kullanıcı arayüzünde not defterini, ardından Durdur'u seçin:

57213ef2edad9257.png

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

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