Contribution Explorer(Snowflake Cortex ML 기반 함수)

Contribution Explorer는 관찰된 메트릭의 변화와 관련된 근본 원인 분석 프로세스를 간소화하고 개선하도록 설계되었습니다. Contribution Explorer는 시간의 경과에 따라 일부 메트릭의 값을 가져와 해당 메트릭과 관련된 데이터의 변화를 분석하여 각각의 변화를 주도하는 데이터 세그먼트를 결정합니다.

참고

Contribution Explorer는 Snowflake의 지능적인 완전 관리형 AI 및 ML 서비스인 Snowflake Cortex의 일부입니다. 이 기능은 Snowflake Cortex ML 기반 함수 패키지의 일부입니다.

예를 들어 판매를 추적하는 경우 Contribution Explorer는 수익 부족이 주로 발생하는 위치, 판매원, 고객, 업종 및 기타 요인을 식별하는 데 도움이 될 수 있습니다. 그러면 즉각적이고 목표가 분명한 시정 조치를 취할 수 있습니다.

Contribution Explorer로 분석하기에 좋은 후보 데이터 세트는 다음과 같은 특징을 갖습니다.

  • 하나 이상의 엄밀하게 음수가 아닌 메트릭. 한 행에서 다음 행으로의 메트릭 변화량이 음수일 수는 있지만, 메트릭 자체가 결코 음수가 되면 안 됩니다.

  • 하나 이상의 타임스탬프.

  • 데이터 세분화에 사용할 수 있는 열 또는 차원. 이들은 종종 범주형이지만(위치, 시장 세그먼트 등), 연속형일 수도 있습니다(즉, 온도나 출석과 같은 정량적 데이터).

쿼리와 파이프라인에서 Contribution Explorer를 직접 사용하려면 TOP_INSIGHTS 테이블 함수를 호출하십시오. 이 함수는 데이터 세트에서 가장 중요한 차원을 찾고 해당 차원에서 세그먼트를 만든 다음, 이들 중 메트릭에 영향을 준 세그먼트를 검색합니다.

Contribution Explorer를 사용하여 대시보드 쿼리를 분석하려면 모든 차원에 걸쳐 메트릭을 집계할 때 일반적으로는 쿼리에 포함하지 않을 차원 열을 추가해야 할 수 있습니다.

TOP_INSIGHTS는 차원 수가 많은 데이터 세트에서 근본 원인을 파악하는 데 적합합니다. 연속형 차원도 지원되며 결과가 음수 조건(예: 《리전이 북미가 아님》)이 있는 차원을 나타낼 수 있습니다.

TOP_INSIGHTS의 결과는 데이터의 변동에 기여하는 차원입니다.

중요

법적 고지. 이 Snowflake Cortex ML 기반 함수는 머신 러닝 기술을 기반으로 합니다. 제공된 머신 러닝 기술 및 결과는 부정확하거나 부적절하거나 편향될 수 있습니다. 자동 파이프라인에 내장된 결과를 포함하여 머신 러닝 출력을 기반으로 한 의사 결정에는 모델 생성 콘텐츠가 정확하도록 보장하기 위해 사람의 감독 및 검토 프로세스가 있어야 합니다. Snowflake Cortex ML 기반 함수 쿼리는 다른 SQL 쿼리로 처리되며 메타데이터 로 간주될 수 있습니다.

메타데이터. Snowflake Cortex ML 기반 함수를 사용하면 Snowflake는 메타데이터 필드 에 언급된 내용 외에 ML 함수에서 반환된 일반 오류 메시지를 로그에 기록합니다. 이러한 오류 로그는 발생하는 문제를 해결하고 이러한 함수를 개선하여 더 나은 서비스를 제공하는 데 도움이 됩니다.

검색 경로 업데이트하기

SNOWFLAKE.ML을 검색 경로에 추가하면 쿼리에서 SNOWFLAKE.ML.TOP_INSIGHTS 대신 그냥 TOP_INSIGHTS를 쓸 수 있습니다. 아래 문에서 그 차이점을 확인할 수 있습니다.

SELECT SNOWFLAKE.ML.TOP_INSIGHTS(...);
SELECT TOP_INSIGHTS(...);
Copy

검색 경로에 SNOWFLAKE ML을 추가하려면 다음을 실행하십시오.

ALTER SESSION SET SEARCH_PATH='$current, $public, SNOWFLAKE.ML';
Copy

이러한 검색 경로 변경은 Snowflake 세션 중에는 계속 적용됩니다. 검색 경로를 지속적으로 변경하려면 그 대신 계정 수준에서 경로를 설정하십시오.

USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET SEARCH_PATH='$current, $public, SNOWFLAKE.ML';
Copy

이 예시 쿼리는 input_table 테이블을 사용합니다. 대조군은 모델 학습에 사용되고 실험군은 인사이트를 얻고 싶은 데이터입니다.

  1. 테이블 만들기:

    CREATE OR REPLACE TABLE input_table(
      ds DATE, metric NUMBER, dim_country VARCHAR, dim_vertical VARCHAR);
    
    Copy
  2. 대조군 및 실험군 레코드를 테이블에 삽입합니다.

    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));
    
    Copy

예제 쿼리

아래 예제 쿼리는 위에서 정의한 테이블 input_table 에서 최고의 인사이트를 생성합니다.

WITH input AS (
  SELECT
    {
      'country': input_table.dim_country,
      'vertical': input_table.dim_vertical
    }
    AS categorical_dimensions,
    {
         'length_of_vertical': length(input_table.dim_country)
    }
    AS continuous_dimensions,
    input_table.metric,
    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')
)
SELECT res.* from input, TABLE(
  SNOWFLAKE.ML.TOP_INSIGHTS(
    input.categorical_dimensions,
    input.continuous_dimensions,
    CAST(input.metric AS FLOAT),
    input.label
  )
  OVER (PARTITION BY 0)
) res ORDER BY res.surprise DESC;
Copy

참고

TOP_INSIGHTS 함수의 인자에 대한 정보는 TOP_INSIGHTS 섹션을 참조하십시오.

예시 쿼리의 세부 정보:

  • 입력 테이블에서 dim_countrydim_vertical 열은 'country''vertical' 차원이 됩니다.

  • 연속형 차원은 입력 테이블의 vertical 열에 있는 값의 길이에서 파생됩니다. 이 열은 length_of_vertical 차원이 됩니다.

  • 메트릭 값은 'metric' 열에 있습니다.

  • 레이블(주어진 행이 실험군 데이터인지 대조군 데이터인지 결정)은 2020년 8월 1일부터 2020년 8월 20일까지의 날짜에 대해서만 TRUE인 부울 식입니다.

  • WHERE 절은 고려 대상 행을 대조군 범위와 실험군 범위로 제한합니다.

  • OVER(PARTITION BY 0) 절은 테이블 형식 입력값이 함께 처리되도록 보장합니다.

  • 쿼리 결과에 이름 res 가 지정됩니다.

  • 결과의 순위는 의외성을 기준으로 매겨지는데, 의외성은 상위 세그먼트의 메트릭 변화를 기반으로 세그먼트의 테스트 메트릭이 예상 값을 초과하는 양을 나타냅니다.

쿼리 결과:

+--------------------------------+----------------+-------------+------------------+-----------------+--------------+----------------------+------------------------+---------------------+----------------------+-------------+-----------------+
| CONTRIBUTOR                    | METRIC_CONTROL | METRIC_TEST |         SURPRISE | RELATIVE_CHANGE | GROWTH_RATE  | EXPECTED_METRIC_TEST | OVERALL_METRIC_CONTROL | OVERALL_METRIC_TEST | OVERALL_GROWTH_RATE  | NEW_IN_TEST | MISSING_IN_TEST |
|--------------------------------+----------------+-------------+------------------+-----------------+--------------+----------------------+------------------------+---------------------+----------------------+-------------+-----------------|
| [                              |            105 |        8327 |   7022.967741935 |     6.385578231 | 79.304761905 |       1304.032258065 |                   1271 |               15785 |         79.304761905 | False       | False           |
|   "country = usa",             |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
|   "vertical = finance"         |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
| ]                              |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
| [                              |            105 |        8327 |   7022.967741935 |     6.385578231 | 79.304761905 |       1304.032258065 |                   1271 |               15785 |         79.304761905 | False       | False           |
|   "not country = canada",      |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
|   "length_of_vertical <= 4.5", |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
|   "vertical = finance"         |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |
| ]                              |                |             |                  |                 |              |                      |                        |                     |                      |             |                 |

... (additional rows of output) ...

+--------------------------------+----------------+-------------+------------------+-----------------+--------------+----------------------+------------------------+---------------------+----------------------+-------------+-----------------+

비용 고려 사항

TOP_INSIGHTS 함수를 사용하면 컴퓨팅 비용이 발생합니다. 런타임은 차원의 수와 해당 차원의 카디널리티에 따라 가변적입니다. (차원에 5보다 큰 카디널리티가 있는 경우 카디널리티가 자동으로 줄어듭니다.)

Snowflake 컴퓨팅 비용에 대한 일반적인 정보는 컴퓨팅 비용 이해하기 섹션을 참조하십시오.