데이터 분석가는 어려운 일을 수행합니다. 이들은 조직 내 데이터의 폭발적인 증가에 발맞추기 위해 정확한 통찰력을 창출하는 데 필요한 작업과 빠른 의사 결정의 필요성 사이에서 균형을 맞춰야 합니다.

이들은 이상치(anomaly)를 빠르게 파악하고 설명해야 하기 때문에 귀중한 시간과 노력을 들여 데이터를 깊이 있게 분석해야 합니다. 기존의 일반 분석 도구는 분석가들의 일을 더 쉽게 만들어 주지만, 이들이 매일 마주하는 데이터의 양을 항상 따라잡지는 못합니다. 분석가는 이 모든 것을 관리하는 동시에 고급 분석에 사용되는 데이터가 안전하게 처리되고 있는지 확인하는 데 어려움을 겪고 있습니다.

머신 러닝(ML) 알고리즘은 이러한 과제 중 몇 가지를 해결할 수 있습니다. 그러나 프로그래밍 및 데이터 사이언스 지식 격차와 복잡한 컴퓨팅 인프라로 인해 분석가들은 ML을 채택하지 못하고 있습니다. 

Snowflake는 우리가 복잡한 ML 프레임워크의 일부를 간소화할 수 있다면 분석가들이 ML의 이점을 활용할 수 있게 될 것이라고 믿고 있습니다.

이것이 우리가 Summit 2023에서 몇 가지 ML 기반 함수의 공개 미리 보기 제공을 발표한 이유입니다. 이 친숙한 SQL 함수는 ML을 사용하여 분석가가 더 품질 높은 의사 결정을 더 빠르게 내릴 수 있도록 지원합니다. 이 블로그에서는 이러한 ML 기반 함수가 어떻게 작동하는지에 대해 자세히 알아보겠습니다.

예측

이제 분석가는 새로운 예측 기능을 통해 계절성, 스케일링 등을 자동으로 처리하여 더욱 정확한 시계열 예측을 작성할 수 있습니다.

// This shows training & prediction for revenues in daily_revenue_v
create snowflake.ml.forecast revenue_projector(
    input_data => SYSTEM$REFERENCE('VIEW', 'daily_revenue_v'),
    timestamp_colname => 'ts',
    target_colname => 'revenue'
);

// The model is now ready for prediction.
call revenue_projector!forecast(
    forecasting_periods => 30, // how far out to project!
    config_object => {'prediction_interval': 0.9} // optional range of values with this probability
); 

분석가는 이 기능을 통해 예측을 반복해서 생성하는 데 사용될 수 있는 ML 모델을 훈련시킬 수 있습니다. 예측을 사용하면 예측 추정치뿐만 아니라 예측 구간이라고 불리는 추정 범위까지 생성할 수 있습니다. 예측 구간은 예측이 포함될 것으로 예상되는 범위를 강조 표시합니다. 

이 기능을 사용하면 가령 분석가가 데이터 사이언스 팀에 도움을 요청하지 않고도 매장별 판매량을 정확하게 추정하여 미래 수익을 더 쉽게 예측할 수 있습니다.

이 밖에도 예측이 있으면 분석가가 단일 시계열이나 단일 시계열 내의 여러 범주(category)에 대한 예측을 생성할 수 있습니다. 예를 들어, 소매업에 종사하는 경우 여러 매장의 상품 총매출을 예측하는 대신 매장별 매출을 예측할 수 있습니다. 또 이러한 예측 기능을 사용하면 간단한 코드 한 줄을 추가하는 것만으로도 각 예측의 세분성을 높일 수 있습니다.

// Add series_colname to predict sales by category. 
create snowflake.ml.forecast revenue_projector_by_store(
    input_data => SYSTEM$REFERENCE('VIEW', 'daily_revenue_v'),
    timestamp_colname => 'ts',
    target_colname => 'revenue',
    series_colname => 'store_id'
);

// The model is now ready for prediction.
call revenue_projector_by_store!forecast(
    forecasting_periods => 30, // Predict sales for one month.
);

숫자형이나 범주형 등의 외생 변수를 포함시키면 예측의 품질을 더욱 개선할 수 있습니다. 예를 들어, 공휴일이 소매 판매량에 큰 영향을 미친다는 것을 알고 있는 경우 공휴일을 외생 변수로 포함하면 예측의 정확도가 개선됩니다. 

예측을 사용하면 4시간, 1일 또는 7일과 같은 커스텀 기간에 대한 예측을 생성할 수도 있습니다. 당사는 이러한 유연성이 사용자가 데이터 사이언스 팀에 도움을 요청하지 않고도 특정 니즈와 기간에 맞는 예측을 얻을 수 있도록 지원하기를 기대합니다. 

이상 감지

분석가가 ML을 사용하여 이상값을 식별하고 경고를 트리거할 수 있다면 어떨까요? 이제 새로운 이상 감지 기능을 사용하면 이가 실현됩니다. 분석가는 이 기능을 통해 의심스러운 활동이 있었는지 조사되어야 할 이상값 이벤트뿐만 아니라, 향후 분석에서 제외되어야 할 재발생 가능성이 낮은 상황도 찾을 수 있습니다.

이상 감지는 단일 시계열이나 단일 시계열 내의 여러 범주에 대한 이상치를 구체적으로 예측합니다. 이 ML 기반 이상 감지 방식은 이상값 식별을 위한 정적 임계치(static threshold) 대신 데이터에 대해 스마트하고 동적인 기준선을 생성하는 모델을 사용하고자 하는 경우에 유용합니다.

이 함수가 표시하는 위양성(false positive)의 수가 제어될 수 있도록, 이 함수를 사용하는 경우 이상치에 플래그를 지정하는 데 사용할 예측 간격의 크기를 조정할 수 있습니다. 그런 다음 아래와 같이 Snowflake 작업 및 이메일을 사용하면 이상치에 플래그가 지정될 경우 자동으로 알림을 받을 수도 있습니다.

-- Set up a task to train your model on a weekly basis.
create or replace task train_anomaly_detection_task 
warehouse = LARGE_WAREHOUSE
SCHEDULE = 'USING CRON 0 0 * * 0 America/Los_Angeles' -- Run at midnight every Sunday.
as EXECUTE IMMEDIATE
  $$
  begin
    create or replace snowflake.ml.ANOMALY_DETECTION my_model(input_data => SYSTEM$REFERENCE('VIEW', 'view_of_your_input_data'),
       timestamp_colname => 'ts',
       target_colname => 'y',
       label_colname => '');
  end;
  $$;

-- Start your task's execution.
alter task train_anomaly_detection_task resume;


-- Create a table to store your anomaly detection results.
create or replace table anomaly_detection_results (
    ts timestamp_ntz,
    y float,
    forecast float,
    lb float,
    ub float,
    is_anomaly boolean,
    percentile float,
    distance float
);


-- Call your model to detect anomalies on a daily basis. 
create or replace task detect_anomalies_task 
warehouse = LARGE_WAREHOUSE
SCHEDULE = 'USING CRON 0 0 * * * America/Los_Angeles' -- Run at midnight, daily.
as EXECUTE IMMEDIATE
  $$
  begin
    call my_model!detect_anomalies(
     input_data => SYSTEM$REFERENCE('VIEW', 'view_of_your_data_to_monitor'),
                  timestamp_colname =>'ts',
                  target_colname => 'y',
                  config_object => {'prediction_interval': 0.99});

    insert into anomaly_detection_results (ts, y, forecast, lb, ub, is_anomaly, percentile, distance)
        select * from table(result_scan(last_query_id()));
  end;
  $$;

-- Start your task's execution.
alter task detect_anomalies_task resume;


-- Setup alert based on the results from anomaly detection
CREATE OR REPLACE ALERT anomaly_detection_alert
  WAREHOUSE = LARGE_WAREHOUSE
  SCHEDULE = 'USING CRON 0 1 * * * America/Los_Angeles' -- Run at 1 am, daily.
  IF (EXISTS (select * from anomaly_detection_results where is_anomaly=True and ts > dateadd('day',-1,current_timestamp()))
  THEN 
  call SYSTEM$SEND_EMAIL(
        'SNOWML_ANOMALY_DETECTION_ALERTS',
        '[email protected]',
        'Anomaly Detected in data stream',
        concat(
            'Anomaly Detected in data stream',
            'Value outside of confidence interval detected'
        )
    );

-- Start your alert's execution.
alter alert anomaly_detection_alert resume;

기여도 탐색기

이제 분석가는 ML을 사용하여 서로 다른 두 개의 사용자 정의 시간 간격에 걸쳐 주어진 메트릭의 변동에 기여하는 차원(dimension)도 빠르게 식별할 수 있습니다. 분석가가 만약 매출이나 사용량과 같은 주요 비즈니스 메트릭에서 이상치를 발견한다면, 이상치에 기여한 요소를 파악하고 근본 원인을 찾고자 할 것입니다. 기여도 탐색기는 수백만 개의 차원과 그 값의 조합을 마이닝한 다음 가장 놀랄 만한 차원과 그 값을 찾습니다(‘세그먼트’라고 불림). 특정 지역의 특정 고객이 갑자기 제품 사용을 중단했다는 점을 예로 들 수 있습니다. 

사실 기여도 탐색기를 사용하면 집계된 수준에서 명백한 이상치가 없는 경우에도 정기적인 지표 분석으로 숨겨진 보석을 찾을 수 있습니다. 예를 들어, 매출에 이상이 없다고 하더라도 서로 다른 두 고객에 대한 매출이 동시에 증가하거나 감소했다는 사실을 발견할 수 있습니다.

with input as (
    select
       // Select dimensions to "mine"
       {   'country': input_table.dim_country,
            'vertical': input_table.dim_vertical
        } as categorical_dimensions,
        {  
        } as continuous_dimensions, // less common but available
        // This is the metric for comparison
        input_table.kpi,
        // Label control & test periods for comparison
        iff(ds between '2020-08-01' and '2020-08-20', TRUE, FALSE) as label
    from input_table
    where (ds between '2020-05-01' and '2020-05-20') 
    or (ds between '2020-08-01' and '2020-08-20')
)
// Now use the above data to compare contributions of dimension segments
select res.* from input, table(
snowflake.ml.top_insights(
    input.categorical_dimensions,
    input.continuous_dimensions,
    CAST(input.kpi as float),
    input.label
)
over (partition by 0)
) res order by res.relative_change desc;

무엇이 Snowflake의 ML 기반 기능을 특별하게 만드는가?

탄력성, 제로에 가까운 운영 필요성, 데이터 거버넌스 등

Snowflake의 ML 기반 함수를 사용하면 하나부터 수백만 개에 이르기까지 다양한 차원-값 조합에 맞춰 손쉽게 스케일링할 수 있습니다. 이 모든 것은 Snowflake 엔진의 탄력성과 거의 제로에 가까운 운영 필요성 덕분에 구현될 수 있었습니다. 더불어, 다른 SQL 함수처럼 데이터 파이프라인에 예측, 이상 감지와 기여도 탐색기에 대한 호출을 결합시키는 것도 가능합니다. 이러한 기능을 Snowflake 작업 및 알림과 함께 사용하면 매주 새로운 데이터가 들어올 때마다 새 모델을 자동으로 훈련하고, (필요에 따라) 매일 또는 매시간 예측을 생성하고, 조사가 필요한 이상치가 감지될 경우 알림을 받을 수 있습니다.

사용자가 ML 기반 함수를 어떻게 이용하든, Snowflake의 일관된 데이터 거버넌스가 함수 입력 및 출력 전반을 뒷받침합니다. 

다양한 ML 기능

ML 기반 함수는 데이터 사이언스에 중점을 둔 Snowpark ML 함수를 완벽하게 보완합니다. 전자는 분석가나 바쁜 의사 결정권자를 위해 최소한의 노력으로 모델 훈련, 평가 등을 처리하는 한편, 후자는 데이터 과학자가 자체 모델을 조립하는 데 사용할 수 있는 풍부하고 유연한 도구 상자를 제공합니다. 

이 두 가지 모두가 있다면, 문제의 성격과 사용자가 문제 해결을 위해 투입하고자 하는 데이터 과학적 노력에 따라 다양한 옵션을 선택할 수 있습니다.

시그마와 같은 BI 도구에서 머신 러닝을 위한 통찰력 추출

당사는 Snowflake의 ML 기반 함수를 지원하고 사용자 친화적인 인터페이스로 비즈니스 사용자가 ML에서 통찰력을 창출할 수 있도록 하는 BI 도구 시그마와 파트너 관계를 맺게 된 것을 자랑스럽게 생각합니다. 시그마는 Snowflake의 시계열 예측 및 기여도 탐색기에 대한 프런트 엔드(front-end) 지원을 제공합니다. 

Snowflake 계정에서 이러한 기능을 활성화하고 시그마 역할에 액세스 권한을 부여할 경우, 테이블 형식 및 시각적 분석을 위한 간편한 시작점을 제시하는 시그마 데이터세트를 사용할 수 있게 됩니다. 시계열 예측이나 기여도 탐색기를 사용하려면 원하는 테이블 또는 데이터 집합을 식별하고, 원하는 세분성에 따라 데이터를 그룹화하고, 탐색을 위한 종합적인 지표를 만드세요. 그런 다음 테이블을 준비하고, 웨어하우스 뷰를 만들고, 이에 대해 CustomSQL로 데이터 집합을 정의하고, 제공된 구문을 사용하여 해당 함수를 적용하세요. 

시계열 예측은 시간에 기반한 예측 집합을 출력합니다. 기여도 탐색기는 주요 메트릭이 커지는 데 가장 많이 기여한 세그먼트의 정렬된 목록을 제공합니다. 두 데이터 집합 모두 통합 워크북에 원활하게 통합할 수 있으며, 시각화, 탐색 및 다른 웨어하우스 테이블과의 조인(join)도 수행할 수 있습니다. 상호 작용을 향상시키려면 커스텀 SQL의 정적 변수를 매개 변수로 대체하여 사용자가 통합 문서 내에서 함수를 수정할 수 있게 하면 됩니다.

예측

기여도 탐색기

캡션: 이 그림에 표시된 데이터는 가상의 데이터로, 설명 목적으로만 제공됩니다.

이 데이터세트는 모든 워크북에서 원활하게 사용할 수 있으며, 시각화, 탐색 및 웨어하우스 내 다른 테이블과의 조인이 용이해 예상 미래 메트릭을 포괄적으로 이해하는 데 도움이 됩니다. 직접 사용해 보세요.

다음 단계 

당사는 고객 여러분이 피드백을 빠르게 보내주신 덕분에 위 기능을 확장하고, 여러 가지 기능을 새롭고 흥미로운 방식으로 확대할 수 있었습니다. 이상 감지 기능과 기여도 탐색기는 시계열 데이터로 시작되었지만 여기서 멈출 필요는 없습니다. 이는 고객 사이에서 이상값을 찾거나 사용자 집단을 비교하여 집단 간 차이에 기여하는 가장 흥미로운 세그먼트를 찾는 등, 기타 데이터에도 적용될 수 있습니다. 더불어, 당사는 ML 기반 함수가 다룰 수 있는 데이터의 범위를 넓히기 위해 노력하고 있습니다. 

Snowflake는 이러한 기능을 한층 더 발전시키기 위해 기능을 미리 사용해보고 피드백을 제공해 주실 고객님을 찾고 있습니다. 향후 미리 보기를 제공 즉시 사용해 보려면 계속 지켜봐 주시고, 계정 팀에 문의해 주세요. 그리고 여기에서 사용 사례를 공유해 주시면 감사하겠습니다. ML로 수행할 수 있는 일의 미래는 거의 무한합니다. 당사는 여러분이 계속 확장되는 ML 연구를 하나하나 확인하지 않고도 더 나은 비즈니스 결과를 내실 수 있도록 ML 기반 함수 기능을 확대할 계획입니다.

ML 기반 기능에 대해 자세히 알아보려면 Snowflake 설명서를 방문해 주세요.

참고: 이 내용은 2023. 6. 29에 게시된 컨텐츠(Snowflake’s ML-Powered Functions Enhance Speed and Quality of Decisions)에서 번역되었습니다.