Contribution Explorer (ML-basierte Snowflake Cortex-Funktionen)

Der Contribution Explorer dient der Vereinfachung und Optimierung des Ursachenanalyseprozesses bei Veränderungen in beobachteten Kennzahlen. Anhand der Werte einer bestimmten Kennzahl im Zeitverlauf analysiert der Contribution Explorer die Veränderungen in den Daten in Bezug auf diese Kennzahl und ermittelt, welche Datensegmente für die jeweilige Veränderung verantwortlich sind.

Bemerkung

Der Contribution Explorer ist Teil von Snowflake Cortex, dem intelligenten, vollständig verwalteten KI- und ML-Dienst von Snowflake. Dieses Feature ist Teil der ML-basierten Funktionssuite Snowflake Cortex.

Wenn Sie z. B. Ihre Umsätze verfolgen, kann Ihnen der Contribution Explorer helfen, die Standorte, Verkäufer, Kunden, Branchen und andere Faktoren zu identifizieren, die zu Umsatzeinbußen führen. Dann können Sie sofort und gezielt Korrekturmaßnahmen ergreifen.

Gute Kandidaten-Datensets für die Analyse mit Contribution Explorer haben die folgenden Eigenschaften:

  • Eine oder mehrere streng nicht-negative Kennzahlen. Die Änderung der Kennzahl von einer Zeile zur nächsten kann negativ sein, aber die Kennzahl selbst darf es nie sein.

  • Einer oder mehrere Zeitstempel.

  • Spalten oder Dimensionen, die zum Segmentieren der Daten verwendet werden können. Diese sind oft kategorial (Standort, Marktsegment usw.), können aber auch kontinuierlich sein (d. h. quantitativ, wie z. B. Temperatur oder Besucherzahlen).

Um den Contribution Explorer direkt in Ihren Abfragen und Pipelines zu verwenden, rufen Sie die Tabellenfunktion TOP_INSIGHTS auf. Diese Funktion findet die wichtigsten Dimensionen in einem Datenset, erstellt dann Segmente aus diesen Dimensionen und erkennt, welche dieser Segmente die Kennzahl beeinflusst haben.

Tipp

Um den Contribution Explorer für die Analyse einer Dashboard-Abfrage zu verwenden, müssen Sie möglicherweise Dimensionsspalten hinzufügen, die Sie normalerweise nicht in Ihre Abfrage aufnehmen würden, wenn Sie eine Kennzahl über alle Dimensionen hinweg aggregieren.

TOP_INSIGHTS ist gut geeignet, um Ursachen aus Datensets mit einer großen Anzahl von Dimensionen zu extrahieren. Kontinuierliche Dimensionen werden ebenfalls unterstützt, und die Ergebnisse können Dimensionen mit negativen Bedingungen anzeigen (z. B. „Region ist nicht Nordamerika“).

Die Ergebnisse von TOP_INSIGHTS sind die Dimensionen, die zur Abweichung in den Daten beitragen.

Wichtig

Rechtlicher Hinweis Diese ML-basierte Snowflake Cortex-Funktion wird durch Machine Learning-Technologie unterstützt. Die Machine Learning-Technologie und die bereitgestellten Ergebnisse können ungenau, unangemessen oder verzerrt sein. Entscheidungen auf der Grundlage von Ergebnissen aus Prozessen des maschinellen Lernens, einschließlich solcher, die in automatische Pipelines integriert sind, erfordern eine von Menschen durchgeführte Überwachung und Überprüfung, um sicherzustellen, dass die vom Modell generierten Inhalte korrekt sind. Die von ML-basierten Snowflake Cortex-Funktionen ausgeführten Abfragen werden wie alle anderen SQL-Abfragen behandelt, deren Metadaten untersucht werden können.

Metadaten. Wenn Sie ML-basierte Snowflake Cortex-Funktionen verwenden, protokolliert Snowflake allgemeine Fehlermeldungen, die von einer ML-Funktion zurückgegeben werden, zusätzlich zu dem, was in Metadatenfeldern erwähnt wird. Diese Fehlerprotokolle helfen uns, auftretende Probleme zu beheben und diese Funktionen zu verbessern, um unser Angebot für Sie zu optimieren.

Aktualisieren des Suchpfads

Wenn Sie SNOWFLAKE.ML zu Ihrem Suchpfad hinzufügen, können Sie in Ihren Abfragen nur TOP_INSIGHTS anstelle von SNOWFLAKE.ML.TOP_INSIGHTS verwenden. Die folgenden Anweisungen zeigen den Unterschied:

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

Um SNOWFLAKE.ML zu Ihrem Suchpfad hinzuzufügen, führen Sie Folgendes aus:

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

Die Änderung des Suchpfads bleibt während Ihrer Snowflake-Sitzung in Kraft. Um Ihren Suchpfad dauerhaft zu ändern, nehmen Sie die Änderung stattdessen auf Kontoebene vor:

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

Beispiel

Diese Beispielabfrage verwendet die Tabelle input_table. Eine Kontrollgruppe wird zum Trainieren des Modells verwendet, während die Testgruppe die Daten sind, über die Sie Erkenntnisse gewinnen möchten.

  1. Erstellen Sie die Tabelle:

    CREATE OR REPLACE TABLE input_table(
      ds DATE, metric NUMBER, dim_country VARCHAR, dim_vertical VARCHAR);
    
    Copy
  2. Fügen Sie die Datensätze der Kontroll- und der Testgruppe in die Tabelle ein:

    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

Beispielabfrage

Die folgende Beispielabfrage generiert die wichtigsten Erkenntnisse aus der oben definierten Tabelle 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

Bemerkung

Weitere Informationen zu den Argumenten der Funktion TOP_INSIGHTS finden Sie unter TOP_INSIGHTS.

Details der Beispielabfrage:

  • Die Spalten dim_country und dim_vertical aus der Eingabetabelle werden zu den Dimensionen 'country' und 'vertical'.

  • Eine kontinuierliche Dimension wird von der Länge des Wertes in der Spalte vertical der Eingabetabelle abgeleitet. Diese Spalte wird zur Dimension length_of_vertical.

  • Der Wert der Kennzahl steht in der Spalte 'metric'.

  • Die Beschriftung (die bestimmt, ob es sich bei einer bestimmten Zeile um Test- oder Kontrolldaten handelt) ist ein boolescher Ausdruck, der TRUE nur für Daten ist, die aus dem Zeitraum 1. August 2020 bis 20. August 2020 stammen.

  • Die WHERE-Klausel schränkt die berücksichtigten Zeilen auf die Kontroll- und Testbereiche ein.

  • Die OVER-Klausel (PARTITION BY 0) sorgt dafür, dass die tabellarischen Eingaben gemeinsam verarbeitet werden.

  • Das Ergebnis der Abfrage erhält den Namen res.

  • Die Ergebnisse werden nach ihrem Überraschungsgehalt geordnet, d. h. nach dem Betrag, um den die Testkennzahl im Segment ihren erwarteten Wert auf Basis der Kennzahländerung im übergeordneten Segment überschreitet.

Ergebnisse der Abfrage:

+--------------------------------+----------------+-------------+------------------+-----------------+--------------+----------------------+------------------------+---------------------+----------------------+-------------+-----------------+
| 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) ...

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

Hinweise zu Kosten

Die Verwendung der Funktion TOP_INSIGHTS verursacht Computekosten. Die Laufzeit hängt von der Anzahl der Dimensionen und der Kardinalität dieser Dimensionen ab. (Die Kardinalität wird automatisch reduziert, wenn eine Dimension eine Kardinalität von mehr als 5 hat.)

Allgemeine Informationen zu Snowflake-Computekosten finden Sie unter Erläuterungen zu den Computekosten.