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.
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.
İ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)
Doğrusal trend kaldırıldıktan sonra veriler, artık sabit bir ortalamaya sahip olduğundan tahmin için daha uygun hale gelir.
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.
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.
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:
Varsayılan seçenekleri kullanın ve ardından Oluştur'u tıklayın. Örnek oluşturulduktan sonra JupyterLab'i aç'ı seçin:
Ardından, JupyterLab'den bir Python 3 not defteri oluşturun:
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.
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):
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.
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.
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
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:
| Bu ifade, modeli oluşturur. Bu ifadenin farklı çeşitleri vardır, ör. |
| 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. |
| Tarih/saat bilgilerinin bulunduğu sütun |
| Veri sütunu |
| İ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. |
| 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.
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.
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:
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.
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
vets_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:
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).