1. Ringkasan
Di lab ini, Anda akan mempelajari cara membangun model perkiraan deret waktu dengan TensorFlow, lalu mempelajari cara men-deploy model ini dengan Vertex AI.
Yang Anda pelajari
Anda akan mempelajari cara:
- Mentransformasi data agar dapat digunakan dalam model ML
- Memvisualisasikan dan mengeksplorasi data
- Menggunakan BigQuery ML untuk membuat model perkiraan deret waktu
- Membangun model perkiraan deret waktu dengan TensorFlow menggunakan arsitektur LSTM dan CNN
2. Pengantar Perkiraan Deret Waktu
Fokus codelab ini adalah cara menerapkan teknik perkiraan deret waktu menggunakan Google Cloud Platform. Ini bukanlah kursus perkiraan deret waktu umum, tetapi tur singkat tentang konsep mungkin berguna bagi pengguna kami.
Data Deret Waktu
Pertama, apa yang dimaksud dengan deret waktu? Ini adalah {i>dataset<i} dengan data yang direkam secara berkala. Set data deret waktu berisi waktu dan setidaknya satu variabel yang bergantung pada waktu.
Komponen
Deret waktu dapat diurai menjadi komponen:
- Tren: bergerak naik atau turun dalam pola yang cukup dapat diprediksi
- Musiman: berulang selama periode tertentu seperti hari, minggu, bulan, musim, dll.
- Acak: fluktuasi residu
Ada beberapa lapisan tren musiman. Misalnya, pusat panggilan mungkin melihat pola volume panggilan pada hari-hari tertentu dan pada bulan-bulan tertentu. Sisanya mungkin dapat dijelaskan oleh variabel lain selain waktu.
Stasiuneritas
Untuk mendapatkan hasil terbaik dalam perkiraan, data deret waktu harus dibuat stasioner, dengan sifat statistik seperti rata-rata dan varians yang konstan dari waktu ke waktu. Teknik seperti membedakan dan menurunkan tren dapat diterapkan pada data mentah agar tidak bergerak.
Misalnya, diagram di bawah konsentrasi CO2 menunjukkan pola tahunan yang berulang dengan tren naik. ( Sumber)
Setelah menghapus tren linear, data tersebut lebih cocok untuk perkiraan karena sekarang memiliki rata-rata yang konstan.
Menggunakan Data Deret Waktu untuk Machine Learning
Untuk menggunakan data deret waktu dalam masalah machine learning, data tersebut perlu diubah sehingga nilai sebelumnya dapat digunakan untuk memprediksi nilai di masa mendatang. Tabel ini menunjukkan contoh cara variabel yang lambat dibuat untuk membantu memprediksi target.
Setelah membahas beberapa hal mendasar, mari kita mulai mempelajari data dan perkiraan.
3. Menyiapkan lingkungan Notebook Anda
Setelah membahas pengantar data singkat, sekarang mari kita siapkan lingkungan pengembangan model.
Langkah 1: Aktifkan API
Konektor BigQuery menggunakan BigQuery Storage API. Telusuri BigQuery Storage API di konsol dan aktifkan API tersebut jika saat ini dinonaktifkan.
Langkah 2: Buat notebook Vertex AI Workbench
Buka bagian Vertex AI Workbench di Cloud Console Anda, lalu klik New Notebook. Kemudian, pilih jenis notebook TensorFlow Enterprise 2.x terbaru tanpa GPU:
Gunakan opsi default, lalu klik Create. Setelah instance dibuat, pilih Open JupyterLab:
Kemudian, buat notebook Python 3 dari JupyterLab:
Langkah 3: Download materi lab
Buat jendela Terminal baru dari antarmuka JupyterLab: File -> Baru -> di terminal.
Dari sana, clone materi sumber dengan perintah ini:
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
4. Jelajahi dan Visualisasikan Data
Di bagian ini, Anda akan:
- Buat kueri yang mengelompokkan data ke dalam deret waktu
- Isi nilai yang belum ada
- Memvisualisasikan data
- Menguraikan deret waktu menjadi komponen tren dan musiman
Langkah 1
Di Vertex AI Workbench, buka training-data-analyst/courses/ai-for-time-series/notebooks
lalu buka 01-explore.ipynb
.
Langkah 2
Hapus semua sel di notebook (Edit > Clear All Outputs), ubah setelan region, project, dan bucket di salah satu dari beberapa sel pertama, lalu Jalankan sel satu per satu.
Langkah 3
Di bagian ini, Anda telah mengimpor data, dan memvisualisasikan berbagai dimensi data. Setelah memiliki gambaran yang lebih jelas tentang data, Anda siap untuk melanjutkan ke pemodelan machine learning menggunakan data ini.
5. Membuat Model dengan Perkiraan Deret Waktu BigQuery
Di bagian ini, Anda akan:
- Mengimpor data input deret waktu ke tabel BigQuery
- Membuat model deret waktu menggunakan sintaksis BQML
- Pelajari cara mengevaluasi akurasi dan parameter model Anda
- Memperkirakan menggunakan model
Langkah 1
Kita akan membuat tabel BigQuery dengan data mentah dari CSV yang baru saja kita pelajari. Mari kita mulai dengan mengunduh CSV dari lingkungan notebook.
Dari direktori training-data-analyst/courses/ai-for-time-series/notebooks/data
, klik kanan cta_ridership.csv
lalu Download ke lingkungan lokal Anda.
Langkah 2
Selanjutnya, kita akan mengunggah data ini ke dalam tabel BigQuery.
Buka BigQuery di konsol (dengan menelusuri atau menggunakan link ini):
Anda dapat menambahkan tabel ke set data baru atau yang sudah ada, yang mengelompokkan tabel terkait. Jika belum membuat set data, Anda dapat mengklik project di pojok kiri bawah, lalu memilih Create Dataset di pojok kanan bawah.
Pilih nama pilihan Anda, misalnya demo
, terima default, lalu lanjutkan.
Setelah set data tersebut dipilih, pilih Create Table di sudut kanan bawah untuk membuat tabel baru.
Untuk opsi pembuatan tabel, pilih:
- Buat tabel dari: Upload
- Pilih file: cta_ridership.csv
- Nama tabel: cta_ridership
- Skema: Centang kotak untuk mendeteksi secara otomatis Parameter skema dan input
Langkah 3
Sekarang saatnya membuat model! BigQuery ML menyediakan sintaksis sederhana yang mirip dengan SQL yang memungkinkan Anda membuat berbagai jenis model.
Di editor kueri, tempel/ketik kueri ini. Ganti demo jika diperlukan dengan nama set data Anda di kedua tempat:
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`
Mari kita bahas elemen-elemen penting dari sintaksis untuk memahaminya:
| Pernyataan ini membuat model. Ada varian untuk pernyataan ini, misalnya |
| Di sini, kita mendefinisikan opsi model, dengan opsi pertama adalah jenis model. Memilih ARIMA akan membuat model perkiraan deret waktu. |
| Kolom dengan informasi tanggal/waktu |
| Kolom data |
| Parameter opsional ini memungkinkan kita menyertakan hari libur ke dalam model. Karena eksplorasi data kami pada langkah sebelumnya menunjukkan bahwa jumlah penumpang lebih rendah pada hari libur, dan data berasal dari Chicago, IL, AS, kami menyertakan hari libur AS ke dalam model. |
| Bagian ini memilih data input yang akan kita gunakan untuk melatih model. |
Ada sejumlah opsi lain yang dapat Anda tambahkan ke kueri, seperti menentukan kolom jika Anda memiliki beberapa deret waktu, atau memilih apakah akan menemukan parameter model ARIMA secara otomatis. Anda dapat mengetahui detail selengkapnya dalam referensi sintaksis CREATE MODEL untuk model deret waktu.
Langkah 4
Mari kita cari tahu lebih banyak tentang model kita. Setelah pelatihan selesai, mari kita jalankan kueri lain, sekali lagi menggantikan demo jika diperlukan:
SELECT * FROM ML.EVALUATE(MODEL `demo.cta_ridership_model`)
Mari kita tafsirkan hasilnya. Di setiap baris, Anda akan melihat model kandidat, beserta parameter dan statistik evaluasinya. Hasilnya ditampilkan dalam urutan AIC menaik, atau kriteria informasi Akaike, yang memberikan indikator relatif kualitas model. Jadi, model di baris pertama memiliki AIC terendah dan dianggap sebagai model terbaik.
Anda dapat melihat parameter p, d, dan q dari model ARIMA, serta tren musiman yang ditemukan dalam model. Dalam hal ini, model teratas mencakup tren musiman mingguan dan tahunan.
Langkah 5
Sekarang, kita siap memperkirakan dengan fungsi ML.FORECAST
.
Tempel/ketik berikut ini (menggantikan demo jika diperlukan):
SELECT * FROM ML.FORECAST(MODEL `demo.cta_ridership_model`, STRUCT(7 AS horizon))
Kueri ini hanya memperkirakan 7 hari ke depan menggunakan model kami! Kita dapat melihat tujuh baris tersebut ditampilkan di bawah. Perkiraan ini juga menyertakan interval keyakinan, yang ditetapkan secara default ke 0,95, tetapi dapat dikonfigurasi dalam kueri.
Bagus: kami telah membuat model deret waktu hanya dengan beberapa kueri BQML.
6. Membuat Model Perkiraan Kustom
Di bagian ini, Anda akan:
- Menghapus pencilan dari data
- Melakukan perkiraan multi-langkah
- Menyertakan fitur tambahan dalam model deret waktu
- Pelajari arsitektur jaringan neural untuk perkiraan deret waktu: LSTM dan CNN
- Pelajari model statistik, termasuk Penghalusan Eksponensial Holt-Winters
- Model ensemble
Langkah 1
Di Vertex AI Workbench, buka training-data-analyst/courses/ai-for-time-series/notebooks
lalu buka 02-model.ipynb
.
Langkah 2
Hapus semua sel di notebook (Edit > Clear All Outputs), ubah setelan region, project, dan bucket di salah satu dari beberapa sel pertama, lalu Jalankan sel satu per satu.
Langkah 3
Di notebook ini, Anda kini telah mempelajari beberapa arsitektur model: LSTM, CNN, dan model statistik. Untuk setiap model, Anda dapat melihat performa model terhadap data pengujian:
7. Latih dan Prediksi di Cloud
Di bagian ini, Anda akan:
- Menyiapkan data dan model untuk pelatihan di cloud
- Latih model Anda dan pantau progres tugas dengan Pelatihan AI Platform
- Memprediksi menggunakan model dengan Prediksi AI Platform
Langkah 1
Di Vertex AI Workbench, buka training-data-analyst/courses/ai-for-time-series/notebooks
lalu buka 03-cloud-training.ipynb
.
Langkah 2
Hapus semua sel di notebook (Edit > Clear All Outputs), ubah setelan region, project, dan bucket di salah satu dari beberapa sel pertama, lalu Jalankan sel satu per satu.
Langkah 3
Di bagian sebelumnya, kita melatih model dan melakukan prediksi dengannya, semuanya dari dalam notebook Workbench. Di bagian ini, kami mendemonstrasikan cara menggunakan Python SDK untuk Vertex AI dari notebook Anda untuk menggunakan layanan Vertex AI untuk pelatihan dan deployment.
8. Tantangan
Di bagian ini, Anda akan mencoba menerapkan konsep yang telah Anda pelajari ke sebuah {i>dataset<i} yang baru!
Kami tidak akan memberikan petunjuk mendetail, hanya beberapa petunjuk (jika Anda menginginkannya).
Sasarannya adalah memprediksi 311 permintaan jasa dari Kota New York. Permintaan non-darurat ini mencakup keluhan kebisingan, masalah lampu jalan, dll.
Langkah 1
Mari kita mulai dengan memahami {i>dataset<i}.
Pertama, akses set data Permintaan Layanan 311 Kota New York.
Untuk mengenal data dengan lebih baik, cobalah beberapa contoh kueri yang tercantum dalam deskripsi {i>dataset<i}:
- Berapa jumlah 311 permintaan terkait truk es krim?
- Hari apa saja yang mendapatkan 311 permintaan terbanyak terkait pihak?
Di UI BigQuery, pilih Create Query untuk melihat cara mengakses set data. Perhatikan bahwa pernyataan pilih sedang dikueri dari bigquery-public-data.new_york_311.311_service_requests
.
Langkah 2
Kita siap untuk memulai. Di bagian ini, lakukan modifikasi pada notebook Jelajahi dan Visualisasikan untuk menggunakan data ini.
Petunjuk
- Duplikasi notebook
01-explore.ipynb
dan mulailah bekerja darinya. - Untuk menjelajahi data, coba kueri ini:
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()
- Untuk mendapatkan jumlah insiden per bulan, gunakan kueri ini:
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
- Perbarui variabel kolom di bagian konstanta. Pada kueri di atas, kolom target adalah y, dan kolom tanggal adalah ds. Tidak ada fitur tambahan.
- Sebaiknya ubah nama file yang digunakan untuk mengekspor data untuk lab berikutnya.
- Ekspor data menggunakan:
df.to_csv(YOUR-EXPORT-FILENAME, index=False)
Langkah 3
Sekarang mari kita membuat model deret waktu dengan data bulanan.
Petunjuk:
- Duplikasi notebook
02-model.ipynb
dan mulailah bekerja darinya. - Perbarui parameter set data:
- Perbarui parameter
target_col
dants_col
agar cocok dengan set data baru Anda. - Perbarui parameter model:
- Frekuensi ke bulanan (kode untuk awal bulan adalah 'MS')
- Langkah masukan: 12 (periode lihat balik adalah 12 bulan)
- Langkah output: 3 (prediksi 3 bulan ke depan)
- Season: 12 (Musiman adalah 12 bulan)
- Ubah nama file input jika Anda mengubahnya di notebook sebelumnya.
- Jika Anda menjalankan kueri pada pertengahan bulan, total bulanan untuk bulan terakhir akan jauh lebih rendah dari yang diperkirakan. Jadi, untuk tujuan lab ini, mari kita hapus bulan terakhir dari set data menggunakan:
df = df[:-1]
- Tampaknya tidak ada pencilan yang jelas dalam data, jadi lewati atau beri komentar pada sel-sel tersebut.
- Sesuaikan unit LSTM serta filter CNN dan ukuran kernel untuk model baru ini.
9. Pembersihan
Jika ingin terus menggunakan notebook ini, sebaiknya nonaktifkan saat tidak digunakan. Dari UI Workbench di Konsol Cloud, pilih notebook, lalu pilih Stop:
Jika ingin menghapus semua resource yang telah dibuat di lab ini, cukup Hapus notebook workbench, bukan menghentikannya.
Dengan menggunakan menu Navigasi di Konsol Cloud, jelajahi Penyimpanan dan hapus kedua bucket yang Anda buat untuk menyimpan aset model (PERINGATAN: hanya lakukan ini jika Anda membuat bucket baru hanya untuk lab ini).