Snowpark ML Modeling: ML 모델 개발

Snowpark ML Modeling은 데이터 전처리와 모델 학습을 위한 Python API 모음입니다. Snowflake 내에서 Snowpark ML Modeling을 사용하여 이러한 작업을 수행하면 다음을 수행할 수 있습니다.

  • 데이터를 Snowflake 외부로 이동하지 않고도 데이터를 변환하고 모델을 학습할 수 있습니다.

  • scikit-learn과 같이 이미 익숙한 API와 유사한 API로 작업할 수 있습니다.

  • Snowflake의 보안 및 거버넌스 프레임워크 내에서 ML 파이프라인을 계속 실행할 수 있습니다.

  • Snowflake 데이터 웨어하우스의 성능과 확장성을 활용할 수 있습니다.

이 항목에서 설명하는 Snowpark ML Modeling 패키지는 scikit-learn, xgboost 및 lightgbm 라이브러리에 있는 것과 호환되는 추정기와 변환기를 제공합니다. 이러한 API를 사용하여 Snowflake 내에서 머신 러닝 모델을 만들어 학습시킬 수 있습니다.

Snowpark ML Modeling에 대한 간략한 소개는 빠른 시작 을 참조하십시오.

참고

이 항목에서는 Snowpark ML 모듈이 이미 설치되어 있다고 가정합니다. 설치되어 있지 않으면 Snowpark ML 설치하기 섹션을 참조하십시오.

Snowpark ML Modeling 클래스

모든 Snowpark ML Modeling 및 전처리 클래스는 snowflake.ml.modeling 네임스페이스에 있습니다. Snowpark ML 모듈은 sklearn 네임스페이스의 해당 모듈과 이름이 같습니다. 예를 들어 sklearn.calibration 에 해당하는 Snowpark ML 모듈은 snowflake.ml.modeling.calibration 입니다.

xgboostlightgbm 모듈은 각각 snowflake.ml.modeling.xgboostsnowflake.ml.modeling.lightgbm 에 해당합니다.

scikit-learn의 모든 클래스가 Snowpark ML에서 지원되는 것은 아닙니다. 아래 표는 지원되는 클래스를 나타냅니다. 별표(*)가 표시된 클래스는 분산 실행을 지원합니다.

모델링 API에 대한 전체 세부 정보는 Snowpark ML API 참조 를 확인하십시오.

Snowpark ML 모듈 이름

클래스

snowflake.ml.modeling.calibration

  • CalibratedClassifierCV

snowflake.ml.modeling.cluster

  • AgglomerativeClustering

  • AffinityPropagation

  • Birch

  • DBSCAN

  • FeatureAgglomeration

  • KMeans

  • MeanShift

  • MiniBatchKMeans

  • OPTICS

  • SpectralBiclustering

  • SpectralClustering

  • SpectralCoclustering

snowflake.ml.modeling.compose

  • ColumnTransformer

  • TransformedTargetRegressor

snowflake.ml.modeling.covariance

  • EllipticEnvelope

  • EmpiricalCovariance

  • GraphicalLasso

  • GraphicalLassoCV

  • LedoitWolf

  • MinCovDet

  • OAS

  • ShrunkCovariance

snowflake.ml.modeling.decomposition

  • DictionaryLearning

  • FactorAnalysis

  • FastICA

  • IncrementalPCA

  • KernelPCA

  • MiniBatchDictionaryLearning

  • MiniBatchSparsePca

  • PCA

  • SparsePCA

  • TruncatedSVD

snowflake.ml.modeling.discriminant_analysis

  • LinearDiscriminantAnalysis

  • QuadraticDiscriminantAnalysis

snowflake.ml.modeling.ensemble

  • AdaBoostClassifier

  • AdaBoostRegressor

  • BaggingClassifier

  • BaggingRegressor

  • ExtraTreesClassifier

  • ExtraTreesRegressor

  • GradientBoostingClassifier

  • GradientBoostingRegressor

  • IsolationForest

  • RandomForestClassifier

  • RandomForestRegressor

  • StackingRegressor

  • VotingClassifier

  • VotingRegressor

snowflake.ml.modeling.feature_selection

  • GenericUnivariateSelect

  • SelectFdr

  • SelectFpr

  • SelectFwe

  • SelectKBest

  • SelectPercentile

  • SequentialFeatureSelector

  • VarianceThreshold

snowflake.ml.modeling.gaussian_process

  • GaussianProcessClassifier

  • GaussianProcessRegressor

snowflake.ml.modeling.impute

  • IterativeImputer

  • KNNImputer

  • MissingIndicator

  • SimpleImputer *

snowflake.ml.modeling.kernel_approximation

  • AdditiveChi2Sampler

  • Nystroem

  • PolynomialCountSketch

  • RBFSampler

  • SkewedChi2Sampler

snowflake.ml.modeling.kernel_ridge

  • KernelRidge

snowflake.ml.modeling.lightgbm

  • LGBMClassifier

  • LGBMRegressor

snowflake.ml.modeling.linear_model

  • ARDRegression

  • BayesianRidge

  • ElasticNet

  • ElasticNetCV

  • GammaRegressor

  • HuberRegressor

  • Lars

  • LarsCV

  • Lasso

  • LassoCV

  • LassoLars

  • LassoLarsCV

  • LassoLarsIC

  • LinearRegression

  • LogisticRegression

  • LogisticRegressionCV

  • MultiTaskElasticNet

  • MultiTaskElasticNetCV

  • MultiTaskLasso

  • MultiTaskLassoCV

  • OrthogonalMatchingPursuit

  • PassiveAggressiveClassifier

  • PassiveAggressiveRegressor

  • Perceptron

  • PoissonRegressor

  • RANSACRegressor

  • Ridge

  • RidgeClassifier

  • RidgeClassifierCV

  • RidgeCV

  • SGDClassifier

  • SGDOneClassSvm

  • SGDRegressor

  • TheilSenRegressor

  • TweedieRegressor

snowflake.ml.modeling.manifold

  • Isomap

  • MDS

  • SpectralEmbedding

  • TSNE

snowflake.ml.modeling.metrics

correlation:

  • correlation *

covariance:

  • covariance *

classification:

  • accuracy_score *

  • confusion_matrix *

  • f1_score

  • fbeta_score

  • log_loss

  • precision_recall_fscore_support

  • precision_score

  • recall_score

ranking:

  • precision_recall_curve

  • roc_auc_score

  • roc_curve

regression:

  • d2_absolute_error_score

  • d2_pinball_score

  • explained_variance_score

  • mean_absolute_error

  • mean_absolute_percentage_error

  • mean_squared_error

  • r2_score *

snowflake.ml.modeling.mixture

  • BayesianGaussianMixture

  • GaussianMixture

snowflake.ml.modeling.model_selection

  • GridSearchCV

  • RandomizedSearchCV

snowflake.ml.modeling.multiclass

  • OneVsOneClassifier

  • OneVsRestClassifier

  • OutputCodeClassifier

snowflake.ml.modeling.naive_bayes

  • BernoulliNB

  • CategoricalNB

  • ComplementNB

  • GaussianNB

  • MultinomialNB

snowflake.ml.modeling.neighbors

  • KernelDensity

  • KNeighborsClassifier

  • KNeighborsRegressor

  • LocalOutlierFactor

  • NearestCentroid

  • NearestNeighbors

  • NeighborhoodComponentsAnalysis

  • RadiusNeighborsClassifier

  • RadiusNeighborsRegressor

snowflake.ml.modeling.neural_network

  • BernoulliRBM

  • MLPClassifier

  • MLPRegressor

snowflake.ml.modeling.preprocessing

  • Binarizer *

  • KBInsDiscretizer *

  • LabelEncoder *

  • MaxAbsScaler *

  • MinMaxScaler *

  • Normalizer *

  • OneHotEncoder *

  • OrdinalEncoder *

  • RobustScaler *

  • StandardScaler *

snowflake.ml.modeling.semi_supervised

  • LabelPropagation

  • LabelSpreading

snowflake.ml.modeling.svm

  • LinearSVC

  • LinearSVR

  • NuSVC

  • NuSVR

  • SVC

  • SVR

snowflake.ml.modeling.tree

  • DecisionTreeClassifier

  • DecisionTreeRegressor

  • ExtraTreeClassifier

  • ExtraTreeRegressor

snowflake.ml.modeling.xgboost

  • XGBClassifier

  • XGBRegressor

  • XGBRFClassifier

  • XGBRFRegressor

일반적인 API 차이점

모델링 API에 대한 전체 세부 정보는 Snowpark ML API 참조 를 확인하십시오.

Snowpark ML Modeling에는 scikit-learn, xgboost, lightgbm을 기반으로 하는 데이터 전처리, 변환 및 예측 알고리즘이 포함됩니다. Snowpark Python 클래스는 서명이 유사한 원래 패키지의 해당 클래스를 대체합니다. 하지만 이러한 API는 NumPy 배열 대신 Snowpark DataFrames와 함께 작동하도록 설계되었습니다.

Snowpark ML Modeling API는 scikit-learn과 유사하지만 몇 가지 주요 차이점이 있습니다. 이 섹션에서는 Snowpark ML에서 제공하는 추정기 및 변환기 클래스에 대한 __init__ (생성자), fitpredict 메서드를 호출하는 방법을 설명합니다.

  • 모든 Snowpark ML Python 클래스의 생성자 는 scikit-learn, xgboost 또는 lightgbm의 동등한 클래스에서 허용되는 매개 변수 외에 input_cols, output_cols, sample_weight_col, label_cols, drop_input_cols 의 5개 추가 매개 변수를 허용합니다. 이들은 Snowpark 또는 Pandas DataFrame에서 입력 열, 출력 열, 샘플 가중치 열, 레이블 열의 이름을 지정하는 문자열 또는 문자열 시퀀스입니다.

  • Snowpark ML의 fitpredict 메서드는 입력 데이터, 레이블, 가중치를 나타내는 별도의 배열 대신 단일 DataFrame을 허용합니다. Snowpark ML 사용 시, 클래스를 인스턴스화할 때 이러한 목적으로 사용할 열의 이름을 지정하며, 이러한 이름은 DataFrame에서 fit 또는 predict 로 전달하는 필수적인 열을 찾는 데 사용됩니다. fitpredict 섹션을 참조하십시오.

  • Snowpark ML의 transformpredict 메서드는 추가 열에 저장된 예측의 출력과 함께 메서드에 전달된 DataFrame의 모든 열을 포함하는 DataFrame을 반환합니다. (동일한 입력 및 출력 열 이름을 지정하여 제자리에서 변환하거나 drop_input_cols = True 를 전달하여 입력 열을 삭제할 수 있습니다.) scikit-learn, xgboost 및 lightgbm와 동등한 라이브러리는 결과만 포함하는 배열을 반환합니다.

  • Snowpark Python 변환기에는 fit_transform 메서드가 없습니다. 하지만 scikit-learn과 마찬가지로, 매개 변수 유효성 검사는 fit 메서드에서만 수행되므로, 변환기가 피팅을 수행하지 않을 때도 transform 전의 어느 시점에서 fit 을 호출해야 합니다. fit 은 변환기를 반환하므로 메서드 호출이 연결될 수 있습니다(예: Binarizer(threshold=0.5).fit(df).transform(df)).

  • Snowpark ML 변환기에는 inverse_transform 메서드가 없습니다. 입력 및 출력 열에 대해 모두 같은 이름을 지정하여 원래 위치에서의 변환을 명시적으로 수행하지 않는 한 유지되는 입력 DataFrame의 입력 열에서 원래 표현을 계속 사용할 수 있으므로 Snowpark ML에서는 이 메서드가 필요하지 않습니다.

모델 생성하기

개별 scikit-learn 모델 클래스에서 허용하는 매개 변수 외에도, 모든 Snowpark ML Modeling 클래스는 인스턴스화할 때 다음 표에 나열된 추가 매개 변수를 5개 허용합니다.

이러한 매개 변수는 모두 기술적으로는 선택 사항이지만, 종종 input_colsoutput_cols 또는 둘 다 지정하려고 합니다. label_colssample_weight_col 은 표에 명시된 특정 상황에서 필요하지만 다른 경우에는 생략할 수 있습니다.

매개 변수

설명

input_cols

기능을 포함하는 열 이름을 나타내는 문자열 또는 문자열 목록입니다.

이 매개 변수를 생략하면 label_colssample-weight_col 매개 변수로 지정된 열을 제외한 입력 DataFrame의 모든 열이 입력 열로 간주됩니다.

label_cols

레이블이 포함된 열 이름을 나타내는 문자열 또는 문자열 목록입니다.

이러한 열을 유추하는 것은 불가능하므로 추정기에 대한 레이블 열을 지정해야 합니다. 이 매개 변수를 생략하면 모델이 변환기로 간주되어 레이블 없이 피팅됩니다.

output_cols

predicttransform 작업의 출력을 저장할 열 이름을 나타내는 문자열 또는 문자열 목록입니다. output_cols 의 길이는 사용된 특정 예측기 또는 변환기 클래스의 예상 출력 열 개수와 일치해야 합니다.

이 매개 변수를 생략하면 출력 열 이름은 레이블 열 이름에 OUTPUT_ 접두사를 추가하여 파생됩니다. 이렇게 유추된 출력 열 이름은 예측기에는 효과적이지만, 변환기에는 output_cols 를 명시적으로 설정해야 합니다. 특히 입력 열 이름을 지정하지 않을 경우 출력 열 이름을 명시적으로 지정하는 것이 더 명확합니다.

제자리에서 변환하려면 input_colsoutput_cols 에 대해 같은 이름을 전달하십시오.

sample_weight_col

예제의 가중치를 포함하는 열 이름을 나타내는 문자열입니다.

이 인자는 가중 데이터 세트에 필요합니다.

drop_input_cols

입력 열이 결과 DataFrame에서 제거되었는지 여부를 나타내는 부울 값입니다. 기본값은 False 입니다.

DecisionTreeClassifier 생성자는 scikit-learn에 필요한 인자가 없습니다. 모든 인자에는 기본값이 있습니다. 따라서 scikit-learn에서 다음과 같이 작성할 수 있습니다.

from sklearn.tree import DecisionTreeClassifier

model = DecisionTreeClassifier()
Copy

Snowpark ML에서 열 이름을 지정해야 합니다. 아니면 열 이름을 지정하지 않고 기본값을 수락해야 합니다. 이 예에서는 열 이름이 명시적으로 지정됩니다.

인자를 생성자에 직접 전달하거나 인스턴스화 후 인자를 모델의 특성으로 설정하여 Snowpark ML DecisionTreeClassifier 를 초기화할 수 있습니다. (특성은 언제든지 변경될 수 있습니다.)

  • 생성자 인자로 전달:

    from snowflake.ml.modeling.tree import DecisionTreeClassifier
    
    model = DecisionTreeClassifier(
        input_cols=feature_column_names, label_cols=label_column_names, sample_weight_col=weight_column_name,
        output_cols=expected_output_column_names
    )
    
    Copy
  • 모델 특성 설정:

    from snowflake.ml.modeling.tree import DecisionTreeClassifier
    
    model = DecisionTreeClassifier()
    model.set_input_cols(feature_column_names)
    model.set_label_cols(label_column_names)
    model.set_sample_weight_col(weight_column_name)
    model.set_output_cols(output_column_names)
    
    Copy

fit

Snowpark ML 분류자의 fit 메서드는 특징, 레이블, 가중치를 비롯한 모든 열이 포함된 단일 Snowpark 또는 Pandas DataFrame을 받습니다. 이는 특징, 레이블, 가중치에 대해 별도의 입력을 받는 scikit-learn의 fit 메서드와 다른 점입니다.

scikit-learn에서는 DecisionTreeClassifier.fit 메서드 호출이 다음과 같은 형태입니다.

model.fit(
    X=df[feature_column_names], y=df[label_column_names], sample_weight=df[weight_column_name]
)
Copy

Snowpark ML에서는 DataFrame만 전달하면 됩니다. 모델 생성하기 에 표시된 것처럼, 초기화 시 또는 setter 메서드를 사용하여 입력, 레이블 및 가중치 열 이름을 이미 설정했습니다.

model.fit(df)
Copy

predict

Snowpark ML 클래스의 predict 메서드는 모든 특징 열을 포함하는 단일 Snowpark 또는 Pandas DataFrame도 받습니다. 결과는 변경되지 않은 입력 DataFrame의 모든 열과 추가된 출력 열을 포함하는 DataFrame입니다. 이 DataFrame에서 출력 열을 추출해야 합니다. 이는 결과만 반환하는 scikit-learn의 predict 메서드와 다릅니다.

scikit-learn에서 predict 는 예측 결과만 반환합니다.

prediction_results = model.predict(X=df[feature_column_names])
Copy

Snowpark ML에서 예측 결과만 얻으려면 반환된 DataFrame에서 출력 열을 추출합니다. 여기서 output_column_names 는 출력 열의 이름을 포함하는 목록입니다.

prediction_results = model.predict(df)[output_column_names]
Copy

모델 배포 및 실행하기

모델 학습 결과는 Python Snowpark ML 모델 오브젝트입니다. 학습된 모델을 사용하여 모델의 predict 메서드를 호출함으로써 예측을 수행할 수 있습니다. 이렇게 하면 Snowflake 가상 웨어하우스에서 모델을 실행하기 위한 임시 사용자 정의 함수가 생성됩니다. 이 함수는 Snowpark ML 세션 종료 시(예: 스크립트가 종료되거나 Jupyter 노트북을 닫을 때) 자동으로 삭제됩니다.

세션이 종료된 후에도 사용자 정의 함수를 유지하려면 함수를 수동으로 생성할 수 있습니다. 자세한 내용은 이 항목의 빠른 시작 을 참조하십시오.

곧 출시될 기능인 Snowpark ML 모델 레지스트리도 영구 모델을 지원하고 모델을 더 쉽게 찾고 배포할 수 있게 해줍니다. 이 기능에 대한 설명서를 먼저 살펴보고 싶으신 분은 Snowflake 담당자에게 문의하십시오.

다중 변환을 위한 파이프라인

scikit-learn에서는 파이프라인을 사용하여 일련의 변환을 실행하는 것이 일반적입니다. scikit-learn 파이프라인은 Snowpark ML 클래스와 작동하지 않으므로 Snowpark ML은 일련의 변환을 실행하기 위해 sklearn.pipeline.Pipeline 의 Snowpark Python 버전을 제공합니다. 이 클래스는 snowflake.ml.modeling.pipeline 패키지에 있으며 scikit-learn 버전과 동일하게 작동합니다.

알려진 제한 사항

  • Snowpark ML 추정기와 변환기는 현재 희소 입력값이나 희소 응답을 지원하지 않습니다. 희소 데이터가 있는 경우 Snowpark ML의 추정기 또는 변환기에 전달하기 전에 조밀한 형식으로 변환하십시오.

  • Snowpark ML 패키지는 현재 행렬 데이터 타입을 지원하지 않습니다. 결과적으로 행렬을 생성하는 추정기 및 변환기에 대한 모든 작업은 실패합니다.

  • 결과 데이터의 행 순서가 입력 데이터의 행 순서와 일치하리라는 보장은 없습니다.

문제 해결

로깅에 세부 정보 추가하기

Snowpark ML은 Snowpark Python의 로깅을 사용합니다. 기본적으로 Snowpark ML은 INFO 수준 메시지를 표준 출력에 로그로 기록합니다. Snowpark ML 관련 문제를 해결하는 데 도움이 될 수 있는 더 자세한 로그를 얻으려면 수준을 지원되는 수준 중 하나로 변경할 수 있습니다.

DEBUG는 가장 세부적인 로그를 생성합니다. 로깅 수준을 DEBUG로 설정하려면 다음을 수행하십시오.

import logging, sys

logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
Copy

일반적인 문제에 대한 해결책

다음 표에서는 Snowflake ML Modeling과 관련하여 발생할 수 있는 문제를 해결하기 위한 몇 가지 제안 사항을 제시합니다.

문제 또는 오류 메시지

가능한 원인

해결책

《이름 x가 정의되지 않음》, ImportError 또는 ModuleNotFoundError와 같은 NameError

모듈 또는 클래스 이름에 오타가 있거나 Snowpark ML이 설치되어 있지 않습니다.

올바른 모듈 및 클래스 이름은 Snowpark ML Modeling 클래스 표를 참조하십시오. Snowpark ML 모듈이 설치되어 있는지 확인하십시오(Snowpark ML 설치하기 참조).

KeyError(《인덱스에 없음》 또는 《[인덱스[..]]가 [열]에 없음》)

열 이름이 잘못되었습니다.

열 이름을 확인하고 수정하십시오.

SnowparkSQLException, 《존재하지 않거나 권한이 없음》

테이블이 없거나 테이블에 대한 충분한 권한이 없습니다.

테이블이 존재하고 사용자의 역할에 권한이 있는지 확인하십시오.

SnowparkSQLException, 《유효하지 않은 식별자 PETALLENGTH》

열 수가 잘못되었습니다(보통은 열 누락).

모델 클래스를 만들 때 지정한 열 수를 확인하고 올바른 수를 전달해야 합니다.

InvalidParameterError

부적절한 유형 또는 값이 매개 변수로 전달되었습니다.

대화식 Python 세션에서 help 함수를 사용하여 클래스 또는 메서드의 도움말을 확인하고 값을 수정하십시오.

TypeError, 《예기치 않은 키워드 인자》

명명된 인자의 인쇄상 오류.

대화식 Python 세션에서 help 함수를 사용하여 클래스 또는 메서드의 도움말을 확인하고 인자 이름을 수정하십시오.

ValueError, 《샘플이 0개인 배열》

전달된 데이터 세트가 비어 있습니다.

데이터 세트가 비어 있지 않도록 하십시오.

SnowparkSQLException, 《인증 토큰이 만료됨》

세션이 만료되었습니다.

Jupyter 노트북을 사용 중인 경우 커널을 다시 시작하여 새 세션을 만드십시오.

《cannot convert string to float》와 같은 ValueError

데이터 타입 불일치.

대화식 Python 세션에서 help 함수를 사용하여 클래스 또는 메서드의 도움말을 확인하고 값을 수정하십시오.

SnowparkSQLException, 《임시 테이블을 생성할 수 없음》

호출자의 권한으로 실행되지 않는 저장 프로시저 내에서 모델 클래스가 사용되고 있습니다.

소유자 권한 대신 호출자 권한으로 저장 프로시저를 만드십시오.

SnowparkSQLException, 《function available memory exceeded》

데이터 세트가 표준 웨어하우스에서 5GB보다 큽니다.

Snowpark에 최적화된 웨어하우스 로 전환하십시오.

OSError, 《디바이스에 남은 공간이 없음》

모델이 표준 웨어하우스에서 약 500MB보다 큽니다.

Snowpark에 최적화된 웨어하우스 로 전환하십시오.

호환되지 않는 xgboost 버전 또는 xgboost를 가져올 때 오류 발생

종속성을 제대로 처리하지 못하는 pip 를 사용하여 설치했습니다.

오류 메시지의 요청에 따라 패키지를 업그레이드하거나 다운그레이드하십시오.

to_sklearn, to_xgboost 또는 to_lightgbm 과 관련된 AttributeError

다른 유형의 모델에서 이러한 방법 중 하나를 사용하려는 시도.

scikit-learn 기반 모델 등에 to_sklearn 을 사용하십시오.

추가 자료

해당 기능에 대한 전체 정보는 원본 라이브러리의 설명서를 참조하십시오.

감사의 말씀

이 문서의 일부는 BSD-3 《신규》 또는 《개정》 라이선스 및 Copyright © 2007-2023 The scikit-learn developers에 따라 라이선스가 부여된 Scikit-learn 설명서에서 파생되었습니다. All rights reserved.

이 문서의 일부는 Apache License 2.0(2004년 1월) 및 Copyright © 2019로 보호되는 XGboost 설명서에서 파생되었습니다. All rights reserved.

이 문서의 일부는 MIT 라이선스가 있고 Copyright © Microsoft Corp.로 보호되는 LightGBM 설명서에서 파생되었습니다. All rights reserved.