Lewati ke konten utama

Machine Learning dengan Python & Snowflake Cortex AI: Panduan

Pelajari Snowflake Cortex AI dan cara menggunakannya untuk LLM dan machine learning.

Jelajahi bersama AI

Pelatihan model AI berkembang pesat sebagai salah satu potensi penerapan AI dalam data science. Lebih khusus lagi, machine learning dapat dilakukan menggunakan Snowflake Cortex AI.

Dalam panduan ini, kami akan membahas apa itu Snowflake Cortex AI dan apa yang dapat dilakukannya. Selain itu, kami akan memberikan tutorial sederhana tentang cara memulai machine learning dan AI menggunakan Python dan sedikit SQL. Jika Anda baru mengenal Snowflake, lihat kursus Introduction to Snowflake kami untuk mengejar ketertinggalan.

Apa itu Snowflake Cortex AI?

Snowflake Cortex AI adalah fitur andal yang terintegrasi ke dalam Snowflake AI Data Cloud, dirancang untuk memfasilitasi operasi machine learning (ML) langsung di dalam lingkungan Snowflake. 

Fitur ini memungkinkan integrasi mulus model ML Python dengan data Snowflake, sehingga organisasi dapat memperoleh insight, prediksi, dan analitik lanjutan dari kumpulan data besar sambil memanfaatkan infrastruktur cloud.

snowflake cortex ai

Sumber: Snowflake Cortex AI

Fitur-fitur utama Snowflake Cortex AI:

  • Cortex Analyst: Fitur analitik swalayan yang memungkinkan pengguna berinteraksi dengan data menggunakan bahasa alami.
  • Cortex Search: Sistem pencarian canggih berbasis AI yang dibangun untuk menelusuri data dalam dokumen perusahaan.
  • LLM dan Model Embedding: Koneksi ke LLM kuat seperti Snowflake Arctic, Meta Llama 3, dan Mistral pada arsitektur serverless.
  • Cortex Fine-Tuning: Memungkinkan model kecil kustom memiliki performa setara LLM tanpa biaya tinggi. 

Snowflake Cortex terdiri dari dua bagian utama—fungsi LLM dan fungsi ML.

Untuk fungsi LLM, Anda memiliki:

  1. Summarize
  2. Translate
  3. Complete
  4. Extract Answer
  5. Sentiment
  6. Embed Text

Kami akan melihat setiap fungsi secara lebih rinci di bagian bawah nanti.

Untuk fungsi ML, Anda memiliki:

  1. Deteksi anomali: Secara otomatis mendeteksi dan memberi tahu pengguna tentang anomali dalam data mereka.
  2. Peramalan: Menggunakan algoritme machine learning untuk membuat prediksi berdasarkan data historis.
  3. Klasifikasi: Mengklasifikasikan data ke dalam berbagai kategori atau kelompok.
  4. Top insights:  Mengidentifikasi alasan fluktuasi nilai metrik selama periode waktu tertentu.

Ingin tahu di mana belajar Snowflake dan fungsinya? Tutorial Snowflake untuk pemula dan panduan sertifikasi Snowflake kami akan membantu Anda.

Mengapa Menggunakan Snowflake Cortex AI dengan Python?

Sekarang mari kita lihat manfaat menggunakan kedua alat ini bersama-sama.

Keunggulan menggabungkan Snowflake Cortex AI dengan Python

Beberapa manfaat utama menggunakan Snowflake Cortex AI adalah:

  • Integrasi Python: Memungkinkan Anda menjalankan model ML Python langsung di lingkungan komputasi Snowflake.
  • Hosting model: Model dapat di-host dan disajikan untuk inferensi.
  • Tanpa pemindahan data: Karena model berjalan di lingkungan Snowflake, tidak perlu memindahkan dataset besar ke server eksternal.

Kasus penggunaan dan aplikasi

Pertama, Snowflake Cortex AI sangat cocok bagi bisnis yang ingin meningkatkan kapabilitas data science tanpa investasi sumber daya yang signifikan. Dengan lingkungan no-code, bahkan pengguna non-teknis dapat dengan mudah mengembangkan dan menerapkan model ML.

Ini sangat berguna untuk bisnis kecil atau startup yang mungkin tidak memiliki anggaran untuk merekrut tim data scientist atau berinvestasi pada LLM yang mahal.

Kedua, dengan mengintegrasikan Python ke dalam lingkungan komputasi Snowflake, pengguna dapat memanfaatkan pustaka algoritme dan alat machine learning Python yang sangat luas. Artinya, mereka dapat membuat model yang lebih canggih dan akurat tanpa harus mempelajari bahasa pemrograman baru.

Terakhir, perusahaan yang sudah mengadopsi lingkungan Snowflake akan merasakan manfaat penuh Cortex AI karena integrasinya mulus dengan gudang data yang ada, sehingga tidak perlu infrastruktur tambahan atau migrasi data.

Dengan Snowflake Cortex AI, perusahaan dapat menerapkan machine learning ke dalam proses bisnis mereka secara mudah dan efisien. 

Memulai dengan Snowflake Cortex AI

Dalam tutorial ini, kami akan menelusuri proses menyiapkan pipeline machine learning menggunakan Python dan Snowflake Cortex AI.

Prasyarat

Sebelum Anda mulai mengerjakan ML dengan Snowflake Cortex AI, pastikan Anda memenuhi persyaratan berikut:

Menyiapkan akun Snowflake

Pertama, Anda memerlukan instance Snowflake tempat data Anda disimpan dan diproses. Anda dapat mendaftar di situs web Snowflake.

Pada formulir pendaftaran, isi semua detail akun Anda dan pastikan membuat pilihan berikut pada halaman kedua. Pilih edisi Standard untuk tutorial ini dan Amazon Web Services demi kesederhanaan dan reprodusibilitas. Untuk server, pilih US West (Oregon) untuk pilihan fungsi LLM terbaik yang tersedia.

menyiapkan akun snowflake

Setelah Anda memilih opsi-opsi tersebut, klik Get Started untuk menerima email aktivasi. Buka email Anda untuk mengaktifkan akun, dan akun Snowflake Anda siap digunakan.

Persyaratan perangkat lunak

Selanjutnya, Anda juga perlu memenuhi beberapa persyaratan lain untuk perangkat lunak.

Berikut daftar sederhana yang perlu disiapkan:

  • Lingkungan Python: Python 3.x dengan paket yang diperlukan terpasang.
  • Snowflake: Snowflake harus diinstal dari terminal untuk menghubungkan lingkungan Python Anda ke akun Snowflake Anda.
  • VS Code: IDE yang cocok untuk Python dapat digunakan. Alternatif lain termasuk DataLab, Google Colab, atau Jupyter Notebooks.

Sebelum memulai analisis, instal semua paket yang relevan agar lingkungan pengodean Anda siap.

Untuk memasang paket yang diperlukan, Anda dapat menggunakan pip:

pip install snowflake
pip install python-dotenv

Setelah Anda menginstal pustaka, Anda perlu menyiapkan folder kerja dan file untuk memulai.

Saya membuat folder bernama Cortex AI Tutorial dan menyertakan file .env baru yang berisi informasi berikut:

SNOWFLAKE_ACCOUNT = "<YOUR_ACCOUNT>" # eg. XXXX-XXXX

SNOWFLAKE_USER = "<YOUR_USER>" 

SNOWFLAKE_USER_PASSWORD = "<YOUR_PASSWORD>"

Setelah memasukkan informasi akun Anda, simpan file dan buat file Python atau Jupyter Notebook di folder yang sama.

Menyambungkan ke Snowflake

Sekarang semuanya sudah siap, mari hubungkan lingkungan Python Anda ke Snowflake.

Untuk memulai, buka file Python Anda dan impor semua pustaka yang diperlukan. Berikut kodenya:

import os
from dotenv import load_dotenv
from snowflake.snowpark import Session
from snowflake.cortex import Summarize, Complete, ExtractAnswer, Sentiment, Translate, EmbedText768

Selanjutnya, Anda harus memuat variabel yang Anda simpan di file .env yang Anda simpan sebelumnya. Ini akan memberikan kredensial akun Anda ke Snowflake untuk masuk dan menggunakan fungsinya.

# Loads environment variables from .env
load_dotenv()
connection_params = {
    "account": os.environ["SNOWFLAKE_ACCOUNT"],
    "user": os.environ["SNOWFLAKE_USER"],
    "password": os.environ["SNOWFLAKE_USER_PASSWORD"],
}

Setelah Anda tersambung menggunakan variabel tersebut, Anda perlu menyiapkan sesi Snowflake. Ini adalah objek yang akan menangani semua permintaan Anda. 

# Creates a Snowflake session

snowflake_session = Session.builder.configs(connection_params).create()

Fungsi LLM Snowflake Cortex AI

Fungsi LLM dalam Cortex AI memungkinkan pengguna memanfaatkan potensi LLM tanpa perlu mengembangkan model AI sendiri.

Fungsi-fungsi ini membantu pengguna analitik pada umumnya dengan analisis bertenaga AI melalui beberapa tugas dasar.

Berikut fungsi-fungsi yang dimiliki Snowflake Cortex:

1. SUMMARIZE

Fungsi summarize digunakan untuk menghasilkan ringkasan data berdasarkan masukan yang diberikan.

Fungsi ini menggunakan LLM untuk mengidentifikasi informasi kunci dan menyajikannya dalam format yang ringkas.

Misalnya, jika Anda memiliki dokumen teks panjang dan menginginkan ikhtisar cepat dari isinya, Anda dapat menggunakan fungsi summarize untuk mendapatkan ringkasan singkat yang menangkap poin-poin penting. Ini menghemat waktu dan memungkinkan analisis lebih cepat atas sejumlah besar data.

Bahasa input saat ini terbatas pada bahasa Inggris pada saat artikel ini ditulis.

Lihat kode di bawah sebagai referensi:

# Defines the Summarize LLM Function
def summarize(user_text):
    summary = Summarize(text=user_text, session=snowflake_session)
    return summary

2. TRANSLATE

Fungsi translate digunakan untuk mengonversi teks dari satu bahasa ke bahasa lain.

Fungsi ini memanfaatkan algoritme machine learning dan model statistik untuk menerjemahkan teks secara akurat.

Ini berguna saat bekerja dengan data atau dokumen dalam bahasa berbeda, karena memungkinkan komunikasi dan pemahaman yang lebih mudah.

Misalnya, jika Anda memiliki laporan yang ditulis dalam bahasa Spanyol dan perlu menyajikannya kepada audiens berbahasa Inggris, Anda dapat menggunakan fungsi translate untuk cepat mengonversi teks. Ini menghilangkan kebutuhan terjemahan manual dan menghemat waktu.

Lihat kode di bawah sebagai referensi:

# Defines the Translate LLM Function
def translate(user_text):
    translation = Translate(
        text=user_text, from_language="en", to_language="ko", session=snowflake_session
    )
    return translation

3. COMPLETE

Fungsi complete adalah fungsi serba bisa yang dapat digunakan untuk menjalankan tugas tertentu. Ini dilakukan melalui penggunaan prompt kalimat yang memandu model AI dalam memberikan informasi yang diperlukan untuk mengeksekusi sebuah tugas.

Lihat kode di bawah sebagai referensi:

# Defines the Complete LLM Function
def complete(user_text):
    completion = Complete(
        model="snowflake-arctic",
        prompt=f"Provide 3 relevant keywords from the following text: {user_text}",
        session=snowflake_session,
    )
    return completion

4. EXTRACT_ANSWER

Fungsi extract answer memberikan jawaban berdasarkan pertanyaan yang diajukan ke model. Input harus dalam bahasa Inggris dalam format string atau JSON.

Lihat kode di bawah sebagai referensi:

# Defines the Extract Answer LLM Function
def extract_answer(user_text):
    answer = ExtractAnswer(
        from_text=user_text,
        question="What are some reasons why young adult South Koreans love coffee?",
        session=snowflake_session,
    )
    return answer

5. SENTIMENT

Fungsi sentiment memberikan angka kuantitatif berdasarkan sentimen teks yang diberikan. Fungsi ini menghasilkan nilai antara -1 hingga 1. Nilai -1 paling negatif, 1 paling positif, dan nilai sekitar 0 bersifat netral.

Lihat kode di bawah sebagai referensi:

# Defines the Sentiment LLM Function
def sentiment(user_text):
    sentiment = Sentiment(text=user_text, session=snowflake_session)
    return sentiment

6. EMBED_TEXT

Fungsi embed text mencakup fungsi EMBED_TEXT_768 dan EMBED_TEXT_1024. Keduanya membuat embedding vektor berdimensi 768 dan 1024 secara berturut-turut.

Lihat kode di bawah sebagai referensi untuk fungsi EMBED_TEXT_768:

# Defines the Embed Text LLM Function
def embed_text(user_text):
    embed_text = EmbedText768(text=user_text, model='snowflake-arctic-embed-m', session=snowflake_session)
    return embed_text

Sekarang mari kita satukan semuanya dalam fungsi utama dan jalankan pada teks contoh untuk melihat hasilnya.

Saya menggunakan potongan teks sederhana dan pendek untuk dimasukkan ke dalam model, seperti di bawah ini:

contoh input teks fungsi llm snowflake

Agar mudah disalin-tempel, berikut teksnya:

user_text = """
        Young adults in South Korea are embracing coffee as a blend of energy, comfort, and culture. 
        Coffee isn't just about staying awake during demanding studies or work; it’s a cherished part of daily routines. 
        With South Korea's bustling café culture, coffee shops have become popular spaces for socializing, studying, 
        or just taking a break from the fast-paced city life. 
        The diversity of flavors and trendy cafés also offers a unique, 
        stylish experience that fits right into the evolving lifestyle of young adults, 
        who seek both connection and personal moments in the midst of it all.
    """

Sekarang, mari jalankan kodenya. Seharusnya hanya memakan waktu beberapa detik.

Berikut hasilnya:

output llm snowflake cortex

Seperti yang Anda lihat, AI memberikan semua hasil yang kami butuhkan berdasarkan teks yang kami berikan. AI memberikan ringkasan, menerjemahkan teks saya ke bahasa Korea, memberikan tiga kata kunci berdasarkan teks saya, dan memberikan beberapa jawaban berdasarkan pertanyaan saya.

Fungsi Machine Learning Snowflake Cortex AI

Cortex AI juga memiliki fungsi ML yang dapat dijalankan hanya dengan SQL. Berikut beberapa fungsi yang disediakannya.

1. Deteksi anomali

Deteksi anomali penting untuk mengidentifikasi pola tidak biasa yang tidak sesuai dengan perilaku data yang diharapkan. Snowflake menyederhanakan deteksi anomali dengan menyediakan fungsi machine learning bawaan berbasis gradient boosting machine (GBM) yang memungkinkan Anda cepat mengidentifikasi outlier dalam dataset.

Deteksi anomali sangat berguna untuk tugas seperti:

  • Mendeteksi penipuan dalam data transaksi.
  • Mengidentifikasi perilaku pengguna yang tidak biasa.
  • Memantau data deret waktu untuk anomali dalam performa sistem.

Untuk melakukan deteksi anomali, kelas Snowflake ANOMALY_DETECTION (SNOWFLAKE.ML) dapat digunakan. Perintah ini membuat objek model deteksi anomali. Langkah ini menyesuaikan model Anda dengan data pelatihan.

Berikut cara menggunakannya:

CREATE [ OR REPLACE ] SNOWFLAKE.ML.ANOMALY_DETECTION <model_name>(
  INPUT_DATA => <reference_to_training_data>,
  [ SERIES_COLNAME => '<series_column_name>', ]
  TIMESTAMP_COLNAME => '<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>',
  LABEL_COLNAME => '<label_column_name>',
  [ CONFIG_OBJECT => <config_object> ]
)
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT = '<string_literal>' ]

Setelah Anda membuat objeknya, Anda dapat menggunakan metode <model_name>!DETECT_ANOMALIES untuk melakukan deteksi anomali,

<model_name>!DETECT_ANOMALIES(
  INPUT_DATA => <reference_to_data_to_analyze>,
  TIMESTAMP_COLNAME => '<timestamp_column_name>',
  TARGET_COLNAME => '<target_column_name>',
  [ CONFIG_OBJECT => <configuration_object>, ]
  [ SERIES_COLNAME => '<series_column_name>' ]
)

Ini adalah langkah prediksi sebenarnya di mana outlier akan dideteksi menggunakan metode tersebut.

Berikut contoh bagaimana deteksi anomali dapat dilakukan menggunakan sebuah dataset.

Pertama, Anda dapat membuat database dengan masuk ke Data pada tab kiri, lalu Add Data, diikuti Load data into a Table.

menambahkan database snowflake

Di jendela yang muncul, klik + Database dan beri nama database Anda. Klik Create, lalu di jendela popup utama, klik Cancel.

membuat database snowflake baru

Ini akan membuat database kosong yang dapat Anda gunakan.

Contoh di bawah ini diadaptasi dari Dokumentasi Snowflake.

Untuk memulai deteksi anomali, buka lembar kerja SQL baru, pilih database baru Anda sebagai sumber data, dan tempel kode berikut untuk membuat tabel:

CREATE OR REPLACE TABLE historical_sales_data (

  store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT, label BOOLEAN,

  temperature NUMBER, humidity FLOAT, holiday VARCHAR);

// Creating the dataset
INSERT INTO historical_sales_data VALUES
  (1, 'jacket', to_timestamp_ntz('2020-01-01'), 2.0, false, 50, 0.3, 'new year'),
  (1, 'jacket', to_timestamp_ntz('2020-01-02'), 3.0, false, 52, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-03'), 5.0, false, 54, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-04'), 30.0, true, 54, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-05'), 8.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-06'), 6.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-07'), 4.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-08'), 2.7, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-09'), 8.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-10'), 9.2, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-11'), 4.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-12'), 7.0, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-13'), 3.6, false, 55, 0.2, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-14'), 8.0, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-01'), 3.4, false, 50, 0.3, 'new year'),
  (2, 'umbrella', to_timestamp_ntz('2020-01-02'), 5.0, false, 52, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-03'), 4.0, false, 54, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-04'), 5.4, false, 54, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-05'), 3.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-06'), 3.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-07'), 3.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-08'), 5.6, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-09'), 7.3, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-10'), 8.2, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-11'), 3.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-12'), 5.7, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-13'), 6.3, false, 55, 0.2, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-14'), 2.9, false, 55, 0.2, null);

Kode Anda harus dimasukkan ke dalam lembar kerja SQL yang terlihat seperti ini:

lembar kerja SQL deteksi anomali

Ini diikuti dengan pernyataan berikut untuk membuat tabel bernama new_sales_data.

// Creating a new table and adding training data
CREATE OR REPLACE TABLE new_sales_data (
  store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT,
  temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO new_sales_data VALUES
  (1, 'jacket', to_timestamp_ntz('2020-01-16'), 6.0, 52, 0.3, null),
  (1, 'jacket', to_timestamp_ntz('2020-01-17'), 20.0, 53, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-16'), 3.0, 52, 0.3, null),
  (2, 'umbrella', to_timestamp_ntz('2020-01-17'), 70.0, 53, 0.3, null);

Sekarang, buat model deteksi anomali:

// Creating anomaly detection model object
CREATE OR REPLACE VIEW view_with_training_data
  AS SELECT date, sales FROM historical_sales_data
    WHERE store_id=1 AND item='jacket';
CREATE OR REPLACE SNOWFLAKE.ML.ANOMALY_DETECTION basic_model(
  INPUT_DATA => TABLE(view_with_training_data),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales',
  LABEL_COLNAME => '');

Ini akan menghasilkan pernyataan bahwa sebuah model telah dibuat seperti yang ditunjukkan di bawah.

model deteksi anomali

Berikutnya, mari gunakan objek model untuk melakukan deteksi.

// Perform anomaly detection
CREATE OR REPLACE VIEW view_with_data_to_analyze
  AS SELECT date, sales FROM new_sales_data
    WHERE store_id=1 and item='jacket';
CALL basic_model!DETECT_ANOMALIES(
  INPUT_DATA => TABLE(view_with_data_to_analyze),
  TIMESTAMP_COLNAME =>'date',
  TARGET_COLNAME => 'sales'
);

Berikut output deteksinya:

hasil output deteksi anomali

2. Klasifikasi

Klasifikasi melibatkan pengelompokan data ke kelas yang telah ditentukan. Dengan Snowflake, Anda dapat mengklasifikasikan data langsung dari dalam Snowflake, menghilangkan kebutuhan ekspor data ke lingkungan ML eksternal. 

model klasifikasi snowflake

Untuk memulai, buat dataset contoh menggunakan kode berikut:

// Creating binary class dataset
CREATE OR REPLACE TABLE training_purchase_data AS (
    SELECT
        CAST(UNIFORM(0, 4, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(0, 3, RANDOM()) AS user_rating,
        FALSE AS label,
        'not_interested' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(4, 7, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(3, 7, RANDOM()) AS user_rating,
        FALSE AS label,
        'add_to_wishlist' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(7, 10, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(7, 10, RANDOM()) AS user_rating,
        TRUE AS label,
        'purchase' AS class
    FROM TABLE(GENERATOR(rowCount => 100))
);
CREATE OR REPLACE table prediction_purchase_data AS (
    SELECT
        CAST(UNIFORM(0, 4, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(0, 3, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(4, 7, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(3, 7, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
    UNION ALL
    SELECT
        CAST(UNIFORM(7, 10, RANDOM()) AS VARCHAR) AS user_interest_score,
        UNIFORM(7, 10, RANDOM()) AS user_rating
    FROM TABLE(GENERATOR(rowCount => 100))
);

Untuk keperluan data pelatihan, mari buat view baru.

// Creating view for training data
CREATE OR REPLACE view binary_classification_view AS
    SELECT user_interest_score, user_rating, label
FROM training_purchase_data;
SELECT * FROM binary_classification_view ORDER BY RANDOM(42) LIMIT 5;

View ini akan menghasilkan keluaran berikut:

data pelatihan klasifikasi

Selanjutnya, mari latih model berdasarkan data pelatihan kita:

// Training a binary classification model
CREATE OR REPLACE SNOWFLAKE.ML.CLASSIFICATION model_binary(
    INPUT_DATA => SYSTEM$REFERENCE('view', 'binary_classification_view'),
    TARGET_COLNAME => 'label'
);

Untuk melakukan klasifikasi, gunakan metode PREDICT:

// Performing prediction using PREDICT method
SELECT model_binary!PREDICT(INPUT_DATA => {*})
    AS prediction FROM prediction_purchase_data;

Berikut tampilan prediksinya:

hasil fungsi klasifikasi

Untuk memformatnya dengan rapi, gunakan pernyataan SQL ini:

// Formatting SQL predictions
SELECT *, model_binary!PREDICT(INPUT_DATA => {*})
    AS predictions FROM prediction_purchase_data;

Anda akan mendapatkan format keluaran yang rapi untuk prediksi seperti ini:

hasil fungsi klasifikasi terformat

3. Top insights

Top Insights adalah alat pemantauan untuk mencari fluktuasi metrik Anda dari waktu ke waktu melalui analisis deret waktu. Dengan model decision tree, Top Insights dapat mengidentifikasi faktor penyumbang paling signifikan terhadap peningkatan atau penurunan metrik tertentu.

model top insights snowflake

Mari lihat contoh analisis deret waktu menggunakan fungsi ini.

Pertama, mari buat dataset:

// Creating dataset
CREATE OR REPLACE TABLE input_table(
  ds DATE, metric NUMBER, dim_country VARCHAR, dim_vertical VARCHAR);
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, seq4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'usa' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'canada' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'fashion' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'tech' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 4, 1)) AS ds,
    UNIFORM(1, 10, RANDOM()) AS metric,
    'france' AS dim_country,
    'auto' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
-- Data for the test group
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 8, 1)) AS ds,
    UNIFORM(300, 320, RANDOM()) AS metric,
    'usa' AS dim_country,
    'auto' AS dim_vertica
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
INSERT INTO input_table
  SELECT
    DATEADD(day, SEQ4(), DATE_FROM_PARTS(2020, 8, 1))  AS ds,
    UNIFORM(400, 420, RANDOM()) AS metric,
    'usa' AS dim_country,
    'finance' AS dim_vertical
  FROM TABLE(GENERATOR(ROWCOUNT => 365));
// Creating new view and adding labels to timestamps
CREATE OR REPLACE VIEW input_view AS (
    SELECT
        metric,
        dim_country as country,
        dim_vertical as vertical,
        ds >= '2021-01-01' AS label
    FROM input_table
);

Selanjutnya, kita harus membuat objek model untuk prediksi. Ini diperlukan untuk mengakses metode GET_DRIVERS.

// Creating the model
CREATE OR REPLACE SNOWFLAKE.ML.TOP_INSIGHTS my_insights_model()

Terakhir, untuk prediksi, panggil metode GET_DRIVERS.

// Performing prediction using GET_DRIVERS method
CALL my_insights_model!GET_DRIVERS(
  INPUT_DATA => TABLE(input_view),
  LABEL_COLNAME => 'label',
  METRIC_COLNAME => 'metric'
);

Ini akan memberikan hasil berikut:

hasil fungsi top insights

4. Peramalan

Peramalan sangat penting saat Anda perlu memprediksi nilai di masa depan berdasarkan data historis. Baik itu peramalan penjualan, memprediksi konsumsi energi, atau peramalan lalu lintas web, fungsi bawaan Snowflake membuat tugas ini jauh lebih sederhana.

model peramalan snowflake

Untuk contoh kita, mari lihat bagaimana melakukan peramalan pada satu seri:

// Creating the dataset
CREATE OR REPLACE TABLE sales_data (store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ,
  sales FLOAT, temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO sales_data VALUES
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-01'), 2.0, 50, 0.3, 'new year'),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-02'), 3.0, 52, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-03'), 4.0, 54, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-04'), 5.0, 54, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-05'), 6.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-06'), 7.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-07'), 8.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-08'), 9.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-09'), 10.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-10'), 11.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-11'), 12.0, 55, 0.2, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-12'), 13.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-01'), 2.0, 50, 0.3, 'new year'),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-02'), 3.0, 52, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-03'), 4.0, 54, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-04'), 5.0, 54, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-05'), 6.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-06'), 7.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-07'), 8.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-08'), 9.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-09'), 10.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-10'), 11.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-11'), 12.0, 55, 0.2, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-12'), 13.0, 55, 0.2, NULL);
-- Future values for additional columns (features)
CREATE OR REPLACE TABLE future_features (store_id NUMBER, item VARCHAR,
  date TIMESTAMP_NTZ, temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO future_features VALUES
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-13'), 52, 0.3, NULL),
  (1, 'jacket', TO_TIMESTAMP_NTZ('2020-01-14'), 53, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-13'), 52, 0.3, NULL),
  (2, 'umbrella', TO_TIMESTAMP_NTZ('2020-01-14'), 53, 0.3, NULL);

Selanjutnya, mari pisahkan data pelatihan dari dataset.

// Creating a view for training data
CREATE OR REPLACE VIEW v1 AS SELECT date, sales
  FROM sales_data WHERE store_id=1 AND item='jacket';
SELECT * FROM v1;

Sebelum Anda dapat memulai peramalan, Anda perlu melatih model berdasarkan data pelatihan yang telah Anda pilih.

Berikut cara melakukannya:

// Training a forecasting model
CREATE SNOWFLAKE.ML.FORECAST model1(
  INPUT_DATA => TABLE(v1),
  TIMESTAMP_COLNAME => 'date',
  TARGET_COLNAME => 'sales'
);

Terakhir, untuk peramalan, Anda dapat memanggil metode FORECAST untuk melakukan langkah prediksi.

// Performing the forecast by calling the FORECAST method
call model1!FORECAST(FORECASTING_PERIODS => 5);

Berikut keluaran hasil peramalan kita.

hasil fungsi peramalan

Memantau Model ML di Snowflake

Pemantauan performa model dapat dilakukan dengan membuat dasbor di Snowflake menggunakan integrasi pihak ketiga (seperti Tableau) atau melakukan query pada log Snowflake. Beberapa metrik berguna seperti akurasi, presisi, dan recall dapat digunakan untuk melacak model.

Kesimpulan

Snowflake Cortex AI menyederhanakan machine learning dengan memungkinkan integrasi mulus model dari platform Snowflake. Tutorial ini memandu Anda menggunakan fungsi Snowflake Cortex AI dan Snowflake Cortex ML.

Solusi ini memanfaatkan skalabilitas Snowflake dan fleksibilitas Python, menjadikannya ideal bagi organisasi yang ingin menerapkan machine learning tanpa memindahkan data keluar dari cloud.

Mencari lebih banyak sumber daya tentang Snowflake? Anda akan menyukai Snowflake Beginner Tutorial kami dan panduan Snowpark kami. Jika Anda mencari sesuatu yang lebih komprehensif, maka kursus Introduction to Snowflake mungkin tepat untuk Anda.

Machine Learning dengan Python & Snowflake Cortex: FAQ

Apakah Python bagus untuk machine learning dan AI?

Python bagus untuk machine learning dan AI karena pustaka-pustaka andalnya seperti PyTorch, TensorFlow, dan Keras. Fungsi AI dan ML Snowflake juga dapat diakses melalui Python.

Bagaimana cara menggunakan Python untuk AI dan machine learning?

Python dapat digunakan untuk AI dan machine learning melalui pustaka bawaan atau melalui fungsi LLM dan ML Snowflake.

Bagaimana cara menggunakan fungsi berbasis ML Snowflake Cortex?

Fungsi berbasis ML Snowflake Cortex dapat digunakan dengan memanggil metode masing-masing fungsi menggunakan SQL.

Apa itu model AI Snowflake?

Model AI Snowflake adalah large language model yang mendukung Snowflake Cortex dan fungsi-fungsinya.

Apa saja contoh machine learning Snowflake?

Fungsi machine learning Snowflake dapat diterapkan pada berbagai aplikasi seperti deteksi anomali, peramalan, mendapatkan top insights, dan klasifikasi.

Austin Chia

Penulis

Austin Chia

Saya Austin, seorang blogger dan penulis teknologi dengan pengalaman bertahun-tahun sebagai data scientist dan analis data di bidang kesehatan. Memulai perjalanan teknologi dengan latar belakang biologi, kini saya membantu orang lain melakukan transisi yang sama melalui blog teknologi saya. Ketertarikan saya pada teknologi mendorong kontribusi tulisan saya untuk puluhan perusahaan SaaS, menginspirasi orang lain dan membagikan pengalaman saya.

Topik

Terkait

blogs

Spaghetti Plot dan Jalur Badai

blogs

Tutorial Korelasi di R