BigQuery DataFrames로 ML 및 AI 사용

BigQuery DataFrames는 bigframes.ml 라이브러리를 사용하여 BigQuery DataFrames에 ML 및 AI 기능을 제공합니다.

BigQuery DataFrames에서 데이터를 전처리하고, 모델을 학습할 추정기를 만들고, ML 파이프라인을 만들고, 학습 및 테스트 데이터 세트를 분할할 수 있습니다.

필요한 역할

이 문서의 태스크를 완료하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 다음 IAM 역할을 부여해 달라고 요청하세요.

역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

ML 위치

bigframes.ml 라이브러리는 BigQuery ML과 동일한 위치를 지원합니다. BigQuery ML 모델 예측 및 기타 ML 함수는 모든 BigQuery 리전에서 지원됩니다. 모델 학습 지원은 리전마다 다릅니다. 자세한 내용은 BigQuery ML 위치를 참조하세요.

데이터 사전 처리

bigframes.ml.preprocessing 모듈bigframes.ml.compose 모듈을 사용하여 에스티메이터 (모델)에서 사용할 데이터를 준비하는 변환기를 만듭니다. BigQuery DataFrames는 다음과 같은 변환을 제공합니다.

  • 연속 데이터를 간격으로 비닝하려면 bigframes.ml.preprocessing 모듈에서 KBinsDiscretizer 클래스를 사용합니다.

  • 타겟 라벨을 정수 값으로 정규화하려면 bigframes.ml.preprocessing 모듈의 LabelEncoder 클래스를 사용하세요.

  • 각 특성을 최대 절댓값까지 [-1, 1] 범위로 확장하려면 bigframes.ml.preprocessing 모듈에서 MaxAbsScaler 클래스를 사용하세요.

  • 각 특성을 [0, 1] 범위로 확장하여 특성을 표준화하려면 bigframes.ml.preprocessing 모듈에서 MinMaxScaler 클래스를 사용하세요.

  • 평균을 삭제하고 단위 분산으로 확장하여 특성을 표준화하려면 bigframes.ml.preprocessing 모듈에서 StandardScaler 클래스를 사용합니다.

  • 범주형 값을 숫자 형식으로 변환하려면 bigframes.ml.preprocessing 모듈에서 OneHotEncoder 클래스를 사용합니다.

  • DataFrames 열에 변환기를 적용하려면 bigframes.ml.compose 모듈에서 ColumnTransformer 클래스를 사용합니다.

모델 학습

BigQuery DataFrames에서 모델을 학습시키기 위한 추정기를 만들 수 있습니다.

클러스터링 모델

bigframes.ml.cluster 모듈을 사용하여 클러스터링 모델에 대한 에스티메이터를 만들 수 있습니다. k-평균 클러스터링 모델을 만들려면 KMeans 클래스를 사용하세요. 이러한 모델은 데이터 세분화에 사용됩니다. 고객 세그먼트 식별을 예로 들 수 있습니다. k-평균은 비지도 학습 기법이므로 모델 학습에는 라벨이 필요 없으며 데이터를 학습 데이터와 평가 데이터로 분할할 필요도 없습니다.

bigframes.ml.cluster 모듈을 사용하여 클러스터링 모델의 에스티메이터를 만들 수 있습니다.

다음 코드 샘플은 bigframes.ml.cluster KMeans 클래스를 사용하여 데이터 세분화를 위한 K-평균 클러스터링 모델을 만드는 방법을 보여줍니다.

from bigframes.ml.cluster import KMeans
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Create the KMeans model
cluster_model = KMeans(n_clusters=10)
cluster_model.fit(bq_df["culmen_length_mm"], bq_df["sex"])

# Predict using the model
result = cluster_model.predict(bq_df)
# Score the model
score = cluster_model.score(bq_df)

분해 모델

bigframes.ml.decomposition 모듈을 사용하여 분해 모델에 대한 에스티메이터를 만들 수 있습니다. 주요 구성요소 분석 (PCA) 모델을 만들려면 PCA 클래스를 사용하세요. 이러한 모델을 사용하여 주요 구성요소를 계산하고 이를 사용하여 데이터에 기초하여 변경을 수행합니다. PCA 클래스를 사용하면 각 데이터 포인트를 처음 몇 개의 주요 구성요소에만 투영하여 저차원 데이터를 얻고 데이터 변형을 가능한 한 많이 보존하여 차원 수가 줄어듭니다.

앙상블 모델

bigframes.ml.ensemble 모듈을 사용하여 앙상블 모델에 대한 에스티메이터를 만들 수 있습니다.

  • 랜덤 포레스트 분류기 모델을 만들려면 RandomForestClassifier 클래스를 사용하세요. 이 모델을 사용하여 분류를 위한 여러 학습 방법 결정 트리를 생성하세요.

  • 랜덤 포레스트 회귀 모델을 만들려면 RandomForestRegressor 클래스를 사용합니다. 이러한 모델을 사용하여 회귀를 위한 여러 학습 방법 결정 트리를 생성합니다.

  • 그래디언트 부스팅 트리 분류기 모델을 만들려면 XGBClassifier 클래스를 사용하세요. 이 모델을 사용하여 분류를 위한 여러 학습 방법 결정 트리를 생성합니다.

  • 그래디언트 부스팅 트리 회귀 모델을 만들려면 XGBRegressor 클래스를 사용하세요. 이 모델을 사용하여 회귀를 위한 여러 학습 방법 결정 트리를 추가적으로 생성합니다.

예측 모델

bigframes.ml.forecasting 모듈을 사용하여 예측 모델에 대한 에스티메이터를 만들 수 있습니다. 시계열 예측 모델을 만들려면 ARIMAPlus 클래스를 사용하세요.

가져온 모델

bigframes.ml.imported 모듈을 사용하여 가져온 모델에 대한 에스티메이터를 만들 수 있습니다.

선형 모델

bigframes.ml.linear_model 모듈을 사용하여 선형 모델에 대한 에스티메이터를 만듭니다.

  • 선형 회귀 모델을 만들려면 LinearRegression 클래스를 사용하세요. 이러한 모델은 특정 일의 상품 판매량 예측과 같은 예측에 사용됩니다.

  • 로지스틱 회귀 모델을 만들려면 LogisticRegression 클래스를 사용하세요. 입력이 low-value, medium-value, high-value인지 여부 등 2개 이상의 가능한 값을 분류하는 데 이러한 모델을 사용합니다.

다음 코드 샘플은 bigframes.ml을 사용하여 다음을 수행하는 방법을 보여줍니다.

  • BigQuery에서 데이터를 로드합니다.
  • 학습 데이터를 정리하고 준비합니다.
  • bigframes.ml.LinearRegression 회귀 모델을 만들고 적용합니다.
from bigframes.ml.linear_model import LinearRegression
import bigframes.pandas as bpd

# Load data from BigQuery
query_or_table = "bigquery-public-data.ml_datasets.penguins"
bq_df = bpd.read_gbq(query_or_table)

# Filter down to the data to the Adelie Penguin species
adelie_data = bq_df[bq_df.species == "Adelie Penguin (Pygoscelis adeliae)"]

# Drop the species column
adelie_data = adelie_data.drop(columns=["species"])

# Drop rows with nulls to get training data
training_data = adelie_data.dropna()

# Specify your feature (or input) columns and the label (or output) column:
feature_columns = training_data[
    ["island", "culmen_length_mm", "culmen_depth_mm", "flipper_length_mm", "sex"]
]
label_columns = training_data[["body_mass_g"]]

test_data = adelie_data[adelie_data.body_mass_g.isnull()]

# Create the linear model
model = LinearRegression()
model.fit(feature_columns, label_columns)

# Score the model
score = model.score(feature_columns, label_columns)

# Predict using the model
result = model.predict(test_data)

대규모 언어 모델

bigframes.ml.llm 모듈을 사용하여 LLM에 대한 에스티메이터를 만들 수 있습니다.

  • Gemini 텍스트 생성기 모델을 만들려면 GeminiTextGenerator 클래스를 사용하세요. 이러한 모델은 텍스트 생성 작업에 사용됩니다.

  • 원격 대규모 언어 모델 (LLM)에 대한 에스티메이터를 만들려면 bigframes.ml.llm 모듈을 사용하세요.

다음 코드 샘플은 bigframes.ml.llm GeminiTextGenerator 클래스를 사용하여 코드 생성을 위한 Gemini 모델을 만드는 방법을 보여줍니다.

from bigframes.ml.llm import GeminiTextGenerator
import bigframes.pandas as bpd

# Create the Gemini LLM model
session = bpd.get_global_session()
connection = f"{PROJECT_ID}.{REGION}.{CONN_NAME}"
model = GeminiTextGenerator(
    session=session, connection_name=connection, model_name="gemini-2.0-flash-001"
)

df_api = bpd.read_csv("gs://cloud-samples-data/vertex-ai/bigframe/df.csv")

# Prepare the prompts and send them to the LLM model for prediction
df_prompt_prefix = "Generate Pandas sample code for DataFrame."
df_prompt = df_prompt_prefix + df_api["API"]

# Predict using the model
df_pred = model.predict(df_prompt.to_frame(), max_output_tokens=1024)

원격 모델

BigQuery DataFrames ML 원격 모델(bigframes.ml.remote 또는 bigframes.ml.llm)을 사용하려면 다음 API를 사용 설정해야 합니다.

BigQuery DataFrames ML 원격 모델을 사용하는 경우 기본 BigQuery 연결을 사용할 때는 프로젝트 IAM 관리자 역할 (roles/resourcemanager.projectIamAdmin)이 필요하고 사전 구성된 연결을 사용할 때는 브라우저 역할 (roles/browser)이 필요합니다. bigframes.pandas.options.bigquery.skip_bq_connection_check 옵션을 True로 설정하여 이 요구사항을 피할 수 있습니다. 이 경우 존재 또는 권한 확인 없이 연결 (기본 또는 사전 구성)을 그대로 사용합니다. 사전 구성된 연결을 사용하고 연결 확인을 건너뛰는 경우 다음을 확인하세요.

  • 연결이 올바른 위치에 생성됩니다.
  • BigQuery DataFrames ML 원격 모델을 사용하는 경우 서비스 계정에 프로젝트에 대한 Vertex AI 사용자 역할 (roles/aiplatform.user)이 있습니다.

BigQuery DataFrames에서 원격 모델을 만들면 BigQuery 연결이 생성됩니다. 기본적으로 bigframes-default-connection이라는 연결이 사용됩니다. 원하는 경우 사전 구성된 BigQuery 연결을 사용할 수 있습니다. 이 경우 연결 만들기가 생략됩니다. 기본 연결의 서비스 계정에 프로젝트에 대한 Vertex AI 사용자 역할(roles/aiplatform.user)이 부여됩니다.

파이프라인 만들기

bigframes.ml.pipeline 모듈을 사용하여 ML 파이프라인을 만들 수 있습니다. 파이프라인을 사용하면 서로 다른 매개변수를 설정하여 함께 교차 검증할 여러 ML 단계를 조합할 수 있습니다. 이렇게 하면 코드가 간소화되고 데이터 전처리 단계와 추정기를 함께 배포할 수 있습니다.

최종 추정기가 포함된 변환 파이프라인을 만들려면 Pipeline 클래스를 사용하세요.

모델 선택

학습 및 테스트 데이터 세트를 분할하고 최적의 모델을 선택하려면 bigframes.ml.model_selection 모듈을 사용하세요.

  • 다음 코드 샘플과 같이 데이터를 학습 세트와 테스트 (평가) 세트로 분할하려면 train_test_split 함수를 사용합니다.

    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
    
  • 다음 코드 샘플과 같이 모델을 학습시키고 평가하기 위한 다중 폴드 학습 및 테스트 세트를 만들려면 KFold 클래스KFold.split 메서드를 사용합니다. 이 기능은 소규모 데이터 세트에 유용합니다.

    kf = KFold(n_splits=5)
    for i, (X_train, X_test, y_train, y_test) in enumerate(kf.split(X, y)):
    # Train and evaluate models with training and testing sets
    
  • 다음 코드 샘플과 같이 다중 폴드 학습 및 테스트 세트를 자동으로 만들고, 모델을 학습 및 평가하고, 각 폴드의 결과를 얻으려면 cross_validate 함수를 사용하세요.

    scores = cross_validate(model, X, y, cv=5)
    

다음 단계