Top Insights (Snowflake ML-Funktionen)

Top Insights ist eine ML-Funktion zur Analyse der wichtigsten Einflussfaktoren, die Ihnen dabei hilft, die Faktoren für die Veränderung einer Metrik im Laufe der Zeit zu identifizieren oder die Unterschiede einer Metrik zwischen verschiedenen Branchen zu erklären. Top Insights basiert auf einem Modell mit Entscheidungsbäumen, das ein Datenset in Segmente unterteilt, die ein unterschiedliches Verhalten in Bezug auf die zu analysierende Kennzahl aufweisen. Mit ein paar Zeilen SQL können Sie Top Insights in Ihre BI-Workflows integrieren, um automatisch die Segmente zu überwachen, die für Veränderungen in einer beliebigen Kennzahl verantwortlich sind.

Anwendungsfälle für Top Insights umfassen:

  • Zeitreihenanalyse: Identifizieren Sie die Faktoren für die Veränderung einer Kennzahl im Laufe der Zeit. Ermitteln Sie zum Beispiel automatisch die Speicherorte, Verkäufer, Kunden, Branchen und andere Faktoren, die für die jüngsten Umsatzeinbußen verantwortlich sind.

  • Vertikale Analyse: Identifizieren Sie die Faktoren für Unterschiede in einer Kennzahl zwischen verschiedenen Branchen. Zum Beispiel, um zu verstehen, welche Benutzersegmente für die Unterschiede im Wachstum neuer Benutzer zwischen den Vereinigten Staaten und EMEA-Ländern verantwortlich sind, um bei der Gestaltung gezielter Marketingkampagnen zu helfen.

Über Top Insights

Top Insights verwendet ein Modell mit Entscheidungsbäumen, das ein Datenset in Segmente unterteilt, die ein unterschiedliches Verhalten in Bezug auf die zu analysierende Kennzahl aufweisen. Der Algorithmus analysiert die Unterschiede zwischen der Kennzahl in der Kontrollgruppe und der Testgruppe.

  • Die Kontrollgruppe besteht aus den Datenpunkten, die das Modell als Basis verwenden wird.

  • Die Testgruppe besteht aus zu analysierenden Punkten von Interesse.

Top Insights erstellt dann eine Reihe möglicher Kombinationen von Mitwirkenden, die auf der Grundlage ihrer Bedeutung und Unterscheidungskraft gefiltert werden. Top Insights gibt keine redundanten Segmente zurück.

Gute Kandidatendatensätze für die Analyse mit Top Insights haben in der Regel eine große Anzahl von Spalten oder Dimensionen, die zur Segmentierung der Daten verwendet werden, sodass es schwierig ist, intuitiv zu erkennen, welche Segmente eine Metrik beeinflussen. Die Dimensionen können kategorial (Speicherort, Marktsegment usw.) oder kontinuierlich (d. h. quantitativ, wie z.B. Temperatur oder Besucherzahlen) sein.

Ein Top Insights-Modell ist ein Objekt auf Schemaebene. Sie benötigen nur eine Instanz, da die Instanz keinen Status enthält.

Tipp

Die Dimensionen werden anhand ihres Typs als kategorial oder kontinuierlich abgeleitet. Numerische Werte werden als kontinuierliche Dimensionen betrachtet, während Zeichenfolgen und boolesche Werte als kategorische Dimensionen angesehen werden. Um einen numerischen Wert als kategoriale Dimension zu verwenden, wandeln Sie ihn in eine Zeichenfolge um.

Erforderliche Berechtigungen

Eine TOP_INSIGHTS-Instanz ist ein Objekt auf Schemaebene. Daher muss die Rolle, mit der Sie die Instanz erstellen, über die Berechtigung CREATE SNOWFLAKE.ML.TOP_INSIGHTS für Schema verfügen, in der die Instanz erstellt wird. Diese Berechtigung ist vergleichbar mit anderen Schemaberechtigungen wie CREATE TABLE oder CREATE VIEW.

Wenn Sie nicht der Eigentümer der Instanz sind, müssen Sie über die Berechtigung USAGE verfügen, um die Methode GET_DRIVERS aufrufen zu können.

Verwenden von Top Insights

Um Top Insights in Ihren Abfragen und Pipelines zu verwenden, erstellen Sie zunächst eine Instanz der Klasse TOP_INSIGHTS (SNOWFLAKE.ML). Die folgende SQL-Anweisung erstellt eine Instanz mit dem Namen my_insights. Die Erstellung der Instanz erfordert keine Argument.

CREATE SNOWFLAKE.ML.TOP_INSIGHTS IF NOT EXISTS my_insights();
Copy

Nachdem Sie eine Instanz erstellt haben, können Sie die Methode GET_DRIVERS verwenden, um die Schlüsselfaktoren aus dem Datenset zu extrahieren, auf dem Sie eine Analyse der Schlüsselfaktoren durchführen möchten. Sie übergeben die Eingabedaten in einem Stück (eine Referenz auf eine einzelne Tabelle, Ansicht oder Abfrage) und geben die Namen der Metrik- und Beschriftungsspalten innerhalb der Eingabedaten als zusätzliche Argumente an. Kategoriale und kontinuierliche Dimensionen werden durch ihren Typ abgeleitet und müssen nicht explizit angegeben werden.

CALL my_insights!get_drivers (
  INPUT_DATA => TABLE(my_table),
  LABEL_COLNAME => 'label',
  METRIC_COLNAMe => 'sales');
Copy

Vorbereitung der Daten für Top Insights

Um Top Insights zu verwenden, stellen Sie sicher, dass Sie eine boolesche Beschriftungsspalte haben, die die Zeilen der Kontrollgruppe (beschriftet mit FALSE) von den Zeilen der Testgruppe (beschriftet mit TRUE) unterscheidet. Diese Spalte wird in der Regel von anderen Werten im Datenset abgeleitet, wie z. B. einem Zeitstempel oder dem Namen einer Vertikalen. Daher ist es üblich hierfür eine Ansicht zu erstellen. Die Ansicht ist auch ein guter Ort, um Spalten herauszufiltern, die nicht Teil Ihrer Analyse sind.

Das folgende Beispiel für eine Zeitreihenanalyse erstellt eine Ansicht mit einer Beschriftungsspalte auf der Basis eines Datumsbereichs. Insbesondere werden die Datensätze des letzten Monats als TRUE (Testdaten) und alle vorherigen Datensätze als FALSE (Kontrolldaten) gekennzeichnet. Top Insights kann dann die kontinuierlichen und kategorialen Dimensionen analysieren, die die Unterschiede in den Veränderungen von Monat zu Monat für die angegebene Kennzahl erklären.

CREATE VIEW input_table_time_series_label (
  ds, metric, dim_country, dim_vertical, label ) AS
  SELECT
    ds,
    metric,
    dim_country,
    dim_vertical,
    ds >= dateadd(month, -1, current_date) AS label
  FROM input_table;
Copy

Das folgende Beispiel für die vertikale Analyse erstellt eine Ansicht mit einer Beschriftungsspalte auf der Basis des Landes. Insbesondere werden Datensätze in nicht-US als TRUE und Datensätze in den USA als FALSE gekennzeichnet. Top Insights analysiert dann die kontinuierlichen und kategorialen Dimensionen, die Unterschiede in einer Kennzahl zwischen diesen Populationsgruppen erklären.

CREATE VIEW input_table_vertical_label (
  ds, metric,  dim_country, dim_vertical, label ) AS
  SELECT
    ds,
    metric,
    dim_country,
    dim_vertical,
    dim_country <> 'USA' as label
  FROM input_table;
Copy

Interpretation der Ergebnisse

Top Insights liefert eine Zeile für jedes Segment von Interesse, das es in Ihren Daten findet. Jede Zeile enthält eine Klartextbeschreibung des Segments, die mehrere Kriterien enthalten kann (z. B. „COUNTRY = Frankreich, nicht VERTICAL = Mode, nicht VERTICAL = Technik“ könnte ein einzelnes Segment beschreiben). Für jedes Segment liefert Top Insights die folgenden Werte, die angeben, wie viel das Segment zu den Veränderungen zwischen der Kontroll- und der Testgruppe beiträgt.

Ausgabespalte

Beschreibung

METRIC_CONTROL

Der Gesamtwert der Kennzahl im Kontrollzeitraum in einem bestimmten Segment.

METRIC_TEST

Der Gesamtwert der Kennzahl im Testzeitraum in einem bestimmten Segment.

CONTRIBUTION

Der absolute Einfluss des Segments auf die Veränderung der Kennzahl.

RELATIVE_CONTRIBUTION

Die Auswirkung des Segments als Anteil an der Gesamtveränderung der Kennzahl zwischen Test und Kontrolle.

GROWTH_RATE

Die Veränderung der Kennzahl in dem Segment als Anteil der Kennzahl in der Kontrollgruppe in dem Segment.

Der Beitrag, der relative Beitrag und die Wachstumsrate können negativ sein, was bedeutet, dass ein Segment einen negativen Einfluss hat.

Hinweise zu Kosten

Die Verwendung von Top Insights verursacht Computekosten. Die Ausführungszeit hängt von der Anzahl der verarbeiteten Zeilen und Dimensionen ab. Allgemeine Informationen zu den Snowflake-Computekosten finden Sie unter Rechenkosten verstehen.

Die Leistung von Top Insights profitiert im Allgemeinen nicht davon, ein größeres Warehouse zu verwenden als nötig ist, um alle zu analysierenden Daten zu laden, die in den Speicher passen müssen. Datensets, die mehr als etwa 1.000.000 Zeilen und 1.000 Spalten umfassen, können den Speicher erschöpften. Snowflake empfiehlt die Verwendung eines Snowpark-optimierten Warehouses anstelle eines größeren Standard-Warehouses. Snowpark-optimierte Warehouses haben mehr Speicher als Standard-Warehouses der entsprechenden Größe.

Instanzen der Klasse Top Insights sind zwar Objekte auf Schemaebene, aber sie speichern keine Daten und haben nur einen vernachlässigbaren Einfluss auf die Speicherkosten.

Beispiele

Die folgenden Beispiele zeigen, wie Sie Top Insights für Zeitreihenanalysen und vertikale Analysen verwenden können.

Beispiel einer Zeitreihenanalyse

In diesem Beispiel werden die Segmente ermittelt, die zu den Unterschieden in der Metrik zwischen zwei Zeiträumen beitragen, insbesondere, wie die Länder- und die vertikale Dimension die Metrik nach 2021 beeinflussen.

Erstellen Sie die Eingabetabelle mit den synthetischen Daten für dieses Beispiel mit den folgenden SQL-Anweisungen.

CREATE OR REPLACE TABLE input_table(
  ds DATE, metric NUMBER, dim_country VARCHAR, dim_vertical VARCHAR);

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

Erstellen Sie eine Ansicht mit einer Beschriftungsspalte auf der Basis des Datumsstempels.

CREATE OR REPLACE VIEW input_view AS (
    SELECT
        metric,
        dim_country as country,
        dim_vertical as vertical,
        ds >= '2021-01-01' AS label
    FROM input_table
);
Copy

Analysieren Sie nun diese Daten, indem Sie die Methode GET_DRIVERS einer TOP_INSIGHTS-Instanz aufrufen.

CREATE OR REPLACE SNOWFLAKE.ML.TOP_INSIGHTS my_insights_model()

CALL my_insights_model!GET_DRIVERS(
  INPUT_DATA => TABLE(input_view),
  LABEL_COLNAME => 'label',
  METRIC_COLNAME => 'metric'
)
Copy

Die Ausgabe sieht folgendermaßen aus:

+---------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+---------------+
| CONTRIBUTOR                                                         | METRIC_CONTROL | METRIC_TEST | CONTRIBUTION | RELATIVE_CONTRIBUTION |   GROWTH_RATE |
|---------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+---------------|
| ["Overall"]                                                         |         128445 |      158456 |        30011 |         1             |  0.2336486434 |
| ["COUNTRY = usa"]                                                   |         116238 |      154574 |        38336 |         1.277398287   |  0.3298060875 |
| ["COUNTRY = usa","VERTICAL = finance"]                              |          64281 |       87423 |        23142 |         0.771117257   |  0.3600130676 |
| ["COUNTRY = usa","VERTICAL = auto"]                                 |          48930 |       66131 |        17201 |         0.5731565093  |  0.3515430206 |
| ["COUNTRY = usa","VERTICAL = tech"]                                 |           1543 |         503 |        -1040 |        -0.03465396021 | -0.6740116656 |
| ["COUNTRY = canada","VERTICAL = finance"]                           |           1538 |         482 |        -1056 |        -0.03518709806 | -0.6866059818 |
| ["COUNTRY = canada","VERTICAL = fashion"]                           |           1519 |         446 |        -1073 |        -0.03575355703 | -0.7063857801 |
| ["COUNTRY = france","VERTICAL = auto"]                              |           1534 |         460 |        -1074 |        -0.03578687814 | -0.7001303781 |
| ["COUNTRY = usa","not VERTICAL = auto","not VERTICAL = finance"]    |           3027 |        1020 |        -2007 |        -0.06687547899 | -0.6630327056 |
| ["COUNTRY = france","not VERTICAL = fashion","not VERTICAL = tech"] |           3100 |         962 |        -2138 |        -0.07124054513 | -0.6896774194 |
| ["COUNTRY = france","not VERTICAL = fashion"]                       |           4687 |        1456 |        -3231 |        -0.1076605245  | -0.689353531  |
| ["COUNTRY = france"]                                                |           6202 |        1947 |        -4255 |        -0.1417813468  | -0.68606901   |
| ["not COUNTRY = usa"]                                               |          12207 |        3882 |        -8325 |        -0.2773982873  | -0.6819857459 |
+---------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+---------------+

Bemerkung

Da die Eingabedaten zufällig generiert werden, werden Ihre Ergebnisse von den obigen Ergebnissen abweichen.

Die Ausgabe ist nach CONTRIBUTION geordnet, wobei das Segment „Gesamt“ (Overall) immer an erster Stelle steht. Die CONTRIBUTOR-Spalte enthält ein Array mit Zeichenfolgen, die das Segment beschreiben. Die übrigen Spalten geben an, wie dieses Segment zum Kennzahlenwert beiträgt. Weitere Details dazu finden Sie unter Interpretation der Ergebnisse.

In der obigen Beispielausgabe hat allein die Tatsache, dass man sich in den Vereinigten Staaten aufhält, den größten Einfluss auf die Kennzahl. Zwei weitere Segmente, die auf den vertikalen Märkten für Finanzen und Automobile in den Vereinigten Staaten basieren, haben ebenfalls eine überdurchschnittliche Wirkung. Danach wird der Beitrag der Segmente negativ.

Beispiel für eine vertikale Analyse

Dieses Beispiel vergleicht die Credit-Nutzung von Unternehmen in zwei Regionen, USA und EMEA, mit dem Ziel zu verstehen, wie sich die Credit-Nutzung in jedem Segment zwischen den Regionen unterscheidet.

Erstellen Sie die Eingabetabelle mit den synthetischen Daten für dieses Beispiel mit den folgenden SQL-Anweisungen.

CREATE OR REPLACE TABLE vertical_input_table(
  region VARCHAR, industry VARCHAR, num_employee NUMBER, credits FLOAT);

INSERT INTO vertical_input_table
  SELECT
    'USA' as region,
    ['technology', 'finance', 'healthcare', 'consumer'][MOD(ABS(RANDOM()), 4)] as industry,
    UNIFORM(100, 10000, RANDOM()) as num_employee,
    UNIFORM(1000, 3000, RANDOM()) AS credits,
  FROM TABLE(GENERATOR(ROWCOUNT => 450));

INSERT INTO vertical_input_table
  SELECT
    'EMEA' as region,
    ['technology', 'finance', 'healthcare', 'consumer'][MOD(ABS(RANDOM()), 4)] as industry,
    UNIFORM(100, 10000, RANDOM()) as num_employee,
    UNIFORM(100, 5000, RANDOM()) AS credits,
  FROM TABLE(GENERATOR(ROWCOUNT => 350));
Copy

Erstellen Sie eine Ansicht mit einer Beschriftungsspalte auf der Basis der Region.

CREATE OR REPLACE VIEW vertical_input_view AS (
    SELECT
        credits,
        industry,
        num_employee,
        region = 'EMEA' AS label
    FROM vertical_input_table
);
Copy

Analysieren Sie nun diese Daten, indem Sie die Methode GET_DRIVERS einer TOP_INSIGHTS-Instanz aufrufen.

CREATE OR REPLACE SNOWFLAKE.ML.TOP_INSIGHTS my_insights_model();

CALL my_insights_model!get_drivers(
  INPUT_DATA => TABLE(vertical_input_view),
  LABEL_COLNAME => 'label',
  METRIC_COLNAME => 'credits'
);
Copy

Die Ausgabe sieht folgendermaßen aus:

+-------------------------------------------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+------------------+|
| CONTRIBUTOR                                                                                           | METRIC_CONTROL | METRIC_TEST | CONTRIBUTION | RELATIVE_CONTRIBUTION |      GROWTH_RATE |
|-------------------------------------------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+------------------|
| ["Overall"]                                                                                           |         896672 |      895326 |        -1346 |           1           |  -0.001501106313 |
| ["not INDUSTRY = consumer","NUM_EMPLOYEE <= 6248.0","NUM_EMPLOYEE > 4235.0"]                          |         141138 |       70337 |       -70801 |          52.601040119 |  -0.5016437813   |
| ["NUM_EMPLOYEE <= 6248.0","NUM_EMPLOYEE > 4235.0"]                                                    |         188770 |      127320 |       -61450 |          45.653789004 |  -0.3255284208   |
| ["not INDUSTRY = technology","NUM_EMPLOYEE <= 8670.0","NUM_EMPLOYEE > 7582.5"]                        |         100533 |       42925 |       -57608 |          42.799405646 |  -0.5730257726   |
| ["not INDUSTRY = consumer","NUM_EMPLOYEE <= 5562.5","NUM_EMPLOYEE > 4235.0"]                          |         103851 |       47052 |       -56799 |          42.198365527 |  -0.54692781     |
+-------------------------------------------------------------------------------------------------------+----------------+-------------+--------------+-----------------------+------------------+

Bemerkung

Da die Eingabedaten zufällig generiert werden, werden Ihre Ergebnisse von den obigen Ergebnissen abweichen.

Die Ausgabe ist nach CONTRIBUTION geordnet, wobei das Segment „Gesamt“ (Overall) immer an erster Stelle steht. Die Spalte CONTRIBUTOR enthält ein Array mit Zeichenfolgen, die das Segment beschreiben. Die übrigen Spalten beschreiben, wie dieses Segment zum Kennzahlenwert beiträgt. Weitere Details dazu finden Sie unter <instance_name>!GET_DRIVERS.

In der obigen Beispielausgabe können Sie sehen, dass die Segmente auf der Branche und der Anzahl der Mitarbeiter des Kunden basieren. Top Insights wählt solche Bereiche für kontinuierliche Dimensionen automatisch aus. Kunden ab einer bestimmten Größe (zwischen etwa 4.000 und 6.000 Mitarbeitern) scheinen sich überdurchschnittlich negativ auszuwirken.

Aktuelle Einschränkungen

  • Die Eingabekennzahl muss eine einzelne Beobachtung oder ein Aggregat sein.

  • Bei kategorialen Features mit mehr als 25 Werten verwendet Top Insights nur die 25 einflussreichsten Werte, um Segmente zu erstellen.

  • Die Verarbeitung von mehr als 100 Millionen Zeilen in einem einzigen Auftrag kann den Speicher erschöpfen, selbst mit Snowpark-optimierten Warehouses.